<?php
namespace App\EventListener;
use App\Entity\Customer;
use App\Entity\Network;
use App\Manager\SynchroOdooManager;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Workflow\Event\Event;
use Symfony\Component\Workflow\EventListener\AuditTrailListener;
class ProjectWorkflowListener extends AuditTrailListener
{
/**
* @var LoggerInterface
* @var Container
*/
private $logger;
/**
* @var TokenStorageInterface
*/
private $tokenStorage;
private $odooManager;
/**
* ProjectWorkflowListener constructor.
*
* @param LoggerInterface $logger
* @param TokenStorageInterface $tokenStorage
*/
public function __construct(LoggerInterface $logger, TokenStorageInterface $tokenStorage,SynchroOdooManager $odooManager)
{
parent::__construct($logger);
$this->logger = $logger;
$this->tokenStorage = $tokenStorage;
$this->odooManager = $odooManager;
}
/**
* @param Event $event
*/
public function onLeave(Event $event)
{
parent::onLeave($event);
}
/**
* @param Event $event
*/
public function onTransition(Event $event)
{
parent::onTransition($event);
}
/**
* @param Event $event
*/
public function onEnter(Event $event)
{
parent::onEnter($event);
}
/**
* @param Event $event
*/
public function onValidate(Event $event)
{
/** @var Network $network */
$network = $event->getSubject();
$network
->setStatus(Network::STATUS_NETWORK)
->setActive(true)
;
/** @var Customer $customer */
foreach ($network->getCustomers() as $customer) {
if ($customer->isAllowedToBecomeAClient()) {
$customerNumber = $network->getNetworkNumber() . $customer->getSlotNumber();
$customerNumber = (int)$customerNumber;
$user = ($this->tokenStorage->getToken()) ? $this->tokenStorage->getToken()->getUser() : null;
$customer
->setStatus(Customer::STATUS_CLIENT)
->setCustomNumber($customerNumber)
/*->setCreator($user) // $network->getOwner()*/
;
$this->odooManager->setClient($customer,true);
}
}
}
/**
* @param Event $event
*/
public function onReject(Event $event)
{
}
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
'workflow.network_validation.enter' => ['onEnter'],
'workflow.network_validation.transition' => ['onTransition'],
'workflow.network_validation.leave' => ['onLeave'],
'workflow.network_validation.enter.validated' => ['onValidate'],
'workflow.network_validation.enter.rejected' => ['onReject'],
];
}
}