src/EventSubscribers/Login/StartTimetableOnLoginSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscribers\Login;
  3. use App\Entity\Timetable;
  4. use App\Entity\User;
  5. use App\Services\TimetableService;
  6. use App\Services\UserService;
  7. use DateTimeImmutable;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  10. use Symfony\Component\Security\Http\SecurityEvents;
  11. use Throwable;
  12. class StartTimetableOnLoginSubscriber implements EventSubscriberInterface
  13. {
  14.     /** @var TimetableService */
  15.     private TimetableService $timetableService;
  16.     /** @var UserService */
  17.     private UserService $userService;
  18.     public function __construct(TimetableService $timetableServiceUserService $userService)
  19.     {
  20.         $this->timetableService $timetableService;
  21.         $this->userService $userService;
  22.     }
  23.     /**
  24.      * @param InteractiveLoginEvent $event
  25.      * @throws Throwable
  26.      */
  27.     public function onInteractiveLogin(InteractiveLoginEvent $event)
  28.     {
  29.         try {
  30.             $user $event->getAuthenticationToken()->getUser();
  31.             if ($user instanceof User) {
  32.                 /** @var Timetable $lastTimetableRecord */
  33.                 $lastTimetableRecord $user->getTimetables()->last();
  34.                 if (
  35.                     !empty($lastTimetableRecord)
  36.                     && empty($lastTimetableRecord->getFinishDatetime())
  37.                     && (new DateTimeImmutable())->getTimestamp() - $lastTimetableRecord->getStartDatetime()->getTimestamp() < 120
  38.                 ) {
  39.                     return;
  40.                 }
  41.                 if($user->isTimetableEnabled()){
  42.                     if($user->getTimetables()->last()){
  43.                         /** @var Timetable $lastTimetableRecord */
  44.                         $lastTimetableRecord $user->getTimetables()->last();
  45.                         $day_start $lastTimetableRecord->getStartDatetime()->format('d');
  46.                         $day_diff 0;
  47.                         if (!is_null($user->getLastActionTime())) {
  48.                             $day_last_action $user->getLastActionTime()->format('d');
  49.                             $day_diff $day_last_action $day_start;
  50.                         }
  51.                         $current_day date("d"time());
  52.                         $day_finish $lastTimetableRecord->getStartDatetime()->format('Y-m-d') . ' ' $user->getFinishWorkingTime() . ':00';
  53.                         if ($day_diff || ($current_day $day_start) > 0) {
  54.                             $date_finish = (new DateTimeImmutable())->setTimestamp(strtotime($day_finish));
  55.                             $this->timetableService->finish($user$date_finish);
  56.                             $this->userService->releaseCurrentCashdesk($user);
  57.                         }
  58.                     }
  59.                 }
  60.                 if (!empty($lastTimetableRecord) && empty($lastTimetableRecord->getFinishDatetime())) {
  61.                     if (empty($user->getLastActionTime())) {
  62.                         $this->timetableService->finish($user$lastTimetableRecord->getStartDatetime());
  63.                     } else {
  64.                         $this->timetableService->finish($user$user->getLastActionTime());
  65.                     }
  66.                     $this->userService->releaseCurrentCashdesk($user);
  67.                 }
  68.                 $this->timetableService->start($user);
  69.             }
  70.         } catch (Throwable $t) {
  71.             throw $t;
  72.         }
  73.     }
  74.     public static function getSubscribedEvents(): array
  75.     {
  76.         return [
  77.             SecurityEvents::INTERACTIVE_LOGIN => ["onInteractiveLogin"100],
  78.         ];
  79.     }
  80. }