<?php
/**
* Created by PhpStorm.
* User: bertrand
* Date: 29/03/2019
* Time: 13:53
*/
namespace App\Listener;
use App\Repository\CreditPackGenericRepository;
use App\Service\NotifyFreelancerService;
use App\Service\StoreService;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Workflow\Event\Event;
class StoreManagementRequestWorflowListener implements EventSubscriberInterface
{
private $logger;
private $storeService;
private $notifyFreelancerService;
private $packRepository;
public function __construct(LoggerInterface $logger, StoreService $storeService, NotifyFreelancerService $notifyFreelancerService, CreditPackGenericRepository $packRepo)
{
$this->logger = $logger;
$this->storeService = $storeService;
$this->notifyFreelancerService = $notifyFreelancerService;
$this->packRepository = $packRepo;
}
public function onValidate(Event $event)
{
$packs = $this->packRepository->findActivePacksByNbPrice();
$request = $event->getSubject();
$this->logger->info(sprintf(
'Blog post (id: "%s") performed transaction "%s" from "%s" to "%s"',
$event->getSubject()->getId(),
$event->getTransition()->getName(),
implode(', ', array_keys($event->getMarking()->getPlaces())),
implode(', ', $event->getTransition()->getTos())
));
$request->setValidated(new \DateTime());
$this->storeService->associateStoreAndUser($request->getStore(), $request->getUser());
// notifier l'utilisateur de la validation
try{
$this->notifyFreelancerService->notifyFreelancerOnStoreManagementRequestValidate($request, $packs);
}catch(\Exception $e){
$this->logger->info('Une erreur est survenue lors de l\'envoi d\'email: ' . $e->getCode() . ' : ' . $e->getMessage());
}
}
public static function getSubscribedEvents()
{
return [
'workflow.storeManagementRequest.completed.validate' => 'onValidate',
];
}
}