<?php/* * This file is part of the ContactManagement Plugin * * Copyright (C) 2020 Diezon. * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Customize\Event;use Customize\Entity\Master\EstimateStatus;use Customize\Repository\EstimateRepository;use Customize\Repository\Master\EstimateStatusRepository;use Customize\Repository\OrderRepository;use Customize\Service\EstimateHelper;use Eccube\Event\EventArgs;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Doctrine\ORM\EntityManagerInterface;use Symfony\Component\HttpFoundation\Session\Session;use Symfony\Component\HttpFoundation\Session\SessionInterface;class EstimateEvents implements EventSubscriberInterface{ /** * @var Session */ protected $session; /** * @var EntityManagerInterface */ private $entityManager; /** * @var OrderRepository */ private $orderRepository; /** * @var EstimateStatusRepository */ private $estimateStatusRepository; /** * @var EstimateRepository */ protected EstimateRepository $estimateRepository; /** * @param EntityManagerInterface $entityManager * @param OrderRepository $orderRepository */ public function __construct( SessionInterface $session, EntityManagerInterface $entityManager, OrderRepository $orderRepository, EstimateRepository $estimateRepository, EstimateStatusRepository $estimateStatusRepository, ) { $this->session = $session; $this->entityManager = $entityManager; $this->orderRepository = $orderRepository; $this->estimateRepository = $estimateRepository; $this->estimateStatusRepository = $estimateStatusRepository; } /** * @return array */ public static function getSubscribedEvents() { return [ 'admin.estimate.edit.index.progress' => 'onAdminEstimateEditProgress', 'front.shopping.complete.initialize' => 'onFrontShoppingComplete', ]; } /** * 管理画面 -> 見積管理 -> 見積登録時 */ public function onAdminEstimateEditProgress(EventArgs $event) { $TargetEstimate = $event->getArgument('TargetEstimate'); $preEstimateId = $TargetEstimate->getPreEstimateId(); $TargetOrder = $this->orderRepository->findOneBy(['pre_order_id' => $preEstimateId]); if ($preEstimateId && $TargetOrder) { $TargetOrder->setPreOrderId(null); $this->entityManager->persist($TargetOrder); } return; } /** * 注文完了画面 表示時 */ public function onFrontShoppingComplete(EventArgs $event) { // 見積のステータスを「注文済み」に更新 if ( $estimateId = $this->session->get(EstimateHelper::SESSION_ESTIMATE_ID) ) { $Estimate = $this->estimateRepository->find($estimateId); $EstimateStatus = $this->estimateStatusRepository->find(EstimateStatus::ORDERED); $Estimate->setEstimateStatus($EstimateStatus); $this->entityManager->flush(); } }}