app/Plugin/np42/Event.php line 192

Open in your IDE?
  1. <?php
  2. namespace Plugin\np42;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Eccube\Entity\Page;
  5. use Eccube\Entity\Payment;
  6. use Eccube\Event\EccubeEvents;
  7. use Eccube\Event\EventArgs;
  8. use Eccube\Event\TemplateEvent;
  9. use Eccube\Repository\PageRepository;
  10. use Plugin\np42\Entity\Config;
  11. use Plugin\np42\Entity\OrderNp;
  12. use Plugin\np42\Repository\ConfigRepository;
  13. use Plugin\np42\Service\Module\ModuleAtoneTransactionsRegister;
  14. use Plugin\np42\Service\Module\ModuleTransactionsRegister;
  15. use Plugin\np42\ValueObject\ServiceType;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. use Twig\Environment;
  18. class Event implements EventSubscriberInterface
  19. {
  20.     /** @var Environment */
  21.     protected Environment $twig;
  22.     /** * @var PageRepository */
  23.     protected PageRepository $pageRepository;
  24.     private ConfigRepository $configRepository;
  25.     private ModuleAtoneTransactionsRegister $moduleAtoneTransactionsRegister;
  26.     private ModuleTransactionsRegister $moduleTransactionsRegister;
  27.     /** @var EntityManagerInterface */
  28.     protected EntityManagerInterface $entityManager;
  29.     public function __construct(
  30.         Environment $twig,
  31.         PageRepository $pageRepository,
  32.         ConfigRepository $configRepository,
  33.         ModuleAtoneTransactionsRegister $moduleAtoneTransactionsRegister,
  34.         EntityManagerInterface $entityManager,
  35.         ModuleTransactionsRegister $moduleTransactionsRegister
  36.     ) {
  37.         $this->twig $twig;
  38.         $this->pageRepository $pageRepository;
  39.         $this->configRepository $configRepository;
  40.         $this->moduleAtoneTransactionsRegister $moduleAtoneTransactionsRegister;
  41.         $this->entityManager $entityManager;
  42.         $this->moduleTransactionsRegister $moduleTransactionsRegister;
  43.     }
  44.     /**
  45.      * @return array<string, mixed> The event names to listen to
  46.      */
  47.     public static function getSubscribedEvents()
  48.     {
  49.         return [
  50.             'Shopping/confirm.twig' => 'shoppingConfirm',
  51.             '@np42/default/Shopping/atone_confirm.twig' => 'atone',
  52.             EccubeEvents::ADMIN_ORDER_EDIT_INDEX_COMPLETE => 'adminOrderEditIndexComplete',
  53.         ];
  54.     }
  55.     public function adminOrderEditIndexComplete(EventArgs $event)
  56.     {
  57.         $Arguments       $event->getArguments();
  58.         /** @var \Eccube\Entity\Order $OriginOrder */
  59.         $OriginOrder     $Arguments['OriginOrder'];
  60.         /** @var \Eccube\Entity\Order $TargetOrder */
  61.         $TargetOrder     $Arguments['TargetOrder'];
  62.         $originPayment $OriginOrder->getPayment();
  63.         $targetPaymentMethod $TargetOrder->getPayment()->getMethodClass();
  64.         if ($originPayment instanceof Payment) {
  65.             // 管理画面 受注更新
  66.             $originPaymentMethod $originPayment->getMethodClass();
  67.             if ($originPaymentMethod === $targetPaymentMethod) {
  68.                 if (preg_match('/^Plugin\\\np42\\\Service\\\Method\\\Atone/'$targetPaymentMethod)
  69.                     || preg_match('/^Plugin\\\np42\\\Service\\\Method\\\TsudoAtone/'$targetPaymentMethod)
  70.                 ) {
  71.                     $md5 $this->moduleAtoneTransactionsRegister->makeAtoneOrderDetailMd5($TargetOrder);
  72.                     $TargetOrder->setOrderAtoneDetailMd5($md5);
  73.                     $this->entityManager->persist($TargetOrder);
  74.                     $this->entityManager->flush();
  75.                 }
  76.                 if (preg_match('/^Plugin\\\np42\\\Service\\\Method\\\Np/'$targetPaymentMethod)) {
  77.                     $md5 $this->moduleTransactionsRegister->makeNpOrderDetailMd5($TargetOrder);
  78.                     $TargetOrder->setOrderNpDetailMd5($md5);
  79.                     $this->entityManager->persist($TargetOrder);
  80.                     $this->entityManager->flush();
  81.                 }
  82.             }
  83.         } else {
  84.             // 管理画面 新規受注
  85.             if (preg_match('/^Plugin\\\np42\\\Service\\\Method\\\Atone/'$targetPaymentMethod)
  86.                 || preg_match('/^Plugin\\\np42\\\Service\\\Method\\\TsudoAtone/'$targetPaymentMethod)
  87.             ) {
  88.                 $md5 $this->moduleAtoneTransactionsRegister->makeAtoneOrderDetailMd5($TargetOrder);
  89.                 $TargetOrder->setOrderAtoneDetailMd5($md5);
  90.                 $this->entityManager->persist($TargetOrder);
  91.                 $this->entityManager->flush();
  92.             }
  93.             if (preg_match('/^Plugin\\\np42\\\Service\\\Method\\\Np/'$targetPaymentMethod)) {
  94.                 $md5 $this->moduleTransactionsRegister->makeNpOrderDetailMd5($TargetOrder);
  95.                 $TargetOrder->setOrderNpDetailMd5($md5);
  96.                 $OrderNp = new OrderNp();
  97.                 $OrderNp
  98.                     ->setOrder($TargetOrder)
  99.                     ->setAuthorizationResult('')
  100.                     ->setShopCode('')
  101.                     ->setShopTransactionNo('')
  102.                     ->setTransactionId('')
  103.                     ->setAuthoriHold('')
  104.                     ->setAmount((int)$TargetOrder->getPaymentTotal())
  105.                     ->setNpSettlementType('')
  106.                     ->setNpStatusId(OrderNp::NP_STATUS_NONE)
  107.                     ->setOrderNpDetailMd5($md5)
  108.                 ;
  109.                 $TargetOrder->addOrderNp($OrderNp);
  110.                 $this->moduleTransactionsRegister->npShoptransactionNoResiter($TargetOrder);
  111.                 $this->entityManager->persist($TargetOrder);
  112.                 $this->entityManager->flush();
  113.             }
  114.         }
  115.     }
  116.     public function shoppingConfirm(TemplateEvent $event)
  117.     {
  118.         $paymentMethod $event->getParameter('Order')->getPayment()->getMethodClass();
  119.         $service_type '';
  120.         if (preg_match('/^Plugin\\\np42\\\Service\\\Method\\\Atone/'$paymentMethod)) {
  121.             $service_type ServiceType::TYPE_ATONE;
  122.         }
  123.         if (preg_match('/^Plugin\\\np42\\\Service\\\Method\\\TsudoAtone/'$paymentMethod)) {
  124.             $service_type ServiceType::TYPE_TSU_DO_ATONE;
  125.         }
  126.         $Config $this->configRepository->get();
  127.         if (preg_match('/^Plugin\\\np42\\\Service\\\Method\\\Atone/'$paymentMethod)) {
  128.             if ((!$Config instanceof Config)
  129.                 || empty($Config->getAtoneSettlementUse())
  130.                 || is_null($Config->getAtoneProdMode())
  131.                 || empty($Config->getAtonePublicKey())
  132.                 || empty($Config->getAtonePrivateKey())
  133.             ) {
  134.                 $event->setParameter('np42_plugin_error''error');
  135.             }
  136.             // atoneボタンの設置
  137.             $event->addSnippet('@np42/default/Shopping/atone_confirm_button.twig');
  138.         }
  139.         if (preg_match('/^Plugin\\\np42\\\Service\\\Method\\\TsudoAtone/'$paymentMethod)) {
  140.             if ((!$Config instanceof Config)
  141.                 || empty($Config->getAtoneSettlementUse())
  142.                 || is_null($Config->getAtoneProdMode())
  143.                 || empty($Config->getAtonePublicKey())
  144.                 || empty($Config->getAtonePrivateKey())
  145.                 || empty($Config->getAtoneTsudoSettlementUse())
  146.             ) {
  147.                 $event->setParameter('np42_plugin_error''error');
  148.             }
  149.             // つど後払いボタンの設置
  150.             $event->addSnippet('@np42/default/Shopping/atone_confirm_button.twig');
  151.         }
  152.         if (preg_match('/^Plugin\\\np42\\\Service\\\Method\\\Np/'$paymentMethod)) {
  153.             if ((!$Config instanceof Config)
  154.                 || empty($Config->getNpSettlementUse())
  155.                 || is_null($Config->getNpProdMode())
  156.                 || empty($Config->getNpPublicKey())
  157.                 || empty($Config->getMerchantCode())
  158.                 || empty($Config->getSpCode())
  159.                 || empty($Config->getShippingCompany())
  160.             ) {
  161.                 $event->setParameter('np42_plugin_error''error');
  162.             } else {
  163.                 $event->setParameter('script_url'Config::MODULE_JS[$Config->getNpProdMode()]);
  164.                 $event->addAsset('@np42/default/Shopping/assets_js.twig');
  165.             }
  166.             $event->setParameter('npAtobaraiData'$this->moduleTransactionsRegister->create($event->getParameter('Order')));
  167.             // サービス
  168.             $event->setParameter('service_type'ServiceType::TYPE_NP);
  169.             $event->setParameter('pub_key'$Config->getNpPublicKey());
  170.             $event->setParameter('terminal_id'Config::TERMINAL_ID);
  171.             $event->addSnippet('@np42/default/Shopping/np_confirm_button.twig');
  172.         }
  173.     }
  174.     public function atone(TemplateEvent $event)
  175.     {
  176.         // meta.twig 対応 Page::EDIT_TYPE_USER -> Page::EDIT_TYPE_DEFAULT に変更
  177.         /** @var Page $Page */
  178.         $Page $this->pageRepository->newPage();
  179.         $Page->setEditType(Page::EDIT_TYPE_DEFAULT);
  180.         $this->twig->addGlobal('Page'$Page);
  181.         $event->addAsset('@np42/default/Shopping/assets_js.twig');
  182.     }
  183. }