<?php
namespace App\EventSubscriber;
use App\Service\FactureJournaliereService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Core\Event\AuthenticationSuccessEvent;
class LoginSubscriber implements EventSubscriberInterface
{
private FactureJournaliereService $factureJournaliereService;
public function __construct(
FactureJournaliereService $factureJournaliereService
) {
$this->factureJournaliereService = $factureJournaliereService;
}
public static function getSubscribedEvents(): array
{
return [
InteractiveLoginEvent::class => 'onInteractiveLogin',
AuthenticationSuccessEvent::class => 'onAuthenticationSuccess',
];
}
public function onInteractiveLogin(InteractiveLoginEvent $event): void
{
$user = $event->getAuthenticationToken()->getUser();
$this->createJournaliereFacture($user);
}
public function onAuthenticationSuccess(AuthenticationSuccessEvent $event): void
{
$user = $event->getAuthenticationToken()->getUser();
$this->createJournaliereFacture($user);
}
private function createJournaliereFacture($user): void
{
if (!$user) {
return;
}
// Vérifier les rôles
$roles = $user->getRoles();
$hasRole = false;
foreach ($roles as $role) {
if (in_array($role, ['ROLE_AGENT', 'ROLE_GERANT', 'ROLE_ADMIN', 'ROLE_SUPER_ADMIN', 'ROLE_PLANNING', 'ROLE_COMPTABLE','ROLE_FINANCE','ROLE_RECEPTION','ROLE_STOCK_CENTRALE'])) {
$hasRole = true;
break;
}
}
if (!$hasRole) {
return;
}
// Récupérer la date actuelle
$today = (new \DateTime())->format('Y-m-d');
// Créer la facture si elle n'existe pas
$this->factureJournaliereService->getOrCreateJournaliereFacture($today);
}
}