<?php
namespace App\Controller;
use App\Entity\Einzeltransport;
use App\Entity\Transportunternehmen;
use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
#[Security("is_granted('ROLE_USER') or is_granted('ROLE_KANTON')")]
class DashboardController extends AbstractController
{
#[Route(path: '/', name: 'home')]
#[Security("is_granted('ROLE_USER') or is_granted('ROLE_KANTON')")]
public function index(): RedirectResponse
{
// Redirect zu Dashboard
return $this->redirectToRoute('dashboard_index');
}
/**
* Dashboard Index Action.
*
* @throws \Doctrine\ORM\ORMException
*/
#[Route(path: '/dashboard/', name: 'dashboard_index')]
#[Security("is_granted('ROLE_USER') or is_granted('ROLE_KANTON')")]
public function dashboard(EntityManagerInterface $em, AuthorizationCheckerInterface $authorizationChecker): Response
{
$benutzer = $this->getUser();
$transportunternehmenId = $benutzer->getTransportunternehmen();
// Anzahl Transportunternehmen
$anzTransportunternehmen = $em->getRepository(Transportunternehmen::class)->countTransportunternehmen();
// Anzahl Einzeltransporte, alle oder nur eigene
if ($transportunternehmenId) {
$transportunternehmen = $em->getRepository(Transportunternehmen::class)->find($transportunternehmenId);
} else {
$transportunternehmen = null;
}
$anzEinzeltransporte = $em->getRepository(Einzeltransport::class)->countEinzeltransporte($transportunternehmen, null, null);
// Anzahl Einzeltransporte diesen Monat
// Heute
$datumToday = new \DateTime('today');
$anzEinzeltransporteToday = $em->getRepository(Einzeltransport::class)->countEinzeltransporte(null, $datumToday, $datumToday);
$datumVon = new \DateTime('first day of this month');
$datumBis = new \DateTime('last day of this month');
$anzEinzeltransporteThisMonth = $em->getRepository(Einzeltransport::class)->countEinzeltransporte(null, $datumVon, $datumBis);
// Neueste Einzeltransporte
// User-Level Filter: Zeige als Transportunternehmen nur eigene Transporte
$userFilter = null;
if (false === $authorizationChecker->isGranted('ROLE_SECURITY') && $transportunternehmenId) {
$userFilter = $em->getRepository(Transportunternehmen::class)->find($transportunternehmenId);
}
$filterDate = new \DateTime('today');
$neusteEinzeltransporte = $em->getRepository(Einzeltransport::class)->findLatest($userFilter, $filterDate);
return $this->render('Dashboard/index.html.twig', [
'anzahlTransportunternehmen' => $anzTransportunternehmen,
'anzahlEinzeltransporte' => $anzEinzeltransporte,
'anzahlEinzeltransporteThisMonth' => $anzEinzeltransporteThisMonth,
'anzahlEinzeltransporteToday' => $anzEinzeltransporteToday,
'neusteEinzeltransporte' => $neusteEinzeltransporte,
]
);
}
}