<?phpnamespace Plugin\TeikiOrder42\EventSubscriber\Controller\Admin;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Eccube\Common\EccubeConfig;use Eccube\Event\TemplateEvent;use Eccube\Event\EventArgs;use Eccube\Event\EccubeEvents;use Doctrine\ORM\EntityManagerInterface;use Plugin\TeikiOrder42\Entity\TeikiOrder;use Plugin\TeikiOrder42\Repository\TeikiOrderRepository;use Plugin\TeikiOrder42\Service\TeikiProductService;use Plugin\TeikiOrder42\Repository\Master\OrganizationRepository;use Plugin\TeikiOrder42\Repository\Master\ClaimTimesRepository;class OrderEditControllerSubscriber implements EventSubscriberInterface{ /** * @var EntityManagerInterface */ private $entityManager; /** * @var TeikiOrderRepository */ private $teikiOrderRepository; /** * @var TeikiProductService */ private $teikiProductService; /** * @var OrganizationRepository */ private $organizationRepository; /** * @var ClaimTimesRepository */ private $claimTimesRepository; /** * Event constructor. * @param EntityManagerInterface $entityManager * @param TeikiOrderRepository $teikiOrderRepository * @param TeikiProductService $teikiProductService * @param OrganizationRepository $organizationRepository * @param ClaimTimesRepository $claimTimesRepository */ public function __construct( EntityManagerInterface $entityManager, TeikiOrderRepository $teikiOrderRepository, TeikiProductService $teikiProductService, OrganizationRepository $organizationRepository, ClaimTimesRepository $claimTimesRepository ) { $this->entityManager = $entityManager; $this->teikiOrderRepository = $teikiOrderRepository; $this->teikiProductService = $teikiProductService; $this->organizationRepository = $organizationRepository; $this->claimTimesRepository = $claimTimesRepository; } /** * @return array */ public static function getSubscribedEvents() { return [ '@admin/Order/edit.twig' => ['AdminOrderEdit', 1], EccubeEvents::ADMIN_ORDER_EDIT_INDEX_PROGRESS => 'AdminOrderEditIndexProgress', EccubeEvents::ADMIN_ORDER_EDIT_INDEX_COMPLETE => 'AdminOrderEditIndexComplete', ]; } /** * @param TemplateEvent $event */ public function AdminOrderEdit(TemplateEvent $event) { $event->addSnippet('@TeikiOrder42/admin/Order/edit.twig'); } /** * @param EventArgs $event */ public function AdminOrderEditIndexProgress(EventArgs $event) { $TargetOrder = $event->getArgument('TargetOrder'); $builder = $event->getArgument('builder'); $form = $builder->getForm(); if ($TargetOrder) { foreach ($TargetOrder->getOrderItems() as $OrderItem) { if ($OrderItem->isProduct() && $OrderItem->getProductClass()->getSaleType()->getId() == 4) { $ProductClass = $OrderItem->getProductClass(); $teiki_start_date = $this->teikiProductService->getDBStartDate($ProductClass); $teiki_end_date = $this->teikiProductService->getDBEndDate($ProductClass); $TeikiOrder = $this->teikiOrderRepository->findOneBy(['Order' => $TargetOrder->getId()]); } } } } /** * @param EventArgs $event */ public function AdminOrderEditIndexComplete(EventArgs $event) { $TargetOrder = $event->getArgument('TargetOrder'); $form = $event->getArgument('form'); $OriginOrder = $event->getArgument('OriginOrder'); $teiki_flg = 0; if ($TargetOrder) { foreach ($TargetOrder->getOrderItems() as $OrderItem) { if ($OrderItem->isProduct() && $OrderItem->getProductClass()->getSaleType()->getId() == 4) { $ProductClass = $OrderItem->getProductClass(); $teiki_start_date = $this->teikiProductService->getDBStartDate($ProductClass); $teiki_end_date = $this->teikiProductService->getDBEndDate($ProductClass); $TeikiOrder = $this->teikiOrderRepository->findOneBy(['Order' => $TargetOrder->getId()]); if(!$TeikiOrder) { $TeikiOrder = new TeikiOrder(); $TeikiOrder ->setOrder($TargetOrder) ->setTeikiStartDate(new \DateTime($teiki_start_date)) ->setTeikiEndDate(new \DateTime($teiki_end_date)) ->setOrganization($this->organizationRepository->find(0)) ->setClaimTimes($this->claimTimesRepository->find(1)) ->setClaimDate1($TargetOrder->getOrderDate()) ->setClaimPrice1($TargetOrder->getPaymentTotal()) ->setAutoTeikiOrderUpdateFlg(1); } else { if ($teiki_end_date != $TargetOrder->getTeikiOrder()->getTempTeikiEndDate()) { $teiki_end_date = $TargetOrder->getTeikiOrder()->getTempTeikiEndDate(); } $TeikiOrder ->setTeikiStartDate(new \DateTime($teiki_start_date)) ->setTeikiEndDate(new \DateTime($teiki_end_date)); #->setTeikiEndDate(new \DateTime($TargetOrder->getTeikiOrder()->getTempTeikiEndDate())); } $this->entityManager->persist($TeikiOrder); $this->entityManager->flush(); $teiki_flg = 1; break; } } if($teiki_flg == 1) { $TargetOrder->setTeikiFlg(1); $this->entityManager->persist($TargetOrder); $this->entityManager->flush(); } else { $TargetOrder->setTeikiFlg(0); $this->entityManager->persist($TargetOrder); $this->entityManager->flush(); } } }}