<?php
/**
* Created by PhpStorm.
* User: bertrand
* Date: 29/03/2019
* Time: 13:53
*/
namespace App\Listener;
use App\Entity\Enum\ProspectOnStoreCreationModeEnum;
use App\Entity\Freelancer;
use App\Entity\ProspectQualification;
use App\Service\DeliveryService;
use App\Service\ProspectService;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Workflow\Event\Event;
class ProspectQualificationWorflowListener implements EventSubscriberInterface
{
private $logger;
private $deliveryService;
private $prospectService;
/**
* ProspectQualificationWorflowListener constructor.
* @param DeliveryService $deliveryService
* @param LoggerInterface $logger
*/
public function __construct(DeliveryService $deliveryService, ProspectService $prospectService, LoggerInterface $logger)
{
$this->logger = $logger;
$this->deliveryService = $deliveryService;
$this->prospectService = $prospectService;
}
public static function getSubscribedEvents()
{
return [
'workflow.prospectQualification.completed.validate' => 'onValidate',
'workflow.prospectQualification.completed.reject' => 'onReject',
'workflow.prospectQualification.completed.unreach' => 'onUnreach',
];
}
public function onValidate(Event $event)
{
$this->logger->info('ProspectQualificationWorflowListener onValidate');
$prospectQualification = $event->getSubject();
$prospect = $prospectQualification->getProspect();
$this->logger->info('ProspectQualificationWorflowListener.onValidate Prospect: ' . $prospect->getId());
$prospectQualification->setEndedAt(new \DateTime());
//set validation date
$prospectQualification->setValidatedAt(new \DateTime());
//deliver prospect
foreach ($prospect->getProspectsOnStore() as $prospectOnStore) {
$this->logger->info('Iterate on prospect ' . $prospect->getId() . ' on store ' . $prospectOnStore->getStore()->getId());
if($prospectOnStore->isWaitingQualification()){
$this->logger->info('POS was waiting qualification->deliver');
$this->logger->info('deliver this POS');
$this->deliveryService->deliver($prospectOnStore);
}
}
}
public function onReject(Event $event)
{
$prospectQualification = $event->getSubject();
$prospect = $prospectQualification->getProspect();
$this->logger->info('ProspectQualificationWorflowListener.onReject Prospect: ' . $prospect->getId());
$prospectQualification->setEndedAt(new \DateTime());
}
/**
* Manage prospect unreachable
* @param Event $event
*/
public function onUnReach(Event $event)
{
$prospectQualification = $event->getSubject();
$prospect = $prospectQualification->getProspect();
$this->logger->info('ProspectQualificationWorflowListener.onUnReach Prospect: ' . $prospect->getId());
$prospectQualification->setEndedAt(new \DateTime());
$this->prospectService->deliverProspectOnStoreBelongingToADifferentPartner($prospect, ProspectOnStoreCreationModeEnum::UNREACH);
}
}