<?php
/*
* Copyright(c) 2022 GMO Payment Gateway, Inc. All rights reserved.
* http://www.gmo-pg.com/
*/
namespace Plugin\GmoPaymentGatewaySubs42;
use Doctrine\ORM\EntityManagerInterface;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
use Eccube\Event\TemplateEvent;
use Eccube\Service\CartService;
use Plugin\GmoPaymentGateway42\Service\PaymentHelperCredit;
use Plugin\GmoPaymentGatewaySubs42\Entity\Master\SubsStatus;
use Plugin\GmoPaymentGatewaySubs42\Entity\GmoOrderExtended;
use Plugin\GmoPaymentGatewaySubs42\Entity\GmoSubsConfig;
use Plugin\GmoPaymentGatewaySubs42\Entity\GmoSubsCustomer;
use Plugin\GmoPaymentGatewaySubs42\Entity\GmoSubsOrder;
use Plugin\GmoPaymentGatewaySubs42\Entity\GmoSubsOrderItem;
use Plugin\GmoPaymentGatewaySubs42\Repository\GmoSubsConfigRepository;
use Plugin\GmoPaymentGatewaySubs42\Service\SubsCustomerHelper;
use Plugin\GmoPaymentGatewaySubs42\Service\SubsOrderHelper;
use Plugin\GmoPaymentGatewaySubs42\Service\SubsPaymentHelper;
use Plugin\GmoPaymentGatewaySubs42\Util\PaymentUtil;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class Event implements EventSubscriberInterface
{
/**
* @var EntityManagerInterface
*/
protected $entityManager;
/**
* @var Eccube\Service\CartService
*/
protected $cartService;
/**
* @var TokenStorageInterface
*/
protected $tokenStorage;
/**
* @var Plugin\GmoPaymentGateway42\Service\PaymentHelperCredit
*/
protected $paymentHelperCredit;
/**
* @var Plugin\GmoPaymentGatewaySubs42\Repository\GmoSubsConfigRepository
*/
protected $gmoSubsConfigRepository;
/**
* @var Plugin\GmoPaymentGatewaySubs42\Service\SubsCustomerHelper
*/
protected $subsCustomerHelper;
/**
* @var Plugin\GmoPaymentGatewaySubs42\Service\SubsOrderHelper
*/
protected $subsOrderHelper;
/**
* @var Plugin\GmoPaymentGatewaySubs42\Service\SubsPaymentHelper
*/
protected $subsPaymentHelper;
/**
* コンストラクタ
*
* @param EntityManagerInterface $entityManager
* @param CartService $cartService
* @param TokenStorageInterface $tokenStorage
* @param PaymentHelperCredit $paymentHelperCredit
* @param GmoSubsConfigRepository $gmoSubsConfigRepository
* @param SubsCustomerHelper $subsCustomerHelper
* @param SubsOrderHelper $subsOrderHelper
* @param SubsPaymentHelper $subsPaymentHelper
*/
public function __construct(
EntityManagerInterface $entityManager,
CartService $cartService,
TokenStorageInterface $tokenStorage,
PaymentHelperCredit $paymentHelperCredit,
GmoSubsConfigRepository $gmoSubsConfigRepository,
SubsCustomerHelper $subsCustomerHelper,
SubsOrderHelper $subsOrderHelper,
SubsPaymentHelper $subsPaymentHelper
) {
$this->entityManager = $entityManager;
$this->cartService = $cartService;
$this->tokenStorage = $tokenStorage;
$this->paymentHelperCredit = $paymentHelperCredit;
$this->gmoSubsConfigRepository = $gmoSubsConfigRepository;
$this->subsCustomerHelper = $subsCustomerHelper;
$this->subsOrderHelper = $subsOrderHelper;
$this->subsPaymentHelper = $subsPaymentHelper;
}
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
EccubeEvents::FRONT_SHOPPING_COMPLETE_INITIALIZE
=> 'onShoppingComplete',
'Shopping/login.twig' => 'onShoppingLoginTwig',
'Shopping/index.twig' => 'onShoppingIndexTwig',
'Mypage/index.twig' => 'onMypageNaviTwig',
'Mypage/history.twig' => 'onMypageNaviTwig',
'Mypage/favorite.twig' => 'onMypageNaviTwig',
'Mypage/change.twig' => 'onMypageNaviTwig',
'Mypage/change_complete.twig' => 'onMypageNaviTwig',
'Mypage/delivery.twig' => 'onMypageNaviTwig',
'Mypage/delivery_edit.twig' => 'onMypageNaviTwig',
'Mypage/withdraw.twig' => 'onMypageNaviTwig',
'@GmoPaymentGateway42/mypage_card.twig' => 'onMypageCardTwig',
'@GmoPaymentGatewaySubs42/mypage_subs_orders.twig'
=> 'onMypageSubsOrderNaviTwig',
'@GmoPaymentGatewaySubs42/mypage_subs_order.twig'
=> 'onMypageSubsOrderNaviTwig',
'@admin/Order/edit.twig' => 'onAdminOrderEditTwig',
'@admin/Customer/edit.twig' => 'onAdminCustomerEditTwig',
];
}
/**
* 注文完了イベント
* 注文完了した受注が定期受注の場合、定期会員/定期受注/明細を作成する
*
* @param EventArgs $event イベント
*/
public function onShoppingComplete(EventArgs $event)
{
PaymentUtil::logInfo("Event::onShoppingComplete start.");
// 受注を取得
$Order = $event->getArgument('Order');
// 定期商品を含む受注かどうかを判定する
if (!$Order->isSubscriptionOrder()) {
// 通常受注
PaymentUtil::logInfo
("Event::onShoppingComplete normal order exit.");
return;
}
// 定期受注
PaymentUtil::logInfo('Subscription order found!');
// 定期会員未登録の場合は生成する
$GmoSubsCustomer =
$this->subsCustomerHelper->createSubsCustomer($Order);
// 定期受注を生成する
$GmoSubsOrder = $this->subsOrderHelper->createSubsOrder($Order);
$this->entityManager->persist($GmoSubsCustomer);
$this->entityManager->persist($Order);
$this->entityManager->persist($GmoSubsOrder);
$this->entityManager->flush();
PaymentUtil::logInfo("Event::onShoppingComplete end.");
}
/**
* フロント -> 商品購入時ログイン
*/
public function onShoppingLoginTwig(TemplateEvent $event)
{
$Cart = $this->cartService->getCart();
$event->setParameter('Cart', $Cart);
$event->addSnippet('@GmoPaymentGatewaySubs42/shopping_login.twig');
}
/**
* フロント -> 商品購入
*/
public function onShoppingIndexTwig(TemplateEvent $event)
{
$GmoSubsConfig = $this->gmoSubsConfigRepository->get();
$event->setParameter('GmoSubsConfig', $GmoSubsConfig);
$event->addSnippet('@GmoPaymentGatewaySubs42/shopping_index.twig');
}
/**
* フロント -> マイページ -> ナビ
*/
public function onMypageNaviTwig(TemplateEvent $event)
{
$GmoSubsCustomer = null;
$token = $this->tokenStorage->getToken();
if (!is_null($token)) {
$Customer = $token->getUser();
if (!is_null($Customer)) {
$GmoSubsCustomer = $Customer->getGmoSubsCustomer();
}
}
$event->setParameter('GmoSubsCustomer', $GmoSubsCustomer);
$event->addSnippet('@GmoPaymentGatewaySubs42/mypage_navi.twig');
}
/**
* フロント -> マイページ -> カード情報編集
*/
public function onMypageCardTwig(TemplateEvent $event)
{
$GmoSubsCustomer = null;
$token = $this->tokenStorage->getToken();
if (!is_null($token)) {
$Customer = $token->getUser();
if (!is_null($Customer)) {
$GmoSubsCustomer = $Customer->getGmoSubsCustomer();
}
}
$event->setParameter('GmoSubsCustomer', $GmoSubsCustomer);
$event->addSnippet('@GmoPaymentGatewaySubs42/mypage_card.twig');
}
/**
* フロント -> マイページ -> 定期一覧/編集
*/
public function onMypageSubsOrderNaviTwig(TemplateEvent $event)
{
$event->setParameter
('isAvailableCardEdit',
$this->subsPaymentHelper->isAvailableCardEdit());
$event->addSnippet('@GmoPaymentGateway42/mypage_navi.twig');
$this->onMypageNaviTwig($event);
}
/**
* 管理画面 -> 受注管理 -> 受注一覧 -> 受注修正
*/
public function onAdminOrderEditTwig(TemplateEvent $event)
{
$event->addSnippet('@GmoPaymentGatewaySubs42/admin/order_edit.twig');
}
/**
* 管理画面 -> 会員管理 -> 会員一覧 -> 会員修正
*/
public function onAdminCustomerEditTwig(TemplateEvent $event)
{
$event->addSnippet('@GmoPaymentGatewaySubs42/admin/customer_edit.twig');
}
}