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

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