app/Plugin/DeliveryCool42/Event/AdminOrderEvent.php line 79

Open in your IDE?
  1. <?php
  2. /*
  3. * Plugin Name : DeliveryCool4
  4. *
  5. * Copyright (C) BraTech Co., Ltd. All Rights Reserved.
  6. * http://www.bratech.co.jp/
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Plugin\DeliveryCool42\Event;
  12. use Eccube\Common\EccubeConfig;
  13. use Eccube\Entity\Master\OrderItemType;
  14. use Eccube\Event\EccubeEvents;
  15. use Eccube\Event\EventArgs;
  16. use Eccube\Event\TemplateEvent;
  17. use Eccube\Repository\BaseInfoRepository;
  18. use Eccube\Repository\DeliveryFeeRepository;
  19. use Eccube\Repository\OrderItemRepository;
  20. use Plugin\DeliveryCool42\Entity\DeliveryCoolConfig;
  21. use Plugin\DeliveryCool42\Repository\ConfigRepository;
  22. use Plugin\DeliveryCool42\Repository\DeliveryColdFeeRepository;
  23. use Plugin\DeliveryCool42\Repository\DeliveryCoolFeeRepository;
  24. use Plugin\DeliveryCool42\Service\DeliveryCoolService;
  25. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  26. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  27. use Symfony\Component\HttpFoundation\RequestStack;
  28. class AdminOrderEvent implements EventSubscriberInterface
  29. {
  30.     private $eventDispatcher;
  31.     private $eccubeConfig;
  32.     private $requestStack;
  33.     private $orderItemRepository;
  34.     private $BaseInfo;
  35.     private $deliveryFeeRepository;
  36.     private $deliveryCoolFeeRepository;
  37.     private $deliveryColdFeeRepository;
  38.     private $configRepository;
  39.     public function __construct(
  40.             EventDispatcherInterface $eventDispatcher,
  41.             EccubeConfig $eccubeConfig,
  42.             RequestStack $requestStack,
  43.             BaseInfoRepository $baseInfoRepository,
  44.             DeliveryFeeRepository $deliveryFeeRepository,
  45.             OrderItemRepository $orderItemRepository,
  46.             DeliveryCoolFeeRepository $deliveryCoolFeeRepository,
  47.             DeliveryColdFeeRepository $deliveryColdFeeRepository,
  48.             ConfigRepository $configRepository
  49.             )
  50.     {
  51.         $this->eventDispatcher $eventDispatcher;
  52.         $this->eccubeConfig $eccubeConfig;
  53.         $this->requestStack $requestStack;
  54.         $this->BaseInfo $baseInfoRepository->get();
  55.         $this->deliveryFeeRepository $deliveryFeeRepository;
  56.         $this->orderItemRepository $orderItemRepository;
  57.         $this->deliveryCoolFeeRepository $deliveryCoolFeeRepository;
  58.         $this->deliveryColdFeeRepository $deliveryColdFeeRepository;
  59.         $this->configRepository $configRepository;
  60.     }
  61.     /**
  62.      * @return array
  63.      */
  64.     public static function getSubscribedEvents()
  65.     {
  66.         return [
  67.             '@admin/Order/index.twig' => 'onTemplateAdminOrderIndex',
  68.             '@admin/Order/edit.twig' => 'onTemplateAdminOrderEdit',
  69.             '@admin/Order/shipping.twig' => 'onTemplateAdminShippingEdit',
  70.             EccubeEvents::ADMIN_ORDER_CSV_EXPORT_ORDER => 'hookAdminOrderCsvExport',
  71.         ];
  72.     }
  73.     public function onTemplateAdminOrderIndex(TemplateEvent $event)
  74.     {
  75.         $twig '@DeliveryCool42/admin/Order/shipping_index_cool_type.twig';
  76.         $event->addSnippet($twig);
  77.         $js '@DeliveryCool42/admin/Order/shipping_index_cool_type.js';
  78.         $event->addSnippet($js);
  79.     }
  80.     public function onTemplateAdminOrderEdit(TemplateEvent $event)
  81.     {
  82.         $request $this->requestStack->getMainRequest();
  83.         $parameters $event->getParameters();
  84.         $Order $parameters['Order'];
  85.         $form $parameters['form'];
  86.         if(count($Order->getShippings()) == 1){
  87.             $twig '@DeliveryCool42/admin/Order/order_cool_type.twig';
  88.             $event->addSnippet($twig);
  89.             $js '@DeliveryCool42/admin/Order/order_cool_type.js';
  90.             $event->addSnippet($js);
  91.         }
  92.         $Config $this->configRepository->find(['name' => 'method']);
  93.         $method DeliveryCoolConfig::FREE_ALL;
  94.         if($Config){
  95.             $method $Config->getValue();
  96.         }
  97.         $feeArray = [];
  98.         $feeTotal 0;
  99.         foreach($form['OrderItems'] as $index => $formItem){
  100.             $OrderItem $formItem->vars['value'];
  101.             if($OrderItem->getOrderItemType()->getId() == OrderItemType::DELIVERY_FEE){
  102.                 $fee 0;
  103.                 $Shipping $OrderItem->getShipping();
  104.                 if(is_null($Shipping))continue;
  105.                 $Delivery $Shipping->getDelivery();
  106.                 $Pref $Shipping->getPref();
  107.                 $DeliveryFee $this->deliveryFeeRepository->findOneBy([
  108.                     'Delivery' => $Delivery,
  109.                     'Pref' => $Pref,
  110.                 ]);
  111.                 if($DeliveryFee){
  112.                     $fee += $DeliveryFee->getFee();
  113.                 }
  114.                 $type $Shipping->getDeliveryCoolType();
  115.                 if($type == DeliveryCoolService::COOL_SHIPPING){
  116.                     $deliveryCoolFee $this->deliveryCoolFeeRepository->findOneBy([
  117.                         'Delivery' => $Delivery,
  118.                         'Pref' => $Pref
  119.                     ]);
  120.                     if($deliveryCoolFee){
  121.                         $fee += $deliveryCoolFee->getCoolFee();
  122.                     }
  123.                 }elseif($type == DeliveryCoolService::COLD_SHIPPING){
  124.                     $deliveryColdFee $this->deliveryColdFeeRepository->findOneBy([
  125.                         'Delivery' => $Delivery,
  126.                         'Pref' => $Pref
  127.                     ]);
  128.                     if($deliveryColdFee){
  129.                         $fee += $deliveryColdFee->getColdFee();
  130.                     }
  131.                 }
  132.                 $isFree false;
  133.                 $total 0;
  134.                 $quantity 0;
  135.                 $shippingOrderItems $this->orderItemRepository->findBy(['Shipping' => $Shipping]);
  136.                 foreach ($shippingOrderItems as $Item) {
  137.                     if($Item->getOrderItemType()->getId() == OrderItemType::PRODUCT){
  138.                         $total += $Item->getPriceIncTax() * $Item->getQuantity();
  139.                         $quantity += $Item->getQuantity();
  140.                     }
  141.                     if($Item->getOrderItemType()->getId() == OrderItemType::DELIVERY_FEE){
  142.                         $deliveryFeeItem $Item;
  143.                     }
  144.                 }
  145.                 // 送料無料(金額)を超えている
  146.                 if ($this->BaseInfo->getDeliveryFreeAmount()) {
  147.                     if ($total >= $this->BaseInfo->getDeliveryFreeAmount()) {
  148.                         $isFree true;
  149.                     }
  150.                 }
  151.                 // 送料無料(個数)を超えている
  152.                 if ($this->BaseInfo->getDeliveryFreeQuantity()) {
  153.                     if ($quantity >= $this->BaseInfo->getDeliveryFreeQuantity()) {
  154.                         $isFree true;
  155.                     }
  156.                 }
  157.                 $fee_event = new EventArgs(
  158.                     [
  159.                         'Shipping' => $Shipping,
  160.                         'isFree' => $isFree,
  161.                     ]
  162.                 );
  163.                 $this->eventDispatcher->dispatch$fee_event'deliverycool.delivery_free.condition');
  164.                 $isFree $fee_event->getArgument('isFree');
  165.                 $quantity null;
  166.                 if ($isFree) {
  167.                     if($method == DeliveryCoolConfig::FREE_ALL){
  168.                         $quantity 0;
  169.                     }elseif($method == DeliveryCoolConfig::FREE_REGULAR_ALL){
  170.                         if($DeliveryFee){
  171.                             if($fee $DeliveryFee->getFee()){
  172.                                 $fee -= $DeliveryFee->getFee();
  173.                                 $quantity 1;
  174.                             }else{
  175.                                 $quantity 0;
  176.                             }
  177.                         }
  178.                     }elseif($method == DeliveryCoolConfig::FREE_ADD_ALL){
  179.                         $type $Shipping->getDeliveryCoolType();
  180.                         if($type == DeliveryCoolService::COOL_SHIPPING){
  181.                             if(isset($deliveryCoolFee)){
  182.                                 if($fee $deliveryCoolFee->getCoolFee() > 0){
  183.                                     $fee -= $deliveryCoolFee->getCoolFee();
  184.                                     $quantity 1;
  185.                                 }else{
  186.                                     $quantity 0;
  187.                                 }
  188.                             }
  189.                         }elseif($type == DeliveryCoolService::COLD_SHIPPING){
  190.                             if(isset($deliveryColdFee)){
  191.                                 if($fee $deliveryColdFee->getColdFee() > 0){
  192.                                     $fee -= $deliveryColdFee->getColdFee();
  193.                                     $quantity 1;
  194.                                 }else{
  195.                                     $quantity 0;
  196.                                 }
  197.                             }
  198.                         }
  199.                     }
  200.                 }
  201.                 $feeArray[$index]['price'] = (int)$fee;
  202.                 $feeArray[$index]['quantity'] = $quantity;
  203.                 $feeTotal += $fee $quantity;
  204.                 if(isset($deliveryFeeItem)){
  205.                     if(is_null($quantity))$quantity $deliveryFeeItem->getQuantity();
  206.                     if($request->get('mode') == 'fee_calc'){
  207.                         $deliveryFeeItem->setPrice($fee);
  208.                         $deliveryFeeItem->setQuantity($quantity);
  209.                     }
  210.                 }
  211.             }
  212.         }
  213.         $parameters['feeArray'] = $feeArray;
  214.         $fee_calc 0;
  215.         if($request->get('mode') == 'fee_calc'){
  216.             $fee_calc 1;
  217.             $originFee $Order->getDeliveryFeeTotal();
  218.             $diffFee $originFee $feeTotal;
  219.             $Order->setDeliveryFeeTotal($feeTotal);
  220.             $Order->setTotal($Order->getTotal() - $diffFee);
  221.             $Order->setPaymentTotal($Order->getPaymentTotal() - $diffFee);
  222.         }
  223.         $parameters['fee_calc'] = $fee_calc;
  224.         $event->setParameters($parameters);
  225.         $twig '@DeliveryCool42/admin/Order/fee_calculate.twig';
  226.         $event->addSnippet($twig);
  227.         $js '@DeliveryCool42/admin/Order/fee_calculate.js';
  228.         $event->addSnippet($js);
  229.     }
  230.     public function onTemplateAdminShippingEdit(TemplateEvent $event)
  231.     {
  232.         $source $event->getSource();
  233.         if(preg_match("/\{\{\sform\_errors\(shippingForm\.Delivery\)\s\}\}[\n|\r\n|\r]\s*\<\/div\>[\n|\r\n|\r]\s*\<\/div\>/",$source$result)){
  234.             $search $result[0];
  235.             $replace file_get_contents($this->eccubeConfig->get('plugin_realdir'). '/DeliveryCool42/Resource/template/admin/Order/shipping_cool_type.twig');
  236.             $source str_replace($search$search $replace$source);
  237.         }
  238.         $event->setSource($source);
  239.     }
  240.     public function hookAdminOrderCsvExport(EventArgs $event)
  241.     {
  242.         $arrTYPE = [];
  243.         $arrTYPE[DeliveryCoolService::REGULAR_SHIPPING] = trans('deliverycool.const.shipping.temptype.normal');
  244.         $arrTYPE[DeliveryCoolService::COOL_SHIPPING] = trans('deliverycool.const.shipping.temptype.cool');
  245.         $arrTYPE[DeliveryCoolService::COLD_SHIPPING] = trans('deliverycool.const.shipping.temptype.cold');
  246.         $ExportCsvRow $event->getArgument('ExportCsvRow');
  247.         if ($ExportCsvRow->isDataNull()) {
  248.             $OrderItem $event->getArgument('OrderItem');
  249.             $Shipping $OrderItem->getShipping();
  250.             $Csv $event->getArgument('Csv');
  251.             if($Shipping){
  252.                 $csvEntityName str_replace('\\\\''\\'$Csv->getEntityName());
  253.                 if($csvEntityName == 'Eccube\Entity\Shipping' && $Csv->getFieldName() == 'delivery_cool_disp_name'){
  254.                     $type $Shipping->getDeliveryCoolType();
  255.                     if(is_null($type))return;
  256.                     $data $arrTYPE[$type];
  257.                     $ExportCsvRow->setData($data);
  258.                 }
  259.             }
  260.         }
  261.     }
  262. }