src/EventSubscriber/LoginSubscriber.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Service\FactureJournaliereService;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  6. use Symfony\Component\Security\Core\Event\AuthenticationSuccessEvent;
  7. class LoginSubscriber implements EventSubscriberInterface
  8. {
  9.     private FactureJournaliereService $factureJournaliereService;
  10.     public function __construct(
  11.         FactureJournaliereService $factureJournaliereService
  12.     ) {
  13.         $this->factureJournaliereService = $factureJournaliereService;
  14.     }
  15.     public static function getSubscribedEvents(): array
  16.     {
  17.         return [
  18.             InteractiveLoginEvent::class => 'onInteractiveLogin',
  19.             AuthenticationSuccessEvent::class => 'onAuthenticationSuccess',
  20.         ];
  21.     }
  22.     public function onInteractiveLogin(InteractiveLoginEvent $event): void
  23.     {
  24.         $user = $event->getAuthenticationToken()->getUser();
  25.         $this->createJournaliereFacture($user);
  26.     }
  27.     public function onAuthenticationSuccess(AuthenticationSuccessEvent $event): void
  28.     {
  29.         $user = $event->getAuthenticationToken()->getUser();
  30.         $this->createJournaliereFacture($user);
  31.     }
  32.     private function createJournaliereFacture($user): void
  33.     {
  34.         if (!$user) {
  35.             return;
  36.         }
  37.         // Vérifier les rôles
  38.         $roles = $user->getRoles();
  39.         $hasRole = false;
  40.         foreach ($roles as $role) {
  41.             if (in_array($role, ['ROLE_AGENT', 'ROLE_GERANT', 'ROLE_ADMIN', 'ROLE_SUPER_ADMIN', 'ROLE_PLANNING', 'ROLE_COMPTABLE','ROLE_FINANCE','ROLE_RECEPTION','ROLE_STOCK_CENTRALE'])) {
  42.                 $hasRole = true;
  43.                 break;
  44.             }
  45.         }
  46.         if (!$hasRole) {
  47.             return;
  48.         }
  49.         // Récupérer la date actuelle
  50.         $today = (new \DateTime())->format('Y-m-d');
  51.         // Créer la facture si elle n'existe pas
  52.         $this->factureJournaliereService->getOrCreateJournaliereFacture($today);
  53.     }
  54. }