app/Plugin/TeikiOrder42/EventSubscriber/Controller/ShoppingControllerSubscriber.php line 201

Open in your IDE?
  1. <?php
  2. namespace Plugin\TeikiOrder42\EventSubscriber\Controller;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Eccube\Entity\Master\OrderStatus;
  5. use Eccube\Repository\OrderRepository;
  6. use Eccube\Repository\Master\OrderStatusRepository;
  7. use Eccube\Event\TemplateEvent;
  8. use Eccube\Event\EventArgs;
  9. use Eccube\Event\EccubeEvents;
  10. use Eccube\Service\CartService;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Component\DependencyInjection\ContainerInterface;
  13. use Plugin\TeikiOrder42\Entity\TeikiOrder;
  14. use Plugin\TeikiOrder42\Service\TeikiProductService;
  15. use Plugin\TeikiOrder42\Repository\Master\OrganizationRepository;
  16. use Plugin\TeikiOrder42\Repository\Master\ClaimTimesRepository;
  17. use Plugin\GmoPaymentGateway42\Repository\GmoOrderPaymentRepository;
  18. class ShoppingControllerSubscriber implements EventSubscriberInterface
  19. {
  20.     /**
  21.      * @var OrderRepository
  22.      */
  23.     private $orderRepository;
  24.     /**
  25.      * @var OrderStatusRepository
  26.      */
  27.     private $orderStatusRepository;
  28.     /**
  29.      * @var CartService
  30.      */
  31.     private $cartService;
  32.     /**
  33.      * @var EntityManagerInterface
  34.      */
  35.     private $entityManager;
  36.     /**
  37.      * @var TeikiProductService
  38.      */
  39.     private $teikiProductService;
  40.     /**
  41.      * @var OrganizationRepository
  42.      */
  43.     private $organizationRepository;
  44.     /**
  45.      * @var ClaimTimesRepository
  46.      */
  47.     private $claimTimesRepository;
  48.     /**
  49.      * @var GmoOrderPaymentRepository
  50.      */
  51.     private $gmoOrderPaymentRepository;
  52.     /**
  53.      * @var ContainerInterface
  54.      */
  55.     private $container;
  56.     /**
  57.      * Event constructor.
  58.      * @param OrderRepository $orderRepository
  59.      * @param OrderStatusRepository $orderStatusRepository
  60.      * @param CartService $cartService
  61.      * @param EntityManagerInterface $entityManager
  62.      * @param TeikiProductService $teikiProductService
  63.      * @param OrganizationRepository $organizationRepository
  64.      * @param ClaimTimesRepository $claimTimesRepository
  65.      * @param GmoOrderPaymentRepository $gmoOrderPaymentRepository
  66.      * @param ContainerInterface $container
  67.      */
  68.     public function __construct(
  69.         OrderRepository $orderRepository,
  70.         OrderStatusRepository $orderStatusRepository,
  71.         CartService $cartService,
  72.         EntityManagerInterface $entityManager,
  73.         TeikiProductService $teikiProductService,
  74.         OrganizationRepository $organizationRepository,
  75.         ClaimTimesRepository $claimTimesRepository,
  76.         GmoOrderPaymentRepository $gmoOrderPaymentRepository,
  77.         ContainerInterface $container
  78.     ) {
  79.         $this->orderRepository $orderRepository;
  80.         $this->orderStatusRepository $orderStatusRepository;
  81.         $this->cartService $cartService;
  82.         $this->entityManager $entityManager;
  83.         $this->teikiProductService $teikiProductService;
  84.         $this->organizationRepository $organizationRepository;
  85.         $this->claimTimesRepository $claimTimesRepository;
  86.         $this->gmoOrderPaymentRepository $gmoOrderPaymentRepository;
  87.         $this->container $container;
  88.     }
  89.     /**
  90.      * @return array
  91.      */
  92.     public static function getSubscribedEvents()
  93.     {
  94.         return [
  95.             'Shopping/login.twig' => ['DefaultShoppingLogin'1],
  96.             'Shopping/index.twig' => ['DefaultShoppingIndex'1],
  97.             'Shopping/confirm.twig' => ['DefaultShoppingConfirm'1],
  98.             EccubeEvents::FRONT_SHOPPING_COMPLETE_INITIALIZE => 'FrontShoppingCompleteInitialize',
  99.         ];
  100.     }
  101.     /**
  102.      * @param TemplateEvent $event
  103.      */
  104.     public function DefaultShoppingLogin(TemplateEvent $event)
  105.     {
  106.         $event->addSnippet('@TeikiOrder42/default/Shopping/login.twig');
  107.         $Cart $this->cartService->getCart();
  108.         $required_member_flg false;
  109.         if($Cart) {
  110.             foreach($Cart->getCartItems() as $CartItem) {
  111.                 if($CartItem->isProduct()){
  112.                     if($CartItem->getProductClass()->getSaleType()->getId() == 4) {
  113.                         $required_member_flg true;
  114.                         break;
  115.                     }
  116.                 }
  117.             }
  118.         }
  119.         $parameters $event->getParameters();
  120.         $parameters['required_member_flg'] = $required_member_flg;
  121.         $event->setParameters($parameters);
  122.     }
  123.     /**
  124.      * @param TemplateEvent $event
  125.      */
  126.     public function DefaultShoppingIndex(TemplateEvent $event)
  127.     {
  128.         $event->addSnippet('@TeikiOrder42/default/Shopping/index.twig');
  129.     }
  130.     /**
  131.      * @param TemplateEvent $event
  132.      */
  133.     public function DefaultShoppingConfirm(TemplateEvent $event)
  134.     {
  135.         $event->addSnippet('@TeikiOrder42/default/Shopping/confirm.twig');
  136.         $nextTeiki = [];
  137.         $Order $event->getParameter('Order');
  138.         if($Order) {
  139.             foreach($Order->getOrderItems() as $OrderItem){
  140.                 if($OrderItem->isProduct()){
  141.                     $TEIKI_PRODUCT_ID $this->container->getParameter('TEIKI_PRODUCT_ID');
  142.                     if($OrderItem->getProduct()->getId() == $TEIKI_PRODUCT_ID){
  143.                         $product_name $OrderItem->getProductName();
  144.                         $class_category_name1 $OrderItem->getClassCategoryName1();
  145.                         $num preg_replace('/[^0-9]/'''$class_category_name1);
  146.                         $year substr($num04);
  147.                         $month substr($num4);
  148.                         $base '1-'.$month.'-'.$year;
  149.                         $base_date_time1 = new \DateTime($base);
  150.                         $next_product_class_category2_date $base_date_time1->modify('+1 year');
  151.                         $next_class_category_name1 $next_product_class_category2_date->format('Y年n月号');
  152.                         $base_date_time2 = new \DateTime($base);
  153.                         $next_order_date $base_date_time2->modify('+10 month');
  154.                         $base_date_time2 = new \DateTime($base);
  155.                         $next_payment_date $base_date_time2->modify('+11 month');
  156.                         $class_category_name2 $OrderItem->getClassCategoryName2();
  157.                         $price_intax $OrderItem->getPrice() + $OrderItem->getTax();
  158.                         $nextTeiki = [
  159.                             'product_name' => $product_name ' ' $next_class_category_name1 .' '$class_category_name2,
  160.                             'price' => $price_intax,
  161.                             'order_date' => $next_order_date->modify('+19 day'),
  162.                             'payment_method' => $Order->getPaymentMethod(),
  163.                             'payment_date' => $next_payment_date->modify('+9 day'),
  164.                         ];
  165.                     }
  166.                 }
  167.             }
  168.         }
  169.         $parameters $event->getParameters();
  170.         $parameters['NextTeiki'] = $nextTeiki;
  171.         $event->setParameters($parameters);
  172.     }
  173.     public function FrontShoppingCompleteInitialize(EventArgs $event)
  174.     {
  175.         $Order $event->getArgument('Order');
  176.         if($Order) {
  177.             // 旧注文IDがあった場合は、そちらをキャンセルへ
  178.             if($Order->getOldTeikiOrderId()){
  179.                 $OldOrder $this->orderRepository->find($Order->getOldTeikiOrderId());
  180.                 if($OldOrder){
  181.                     $Cancel $this->orderStatusRepository->find(OrderStatus::CANCEL);
  182.                     $OldOrder->setOrderStatus($Cancel);
  183.                     $this->entityManager->persist($OldOrder);
  184.                 }
  185.             }
  186.             foreach($Order->getOrderItems() as $OrderItem ){
  187.                 if($OrderItem->isProduct() && $OrderItem->getProductClass()->getSaleType()->getId() == 4) {
  188.                     $ProductClass $OrderItem->getProductClass();
  189.                     $teiki_start_date $this->teikiProductService->getDBStartDate($ProductClass);
  190.                     $teiki_end_date $this->teikiProductService->getDBEndDate($ProductClass);
  191.                     $Customer $Order->getCustomer();
  192.                     $Customer->setTeikiUserFlg(1);
  193.                     $this->entityManager->persist($Customer);
  194.                     $Order->setTeikiFlg(1);
  195.                     $this->entityManager->persist($Order);
  196.                     //カード登録フラグを取得
  197.                     $register_card 0;
  198.                     $GmoOrderPayment $this->gmoOrderPaymentRepository->findOneBy(['order_id' => $Order->getId()]);
  199.                     if($GmoOrderPayment){
  200.                         if($GmoOrderPayment->getMemo01()){
  201.                             $GmoOrderPayment json_decode($GmoOrderPayment->getMemo01());
  202.                             if($GmoOrderPayment->payment_type == 1) {
  203.                                 $register_card 1;
  204.                             } else {
  205.                                 if($GmoOrderPayment->register_card){
  206.                                     $register_card 1;
  207.                                 }
  208.                             }
  209.                         }
  210.                     }
  211.                     //学割は自動更新フラグをfalse
  212.                     $auto_teiki_order_update_flg 1;
  213.                     if($ProductClass->getClassCategory2()->getId() == 19 || $ProductClass->getClassCategory2()->getId() == 20) {
  214.                         $auto_teiki_order_update_flg 0;
  215.                     }
  216.                     $TeikiOrder = new TeikiOrder();
  217.                     $TeikiOrder
  218.                     ->setOrder($Order)
  219.                     ->setTeikiStartDate(new \DateTime($teiki_start_date))
  220.                     ->setTeikiEndDate(new \DateTime($teiki_end_date))
  221.                     ->setOrganization($this->organizationRepository->find(0))
  222.                     ->setClaimTimes($this->claimTimesRepository->find(1))
  223.                     ->setClaimDate1($Order->getOrderDate())
  224.                     ->setClaimPrice1($Order->getPaymentTotal())
  225.                     ->setRegistCreditCard($register_card)
  226.                     ->setAutoTeikiOrderUpdateFlg($auto_teiki_order_update_flg);
  227.                     $this->entityManager->persist($TeikiOrder);
  228.                     $this->entityManager->flush();
  229.                     break;
  230.                 }
  231.             }
  232.         }
  233.     }
  234. }