<?php
namespace App\EventListener;
use App\Entity\Assignment;
use App\Entity\Task;
use App\Event\OrderCreatingEvent;
use App\Manager\TotalDeadlineAssignment;
use App\Order\OrderChangeTypeListener;
use App\Repository\TaskRepository;
use Carbon\CarbonImmutable;
class OrderCreatingListener
{
/**
* @var TaskRepository
*/
private $taskRepository;
/**
* @var TotalDeadlineAssignment
*/
private $deadlineAssignment;
private $orderChangeTypeListener;
public function __construct(TaskRepository $taskRepository, TotalDeadlineAssignment $deadlineAssignment, OrderChangeTypeListener $orderChangeTypeListener)
{
$this->taskRepository = $taskRepository;
$this->deadlineAssignment = $deadlineAssignment;
$this->orderChangeTypeListener = $orderChangeTypeListener;
}
public function __invoke(OrderCreatingEvent $event)
{
$order = $event->getOrder();
$task = $this->taskRepository->findOneBy(['code' => Task::INIT_APPROVAL_CODE]);
try {
$assignment = new Assignment($order, $task);
$assignment->setActive(true);
$deadline = $this->deadlineAssignment->total(CarbonImmutable::now(), 2);
$assignment->assignTo($order->getCreator());
$assignment->setDeadline($deadline);
$order->addAssignment($assignment);
$order = $this->orderChangeTypeListener->add($order);
} catch (\Exception $e) {
}
}
}