src/Controller/EntrepriseController.php line 497

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\CSPE;
  4. use App\Entity\Note;
  5. use App\Entity\User;
  6. use App\Entity\Rappel;
  7. use App\Entity\Contact;
  8. use App\Entity\Contrat;
  9. use App\Entity\GasMeter;
  10. use App\Entity\Entreprise;
  11. use App\Entity\EspaceClient;
  12. use App\Entity\ElectricMeter;
  13. use App\Form\EntrepriseType;
  14. use App\Form\ContratType;
  15. use App\Repository\EntrepriseRepository;
  16. use Symfony\Contracts\HttpClient\HttpClientInterface;
  17. use Doctrine\Persistence\ManagerRegistry;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\HttpFoundation\JsonResponse;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. class EntrepriseController extends AbstractController
  25. {
  26.     /**
  27.      * @Route("/entreprise", name="app_entreprise")
  28.      */
  29.     public function index(ManagerRegistry $doctrine): Response
  30.     {
  31.         $entreprises $doctrine->getRepository(Entreprise::class)->findAll();
  32.         $array_entreprises = array();
  33.         
  34.         for ($i=0$i count($entreprises); $i++) { 
  35.             $user_name $doctrine->getRepository(User::class)->findOneBy(['id' => $entreprises[$i]->getUtilisateur()]);
  36.             $user_name $user_name $user_name->getUsername() : '';
  37.             $entreprise_contacts $doctrine->getRepository(Contact::class)->findBy(['entreprise_id' => $entreprises[$i]->getId()]);
  38.             $entreprise_contacts implode(" "array_map(function($contact) {
  39.                 return $contact->getNom()." ".$contact->getPrenom();
  40.             }, $entreprise_contacts));
  41.             $array_entreprises[$i] = [
  42.                 $entreprises[$i]->getRaisonSociale(),
  43.                 $entreprises[$i]->getCommune(),
  44.                 $entreprises[$i]->getSiret(),
  45.                 $entreprise_contacts,
  46.                 $user_name,
  47.                 '<a href="'.$this->generateUrl('app_entreprise_details',['id' => $entreprises[$i]->getId()]).'" type="button" class="btn btn-sm btn-primary mb-1">Consulter</a>
  48.                 <a href="'.$this->generateUrl('app_entreprise_edit',['id' => $entreprises[$i]->getId()]).'" type="button" class="btn btn-sm btn-warning mb-1">Modifier</a>
  49.                 <a href="'.$this->generateUrl('app_entreprise_suppr',['id' => $entreprises[$i]->getId()]).'" type="button" class="btn btn-sm btn-danger ">Supprimer</a>',
  50.             ];
  51.         };
  52.         return $this->render('entreprise/index.html.twig', [
  53.             'entreprises' => $array_entreprises,
  54.         ]);
  55.     }
  56.     /**
  57.      * @Route("/entreprise/add", name="app_entreprise_add")
  58.      */
  59.     public function add(Request $requestEntityManagerInterface $entityManager): Response
  60.     {
  61.         $entreprises = new Entreprise();
  62.         // using createQueryBuilder
  63.         $utilisateurs $entityManager->createQueryBuilder()
  64.             ->select('u')
  65.             ->from(User::class, 'u')
  66.             ->where('u.roles LIKE :roles')
  67.             ->setParameter('roles''%ROLE_TEAM%')
  68.             ->getQuery()
  69.             ->getResult();
  70.         $array_utilisateurs = array();
  71.         for ($i=0$i count($utilisateurs); $i++) { 
  72.             $array_utilisateurs[$utilisateurs[$i]->getUsername()] = $utilisateurs[$i]->getId();
  73.         }
  74.         $form $this->createForm(EntrepriseType::class, $entreprises, ['utilisateurs' => $array_utilisateurs]);
  75.         $form->handleRequest($request);
  76.         if ($form->isSubmitted() && $form->isValid()) {
  77.             $entityManager->persist($entreprises);
  78.             $entityManager->flush();
  79.             return $this->redirectToRoute('app_entreprise');
  80.         }
  81.         return $this->render('entreprise/add.html.twig', [
  82.             'entrepriseForm' => $form->createView(),
  83.             'array_utilisateurs' => $array_utilisateurs,
  84.         ]);
  85.     }
  86.     /**
  87.      * @Route("/entreprise/edit/{id}", name="app_entreprise_edit")
  88.      */
  89.     public function edit(int $idRequest $requestEntityManagerInterface $entityManagerManagerRegistry $doctrine): Response
  90.     {
  91.         $entreprise $doctrine->getRepository(Entreprise::class)->findOneBy(['id' => $id]);
  92.         $utilisateurs $entityManager->createQueryBuilder()
  93.             ->select('u')
  94.             ->from(User::class, 'u')
  95.             ->where('u.roles LIKE :roles')
  96.             ->setParameter('roles''%ROLE_TEAM%')
  97.             ->getQuery()
  98.             ->getResult();
  99.         $array_utilisateurs = array();
  100.         for ($i=0$i count($utilisateurs); $i++) { 
  101.             $array_utilisateurs[$utilisateurs[$i]->getUsername()] = $utilisateurs[$i]->getId();
  102.         }
  103.         $form $this->createForm(EntrepriseType::class, $entreprise, ['utilisateurs' => $array_utilisateurs]);
  104.         $form->handleRequest($request);
  105.         $entreprise_entity = [ 'raison_sociale' => $entreprise->getRaisonSociale(),
  106.             'siret' => $entreprise->getSiret(),
  107.             'naf' => $entreprise->getNaf(),
  108.             'rcs' => $entreprise->getRcs(),
  109.             'num_voie' => $entreprise->getNumVoie(),
  110.             'adresse' => $entreprise->getAdresse(),
  111.             'code_postal' => $entreprise->getCodePostal(),
  112.             'commune' => $entreprise->getCommune(),
  113.             'code_insee' => $entreprise->getCodeInsee(),
  114.             'statut' => $entreprise->getStatut(),
  115.             'utilisateur' => $entreprise->getUtilisateur(),
  116.         ];
  117.         if ($form->isSubmitted() && $form->isValid()) {
  118.             $entreprisesEdit $form->getData();
  119.             if($entreprisesEdit->getRaisonSociale() != null){
  120.                 $entreprise->setRaisonSociale($entreprisesEdit->getRaisonSociale());
  121.             }
  122.             if($entreprisesEdit->getSiret() != null){
  123.                 $entreprise->setSiret($entreprisesEdit->getSiret());
  124.             }
  125.             if($entreprisesEdit->getNaf() != null){
  126.                 $entreprise->setNaf($entreprisesEdit->getNaf());
  127.             }
  128.             if($entreprisesEdit->getRcs() != null){
  129.                 $entreprise->setRcs($entreprisesEdit->getRcs());
  130.             }
  131.             if($entreprisesEdit->getNumVoie() != null){
  132.                 $entreprise->setNumVoie($entreprisesEdit->getNumVoie());
  133.             }
  134.             if($entreprisesEdit->getAdresse() != null){
  135.                 $entreprise->setAdresse($entreprisesEdit->getAdresse());
  136.             }
  137.             if($entreprisesEdit->getCodePostal() != null){
  138.                 $entreprise->setCodePostal($entreprisesEdit->getCodePostal());
  139.             }
  140.             if($entreprisesEdit->getCommune() != null){
  141.                 $entreprise->setCommune($entreprisesEdit->getCommune());
  142.             }
  143.             if($entreprisesEdit->getCodeInsee() != null){
  144.                 $entreprise->setCodeInsee($entreprisesEdit->getCodeInsee());
  145.             }
  146.             if($entreprisesEdit->getStatut() != null){
  147.                 $entreprise->setStatut($entreprisesEdit->getStatut());
  148.             }
  149.             if($entreprisesEdit->getUtilisateur() != null){
  150.                 $entreprise->setUtilisateur($entreprisesEdit->getUtilisateur());
  151.             }
  152.             $entityManager->persist($entreprise);
  153.             $entityManager->flush();
  154.             return $this->redirectToRoute('app_entreprise');
  155.         }
  156.         return $this->render('entreprise/edit.html.twig', [
  157.             'entrepriseForm' => $form->createView(),
  158.             'entreprise' => $entreprise_entity
  159.         ]);
  160.     }
  161.     /**
  162.      * @Route("/entreprise/suppr/{id}", name="app_entreprise_suppr")
  163.      */
  164.     public function suppr(int $idRequest $requestEntityManagerInterface $entityManagerManagerRegistry $doctrine): Response
  165.     {
  166.         $notes $doctrine->getRepository(Note::class)->findBy(['entreprise_id' => $id]);
  167.         for ($i=0$i count($notes); $i++) { 
  168.             $entityManager->remove($notes[$i]);
  169.             $entityManager->flush();
  170.         };
  171.         $rappels $doctrine->getRepository(Rappel::class)->findBy(['entreprise_id' => $id]);
  172.         for ($i=0$i count($rappels); $i++) { 
  173.             $entityManager->remove($rappels[$i]);
  174.             $entityManager->flush();
  175.         };
  176.         $electric_meters $doctrine->getRepository(ElectricMeter::class)->findBy(['entreprise_id' => $id]);
  177.         for ($i=0$i count($electric_meters); $i++) { 
  178.             $entityManager->remove($electric_meters[$i]);
  179.             $entityManager->flush();
  180.         };
  181.         $gas_meters $doctrine->getRepository(GasMeter::class)->findBy(['entreprise_id' => $id]);
  182.         for ($i=0$i count($gas_meters); $i++) { 
  183.             $entityManager->remove($gas_meters[$i]);
  184.             $entityManager->flush();
  185.         };
  186.         $cspes $doctrine->getRepository(CSPE::class)->findBy(['entreprise_id' => $id]);
  187.         for ($i=0$i count($cspes); $i++) { 
  188.             $entityManager->remove($cspes[$i]);
  189.             $entityManager->flush();
  190.         };
  191.         $espace_clients $doctrine->getRepository(EspaceClient::class)->findBy(['entreprise_id' => $id]);
  192.         for ($i=0$i count($espace_clients); $i++) { 
  193.             $entityManager->remove($espace_clients[$i]);
  194.             $entityManager->flush();
  195.         };
  196.         $contacts $doctrine->getRepository(Contact::class)->findBy(['entreprise_id' => $id]);
  197.         for ($i=0$i count($contacts); $i++) { 
  198.             $entityManager->remove($contacts[$i]);
  199.             $entityManager->flush();
  200.         };
  201.         $entreprise $doctrine->getRepository(Entreprise::class)->findOneBy(['id' => $id]);
  202.         $entityManager->remove($entreprise);
  203.         $entityManager->flush();
  204.         return $this->redirectToRoute('app_entreprise');
  205.     }
  206.     /**
  207.      * @Route("/entreprise/details/{id}", name="app_entreprise_details")
  208.      */
  209.     public function details(int $idManagerRegistry $doctrine): Response
  210.     {
  211.         $entreprise $doctrine->getRepository(Entreprise::class)->findOneBy(['id' => $id]);
  212.         if(!$entreprise){
  213.             return $this->redirectToRoute('app_requetes');
  214.         }
  215.         
  216.         $user_name $doctrine->getRepository(User::class)->findOneBy(['id' => $entreprise->getUtilisateur()]);
  217.         $user_name $user_name $user_name->getUsername() : '';
  218.         $entreprise_entity = [ 'id' => $entreprise->getId(),
  219.             'raison_sociale' => $entreprise->getRaisonSociale(),
  220.             'siret' => $entreprise->getSiret(),
  221.             'naf' => $entreprise->getNaf(),
  222.             'rcs' => $entreprise->getRcs(),
  223.             'num_voie' => $entreprise->getNumVoie(),
  224.             'adresse' => $entreprise->getAdresse(),
  225.             'code_postal' => $entreprise->getCodePostal(),
  226.             'commune' => $entreprise->getCommune(),
  227.             'code_insee' => $entreprise->getCodeInsee(),
  228.             'statut' => $entreprise->getStatut(),
  229.             'utilisateur' => $user_name,
  230.         ];
  231.         // Fetch and prepare notes data
  232.         $notes $doctrine->getRepository(Note::class)->findBy(['entreprise_id' => $id], ['date_creation' => 'DESC']);
  233.         $array_notes = array();
  234.         foreach ($notes as $note) {
  235.             $user $note->getUser();
  236.             $array_notes[] = [
  237.                 'date_creation' => $note->getDateCreation() ? $note->getDateCreation()->format('Y-m-d H:i:s') : '',
  238.                 'texte' => $note->getTexte(),
  239.                 'user' => $user $user->getUsername() : 'Non défini',
  240.                 'edit_url' => $this->generateUrl('app_note_edit', ['id' => $note->getId()]),
  241.                 'delete_url' => $this->generateUrl('app_note_suppr', ['id' => $note->getId()]),
  242.             ];
  243.         }
  244.         // Fetch and prepare rappels data
  245.         $rappels $doctrine->getRepository(Rappel::class)->findBy(['entreprise_id' => $id]);
  246.         $array_rappels = array();
  247.         foreach ($rappels as $rappel) {
  248.             $array_rappels[] = [
  249.                 $rappel->getTitre(),
  250.                 $rappel->getDescription(),
  251.                 $rappel->getEcheance()->format('d/m/Y'),
  252.                 $rappel->isCompleter(),
  253.                 '<a href="'.$this->generateUrl('app_rappel_edit',['id' => $rappel->getId()]).'" type="button" class="btn btn-sm btn-primary mb-1">Modifier</a>
  254.                 <a href="'.$this->generateUrl('app_rappel_suppr',['id' => $rappel->getId()]).'" type="button" class="btn btn-sm btn-danger ">Supprimer</a>',
  255.             ];
  256.         }
  257.         // Fetch only PDLs for electric meters
  258.         $electric_meters $doctrine->getRepository(ElectricMeter::class)->findBy(['entreprise_id' => $id]);
  259.         $array_electric_meters array_map(function($meter) {
  260.             return [
  261.                 'pdl' => $meter->getPDL(),
  262.                 'id' => $meter->getId(),
  263.             ];
  264.         }, $electric_meters);
  265.         // Fetch only PDLs for gas meters
  266.         $gas_meters $doctrine->getRepository(GasMeter::class)->findBy(['entreprise_id' => $id]);
  267.         $array_gas_meters array_map(function($meter) {
  268.             return [
  269.                 'pdl' => $meter->getPDL(),
  270.                 'id' => $meter->getId(),
  271.             ];
  272.         }, $gas_meters);
  273.         $cspes $doctrine->getRepository(CSPE::class)->findBy(['entreprise_id' => $id]);
  274.         $array_cspes = array();
  275.         for ($i=0$i count($cspes); $i++) { 
  276.             $array_cspes[$i] = [
  277.                 $cspes[$i]->getNotes(),
  278.                 date_format($cspes[$i]->getDate(),'d/m/Y'),
  279.                 $cspes[$i]->getValeur(),
  280.                 '<a href="'.$this->generateUrl('app_cspe_edit',['id' => $cspes[$i]->getId()]).'" type="button" class="btn btn-sm btn-warning mb-1">Modifier</a>
  281.                 <a href="'.$this->generateUrl('app_cspe_suppr',['id' => $cspes[$i]->getId()]).'" type="button" class="btn btn-sm btn-danger ">Supprimer</a>',
  282.             ];
  283.         };
  284.         $espace_clients $doctrine->getRepository(EspaceClient::class)->findBy(['entreprise_id' => $id]);
  285.         $array_espace_clients = array();
  286.         for ($i=0$i count($espace_clients); $i++) {
  287.             if(strpos($espace_clients[$i]->getLien(), "http://") === false && strpos($espace_clients[$i]->getLien(), "https://") === false ){
  288.                 $lien "http://".$espace_clients[$i]->getLien();
  289.             }else{
  290.                 $lien $espace_clients[$i]->getLien();
  291.             }
  292.             $array_espace_clients[$i] = [
  293.                 $espace_clients[$i]->getFournisseur(),
  294.                 $espace_clients[$i]->getLogin(),
  295.                 $espace_clients[$i]->getMdp(),
  296.                 '<a href='.$lien.' target="_blank" type="button" class="btn btn-primary">'.explode("."$espace_clients[$i]->getLien())[1].'</a>',
  297.                 '<a href="'.$this->generateUrl('app_espace_client_edit',['id' => $espace_clients[$i]->getId()]).'" type="button" class="btn btn-sm btn-warning mb-1">Modifier</a>
  298.                 <a href="'.$this->generateUrl('app_espace_client_suppr',['id' => $espace_clients[$i]->getId()]).'" type="button" class="btn btn-sm btn-danger ">Supprimer</a>',
  299.             ];
  300.         };
  301.         $contacts $doctrine->getRepository(Contact::class)->findBy(['entreprise_id' => $id]);
  302.         $array_contacts = array();
  303.         for ($i=0$i count($contacts); $i++) { 
  304.             $array_contacts[$i] = [
  305.                 $contacts[$i]->getNom(),
  306.                 $contacts[$i]->getPrenom(),
  307.                 $contacts[$i]->getCivilite(),
  308.                 $contacts[$i]->getFonction(),
  309.                 $contacts[$i]->getFixe(),
  310.                 $contacts[$i]->getEmail(),
  311.                 $contacts[$i]->getPortable(),
  312.                 '<a href="'.$this->generateUrl('app_contact_edit',['id' => $contacts[$i]->getId()]).'" type="button" class="btn btn-sm btn-warning mb-1">Modifier</a>
  313.                 <a href="'.$this->generateUrl('app_contact_suppr',['id' => $contacts[$i]->getId()]).'" type="button" class="btn btn-sm btn-danger ">Supprimer</a>',
  314.             ];
  315.         };
  316.         $contrats $doctrine->getRepository(Contrat::class)->findBy(['entreprise' => $entreprise]);
  317.         $array_contrats = array();
  318.         foreach ($contrats as $contrat) {
  319.             $array_contrats[] = [
  320.                 "id" => $contrat->getId(),
  321.                 "duree" => $contrat->getDuree(),
  322.                 "valeur" => $contrat->getValeur(),
  323.                 "pdl" => $contrat->getPdl(),
  324.                 "car" => $contrat->getCar(),
  325.                 "prix_moyen" => $contrat->getPrixMoyen(),
  326.                 "fournisseur" => $contrat->getFournisseur(),
  327.                 "date_debut" => $contrat->getDateDebut() ? $contrat->getDateDebut()->format('d/m/Y') : '',
  328.                 "date_fin" => $contrat->getDateFin() ? $contrat->getDateFin()->format('d/m/Y') : '',
  329.                 '<a href="'.$this->generateUrl('app_entreprise_edit_contrat', ['entrepriseId' => $entreprise->getId(), 'id' => $contrat->getId()]).'" type="button" class="btn btn-sm btn-warning mb-1">Modifier</a>
  330.                 <a href="'.$this->generateUrl('app_entreprise_delete_contrat', ['entrepriseId' => $entreprise->getId(), 'id' => $contrat->getId()]).'" type="button" class="btn btn-sm btn-danger">Supprimer</a>',
  331.             ];
  332.         }
  333.         return $this->render('entreprise/details.html.twig', [
  334.             'entreprise' => $entreprise_entity,
  335.             'notes' => $array_notes,
  336.             'rappels' => $array_rappels,
  337.             'electric_meters' => $array_electric_meters,
  338.             'gas_meters' => $array_gas_meters,
  339.             'cspes' => $array_cspes,
  340.             'espace_clients' => $array_espace_clients,
  341.             'contacts' => $array_contacts,
  342.             'contrats' => $array_contrats,
  343.         ]);
  344.     }
  345.     /**
  346.      * @Route("/entreprise/{id}/electric-meter-details", name="app_electric_meter_details")
  347.      */
  348.     public function electricMeterDetails(Request $requestint $idManagerRegistry $doctrine): JsonResponse
  349.     {
  350.         $pdl $request->query->get('pdl');
  351.         $electricMeter $doctrine->getRepository(ElectricMeter::class)->findOneBy([
  352.             'entreprise_id' => $id,
  353.             'PDL' => $pdl
  354.         ]);
  355.         if (!$electricMeter) {
  356.             return new JsonResponse(['error' => 'Electric meter not found'], 404);
  357.         }
  358.         $meterDetails = [
  359.             'adresseCompteur' => $electricMeter->getAdresseCompteur(),
  360.             'dateDebut' => $electricMeter->getDateDebut() ? $electricMeter->getDateDebut()->format('d/m/Y') : '',
  361.             'dateFin' => $electricMeter->getDateFin() ? $electricMeter->getDateFin()->format('d/m/Y') : '',
  362.             'PS' => $electricMeter->getPS(),
  363.             'profil' => $electricMeter->getProfil(),
  364.             'CAR' => $electricMeter->getCAR(),
  365.             'fournisseur' => $electricMeter->getFournisseur(),
  366.             'prix' => $electricMeter->getPrix(),
  367.         ];
  368.         return new JsonResponse($meterDetails);
  369.     }
  370.     /**
  371.      * @Route("/entreprise/{id}/gas-meter-details", name="app_gas_meter_details")
  372.      */
  373.     public function gasMeterDetails(Request $requestint $idManagerRegistry $doctrine): JsonResponse
  374.     {
  375.         $pdl $request->query->get('pdl');
  376.         
  377.         if (!$pdl) {
  378.             return new JsonResponse(['error' => 'PDL parameter is required'], 400);
  379.         }
  380.         // First verify the entreprise exists
  381.         $entreprise $doctrine->getRepository(Entreprise::class)->find($id);
  382.         if (!$entreprise) {
  383.             return new JsonResponse(['error' => 'Entreprise not found'], 404);
  384.         }
  385.         // Use the new debug method to get detailed information
  386.         $debugResult $doctrine->getRepository(GasMeter::class)->findWithDebug($id$pdl);
  387.         if (!$debugResult['meter']) {
  388.             $errorResponse = [
  389.                 'error' => 'Gas meter not found',
  390.                 'debug_info' => [
  391.                     'search_result' => $debugResult['found_by'],
  392.                     'entreprise_id' => $id,
  393.                     'pdl' => $pdl
  394.                 ]
  395.             ];
  396.             // Add additional debug information based on what was found
  397.             if ($debugResult['found_by'] === 'pdl_only') {
  398.                 $errorResponse['debug_info']['actual_entreprise_id'] = $debugResult['actual_entreprise_id'];
  399.             } elseif ($debugResult['found_by'] === 'entreprise_only') {
  400.                 $errorResponse['debug_info']['available_pdls'] = $debugResult['available_pdls'];
  401.             }
  402.             return new JsonResponse($errorResponse404);
  403.         }
  404.         $gasMeter $debugResult['meter'];
  405.         $meterDetails = [
  406.             'adresseCompteur' => $gasMeter->getAdresseCompteur(),
  407.             'dateDebut' => $gasMeter->getDateDebut() ? $gasMeter->getDateDebut()->format('d/m/Y') : '',
  408.             'dateFin' => $gasMeter->getDateFin() ? $gasMeter->getDateFin()->format('d/m/Y') : '',
  409.             'profil' => $gasMeter->getProfil(),
  410.             'CAR' => $gasMeter->getCAR(),
  411.             'fournisseur' => $gasMeter->getFournisseur(),
  412.             'prix' => $gasMeter->getPrix(),
  413.         ];
  414.         return new JsonResponse($meterDetails);
  415.     }
  416.     /**
  417.      * @Route("/entreprise/infoclient", name="app_entreprise_infoclient")
  418.      */
  419.     public function infoclient(HttpClientInterface $httpClient): JsonResponse
  420.     {
  421.         // Utilisez les paramètres appropriés pour votre requête
  422.         $url 'https://api.societe.com/api/v1/infoclient';
  423.         $headers = [
  424.             'headers' => [
  425.                 'X-Authorization' => 'socapi 8938e836988619dc20be14360fba30e3',
  426.             ],
  427.         ];
  428.         // Effectuez la requête
  429.         $response $httpClient->request('GET'$url$headers);
  430.         // Renvoie la réponse JSON
  431.         return new JsonResponse($response->toArray());
  432.     }
  433.     /**
  434.      * @Route("/entreprise/info_entreprise/{numero}", name="app_entreprise_info_entreprise")
  435.      */
  436.     public function info_entreprise(HttpClientInterface $httpClientManagerRegistry $doctrine$numero): JsonResponse
  437.     {
  438.         // Vérification que l'entreprise n'est pas déjà enregistré en BDD
  439.         $entreprise $doctrine->getRepository(Entreprise::class)->findOneBy(['Siret' => $numero]);
  440.         if($entreprise !=null){
  441.             return new JsonResponse("existant");
  442.         }
  443.         $url 'https://api.societe.com/api/v1/entreprise/'.$numero.'/infoslegales';
  444.         $headers = [
  445.             'headers' => [
  446.                 'X-Authorization' => 'socapi 8938e836988619dc20be14360fba30e3',
  447.             ],
  448.         ];
  449.         // Effectuez la requête
  450.         $response $httpClient->request('GET'$url$headers);
  451.         // Renvoie la réponse JSON
  452.         return new JsonResponse($response->toArray());
  453.     }
  454.     /**
  455.      * @Route("/entreprise/{id}/new-contrat", name="app_entreprise_new_contrat")
  456.      */
  457.     public function newContrat(Request $requestEntityManagerInterface $entityManagerManagerRegistry $doctrineint $id): Response
  458.     {
  459.         $entreprise $doctrine->getRepository(Entreprise::class)->find($id);
  460.         
  461.         if (!$entreprise) {
  462.             throw $this->createNotFoundException('Entreprise not found');
  463.         }
  464.         $contrat = new Contrat();
  465.         $contrat->setEntreprise($entreprise);
  466.         $meterId $request->query->get('meterId');
  467.         $meterType $request->query->get('meterType');
  468.         if ($meterId && $meterType) {
  469.             $meter null;
  470.             if ($meterType === 'electric') {
  471.                 $meter $doctrine->getRepository(ElectricMeter::class)->find($meterId);
  472.             } elseif ($meterType === 'gas') {
  473.                 $meter $doctrine->getRepository(GasMeter::class)->find($meterId);
  474.             }
  475.             if ($meter) {
  476.                 $contrat->setPdl($meter->getPDL());
  477.                 $contrat->setCar($meter->getCAR());
  478.                 $contrat->setPrixMoyen($meter->getPrix());
  479.                 $contrat->setFournisseur($meter->getFournisseur());
  480.                 $contrat->setDateDebut($meter->getDateDebut());
  481.                 $contrat->setDateFin($meter->getDateFin());
  482.             }
  483.         }
  484.         $pdlChoices $this->getPDLChoicesForEntreprise($doctrine$entreprise);
  485.         $form $this->createForm(ContratType::class, $contrat, [
  486.             'pdl_choices' => $pdlChoices
  487.         ]);
  488.         $form->handleRequest($request);
  489.         if ($form->isSubmitted() && $form->isValid()) {
  490.             // Calculate the contract value
  491.             $contratValue $contrat->getCar() * $contrat->getPrixMoyen();
  492.             $contrat->setValeur($contratValue);
  493.             // Calculate duration in months
  494.             $duration $this->calculateDurationInMonths($contrat->getDateDebut(), $contrat->getDateFin());
  495.             $contrat->setDuree($duration);
  496.             // Fetch the User object and set it as the collaborateur
  497.             $userId $entreprise->getUtilisateur();
  498.             if ($userId) {
  499.                 $user $doctrine->getRepository(User::class)->find($userId);
  500.                 if ($user) {
  501.                     $contrat->setCollaborateur($user);
  502.                 }
  503.             }
  504.             $entityManager->persist($contrat);
  505.             $entityManager->flush();
  506.             return $this->redirectToRoute('app_entreprise_details', ['id' => $entreprise->getId()]);
  507.         }
  508.         return $this->render('entreprise/new_contrat.html.twig', [
  509.             'entreprise' => $entreprise,
  510.             'form' => $form->createView(),
  511.         ]);
  512.     }
  513.     /**
  514.      * @Route("/entreprise/{entrepriseId}/edit-contrat/{id}", name="app_entreprise_edit_contrat")
  515.      */
  516.     public function editContrat(Request $requestEntityManagerInterface $entityManagerManagerRegistry $doctrineint $entrepriseIdint $id): Response
  517.     {
  518.         $entreprise $doctrine->getRepository(Entreprise::class)->find($entrepriseId);
  519.         $contrat $doctrine->getRepository(Contrat::class)->find($id);
  520.         if (!$entreprise) {
  521.             throw $this->createNotFoundException('Entreprise not found');
  522.         }
  523.         if (!$contrat) {
  524.             throw $this->createNotFoundException('Contrat not found');
  525.         }
  526.         // S'assurer que l'entreprise est définie sur le contrat
  527.         $contrat->setEntreprise($entreprise);
  528.         $pdlChoices $this->getPDLChoicesForEntreprise($doctrine$entreprise);
  529.         $form $this->createForm(ContratType::class, $contrat, [
  530.             'pdl_choices' => $pdlChoices
  531.         ]);
  532.         $form->handleRequest($request);
  533.         if ($form->isSubmitted() && $form->isValid()) {
  534.             // S'assurer que l'entreprise est toujours définie après la soumission du formulaire
  535.             $contrat->setEntreprise($entreprise);
  536.             // Recalculate the contract value
  537.             $contratValue $contrat->getCar() * $contrat->getPrixMoyen();
  538.             $contrat->setValeur($contratValue);
  539.             // Recalculate duration in months
  540.             $duration $this->calculateDurationInMonths($contrat->getDateDebut(), $contrat->getDateFin());
  541.             $contrat->setDuree($duration);
  542.             $entityManager->flush();
  543.             return $this->redirectToRoute('app_entreprise_details', ['id' => $entreprise->getId()]);
  544.         }
  545.         return $this->render('entreprise/edit_contrat.html.twig', [
  546.             'entreprise' => $entreprise,
  547.             'contrat' => $contrat,
  548.             'form' => $form->createView(),
  549.         ]);
  550.     }
  551.     /**
  552.      * @Route("/entreprise/{entrepriseId}/delete-contrat/{id}", name="app_entreprise_delete_contrat")
  553.      */
  554.     public function deleteContrat(Request $requestEntityManagerInterface $entityManagerManagerRegistry $doctrineint $entrepriseIdint $id): Response
  555.     {
  556.         $entreprise $doctrine->getRepository(Entreprise::class)->find($entrepriseId);
  557.         $contrat $doctrine->getRepository(Contrat::class)->find($id);
  558.         if (!$entreprise) {
  559.             throw $this->createNotFoundException('Entreprise not found');
  560.         }
  561.         if (!$contrat) {
  562.             throw $this->createNotFoundException('Contrat not found');
  563.         }
  564.         if ($this->isCsrfTokenValid('delete'.$contrat->getId(), $request->request->get('_token'))) {
  565.             $entityManager->remove($contrat);
  566.             $entityManager->flush();
  567.         }
  568.         return $this->redirectToRoute('app_entreprise_details', ['id' => $entreprise->getId()]);
  569.     }
  570.     private function calculateDurationInMonths(?\DateTimeInterface $dateDebut, ?\DateTimeInterface $dateFin): ?int
  571.     {
  572.         if (!$dateDebut || !$dateFin) {
  573.             return null;
  574.         }
  575.         $interval $dateDebut->diff($dateFin);
  576.         return $interval->12 $interval->m;
  577.     }
  578.     private function getPDLChoicesForEntreprise(ManagerRegistry $doctrineEntreprise $entreprise): array
  579.     {
  580.         $electricMeters $doctrine->getRepository(ElectricMeter::class)->findBy(['entreprise_id' => $entreprise->getId()]);
  581.         $gasMeters $doctrine->getRepository(GasMeter::class)->findBy(['entreprise_id' => $entreprise->getId()]);
  582.         $pdlChoices = [];
  583.         foreach ($electricMeters as $meter) {
  584.             $pdlChoices[$meter->getPDL()] = $meter->getPDL();
  585.         }
  586.         foreach ($gasMeters as $meter) {
  587.             $pdlChoices[$meter->getPDL()] = $meter->getPDL();
  588.         }
  589.         return $pdlChoices;
  590.     }
  591. }