src/EventSubscriber/TransitionEventSubscriber.php line 285

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use App\Entity\Ticket;
  5. use App\Service\LegApiService;
  6. use App\Workflow\TicketAwmTransitionsAndStates;
  7. use App\Workflow\TicketMalfunctionTransitionsAndStates;
  8. use App\Workflow\TicketRefuelTransitionsAndStates;
  9. use App\Workflow\TicketSensorTransitionsAndStates;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Psr\Log\LoggerInterface;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  14. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  15. use Symfony\Component\Security\Core\User\UserInterface;
  16. use Symfony\Component\Workflow\Event\TransitionEvent;
  17. use Symfony\Component\Workflow\Registry;
  18. class TransitionEventSubscriber implements EventSubscriberInterface
  19. {
  20.     private $tokenStorage;
  21.     private $em;
  22.     private $workflowRegistry;
  23.     private $logger;
  24.     private $apiService;
  25.     public function __construct(TokenStorageInterface $tokenStorageEntityManagerInterface $emRegistry $workflowRegistryLoggerInterface $loggerLegApiService $legApiService)
  26.     {
  27.         $this->tokenStorage $tokenStorage;
  28.         $this->em $em;
  29.         $this->workflowRegistry $workflowRegistry;
  30.         $this->logger $logger;
  31.         $this->apiService $legApiService;
  32.         $this->logger->debug('aco.DEBUG: workflow: TransitionEventSubscriber: __construct');
  33.     }
  34.     public function authenticateAsSystemUser()
  35.     {
  36.         $systemUser $this->em->getRepository(User::class)->getSystemUser();
  37.         $token = new UsernamePasswordToken($systemUser'public'$systemUser->getRoles());
  38.         // For older versions of Symfony, use security.context here
  39.         $this->tokenStorage->setToken($token);
  40.     }
  41.     public function onWorkflowMalfunctionEntered($event)
  42.     {
  43.         // echo "onWorkflowAwmEntered: ".$event->getSubject()->getMarking()."<br />";
  44.         $ticket $event->getSubject();
  45.         $ticketStateMachine $this->workflowRegistry->get($ticket$ticket->getType());
  46.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowMalfunctionEntered: ENTERED');
  47.         $token $this->tokenStorage->getToken();
  48.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowMalfunctionEntered: transition: '.$event->getTransition()->getName());
  49.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: ENTERED Malfunction');
  50.         if ($ticket->getElevator()) {
  51.             $tga $ticket->getElevator();
  52.         }
  53.         if ($ticket->getNea()) {
  54.             $tga $ticket->getNea();
  55.         }
  56.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: User: '.$token->getUser()->getUsername());
  57.         $userRoles implode(', '$token->getUser()->getRoles());
  58.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: User Roles: '.$userRoles);
  59.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: TransitionName: '.$event->getTransition()->getName());
  60.         switch ($event->getTransition()->getName()) {
  61.             case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET:
  62.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET');
  63.                 $this->authenticateAsSystemUser();
  64.                 // check if DL can be assigned automatically
  65.                 if ($tga->getMaintenanceCompany()) {
  66.                     $ticket->setAssignee($tga->getMaintenanceCompany());
  67.                 }
  68.                 $ticketStateMachine->apply($ticketTicketMalfunctionTransitionsAndStates::TRANS_TRANSFER_TO_DL);
  69.                 break;
  70.             case TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET:
  71.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: case TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET');
  72.                 $enabledTrans $ticketStateMachine->getEnabledTransitions($ticket);
  73.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: enabledTrans: '.count($enabledTrans));
  74.                 foreach ($enabledTrans as $k => $v) {
  75.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: enabledTrans: '.$v->getName());
  76.                 }
  77.                 $this->authenticateAsSystemUser();
  78.                 // rermove all given answers
  79.                 $ticket->setDueDate(null);
  80.                 $ticket->setFailureCause(null);
  81.                 $ticket->setReasonNewTermination(null);
  82.                 $ticket->setDismissReason(null);
  83.                 $ticket->setConfirmTechnicianOnSite(null);
  84.                 $ticket->setSignature(null);
  85.                 // $ticketStateMachine->apply($ticket, TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET);
  86.                 break;
  87.             case TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED:
  88.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED: '.TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED);
  89.                 $enabledTrans $ticketStateMachine->getEnabledTransitions($ticket);
  90.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: enabledTrans: '.count($enabledTrans));
  91.                 foreach ($enabledTrans as $k => $v) {
  92.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: enabledTrans: '.$v->getName());
  93.                 }
  94.                 // $this->authenticateAsSystemUser();
  95.                 // check if DL can be assigned automatically
  96.                 if ($tga->getMaintenanceCompany()) {
  97.                     $ticket->setAssignee($tga->getMaintenanceCompany());
  98.                 }
  99.                 $ticketStateMachine->apply($ticketTicketMalfunctionTransitionsAndStates::TRANS_TERMINATION);
  100.                 break;
  101.             default:
  102.                 if (TicketMalfunctionTransitionsAndStates::TRANS_TRANSFER_TO_DL != $event->getTransition()->getName()) {
  103.                     // call api request
  104.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: enabledTrans: '.$event->getTransition()->getName());
  105.                     $reason $event->getTransition()->getName();
  106.                     $date $ticket->getDueDate();
  107.                     $reasons = [trim($ticket->getFailureCause()), trim($ticket->getReasonNewTermination()), trim($ticket->getDismissReason())];
  108.                     $reasonString implode("\n"$reasons);
  109.                     // ablehnen soll nicht an die API uebertragen werden
  110.                     if (TicketMalfunctionTransitionsAndStates::TRANS_DECLINE != $event->getTransition()->getName()) {
  111.                         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: postStateRemote:');
  112.                         $this->apiService->postStateRemote($ticket->getElevator(), $ticket->getElevator()->getState(), $date$reasonString);
  113.                     }
  114.                 }
  115.                 break;
  116.         }
  117.     }
  118.     public function onWorkflowZuesEntered($event)
  119.     {
  120.         // echo "onWorkflowAwmEntered: ".$event->getSubject()->getMarking()."<br />";
  121.         $ticket $event->getSubject();
  122.         $ticketStateMachine $this->workflowRegistry->get($ticket$ticket->getType());
  123.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowZuesEntered: ENTERED');
  124.         $token $this->tokenStorage->getToken();
  125.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowZuesEntered: transition: '.$event->getTransition()->getName());
  126.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: ENTERED Malfunction');
  127.         if ($ticket->getElevator()) {
  128.             $tga $ticket->getElevator();
  129.         }
  130.         if ($ticket->getNea()) {
  131.             $tga $ticket->getNea();
  132.         }
  133.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: User: '.$token->getUser()->getUsername());
  134.         $userRoles implode(', '$token->getUser()->getRoles());
  135.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: User Roles: '.$userRoles);
  136.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: TransitionName: '.$event->getTransition()->getName());
  137.         switch ($event->getTransition()->getName()) {
  138.             case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET:
  139.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET');
  140.                 $this->authenticateAsSystemUser();
  141.                 // check if DL can be assigned automatically
  142.                 if ($tga->getMaintenanceCompany()) {
  143.                     $ticket->setAssignee($tga->getMaintenanceCompany());
  144.                 }
  145.                 $ticketStateMachine->apply($ticketTicketMalfunctionTransitionsAndStates::TRANS_TRANSFER_TO_DL);
  146.                 break;
  147.             case TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET:
  148.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: case TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET');
  149.                 $enabledTrans $ticketStateMachine->getEnabledTransitions($ticket);
  150.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: enabledTrans: '.count($enabledTrans));
  151.                 foreach ($enabledTrans as $k => $v) {
  152.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: enabledTrans: '.$v->getName());
  153.                 }
  154.                 $this->authenticateAsSystemUser();
  155.                 // rermove all given answers
  156.                 $ticket->setDueDate(null);
  157.                 $ticket->setFailureCause(null);
  158.                 $ticket->setReasonNewTermination(null);
  159.                 $ticket->setDismissReason(null);
  160.                 $ticket->setConfirmTechnicianOnSite(null);
  161.                 $ticket->setSignature(null);
  162.                 // $ticketStateMachine->apply($ticket, TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET);
  163.                 break;
  164.             case TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED:
  165.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED: '.TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED);
  166.                 if ($tga->getMaintenanceCompany()) {
  167.                     $ticket->setAssignee($tga->getMaintenanceCompany());
  168.                 }
  169.                 break;
  170.             case TicketMalfunctionTransitionsAndStates::TRANS_REPAIRED:
  171.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: TRANS_REPAIRED - closing ticket');
  172.                 $originalToken $this->tokenStorage->getToken();
  173.                 $this->authenticateAsSystemUser();
  174.                 $ticketStateMachine->apply($ticketTicketMalfunctionTransitionsAndStates::TRANS_SYSTEM_CLOSE_TICKET);
  175.                 $this->tokenStorage->setToken($originalToken);
  176.                 break;
  177.             case TicketMalfunctionTransitionsAndStates::TRANS_REASSIGN_TO_DL:
  178.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: TRANS_REASSIGN_TO_DL - reassigned by custodian');
  179.                 break;
  180.             case TicketMalfunctionTransitionsAndStates::TRANS_DECLINE:
  181.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: TRANS_DECLINE - assign to custodian/operator');
  182.                 if ($tga->getCustodianCompany()) {
  183.                     $ticket->setAssignee($tga->getCustodianCompany());
  184.                 } elseif ($tga->getOperator()) {
  185.                     $ticket->setAssignee($tga->getOperator());
  186.                 }
  187.                 break;
  188.         }
  189.     }
  190.     public function onWorkflowWarningEntered($event)
  191.     {
  192.         // echo "onWorkflowAwmEntered: ".$event->getSubject()->getMarking()."<br />";
  193.         $ticket $event->getSubject();
  194.         $ticketStateMachine $this->workflowRegistry->get($ticket$ticket->getType());
  195.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowWarningEntered: ENTERED');
  196.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowWarningEntered: transition: '.$event->getTransition()->getName());
  197.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowWarningEntered: ENTERED WARNING');
  198.         if ($ticket->getElevator()) {
  199.             $tga $ticket->getElevator();
  200.         }
  201.         if ($ticket->getNea()) {
  202.             $tga $ticket->getNea();
  203.         }
  204.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowWarningEntered: TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED: '.TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED);
  205.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowWarningEntered: TransitionName: '.$event->getTransition()->getName());
  206.         switch ($event->getTransition()->getName()) {
  207.             case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET:
  208.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowWarningEntered: case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET');
  209.                 $this->authenticateAsSystemUser();
  210.                 // check if DL can be assigned automatically
  211.                 if ($tga->getMaintenanceCompany()) {
  212.                     $ticket->setAssignee($tga->getMaintenanceCompany());
  213.                 }
  214.                 // TODO: check if tickets should automatically assigend to DL
  215.                 // $this->em->persist($ticket);
  216.                 // $this->em->flush();
  217.                 $ticketStateMachine->apply($ticketTicketMalfunctionTransitionsAndStates::TRANS_TRANSFER_TO_DL);
  218.                 break;
  219.             case TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET:
  220.                 // rermove all given answers
  221.                 $ticket->setDueDate(null);
  222.                 $ticket->setFailureCause(null);
  223.                 $ticket->setReasonNewTermination(null);
  224.                 $ticket->setDismissReason(null);
  225.                 $ticket->setConfirmTechnicianOnSite(null);
  226.                 $ticket->setSignature(null);
  227.                 break;
  228.         }
  229.     }
  230.     public function onWorkflowRefuelEntered($event)
  231.     {
  232.         // echo "onWorkflowAwmEntered: ".$event->getSubject()->getMarking()."<br />";
  233.         $ticket $event->getSubject();
  234.         $ticketStateMachine $this->workflowRegistry->get($ticket$ticket->getType());
  235.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowRefuelEntered: ENTERED');
  236.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowRefuelEntered: transition: '.$event->getTransition()->getName());
  237.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowRefuelEntered: ENTERED Refuel');
  238.         if ($ticket->getNea()) {
  239.             $tga $ticket->getNea();
  240.         }
  241.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowRefuelEntered: TransitionName: '.$event->getTransition()->getName());
  242.         switch ($event->getTransition()->getName()) {
  243.             case TicketRefuelTransitionsAndStates::TRANS_INITIALIZE_TICKET:
  244.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowRefuelEntered: case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET');
  245.                 $this->authenticateAsSystemUser();
  246.                 // check if DL can be assigned automatically
  247.                 if ($tga->getTankCompany()) {
  248.                     $ticket->setAssignee($tga->getTankCompany());
  249.                 }
  250.                 // TODO: check if tickets should automatically assigend to DL
  251.                 // $this->em->persist($ticket);
  252.                 // $this->em->flush();
  253.                 $ticketStateMachine->apply($ticketTicketRefuelTransitionsAndStates::TRANS_TRANSFER_TO_DL);
  254.                 break;
  255.             case TicketRefuelTransitionsAndStates::TRANS_REOPEN_TICKET:
  256.                 // rermove all given answers
  257.                 $ticket->setDueDate(null);
  258.                 $ticket->setFailureCause(null);
  259.                 $ticket->setReasonNewTermination(null);
  260.                 $ticket->setDismissReason(null);
  261.                 $ticket->setConfirmTechnicianOnSite(null);
  262.                 $ticket->setSignature(null);
  263.                 break;
  264.         }
  265.     }
  266.     public function onWorkflowTicketTransition(TransitionEvent $event)
  267.     {
  268.         $this->logger->debug('aco.DEBUG: TicketGenerator: workflow: onWorkflowTicketTransition');
  269.         $context $event->getContext();
  270.         $user $this->tokenStorage->getToken()->getUser();
  271.         if ($user instanceof UserInterface) {
  272.             $context['user'] = $user->getUsername();
  273.         }
  274.         $this->logger->debug('aco.DEBUG: workflow_transition: onWorkflowAwmEntered: User: '.$user->getUsername());
  275.         $context['transitionTo'] = [
  276.             $event->getSubject()->getMarking(),
  277.         ];
  278.         $ticketRepo $this->em->getRepository(Ticket::class);
  279.         $reciepients $ticketRepo->getNotificationReciepients($event->getSubject(), true);
  280.         $context['mailing'] = implode(', '$reciepients);
  281.         $event->setContext($context);
  282.     }
  283.     public function onWorkflowAwmEntered($event)
  284.     {
  285.         $this->logger->debug('aco.DEBUG: workflow_transition: onWorkflowAwmEntered: ENTERED');
  286.         $ticket $event->getSubject();
  287.         $ticketStateMachine $this->workflowRegistry->get($ticket$ticket->getType());
  288.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowAwmEntered: AWM');
  289.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowAwmEntered: transition: '.$event->getTransition()->getName());
  290.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: ENTERED AWM');
  291.         switch ($event->getTransition()->getName()) {
  292.             case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET:
  293.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET');
  294.                 $this->authenticateAsSystemUser();
  295.                 // check if DL can be assigned automatically
  296.                 if ($ticket->getElevator()) {
  297.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET: Ticket has elevator: '.$ticket->getElevator()->getId());
  298.                 } else {
  299.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET: Ticket has NO elevator!!!');
  300.                 }
  301.                 if ($ticket->getElevator()->getMaintenanceCompany()) {
  302.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET: Ticket can be applied automatically. ');
  303.                     $ticket->setAssignee($ticket->getElevator()->getMaintenanceCompany());
  304.                 } else {
  305.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET: Ticket can NOT be applied automatically. ');
  306.                 }
  307.                 $ticketStateMachine->apply($ticketTicketAwmTransitionsAndStates::TRANS_TRANSFER_TO_DL);
  308.                 break;
  309.             case TicketAwmTransitionsAndStates::TRANS_REOPEN_TICKET:
  310.                 // rermove all given answers
  311.                 $ticket->setDueDate(null);
  312.                 $ticket->setFailureCause(null);
  313.                 $ticket->setReasonNewTermination(null);
  314.                 $ticket->setDismissReason(null);
  315.                 $ticket->setConfirmTechnicianOnSite(null);
  316.                 $ticket->setSignature(null);
  317.                 break;
  318.                 // case TicketAwmTransitionsAndStates::TRANS_EMERGENCY_MODE:
  319.             case TicketAwmTransitionsAndStates::TRANS_NOT_REPAIRED:
  320.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::NOT_REPAIRED');
  321.                 $ticketStateMachine->apply($ticketTicketAwmTransitionsAndStates::TRANS_TERMINATION);
  322.                 break;
  323.         }
  324.     }
  325.     public function onWorkflowSensorEntered($event)
  326.     {
  327.         // echo "onWorkflowSensorEntered: ".$event->getSubject()->getMarking()."<br />";
  328.         $ticket $event->getSubject();
  329.         $ticketStateMachine $this->workflowRegistry->get($ticket$ticket->getType());
  330.         $this->logger->debug('aco.DEBUG: workflow_transition: onWorkflowSensorEntered: ENTERED');
  331.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowSensorEntered: AWM');
  332.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowSensorEntered: transition: '.$event->getTransition()->getName());
  333.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowSensorEntered: ENTERED AWM');
  334.         switch ($event->getTransition()->getName()) {
  335.             case TicketSensorTransitionsAndStates::TRANS_INITIALIZE_TICKET:
  336.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowSensorEntered: case TicketSensorTransitionsAndStates::TRANS_INITIALIZE_TICKET');
  337.                 $this->authenticateAsSystemUser();
  338.                 // check if DL can be assigned automatically
  339.                 if ($ticket->getElevator()->getControlCompany()) {
  340.                     $ticket->setAssignee($ticket->getElevator()->getControlCompany());
  341.                 }
  342.                 $ticketStateMachine->apply($ticketTicketSensorTransitionsAndStates::TRANS_TRANSFER_TO_DL);
  343.                 break;
  344.             case TicketSensorTransitionsAndStates::TRANS_REOPEN_TICKET:
  345.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowSensorEntered: case TicketSensorTransitionsAndStates::TRANS_REOPEN_TICKET');
  346.                 // rermove all given answers
  347.                 $ticket->setDueDate(null);
  348.                 $ticket->setFailureCause(null);
  349.                 $ticket->setReasonNewTermination(null);
  350.                 $ticket->setDismissReason(null);
  351.                 $ticket->setConfirmTechnicianOnSite(null);
  352.                 $ticket->setSignature(null);
  353.                 break;
  354.                 // case TicketSensorTransitionsAndStates::TRANS_EMERGENCY_MODE:
  355.             case TicketSensorTransitionsAndStates::TRANS_NOT_REPAIRED:
  356.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowSensorEntered: case TicketSensorTransitionsAndStates::NOT_REPAIRED');
  357.                 $ticketStateMachine->apply($ticketTicketSensorTransitionsAndStates::TRANS_TERMINATION);
  358.                 break;
  359.         }
  360.     }
  361.     public static function getSubscribedEvents(): array
  362.     {
  363.         return [
  364.             TransitionEvent::class => 'onWorkflowTicketTransition',
  365.             'workflow.malfunction.entered' => 'onWorkflowMalfunctionEntered',
  366.             'workflow.refuel.entered' => 'onWorkflowRefuelEntered',
  367.             'workflow.awm.entered' => 'onWorkflowAwmEntered',
  368.             'workflow.neamalfunction.entered' => 'onWorkflowMalfunctionEntered',
  369.             'workflow.sensor.entered' => 'onWorkflowSensorEntered',
  370.             'workflow.warning.entered' => 'onWorkflowWarningEntered',
  371.             'workflow.zues.entered' => 'onWorkflowZuesEntered',
  372.             // 'workflow.awm.enter' => 'onWorkflowAwmEnter',
  373.             // 'workflow.awm.leave' => 'onWorkflowAwmLeave',
  374.             // 'workflow.awm.completed' => 'onWorkflowAwmCompleted',
  375.         ];
  376.     }
  377. }