<?php
namespace Customize\EventListener;
use Customize\Service\ReferralCouponService;
use Eccube\Entity\Master\OrderStatus;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Workflow\Event\Event;
class OrderDeliveredSubscriber implements EventSubscriberInterface
{
private ReferralCouponService $referralCouponService;
public function __construct(ReferralCouponService $referralCouponService)
{
$this->referralCouponService = $referralCouponService;
}
public static function getSubscribedEvents(): array
{
return [
'workflow.order.completed' => ['onWorkflowCompleted'],
];
}
public function onWorkflowCompleted(Event $event): void
{
log_info("[onWorkflowCompleted]");
$context = $event->getSubject();
$Order = $context->getOrder();
log_info((int) $context->getStatus());
if ((int) $context->getStatus() !== OrderStatus::DELIVERED) {
return;
}
log_info("配送済みに変更されました。紹介者にクーポンを発行を開始します。", [$Order->getId()]);
$coupon = $this->referralCouponService->generateReferrerCouponFromReferee($Order->getCustomer());
if ($coupon) {
log_info('紹介者向けクーポンを発行しました', [
'order_id' => $Order->getId(),
'referrer_id' => $coupon->getId(),
'coupon_cd' => $coupon->getCouponCd(),
]);
}
}
}