src/EventSubscriber/TransitionEventSubscriber.php line 444

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.                 // Auto-Resolve-Felder zurücksetzen: Reopen bedeutet, der Auto-Resolve war verfrüht —
  86.                 // das 24h-Fenster beginnt von vorn, für die Qualitätsmetrik zählt der finale Durchlauf.
  87.                 $ticket->setMalfunctionEndedAt(null);
  88.                 $ticket->setAutoResolvedAt(null);
  89.                 $ticket->setFeedbackDueDate(null);
  90.                 $ticket->setFeedbackResult(null);
  91.                 $ticket->setFeedbackAt(null);
  92.                 // $ticketStateMachine->apply($ticket, TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET);
  93.                 break;
  94.             // Auto-Resolve-Transitionen: reine Feld-Pflege, bewusst VOR dem default-Zweig —
  95.             // die LIS-API-Meldung dort darf für diese Systemvorgänge nicht feuern (die Anlage
  96.             // ist wieder OK, die Entstörung meldet der ElevatorCheckCommand bereits selbst).
  97.             case TicketMalfunctionTransitionsAndStates::TRANS_AUTO_RESOLVE:
  98.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: case TRANS_AUTO_RESOLVE');
  99.                 $now = new \DateTime();
  100.                 $ticket->setAutoResolvedAt($now);
  101.                 $ticket->setFeedbackDueDate((clone $now)->modify('+'.Ticket::FEEDBACK_DUE_DAYS.' days'));
  102.                 break;
  103.             case TicketMalfunctionTransitionsAndStates::TRANS_FEEDBACK_DEPLOYMENT:
  104.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: case TRANS_FEEDBACK_DEPLOYMENT');
  105.                 $ticket->setFeedbackResult(Ticket::FEEDBACK_RESULT_DEPLOYMENT);
  106.                 $ticket->setFeedbackAt(new \DateTime());
  107.                 break;
  108.             case TicketMalfunctionTransitionsAndStates::TRANS_FEEDBACK_NO_DEPLOYMENT:
  109.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: case TRANS_FEEDBACK_NO_DEPLOYMENT');
  110.                 $ticket->setFeedbackResult(Ticket::FEEDBACK_RESULT_NO_DEPLOYMENT);
  111.                 $ticket->setFeedbackAt(new \DateTime());
  112.                 break;
  113.             case TicketMalfunctionTransitionsAndStates::TRANS_FEEDBACK_EXPIRE:
  114.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: case TRANS_FEEDBACK_EXPIRE');
  115.                 $ticket->setFeedbackResult(Ticket::FEEDBACK_RESULT_NONE);
  116.                 $ticket->setFeedbackAt(new \DateTime());
  117.                 break;
  118.             case TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED:
  119.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED: '.TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED);
  120.                 $enabledTrans $ticketStateMachine->getEnabledTransitions($ticket);
  121.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: enabledTrans: '.count($enabledTrans));
  122.                 foreach ($enabledTrans as $k => $v) {
  123.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: enabledTrans: '.$v->getName());
  124.                 }
  125.                 // $this->authenticateAsSystemUser();
  126.                 // check if DL can be assigned automatically
  127.                 if ($tga->getMaintenanceCompany()) {
  128.                     $ticket->setAssignee($tga->getMaintenanceCompany());
  129.                 }
  130.                 $ticketStateMachine->apply($ticketTicketMalfunctionTransitionsAndStates::TRANS_TERMINATION);
  131.                 break;
  132.             default:
  133.                 if (TicketMalfunctionTransitionsAndStates::TRANS_TRANSFER_TO_DL != $event->getTransition()->getName()) {
  134.                     // call api request
  135.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: enabledTrans: '.$event->getTransition()->getName());
  136.                     $reason $event->getTransition()->getName();
  137.                     $date $ticket->getDueDate();
  138.                     $reasons = [trim($ticket->getFailureCause()), trim($ticket->getReasonNewTermination()), trim($ticket->getDismissReason())];
  139.                     $reasonString implode("\n"$reasons);
  140.                     // ablehnen soll nicht an die API uebertragen werden.
  141.                     // Nur LEG-Anlagen (clientAco.apiEnabled) melden an die LIS-API —
  142.                     // gleicher Zugehörigkeits-Guard wie in den LegApi*-Commands.
  143.                     if (
  144.                         TicketMalfunctionTransitionsAndStates::TRANS_DECLINE != $event->getTransition()->getName()
  145.                         && null !== $ticket->getElevator()
  146.                         && null !== $ticket->getElevator()->getClientAco()
  147.                         && $ticket->getElevator()->getClientAco()->getApiEnabled()
  148.                     ) {
  149.                         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowMalfunctionEntered: postStateRemote:');
  150.                         $this->apiService->postStateRemote($ticket->getElevator(), $ticket->getElevator()->getState(), $date$reasonString);
  151.                     }
  152.                 }
  153.                 break;
  154.         }
  155.     }
  156.     public function onWorkflowZuesEntered($event)
  157.     {
  158.         // echo "onWorkflowAwmEntered: ".$event->getSubject()->getMarking()."<br />";
  159.         $ticket $event->getSubject();
  160.         $ticketStateMachine $this->workflowRegistry->get($ticket$ticket->getType());
  161.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowZuesEntered: ENTERED');
  162.         $token $this->tokenStorage->getToken();
  163.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowZuesEntered: transition: '.$event->getTransition()->getName());
  164.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: ENTERED Malfunction');
  165.         if ($ticket->getElevator()) {
  166.             $tga $ticket->getElevator();
  167.         }
  168.         if ($ticket->getNea()) {
  169.             $tga $ticket->getNea();
  170.         }
  171.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: User: '.$token->getUser()->getUsername());
  172.         $userRoles implode(', '$token->getUser()->getRoles());
  173.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: User Roles: '.$userRoles);
  174.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: TransitionName: '.$event->getTransition()->getName());
  175.         switch ($event->getTransition()->getName()) {
  176.             case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET:
  177.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET');
  178.                 $this->authenticateAsSystemUser();
  179.                 // check if DL can be assigned automatically
  180.                 if ($tga->getMaintenanceCompany()) {
  181.                     $ticket->setAssignee($tga->getMaintenanceCompany());
  182.                 }
  183.                 $ticketStateMachine->apply($ticketTicketMalfunctionTransitionsAndStates::TRANS_TRANSFER_TO_DL);
  184.                 break;
  185.             case TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET:
  186.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: case TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET');
  187.                 $enabledTrans $ticketStateMachine->getEnabledTransitions($ticket);
  188.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: enabledTrans: '.count($enabledTrans));
  189.                 foreach ($enabledTrans as $k => $v) {
  190.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: enabledTrans: '.$v->getName());
  191.                 }
  192.                 $this->authenticateAsSystemUser();
  193.                 // rermove all given answers
  194.                 $ticket->setDueDate(null);
  195.                 $ticket->setFailureCause(null);
  196.                 $ticket->setReasonNewTermination(null);
  197.                 $ticket->setDismissReason(null);
  198.                 $ticket->setConfirmTechnicianOnSite(null);
  199.                 $ticket->setSignature(null);
  200.                 // $ticketStateMachine->apply($ticket, TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET);
  201.                 break;
  202.             case TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED:
  203.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED: '.TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED);
  204.                 if ($tga->getMaintenanceCompany()) {
  205.                     $ticket->setAssignee($tga->getMaintenanceCompany());
  206.                 }
  207.                 break;
  208.             case TicketMalfunctionTransitionsAndStates::TRANS_REPAIRED:
  209.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: TRANS_REPAIRED - closing ticket');
  210.                 $originalToken $this->tokenStorage->getToken();
  211.                 $this->authenticateAsSystemUser();
  212.                 $ticketStateMachine->apply($ticketTicketMalfunctionTransitionsAndStates::TRANS_SYSTEM_CLOSE_TICKET);
  213.                 $this->tokenStorage->setToken($originalToken);
  214.                 break;
  215.             case TicketMalfunctionTransitionsAndStates::TRANS_REASSIGN_TO_DL:
  216.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: TRANS_REASSIGN_TO_DL - reassigned by custodian');
  217.                 break;
  218.             case TicketMalfunctionTransitionsAndStates::TRANS_DECLINE:
  219.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowZuesEntered: TRANS_DECLINE - assign to custodian/operator');
  220.                 if ($tga->getCustodianCompany()) {
  221.                     $ticket->setAssignee($tga->getCustodianCompany());
  222.                 } elseif ($tga->getOperator()) {
  223.                     $ticket->setAssignee($tga->getOperator());
  224.                 }
  225.                 break;
  226.         }
  227.     }
  228.     public function onWorkflowWarningEntered($event)
  229.     {
  230.         // echo "onWorkflowAwmEntered: ".$event->getSubject()->getMarking()."<br />";
  231.         $ticket $event->getSubject();
  232.         $ticketStateMachine $this->workflowRegistry->get($ticket$ticket->getType());
  233.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowWarningEntered: ENTERED');
  234.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowWarningEntered: transition: '.$event->getTransition()->getName());
  235.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowWarningEntered: ENTERED WARNING');
  236.         if ($ticket->getElevator()) {
  237.             $tga $ticket->getElevator();
  238.         }
  239.         if ($ticket->getNea()) {
  240.             $tga $ticket->getNea();
  241.         }
  242.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowWarningEntered: TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED: '.TicketMalfunctionTransitionsAndStates::TRANS_NOT_REPAIRED);
  243.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowWarningEntered: TransitionName: '.$event->getTransition()->getName());
  244.         switch ($event->getTransition()->getName()) {
  245.             case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET:
  246.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowWarningEntered: case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET');
  247.                 $this->authenticateAsSystemUser();
  248.                 // check if DL can be assigned automatically
  249.                 if ($tga->getMaintenanceCompany()) {
  250.                     $ticket->setAssignee($tga->getMaintenanceCompany());
  251.                 }
  252.                 // TODO: check if tickets should automatically assigend to DL
  253.                 // $this->em->persist($ticket);
  254.                 // $this->em->flush();
  255.                 $ticketStateMachine->apply($ticketTicketMalfunctionTransitionsAndStates::TRANS_TRANSFER_TO_DL);
  256.                 break;
  257.             case TicketMalfunctionTransitionsAndStates::TRANS_REOPEN_TICKET:
  258.                 // rermove all given answers
  259.                 $ticket->setDueDate(null);
  260.                 $ticket->setFailureCause(null);
  261.                 $ticket->setReasonNewTermination(null);
  262.                 $ticket->setDismissReason(null);
  263.                 $ticket->setConfirmTechnicianOnSite(null);
  264.                 $ticket->setSignature(null);
  265.                 break;
  266.         }
  267.     }
  268.     public function onWorkflowRefuelEntered($event)
  269.     {
  270.         // echo "onWorkflowAwmEntered: ".$event->getSubject()->getMarking()."<br />";
  271.         $ticket $event->getSubject();
  272.         $ticketStateMachine $this->workflowRegistry->get($ticket$ticket->getType());
  273.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowRefuelEntered: ENTERED');
  274.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowRefuelEntered: transition: '.$event->getTransition()->getName());
  275.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowRefuelEntered: ENTERED Refuel');
  276.         if ($ticket->getNea()) {
  277.             $tga $ticket->getNea();
  278.         }
  279.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowRefuelEntered: TransitionName: '.$event->getTransition()->getName());
  280.         switch ($event->getTransition()->getName()) {
  281.             case TicketRefuelTransitionsAndStates::TRANS_INITIALIZE_TICKET:
  282.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowRefuelEntered: case TicketMalfunctionTransitionsAndStates::TRANS_INITIALIZE_TICKET');
  283.                 $this->authenticateAsSystemUser();
  284.                 // check if DL can be assigned automatically
  285.                 if ($tga->getTankCompany()) {
  286.                     $ticket->setAssignee($tga->getTankCompany());
  287.                 }
  288.                 // TODO: check if tickets should automatically assigend to DL
  289.                 // $this->em->persist($ticket);
  290.                 // $this->em->flush();
  291.                 $ticketStateMachine->apply($ticketTicketRefuelTransitionsAndStates::TRANS_TRANSFER_TO_DL);
  292.                 break;
  293.             case TicketRefuelTransitionsAndStates::TRANS_REOPEN_TICKET:
  294.                 // rermove all given answers
  295.                 $ticket->setDueDate(null);
  296.                 $ticket->setFailureCause(null);
  297.                 $ticket->setReasonNewTermination(null);
  298.                 $ticket->setDismissReason(null);
  299.                 $ticket->setConfirmTechnicianOnSite(null);
  300.                 $ticket->setSignature(null);
  301.                 break;
  302.         }
  303.     }
  304.     public function onWorkflowTicketTransition(TransitionEvent $event)
  305.     {
  306.         $this->logger->debug('aco.DEBUG: TicketGenerator: workflow: onWorkflowTicketTransition');
  307.         $context $event->getContext();
  308.         $user $this->tokenStorage->getToken()->getUser();
  309.         if ($user instanceof UserInterface) {
  310.             $context['user'] = $user->getUsername();
  311.         }
  312.         $this->logger->debug('aco.DEBUG: workflow_transition: onWorkflowAwmEntered: User: '.$user->getUsername());
  313.         $context['transitionTo'] = [
  314.             $event->getSubject()->getMarking(),
  315.         ];
  316.         $ticketRepo $this->em->getRepository(Ticket::class);
  317.         $reciepients $ticketRepo->getNotificationReciepients($event->getSubject(), true);
  318.         $context['mailing'] = implode(', '$reciepients);
  319.         $event->setContext($context);
  320.     }
  321.     public function onWorkflowAwmEntered($event)
  322.     {
  323.         $this->logger->debug('aco.DEBUG: workflow_transition: onWorkflowAwmEntered: ENTERED');
  324.         $ticket $event->getSubject();
  325.         $ticketStateMachine $this->workflowRegistry->get($ticket$ticket->getType());
  326.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowAwmEntered: AWM');
  327.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowAwmEntered: transition: '.$event->getTransition()->getName());
  328.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: ENTERED AWM');
  329.         switch ($event->getTransition()->getName()) {
  330.             case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET:
  331.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET');
  332.                 $this->authenticateAsSystemUser();
  333.                 // check if DL can be assigned automatically
  334.                 if ($ticket->getElevator()) {
  335.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET: Ticket has elevator: '.$ticket->getElevator()->getId());
  336.                 } else {
  337.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET: Ticket has NO elevator!!!');
  338.                 }
  339.                 if ($ticket->getElevator()->getMaintenanceCompany()) {
  340.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET: Ticket can be applied automatically. ');
  341.                     $ticket->setAssignee($ticket->getElevator()->getMaintenanceCompany());
  342.                 } else {
  343.                     $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::TRANS_INITIALIZE_TICKET: Ticket can NOT be applied automatically. ');
  344.                 }
  345.                 $ticketStateMachine->apply($ticketTicketAwmTransitionsAndStates::TRANS_TRANSFER_TO_DL);
  346.                 break;
  347.             case TicketAwmTransitionsAndStates::TRANS_REOPEN_TICKET:
  348.                 // rermove all given answers
  349.                 $ticket->setDueDate(null);
  350.                 $ticket->setFailureCause(null);
  351.                 $ticket->setReasonNewTermination(null);
  352.                 $ticket->setDismissReason(null);
  353.                 $ticket->setConfirmTechnicianOnSite(null);
  354.                 $ticket->setSignature(null);
  355.                 break;
  356.                 // case TicketAwmTransitionsAndStates::TRANS_EMERGENCY_MODE:
  357.             case TicketAwmTransitionsAndStates::TRANS_NOT_REPAIRED:
  358.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowAwmEntered: case TicketAwmTransitionsAndStates::NOT_REPAIRED');
  359.                 $ticketStateMachine->apply($ticketTicketAwmTransitionsAndStates::TRANS_TERMINATION);
  360.                 break;
  361.         }
  362.     }
  363.     public function onWorkflowSensorEntered($event)
  364.     {
  365.         // echo "onWorkflowSensorEntered: ".$event->getSubject()->getMarking()."<br />";
  366.         $ticket $event->getSubject();
  367.         $ticketStateMachine $this->workflowRegistry->get($ticket$ticket->getType());
  368.         $this->logger->debug('aco.DEBUG: workflow_transition: onWorkflowSensorEntered: ENTERED');
  369.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowSensorEntered: AWM');
  370.         $this->logger->debug('aco.DEBUG: workflow: onWorkflowSensorEntered: transition: '.$event->getTransition()->getName());
  371.         $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowSensorEntered: ENTERED AWM');
  372.         switch ($event->getTransition()->getName()) {
  373.             case TicketSensorTransitionsAndStates::TRANS_INITIALIZE_TICKET:
  374.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowSensorEntered: case TicketSensorTransitionsAndStates::TRANS_INITIALIZE_TICKET');
  375.                 $this->authenticateAsSystemUser();
  376.                 // check if DL can be assigned automatically
  377.                 if ($ticket->getElevator()->getControlCompany()) {
  378.                     $ticket->setAssignee($ticket->getElevator()->getControlCompany());
  379.                 }
  380.                 $ticketStateMachine->apply($ticketTicketSensorTransitionsAndStates::TRANS_TRANSFER_TO_DL);
  381.                 break;
  382.             case TicketSensorTransitionsAndStates::TRANS_REOPEN_TICKET:
  383.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowSensorEntered: case TicketSensorTransitionsAndStates::TRANS_REOPEN_TICKET');
  384.                 // rermove all given answers
  385.                 $ticket->setDueDate(null);
  386.                 $ticket->setFailureCause(null);
  387.                 $ticket->setReasonNewTermination(null);
  388.                 $ticket->setDismissReason(null);
  389.                 $ticket->setConfirmTechnicianOnSite(null);
  390.                 $ticket->setSignature(null);
  391.                 break;
  392.                 // case TicketSensorTransitionsAndStates::TRANS_EMERGENCY_MODE:
  393.             case TicketSensorTransitionsAndStates::TRANS_NOT_REPAIRED:
  394.                 $this->logger->debug('aco.DEBUG: workflow: workflow_transition: onWorkflowSensorEntered: case TicketSensorTransitionsAndStates::NOT_REPAIRED');
  395.                 $ticketStateMachine->apply($ticketTicketSensorTransitionsAndStates::TRANS_TERMINATION);
  396.                 break;
  397.         }
  398.     }
  399.     public static function getSubscribedEvents(): array
  400.     {
  401.         return [
  402.             TransitionEvent::class => 'onWorkflowTicketTransition',
  403.             'workflow.malfunction.entered' => 'onWorkflowMalfunctionEntered',
  404.             'workflow.refuel.entered' => 'onWorkflowRefuelEntered',
  405.             'workflow.awm.entered' => 'onWorkflowAwmEntered',
  406.             'workflow.neamalfunction.entered' => 'onWorkflowMalfunctionEntered',
  407.             'workflow.sensor.entered' => 'onWorkflowSensorEntered',
  408.             'workflow.warning.entered' => 'onWorkflowWarningEntered',
  409.             'workflow.zues.entered' => 'onWorkflowZuesEntered',
  410.             // 'workflow.awm.enter' => 'onWorkflowAwmEnter',
  411.             // 'workflow.awm.leave' => 'onWorkflowAwmLeave',
  412.             // 'workflow.awm.completed' => 'onWorkflowAwmCompleted',
  413.         ];
  414.     }
  415. }