<?php
declare(strict_types=1);
namespace App\EventSubscriber;
use App\Repository\ConfiguracionRepository;
use App\Repository\MarcajeRepository;
use App\Repository\NotificacionRepository;
use App\Service\Marcaje\Usuario\HorasMarcajeSemanaActualAprobadasJefePorUsuario;
use App\Service\Solicitud\TotalDiasSolicitudesTiposAprobadasPorUsuario;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Security;
use Twig\Environment;
class TwigGlobalSubscriber implements EventSubscriberInterface
{
public function __construct(
private readonly Environment $twig,
private readonly Security $security,
private readonly ConfiguracionRepository $configuracionRepository,
private readonly MarcajeRepository $marcajeRepository,
private readonly NotificacionRepository $notificationRepository,
private readonly HorasMarcajeSemanaActualAprobadasJefePorUsuario $horasMarcajeSemanaActualAprobadasJefePorUsuario,
private readonly TotalDiasSolicitudesTiposAprobadasPorUsuario $totalDiasSolicitudesTiposAprobadasPorUsuario,
) {
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::CONTROLLER => ['addTwigGlobals'],
KernelEvents::EXCEPTION => ['addTwigGlobals'],
];
}
public function addTwigGlobals(): void
{
$currentUserDaySummary = [
'horas_semana_actual' => 0,
'total_dias' => 0,
'vacaciones' => 0,
'vacaciones_last' => 0,
'baja' => 0,
'asuntos_propios' => 0,
'otros' => 0,
];
$marcajeActivo = null;
/** @var \App\Entity\Usuario $usuario */
if ($usuario = $this->security->getUser()) {
$currentUserDaySummary = [
'horas_semana_actual' => $this->horasMarcajeSemanaActualAprobadasJefePorUsuario->__invoke($usuario),
...$this->totalDiasSolicitudesTiposAprobadasPorUsuario->__invoke($usuario),
];
$marcajeActivo = $this->marcajeRepository->marcajeActivo($usuario);
}
$this->twig->addGlobal('configuracion', $this->configuracionRepository->findConfiguracion());
$this->twig->addGlobal('notificaciones', $this->notificationRepository->findByUser($usuario));
$this->twig->addGlobal('current_user_day_summary', $currentUserDaySummary);
$this->twig->addGlobal('marcaje_activo', $marcajeActivo);
}
}