app/Plugin/EccubePaymentLite4/EventListener/EventSubscriber/Admin/Order/OrderEditRequestEventSubscriber.php line 62

Open in your IDE?
  1. <?php
  2. namespace Plugin\EccubePaymentLite4\EventListener\EventSubscriber\Admin\Order;
  3. use Eccube\Entity\Order;
  4. use Eccube\Event\EccubeEvents;
  5. use Eccube\Event\EventArgs;
  6. use Plugin\EccubePaymentLite4\Entity\PaymentStatus;
  7. use Plugin\EccubePaymentLite4\Service\GmoEpsilonRequest\RequestCancelPaymentService;
  8. use Plugin\EccubePaymentLite4\Service\GmoEpsilonRequest\RequestSalesPaymentService;
  9. use Plugin\EccubePaymentLite4\Service\GmoEpsilonRequest\RequestShippingRegistrationService;
  10. use Plugin\EccubePaymentLite4\Service\Method\Reg_Credit;
  11. use Plugin\EccubePaymentLite4\Service\UpdatePaymentStatusService;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\Form\Form;
  14. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  15. class OrderEditRequestEventSubscriber implements EventSubscriberInterface
  16. {
  17.     /**
  18.      * @var RequestCancelPaymentService
  19.      */
  20.     private $requestCancelPaymentService;
  21.     /**
  22.      * @var SessionInterface
  23.      */
  24.     private $session;
  25.     /**
  26.      * @var UpdatePaymentStatusService
  27.      */
  28.     private $updatePaymentStatusService;
  29.     /**
  30.      * @var RequestSalesPaymentService
  31.      */
  32.     private $requestSalesPaymentService;
  33.     /**
  34.      * @var RequestShippingRegistrationService
  35.      */
  36.     private $requestShippingRegistrationService;
  37.     public function __construct(
  38.         RequestCancelPaymentService $requestCancelPaymentService,
  39.         RequestSalesPaymentService $requestSalesPaymentService,
  40.         RequestShippingRegistrationService $requestShippingRegistrationService,
  41.         UpdatePaymentStatusService $updatePaymentStatusService,
  42.         SessionInterface $session
  43.     ) {
  44.         $this->requestCancelPaymentService $requestCancelPaymentService;
  45.         $this->requestSalesPaymentService $requestSalesPaymentService;
  46.         $this->requestShippingRegistrationService $requestShippingRegistrationService;
  47.         $this->updatePaymentStatusService $updatePaymentStatusService;
  48.         $this->session $session;
  49.     }
  50.     public static function getSubscribedEvents()
  51.     {
  52.         return [
  53.             EccubeEvents::ADMIN_ORDER_EDIT_INDEX_COMPLETE => 'adminOrderEditIndexComplete',
  54.         ];
  55.     }
  56.     public function adminOrderEditIndexComplete(EventArgs $eventArgs)
  57.     {
  58.         /** @var Order $TargetOrder */
  59.         $TargetOrder $eventArgs->getArgument('TargetOrder');
  60.         // mapped => falseで定義しているため, フォームから決済ステータスを取得する.
  61.         /** @var Form $form */
  62.         $form $eventArgs->getArgument('form');
  63.         if ($eventArgs->getRequest()->attributes->get('_route') === 'admin_order_new') {
  64.             if ($TargetOrder->getPayment()->getMethodClass() !== Reg_Credit::class) {
  65.                 return;
  66.             }
  67.             $this->addWarningMessage('イプシロン決済サービスに登録済みクレジットカード決済登録は行っておりません。「決済を登録する」ボタンより決済処理を完了させてください。');
  68.             return;
  69.         }
  70.         // 決済ステータスが未入力の場合は処理を行なわない。
  71.         if (is_null($form->get('PaymentStatus')->getData())) {
  72.             return;
  73.         }
  74.         /** @var PaymentStatus $PaymentStatus */
  75.         $paymentStatusId $form->get('PaymentStatus')->getData()->getId();
  76.         // 受注登録(編集)画面
  77.         if ($paymentStatusId === PaymentStatus::CHARGED) {
  78.             $results $this
  79.                 ->requestSalesPaymentService
  80.                 ->handle($TargetOrder);
  81.             // リクエストの成否に関わらず、決済ステータスは更新する。
  82.             $this
  83.                 ->updatePaymentStatusService
  84.                 ->handle($TargetOrder$paymentStatusId);
  85.             $this->addSuccessMessage('受注情報の決済ステータスを「課金済み」に変更しました');
  86.             if ($results['status'] === 'OK') {
  87.                 $this->addSuccessMessage($results['message']);
  88.                 return;
  89.             }
  90.             $this->addWarningMessage($results['message']);
  91.             return;
  92.         }
  93.         if ($paymentStatusId === PaymentStatus::CANCEL) {
  94.             $results $this
  95.                 ->requestCancelPaymentService
  96.                 ->handle($TargetOrder);
  97.             // リクエストの成否に関わらず決済ステータスを更新する
  98.             $this
  99.                 ->updatePaymentStatusService
  100.                 ->handle($TargetOrder$paymentStatusId);
  101.             $this->addSuccessMessage('受注情報の決済ステータスを「キャンセル」に変更しました');
  102.             if ($results['status'] === 'OK') {
  103.                 $this->addSuccessMessage($results['message']);
  104.                 return;
  105.             }
  106.             $this->addWarningMessage($results['message']);
  107.             return;
  108.         }
  109.         if ($paymentStatusId === PaymentStatus::SHIPPING_REGISTRATION) {
  110.             $results $this
  111.                 ->requestShippingRegistrationService
  112.                 ->handle($TargetOrder);
  113.             // リクエストの成否に関わらず決済ステータスを更新する
  114.             $this
  115.                 ->updatePaymentStatusService
  116.                 ->handle($TargetOrder$paymentStatusId);
  117.             $this->addSuccessMessage('受注情報の決済ステータスを「出荷登録中」に変更しました');
  118.             if ($results['status'] === 'OK') {
  119.                 $this->addSuccessMessage($results['message']);
  120.                 return;
  121.             }
  122.             $this->addWarningMessage($results['message']);
  123.             return;
  124.         }
  125.         if ($paymentStatusId === PaymentStatus::TEMPORARY_SALES) {
  126.             $this
  127.                 ->updatePaymentStatusService
  128.                 ->handle($TargetOrder$paymentStatusId);
  129.             $this->addSuccessMessage('受注情報の決済ステータスを「仮売上」に変更しました');
  130.             return;
  131.         }
  132.         if ($paymentStatusId === PaymentStatus::UNPAID) {
  133.             $this
  134.                 ->updatePaymentStatusService
  135.                 ->handle($TargetOrder$paymentStatusId);
  136.             $this->addSuccessMessage('受注情報の決済ステータスを「未課金」に変更しました');
  137.             return;
  138.         }
  139.         if ($paymentStatusId === PaymentStatus::UNDER_REVIEW) {
  140.             $this
  141.                 ->updatePaymentStatusService
  142.                 ->handle($TargetOrder$paymentStatusId);
  143.             $this->addSuccessMessage('受注情報の決済ステータスを「審査中」に変更しました');
  144.             return;
  145.         }
  146.         if ($paymentStatusId === PaymentStatus::EXAMINATION_NG) {
  147.             $this
  148.                 ->updatePaymentStatusService
  149.                 ->handle($TargetOrder$paymentStatusId);
  150.             $this->addSuccessMessage('受注情報の決済ステータスを「審査NG」に変更しました');
  151.             return;
  152.         }
  153.     }
  154.     private function addSuccessMessage($message)
  155.     {
  156.         $this
  157.             ->session
  158.             ->getFlashBag()
  159.             ->add('eccube.admin.success'$message);
  160.     }
  161.     private function addWarningMessage($message)
  162.     {
  163.         $this
  164.             ->session
  165.             ->getFlashBag()
  166.             ->add('eccube.admin.warning'$message);
  167.     }
  168. }