src/Listener/ProspectQualificationWorflowListener.php line 72

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: bertrand
  5.  * Date: 29/03/2019
  6.  * Time: 13:53
  7.  */
  8. namespace App\Listener;
  9. use App\Entity\Enum\ProspectOnStoreCreationModeEnum;
  10. use App\Entity\Freelancer;
  11. use App\Entity\ProspectQualification;
  12. use App\Service\DeliveryService;
  13. use App\Service\ProspectService;
  14. use Psr\Log\LoggerInterface;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use Symfony\Component\Workflow\Event\Event;
  17. class ProspectQualificationWorflowListener implements EventSubscriberInterface
  18. {
  19.     private $logger;
  20.     private $deliveryService;
  21.     private $prospectService;
  22.     /**
  23.      * ProspectQualificationWorflowListener constructor.
  24.      * @param DeliveryService $deliveryService
  25.      * @param LoggerInterface $logger
  26.      */
  27.     public function __construct(DeliveryService $deliveryServiceProspectService $prospectServiceLoggerInterface $logger)
  28.     {
  29.         $this->logger $logger;
  30.         $this->deliveryService $deliveryService;
  31.         $this->prospectService $prospectService;
  32.     }
  33.     public static function getSubscribedEvents()
  34.     {
  35.         return [
  36.             'workflow.prospectQualification.completed.validate' => 'onValidate',
  37.             'workflow.prospectQualification.completed.reject' => 'onReject',
  38.             'workflow.prospectQualification.completed.unreach' => 'onUnreach',
  39.         ];
  40.     }
  41.     public function onValidate(Event $event)
  42.     {
  43.         $this->logger->info('ProspectQualificationWorflowListener onValidate');
  44.         $prospectQualification $event->getSubject();
  45.         $prospect $prospectQualification->getProspect();
  46.         $this->logger->info('ProspectQualificationWorflowListener.onValidate Prospect: ' $prospect->getId());
  47.         $prospectQualification->setEndedAt(new \DateTime());
  48.         //set validation date
  49.         $prospectQualification->setValidatedAt(new \DateTime());
  50.         //deliver prospect
  51.         foreach ($prospect->getProspectsOnStore() as $prospectOnStore) {
  52.             $this->logger->info('Iterate on prospect ' $prospect->getId() . ' on store ' $prospectOnStore->getStore()->getId());
  53.             if($prospectOnStore->isWaitingQualification()){
  54.                 $this->logger->info('POS was waiting qualification->deliver');
  55.                 $this->logger->info('deliver this POS');
  56.                 $this->deliveryService->deliver($prospectOnStore);
  57.             }
  58.         }
  59.     }
  60.     public function onReject(Event $event)
  61.     {
  62.         $prospectQualification $event->getSubject();
  63.         $prospect $prospectQualification->getProspect();
  64.         $this->logger->info('ProspectQualificationWorflowListener.onReject Prospect: ' $prospect->getId());
  65.         $prospectQualification->setEndedAt(new \DateTime());
  66.     }
  67.     /**
  68.      * Manage prospect unreachable
  69.      * @param Event $event
  70.      */
  71.     public function onUnReach(Event $event)
  72.     {
  73.         $prospectQualification $event->getSubject();
  74.         $prospect $prospectQualification->getProspect();
  75.         $this->logger->info('ProspectQualificationWorflowListener.onUnReach Prospect: ' $prospect->getId());
  76.         $prospectQualification->setEndedAt(new \DateTime());
  77.         $this->prospectService->deliverProspectOnStoreBelongingToADifferentPartner($prospectProspectOnStoreCreationModeEnum::UNREACH);
  78.     }
  79. }