src/Controller/Front/HomeController.php line 24

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller\Front;
  4. use App\Entity\Activite;
  5. use App\Entity\Calendrier;
  6. use App\Entity\Checklist;
  7. use App\Entity\Document;
  8. use App\Entity\Utilisateur;
  9. use App\Form\DocumentFilterType;
  10. use App\Form\DocumentType;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Bundle\SecurityBundle\Security;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. class HomeController extends AbstractController
  18. {
  19.     #[Route('/'name'homepage_redirect')]
  20.     public function homepageRedirect(EntityManagerInterface $emSecurity $security): Response
  21.     {
  22.         /** @var Utilisateur $utilisateur */
  23.         $utilisateur $this->getUser();
  24.         $client $utilisateur->getClient();
  25.         if ($security->isGranted('ROLE_ADMIN')) {
  26.             return $this->redirectToRoute('admin');
  27.         }
  28.         if (null === $client) {
  29.             throw $this->createAccessDeniedException('Vous ne pouvez pas accéder à cette page.');
  30.         }
  31.         $activite $em->getRepository(Activite::class)->findOneBy(['client' => $client]);
  32.         if (null === $activite) {
  33.             throw $this->createNotFoundException('Aucune activité pour ce client.');
  34.         }
  35.         return $this->redirectToRoute('homepage', ['activiteSlug' => $activite->getSlug(), 'annee' => (int) date('Y')]);
  36.     }
  37.     #[Route('/{activiteSlug}/{annee}/{page}'name'homepage'requirements: ['page' => '\d+'])]
  38.     public function index(Request $requestEntityManagerInterface $emstring $activiteSlugstring $anneeint $page 1): Response
  39.     {
  40.         /** @var Utilisateur $utilisateur */
  41.         $utilisateur $this->getUser();
  42.         $client $utilisateur->getClient();
  43.         $activite $em->getRepository(Activite::class)->findOneBy(['slug' => $activiteSlug'client' => $client]);
  44.         $activiteCount $em->getRepository(Activite::class)->count(['client' => $client]);
  45.         $allActivites = [];
  46.         if ($activiteCount 1) {
  47.             $allActivites $em->getRepository(Activite::class)->findBy(['client' => $client]);
  48.         }
  49.         $annees range(2020, (int) date('Y'));
  50.         if (null === $activite) {
  51.             throw $this->createNotFoundException('Cette activité n\'existe pas');
  52.         }
  53.         // filtres et pagination
  54.         $filterForm $this->createForm(DocumentFilterType::class, null, [
  55.             'action' => $this->generateUrl('homepage', [
  56.                 'activiteSlug' => $activite->getSlug(),
  57.                 'annee' => $annee,
  58.             ]),
  59.             'activite' => $activite,
  60.             'method' => 'GET',
  61.         ]);
  62.         $filterForm->handleRequest($request);
  63.         $filters = [];
  64.         if ($filterForm->isSubmitted() && $filterForm->isValid()) {
  65.             /** @var array<string> $filters */
  66.             $filters $filterForm->getData();
  67.         }
  68.         $documents $em->getRepository(Document::class)->getHomepageQueryBuilder($activite$filters, (int) $annee);
  69.         $form $this->createForm(DocumentType::class, null, [
  70.             'action' => $this->generateUrl('activite_annee_documents_upload', [
  71.                 'activiteSlug' => $activite->getSlug(),
  72.                 'annee' => $annee,
  73.             ]),
  74.             'activite' => $activite,
  75.         ]);
  76.         return $this->render('home/indexV2.html.twig', [
  77.             'activite' => $activite,
  78.             'activiteCount' => $activiteCount,
  79.             'documents' => $documents,
  80.             'form' => $form,
  81.             'filterForm' => $filterForm,
  82.             'filters' => $filters,
  83.             'annees' => $annees,
  84.             'allActivites' => $allActivites,
  85.         ]);
  86.     }
  87.     public function calendrier(EntityManagerInterface $em): Response
  88.     {
  89.         $calendriers $em->getRepository(Calendrier::class)->findBy(['actif' => true], ['ordre' => 'ASC']);
  90.         return $this->render('partials/_calendrier.html.twig', [
  91.             'calendriers' => $calendriers,
  92.         ]);
  93.     }
  94.     public function checklist(EntityManagerInterface $em): Response
  95.     {
  96.         $checklists $em->getRepository(Checklist::class)->findBy(['actif' => true], ['ordre' => 'ASC']);
  97.         return $this->render('partials/_checklist.html.twig', [
  98.             'checklists' => $checklists,
  99.         ]);
  100.     }
  101.     public function annees(int $anneeCourantestring $activiteSlug): Response
  102.     {
  103.         $annees range(2020, (int) date('Y'));
  104.         return $this->render('partials/_annees.html.twig', [
  105.             'annees' => $annees,
  106.             'anneeCourante' => $anneeCourante,
  107.             'activiteSlug' => $activiteSlug,
  108.         ]);
  109.     }
  110. }