<?php
namespace App\Service\App\Merchant\Subscription\Listener;
use App\Entity\Merchant\PlanProjectNotificationSettingsEntity;
use App\Entity\Merchant\PlanSubscriptionEntity;
use App\Repository\Merchant\Contract\IOrderRepository;
use App\Service\App\Merchant\CustomFeature\Implementation\SubscriptionCustomFeature;
use App\Service\App\Merchant\Payment\Event\ConfirmPaymentEvent;
use App\Service\App\Merchant\Subscription\Contract\ISendSubscriptionNotificationService;
use App\Types\PlanProjectNotificationType;
use App\Types\SubscriptionChangeType;
class ConfirmPaymentListener extends AbstractSubscriptionListener
{
/**
* Constructor
*
* @param SubscriptionCustomFeature $subscriptionCustomFeature
* @param IOrderRepository $orderRepository
* @param ISendSubscriptionNotificationService $sendSubscriptionNotificationService
*/
public function __construct(
SubscriptionCustomFeature $subscriptionCustomFeature,
IOrderRepository $orderRepository,
ISendSubscriptionNotificationService $sendSubscriptionNotificationService
)
{
parent::__construct($subscriptionCustomFeature, $orderRepository, $sendSubscriptionNotificationService);
}
/**
* Listen on confirm payment event
*
* @param ConfirmPaymentEvent $event
* @return void
*/
public function onAction(ConfirmPaymentEvent $event): void
{
$this->handleEvent($event->getRequest()->getId(), PlanProjectNotificationType::NOTIFICATION_RENEW_SUCCEED);
}
/**
* Check if notification should be sent
*
* @param PlanProjectNotificationSettingsEntity|null $notificationSettings
* @param PlanSubscriptionEntity $subscription
* @return bool
*/
protected function shouldSend(
?PlanProjectNotificationSettingsEntity $notificationSettings, PlanSubscriptionEntity $subscription
): bool
{
if ($subscription->getChangeType() == SubscriptionChangeType::TYPE_CHANGE_BILLING_DETAILS) {
return false;
}
if (!$subscription->hasSubscriptionPlan()) {
return false;
}
return $notificationSettings?->isNotificationSucceed() ?? false;
}
}