<?php
namespace App\EventSubscriber;
use ApiPlatform\Core\Api\IriConverterInterface;
use ApiPlatform\Core\EventListener\EventPriorities;
use App\Constant\ApiConstants;
use App\Entity\Colis;
use App\Service\FileUploader;
use App\Service\SmsService;
use App\Service\Utils;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Vich\UploaderBundle\Storage\StorageInterface;
class ColisSubscriber implements EventSubscriberInterface
{
private $managerRegistry;
private $utils;
private $iriConverter;
private $fileUploader;
private $tokenStorage;
private $smsService;
public function __construct(ManagerRegistry $managerRegistry,Utils $utils,
IriConverterInterface $converter,
FileUploader $fileUploader,
TokenStorageInterface $tokenStorage,
SmsService $smsService)
{
$this->managerRegistry = $managerRegistry;
$this->utils = $utils;
$this->iriConverter = $converter;
$this->fileUploader = $fileUploader;
$this->tokenStorage = $tokenStorage;
$this->smsService = $smsService;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => [
//['processColis', EventPriorities::PRE_WRITE],
['pocessChildren', EventPriorities::POST_WRITE],
['pocessUpdate', EventPriorities::POST_WRITE],
//['processReception',EventPriorities::PRE_WRITE],
],
];
}
/*public function processColis(ViewEvent $event){
$colis = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$colis instanceof Colis || Request::METHOD_POST !== $method || strpos($event->getRequest()->getPathInfo(),'changestatus')) {
return ;
}
$maxID = $this->managerRegistry->getRepository(Colis::class)->getMaxId() + 1;
$Ref = "REF"."-".strtoupper(substr($colis->getVilleExp()->getLibelle(),0,3)).'-'.strtoupper(substr($colis->getVilleRec()->getLibelle(),0,3))."-".$maxID.'-'.$this->utils->generateRandomLetter();
$colis->setAgent($this->tokenStorage->getToken()->getUser());
$colis->setReference($Ref);
}*/
public function pocessChildren(ViewEvent $event) {
$colis = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$colis instanceof Colis || Request::METHOD_POST !== $method || !strpos($event->getRequest()->getPathInfo(),'super')) {
return ;
}
$data = json_decode($event->getRequest()->getContent(),true);
$childrens = $data['childrens'];
//die($data['childrens']);
$managerColis = $this->managerRegistry->getManagerForClass(Colis::class);
foreach ((array) $childrens as $children){
$coli = $this->iriConverter->getItemFromIri($children);
//$this->managerRegistry->getRepository(Colis::class)->find($children);
$coli->setSuper($colis);
$managerColis->flush();
}
}
public function pocessUpdate(ViewEvent $event){
//die('ici');
$colis = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$colis instanceof Colis || Request::METHOD_POST !== $method || !strpos($event->getRequest()->getPathInfo(),'changestatus')) {
return ;
}
$managerColis = $this->managerRegistry->getManagerForClass(Colis::class);
$statut = $event->getRequest()->get('statut');
if($colis->getIsSuper()){
$colis_list = $this->managerRegistry->getRepository(Colis::class)->findBy(['super' => $colis->getId()]);
if(!is_null($colis_list) && !empty($colis_list)){
foreach ($colis_list as $c){
$c->setStatut($statut);
if($statut == ApiConstants::STATUS_TRANSIT){
$c->setDateTransit(new \DateTime("now"));
$this->smsService->sendSms("Bonjour ".$c->getExpediteur()->getNom().", votre colis envoyé est en transit. Paris center vous remercie pour votre confiance.",$c->getExpediteur()->getTel());
$this->smsService->sendSms("Bonjour ".$c->getRecepteur()->getNom().", un colis qui vous est destiné est en transit vers votre pays. Paris center vous remercie pour votre confiance. Pour plus d'information rendez-vous sur www.pariscentrplus.com.",$c->getRecepteur()->getTel());
} elseif ($statut == ApiConstants::STATUS_DESTINATION){
$c->setDateDestination(new \DateTime("now"));
}
else if($statut == ApiConstants::STATUS_RECEPTION) {
$c->setDateReception(new \DateTime("now"));
$this->smsService->sendSms("Bonjour ".$c->getExpediteur()->getNom().", votre colis envoyé a été rétiré par ".$c->getRecepteur()->getNom().". Paris center vous remercie pour votre confiance.",$c->getExpediteur()->getTel());
}
$managerColis->flush();
}
}
} else {
//$this->smsService->sendSms("Bonjour Thibus, votre colis envoyé est en transit. Paris center vous remercie pour votre confiance.","+22578789100");
if($statut == ApiConstants::STATUS_TRANSIT){
$this->smsService->sendSms("Bonjour ".$colis->getExpediteur()->getNom().", votre colis envoyé est en transit. Paris center vous remercie pour votre confiance.",$colis->getExpediteur()->getTel());
$this->smsService->sendSms("Bonjour ".$colis->getRecepteur()->getNom().", un colis qui vous est destiné est en transit vers votre pays. Paris center vous remercie pour votre confiance. Pour plus d'information rendez-vous sur www.pariscentrplus.com.",$colis->getRecepteur()->getTel());
}
else if($statut == ApiConstants::STATUS_RECEPTION) {
$this->smsService->sendSms("Bonjour ".$colis->getExpediteur()->getNom().", votre colis envoyé a été rétiré par ".$colis->getRecepteur()->getNom().". Paris center vous remercie pour votre confiance.",$colis->getExpediteur()->getTel());
}
}
}
/*public function processReception(ViewEvent $event)
{
//return ;
$colis = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$colis instanceof Colis || Request::METHOD_PUT !== $method || !strpos($event->getRequest()->getPathInfo(),'changestatus')) {
return ;
}
$statut = $event->getRequest()->get('statut');
if(!$colis->getIsSuper()){
if($statut == 2) {
if($colis->getFileRecPhotoRecto()){
$fileName = $this->fileUploader->upload($colis->getFileRecPhotoRecto());
$colis->setRecPhotoRecto($fileName);
}
if($colis->getFileRecPhotoVerso()){
$fileName = $this->fileUploader->upload($colis->getFileRecPhotoVerso());
$colis->setRecPhotoVerso($fileName);
}
}
}
}*/
}