src/Controller/HomeController.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\GasMeter;
  4. use App\Entity\ElectricMeter;
  5. use App\Entity\Entreprise;
  6. use App\Entity\Rappel;
  7. use App\Entity\Contrat;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Doctrine\Persistence\ManagerRegistry;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. class HomeController extends AbstractController
  16. {
  17.     /**
  18.      * @Route("/", name="app_home")
  19.      */
  20.     public function index(): Response
  21.     {
  22.         return $this->redirectToRoute('app_site');
  23.     }
  24.     /**
  25.      * @Route("/site", name="app_site")
  26.      */
  27.     public function site(ManagerRegistry $doctrineRequest $request): Response
  28.     {
  29.         // Vérifier si l'utilisateur est connecté et a le rôle ROLE_TEAM
  30.         if (!$this->getUser() || !$this->isGranted('ROLE_TEAM')) {
  31.             return $this->redirectToRoute('app_login');
  32.         }
  33.         // Récupérer le nombre de jours depuis la requête, par défaut 7 jours
  34.         $nbJours $request->query->get('nbJours'7);
  35.         
  36.         // Calculer la date limite
  37.         $dateLimite = new \DateTime();
  38.         $dateLimite->modify('+' $nbJours ' days');
  39.         // Récupérer les rappels non complétés à venir dans les X prochains jours
  40.         $rappels $doctrine->getRepository(Rappel::class)
  41.             ->createQueryBuilder('r')
  42.             ->where('r.completer = :completer')
  43.             ->andWhere('r.echeance >= :now')
  44.             ->andWhere('r.echeance <= :dateLimite')
  45.             ->setParameter('completer'false)
  46.             ->setParameter('now', new \DateTime())
  47.             ->setParameter('dateLimite'$dateLimite)
  48.             ->orderBy('r.echeance''ASC')
  49.             ->getQuery()
  50.             ->getResult();
  51.         // Récupérer les entreprises liées aux rappels
  52.         $entreprises = [];
  53.         foreach ($rappels as $rappel) {
  54.             if ($rappel->getEntrepriseId()) {
  55.                 $entreprise $doctrine->getRepository(Entreprise::class)->find($rappel->getEntrepriseId());
  56.                 if ($entreprise) {
  57.                     $entreprises[$rappel->getId()] = $entreprise->getRaisonSociale();
  58.                 }
  59.             }
  60.         }
  61.         return $this->render('home/index.html.twig', [
  62.             'controller_name' => 'HomeController',
  63.             'rappels' => $rappels,
  64.             'entreprises' => $entreprises,
  65.             'nbJours' => $nbJours
  66.         ]);
  67.     }
  68.     /**
  69.      * @Route("/rappel/complete/{id}", name="app_rappel_complete", methods={"POST"})
  70.      */
  71.     public function completeRappel(Rappel $rappelEntityManagerInterface $entityManager): JsonResponse
  72.     {
  73.         // Vérifier si l'utilisateur est connecté et a le rôle ROLE_TEAM
  74.         if (!$this->getUser() || !$this->isGranted('ROLE_TEAM')) {
  75.             return new JsonResponse(['error' => 'Accès non autorisé'], 403);
  76.         }
  77.         $rappel->setCompleter(true);
  78.         $entityManager->flush();
  79.         return new JsonResponse(['success' => true]);
  80.     }
  81.     /**
  82.      * @Route("/requetes", name="app_requetes")
  83.      */
  84.     public function requetes(ManagerRegistry $doctrine): Response
  85.     {
  86.         // Vérifier si l'utilisateur est connecté et a le rôle ROLE_TEAM
  87.         if (!$this->getUser() || !$this->isGranted('ROLE_TEAM')) {
  88.             return $this->redirectToRoute('app_login');
  89.         }
  90.         $electric_meters $doctrine->getRepository(ElectricMeter::class)->findAll();
  91.         $gas_meters $doctrine->getRepository(GasMeter::class)->findAll();
  92.         $entreprises $doctrine->getRepository(Entreprise::class)->findAll();
  93.         // prepare entities to display in datatables
  94.         $electric_meters_array = [];
  95.         foreach ($electric_meters as $electric_meter) {
  96.             $entreprise $doctrine->getRepository(Entreprise::class)->find($electric_meter->getEntrepriseId());
  97.             $electric_meters_array[] = [
  98.                 $entreprise $entreprise->getRaisonSociale() : '',
  99.                 $electric_meter->getAdresseCompteur(),
  100.                 $electric_meter->getPDL(),
  101.                 $electric_meter->getDateDebut()? $electric_meter->getDateDebut()->format('d/m/Y') : '',
  102.                 $electric_meter->getDateFin()? $electric_meter->getDateFin()->format('d/m/Y') : '',
  103.                 $electric_meter->getProfil(),
  104.                 $electric_meter->getCAR(),
  105.                 $electric_meter->getFournisseur(),
  106.                 $electric_meter->getPrix(),
  107.                 '',
  108.             ];
  109.         }
  110.         $gas_meters_array = [];
  111.         foreach ($gas_meters as $gas_meter) {
  112.             if ($gas_meter->getDateFin() !== null) { // Only include meters with a set end date
  113.                 $entreprise $doctrine->getRepository(Entreprise::class)->find($gas_meter->getEntrepriseId());
  114.                 $gas_meters_array[] = [
  115.                     $entreprise $entreprise->getRaisonSociale() : '',
  116.                     $gas_meter->getAdresseCompteur(),
  117.                     $gas_meter->getPDL(),
  118.                     $gas_meter->getDateDebut()? $gas_meter->getDateDebut()->format('d/m/Y') : '',
  119.                     $gas_meter->getDateFin()? $gas_meter->getDateFin()->format('d/m/Y') : '',
  120.                     $gas_meter->getProfil(),
  121.                     $gas_meter->getCAR(),
  122.                     $gas_meter->getFournisseur(),
  123.                     $gas_meter->getPrix(),
  124.                     '',
  125.                 ];
  126.             }
  127.         }
  128.         $entreprises_array = [];
  129.         foreach ($entreprises as $entreprise) {
  130.             $entreprises_array[] = [
  131.                 $entreprise->getRaisonSociale(),
  132.                 $entreprise->getAdresse(),
  133.                 $entreprise->getSiret(),
  134.                 $entreprise->getNaf(),
  135.                 $entreprise->getCodeInsee(),
  136.                 $entreprise->getStatut(),
  137.                 '',
  138.             ];
  139.         }
  140.         return $this->render('requetes.html.twig', [
  141.             'electric_meters' => $electric_meters_array,
  142.             'gas_meters' => $gas_meters_array,
  143.             'entreprises' => $entreprises_array,
  144.         ]);
  145.     }
  146.     /**
  147.      * @Route("/requetes2", name="app_requetes2")
  148.      */
  149.     public function requetes2(ManagerRegistry $doctrine,Request $request): JsonResponse
  150.     {
  151.         // Vérifier si l'utilisateur est connecté et a le rôle ROLE_TEAM
  152.         if (!$this->getUser() || !$this->isGranted('ROLE_TEAM')) {
  153.             return new JsonResponse(['error' => 'Accès non autorisé'], 403);
  154.         }
  155.         $filters $request->request->all();
  156.         // prepare filters for each entities
  157.         $electric_meter_filters = [];
  158.         $gas_meter_filters = [];
  159.         $entreprise_filters = [];
  160.         foreach ($filters as $key => $value) {
  161.             if (strpos($key'Electric')) {
  162.                 $electric_meter_filters[str_replace(['Electric','Filter'], ''$key)] = $value;
  163.             } elseif (strpos($key'Gaz')) {
  164.                 $gas_meter_filters[str_replace(['Gaz','Filter'], ''$key)] = $value;
  165.             } elseif (strpos($key'Entreprise')) {
  166.                 $entreprise_filters[str_replace(['Entreprise','Filter'], ''$key)] = $value;
  167.             }
  168.         }
  169.         // Fetch the repository for each entity type
  170.         $electricMeterRepository $doctrine->getRepository(ElectricMeter::class);
  171.         $gasMeterRepository $doctrine->getRepository(GasMeter::class);
  172.         $entrepriseRepository $doctrine->getRepository(Entreprise::class);
  173.         $contratRepository $doctrine->getRepository(Contrat::class);
  174.         //convert filters date to datetime
  175.         if(isset($electric_meter_filters['date_debut']) && $electric_meter_filters['date_debut'] !== '') {
  176.             $electric_meter_filters['date_debut'] = new \DateTime($electric_meter_filters['date_debut']);
  177.         }
  178.         if(isset($electric_meter_filters['date_fin']) && $electric_meter_filters['date_fin'] !== '') {
  179.             $electric_meter_filters['date_fin'] = new \DateTime($electric_meter_filters['date_fin']);
  180.         }
  181.         if(isset($gas_meter_filters['date_debut']) && $gas_meter_filters['date_debut'] !== '') {
  182.             $gas_meter_filters['date_debut'] = new \DateTime($gas_meter_filters['date_debut']);
  183.         }
  184.         if(isset($gas_meter_filters['date_fin']) && $gas_meter_filters['date_fin'] !== '') {
  185.             $gas_meter_filters['date_fin'] = new \DateTime($gas_meter_filters['date_fin']);
  186.         }
  187.         // Build the query for electric meters with contracts
  188.         $electric_meters $electricMeterRepository->createQueryBuilder('e')
  189.             ->leftJoin(Contrat::class, 'c''WITH''e.PDL = c.pdl')
  190.             ->select('e''CASE WHEN c.date_fin > e.date_fin OR e.date_fin IS NULL THEN c.date_fin ELSE e.date_fin END as HIDDEN latest_end_date');
  191.         if(isset($electric_meter_filters['adresse_compteur']) && $electric_meter_filters['adresse_compteur'] !== '') {
  192.             $electric_meters->andWhere('e.adresse_compteur LIKE :adresse_compteur')
  193.                 ->setParameter('adresse_compteur''%'.$electric_meter_filters['adresse_compteur'].'%');
  194.         }
  195.         if(isset($electric_meter_filters['PDL']) && $electric_meter_filters['PDL'] !== '') {
  196.             $electric_meters->andWhere('e.PDL LIKE :PDL')
  197.                 ->setParameter('PDL''%'.$electric_meter_filters['PDL'].'%');
  198.         }
  199.         if(isset($electric_meter_filters['date_debut']) && $electric_meter_filters['date_debut'] !== '') {
  200.             $electric_meters->andWhere('(CASE WHEN c.date_fin > e.date_fin OR e.date_fin IS NULL THEN c.date_fin ELSE e.date_fin END) >= :date_debut')
  201.                 ->setParameter('date_debut'$electric_meter_filters['date_debut']);
  202.         }
  203.         if(isset($electric_meter_filters['date_fin']) && $electric_meter_filters['date_fin'] !== '') {
  204.             $electric_meters->andWhere('(CASE WHEN c.date_fin > e.date_fin OR e.date_fin IS NULL THEN c.date_fin ELSE e.date_fin END) <= :date_fin')
  205.                 ->setParameter('date_fin'$electric_meter_filters['date_fin']);
  206.         }
  207.         $electric_meters $electric_meters->getQuery()->getResult();
  208.         // Build the query for gas meters with contracts
  209.         $gas_meters $gasMeterRepository->createQueryBuilder('g')
  210.             ->leftJoin(Contrat::class, 'c''WITH''g.PDL = c.pdl')
  211.             ->select('g''CASE WHEN c.date_fin > g.date_fin OR g.date_fin IS NULL THEN c.date_fin ELSE g.date_fin END as HIDDEN latest_end_date')
  212.             ->andWhere('g.date_fin IS NOT NULL'); // Only include meters with a set end date
  213.         if(isset($gas_meter_filters['adresse_compteur']) && $gas_meter_filters['adresse_compteur'] !== '') {
  214.             $gas_meters->andWhere('g.adresse_compteur LIKE :adresse_compteur')
  215.                 ->setParameter('adresse_compteur''%'.$gas_meter_filters['adresse_compteur'].'%');
  216.         }
  217.         if(isset($gas_meter_filters['PDL']) && $gas_meter_filters['PDL'] !== '') {
  218.             $gas_meters->andWhere('g.PDL LIKE :PDL')
  219.                 ->setParameter('PDL''%'.$gas_meter_filters['PDL'].'%');
  220.         }
  221.         if(isset($gas_meter_filters['date_debut']) && $gas_meter_filters['date_debut'] !== '') {
  222.             $gas_meters->andWhere('(CASE WHEN c.date_fin > g.date_fin OR g.date_fin IS NULL THEN c.date_fin ELSE g.date_fin END) >= :date_debut')
  223.                 ->setParameter('date_debut'$gas_meter_filters['date_debut']);
  224.         }
  225.         if(isset($gas_meter_filters['date_fin']) && $gas_meter_filters['date_fin'] !== '') {
  226.             $gas_meters->andWhere('(CASE WHEN c.date_fin > g.date_fin OR g.date_fin IS NULL THEN c.date_fin ELSE g.date_fin END) <= :date_fin')
  227.                 ->setParameter('date_fin'$gas_meter_filters['date_fin']);
  228.         }
  229.         $gas_meters $gas_meters->getQuery()->getResult();
  230.         // Build the query for entreprises
  231.         $entreprises $entrepriseRepository->createQueryBuilder('e');
  232.         if(isset($entreprise_filters['RaisonSociale']) && $entreprise_filters['RaisonSociale'] !== '') {
  233.             $entreprises->andWhere('e.RaisonSociale LIKE :RaisonSociale')
  234.                 ->setParameter('RaisonSociale''%'.$entreprise_filters['RaisonSociale'].'%');
  235.         }
  236.         if(isset($entreprise_filters['Adresse']) && $entreprise_filters['Adresse'] !== '') {
  237.             $entreprises->andWhere('e.Adresse LIKE :Adresse')
  238.                 ->setParameter('Adresse''%'.$entreprise_filters['Adresse'].'%');
  239.         }
  240.         if(isset($entreprise_filters['Siret']) && $entreprise_filters['Siret'] !== '') {
  241.             $entreprises->andWhere('e.Siret LIKE :Siret')
  242.                 ->setParameter('Siret''%'.$entreprise_filters['Siret'].'%');
  243.         }
  244.         if(isset($entreprise_filters['Naf']) && $entreprise_filters['Naf'] !== '') {
  245.             $entreprises->andWhere('e.Naf LIKE :Naf')
  246.                 ->setParameter('Naf''%'.$entreprise_filters['Naf'].'%');
  247.         }
  248.         if(isset($entreprise_filters['Code_Insee']) && $entreprise_filters['Code_Insee'] !== '') {
  249.             $entreprises->andWhere('e.Code_Insee LIKE :Code_Insee')
  250.                 ->setParameter('Code_Insee''%'.$entreprise_filters['Code_Insee'].'%');
  251.         }
  252.         if(isset($entreprise_filters['Statut']) && $entreprise_filters['Statut'] !== '') {
  253.             $entreprises->andWhere('e.Statut LIKE :Statut')
  254.                 ->setParameter('Statut''%'.$entreprise_filters['Statut'].'%');
  255.         }
  256.         $entreprises $entreprises->getQuery()->getResult();
  257.         // Prepare arrays for response
  258.         $electric_meters_array = [];
  259.         foreach ($electric_meters as $electric_meter) {
  260.             $entreprise $doctrine->getRepository(Entreprise::class)->find($electric_meter->getEntrepriseId());
  261.             $electric_meters_array[] = [
  262.                 $entreprise $entreprise->getRaisonSociale() : '',
  263.                 $electric_meter->getAdresseCompteur(),
  264.                 $electric_meter->getPDL(),
  265.                 $electric_meter->getDateDebut()? $electric_meter->getDateDebut()->format('d/m/Y') : '',
  266.                 $electric_meter->getDateFin()? $electric_meter->getDateFin()->format('d/m/Y') : '',
  267.                 $electric_meter->getProfil(),
  268.                 $electric_meter->getCAR(),
  269.                 $electric_meter->getFournisseur(),
  270.                 $electric_meter->getPrix(),
  271.                 '',
  272.             ];
  273.         }
  274.         $gas_meters_array = [];
  275.         foreach ($gas_meters as $gas_meter) {
  276.             $entreprise $doctrine->getRepository(Entreprise::class)->find($gas_meter->getEntrepriseId());
  277.             $gas_meters_array[] = [
  278.                 $entreprise $entreprise->getRaisonSociale() : '',
  279.                 $gas_meter->getAdresseCompteur(),
  280.                 $gas_meter->getPDL(),
  281.                 $gas_meter->getDateDebut()? $gas_meter->getDateDebut()->format('d/m/Y') : '',
  282.                 $gas_meter->getDateFin()? $gas_meter->getDateFin()->format('d/m/Y') : '',
  283.                 $gas_meter->getProfil(),
  284.                 $gas_meter->getCAR(),
  285.                 $gas_meter->getFournisseur(),
  286.                 $gas_meter->getPrix(),
  287.                 '',
  288.             ];
  289.         }
  290.         $entreprises_array = [];
  291.         foreach ($entreprises as $entreprise) {
  292.             $entreprises_array[] = [
  293.                 $entreprise->getRaisonSociale(),
  294.                 $entreprise->getAdresse(),
  295.                 $entreprise->getSiret(),
  296.                 $entreprise->getNaf(),
  297.                 $entreprise->getCodeInsee(),
  298.                 $entreprise->getStatut(),
  299.                 '',
  300.             ];
  301.         }
  302.         return new JsonResponse([
  303.             'electric_meters' => $electric_meters_array,
  304.             'gas_meters' => $gas_meters_array,
  305.             'entreprises' => $entreprises_array,
  306.             'filters' => $filters,
  307.             'electric_meter_filters' => $electric_meter_filters,
  308.             'gas_meter_filters' => $gas_meter_filters,
  309.             'entreprise_filters' => $entreprise_filters,
  310.         ]);
  311.     }
  312. }