src/Controller/SuiviInstallationTransformationController.php line 914

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Formation;
  4. use App\Entity\User;
  5. use App\Helper\Helper;
  6. use App\Repository\EafInstallationTransformationRepository;
  7. use App\Entity\Fiche\Infrastructure\RemplisseurTransformation;
  8. use App\Repository\OpCommunalRepository;
  9. use App\Repository\OpRegionaleRepository;
  10. use App\Repository\OrganisationPaysanneFiliereRepository;
  11. use App\Service\Fiche\InstallationTransformationService;
  12. use App\Service\Fiche\NiveauFicheService;
  13. use DateTime;
  14. use Doctrine\ORM\NonUniqueResultException;
  15. use Ramsey\Uuid\Uuid;
  16. use App\Entity\Fichier;
  17. use App\Helper\ConstApp;
  18. use App\Service\EmailService;
  19. use App\Service\FicheService;
  20. use App\Entity\PisteRehabilite;
  21. use App\Entity\EquipementMachine;
  22. use App\Form\PisteRehabiliteType;
  23. use App\Repository\PoleRepository;
  24. use App\Repository\UserRepository;
  25. use Symfony\Component\Mime\Address;
  26. use App\Repository\RegionRepository;
  27. use App\Entity\FactureTransformation;
  28. use App\Repository\FiliereRepository;
  29. use App\Service\Fiche\FactureService;
  30. use App\Service\Fiche\FichierService;
  31. use App\Entity\FacturePisteRehabilite;
  32. use App\Repository\FokontanyRepository;
  33. use Doctrine\ORM\EntityManagerInterface;
  34. use App\Repository\StatutFicheRepository;
  35. use App\Entity\InstallationTransformation;
  36. use App\Form\InstallationTransformationType;
  37. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  38. use App\Repository\FactureStockageRepository;
  39. use Symfony\Component\HttpFoundation\Request;
  40. use Symfony\Component\Mailer\MailerInterface;
  41. use App\Repository\CanalFinancementRepository;
  42. use Symfony\Component\HttpFoundation\Response;
  43. use App\Entity\SuiviInstallationTransformation;
  44. use App\Entity\SuiviProductionTransfo;
  45. use App\Repository\EquipementMachineRepository;
  46. use Symfony\Component\Routing\Annotation\Route;
  47. use App\Service\Fiche\ResumeBeneficiaireService;
  48. use Symfony\Component\HttpFoundation\JsonResponse;
  49. use App\Repository\FactureTransformationRepository;
  50. use App\Repository\InstallationTransformationRepository;
  51. use App\Repository\SuiviProductionTransfoRepository;
  52. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  53. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  54. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  55. /**
  56.  * @Route("/suivi/installation/transformation")
  57.  */
  58. class SuiviInstallationTransformationController extends AbstractController
  59. {
  60.     private $params;
  61.     private $ficheService;
  62.     private $factureService;
  63.     private $fichierService;
  64.     private $factureTransformationRepo;
  65.     private $resumeBeneficiaireService;
  66.     private $canalFinancementRepository;
  67.     private $equipementMachineRepository;
  68.     private $constApp;
  69.     private $installationTransformationService;
  70.     private $userRepository;
  71.     private $organisationPaysanneFiliereRepository;
  72.     public function __construct(
  73.         ParameterBagInterface                   $params,
  74.         FicheService                            $ficheService,
  75.         FactureService                          $factureService,
  76.         FichierService                          $fichierService,
  77.         FactureTransformationRepository         $factureTransformationRepo,
  78.         ResumeBeneficiaireService               $resumeBeneficiaireService,
  79.         CanalFinancementRepository              $canalFinancementRepository,
  80.         EquipementMachineRepository             $equipementMachineRepository,
  81.         ConstApp                                $constApp,
  82.         InstallationTransformationService       $installationTransformationService,
  83.         UserRepository                          $userRepository,
  84.         OrganisationPaysanneFiliereRepository $organisationPaysanneFiliereRepository
  85.     )
  86.     {
  87.         $this->params $params;
  88.         $this->ficheService $ficheService;
  89.         $this->factureService $factureService;
  90.         $this->fichierService $fichierService;
  91.         $this->factureTransformationRepo $factureTransformationRepo;
  92.         $this->resumeBeneficiaireService $resumeBeneficiaireService;
  93.         $this->canalFinancementRepository $canalFinancementRepository;
  94.         $this->equipementMachineRepository $equipementMachineRepository;
  95.         $this->constApp $constApp;
  96.         $this->installationTransformationService $installationTransformationService;
  97.         $this->userRepository $userRepository;
  98.         $this->organisationPaysanneFiliereRepository $organisationPaysanneFiliereRepository;
  99.     }
  100.     /**
  101.      * @Route("/", name="app_suivi_installation_transformation_index")
  102.      */
  103.     public function index(): Response
  104.     {
  105.         return $this->render('suivi_installation_transformation/index.html.twig', []);
  106.     }
  107.     /**
  108.      * @Route("/api/installation-transformation-list", name="app_suivi_installation_transformation_list")
  109.      */
  110.     public function getAllInstallationTransformation(Request $request): JsonResponse
  111.     {
  112.         $currentUser $this->getUser();
  113.         $user $this->userRepository->find($currentUser);
  114.         $profilUser $user->getProfil()->getId();
  115.         $profilName $user->getProfil()->getName();
  116.         $column $request->query->get("column") ?? "";
  117.         $value $request->query->get("value") ?? "";
  118.         $limit $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
  119.         $page $request->query->get("page") ? intval($request->query->get("page")) : 0;
  120.         $offset = ($limit $page) - $limit;
  121.         $totalRows = [];
  122.         $ceps = [];
  123.         //-------Beginning of filter data by Locality level-------------
  124.         $userLevelLocality $user->getProfil()->getNiveauLocalite();
  125.         $userLocality = [];
  126.         $localityMethods $this->constApp->localityMethods();
  127.         if (isset($localityMethods[$userLevelLocality])) {
  128.             $method $localityMethods[$userLevelLocality];
  129.             foreach ($user->$method() as $locality) {
  130.                 $userLocality[] = $locality->getId();
  131.             }
  132.         }
  133.         //-------End of filter data by Locality level-------------
  134.         //Récuperation des données à afficher si l'utilisateur connecté est admin
  135.         if ($user->getProfil()->getNiveauLocalite() == "nat_") {
  136.             $ceps $this->installationTransformationService->getAllInstallationTransformation(
  137.                 $column$value$limit$offset, [], null
  138.             );
  139.             $totalRows $this->installationTransformationService->getAllInstallationTransformation(
  140.                 $column$valuenullnull, [], null
  141.             );
  142.         } else {
  143.             $ceps $this->installationTransformationService->getAllInstallationTransformation(
  144.                 $column$value$limit$offset,
  145.                 $userLocality,
  146.                 $userLevelLocality
  147.             );
  148.             $totalRows $this->installationTransformationService->getAllInstallationTransformation(
  149.                 $column$valuenullnull,
  150.                 $userLocality,
  151.                 $userLevelLocality
  152.             );
  153.         }
  154.         return new JsonResponse(
  155.             [
  156.                 'title' => 'Récuperation liste installation transformation',
  157.                 'message' => 'Récuperation avec succès',
  158.                 'status' => 'success',
  159.                 'data' => [
  160.                     'rows' => $ceps,
  161.                     'dataInfo' => [
  162.                         'totalRows' => count($totalRows),
  163.                         'limit' => $limit,
  164.                         'page' => $page,
  165.                     ]
  166.                 ]
  167.             ],
  168.             200,
  169.             ['Content-Type' => 'application/json']
  170.         );
  171.     }
  172.     /**
  173.      * @Route("/{id}/show", name="app_suivi_installation_transformation_show", methods={"GET", "POST"})
  174.      */
  175.     public function show(InstallationTransformation $installationTransformationRequest $requestRegionRepository $regionRepository): Response
  176.     {
  177.         $route $request->attributes->get("_route");
  178.         $form $this->createForm(InstallationTransformationType::class, $installationTransformation, [
  179.             'action' => $this->generateUrl('app_installation_transformation_new'),
  180.             'method' => 'POST'
  181.         ]);
  182.         $form->handleRequest($request);
  183.         $remplisseur $installationTransformation->getRemplisseurInitiale();
  184.         $dateNow = new DateTime();
  185.         $userConnect $this->getUser();
  186.         $user $this->userRepository->find($userConnect);
  187.         //Get region cir only for all infrastructure
  188.         $regions $user->getCoordinationZone() ? $user->getCoordinationZone()->getRegions() : $regionRepository->findAll();
  189.         $pole $installationTransformation->getPole();
  190.         $district $installationTransformation->getPole() && isset($installationTransformation->getPole()->getDistrict()[0]) ? $installationTransformation->getPole()->getDistrict()[0] : [];
  191.         $communes $district $district->getCommunes() : [];
  192.         //Filter commune
  193.         foreach ($communes as $commune) {
  194.             //Push if remplisseur found
  195.             foreach ($commune->getUsers() as $user) {
  196.                 //Get user CGEAF by commune
  197.                 if ($user->getProfil()->getId() == $this->params->get('profil_cgeaf')) {
  198.                     $dataCommunes[] = [
  199.                         'id' => $commune->getId(),
  200.                         'name' => $commune->getName(),
  201.                         'remplisseurs' => [
  202.                             'id' => $user->getId(),
  203.                             'name' => $user->getLastName()
  204.                         ]
  205.                     ];
  206.                 }
  207.             }
  208.         }
  209.         //Combine rempliseur meme commune
  210.         $communeList = [];
  211.         foreach ($dataCommunes as $item) {
  212.             $idCommune $item['id'];
  213.             if (!isset($communeList[$idCommune])) {
  214.                 $communeList[$idCommune] = [
  215.                     'id' => $item['id'],
  216.                     'name' => $item['name'],
  217.                     'remplisseurs' => []
  218.                 ];
  219.             }
  220.             // Ajouter le remplisseur dans la liste
  221.             $communeList[$idCommune]['remplisseurs'][] = $item['remplisseurs'];
  222.         }
  223.         $remplisseurs $installationTransformation->getRemplisseurTransformations();
  224.         $equipementMachine $this->equipementMachineRepository->findBy(['installationTransformation' => $installationTransformation]);
  225.         $canalFinancement $this->canalFinancementRepository->findAll();
  226.         $htmlViewFormFiche $this->renderView('suivi_installation_transformation/show.html.twig', [
  227.             'installationTransformation' => $installationTransformation,
  228.             'equipementMachines' => $equipementMachine,
  229.             'sourceFinancements' => $canalFinancement,
  230.             'dateNow' => $dateNow->format('d - m - Y'),
  231.             'user' => $remplisseur,
  232.             'form' => $form->createView(),
  233.             'route' => $route,
  234.             'remplisseurs' => $remplisseurs,
  235.             'regions' => $regions,
  236.             'pole' => $pole,
  237.             'district' => $district,
  238.             'communes' => $communeList,
  239.             'region' => $installationTransformation->getPole()->getRegion(),
  240.             'editMode' => true,
  241.             'show' => true
  242.         ]);
  243.         return new JsonResponse(
  244.             [
  245.                 'title' => 'Affichage suivi installation transformation',
  246.                 'message' => 'Affichage suivi installation transformation avec succès',
  247.                 'status' => 'success',
  248.                 'htmlViewFormFiche' => $htmlViewFormFiche,
  249.             ],
  250.             200,
  251.             ['Content-Type' => 'application/json']
  252.         );
  253.     }
  254.     /**
  255.      * @Route("/new", name="app_installation_transformation_new", methods={"GET", "POST"})
  256.      */
  257.     public function new(
  258.         Request                $request,
  259.         StatutFicheRepository  $statutFicheRepository,
  260.         RegionRepository       $regionRepository,
  261.         EntityManagerInterface $entityManager,
  262.         PoleRepository         $poleRepository,
  263.         FokontanyRepository    $fokontanyRepository,
  264.         OpCommunalRepository   $opCommunalRepository,
  265.         OpRegionaleRepository  $opRegionaleRepository
  266.     ): Response
  267.     {
  268.         $route $request->attributes->get("_route");
  269.         $installationTransformation = new InstallationTransformation();
  270.         $form $this->createForm(InstallationTransformationType::class, $installationTransformation, [
  271.             'action' => $this->generateUrl('app_installation_transformation_new'),
  272.             'method' => 'POST'
  273.         ]);
  274.         $form->handleRequest($request);
  275.         $remplisseur $this->getUser();
  276.         $userConnect $this->getUser();
  277.         $user $this->userRepository->find($userConnect);
  278.         //Get region cir only for all infrastructure
  279.         $regions $user->getCoordinationZone() ? $user->getCoordinationZone()->getRegions() : $regionRepository->findAll();
  280.         $dateNow = new DateTime();
  281.         $facture = new FactureTransformation();
  282.         $sourcesFinancement $this->canalFinancementRepository->findAll();
  283.         $htmlViewFormFiche $this->renderView('suivi_installation_transformation/new.html.twig', [
  284.             'installationTransformation' => $installationTransformation,
  285.             'sourcesFinancements' => $sourcesFinancement,
  286.             'dateNow' => $dateNow->format('d - m - Y'),
  287.             'user' => $remplisseur,
  288.             'form' => $form->createView(),
  289.             'route' => $route,
  290.             'fokontany' => null,
  291.             'regions' => $regions,
  292.             'editMode' => false
  293.         ]);
  294.         if ($form->isSubmitted()) {
  295.             if ($request->get('equipement')) {
  296.                 $this->createEquipementMachine($request->get('equipement'), $entityManager$installationTransformation);
  297.             }
  298.             //récuperation des données depuis formulaire
  299.             $poleId $request->request->get("pole");
  300.             if (isset($request->files->get("installation_transformation")["fichier"])) {
  301.                 $files $request->files->get("installation_transformation")["fichier"];
  302.             } else {
  303.                 $files = [];
  304.             }
  305.             $stringFilesDeleted $request->request->get("fichier_deleted");
  306.             //recuperation des factures de la fiche
  307.             $factureEtudes $request->request->get("etude");
  308.             $factureTravaux $request->request->get("travaux");
  309.             $stringFactureDeleted $request->request->get("facture_deleted");
  310.             //Suppression des fichiers selectionnés
  311.             if ($stringFilesDeleted != null && $stringFilesDeleted != "0") {
  312.                 $tabFichierDeleted explode(","$stringFilesDeleted);
  313.                 $this->fichierService->deleteFichier($tabFichierDeleted);
  314.             }
  315.             $opCommunal $request->request->get("installation_transformation")["opCommunal"];
  316.             $opRegionale $request->request->get("installation_transformation")["opRegionale"];
  317.             if ($opCommunal != "") {
  318.                 $findOpCommunal $opCommunalRepository->find((int)$opCommunal);
  319.                 $installationTransformation->setOpCommunal($findOpCommunal);
  320.             }
  321.             if ($opRegionale != "") {
  322.                 $finOpRegionale $opRegionaleRepository->find((int)$opRegionale);
  323.                 $installationTransformation->setOpRegionale($finOpRegionale);
  324.             }
  325.             $uuid Uuid::uuid4();
  326.             $installationTransformation->setUuid($uuid);
  327.             $installationTransformation->setPole($poleRepository->find((int)$poleId));
  328.             $installationTransformation->setRemplisseurInitiale($remplisseur);
  329.             $installationTransformation->setStatutFiche($statutFicheRepository->find(1));
  330.             $installationTransformation->setCreatedAt(new \DateTimeImmutable('now'));
  331.             $installationTransformation->setUpdatedAt(new \DateTimeImmutable('now'));
  332.             $entityManager->persist($installationTransformation);
  333.             //get all remplisseur
  334.             $remplisseurIds $request->request->all('installation_transformation')['remplisseur'] ?? [];
  335.             if ($remplisseurIds) {
  336.                 foreach ($remplisseurIds as $remplisseurId) {
  337.                     $user $this->userRepository->find(intval($remplisseurId));
  338.                     //Insert each remplisseur for the transformation
  339.                     $remplisseurTransformation = new RemplisseurTransformation();
  340.                     $remplisseurTransformation->setRemplisseur($user);
  341.                     $remplisseurTransformation->setUniteTransformation($installationTransformation);
  342.                     $entityManager->persist($remplisseurTransformation);
  343.                 }
  344.             }
  345.             //Traitement et creation objet Facture etude
  346.             $etapeEtude $this->params->get("pi_etape_etude");
  347.             $this->factureService->createFacture(
  348.                 $factureEtudes$facture$etapeEtude$installationTransformation$this->factureTransformationRepo
  349.             );
  350.             //Traitement et creation objet Facture Travaux
  351.             $etapeTravaux $this->params->get("pi_etape_travaux");
  352.             $this->factureService->createFacture(
  353.                 $factureTravaux$facture$etapeTravaux$installationTransformation$this->factureTransformationRepo
  354.             );
  355.             //Suppression des factures selectionnés
  356.             if ($stringFactureDeleted != null && $stringFactureDeleted != "0") {
  357.                 $tabFactreDeleted explode(","$stringFactureDeleted);
  358.                 $this->factureService->deleteFacture($this->factureTransformationRepo$tabFactreDeleted);
  359.             }
  360.             $entityManager->flush();
  361.             //Traitement et creation objet Fichier et affectation des fichiers dans l'objet
  362.             $this->fichierService->createFile($files$installationTransformation"installation-transformation");
  363.             $entityManager->flush();
  364.         }
  365.         return new JsonResponse(
  366.             [
  367.                 'title' => 'Création fiche suivi installation transformation',
  368.                 'message' => 'Création fiche suivi installation transfromation avec succès',
  369.                 'status' => 'success',
  370.                 'htmlViewFormFiche' => $htmlViewFormFiche,
  371.             ],
  372.             200,
  373.             ['Content-Type' => 'application/json']
  374.         );
  375.     }
  376.     /**
  377.      * @throws \Exception
  378.      */
  379.     public function createEquipementMachine($equipememnt$entityManager$installationTransformation)
  380.     {
  381.         for ($i 0$i count($equipememnt); $i++) {
  382.             $uuid Uuid::uuid4();
  383.             $item $equipememnt['equipement' . ($i 1)];
  384.             $findEquipementMachine $this->equipementMachineRepository->find(intval($item['id']));
  385.             $findSourceFinancement $this->canalFinancementRepository->find(intval($item['sourceFinancement']));
  386.             if (!$findEquipementMachine) {
  387.                 $equipementMachine = new EquipementMachine();
  388.                 $equipementMachine->setInstallationTransformation($installationTransformation);
  389.                 $equipementMachine->setLibelle($item['libelle']);
  390.                 $equipementMachine->setNombre(intval($item['nombre']));
  391.                 $equipementMachine->setPrixUnitaire(intval($item['prixUnitaire']));
  392.                 $equipementMachine->setCoutTotalAchat(intval($item['coutTotalAchat']));
  393.                 $equipementMachine->setDateAcquisition((new DateTime($item['dateAcquisition'])));
  394.                 $equipementMachine->setEtatMateriel($item['etatMateriel']);
  395.                 $equipementMachine->setDateVerification((new DateTime($item['dateVerification'])));
  396.                 $equipementMachine->setSourceFinancement($findSourceFinancement);
  397.                 $equipementMachine->setUuid($uuid);
  398.                 $entityManager->persist($equipementMachine);
  399.             } else {
  400.                 $findEquipementMachine->setLibelle($item['libelle']);
  401.                 $findEquipementMachine->setNombre(intval($item['nombre']));
  402.                 $findEquipementMachine->setPrixUnitaire(intval($item['prixUnitaire']));
  403.                 $findEquipementMachine->setCoutTotalAchat(intval($item['coutTotalAchat']));
  404.                 $findEquipementMachine->setDateAcquisition((new DateTime($item['dateAcquisition'])));
  405.                 $findEquipementMachine->setEtatMateriel($item['etatMateriel']);
  406.                 $findEquipementMachine->setDateVerification((new DateTime($item['dateVerification'])));
  407.                 $findEquipementMachine->setSourceFinancement($findSourceFinancement);
  408.                 $entityManager->persist($findEquipementMachine);
  409.             }
  410.         }
  411.     }
  412.     /**
  413.      * @Route("/{id}/edit", name="app_installation_transformation_edit", methods={"GET", "POST"})
  414.      */
  415.     public function edit(
  416.         InstallationTransformation $installationTransformation,
  417.         Request                    $request,
  418.         EntityManagerInterface     $entityManager,
  419.         PoleRepository             $poleRepository,
  420.         StatutFicheRepository      $statutFicheRepo,
  421.         RegionRepository           $regionRepository,
  422.         OpCommunalRepository       $opCommunalRepository,
  423.         OpRegionaleRepository      $opRegionaleRepository
  424.     ): Response
  425.     {
  426.         $route $request->attributes->get("_route");
  427.         $statutFiche $this->constApp->statutFiche();
  428.         $form $this->createForm(InstallationTransformationType::class, $installationTransformation, [
  429.             'action' => $this->generateUrl(
  430.                 'app_installation_transformation_edit',
  431.                 array('id' => $installationTransformation->getId())
  432.             ),
  433.             'method' => 'POST'
  434.         ]);
  435.         $form->handleRequest($request);
  436.         $remplisseur $installationTransformation->getRemplisseurInitiale();
  437.         $dateNow = new DateTime();
  438.         $facture = new FactureTransformation();
  439.         $userConnect $this->getUser();
  440.         $user $this->userRepository->find($userConnect);
  441.         //Get region cir only for all infrastructure
  442.         $regions $user->getCoordinationZone() ? $user->getCoordinationZone()->getRegions() : $regionRepository->findAll();
  443.         $pole $installationTransformation->getPole();
  444.         $district $installationTransformation->getPole() && isset($installationTransformation->getPole()->getDistrict()[0]) ? $installationTransformation->getPole()->getDistrict()[0] : [];
  445.         $communes $district $district->getCommunes() : [];
  446.         $dataCommunes = [];
  447.         //Filter commune
  448.         foreach ($communes as $commune) {
  449.             //Push if remplisseur found
  450.             foreach ($commune->getUsers() as $user) {
  451.                 //Get user CGEAF by commune
  452.                 if ($user->getProfil()->getId() == $this->params->get('profil_cgeaf')) {
  453.                     $dataCommunes[] = [
  454.                         'id' => $commune->getId(),
  455.                         'name' => $commune->getName(),
  456.                         'remplisseurs' => [
  457.                             'id' => $user->getId(),
  458.                             'name' => $user->getLastName()
  459.                         ]
  460.                     ];
  461.                 }
  462.             }
  463.         }
  464.         //Combine rempliseur meme commune
  465.         $communeList = [];
  466.         foreach ($dataCommunes as $item) {
  467.             $idCommune $item['id'];
  468.             if (!isset($communeList[$idCommune])) {
  469.                 $communeList[$idCommune] = [
  470.                     'id' => $item['id'],
  471.                     'name' => $item['name'],
  472.                     'remplisseurs' => []
  473.                 ];
  474.             }
  475.             // Ajouter le remplisseur dans la liste
  476.             $communeList[$idCommune]['remplisseurs'][] = $item['remplisseurs'];
  477.         }
  478.         $remplisseurs $installationTransformation->getRemplisseurTransformations();
  479.         $equipementMachine $this->equipementMachineRepository->findBy(['installationTransformation' => $installationTransformation]);
  480.         $canalFinancement $this->canalFinancementRepository->findAll();
  481.         $amount $installationTransformation->getNumeroContratEtude()->getAmount();
  482.         $htmlViewFormFiche $this->renderView('suivi_installation_transformation/edit.html.twig', [
  483.             'installationTransformation' => $installationTransformation,
  484.             'equipementMachines' => $equipementMachine,
  485.             'sourceFinancements' => $canalFinancement,
  486.             'dateNow' => $dateNow->format('d - m - Y'),
  487.             'user' => $remplisseur,
  488.             'form' => $form->createView(),
  489.             'route' => $route,
  490.             'remplisseurs' => $remplisseurs,
  491.             'regions' => $regions,
  492.             'pole' => $pole,
  493.             'district' => $district,
  494.             'communes' => $communeList,
  495.             'region' => $installationTransformation->getPole()->getRegion(),
  496.             'editMode' => true,
  497.         ]);
  498.         if ($form->isSubmitted()) {
  499.             //récuperation des données depuis formulaire
  500.             $poleId $request->request->get("pole");
  501.             if (isset($request->files->get("installation_transformation")["fichier"])) {
  502.                 $files $request->files->get("installation_transformation")["fichier"];
  503.             } else {
  504.                 $files = [];
  505.             }
  506.             $stringFilesDeleted $request->request->get("fichier_deleted");
  507.             //recuperation des factures de la fiche
  508.             $factureEtudes $request->request->get("etude");
  509.             $factureTravaux $request->request->get("travaux");
  510.             $stringFactureDeleted $request->request->get("facture_deleted");
  511.             //Traitement et creation objet Fichier et affectation des fichiers dans l'objet
  512.             $this->fichierService->createFile($files$installationTransformation"installation-transformation");
  513.             //Suppression des fichiers selectionnés
  514.             if ($stringFilesDeleted != null && $stringFilesDeleted != "0") {
  515.                 $tabFichierDeleted explode(","$stringFilesDeleted);
  516.                 $this->fichierService->deleteFichier($tabFichierDeleted);
  517.             }
  518.             $opCommunal $request->request->get("installation_transformation")["opCommunal"];
  519.             $opRegionale $request->request->get("installation_transformation")["opRegionale"];
  520.             //Reset to null before set a new value
  521.             $installationTransformation->setOpCommunal(null);
  522.             $installationTransformation->setOpRegionale(null);
  523.             if ($opCommunal != "") {
  524.                 $findOpCommunal $opCommunalRepository->find((int)$opCommunal);
  525.                 $installationTransformation->setOpCommunal($findOpCommunal);
  526.             }
  527.             if ($opRegionale != "") {
  528.                 $finOpRegionale $opRegionaleRepository->find((int)$opRegionale);
  529.                 $installationTransformation->setOpRegionale($finOpRegionale);
  530.             }
  531.             $installationTransformation->setPole($poleRepository->find((int)$poleId));
  532.             if ($installationTransformation->getStatutFiche()->getId() == $statutFiche['REFUSE_CIR']['id']) {
  533.                 $installationTransformation->setStatutFiche($statutFicheRepo->find($statutFiche['EN_ATTENTE']['id']));
  534.             }
  535.             $installationTransformation->setUpdatedAt(new \DateTimeImmutable('now'));
  536.             $entityManager->persist($installationTransformation);
  537.             //Clean remplisseur before update
  538.             $this->installationTransformationService->removeAllRemplisseurTransformation($installationTransformation->getId());
  539.             //Clean doctrine memory
  540.             $installationTransformation->getRemplisseurTransformations()->clear();
  541.             //get all remplisseur
  542.             $remplisseurIds $request->request->all('installation_transformation')['remplisseur'] ?? [];
  543.             if ($remplisseurIds) {
  544.                 foreach ($remplisseurIds as $remplisseurId) {
  545.                     $user $this->userRepository->find(intval($remplisseurId));
  546.                     //Insert each remplisseur for the installation_transformation
  547.                     $remplisseurTransformation = new RemplisseurTransformation();
  548.                     $remplisseurTransformation->setRemplisseur($user);
  549.                     $remplisseurTransformation->setUniteTransformation($installationTransformation);
  550.                     $entityManager->persist($remplisseurTransformation);
  551.                 }
  552.             }
  553.             //Traitement et creation objet Facture etude
  554.             $etapeEtude $this->params->get("pi_etape_etude");
  555.             $this->factureService->createFacture(
  556.                 $factureEtudes$facture$etapeEtude$installationTransformation$this->factureTransformationRepo
  557.             );
  558.             //Traitement et creation objet Facture Travaux
  559.             $etapeTravaux $this->params->get("pi_etape_travaux");
  560.             $this->factureService->createFacture(
  561.                 $factureTravaux$facture$etapeTravaux$installationTransformation$this->factureTransformationRepo
  562.             );
  563.             //Suppression des factures selectionnés
  564.             if ($stringFactureDeleted != null && $stringFactureDeleted != "0") {
  565.                 $tabFactreDeleted explode(","$stringFactureDeleted);
  566.                 $this->factureService->deleteFacture($this->factureTransformationRepo$tabFactreDeleted);
  567.             }
  568.             //Suppression des equipements machines selectionnés
  569.             $stringEquipementDeleted $request->get('equipement_deleted');
  570.             if ($stringEquipementDeleted != "" && $stringEquipementDeleted != "0") {
  571.                 $tabEquipementDeleted explode(","$stringEquipementDeleted);
  572.                 foreach ($tabEquipementDeleted as $equipementDeleted) {
  573.                     $findEquipement $this->equipementMachineRepository->find(intval($equipementDeleted));
  574.                     $entityManager->remove($findEquipement);
  575.                 }
  576.             }
  577.             //Création des equipements machines s'il y a des nouveaux
  578.             if ($request->get('equipement')) {
  579.                 $this->createEquipementMachine($request->get('equipement'), $entityManager$installationTransformation);
  580.             }
  581.             $entityManager->flush();
  582.         }
  583.         return new JsonResponse(
  584.             [
  585.                 'title' => 'Affichage suivi installation transformation',
  586.                 'message' => 'Affichage suivi installation transformation avec succès',
  587.                 'status' => 'success',
  588.                 'htmlViewFormFiche' => $htmlViewFormFiche,
  589.             ],
  590.             200,
  591.             ['Content-Type' => 'application/json']
  592.         );
  593.     }
  594.     /**
  595.      * @Route("/api/list_product", name="app_installation_transformation_api_list_product", methods={"GET"})
  596.      */
  597.     public function getListProduct(): JsonResponse
  598.     {
  599.         return new JsonResponse(
  600.             [
  601.                 'title' => 'Récuperation des partenaires mise en oeuvre',
  602.                 'message' => 'Récuperation avec succès',
  603.                 'status' => 'success',
  604.                 'data' => $this->installationTransformationService->getProductService()
  605.             ],
  606.             200,
  607.             ['Content-Type' => 'application/json']
  608.         );
  609.     }
  610.     /**
  611.      * @Route("/api/insert_product", name="app_installation_transformation_api_insert_product", methods={"POST"})
  612.      * @throws NonUniqueResultException
  613.      */
  614.     public function insertProduct(): JsonResponse
  615.     {
  616.         $nameProduct $_POST['name_produit'];
  617.         $findProduct $this->installationTransformationService->findProductByName($nameProduct);
  618.         $message "";
  619.         $status "";
  620.         if ($findProduct) {
  621.             $message "Produit déjà existé";
  622.             $status 'error';
  623.         } else {
  624.             $this->installationTransformationService->insertProduct($nameProduct);
  625.             $message "Insertion avec succès";
  626.             $status 'success';
  627.         }
  628.         return new JsonResponse(
  629.             [
  630.                 'title' => 'Création de produit mise en oeuvre',
  631.                 'message' => $message,
  632.                 'status' => $status,
  633.             ],
  634.             200,
  635.             ['Content-Type' => 'application/json']
  636.         );
  637.     }
  638.     /**
  639.      * @Route("/mobile/{id}", name="app_installation_transformation_mobile",methods={"GET","POST"})
  640.      */
  641.     public function mobile(
  642.         InstallationTransformation       $installationTransformation,
  643.         SuiviProductionTransfoRepository $suiviProdTransfoRepo
  644.     ): Response
  645.     {
  646.         $user $this->getUser();
  647.         $niveauUser $user->getProfil()->getNiveau()->getid();
  648.         $profilUser $user->getProfil()->getId();
  649.         $niveauConst $this->constApp->niveauProfil();
  650.         $statutFiche $this->constApp->statutFiche();
  651.         $eafBeneficiaires $installationTransformation->getEafInstallationTransformations();
  652.         $suiviProductionTransfos $installationTransformation->getSuiviProductionTransfos();
  653.         $beneficiaireInstallations $this->resumeBeneficiaireService->getResumeBeneficiaire($eafBeneficiaires);
  654.         $niveau null;
  655.         $op null;
  656.         //Recuperation données validées par rapport au niveau de l'utilisateur
  657.         switch ($niveauUser) {
  658.             case $niveauConst['NIVEAU_POLE']['id'];
  659.                 $suiviProductionTransfos $suiviProdTransfoRepo->findBy([
  660.                     "statut" => [$statutFiche['EN_ATTENTE']['id'], $statutFiche['REFUSE_REGIONALE']['id']],
  661.                     "installationTransformation" => $installationTransformation
  662.                 ]);
  663.                 break;
  664.             case $niveauConst['NIVEAU_REGIONALE']['id'];
  665.                 $suiviProductionTransfos $suiviProdTransfoRepo->findBy([
  666.                     "statut" => [$statutFiche['VALIDE_POLE']['id'], $statutFiche['REFUSE_CIR']['id']],
  667.                     "installationTransformation" => $installationTransformation
  668.                 ]);
  669.                 break;
  670.             case $niveauConst['NIVEAU_CIR']['id'];
  671.                 $suiviProductionTransfos $suiviProdTransfoRepo->findBy([
  672.                     "statut" => [$statutFiche['VALIDE_REGIONALE']['id'], $statutFiche['REFUSE_NATIONALE']['id']],
  673.                     "installationTransformation" => $installationTransformation
  674.                 ]);
  675.                 break;
  676.             case $niveauConst['NIVEAU_NATIONALE']['id'];
  677.                 $suiviProductionTransfos $suiviProdTransfoRepo->findBy([
  678.                     "statut" => $statutFiche['VALIDE_CIR']['id'],
  679.                     "installationTransformation" => $installationTransformation
  680.                 ]);
  681.                 break;
  682.             default:
  683.                 # code...
  684.                 break;
  685.         }
  686.         //Récuperation des données à afficher si l'utilisateur connecté est admin
  687.         if ($user->getProfil()->getNiveauLocalite() == "nat_") {
  688.             $suiviProductionTransfos $suiviProdTransfoRepo->findBy(
  689.                 ["installationTransformation" => $installationTransformation]
  690.             );
  691.         }
  692.         $opType "";
  693.         if ($installationTransformation->getOpRegionale() == null && $installationTransformation->getOpCommunal() != null) {
  694.             $niveau "Communal";
  695.             $op $installationTransformation->getOpCommunal()->getOrganisationPaysanne();
  696.             $opType $this->constApp->opType()[$installationTransformation->getOpCommunal()->getType()];
  697.         }
  698.         if ($installationTransformation->getOpRegionale() != null && $installationTransformation->getOpCommunal() == null) {
  699.             $niveau "Régionale";
  700.             $op $installationTransformation->getOpRegionale()->getOrganisationPaysanne();
  701.             $opType $this->constApp->opType()[$installationTransformation->getOpRegionale()->getType()];
  702.         }
  703.         $filiereDeveloppes $this->organisationPaysanneFiliereRepository->findBy(
  704.             ['organisationPaysanne' => $op],
  705.             ['priorite' => 'ASC']
  706.         );
  707.         $resumeOpBeneficiary $this->installationTransformationService->getResumeOpBeneficiaryService($installationTransformation);
  708.         $resumeEafBeneficiary $this->installationTransformationService->getResumeEafBeneficiaryService($installationTransformation);
  709.         $resumeFormation $this->installationTransformationService->getResumeFormationReceivedService($installationTransformation);
  710.         return $this->render('suivi_installation_transformation/liste_donnee_mobile.html.twig', [
  711.             'controller_name' => 'Liste des suivi des installations de transformations',
  712.             'installationTransformation' => $installationTransformation,
  713.             'filiereDeveloppes' => $filiereDeveloppes,
  714.             'resumeOpBeneficiary' => $resumeOpBeneficiary,
  715.             'resumeEafBeneficiary' => $resumeEafBeneficiary,
  716.             'resumeFormation' => $resumeFormation,
  717.             'suiviProductionTransfos' => $suiviProductionTransfos,
  718.             'beneficiaireInstallations' => $beneficiaireInstallations,
  719.             'niveau' => $niveau,
  720.             'op' => $op,
  721.             'opType' => $opType
  722.         ]);
  723.     }
  724.     /**
  725.      * @Route("/mobile/{id}/api/remplisseur_commune/{type}", name="app_installation_transformation_remplisseur_by_commune",methods={"GET","POST"})
  726.      */
  727.     public function getCommunesByRemplisseur(
  728.         Request                    $request,
  729.         InstallationTransformation $installationTransformation,
  730.         string                     $type
  731.     ): JsonResponse
  732.     {
  733.         /**
  734.          * This function will return the list of communes by remplisseur
  735.          * And the data of the first index(commune) by type [eaf or formation or suivi]
  736.          */
  737.         $currentUser $this->getUser();
  738.         $user $this->userRepository->find($currentUser);
  739.         $niveauUser $user->getProfil()->getNiveau()->getid();
  740.         $column $request->query->get("column") ?? "";
  741.         $value $request->query->get("value") ?? "";
  742.         $limit $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
  743.         $page $request->query->get("page") ? intval($request->query->get("page")) : 0;
  744.         $pjType $request->query->get("pj") ? intval($request->query->get("pj")) : null;
  745.         $offset = ($limit $page) - $limit;
  746.         $remplisseurs $installationTransformation->getRemplisseurTransformations();
  747.         $index 0;
  748.         $data = [];
  749.         $totalRows = [];
  750.         $data["firstIndexData"] = [];
  751.         $data["communes"] = [];
  752.         //Get Commune by remplisseur
  753.         foreach ($remplisseurs as $remplisseur) {
  754.             $communeRemplisseur $remplisseur->getRemplisseur()
  755.             && $remplisseur->getRemplisseur()->getCommunes()
  756.                 ? ($remplisseur->getRemplisseur()->getCommunes())[0] : null;
  757.             //Get Eaf or formation for first index(Remplisseur Commune)
  758.             if ($index == 0) {
  759.                 $result $this->getBeneficiaryOrEafOrFormationOrSuiviTransformationOrPj(
  760.                     $installationTransformation,
  761.                     $column,
  762.                     $value,
  763.                     $limit,
  764.                     $offset,
  765.                     $remplisseur->getRemplisseur(),
  766.                     $type,
  767.                     $pjType,
  768.                     $request
  769.                 );
  770.                 $data["firstIndexData"] = $result['data'];
  771.                 $totalRows $result['totalRows'];
  772.             }
  773.             //Push the current remplisseur commune
  774.             $data["communes"][] = [
  775.                 "id" => $communeRemplisseur->getId(),
  776.                 "name" => $communeRemplisseur->getName(),
  777.                 "remplisseur_id" => $remplisseur->getRemplisseur() ? $remplisseur->getRemplisseur()->getId() : '---',
  778.                 "remplisseur_name" => $remplisseur->getRemplisseur() ? $remplisseur->getRemplisseur()->getLastname() : '---',
  779.             ];
  780.             $index++;
  781.         }
  782.         $data["dataInfo"] = [
  783.             'totalRows' => count($totalRows),
  784.             'limit' => $limit,
  785.             'page' => $page,
  786.             'niveauUser' => $niveauUser,
  787.         ];
  788.         return new JsonResponse(
  789.             [
  790.                 'title' => 'Récuperation liste bénéficiaire',
  791.                 'message' => 'Récuperation avec succès',
  792.                 'status' => 'success',
  793.                 'data' => $data
  794.             ],
  795.             200,
  796.             ['Content-Type' => 'application/json']
  797.         );
  798.     }
  799.     public function getBeneficiaryOrEafOrFormationOrSuiviTransformationOrPj(
  800.         InstallationTransformation $installationTransformation,
  801.                                    $column,
  802.                                    $value,
  803.                                    $limit,
  804.                                    $offset,
  805.         User                       $remplisseur,
  806.                                    $type,
  807.                                    $typePj null,
  808.         Request $request
  809.     ): array
  810.     {
  811.         $data = [];
  812.         $totalRows = [];
  813.         //Get first index data By type["eaf" or "formation" or "suivi"]
  814.         if ($type == "eaf") {
  815.             $data $this->installationTransformationService->getListEafBeneficiaireService(
  816.                 $installationTransformation,
  817.                 $column,
  818.                 $value,
  819.                 $limit,
  820.                 $offset,
  821.                 $remplisseur
  822.             );
  823.             $totalRows $this->installationTransformationService->getListEafBeneficiaireService(
  824.                 $installationTransformation,
  825.                 $column,
  826.                 $value,
  827.                 null,
  828.                 null,
  829.                 $remplisseur
  830.             );
  831.         } else if ($type === "op") {
  832.             //$type = "formation"
  833.             $data $this->installationTransformationService->getOpBeneficiareTransformationService(
  834.                 $installationTransformation,
  835.                 $column,
  836.                 $value,
  837.                 $limit,
  838.                 $offset,
  839.                 $remplisseur
  840.             );
  841.             $totalRows $this->installationTransformationService->getOpBeneficiareTransformationService(
  842.                 $installationTransformation,
  843.                 $column,
  844.                 $value,
  845.                 null,
  846.                 null,
  847.                 $remplisseur
  848.             );
  849.         } else if ($type === "formation") {
  850.             //$type = "formation"
  851.             $data $this->installationTransformationService->getListFormationService(
  852.                 $installationTransformation,
  853.                 $column,
  854.                 $value,
  855.                 $limit,
  856.                 $offset,
  857.                 $remplisseur
  858.             );
  859.             $totalRows $this->installationTransformationService->getListFormationService(
  860.                 $installationTransformation,
  861.                 $column,
  862.                 $value,
  863.                 null,
  864.                 null,
  865.                 $remplisseur
  866.             );
  867.         } else if ($type === "suivi") {
  868.             //$type = "suivi"
  869.             $data $this->installationTransformationService->getSuiviProductionTransformation(
  870.                 $installationTransformation,
  871.                 $column,
  872.                 $value,
  873.                 $limit,
  874.                 $offset,
  875.                 $remplisseur
  876.             );
  877.             $totalRows $this->installationTransformationService->getSuiviProductionTransformation(
  878.                 $installationTransformation,
  879.                 $column,
  880.                 $value,
  881.                 null,
  882.                 null,
  883.                 $remplisseur
  884.             );
  885.         } else if ($type === "pj") {
  886.             //$type = "pj"
  887.             $data $this->installationTransformationService->getPieceJointByTypeService(
  888.                 $installationTransformation,
  889.                 $typePj,
  890.                 $remplisseur,
  891.                 $request
  892.             );
  893.             $totalRows $this->installationTransformationService->getPieceJointByTypeService(
  894.                 $installationTransformation,
  895.                 $typePj,
  896.                 $remplisseur,
  897.                 $request
  898.             );
  899.         }
  900.         return [
  901.             "data" => $data,
  902.             "totalRows" => $totalRows
  903.         ];
  904.     }
  905.     /**
  906.      * @Route("/mobile/{id}/api/op/beneficiaire/{remplisseurId}", name="app_installation_transformation_mobile_op_beneficiaire",methods="GET")
  907.      */
  908.     public function getListOpBeneficiaire(
  909.         InstallationTransformation $installationTransformation,
  910.                                    $remplisseurId,
  911.         Request                    $request
  912.     ): JsonResponse
  913.     {
  914.         $remplisseur $this->userRepository->find(intval($remplisseurId));
  915.         $column $request->query->get("column") ?? "";
  916.         $value $request->query->get("value") ?? "";
  917.         $limit $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
  918.         $page $request->query->get("page") ? intval($request->query->get("page")) : 0;
  919.         $offset = ($limit $page) - $limit;
  920.         //Get Data with pagination
  921.         $data $this->installationTransformationService->getOpBeneficiareTransformationService(
  922.             $installationTransformation,
  923.             $column,
  924.             $value,
  925.             $limit,
  926.             $offset,
  927.             $remplisseur
  928.         );
  929.         //Get only total rows so, no limit and page (no pagination)
  930.         $totalRows $this->installationTransformationService->getOpBeneficiareTransformationService(
  931.             $installationTransformation,
  932.             $column,
  933.             $value,
  934.             null,
  935.             null,
  936.             $remplisseur
  937.         );
  938.         return new JsonResponse(
  939.             [
  940.                 'title' => 'Récuperation liste op bénéficiaires',
  941.                 'message' => 'Récuperation avec succès',
  942.                 'status' => 'success',
  943.                 'data' => [
  944.                     'rows' => $data,
  945.                     'dataInfo' => [
  946.                         'totalRows' => count($totalRows),
  947.                         'limit' => $limit,
  948.                         'page' => $page,
  949.                     ]
  950.                 ]
  951.             ],
  952.             200,
  953.             ['Content-Type' => 'application/json']
  954.         );
  955.     }
  956.     /**
  957.      * @Route("/mobile/{id}/api/liste/formation/{remplisseurId}", name="app_installation_transformation_mobile_list_formation",methods="GET")
  958.      */
  959.     public function getListFormation(
  960.         InstallationTransformation $installationTransformation,
  961.                                    $remplisseurId,
  962.         Request                    $request
  963.     ): JsonResponse
  964.     {
  965.         $remplisseur $this->userRepository->find(intval($remplisseurId));
  966.         $column $request->query->get("column") ?? "";
  967.         $value $request->query->get("value") ?? "";
  968.         $limit $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
  969.         $page $request->query->get("page") ? intval($request->query->get("page")) : 0;
  970.         $offset = ($limit $page) - $limit;
  971.         //Get Data with pagination
  972.         $formations $this->installationTransformationService->getListFormationService(
  973.             $installationTransformation,
  974.             $column,
  975.             $value,
  976.             $limit,
  977.             $offset,
  978.             $remplisseur
  979.         );
  980.         //Get only total rows so, no limit and page (no pagination)
  981.         $totalRows $this->installationTransformationService->getListFormationService(
  982.             $installationTransformation,
  983.             $column,
  984.             $value,
  985.             null,
  986.             null,
  987.             $remplisseur
  988.         );
  989.         return new JsonResponse(
  990.             [
  991.                 'title' => 'Récuperation liste formation',
  992.                 'message' => 'Récuperation avec succès',
  993.                 'status' => 'success',
  994.                 'data' => [
  995.                     'rows' => $formations,
  996.                     'dataInfo' => [
  997.                         'totalRows' => count($totalRows),
  998.                         'limit' => $limit,
  999.                         'page' => $page,
  1000.                     ]
  1001.                 ]
  1002.             ],
  1003.             200,
  1004.             ['Content-Type' => 'application/json']
  1005.         );
  1006.     }
  1007.     /**
  1008.      * @Route("/mobile/api/formation/{id}/beneficiaire", name="app_installation_transformation_mobile_formation_beneficiaire", methods="GET")
  1009.      */
  1010.     public function getAllBeneficiaryFormation(Formation $formationRequest $request): JsonResponse
  1011.     {
  1012.         $column $request->query->get("column") ?? "";
  1013.         $value $request->query->get("value") ?? "";
  1014.         $limit $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
  1015.         $page $request->query->get("page") ? intval($request->query->get("page")) : 0;
  1016.         $offset = ($limit $page) - $limit;
  1017.         $data $this->installationTransformationService->getAllBeneficiaryFormationService(
  1018.             $formation,
  1019.             $column,
  1020.             $value,
  1021.             $limit,
  1022.             $offset
  1023.         );
  1024.         $totalRows $this->installationTransformationService->getAllBeneficiaryFormationService(
  1025.             $formation,
  1026.             $column,
  1027.             $value,
  1028.             null,
  1029.             null
  1030.         );
  1031.         return new JsonResponse(
  1032.             [
  1033.                 'title' => 'Récuperation liste des bénéficiaires formations',
  1034.                 'message' => 'Récuperation avec succès',
  1035.                 'status' => 'success',
  1036.                 'data' => [
  1037.                     'rows' => $data,
  1038.                     'dataInfo' => [
  1039.                         'totalRows' => count($totalRows),
  1040.                         'limit' => $limit,
  1041.                         'page' => $page,
  1042.                     ]
  1043.                 ]
  1044.             ],
  1045.             200,
  1046.             ['Content-Type' => 'application/json']
  1047.         );
  1048.     }
  1049.     /**
  1050.      * @Route("/mobile/{id}/api/eaf/beneficiaire/{remplisseurId}", name="app_installation_transformation_mobile_eaf_beneficiaire",methods="GET")
  1051.      */
  1052.     public function getListEafBeneficiaire(
  1053.         InstallationTransformation $installationTransformation,
  1054.                                    $remplisseurId,
  1055.         Request                    $request
  1056.     ): JsonResponse
  1057.     {
  1058.         $remplisseur $this->userRepository->find(intval($remplisseurId));
  1059.         $column $request->query->get("column") ?? "";
  1060.         $value $request->query->get("value") ?? "";
  1061.         $limit $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
  1062.         $page $request->query->get("page") ? intval($request->query->get("page")) : 0;
  1063.         $offset = ($limit $page) - $limit;
  1064.         //Get Data with pagination
  1065.         $eafBeneficiaires $this->installationTransformationService->getListEafBeneficiaireService(
  1066.             $installationTransformation,
  1067.             $column,
  1068.             $value,
  1069.             $limit,
  1070.             $offset,
  1071.             $remplisseur
  1072.         );
  1073.         //Get only total rows so, no limit and page (no pagination)
  1074.         $totalRows $this->installationTransformationService->getListEafBeneficiaireService(
  1075.             $installationTransformation,
  1076.             $column,
  1077.             $value,
  1078.             null,
  1079.             null,
  1080.             $remplisseur
  1081.         );
  1082.         return new JsonResponse(
  1083.             [
  1084.                 'title' => 'Récuperation liste bénéficiaire',
  1085.                 'message' => 'Récuperation avec succès',
  1086.                 'status' => 'success',
  1087.                 'data' => [
  1088.                     'rows' => $eafBeneficiaires,
  1089.                     'dataInfo' => [
  1090.                         'totalRows' => count($totalRows),
  1091.                         'limit' => $limit,
  1092.                         'page' => $page,
  1093.                     ]
  1094.                 ]
  1095.             ],
  1096.             200,
  1097.             ['Content-Type' => 'application/json']
  1098.         );
  1099.     }
  1100.     /**
  1101.      * @Route("/mobile/{id}/api/suivi_production_transfo/{remplisseurId}", name="app_installation_transformation_mobile_suivi_production",methods="GET")
  1102.      */
  1103.     public function getListSuiviProductionTranfo(
  1104.         InstallationTransformation $installationTransformation,
  1105.                                    $remplisseurId,
  1106.         Request                    $request
  1107.     ): JsonResponse
  1108.     {
  1109.         $currentUser $this->getUser();
  1110.         $user $this->userRepository->find($currentUser);
  1111.         $niveauUser $user->getProfil()->getNiveau()->getid();
  1112.         $remplisseur $this->userRepository->find(intval($remplisseurId));
  1113.         $column $request->query->get("column") ?? "";
  1114.         $value $request->query->get("value") ?? "";
  1115.         $limit $request->query->get("limit") ? intval($request->query->get("limit")) : 0;
  1116.         $page $request->query->get("page") ? intval($request->query->get("page")) : 0;
  1117.         $offset = ($limit $page) - $limit;
  1118.         //Get Data with pagination
  1119.         $data $this->installationTransformationService->getSuiviProductionTransformation(
  1120.             $installationTransformation,
  1121.             $column,
  1122.             $value,
  1123.             $limit,
  1124.             $offset,
  1125.             $remplisseur
  1126.         );
  1127.         //Get only total rows so, no limit and page (no pagination)
  1128.         $totalRows $this->installationTransformationService->getSuiviProductionTransformation(
  1129.             $installationTransformation,
  1130.             $column,
  1131.             $value,
  1132.             null,
  1133.             null,
  1134.             $remplisseur
  1135.         );
  1136.         return new JsonResponse(
  1137.             [
  1138.                 'title' => "Récuperation liste suivi de production",
  1139.                 'message' => 'Récuperation avec succès',
  1140.                 'status' => 'success',
  1141.                 'data' => [
  1142.                     'rows' => $data,
  1143.                     'dataInfo' => [
  1144.                         'totalRows' => count($totalRows),
  1145.                         'limit' => $limit,
  1146.                         'page' => $page,
  1147.                         'niveauUser' => $niveauUser
  1148.                     ]
  1149.                 ]
  1150.             ],
  1151.             200,
  1152.             ['Content-Type' => 'application/json']
  1153.         );
  1154.     }
  1155.     /**
  1156.      * @Route("/mobile/{id}/api/pieces/{remplisseurId}", name="app_installation_transformation_piece_joint", methods="GET")
  1157.      */
  1158.     public function getPiecesJointCycleByType(
  1159.         InstallationTransformation $installationTransformation,
  1160.         $remplisseurId,
  1161.         Request $request
  1162.     ): JsonResponse
  1163.     {
  1164.         $remplisseur $this->userRepository->find(intval($remplisseurId));
  1165.         $type $request->query->get("type") ?? "";
  1166.         $result $this->installationTransformationService->getPieceJointByTypeService(
  1167.             $installationTransformation,
  1168.             $type,
  1169.             $remplisseur,
  1170.             $request
  1171.         );
  1172.         if (count($result['data']) == 0) {
  1173.             $result['alt'] = $request->getSchemeAndHttpHost() . '/images/image.png';
  1174.         }
  1175.         return new JsonResponse(
  1176.             [
  1177.                 'title' => 'Affichage cep café photos',
  1178.                 'message' => 'Affichage cep café photos avec succès',
  1179.                 'status' => 'success',
  1180.                 'data' => $result
  1181.             ],
  1182.             200,
  1183.             ['Content-Type' => 'application/json']
  1184.         );
  1185.     }
  1186.     /**
  1187.      * @Route("/canal-financement", name="get_all_cannal_financement",methods={"GET"})
  1188.      */
  1189.     public function getAllCanalFinancement(): Response
  1190.     {
  1191.         $canalFinancement $this->canalFinancementRepository->findAll();
  1192.         $data = [];
  1193.         foreach ($canalFinancement as $canal) {
  1194.             $data[] = ["id" => $canal->getId(), "name" => $canal->getName()];
  1195.         }
  1196.         return new JsonResponse(
  1197.             [
  1198.                 'title' => 'Affichage suivi installation transformation',
  1199.                 'message' => 'Affichage suivi installation transformation avec succès',
  1200.                 'status' => 'success',
  1201.                 'data' => $data,
  1202.             ],
  1203.             200,
  1204.             ['Content-Type' => 'application/json']
  1205.         );
  1206.     }
  1207.     /**
  1208.      * @Route("/{id}/{id_statut}/{niveau}/valide", name="app_installation_transformation_valide", methods={"GET","POST"})
  1209.      */
  1210.     public function valid(
  1211.         StatutFicheRepository      $statutFicheRepository,
  1212.         InstallationTransformation $installationTransformation,
  1213.         Request                    $request
  1214.     ): Response
  1215.     {
  1216.         $statutFiche $statutFicheRepository->find($request->attributes->get('id_statut'));
  1217.         $niveau $request->attributes->get('niveau');
  1218.         $user $this->getUser();
  1219.         $message " ";
  1220.         $status " ";
  1221.         try {
  1222.             //Mise à jour statut de la fiche s'il n'y pas d'erreur et appel au fonction valide dans ficheService
  1223.             $this->ficheService->valide($installationTransformation$statutFiche$user$niveau);
  1224.             $message "Validation  fiche de suivi installation de transformation avec succès";
  1225.             $status "success";
  1226.         } catch (\Throwable $th) {
  1227.             $message "Validation fiche de suivi installation de transformation  avec erreur";
  1228.             $status "error";
  1229.         }
  1230.         return new JsonResponse(
  1231.             [
  1232.                 'title' => 'Validation fiche de suivi installation de transformation',
  1233.                 'message' => $message,
  1234.                 'status' => $status,
  1235.             ],
  1236.             200,
  1237.             ['Content-Type' => 'application/json']
  1238.         );
  1239.     }
  1240.     /**
  1241.      * @Route("/{id}/{id_statut}/{niveau}/rejete", name="app_installation_transformation_rejete", methods={"POST"})
  1242.      */
  1243.     public function rejete(
  1244.         Request                    $request,
  1245.         StatutFicheRepository      $statutFicheRepository,
  1246.         InstallationTransformation $installationTransformation
  1247.     ): Response
  1248.     {
  1249.         $user $this->getUser();
  1250.         $statutFiche $statutFicheRepository->find($request->attributes->get('id_statut'));
  1251.         $niveau $request->attributes->get('niveau');
  1252.         $observation $request->request->get("observation");
  1253.         $validations $installationTransformation->getValidation();
  1254.         $recentValidateur null;
  1255.         //recuperation du validateur recent de la fiche --> niveau inferieur de l'user connecté
  1256.         for ($i count($validations); $i 0$i--) {
  1257.             $niveauValidation $validations[$i 1]->getNiveau();
  1258.             $statutValidation $validations[$i 1]->getStatut();
  1259.             if ($niveauValidation == $niveau && $statutValidation == $this->params->get("statut_valide")) {
  1260.                 $recentValidateur $validations[$i 1]->getValidateur();
  1261.                 break;
  1262.             }
  1263.         }
  1264.         //recuperation remplisseur initiale si la fiche est refusE au niveau cir (validation niveau 3)
  1265.         if ($recentValidateur == null) {
  1266.             $recentValidateur $installationTransformation->getRemplisseurInitiale();
  1267.         }
  1268.         //if (isset($recentValidateur)) {
  1269.             //MAJ statut de la fiche
  1270.             try {
  1271.                 $this->ficheService->rejete($installationTransformation$statutFiche$user$observation$niveau);
  1272.                 $message "Refus fiche de suivi installation de tranformation  avec succès";
  1273.                 $status "success";
  1274.             } catch (TransportExceptionInterface $e) {
  1275.                 $message "Refus fiche de suivi installation de tranformation  avec erreur";
  1276.                 $status "error";
  1277.             }
  1278. //        } else {
  1279. //            $message = "Refus invalide";
  1280. //            $status = "error";
  1281. //        }
  1282.         return new JsonResponse(
  1283.             [
  1284.                 'title' => 'Refus fiche de suivi installation de tranformation',
  1285.                 'message' => $message,
  1286.                 'status' => $status,
  1287.             ],
  1288.             200,
  1289.             ['Content-Type' => 'application/json']
  1290.         );
  1291.     }
  1292.     /**
  1293.      * @Route("/{id_statut}/{niveau}/prod_valide", name="app_suivi_prod_valide", methods={"GET","POST"})
  1294.      */
  1295.     public function valideProduction(
  1296.         StatutFicheRepository            $statutFicheRepository,
  1297.         SuiviProductionTransfoRepository $suiviprodRepo,
  1298.         Request                          $request,
  1299.         EntityManagerInterface           $entityManager
  1300.     ): Response
  1301.     {
  1302.         $message " ";
  1303.         $status " ";
  1304.         $statutFiche $statutFicheRepository->find($request->attributes->get('id_statut'));
  1305.         $listeSuiviProds $request->request->get("listeObjet");
  1306.         try {
  1307.             //Mise à jour statut de tous les productions validées
  1308.             foreach ($listeSuiviProds as $idSuiviProd) {
  1309.                 $suiviProd $suiviprodRepo->find((int)$idSuiviProd);
  1310.                 $suiviProd->setStatut($statutFiche);
  1311.                 $entityManager->persist($suiviProd);
  1312.             }
  1313.             //MAJ base de données
  1314.             $entityManager->flush();
  1315.             //creation message et statut
  1316.             $message "Validation  suivi production avec succès";
  1317.             $status "success";
  1318.         } catch (\Throwable $th) {
  1319.             $message "Validation suivi production  avec erreur";
  1320.             $status "error";
  1321.         }
  1322.         return new JsonResponse(
  1323.             [
  1324.                 'title' => 'Validation suivi production',
  1325.                 'message' => $message,
  1326.                 'status' => $status,
  1327.             ],
  1328.             200,
  1329.             ['Content-Type' => 'application/json']
  1330.         );
  1331.     }
  1332.     /**
  1333.      * @Route("/{id_statut}/{niveau}/prod_rejete", name="app_suivi_prod_rejete", methods={"POST"})
  1334.      */
  1335.     public function rejeteProduction(
  1336.         StatutFicheRepository            $statutFicheRepository,
  1337.         SuiviProductionTransfoRepository $suiviprodRepo,
  1338.         Request                          $request,
  1339.         EntityManagerInterface           $entityManager
  1340.     ): Response
  1341.     {
  1342.         $message " ";
  1343.         $status " ";
  1344.         $statutFiche $statutFicheRepository->find($request->attributes->get('id_statut'));
  1345.         $listeSuiviProds $request->request->get("listeObjet");
  1346.         try {
  1347.             //Mise à jour statut de tous les productions validées
  1348.             foreach ($listeSuiviProds as $idSuiviProd) {
  1349.                 $suiviProd $suiviprodRepo->find((int)$idSuiviProd);
  1350.                 $suiviProd->setStatut($statutFiche);
  1351.                 $entityManager->persist($suiviProd);
  1352.             }
  1353.             //MAJ base de données
  1354.             $entityManager->flush();
  1355.             //creation message et statut
  1356.             $message "Refus  suivi production avec succès";
  1357.             $status "success";
  1358.         } catch (\Throwable $th) {
  1359.             $message "Refus suivi production  avec erreur";
  1360.             $status "error";
  1361.         }
  1362.         return new JsonResponse(
  1363.             [
  1364.                 'title' => 'Refus suivi production',
  1365.                 'message' => $message,
  1366.                 'status' => $status,
  1367.             ],
  1368.             200,
  1369.             ['Content-Type' => 'application/json']
  1370.         );
  1371.     }
  1372. }