src/EventSubscriber/TwigGlobalSubscriber.php line 38

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber;
  4. use App\Repository\ConfiguracionRepository;
  5. use App\Repository\MarcajeRepository;
  6. use App\Repository\NotificacionRepository;
  7. use App\Service\Marcaje\Usuario\HorasMarcajeSemanaActualAprobadasJefePorUsuario;
  8. use App\Service\Solicitud\TotalDiasSolicitudesTiposAprobadasPorUsuario;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. use Symfony\Component\Security\Core\Security;
  12. use Twig\Environment;
  13. class TwigGlobalSubscriber implements EventSubscriberInterface
  14. {
  15.     public function __construct(
  16.         private readonly Environment $twig,
  17.         private readonly Security $security,
  18.         private readonly ConfiguracionRepository $configuracionRepository,
  19.         private readonly MarcajeRepository $marcajeRepository,
  20.         private readonly NotificacionRepository $notificationRepository,
  21.         private readonly HorasMarcajeSemanaActualAprobadasJefePorUsuario $horasMarcajeSemanaActualAprobadasJefePorUsuario,
  22.         private readonly TotalDiasSolicitudesTiposAprobadasPorUsuario $totalDiasSolicitudesTiposAprobadasPorUsuario,
  23.     ) {
  24.     }
  25.     public static function getSubscribedEvents(): array
  26.     {
  27.         return [
  28.             KernelEvents::CONTROLLER => ['addTwigGlobals'],
  29.             KernelEvents::EXCEPTION  => ['addTwigGlobals'],
  30.         ];
  31.     }
  32.     public function addTwigGlobals(): void
  33.     {
  34.         $currentUserDaySummary = [
  35.             'horas_semana_actual' => 0,
  36.             'total_dias'          => 0,
  37.             'vacaciones'          => 0,
  38.             'vacaciones_last'     => 0,
  39.             'baja'                => 0,
  40.             'asuntos_propios'     => 0,
  41.             'otros'               => 0,
  42.         ];
  43.         $marcajeActivo null;
  44.         /** @var \App\Entity\Usuario $usuario */
  45.         if ($usuario $this->security->getUser()) {
  46.             $currentUserDaySummary = [
  47.                 'horas_semana_actual' => $this->horasMarcajeSemanaActualAprobadasJefePorUsuario->__invoke($usuario),
  48.                 ...$this->totalDiasSolicitudesTiposAprobadasPorUsuario->__invoke($usuario),
  49.             ];
  50.             $marcajeActivo $this->marcajeRepository->marcajeActivo($usuario);
  51.         }
  52.         $this->twig->addGlobal('configuracion'$this->configuracionRepository->findConfiguracion());
  53.         $this->twig->addGlobal('notificaciones'$this->notificationRepository->findByUser($usuario));
  54.         $this->twig->addGlobal('current_user_day_summary'$currentUserDaySummary);
  55.         $this->twig->addGlobal('marcaje_activo'$marcajeActivo);
  56.     }
  57. }