<?php
namespace App\EventListener;
use App\Services\GeneralSendMailService;
use Exception;
use Pimcore\Event\Model\DataObjectEvent;
use Pimcore\Log\Simple;
use Pimcore\Model\DataObject\Order;
class OrderPaidListener
{
protected GeneralSendMailService $generalSendMailService;
public function __construct(GeneralSendMailService $generalSendMailService)
{
$this->generalSendMailService = $generalSendMailService;
}
/**
* @throws Exception
*/
public function createObject(DataObjectEvent $e): void
{
$this->handleEvent($e);
}
/**
* @throws Exception
*/
public function updateObject(DataObjectEvent $e): void
{
$this->handleEvent($e);
}
/**
* @param DataObjectEvent $e
* @return void
* @throws Exception
*/
private function handleEvent(DataObjectEvent $e): void
{
$obj = $e->getObject();
if ($obj instanceof Order) {
$order = $obj;
if ($order->getMailSend() !== 'send' && $order->getPaymentStatus() === 'paid') {
$emailTemplate = 'email_order_confirm';
$emailTemplateAdmin = 'email_order_confirm_admin';
try {
$this->generalSendMailService->_sendOrderMail($order->getUser(), $order, $emailTemplate, $emailTemplateAdmin);
Simple::log('payment-redirect', 'Mailstatus OK');
Simple::log('payment-redirect-event-listener', sprintf('Mail sent for order ID: %s', $order->getId()));
$order->setMailSend('send');
$order->save();
} catch (Exception $ex) {
Simple::log('payment-redirect-event-listener', sprintf('Failed to send mail for order ID: %s, Error: %s', $order->getId(), $ex->getMessage()));
}
}
}
}
}