app/Plugin/KokokaraSelect/EventSubscriber/AdminOrderEditEventSubscriber.php line 196

Open in your IDE?
  1. <?php
  2. /**
  3.  * Copyright(c) 2020 SYSTEM_KD
  4.  * Date: 2020/05/29
  5.  */
  6. namespace Plugin\KokokaraSelect\EventSubscriber;
  7. use Doctrine\Common\Collections\ArrayCollection;
  8. use Eccube\Entity\Master\OrderItemType;
  9. use Eccube\Entity\Order;
  10. use Eccube\Event\EccubeEvents;
  11. use Eccube\Event\EventArgs;
  12. use Eccube\Event\TemplateEvent;
  13. use Eccube\Repository\OrderItemRepository;
  14. use Plugin\KokokaraSelect\Form\Type\Admin\KsSelectItemSearchType;
  15. use Plugin\KokokaraSelect\Service\KsOrderItemService;
  16. use Plugin\KokokaraSelect\Service\KsOrderMailService;
  17. use Plugin\KokokaraSelect\Service\KsService;
  18. use Plugin\KokokaraSelect\Service\TwigRenderService\EventSubscriber\TwigRenderTrait;
  19. use Plugin\KokokaraSelect\Service\VersionHelperTrait;
  20. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  21. use Symfony\Component\Form\FormFactoryInterface;
  22. class AdminOrderEditEventSubscriber implements EventSubscriberInterface
  23. {
  24.     use TwigRenderTrait;
  25.     use VersionHelperTrait;
  26.     /** @var FormFactoryInterface */
  27.     protected $formFactory;
  28.     protected $ksService;
  29.     /** @var KsOrderItemService */
  30.     protected $ksOrderItemService;
  31.     /** @var OrderItemRepository */
  32.     protected $orderItemRepository;
  33.     public function __construct(
  34.         FormFactoryInterface $formFactory,
  35.         KsService $ksService,
  36.         KsOrderItemService $ksOrderItemService,
  37.         OrderItemRepository $orderItemRepository
  38.     )
  39.     {
  40.         $this->formFactory $formFactory;
  41.         $this->ksService $ksService;
  42.         $this->ksOrderItemService $ksOrderItemService;
  43.         $this->orderItemRepository $orderItemRepository;
  44.     }
  45.     /**
  46.      * 受注編集画面テンプレート
  47.      *
  48.      * @param TemplateEvent $event
  49.      */
  50.     public function onTemplateAdminOrderEdit(TemplateEvent $event)
  51.     {
  52.         $this->initRenderService($event);
  53.         // 選択商品用情報追加
  54.         $child $this->twigRenderService
  55.             ->eachChildBuilder()
  56.             ->findThis()
  57.             ->find('td')
  58.             ->eq(0)
  59.             ->targetFindAndIndexKey('#kokokara_select_''kokokaraSelectIndex')
  60.             ->setInsertModeAppend();
  61.         $this->twigRenderService
  62.             ->eachBuilder()
  63.             ->find('#table-form-field')
  64.             ->find('tbody > tr')
  65.             ->setEachIndexKey('kokokaraSelectIndex')
  66.             ->each($child->build());
  67.         // 商品検索モーダル
  68.         $this->createInsertBuilder()
  69.             ->find('#addProduct')
  70.             ->setTargetId('addKokokaraSelectProduct')
  71.             ->setInsertModeAfter();
  72.         $this->addTwigRenderSnippet(
  73.             '@KokokaraSelect/admin/Order/kokokara_select_edit.twig',
  74.             '@KokokaraSelect/admin/Order/kokokara_select_edit_js.twig'
  75.         );
  76.         // Form追加
  77.         $builder $this->formFactory
  78.             ->createBuilder(KsSelectItemSearchType::class);
  79.         $form $builder->getForm();
  80.         $event->setParameter('searchKokokaraSelectProductModalForm'$form->createView());
  81.         // 選択受注判定
  82.         $TargetOrder $event->getParameter('Order');
  83.         if ($TargetOrder) {
  84.             // EC-CUBE 4.0.3 以降のみ固定選択商品の複数配送許可
  85.             if ($this->isMultipleVersion()) {
  86.                 $checkOption KsService::IS_KS_ORDER_NORMAL;
  87.             } else {
  88.                 // 4.0.2以下
  89.                 $checkOption KsService::IS_KS_ORDER_DEFAULT;
  90.             }
  91.             $selectOrder $this->ksService->isKsOrder($TargetOrder$checkOption);
  92.         } else {
  93.             $selectOrder false;
  94.         }
  95.         if ($TargetOrder->getId()) {
  96.             $OriginOrderItems $this->orderItemRepository->findBy(['Order' => $TargetOrder]);
  97.             $formCount count($OriginOrderItems);
  98.         } else {
  99.             $formCount 0;
  100.         }
  101.         $event->setParameter('ksFormIndexCount'$formCount);
  102.         $event->setParameter('KsSelectOrder'$selectOrder);
  103.     }
  104.     /**
  105.      * その他明細追加
  106.      *
  107.      * @param TemplateEvent $event
  108.      */
  109.     public function onAdminOrderOrderItemTypeTemplate(TemplateEvent $event)
  110.     {
  111.         /** @var ArrayCollection $OrderItemTypes */
  112.         $OrderItemTypes $event->getParameter('OrderItemTypes');
  113.         /** @var OrderItemType $targetOrderItemType */
  114.         $targetOrderItemType $this->ksOrderItemService->getKsOrderItemType();
  115.         /** @var OrderItemType $orderItemType */
  116.         foreach ($OrderItemTypes as $item) {
  117.             // 4.0.4以降の変更に対応
  118.             if (is_array($item)) {
  119.                 $orderItemType $item['OrderItemType'];
  120.             } else {
  121.                 $orderItemType $item;
  122.             }
  123.             if ($orderItemType->getId() == $targetOrderItemType->getId()) {
  124.                 $OrderItemTypes->removeElement($orderItemType);
  125.             }
  126.         }
  127.         $event->setParameter('OrderItemTypes'$OrderItemTypes);
  128.     }
  129.     /**
  130.      * 出荷登録
  131.      *
  132.      * @param TemplateEvent $event
  133.      */
  134.     public function onAdminOrderShippingTemplate(TemplateEvent $event)
  135.     {
  136.         $this->initRenderService($event);
  137.         // 選択商品用情報追加
  138.         $child $this->twigRenderService
  139.             ->eachChildBuilder()
  140.             ->findThis()
  141.             ->find('td')
  142.             ->eq(0)
  143.             ->targetFindAndIndexKey('#kokokara_select_''kokokaraSelectIndex')
  144.             ->setInsertModeAppend();
  145.         $this->twigRenderService
  146.             ->eachBuilder()
  147.             ->find('[id^=table-form-field_]')
  148.             ->find('tbody > tr')
  149.             ->setEachIndexKey('kokokaraSelectIndex')
  150.             ->each($child->build());
  151.         $this->addTwigRenderSnippet(
  152.             '@KokokaraSelect/admin/Order/kokokara_select_shipping_edit.twig',
  153.             '@KokokaraSelect/admin/Order/kokokara_select_shipping_edit_js.twig');
  154.     }
  155.     /**
  156.      * メール通知
  157.      *
  158.      * @param EventArgs $event
  159.      */
  160.     public function onAdminOrderMailIndexChange(EventArgs $event)
  161.     {
  162.         $request $event->getRequest();
  163.         if ($request->request->has('mode')) {
  164.             $mode $request->get('mode');
  165.             if ($mode == 'change' || $mode == 'confirm' || $mode == 'complete') {
  166.                 /** @var Order $order */
  167.                 $order $event->getArgument('Order');
  168.                 $mailMsg $order->getCompleteMailMessage();
  169.                 if (strpos($mailMsgKsOrderMailService::KOKOKARA_SELECT_ADD_MAIL_MSG) !== false) {
  170.                     // 処理不要
  171.                     return;
  172.                 }
  173.                 // 選択商品情報追加
  174.                 $order->appendCompleteMailMessage(KsOrderMailService::KOKOKARA_SELECT_ADD_MAIL_MSG);
  175.             }
  176.         }
  177.     }
  178.     public static function getSubscribedEvents()
  179.     {
  180.         return [
  181.             // 受注編集
  182.             '@admin/Order/edit.twig' => 'onTemplateAdminOrderEdit',
  183.             // その他明細追加
  184.             '@admin/Order/order_item_type.twig' => ['onAdminOrderOrderItemTypeTemplate'],
  185.             // 出荷登録
  186.             '@admin/Order/shipping.twig' => ['onAdminOrderShippingTemplate'],
  187.             // メール通知
  188.             EccubeEvents::ADMIN_ORDER_MAIL_INDEX_INITIALIZE => ['onAdminOrderMailIndexChange'],
  189.         ];
  190.     }
  191. }