<?php
namespace App\EventSubscriber;
use App\Constant\PermitProcedureConstants;
use App\Entity\PermitProperty;
use App\Entity\PermitPropertyProcedure;
use App\Repository\AnnexPermitPropertyRepository;
use App\Repository\PermitPropertyRepository;
use App\Repository\ThepropertyRepository;
use App\Service\MailToSend;
use App\Service\TraitementUrl;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
class PermitPropertySubscriber implements EventSubscriberInterface
{
/**
* @var MailToSend
*/
private $mailToSend;
/**
* @var PermitProperty
*/
private $permitPropertyRepository;
/**
* @var AnnexPermitPropertyRepository
*/
private $annexPermitPropertyRepository;
private $traitementUrl;
/**
* @var EntityManagerInterface
*/
private $em;
private $thePropertyRepository;
public function __construct(
PermitPropertyRepository $permitPropertyRepository,
ThepropertyRepository $thePropertyRepository,
AnnexPermitPropertyRepository $annexPermitPropertyRepository,
MailToSend $mailToSend,
EntityManagerInterface $em,
TraitementUrl $traitementUrl)
{
$this->permitPropertyRepository = $permitPropertyRepository;
$this->thePropertyRepository = $thePropertyRepository;
$this->annexPermitPropertyRepository = $annexPermitPropertyRepository;
$this->traitementUrl = $traitementUrl;
$this->mailToSend = $mailToSend;
$this->em = $em;
}
public function onKernelResponse(ResponseEvent $event): void
{
$request = $event->getRequest();
$response = $event->getResponse();
$resource = $request->attributes->get('_api_resource_class');
if ($resource === PermitProperty::class && $request->getMethod() === Request::METHOD_POST) {
$data = json_decode($response->getContent(), true);
$permitProperty = $this->permitPropertyRepository->find($data['id']);
$annexPermitProperty = $this->annexPermitPropertyRepository->findBy(['permitProperty' => $permitProperty->getId()]);
// Add permitPropertyProcedure
$dateCreated = $permitProperty->getCreated()->format('Y-m-d H:i:s');
$dateProcedure = date('Y-m-d H:i:s', strtotime($dateCreated.' + 45 days'));
$permitPropertyProcedure = new PermitPropertyProcedure();
$permitPropertyProcedure->setPermitProperty($permitProperty);
$permitPropertyProcedure->setStatus(PermitProcedureConstants::STEP_REQUEST_SENT);
$permitPropertyProcedure->setAcknowledgmentUltimeDate($dateProcedure);
$this->em->persist($permitPropertyProcedure);
$this->em->flush();
// Send email to municipality
$theProperty = $permitProperty->getTheProperty();
$municipality = $theProperty->getMunicipality();
$file[] = $this->traitementUrl->getUrlServer().$permitProperty->getPath();
foreach ($annexPermitProperty as $annex) {
$file[] = $this->traitementUrl->getUrlServer().$annex->getPath();
}
if (!is_null($municipality)) {
$this->mailToSend->sendReportMailToMunicipality($file, $municipality->getEmailMunicipality(), 'mail_for_municipality');
}
}
}
public static function getSubscribedEvents()
{
return [
'kernel.response' => 'onKernelResponse',
];
}
}