<?php
namespace 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();
}
}
}
}