<?php
namespace Plugin\NZReceipt42\Event;
use Eccube\Repository\OrderRepository;
use Plugin\NZReceipt42\Repository\ConfigRepository;
use Plugin\NZReceipt42\Repository\ReceiptHistoryRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Eccube\Event\TemplateEvent;
use Symfony\Component\Security\Core\Security;
class TemplateEventSubscriber implements EventSubscriberInterface
{
/**
* @var ConfigRepository
*/
private $configRepository;
/**
* @var ReceiptHistoryRepository
*/
private $receiptHistoryRepository;
/**
* @var Security
*/
private $security;
// 入金済み
const ORDER_STATUS_PAID = 6;
// 発送済み
const ORDER_STATUS_DELIVERED = 5;
public function __construct(
ConfigRepository $configRepository,
ReceiptHistoryRepository $receiptHistoryRepository,
Security $security
) {
$this->configRepository = $configRepository;
$this->receiptHistoryRepository = $receiptHistoryRepository;
$this->security = $security;
}
public static function getSubscribedEvents()
{
return [
'Mypage/history.twig' => 'onMypageHistory',
];
}
/**
* マイページ注文詳細に領収書ボタン追加
*/
public function onMypageHistory(TemplateEvent $event)
{
$Config = $this->configRepository->get();
// Configがnullの場合はデフォルトで有効とする
if ($Config && !$Config->isEnabled()) {
return;
}
$parameters = $event->getParameters();
$Order = $parameters['Order'] ?? null;
if (!$Order) {
return;
}
// 発行可能かチェック
$statusId = $Order->getOrderStatus()->getId();
$canIssue = in_array($statusId, [self::ORDER_STATUS_PAID, self::ORDER_STATUS_DELIVERED]);
// 発行履歴を取得
$History = $this->receiptHistoryRepository->findByOrder($Order);
$parameters['nz_receipt_can_issue'] = $canIssue;
$parameters['nz_receipt_history'] = $History;
$event->setParameters($parameters);
$event->addSnippet('@NZReceipt42/default/history_button.twig');
}
}