<?php
declare(strict_types=1);
namespace App\EventListener;
use App\Middleware\CustomerMiddleware;
use App\Middleware\ReceivableMiddleware;
use App\Middleware\SaleMiddleware;
use App\Middleware\TransactionFailureMiddleware;
use App\Middleware\BackgroundProcessingMiddleware;
use Symfony\Component\HttpKernel\Event\TerminateEvent;
use Symfony\Component\HttpKernel\KernelInterface;
class BulkEmailListener
{
private $receivableMiddleware;
private $saleMiddleware;
private $transactionFailureMiddleware;
private $customerMiddleware;
private $backgroundProcessingMiddleware;
public function __construct(
KernelInterface $kernelInterface,
SaleMiddleware $saleMiddleware,
ReceivableMiddleware $receivableMiddleware,
TransactionFailureMiddleware $transactionFailureMiddleware,
CustomerMiddleware $customerMiddleware,
BackgroundProcessingMiddleware $backgroundProcessingMiddleware
) {
$this->kernelInterface = $kernelInterface;
$this->receivableMiddleware = $receivableMiddleware;
$this->saleMiddleware = $saleMiddleware;
$this->transactionFailureMiddleware = $transactionFailureMiddleware;
$this->customerMiddleware = $customerMiddleware;
$this->backgroundProcessingMiddleware = $backgroundProcessingMiddleware;
}
public function onKernelTerminate(TerminateEvent $event): void
{
if (!$event->isMasterRequest()) {
return;
}
$request = $event->getRequest();
if ('api_email_bulk_sale_session' === $request->get('_route')) {
$parameter = json_decode($request->getContent(), true);
$bgInitiateParameter = array(
'companyId' => $parameter['companyId'],
'uniqueKey' => rand(),
'initiatedData' => json_encode($parameter['selectedId']),
'processData' => json_encode(array()),
'module' => 'sale_email',
'emailsSent' => '0',
'status' => '1',
'showAlert' => '0',
'createdDate' => new \DateTime(),
'updatedDate' => new \DateTime()
);
$this->backgroundProcessingMiddleware->save($bgInitiateParameter);
$parameter['uniqueKey'] = $bgInitiateParameter['uniqueKey'];
$parameter['initiatedData'] = $bgInitiateParameter['initiatedData'];
$this->saleMiddleware->bulkSaleEmailSend($parameter);
return;
} else if ('api_email_receivable_statement' === $request->get('_route')) {
$parameter = json_decode($request->getContent(), true);
$this->receivableMiddleware->sendEmailByCustomer($parameter);
return;
} else if ('api_payment_bulk_email_send' === $request->get('_route')) {
$parameter = json_decode($request->getContent(), true);
$bgInitiateParameter = array(
'companyId' => $parameter['companyId'],
'uniqueKey' => rand(),
'initiatedData' => isset($parameter['selectedId']) ? json_encode($parameter['selectedId']) : json_encode(array()),
'processData' => json_encode(array()),
'module' => isset($parameter['module'])?$parameter['module']:'email',
'emailsSent' => '0',
'status' => '1',
'showAlert' => '0',
'createdDate' => new \DateTime(),
'updatedDate' => new \DateTime()
);
$this->backgroundProcessingMiddleware->save($bgInitiateParameter);
if ($parameter['module'] === constant("App\\Constant\\Globals::BULK_PAYMENT_DECLINED")) {
$this->transactionFailureMiddleware->bulkPaymentDeclineEmailSend($parameter);
} else if ($parameter['module'] === constant("App\\Constant\\Globals::BULK_EXPIRED_EXPIRING")) {
$this->customerMiddleware->bulkExpiredExpiringEmailSend($parameter);
} else if ($parameter['module'] === constant("App\\Constant\\Globals::BULK_UPDATE_CARD")) {
$this->customerMiddleware->bulkUpdateCardEmailSend($parameter);
}
$bgEndParameter = array(
'companyId' => $parameter['companyId'],
'uniqueKey' => $bgInitiateParameter['uniqueKey'],
'initiatedData' => json_encode(array()),
'processData' => $bgInitiateParameter['initiatedData'],
'emailsSent' => '1',
'status' => '0',
'updatedDate' => new \DateTime()
);
$this->backgroundProcessingMiddleware->updateMultiple($bgEndParameter);
return;
}
}
}