src/Services/ProjectService.php line 183

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  */
  5. namespace App\Services;
  6. use App\Entity\ActualiteProject;
  7. use App\Entity\ActualiteProjectChild;
  8. use App\Entity\Alert;
  9. use App\Entity\AlertRapport;
  10. use App\Entity\CommentEtap;
  11. use App\Entity\CommentFinanceLoyer;
  12. use App\Entity\CommentFinanceLoyerChild;
  13. use App\Entity\CommentLoyer;
  14. use App\Entity\CommentLoyerChild;
  15. use App\Entity\CommentProject;
  16. use App\Entity\CommentProject2;
  17. use App\Entity\CommentProject2Child;
  18. use App\Entity\CommentProjectRead;
  19. use App\Entity\ContextProject;
  20. use App\Entity\ContextProjectChild;
  21. use App\Entity\ContratConstruction;
  22. use App\Entity\DocUpload;
  23. use App\Entity\Entreprise;
  24. use App\Entity\EnvironnementProject;
  25. use App\Entity\EnvironnementProjectChild;
  26. use App\Entity\Etap0;
  27. use App\Entity\Etap1;
  28. use App\Entity\Etap121;
  29. use App\Entity\Etap159;
  30. use App\Entity\Etap2;
  31. use App\Entity\Etap201;
  32. use App\Entity\Etap23;
  33. use App\Entity\Etap24;
  34. use App\Entity\Etap25;
  35. use App\Entity\Etap26;
  36. use App\Entity\Etap24Champs;
  37. use App\Entity\Etap3;
  38. use App\Entity\Etap4;
  39. use App\Entity\Etap5;
  40. use App\Entity\Etap50;
  41. use App\Entity\Etap6;
  42. use App\Entity\Etap601;
  43. use App\Entity\Etap602;
  44. use App\Entity\Etap7;
  45. use App\Entity\Etap71;
  46. use App\Entity\Etap8;
  47. use App\Entity\Etap80;
  48. use App\Entity\Etap9;
  49. use App\Entity\Etap10;
  50. use App\Entity\Etap11;
  51. use App\Entity\Etap12;
  52. use App\Entity\Etap13;
  53. use App\Entity\Etap14;
  54. use App\Entity\Etap15;
  55. use App\Entity\Etap16;
  56. use App\Entity\Etap160;
  57. use App\Entity\Etap161;
  58. use App\Entity\Etap17;
  59. use App\Entity\Etap171;
  60. use App\Entity\Etap172;
  61. use App\Entity\Etap173;
  62. use App\Entity\Etap174;
  63. use App\Entity\Etap175;
  64. use App\Entity\Etap18;
  65. use App\Entity\Etap19;
  66. use App\Entity\Etap20;
  67. use App\Entity\Etap21;
  68. use App\Entity\Etap22;
  69. use App\Entity\Etaps;
  70. use App\Entity\EtapsCategory;
  71. use App\Entity\ExportTab;
  72. use App\Entity\FactureFinance;
  73. use App\Entity\FamilleProject;
  74. use App\Entity\Fournisseur;
  75. use App\Entity\FournisseurProject;
  76. use App\Entity\HistoryProject;
  77. use App\Entity\ImfomationContratAchat;
  78. use App\Entity\LoyerFinance;
  79. use App\Entity\LoyerFinanceItem;
  80. use App\Entity\MeltdChamps;
  81. use App\Entity\Notification;
  82. use App\Entity\NumeroCardi;
  83. use App\Entity\ParametrageLoyer;
  84. use App\Entity\ParametrageLoyerPeriode;
  85. use App\Entity\Project;
  86. use App\Entity\ProjectAvoir;
  87. use App\Entity\ProjectEdit;
  88. use App\Entity\ProjectFactureFinance;
  89. use App\Entity\RapportCentrale;
  90. use App\Entity\ResponcableFoncierPorject;
  91. use App\Entity\ResponcablePorject;
  92. use App\Entity\ResponsableDeveloppement;
  93. use App\Entity\Spv;
  94. use App\Entity\StatusTracker;
  95. use App\Entity\StatusTrackerConstruction;
  96. use App\Entity\TypologieProject;
  97. use App\Entity\User;
  98. use App\Entity\VisiteTerrainV2Question;
  99. use App\Entity\SousFamilleProject;
  100. use App\Entity\Sourcing;
  101. use App\Entity\ZonagePlu;
  102. use App\Entity\TypeValorisation;
  103. use App\Form\LoyerFinanceType;
  104. use App\Form\ParametrageLoyerType;
  105. use App\Form\ProjectEditType;
  106. use App\Form\ProjectType;
  107. use App\Form\RapportCentraleType;
  108. use App\Form\UserType;
  109. use Doctrine\Common\Collections\ArrayCollection;
  110. use Kunnu\Dropbox\Dropbox;
  111. use Kunnu\Dropbox\DropboxApp;
  112. use Kunnu\Dropbox\Exceptions\DropboxClientException;
  113. use phpDocumentor\Reflection\Types\Self_;
  114. use PhpOffice\PhpWord\PhpWord;
  115. use Spipu\Html2Pdf\Html2Pdf;
  116. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  117. use Doctrine\ORM\EntityManagerInterface;
  118. use Symfony\Component\Form\FormFactoryInterface;
  119. use Symfony\Component\HttpFoundation\File\UploadedFile;
  120. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  121. use Symfony\Component\Routing\RouterInterface;
  122. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  123. use Symfony\Contracts\Translation\TranslatorInterface;
  124. use Symfony\Component\Security\Core\Security;
  125. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  126. use Twig\Environment;
  127. use App\Entity\Centrale;
  128. use Symfony\Component\Validator\Constraints as Assert;
  129. use Symfony\Component\Validator\Validator\ValidatorInterface;
  130. use PhpOffice\PhpSpreadsheet\Shared\Date;
  131. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  132. use PhpOffice\PhpSpreadsheet\Style\Border;
  133. use PhpOffice\PhpSpreadsheet\Style\Color;
  134. use PhpOffice\PhpSpreadsheet\Style\Fill;
  135. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  136. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  137. use setasign\Fpdi\PdfParser\StreamReader;
  138. use setasign\Fpdi\Tcpdf\Fpdi;
  139. class ProjectService
  140. {
  141.     private $em;
  142.     private $trans;
  143.     private $params;
  144.     private $security;
  145.     private $session;
  146.     private $twig;
  147.     private $notification;
  148.     public function __construct(
  149.         Environment $twig,
  150.         SessionInterface $session,
  151.         Security $security,
  152.         ParameterBagInterface $params,
  153.         EntityManagerInterface $em,
  154.         TranslatorInterface $trans,
  155.         ValidatorInterface $validator,
  156.         FlashBagInterface $flashBag,
  157.         UserPasswordEncoderInterface $passwordEncoder,
  158.         Notifications $notifications,
  159.         EtapsService $etapsService,
  160.         \Symfony\Component\Mailer\MailerInterface $mailer,
  161.         FormFactoryInterface $form,
  162.         RouterInterface $router,
  163.         UploadService $uploadService,
  164.         UserService $userService
  165.     ) {
  166.         $this->em = $em;
  167.         $this->trans = $trans;
  168.         $this->params = $params;
  169.         $this->security = $security;
  170.         $this->session = $session;
  171.         $this->twig = $twig;
  172.         $this->validator = $validator;
  173.         $this->form = $form;
  174.         $this->form = $form;
  175.         $this->flashBag = $flashBag;
  176.         $this->passwordEncoder = $passwordEncoder;
  177.         $this->notification = $notifications;
  178.         $this->etapsService = $etapsService;
  179.         $this->mailer = $mailer;
  180.         $this->router = $router;
  181.         $this->uploadService = $uploadService;
  182.         $this->userService = $userService;
  183.     }
  184.     public function uploadFileToDropbox($doc,$project,$pathTo){
  185.         $dropboxKey = $this->params->get('dropbox_key');
  186.         $dropboxSecret = $this->params->get('dropbox_secret');
  187.         $dropboxToken= $this->params->get('dropbox_token');
  188.         $app = new DropboxApp($dropboxKey,$dropboxSecret,$dropboxToken);
  189.         $dropbox = new Dropbox($app);
  190.         if(is_object($doc) && is_object($project) ) {
  191.             try {
  192.                 $path = $this->params->get('uploads_directory') . '/' . $doc->getPath();
  193.                 $userName = $project->getUserCreated()->getFirstname().' '.$project->getUserCreated()->getLastname();
  194.                 $pathTo = "/Projets signés/".trim($project->getSpv()->getName())."/Fichiers Projets/".trim($userName)."/".trim($project->getName())."/".trim($pathTo);
  195.                 $file = $dropbox->upload($path,$pathTo );
  196.                 $doc->setIdDropBox($file->getId());
  197.                 $doc->setPathDropbox($file->getPathDisplay());
  198.                 $this->em->persist($doc);
  199.                 $this->em->flush();
  200.                 return true;
  201.             } catch (DropboxClientException $e) {
  202.                 return false;
  203.             }
  204.         }
  205.         return true;
  206.     }
  207.     public function addProject($request,$user,$isDev = true)
  208.     {
  209.         $project = new Project();
  210.         $form = $this->form->create(ProjectType::class, $project);
  211.         /*$form->remove('contrat');
  212.         $form->remove('tranche');*/
  213. //        $form->remove('codeProject');
  214.         if($isDev){
  215.             if ($user && in_array("ROLE_RESPONSABLE", $user->getRoles())) {
  216.             }else{
  217.                 $form->remove('developpeur');
  218.             }
  219.         }
  220.         $form->handleRequest($request);
  221.         if ($form->isSubmitted() && $form->isValid()) {
  222.             if(in_array('ROLE_SUPER_ADMINISTRATOR', $user->getRoles()) or in_array('ROLE_ADMIN', $user->getRoles())){
  223.                 $project->setStatus(Project::STATUS_EN_COURS);
  224.             }else{
  225.                 if ($user && in_array("ROLE_RESPONSABLE", $user->getRoles())) {
  226.                     $project->setResponsable($user);
  227.                 }
  228. //                if($isDev){
  229. //                    $project->setStatus(Project::STATUS_EN_ATTENT);
  230. //                    $project->setDeveloppeur($user);
  231. //                }else{
  232.                     $project->setStatus(Project::STATUS_EN_COURS);
  233. //                }
  234.             }
  235.             $project->setUserCreated($user);
  236.             $project->setNumEtapEncours(Etaps::ETAP_0);
  237.             $project->setIsEnabled(true);
  238.             // Coordonnées GPS : séparateur décimal point obligatoire
  239.             if($project->getLat()){
  240.                 $project->setLat(str_replace(',', '.', str_replace(' ', '', $project->getLat())));
  241.             }
  242.             if($project->getLongi()){
  243.                 $project->setLongi(str_replace(',', '.', str_replace(' ', '', $project->getLongi())));
  244.             }
  245.             $fileEtudeProductibleToken = $request->get('fileEtudeProductible');
  246.             if($fileEtudeProductibleToken){
  247.                 $fileEtudeProductible = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileEtudeProductibleToken]);
  248.                 $project->setFileEtudeProductible($fileEtudeProductible);
  249. //                $this->uploadFileToDropbox($fileEtudeProductible,$project,"Présentation générale/".$fileEtudeProductible->getPath());
  250.                 $etap159 = $this->em->getRepository(Etap159::class)->findOneBy(['project'=>$project->getId()]);
  251.                 if($etap159){
  252.                     $etap159->addFileEtudeProductible159Multiple($fileEtudeProductible) ;
  253.                     $this->em->persist($etap159);
  254.                 }
  255.             }
  256.             $filePromessebailToken = $request->get('filePromessebail');
  257.             if($filePromessebailToken){
  258.                 $filePromessebail = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$filePromessebailToken]);
  259.                 $project->setFilePromessebail($filePromessebail);
  260. //                $this->uploadFileToDropbox($filePromessebail,$project,"Présentation générale/".$filePromessebail->getPath());
  261.             }
  262.             $fileDocCompementaire = $request->get('fileDocCompementaire');
  263.             if($fileDocCompementaire){
  264.                 $array = explode(',',$fileDocCompementaire);
  265.                 foreach ($array as $item){
  266.                     $fileDocCompementaireEntity = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$item]);
  267.                     $project->addFileDocCompementaire($fileDocCompementaireEntity);
  268. //                    $this->uploadFileToDropbox($fileDocCompementaireEntity,$project,"Présentation générale/".$fileDocCompementaireEntity->getPath());
  269.                 }
  270.             }
  271.             $filePhotoProject = $request->get('imageProject');
  272.             if($filePhotoProject and $filePhotoProject != ''){
  273.                 $array = explode(',',$filePhotoProject);
  274.                 foreach ($array as $item1){
  275.                     $fileMultipleEntity = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$item1]);
  276.                     $project->addImagesProject($fileMultipleEntity);
  277.                 }
  278.             }
  279.             $project->setIsNewConstruction(true);
  280.             $this->em->persist($project);
  281.             $this->em->flush();
  282.             $this->addAllTimeline($project);
  283.             $this->etapsService->setCodeProject($project);
  284.             $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  285.             if($etap160){
  286.                 $etap160->setLat($project->getLongi());
  287.                 $etap160->setLongi($project->getLat());
  288.                 $this->em->persist($etap160);
  289.                 $this->em->flush();
  290.             }
  291.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  292.             if($etap5){
  293.                 $etap5->setDateExpirationPromesseBail($project->getDateExpirationPromesseBail());
  294.                 $etap5->setD1($project->getD1());
  295.                 $this->em->persist($etap5);
  296.                 $this->em->flush();
  297.             }
  298.             $this->etapsService->updateStatusTracker($project); // set status tracker
  299.             return [
  300.                 'form' => $form->createView(),
  301.                 'project' => $project,
  302.                 'success' => true
  303.             ];
  304.         }
  305.         return [
  306.             'form' => $form->createView(),
  307.             'success' => false,
  308.         ];
  309.     }
  310.     public function EditProjectAdmin($request,$project)
  311.     {
  312.         $form = $this->form->create(ProjectType::class, $project,['edit'=>true]);
  313.         $form->handleRequest($request);
  314.         if ($form->isSubmitted() && $form->isValid()) {
  315.             // Coordonnées GPS : séparateur décimal point obligatoire
  316.             if($project->getLat()){
  317.                 $project->setLat(str_replace(',', '.', str_replace(' ', '', $project->getLat())));
  318.             }
  319.             if($project->getLongi()){
  320.                 $project->setLongi(str_replace(',', '.', str_replace(' ', '', $project->getLongi())));
  321.             }
  322.             $fileEtudeProductibleToken = $request->get('fileEtudeProductible');
  323.             if($fileEtudeProductibleToken){
  324.                 $fileEtudeProductible = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileEtudeProductibleToken]);
  325.                 $project->setFileEtudeProductible($fileEtudeProductible);
  326. //                $this->uploadFileToDropbox($fileEtudeProductible,$project,"Présentation générale/".$fileEtudeProductible->getPath());
  327.                 $etap159 = $this->em->getRepository(Etap159::class)->findOneBy(['project'=>$project->getId()]);
  328.                 if($etap159){
  329.                     $etap159->addFileEtudeProductible159Multiple($fileEtudeProductible) ;
  330.                     $this->em->persist($etap159);
  331.                 }
  332.             }
  333.             $filePromessebailToken = $request->get('filePromessebail');
  334.             if($filePromessebailToken){
  335.                 $filePromessebail = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$filePromessebailToken]);
  336.                 $project->setFilePromessebail($filePromessebail);
  337. //                $this->uploadFileToDropbox($filePromessebail,$project,"Présentation générale/".$filePromessebail->getPath());
  338.             }
  339.             $fileDocCompementaire = $request->get('fileDocCompementaire');
  340.             if($fileDocCompementaire){
  341.                 $array = explode(',',$fileDocCompementaire);
  342.                 foreach ($array as $item){
  343.                     $fileDocCompementaireEntity = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$item]);
  344.                     $project->addFileDocCompementaire($fileDocCompementaireEntity);
  345. //                    $this->uploadFileToDropbox($fileDocCompementaireEntity,$project,"Présentation générale/".$fileDocCompementaireEntity->getPath());
  346.                 }
  347.             }
  348.             $this->em->persist($project);
  349.             $this->em->flush();
  350.             $etapEntity9 = $this->em->getRepository(Etap9::class)->findOneBy(['project'=>$project->getId()]);
  351.             $etapEntity5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  352.             if($etapEntity9){
  353.                 $etapEntity9->setTarifFit($project->getTarifVise());
  354.                 if($project->getDateT0Date()){
  355.                     $etapEntity9->setDateT0($project->getDateT0Date());
  356.                 }
  357.                 $this->em->persist($etapEntity9);
  358.                 $this->em->flush();
  359.             }
  360.             if($etapEntity5 && $project->getLoyerVise()){
  361.                 $etapEntity5->setLoyerConfirme($project->getLoyerVise());
  362.                 $this->em->persist($etapEntity5);
  363.                 $this->em->flush();
  364.             }
  365.             $this->etapsService->updateStatusTracker($project); // set status tracker
  366.             $this->etapsService->setCodeProject($project);
  367.             $this->updateNomenclatureDocProject($project->getToken()); // set nomenclature all doc
  368.             $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  369.             if($etap160){
  370.                 $etap160->setLat($project->getLongi());
  371.                 $etap160->setLongi($project->getLat());
  372.                 $this->em->persist($etap160);
  373.                 $this->em->flush();
  374.             }
  375.             return [
  376.                 'form' => $form->createView(),
  377.                 'project' => $project,
  378.                 'success' => true
  379.             ];
  380.         }
  381.         return [
  382.             'form' => $form->createView(),
  383.             'success' => false,
  384.         ];
  385.     }
  386.     public function EditProjectValidationAdmin($project)
  387.     {
  388.         $projectEdit = $this->em->getRepository(ProjectEdit::class)->findOneBy(['project'=>$project->getId(),'isDeleted'=>0]);
  389.         if(!$projectEdit){
  390.             return [
  391.                 'success' => false
  392.             ];
  393.         }
  394.         $project->setName($projectEdit->getName());
  395.         $project->setFamilleProject($projectEdit->getFamilleProject());
  396.         $project->setTypologieProject($projectEdit->getTypologieProject());
  397.         $project->setAdresse($projectEdit->getAdresse());
  398.         $project->setCodePostal($projectEdit->getCodePostal());
  399.         $project->setCity($projectEdit->getCity());
  400.         $project->setLat($projectEdit->getLat());
  401.         $project->setLongi($projectEdit->getLongi());
  402.         $project->setNumParcelle($projectEdit->getNumParcelle());
  403.         $project->setCapacite($projectEdit->getCapacite());
  404.         $project->setProductible($projectEdit->getProductible());
  405.         $project->setProductibleP90($projectEdit->getProductibleP90());
  406.         $project->setDateArretePc($projectEdit->getDateArretePc());
  407.         $project->setIsArretePcNonRecu($projectEdit->getIsArretePcNonRecu());
  408.         $project->setDateT0NonRecu($projectEdit->getDateT0NonRecu());
  409.         $project->setLoyerVise($projectEdit->getLoyerVise());
  410.         $project->setDateT0Annee($projectEdit->getDateT0Annee());
  411.         $project->setDateT0Semestere($projectEdit->getDateT0Semestere());
  412.         $project->setDateT0Date($projectEdit->getDateT0Date());
  413.         $project->setSoulteVise($projectEdit->getSoulteVise());
  414.         $project->setTypeBatimentProject($projectEdit->getTypeBatimentProject());
  415.         $project->setIsPromesseBailSignee($projectEdit->getIsPromesseBailSignee());
  416.         $project->setSpv($projectEdit->getSpv());
  417.         $project->setTranche($projectEdit->getTranche());
  418.         $project->setContrat($projectEdit->getContrat());
  419.         $project->setIsDemandeModif(false);
  420.         $project->setUserDemandeModif(null);
  421.         $errors = $this->validator->validate($project);
  422.         if (count($errors) > 0) {
  423.             foreach ($errors as $error) {
  424.                 $erreurs[] =  $error->getMessage();
  425.             }
  426.             return array(
  427.                 'erreurs' => $erreurs,
  428.                 'success' => false
  429.             );
  430.         }
  431.         $this->em->persist($project);
  432.         $this->em->flush();
  433.         $this->etapsService->updateStatusTracker($project); // set status tracker
  434.         $this->etapsService->setCodeProject($project);
  435.         $projectEdit->setIsDeleted(true);
  436.         $this->em->persist($projectEdit);
  437.         $this->em->flush();
  438.         $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  439.         if($etap160){
  440.             $etap160->setLat($project->getLongi());
  441.             $etap160->setLongi($project->getLat());
  442.             $this->em->persist($etap160);
  443.             $this->em->flush();
  444.         }
  445.         $this->updateNomenclatureDocProject($project->getToken()); // set nomenclature all doc
  446.         return [
  447.             'success' => true
  448.         ];
  449.     }
  450.     public function EditProjectRefuseAdmin($project)
  451.     {
  452.         $projectEdit = $this->em->getRepository(ProjectEdit::class)->findOneBy(['project'=>$project->getId(),'isDeleted'=>0]);
  453.         if(!$projectEdit){
  454.             return [
  455.                 'success' => false
  456.             ];
  457.         }
  458.         $project->setIsDemandeModif(false);
  459.         $project->setUserDemandeModif(null);
  460.         $this->em->persist($project);
  461.         $this->em->flush();
  462.         $projectEdit->setIsDeleted(true);
  463.         $this->em->persist($projectEdit);
  464.         $this->em->flush();
  465.         return [
  466.             'success' => true
  467.         ];
  468.     }
  469.     public function EditProjectUser($request,$project,$user)
  470.     {
  471.         $projectEdit = $this->em->getRepository(ProjectEdit::class)->findOneBy(['project'=>$project->getId(),'isDeleted'=>0]);
  472.         if(!$projectEdit){
  473.             $projectEdit = new ProjectEdit();
  474.         }
  475.         $form = $this->form->create(ProjectEditType::class, $projectEdit,['project'=>$project]);
  476.         $form->handleRequest($request);
  477.         if ($form->isSubmitted() && $form->isValid()) {
  478.             $fileEtudeProductibleToken = $request->get('fileEtudeProductible');
  479.             if($fileEtudeProductibleToken){
  480.                 $fileEtudeProductible = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileEtudeProductibleToken]);
  481.                 $projectEdit->setFileEtudeProductible($fileEtudeProductible);
  482.             }
  483.             $fileEtudeProductibleToken = $request->get('fileEtudeProductible');
  484.             if($fileEtudeProductibleToken){
  485.                 $fileEtudeProductible = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileEtudeProductibleToken]);
  486.                 $projectEdit->setFileEtudeProductible($fileEtudeProductible);
  487.             }
  488.             $fileDocCompementaire = $request->get('fileDocCompementaire');
  489.             if($fileDocCompementaire){
  490.                 $array = explode(',',$fileDocCompementaire);
  491.                 foreach ($array as $item){
  492.                     $fileDocCompementaireEntity = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$item]);
  493.                     $project->addFileDocCompementaire($fileDocCompementaireEntity);
  494.                 }
  495.             }
  496.             $projectEdit->setProject($project);
  497.             $projectEdit->setUserCreated($user);
  498.             $this->em->persist($projectEdit);
  499.             $this->em->flush();
  500.             $project->setIsDemandeModif(true);
  501.             $project->setUserDemandeModif($user);
  502.             $this->em->persist($project);
  503.             $this->em->flush();
  504.             $this->etapsService->setCodeProject($project);
  505.             $this->flashBag->add(
  506.                 'success',
  507.                 'L\'opération a été effectuée avec succès.'
  508.             );
  509.             return [
  510.                 'form' => $form->createView(),
  511.                 'project' => $project,
  512.                 'projectEdit' => $projectEdit,
  513.                 'success' => true
  514.             ];
  515.         }
  516.         return [
  517.             'form' => $form->createView(),
  518.             'project' => $project,
  519.             'projectEdit' => $projectEdit,
  520.             'success' => false,
  521.         ];
  522.     }
  523.     public function addAllTimeline($project){
  524.         $etap0 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_0]); $this->setEntityEtap($project,$etap0,Etaps::STATUS_EN_COURS,'App\Entity\Etap0');
  525.         $etap1 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_1]); $this->setEntityEtap($project,$etap1,Etaps::STATUS_EN_COURS,'App\Entity\Etap1');
  526.         $etap2 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_2]); $this->setEntityEtap($project,$etap2,Etaps::STATUS_EN_COURS,'App\Entity\Etap2');
  527.         $etap3 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_3]); $this->setEntityEtap($project,$etap3,Etaps::STATUS_EN_COURS,'App\Entity\Etap3');
  528.         $etap4 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_4]); $this->setEntityEtap($project,$etap4,Etaps::STATUS_EN_COURS,'App\Entity\Etap4');
  529.         $etap5 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_5]); $this->setEntityEtap($project,$etap5,Etaps::STATUS_EN_COURS,'App\Entity\Etap5');
  530.         $etap6 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_6]); $this->setEntityEtap($project,$etap6,Etaps::STATUS_EN_COURS,'App\Entity\Etap6');
  531.         $etap601 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_601]); $this->setEntityEtap($project,$etap601,Etaps::STATUS_EN_COURS,'App\Entity\Etap601');
  532.         $etap602 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_602]); $this->setEntityEtap($project,$etap602,Etaps::STATUS_EN_COURS,'App\Entity\Etap602');
  533.         $etap7 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_7]); $this->setEntityEtap($project,$etap7,Etaps::STATUS_EN_COURS,'App\Entity\Etap7');
  534.         $etap71 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_71]); $this->setEntityEtap($project,$etap71,Etaps::STATUS_EN_COURS,'App\Entity\Etap71');
  535.         $etap8 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_8]); $this->setEntityEtap($project,$etap8,Etaps::STATUS_EN_COURS,'App\Entity\Etap8');
  536.         $etap80 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_80]); $this->setEntityEtap($project,$etap80,Etaps::STATUS_EN_COURS,'App\Entity\Etap80');
  537.         $etap9 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_9]); $this->setEntityEtap($project,$etap9,Etaps::STATUS_EN_COURS,'App\Entity\Etap9');
  538.         $etap10 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_10]); $this->setEntityEtap($project,$etap10,Etaps::STATUS_EN_COURS,'App\Entity\Etap10');
  539.         $etap11 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_11]); $this->setEntityEtap($project,$etap11,Etaps::STATUS_EN_COURS,'App\Entity\Etap11');
  540.         $etap12 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_12]); $this->setEntityEtap($project,$etap12,Etaps::STATUS_EN_COURS,'App\Entity\Etap12');
  541.         $etap121 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_121]); $this->setEntityEtap($project,$etap121,Etaps::STATUS_EN_COURS,'App\Entity\Etap121');
  542.         $etap13 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_13]); $this->setEntityEtap($project,$etap13,Etaps::STATUS_EN_COURS,'App\Entity\Etap13');
  543.         $etap14 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_14]); $this->setEntityEtap($project,$etap14,Etaps::STATUS_EN_COURS,'App\Entity\Etap14');
  544.         $etap15 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_15]); $this->setEntityEtap($project,$etap15,Etaps::STATUS_EN_COURS,'App\Entity\Etap15');
  545.         $etap159 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_159]); $this->setEntityEtap($project,$etap159,Etaps::STATUS_EN_COURS,'App\Entity\Etap159');
  546.         $etap23 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_23]); $this->setEntityEtap($project,$etap23,Etaps::STATUS_EN_COURS,'App\Entity\Etap23');
  547.         $etap160 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_160]); $this->setEntityEtap($project,$etap160,Etaps::STATUS_EN_COURS,'App\Entity\Etap160');
  548.         $etap161 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_161]); $this->setEntityEtap($project,$etap161,Etaps::STATUS_EN_COURS,'App\Entity\Etap161');
  549.         $etap16 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_16]); $this->setEntityEtap($project,$etap16,Etaps::STATUS_EN_COURS,'App\Entity\Etap16');
  550.         $etap17 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_17]); $this->setEntityEtap($project,$etap17,Etaps::STATUS_EN_COURS,'App\Entity\Etap17');
  551.         $etap171 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_171]); $this->setEntityEtap($project,$etap171,Etaps::STATUS_EN_COURS,'App\Entity\Etap171');
  552.         $etap172 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_172]); $this->setEntityEtap($project,$etap172,Etaps::STATUS_EN_COURS,'App\Entity\Etap172');
  553.         $etap173 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_173]); $this->setEntityEtap($project,$etap173,Etaps::STATUS_EN_COURS,'App\Entity\Etap173');
  554.         $etap174 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_174]); $this->setEntityEtap($project,$etap174,Etaps::STATUS_EN_COURS,'App\Entity\Etap174');
  555.         $etap175 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_175]); $this->setEntityEtap($project,$etap175,Etaps::STATUS_EN_COURS,'App\Entity\Etap175');
  556.         $etap18 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_18]); $this->setEntityEtap($project,$etap18,Etaps::STATUS_EN_COURS,'App\Entity\Etap18');
  557.         $etap19 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_19]); $this->setEntityEtap($project,$etap19,Etaps::STATUS_EN_COURS,'App\Entity\Etap19');
  558.         $etap20 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_20]); $this->setEntityEtap($project,$etap20,Etaps::STATUS_EN_COURS,'App\Entity\Etap20');
  559.         $etap201 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_201]); $this->setEntityEtap($project,$etap201,Etaps::STATUS_EN_COURS,'App\Entity\Etap201');
  560.         $etap21 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_21]); $this->setEntityEtap($project,$etap21,Etaps::STATUS_EN_COURS,'App\Entity\Etap21');
  561.         $etap22 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_22]); $this->setEntityEtap($project,$etap22,Etaps::STATUS_EN_COURS,'App\Entity\Etap22');
  562.         $etap24 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_24]); $this->setEntityEtap($project,$etap24,Etaps::STATUS_EN_COURS,'App\Entity\Etap24');
  563.         $etap25 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_25]); $this->setEntityEtap($project,$etap25,Etaps::STATUS_EN_COURS,'App\Entity\Etap25');
  564.         $etap26 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_26]); $this->setEntityEtap($project,$etap26,Etaps::STATUS_EN_COURS,'App\Entity\Etap26');
  565.         $etap50 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_50]); $this->setEntityEtap($project,$etap50,Etaps::STATUS_EN_COURS,'App\Entity\Etap50');
  566.         // set champs
  567.         $etapEntity5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  568.         if($etapEntity5){
  569.             $etapEntity5->setLoyerConfirme($project->getLoyerVise());
  570.             $etapEntity5->setSoulteConfirme($project->getSoulteVise());
  571.             $this->em->persist($etapEntity5);
  572.             $this->em->flush();
  573.         }
  574.         $etapEntity9 = $this->em->getRepository(Etap9::class)->findOneBy(['project'=>$project->getId()]);
  575.         if($etapEntity9){
  576.             $etapEntity9->setTarifFit($project->getTarifVise());
  577.             $this->em->persist($etapEntity9);
  578.             $this->em->flush();
  579.         }
  580.     }
  581.     private function setEntityEtap($project,$etap,$status,$className){
  582.         $etapEntity = new $className();
  583.         $etapEntity->setProject($project);
  584.         $etapEntity->setEtap($etap);
  585.         $etapEntity->setStatus($status);
  586.         $this->em->persist($etapEntity);
  587.         $this->em->flush();
  588.     }
  589.     public function paginate($request,$user,$isArchive=false){
  590.         $length = $request->get('length');
  591.         $length = $length && ($length!=-1)?$length:0;
  592.         $start = $request->get('start');
  593.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  594.         $column =  $search = $request->get('columns');
  595.         $order = $request->get('order')[0];
  596.         $columnOrder = $order['column'];
  597.         $dirOrder = $order['dir'];
  598.         $columNameOrder = $column[$columnOrder]['data'];
  599.         $search = $request->get('search');
  600.         $status = $request->get('statusProject');
  601.         $statusAdministratifProject = $request->get('statusAdministratifProject');
  602.         $statusTrackerProject = $request->get('statusTrackerProject');
  603.         $typologieProject = $request->get('typologieProject');
  604.         $responsableProject = $request->get('responsableProject');
  605.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  606.         $responsableDevProject = $request->get('responsableDevProject');
  607.         $constructeurProject = $request->get('constructeurProject');
  608.         $constructeurEpcProject = $request->get('constructeurEpcProject');
  609.         $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  610.         $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  611.         $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  612.         $intervenantProject = $request->get('intervenantProject');
  613.         $stadeConstruction = $request->get('stadeConstruction');
  614.         $statusUrbanisme = $request->get('statusUrbanisme');
  615.         $statusFoncier1 = $request->get('statusFoncier1');
  616.         $statusFoncier2 = $request->get('statusFoncier2');
  617.         $statusFoncier3 = $request->get('statusFoncier3');
  618.         $entrepriseProject = $request->get('entrepriseProject');
  619.         $achatLocation = $request->get('achatLocation');
  620.         $spvsTab = [];
  621.         $roles = $user->getRoles();
  622.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  623.             $spvs = $user->getSpv();
  624.             foreach($spvs as $item){
  625.                 $spvsTab[] = $item->getId();
  626.             }
  627.         }
  628.         $filters = [
  629.             'query' => trim(@$search['value']),
  630.             'spvProject' =>  $request->get('spvProject'),
  631.             'spvsTab' =>  $spvsTab,
  632.             'statusAdministratifProject' =>  $statusAdministratifProject,
  633.             'statusTrackerProject' => $statusTrackerProject,
  634.             'responsableProject' => $responsableProject,
  635.             'responsableFoncierProject' => $responsableFoncierProject,
  636.             'responsableDevProject' => $responsableDevProject,
  637.             'constructeurProject' => $constructeurProject,
  638.             'typologieProject' => $typologieProject,
  639.             'stadeConstruction' => $stadeConstruction,
  640.             'statusUrbanisme' => $statusUrbanisme,
  641.             'statusFoncier1' => $statusFoncier1,
  642.             'statusFoncier2' => $statusFoncier2,
  643.             'statusFoncier3' => $statusFoncier3,
  644.             'intervenantProject' => $intervenantProject,
  645.             'constructeurEpcProject' => $constructeurEpcProject,
  646.             'constructeurInstallateurProject' => $constructeurInstallateurProject,
  647.             'constructeurCharpentierProject' => $constructeurCharpentierProject,
  648.             'entrepriseProject' => $entrepriseProject,
  649.             'constructeurNotaireProject' => $constructeurNotaireProject,
  650.             'achatLocation' => $achatLocation
  651.         ];
  652.         $projects= $this->em->getRepository(\App\Entity\Project::class)->search($isArchive,$status,$user,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  653.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->search($isArchive,$status,$user,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  654.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->search($isArchive,$status,$user,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  655.         $output = array(
  656.             'data' => array(),
  657.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  658.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  659.         );
  660.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  661.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  662.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  663.         foreach ($projects as $project) {
  664.             $action =
  665.                 $this->twig->render(
  666.                     'user/project/default/bouton.html.twig', array(
  667.                     'project' => $project
  668.                 ));
  669.             $statut =
  670.                 $this->twig->render(
  671.                     'user/project/default/status.html.twig', array(
  672.                     'status' => $project->getStatus()
  673.                 ));
  674.             $statut2 =
  675.                 $this->twig->render(
  676.                     'admin/project/default/status3.html.twig', array(
  677.                     'status' => $this->getStatusCustom($project)
  678.                 ));
  679.             $statut3 =
  680.                 $this->twig->render(
  681.                     'admin/project/default/status3.html.twig', array(
  682.                     'status' => $project->getStatusAdministratif()
  683.                 ));
  684.             $completude =
  685.                 $this->twig->render(
  686.                     'user/project/default/completude-global.html.twig', array(
  687.                     'completude' => $this->etapsService->completudeValideDocumentEtapProject($project),
  688.                     'cats' => $cats,
  689.                     'project' => $project
  690.                 ));
  691.             $statutTracker =
  692.                 $this->twig->render(
  693.                     'admin/project/default/statusTracker.html.twig', array(
  694.                     'status' => $project->getStatusTrackerActuel()
  695.                 ));
  696.             $commentaires = null;
  697.             if(count($project->getCommentProject2())>0) {
  698.                 $commentaires .= $project->getCommentProject2()[0]->getComment();
  699.             }
  700.             $inputCheckbox =
  701.                 $this->twig->render(
  702.                     'admin/project/default/checkbox.html.twig', array(
  703.                     'project' => $project,
  704.                     'user' => $user
  705.                 ));
  706.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  707.             $datePdb = '-';
  708.             if($etap5 && $etap5->getDateExpirationPromesseBail()){
  709.                 $datePdb = $etap5->getDateExpirationPromesseBail()->format('d/m/Y');
  710.             }
  711.             $output['data'][] = [
  712.                 'responsive_id' => '',
  713.                 'inputCheckbox' => $inputCheckbox,
  714.                 'id' => $project->getId(),
  715.                 'capacite' => $this->espaceNumber($project->getCapacite()),
  716.                 'name' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName(),'commentaires'=>$commentaires)),
  717.                 'codeProject' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCodeProject())),
  718.                 'spv' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getSpv() ? $project->getSpv()->getName() : '-')) ,
  719.                 'entreprise' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getEntreprise() ? $project->getEntreprise()->getName() : ($project->getDeveloppeur() && $project->getDeveloppeur()->getEntreprise() ? $project->getDeveloppeur()->getEntreprise()->getName() : '-'))) ,
  720.                 'status' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut)),
  721.                 'status2' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut2)),
  722.                 'createdAt' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCreatedAt()?$project->getCreatedAt()->format('d/m/Y'):'-')) ,
  723.                 'archiveAt' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getArchiveAt()?$project->getArchiveAt()->format('d/m/Y'):'-')) ,
  724.                 'commentArchive' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCommentArchive())) ,
  725.                 'statusAdministratif' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut3)) ,
  726.                 'statusTrackerActuel' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statutTracker)) ,
  727.                 'completude' => $completude,
  728.                 'datePdb' => $datePdb,
  729.                 'typologieProject' => $project->getTypologieProject()?$project->getTypologieProject()->getName():'',
  730.                 'achatLocation' => $project->getAchatLocation() == Project::ACHAT ? 'Achat' : 'Location',
  731.                 'action' => $action
  732.             ];
  733.         }
  734.         return $output;
  735.     }
  736.     public function espaceNumber($str){
  737.         $formattedNumber = $str;
  738.         if($str and is_numeric($str)){
  739.             if(strpos($str,'.') or strpos($str,',')){
  740.                 if(strpos($str,'.')){
  741.                     $formattedNumber = number_format($str, 3, '.', ' ');
  742.                 }else{
  743.                     $formattedNumber = number_format($str, 3, ',', ' ');
  744.                 }
  745.             }else{
  746.                 $formattedNumber = number_format($str, 0, '0', ' ');
  747.             }
  748.         }
  749.         return $formattedNumber;
  750.     }
  751.     public function paginateAdmin($request,$isArchive=false){
  752.         $length = $request->get('length');
  753.         $length = $length && ($length!=-1)?$length:0;
  754.         $start = $request->get('start');
  755.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  756.         $column =  $search = $request->get('columns');
  757.         $order = $request->get('order')[0];
  758.         $columnOrder = $order['column'];
  759.         $dirOrder = $order['dir'];
  760.         $columNameOrder = $column[$columnOrder]['data'];
  761.         $search = $request->get('search');
  762.         $status = $request->get('statusProject');
  763.         $status2 = $request->get('status2Project');
  764.         $statusAdministratifProject = $request->get('statusAdministratifProject');
  765.         $statusTrackerProject = $request->get('statusTrackerProject');
  766.         $typologieProject = $request->get('typologieProject');
  767.         $spvProject = $request->get('spvProject');
  768.         $devProject = $request->get('devProject');
  769.         $entrepriseProject = $request->get('entrepriseProject');
  770.         $responsableProject = $request->get('responsableProject');
  771.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  772.         $responsableDevProject = $request->get('responsableDevProject');
  773.         $constructeurEpcProject = $request->get('constructeurEpcProject');
  774.         $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  775.         $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  776.         $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  777.         $intervenantProject = $request->get('intervenantProject');
  778.         $stadeConstruction = $request->get('stadeConstruction');
  779.         $statusUrbanisme = $request->get('statusUrbanisme');
  780.         $statusFoncier1 = $request->get('statusFoncier1');
  781.         $statusFoncier2 = $request->get('statusFoncier2');
  782.         $statusFoncier3 = $request->get('statusFoncier3');
  783.         $achatLocation = $request->get('achatLocation');
  784.         $user = $this->security->getUser();
  785.         $roles = $user->getRoles();
  786.         $spvsTab = [];
  787.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  788.             $spvs = $user->getSpv();
  789.             foreach($spvs as $item){
  790.                 $spvsTab[] = $item->getId();
  791.             }
  792.         }
  793.         $filters = [
  794.             'query' => trim(@$search['value']),
  795.             'devProject' => $devProject,
  796.             'entrepriseProject' => $entrepriseProject,
  797.             'spvsTab' => $spvsTab,
  798.             'responsableProject' => $responsableProject,
  799.             'responsableFoncierProject' => $responsableFoncierProject,
  800.             'responsableDevProject' => $responsableDevProject,
  801.             'constructeurEpcProject' => $constructeurEpcProject,
  802.             'constructeurInstallateurProject' => $constructeurInstallateurProject,
  803.             'constructeurCharpentierProject' => $constructeurCharpentierProject,
  804.             'constructeurNotaireProject' => $constructeurNotaireProject,
  805.             'user' => $user,
  806.             'statusAdministratifProject' => $statusAdministratifProject,
  807.             'statusTrackerProject' => $statusTrackerProject,
  808.             'intervenantProject' => $intervenantProject,
  809.             'stadeConstruction' => $stadeConstruction,
  810.             'statusUrbanisme' => $statusUrbanisme,
  811.             'statusFoncier1' => $statusFoncier1,
  812.             'statusFoncier2' => $statusFoncier2,
  813.             'statusFoncier3' => $statusFoncier3,
  814.             'achatLocation' => $achatLocation,
  815.             'typologieProject' => $typologieProject
  816.         ];
  817.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  818.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  819.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  820.         $output = array(
  821.             'data' => array(),
  822.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  823.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  824.         );
  825.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  826.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  827.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  828.         foreach ($projects as $project) {
  829.             $inputCheckbox =
  830.                 $this->twig->render(
  831.                     'admin/project/default/checkbox.html.twig', array(
  832.                     'project' => $project,
  833.                     'user' => $user
  834.                 ));
  835.             $action =
  836.                 $this->twig->render(
  837.                     'admin/project/default/bouton.html.twig', array(
  838.                     'project' => $project,
  839.                     'user' => $user
  840.                 ));
  841.             $statut =
  842.                 $this->twig->render(
  843.                     'admin/project/default/status.html.twig', array(
  844.                     'status' => $project->getStatus()
  845.                 ));
  846.             $statut2 =
  847.                 $this->twig->render(
  848.                     'admin/project/default/status2.html.twig', array(
  849.                     'status' => $this->getStatusCustom($project)
  850.                 ));
  851.             $statut3 =
  852.                 $this->twig->render(
  853.                     'admin/project/default/status3.html.twig', array(
  854.                     'status' => $project->getStatusAdministratif()
  855.                 ));
  856.             $statutTracker =
  857.                 $this->twig->render(
  858.                     'admin/project/default/statusTracker.html.twig', array(
  859.                     'status' => $project->getStatusTrackerActuel()
  860.                 ));
  861.             $completude =
  862.                 $this->twig->render(
  863.                     'user/project/default/completude-global.html.twig', array(
  864.                     'completude' => $this->etapsService->completudeValideDocumentEtapProject($project),
  865.                     'cats' => $cats,
  866.                     'project' => $project
  867.                 ));
  868.             $commentaires = null;
  869.             if(count($project->getCommentProject2())>0) {
  870.                 foreach ($project->getCommentProject2() as $commentaire) {
  871.                     $commentaires .= $commentaire->getComment().'<br>';
  872.                 }
  873.             }
  874.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  875.             $datePdb = '-';
  876.             if($etap5 && $etap5->getDateExpirationPromesseBail()){
  877.                 $datePdb = $etap5->getDateExpirationPromesseBail()->format('d/m/Y');
  878.             }
  879.             $output['data'][] = [
  880.                 'responsive_id' => '',
  881.                 'inputCheckbox' => $inputCheckbox,
  882.                 'id' => $project->getId(),
  883.                 'capacite' => $this->espaceNumber($project->getCapacite()),
  884.                 'name' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName(),'commentaires'=>$commentaires)),
  885.                 'codeProject' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCodeProject())),
  886.                 'spv' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getSpv() ? $project->getSpv()->getName() : '-')) ,
  887.                 'developpeur' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getDeveloppeur() ? $project->getDeveloppeur()->getFirstname().' '.$project->getDeveloppeur()->getLastname() : '-')) ,
  888.                 'entreprise' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getEntreprise() ? $project->getEntreprise()->getName() : ($project->getDeveloppeur() && $project->getDeveloppeur()->getEntreprise() ? $project->getDeveloppeur()->getEntreprise()->getName() : '-'))) ,
  889.                 'status' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut)),
  890.                 'status2' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut2)),
  891.                 'statusTrackerActuel' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statutTracker)),
  892.                 'createdAt' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCreatedAt()?$project->getCreatedAt()->format('d/m/Y'):'-' )),
  893.                 'archiveAt' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getArchiveAt()?$project->getArchiveAt()->format('d/m/Y'):'-' )),
  894.                 'commentArchive' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCommentArchive())) ,
  895.                 'statusAdministratif' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut3)) ,
  896.                 'completude' => $completude,
  897.                 'datePdb' => $datePdb,
  898.                 'typologieProject' => $project->getTypologieProject()?$project->getTypologieProject()->getName():'',
  899.                 'achatLocation' => $project->getAchatLocation() == Project::ACHAT ? 'Achat' : 'Location',
  900.                 'action' => $action
  901.             ];
  902.         }
  903.         return $output;
  904.     }
  905.     public function paginateGestionaire($request,$isArchive=false){
  906.         $length = $request->get('length');
  907.         $length = $length && ($length!=-1)?$length:0;
  908.         $start = $request->get('start');
  909.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  910.         $column =  $search = $request->get('columns');
  911.         $order = $request->get('order')[0];
  912.         $columnOrder = $order['column'];
  913.         $dirOrder = $order['dir'];
  914.         $columNameOrder = $column[$columnOrder]['data'];
  915.         $search = $request->get('search');
  916.         $status = $request->get('statusProject');
  917.         $status2 = $request->get('status2Project');
  918.         $spvProject = $request->get('spvProject');
  919.         $devProject = $request->get('devProject');
  920.         $entrepriseProject = $request->get('entrepriseProject');
  921.         $statusAdministratifProject = $request->get('statusAdministratifProject');
  922.         $statusTrackerProject = $request->get('statusTrackerProject');
  923.         $typologieProject = $request->get('typologieProject');
  924.         $responsableProject = $request->get('responsableProject');
  925.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  926.         $responsableDevProject = $request->get('responsableDevProject');
  927.         $constructeurProject = $request->get('constructeurProject');
  928.         $constructeurEpcProject = $request->get('constructeurEpcProject');
  929.         $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  930.         $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  931.         $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  932.         $stadeConstruction = $request->get('stadeConstruction');
  933.         $statusFoncier1 = $request->get('statusFoncier1');
  934.         $statusFoncier2 = $request->get('statusFoncier2');
  935.         $statusFoncier3 = $request->get('statusFoncier3');
  936.         $statusUrbanisme = $request->get('statusUrbanisme');
  937.         $achatLocation = $request->get('achatLocation');
  938.         $filters = [
  939.             'query' => trim(@$search['value']),
  940.             'devProject' => $devProject,
  941.             'entrepriseProject' => $entrepriseProject,
  942.             'statusAdministratifProject' => $statusAdministratifProject,
  943.             'statusTrackerProject' => $statusTrackerProject,
  944.             'typologieProject' => $typologieProject,
  945.             'stadeConstruction' => $stadeConstruction,
  946.             'responsableProject' => $responsableProject,
  947.             'responsableFoncierProject' => $responsableFoncierProject,
  948.             'responsableDevProject' => $responsableDevProject,
  949.             'statusUrbanisme' => $statusUrbanisme,
  950.             'statusFoncier1' => $statusFoncier1,
  951.             'statusFoncier2' => $statusFoncier2,
  952.             'statusFoncier3' => $statusFoncier3,
  953.             'constructeurProject' => $constructeurProject,
  954.             'constructeurEpcProject' => $constructeurEpcProject,
  955.             'constructeurInstallateurProject' => $constructeurInstallateurProject,
  956.             'constructeurCharpentierProject' => $constructeurCharpentierProject,
  957.             'constructeurNotaireProject' => $constructeurNotaireProject,
  958.             'achatLocation' => $achatLocation,
  959.         ];
  960.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  961.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  962.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  963.         $output = array(
  964.             'data' => array(),
  965.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  966.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  967.         );
  968.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  969.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  970.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  971.         foreach ($projects as $project) {
  972.             $action =
  973.                 $this->twig->render(
  974.                     'gestionnaire-financier/project/default/bouton.html.twig', array(
  975.                     'project' => $project
  976.                 ));
  977.             $statut =
  978.                 $this->twig->render(
  979.                     'gestionnaire-financier/project/default/status.html.twig', array(
  980.                     'status' => $project->getStatus()
  981.                 ));
  982.             $statut2 =
  983.                 $this->twig->render(
  984.                     'admin/project/default/status2.html.twig', array(
  985.                     'status' => $this->getStatusCustom($project)
  986.                 ));
  987.             $statut3 =
  988.                 $this->twig->render(
  989.                     'admin/project/default/status3.html.twig', array(
  990.                     'status' => $project->getStatusAdministratif()
  991.                 ));
  992.             $completude =
  993.                 $this->twig->render(
  994.                     'user/project/default/completude-global.html.twig', array(
  995.                     'completude' => $this->etapsService->completudeValideDocumentEtapProject($project),
  996.                     'cats' => $cats,
  997.                     'project' => $project
  998.                 ));
  999.             $statutTracker =
  1000.                 $this->twig->render(
  1001.                     'admin/project/default/statusTracker.html.twig', array(
  1002.                     'status' => $project->getStatusTrackerActuel()
  1003.                 ));
  1004.                         $commentaires = null;
  1005.             if(count($project->getCommentProject2())>0) {
  1006.                 foreach ($project->getCommentProject2() as $commentaire) {
  1007.                     $commentaires .= $project->getCommentProject2()[0]->getComment();
  1008.                 }
  1009.             }
  1010.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  1011.             $datePdb = '-';
  1012.             if($etap5 && $etap5->getDateExpirationPromesseBail()){
  1013.                 $datePdb = $etap5->getDateExpirationPromesseBail()->format('d/m/Y');
  1014.             }
  1015.             $output['data'][] = [
  1016.                 'responsive_id' => '',
  1017.                 'id' => $project->getId(),
  1018.                 'capacite' => $this->espaceNumber($project->getCapacite()),
  1019.                 'name' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName(),'commentaires'=>$commentaires)),
  1020.                 'codeProject' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCodeProject())),
  1021.                 'spv' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getSpv() ? $project->getSpv()->getName() : '-')) ,
  1022.                 'developpeur' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getDeveloppeur() ? $project->getDeveloppeur()->getFirstname().' '.$project->getDeveloppeur()->getLastname() : '-' )),
  1023.                 'entreprise' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getEntreprise() ? $project->getEntreprise()->getName() : ($project->getDeveloppeur() && $project->getDeveloppeur()->getEntreprise() ? $project->getDeveloppeur()->getEntreprise()->getName() : '-'))) ,
  1024.                 'status' =>$this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=> $statut)),
  1025.                 'status2' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut2)),
  1026.                 'createdAt' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCreatedAt()?$project->getCreatedAt()->format('d/m/Y'):'-')) ,
  1027.                 'archiveAt' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getArchiveAt()?$project->getArchiveAt()->format('d/m/Y'):'-')) ,
  1028.                 'commentArchive' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCommentArchive())) ,
  1029.                 'statusAdministratif' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut3)) ,
  1030.                  'statusTrackerActuel' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statutTracker)) ,
  1031.                 'completude' => $completude,
  1032.                 'datePdb' => $datePdb,
  1033.                 'typologieProject' => $project->getTypologieProject()?$project->getTypologieProject()->getName():'',
  1034.                 'achatLocation' => $project->getAchatLocation() == Project::ACHAT ? 'Achat' : 'Location',
  1035.                 'action' => $action
  1036.             ];
  1037.         }
  1038.         return $output;
  1039.     }
  1040.     public function getStatusCustom($project){
  1041.         if($this->em->getRepository(Project::class)->searchByCustomStatus($project,Project::STATUS_CUSTOM_EN_ATTENT)){
  1042.             return Project::STATUS_CUSTOM_EN_ATTENT;
  1043.         }elseif($this->em->getRepository(Project::class)->searchByCustomStatus($project,Project::STATUS_CUSTOM_EXPLOITATION)){
  1044.             return Project::STATUS_CUSTOM_EXPLOITATION;
  1045.         }elseif($this->em->getRepository(Project::class)->searchByCustomStatus($project,Project::STATUS_CUSTOM_CONSTRUCTION)){
  1046.             return Project::STATUS_CUSTOM_CONSTRUCTION;
  1047.         }elseif($this->em->getRepository(Project::class)->searchByCustomStatus($project,Project::STATUS_CUSTOM_DEVELOPPEMENT)){
  1048.             return Project::STATUS_CUSTOM_DEVELOPPEMENT;
  1049.         }else{
  1050.             return 0;
  1051.         }
  1052.     }
  1053.     public function getStatusCustomString($project){
  1054.         $status = $this->getStatusCustom($project);
  1055.         if($status == Project::STATUS_CUSTOM_EN_ATTENT){
  1056.             return 'En attente de validation';
  1057.         }elseif($status == Project::STATUS_CUSTOM_EXPLOITATION){
  1058.             return 'Exploitation';
  1059.         }elseif($status == Project::STATUS_CUSTOM_CONSTRUCTION){
  1060.             return 'Construction';
  1061.         }elseif($status == Project::STATUS_CUSTOM_DEVELOPPEMENT){
  1062.             return 'Développement';
  1063.         }else{
  1064.             return '';
  1065.         }
  1066.     }
  1067.     public function getStatusAdministratifString($project){
  1068.         $status = $project->getStatusAdministratif();
  1069.         if($status == Project::STATUS_CUSTOM_EN_ATTENT){
  1070.             return 'En attente de validation';
  1071.         }elseif($status == Project::STATUS_CUSTOM_EXPLOITATION){
  1072.             return 'Exploitation';
  1073.         }elseif($status == Project::STATUS_CUSTOM_CONSTRUCTION){
  1074.             return 'Construction';
  1075.         }elseif($status == Project::STATUS_CUSTOM_DEVELOPPEMENT){
  1076.             return 'Développement';
  1077.         }else{
  1078.             return '';
  1079.         }
  1080.     }
  1081.     public function paginateHistory($request,$project){
  1082.         $length = $request->get('length');
  1083.         $length = $length && ($length!=-1)?$length:0;
  1084.         $start = $request->get('start');
  1085.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1086.         $column =  $search = $request->get('columns');
  1087.         $order = $request->get('order')[0];
  1088.         $columnOrder = $order['column'];
  1089.         $dirOrder = $order['dir'];
  1090.         $columNameOrder = $column[$columnOrder]['data'];
  1091.         $search = $request->get('search');
  1092.         $role = $request->get('role');
  1093.         $date = $request->get('projectDate');
  1094.         $filters = [
  1095.             'query' => trim(@$search['value'])
  1096.         ];
  1097.         $historys= $this->em->getRepository(\App\Entity\HistoryProject::class)->search($role,$date,$project,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  1098.         $recordsFiltered= $this->em->getRepository(\App\Entity\HistoryProject::class)->search($role,$date,$project,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1099.         $recordsTotal= $this->em->getRepository(\App\Entity\HistoryProject::class)->search($role,$date,$project,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1100.         $output = array(
  1101.             'data' => array(),
  1102.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1103.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1104.         );
  1105.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1106.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  1107.         foreach ($historys as $history) {
  1108.             $output['data'][] = [
  1109.                 'responsive_id' => '',
  1110.                 'id' => $history->getId(),
  1111.                 'action' => $history->getAction(),
  1112.                 'user' => $history->getUser()?$history->getUser()->getFirstname().' '.$history->getUser()->getLastname() .' ('.$history->getUser()->getRoleString().')' : '-',
  1113.                 'createdAt' => $history->getCreatedAt() ? $intl->format($history->getCreatedAt()).' '.$history->getCreatedAt()->format('H:i:s') :' - '
  1114.             ];
  1115.         }
  1116.         return $output;
  1117.     }
  1118.     public function kpiSvpProjectAdmin($request){
  1119.        $spvTabKpi = $request->get('spvTabKpi');
  1120.        $projectsStat =  $this->em->getRepository(Project::class)->kpiProjectBySpv($spvTabKpi);
  1121.        $projectsStatTotal =  $this->em->getRepository(Project::class)->kpiProjectBySpvTotal($spvTabKpi);
  1122.        $array =[];
  1123.        $arrayTotal = [];
  1124.        $i = 0;
  1125.         $nbrProjectTotal = 0;
  1126.         $sommeCapaciteTotal = 0;
  1127.         $nbrProjectDeveloppementTotal = 0;
  1128.         $sommeCapaciteDeveloppementTotal = 0;
  1129.         $nbrProjectConstructionTotal = 0;
  1130.         $sommeCapaciteConstructionTotal = 0;
  1131.         $nbrProjectExploitationTotal = 0;
  1132.         $sommeCapaciteExploitationTotal = 0;
  1133.        foreach ($projectsStat as $projectStat){
  1134.            $array[$i]['name'] = $projectStat['name'];
  1135.            $array[$i]['nbrProject'] = (int)$projectStat['nbrProject'];
  1136.            $array[$i]['moyenTarif'] = (float)$projectStat['moyenTarif'];
  1137.            $array[$i]['sommeCapacite'] = (float)$projectStat['sommeCapacite'];
  1138.            $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStat['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1139.            if($projectDeveloppement){
  1140.                $array[$i]['nbrProjectDeveloppement'] = (int)$projectDeveloppement['nbrProjectBySpv'];
  1141.                $array[$i]['sommeCapaciteDeveloppement'] = (float)$projectDeveloppement['sommeCapaciteBySpv'];
  1142.                $array[$i]['valeurDeveloppement'] = ((float)$projectDeveloppement['nbrProjectBySpv'] / (float) $projectStat['nbrProject'] )* 100  ;
  1143.            }
  1144.            $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStat['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1145.            if($projectConstruction){
  1146.                $array[$i]['nbrProjectConstruction'] = (int)$projectConstruction['nbrProjectBySpv'];
  1147.                $array[$i]['sommeCapaciteConstruction'] = (float)$projectConstruction['sommeCapaciteBySpv'];
  1148.                $array[$i]['valeurConstruction'] = ((float)$projectConstruction['nbrProjectBySpv'] / (float) $projectStat['nbrProject'] )* 100  ;
  1149.            }
  1150.            $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStat['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1151.            if($projectExploitation){
  1152.                $array[$i]['nbrProjectExploitation'] = (int)$projectExploitation['nbrProjectBySpv'];
  1153.                $array[$i]['sommeCapaciteExploitation'] = (float)$projectExploitation['sommeCapaciteBySpv'];
  1154.                $array[$i]['valeurExploitation'] = ((float)$projectExploitation['nbrProjectBySpv'] / (float) $projectStat['nbrProject'] )* 100  ;
  1155.            }
  1156.            $i++;
  1157.        }
  1158.         foreach ($projectsStatTotal as $projectStatTotal){
  1159.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1160.             if($projectDeveloppement){
  1161.                 $nbrProjectDeveloppementTotal +=  (int)$projectDeveloppement['nbrProjectBySpv'];
  1162.                 $sommeCapaciteDeveloppementTotal +=  (float)$projectDeveloppement['sommeCapaciteBySpv'];
  1163.             }
  1164.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1165.             if($projectConstruction){
  1166.                 $nbrProjectConstructionTotal +=  (int)$projectConstruction['nbrProjectBySpv'];
  1167.                 $sommeCapaciteConstructionTotal +=  (float)$projectConstruction['sommeCapaciteBySpv'];
  1168.             }
  1169.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1170.             if($projectExploitation){
  1171.                 $nbrProjectExploitationTotal +=  (int)$projectExploitation['nbrProjectBySpv'];
  1172.                 $sommeCapaciteExploitationTotal +=  (float)$projectExploitation['sommeCapaciteBySpv'];
  1173.             }
  1174.             $nbrProjectTotal +=  (int)$projectStatTotal['nbrProject'];
  1175.             $sommeCapaciteTotal +=  (float)$projectStatTotal['sommeCapacite'];
  1176.         }
  1177.        $arrayTotal['nbrProjectTotal'] = $nbrProjectTotal;
  1178.        $arrayTotal['sommeCapaciteTotal'] = $sommeCapaciteTotal;
  1179.        $arrayTotal['nbrProjectDeveloppementTotal'] = $nbrProjectDeveloppementTotal;
  1180.        $arrayTotal['sommeCapaciteDeveloppementTotal'] = $sommeCapaciteDeveloppementTotal;
  1181.        $arrayTotal['valeurDeveloppementTotal'] = $nbrProjectTotal ? ($nbrProjectDeveloppementTotal / $nbrProjectTotal) *100 : 0;
  1182.        $arrayTotal['nbrProjectConstructionTotal'] = $nbrProjectConstructionTotal;
  1183.        $arrayTotal['sommeCapaciteConstructionTotal'] = $sommeCapaciteConstructionTotal;
  1184.        $arrayTotal['valeurConstructionTotal'] = $nbrProjectTotal ? ($nbrProjectConstructionTotal / $nbrProjectTotal) *100 : 0;
  1185.        $arrayTotal['nbrProjectExploitationTotal'] = $nbrProjectExploitationTotal;
  1186.        $arrayTotal['sommeCapaciteExploitationTotal'] = $sommeCapaciteExploitationTotal;
  1187.        $arrayTotal['valeurExploitationTotal'] = $nbrProjectTotal ? ($nbrProjectExploitationTotal / $nbrProjectTotal) *100 : 0;
  1188.         $spvs = $this->em->getRepository(Spv::class)->getSpvEnabled();
  1189.        return ['arrays'=>$array,'arrayTotal'=>$arrayTotal,'spvs'=>$spvs,'name'=>'Données par SPV','name2'=>'SPV'];
  1190.     }
  1191.     public function kpiDevProjectAdmin($request){
  1192.         $devTabKpi = $request->get('devTabKpi');
  1193.         $projectsStat =  $this->em->getRepository(Project::class)->kpiProjectByDev($devTabKpi);
  1194.         $projectsStatTotal =  $this->em->getRepository(Project::class)->kpiProjectByDevTotal();
  1195.         $array =[];
  1196.         $arrayTotal = [];
  1197.         $i = 0;
  1198.         $nbrProjectTotal = 0;
  1199.         $sommeCapaciteTotal = 0;
  1200.         $nbrProjectDeveloppementTotal = 0;
  1201.         $sommeCapaciteDeveloppementTotal = 0;
  1202.         $nbrProjectConstructionTotal = 0;
  1203.         $sommeCapaciteConstructionTotal = 0;
  1204.         $nbrProjectExploitationTotal = 0;
  1205.         $sommeCapaciteExploitationTotal = 0;
  1206.         foreach ($projectsStat as $projectStat){
  1207.             $array[$i]['name'] = $projectStat['name'];
  1208.             $array[$i]['nbrProject'] = (int)$projectStat['nbrProject'];
  1209.             $array[$i]['moyenTarif'] = (float)$projectStat['moyenTarif'];
  1210.             $array[$i]['sommeCapacite'] = (float)$projectStat['sommeCapacite'];
  1211.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStat['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1212.             if($projectDeveloppement){
  1213.                 $array[$i]['nbrProjectDeveloppement'] = (int)$projectDeveloppement['nbrProjectByDev'];
  1214.                 $array[$i]['sommeCapaciteDeveloppement'] = (float)$projectDeveloppement['sommeCapaciteByDev'];
  1215.                 $array[$i]['valeurDeveloppement'] = ((float)$projectDeveloppement['nbrProjectByDev'] / (float) $projectStat['nbrProject'] )* 100  ;
  1216.             }
  1217.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStat['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1218.             if($projectConstruction){
  1219.                 $array[$i]['nbrProjectConstruction'] = (int)$projectConstruction['nbrProjectByDev'];
  1220.                 $array[$i]['sommeCapaciteConstruction'] = (float)$projectConstruction['sommeCapaciteByDev'];
  1221.                 $array[$i]['valeurConstruction'] = ((float)$projectConstruction['nbrProjectByDev'] / (float) $projectStat['nbrProject'] )* 100  ;
  1222.             }
  1223.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStat['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1224.             if($projectExploitation){
  1225.                 $array[$i]['nbrProjectExploitation'] = (int)$projectExploitation['nbrProjectByDev'];
  1226.                 $array[$i]['sommeCapaciteExploitation'] = (float)$projectExploitation['sommeCapaciteByDev'];
  1227.                 $array[$i]['valeurExploitation'] = ((float)$projectExploitation['nbrProjectByDev'] / (float) $projectStat['nbrProject'] )* 100  ;
  1228.             }
  1229.             $i++;
  1230.         }
  1231.         foreach ($projectsStatTotal as $projectStatTotal){
  1232.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1233.             if($projectDeveloppement){
  1234.                 $nbrProjectDeveloppementTotal +=  (int)$projectDeveloppement['nbrProjectByDev'];
  1235.                 $sommeCapaciteDeveloppementTotal +=  (float)$projectDeveloppement['sommeCapaciteByDev'];
  1236.             }
  1237.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1238.             if($projectConstruction){
  1239.                 $nbrProjectConstructionTotal +=  (int)$projectConstruction['nbrProjectByDev'];
  1240.                 $sommeCapaciteConstructionTotal +=  (float)$projectConstruction['sommeCapaciteByDev'];
  1241.             }
  1242.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1243.             if($projectExploitation){
  1244.                 $nbrProjectExploitationTotal +=  (int)$projectExploitation['nbrProjectByDev'];
  1245.                 $sommeCapaciteExploitationTotal +=  (float)$projectExploitation['sommeCapaciteByDev'];
  1246.             }
  1247.             $nbrProjectTotal +=  (int)$projectStatTotal['nbrProject'];
  1248.             $sommeCapaciteTotal +=  (float)$projectStatTotal['sommeCapacite'];
  1249.         }
  1250.         $arrayTotal['nbrProjectTotal'] = $nbrProjectTotal;
  1251.         $arrayTotal['sommeCapaciteTotal'] = $sommeCapaciteTotal;
  1252.         $arrayTotal['nbrProjectDeveloppementTotal'] = $nbrProjectDeveloppementTotal;
  1253.         $arrayTotal['sommeCapaciteDeveloppementTotal'] = $sommeCapaciteDeveloppementTotal;
  1254.         $arrayTotal['valeurDeveloppementTotal'] = $nbrProjectTotal ? ($nbrProjectDeveloppementTotal / $nbrProjectTotal) *100 : 0;
  1255.         $arrayTotal['nbrProjectConstructionTotal'] = $nbrProjectConstructionTotal;
  1256.         $arrayTotal['sommeCapaciteConstructionTotal'] = $sommeCapaciteConstructionTotal;
  1257.         $arrayTotal['valeurConstructionTotal'] = $nbrProjectTotal ? ($nbrProjectConstructionTotal / $nbrProjectTotal) *100 : 0;
  1258.         $arrayTotal['nbrProjectExploitationTotal'] = $nbrProjectExploitationTotal;
  1259.         $arrayTotal['sommeCapaciteExploitationTotal'] = $sommeCapaciteExploitationTotal;
  1260.         $arrayTotal['valeurExploitationTotal'] = $nbrProjectTotal ? ($nbrProjectExploitationTotal / $nbrProjectTotal) *100 : 0;
  1261.         $devs = $this->em->getRepository(User::class)->getUserByRole('ROLE_DEV');
  1262.         return ['arrays'=>$array,'arrayTotal'=>$arrayTotal,'devs'=>$devs,'name'=>'Données par développeur','name2'=>'Développeur'];
  1263.     }
  1264.     public function kpiTypologieProjectProjectAdmin($request){
  1265.         $typologieProjectTabKpi = $request->get('typologieProjectTabKpi');
  1266.         $projectsStat =  $this->em->getRepository(Project::class)->kpiProjectByTypologieProject($typologieProjectTabKpi);
  1267.         $projectsStatTotal =  $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectTotal();
  1268.         $array =[];
  1269.         $arrayTotal = [];
  1270.         $i = 0;
  1271.         $nbrProjectTotal = 0;
  1272.         $sommeCapaciteTotal = 0;
  1273.         $nbrProjectDeveloppementTotal = 0;
  1274.         $sommeCapaciteDeveloppementTotal = 0;
  1275.         $nbrProjectConstructionTotal = 0;
  1276.         $sommeCapaciteConstructionTotal = 0;
  1277.         $nbrProjectExploitationTotal = 0;
  1278.         $sommeCapaciteExploitationTotal = 0;
  1279.         foreach ($projectsStat as $projectStat){
  1280.             $array[$i]['name'] = $projectStat['name'];
  1281.             $array[$i]['nbrProject'] = (int)$projectStat['nbrProject'];
  1282.             $array[$i]['moyenTarif'] = (float)$projectStat['moyenTarif'];
  1283.             $array[$i]['sommeCapacite'] = (float)$projectStat['sommeCapacite'];
  1284.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1285.             if($projectDeveloppement){
  1286.                 $array[$i]['nbrProjectDeveloppement'] = (int)$projectDeveloppement['nbrProjectByTypologieProject'];
  1287.                 $array[$i]['sommeCapaciteDeveloppement'] = (float)$projectDeveloppement['sommeCapaciteByTypologieProject'];
  1288.                 $array[$i]['valeurDeveloppement'] = ((float)$projectDeveloppement['nbrProjectByTypologieProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1289.             }
  1290.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1291.             if($projectConstruction){
  1292.                 $array[$i]['nbrProjectConstruction'] = (int)$projectConstruction['nbrProjectByTypologieProject'];
  1293.                 $array[$i]['sommeCapaciteConstruction'] = (float)$projectConstruction['sommeCapaciteByTypologieProject'];
  1294.                 $array[$i]['valeurConstruction'] = ((float)$projectConstruction['nbrProjectByTypologieProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1295.             }
  1296.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1297.             if($projectExploitation){
  1298.                 $array[$i]['nbrProjectExploitation'] = (int)$projectExploitation['nbrProjectByTypologieProject'];
  1299.                 $array[$i]['sommeCapaciteExploitation'] = (float)$projectExploitation['sommeCapaciteByTypologieProject'];
  1300.                 $array[$i]['valeurExploitation'] = ((float)$projectExploitation['nbrProjectByTypologieProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1301.             }
  1302.             $i++;
  1303.         }
  1304.         foreach ($projectsStatTotal as $projectStatTotal){
  1305.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1306.             if($projectDeveloppement){
  1307.                 $nbrProjectDeveloppementTotal +=  (int)$projectDeveloppement['nbrProjectByTypologieProject'];
  1308.                 $sommeCapaciteDeveloppementTotal +=  (float)$projectDeveloppement['sommeCapaciteByTypologieProject'];
  1309.             }
  1310.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1311.             if($projectConstruction){
  1312.                 $nbrProjectConstructionTotal +=  (int)$projectConstruction['nbrProjectByTypologieProject'];
  1313.                 $sommeCapaciteConstructionTotal +=  (float)$projectConstruction['sommeCapaciteByTypologieProject'];
  1314.             }
  1315.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1316.             if($projectExploitation){
  1317.                 $nbrProjectExploitationTotal +=  (int)$projectExploitation['nbrProjectByTypologieProject'];
  1318.                 $sommeCapaciteExploitationTotal +=  (float)$projectExploitation['sommeCapaciteByTypologieProject'];
  1319.             }
  1320.             $nbrProjectTotal +=  (int)$projectStatTotal['nbrProject'];
  1321.             $sommeCapaciteTotal +=  (float)$projectStatTotal['sommeCapacite'];
  1322.         }
  1323.         $arrayTotal['nbrProjectTotal'] = $nbrProjectTotal;
  1324.         $arrayTotal['sommeCapaciteTotal'] = $sommeCapaciteTotal;
  1325.         $arrayTotal['nbrProjectDeveloppementTotal'] = $nbrProjectDeveloppementTotal;
  1326.         $arrayTotal['sommeCapaciteDeveloppementTotal'] = $sommeCapaciteDeveloppementTotal;
  1327.         $arrayTotal['valeurDeveloppementTotal'] = $nbrProjectTotal ? ($nbrProjectDeveloppementTotal / $nbrProjectTotal) *100 : 0;
  1328.         $arrayTotal['nbrProjectConstructionTotal'] = $nbrProjectConstructionTotal;
  1329.         $arrayTotal['sommeCapaciteConstructionTotal'] = $sommeCapaciteConstructionTotal;
  1330.         $arrayTotal['valeurConstructionTotal'] = $nbrProjectTotal ? ($nbrProjectConstructionTotal / $nbrProjectTotal) *100 : 0;
  1331.         $arrayTotal['nbrProjectExploitationTotal'] = $nbrProjectExploitationTotal;
  1332.         $arrayTotal['sommeCapaciteExploitationTotal'] = $sommeCapaciteExploitationTotal;
  1333.         $arrayTotal['valeurExploitationTotal'] = $nbrProjectTotal ? ($nbrProjectExploitationTotal / $nbrProjectTotal) *100 : 0;
  1334.         $typologieProjects = $this->em->getRepository(TypologieProject::class)->findAll();
  1335.         return ['arrays'=>$array,'arrayTotal'=>$arrayTotal,'typologieProjects'=>$typologieProjects,'name'=>'Données par type de projet','name2'=>'Type'];
  1336.     }
  1337.     public function kpiFamilleProjectProjectAdmin($request){
  1338.         $familleProjectTabKpi = $request->get('familleProjectTabKpi');
  1339.         $projectsStat =  $this->em->getRepository(Project::class)->kpiProjectByFamilleProject($familleProjectTabKpi);
  1340.         $projectsStatTotal =  $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectTotal();
  1341.         $array =[];
  1342.         $arrayTotal = [];
  1343.         $i = 0;
  1344.         $nbrProjectTotal = 0;
  1345.         $sommeCapaciteTotal = 0;
  1346.         $nbrProjectDeveloppementTotal = 0;
  1347.         $sommeCapaciteDeveloppementTotal = 0;
  1348.         $nbrProjectConstructionTotal = 0;
  1349.         $sommeCapaciteConstructionTotal = 0;
  1350.         $nbrProjectExploitationTotal = 0;
  1351.         $sommeCapaciteExploitationTotal = 0;
  1352.         foreach ($projectsStat as $projectStat){
  1353.             $array[$i]['name'] = $projectStat['name'];
  1354.             $array[$i]['nbrProject'] = (int)$projectStat['nbrProject'];
  1355.             $array[$i]['moyenTarif'] = (float)$projectStat['moyenTarif'];
  1356.             $array[$i]['sommeCapacite'] = (float)$projectStat['sommeCapacite'];
  1357.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1358.             if($projectDeveloppement){
  1359.                 $array[$i]['nbrProjectDeveloppement'] = (int)$projectDeveloppement['nbrProjectByFamilleProject'];
  1360.                 $array[$i]['sommeCapaciteDeveloppement'] = (float)$projectDeveloppement['sommeCapaciteByFamilleProject'];
  1361.                 $array[$i]['valeurDeveloppement'] = ((float)$projectDeveloppement['nbrProjectByFamilleProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1362.             }
  1363.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1364.             if($projectConstruction){
  1365.                 $array[$i]['nbrProjectConstruction'] = (int)$projectConstruction['nbrProjectByFamilleProject'];
  1366.                 $array[$i]['sommeCapaciteConstruction'] = (float)$projectConstruction['sommeCapaciteByFamilleProject'];
  1367.                 $array[$i]['valeurConstruction'] = ((float)$projectConstruction['nbrProjectByFamilleProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1368.             }
  1369.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1370.             if($projectExploitation){
  1371.                 $array[$i]['nbrProjectExploitation'] = (int)$projectExploitation['nbrProjectByFamilleProject'];
  1372.                 $array[$i]['sommeCapaciteExploitation'] = (float)$projectExploitation['sommeCapaciteByFamilleProject'];
  1373.                 $array[$i]['valeurExploitation'] = ((float)$projectExploitation['nbrProjectByFamilleProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1374.             }
  1375.             $i++;
  1376.         }
  1377.         foreach ($projectsStatTotal as $projectStatTotal){
  1378.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1379.             if($projectDeveloppement){
  1380.                 $nbrProjectDeveloppementTotal +=  (int)$projectDeveloppement['nbrProjectByFamilleProject'];
  1381.                 $sommeCapaciteDeveloppementTotal +=  (float)$projectDeveloppement['sommeCapaciteByFamilleProject'];
  1382.             }
  1383.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1384.             if($projectConstruction){
  1385.                 $nbrProjectConstructionTotal +=  (int)$projectConstruction['nbrProjectByFamilleProject'];
  1386.                 $sommeCapaciteConstructionTotal +=  (float)$projectConstruction['sommeCapaciteByFamilleProject'];
  1387.             }
  1388.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1389.             if($projectExploitation){
  1390.                 $nbrProjectExploitationTotal +=  (int)$projectExploitation['nbrProjectByFamilleProject'];
  1391.                 $sommeCapaciteExploitationTotal +=  (float)$projectExploitation['sommeCapaciteByFamilleProject'];
  1392.             }
  1393.             $nbrProjectTotal +=  (int)$projectStatTotal['nbrProject'];
  1394.             $sommeCapaciteTotal +=  (float)$projectStatTotal['sommeCapacite'];
  1395.             $i++;
  1396.         }
  1397.         $arrayTotal['nbrProjectTotal'] = $nbrProjectTotal;
  1398.         $arrayTotal['sommeCapaciteTotal'] = $sommeCapaciteTotal;
  1399.         $arrayTotal['nbrProjectDeveloppementTotal'] = $nbrProjectDeveloppementTotal;
  1400.         $arrayTotal['sommeCapaciteDeveloppementTotal'] = $sommeCapaciteDeveloppementTotal;
  1401.         $arrayTotal['valeurDeveloppementTotal'] = $nbrProjectTotal ? ($nbrProjectDeveloppementTotal / $nbrProjectTotal) *100 : 0;
  1402.         $arrayTotal['nbrProjectConstructionTotal'] = $nbrProjectConstructionTotal;
  1403.         $arrayTotal['sommeCapaciteConstructionTotal'] = $sommeCapaciteConstructionTotal;
  1404.         $arrayTotal['valeurConstructionTotal'] = $nbrProjectTotal ? ($nbrProjectConstructionTotal / $nbrProjectTotal) *100 : 0;
  1405.         $arrayTotal['nbrProjectExploitationTotal'] = $nbrProjectExploitationTotal;
  1406.         $arrayTotal['sommeCapaciteExploitationTotal'] = $sommeCapaciteExploitationTotal;
  1407.         $arrayTotal['valeurExploitationTotal'] = $nbrProjectTotal ? ($nbrProjectExploitationTotal / $nbrProjectTotal) *100 : 0;
  1408.         $familleProjects = $this->em->getRepository(FamilleProject::class)->findAll();
  1409.         return ['arrays'=>$array,'arrayTotal'=>$arrayTotal,'familleProjects'=>$familleProjects,'name'=>'Données par famille de projet','name2'=>'Famille du projet'];
  1410.     }
  1411.     public function kpiStatusProjectAdmin($request){
  1412.         $array =[];
  1413.         $totalNbr = 0;
  1414.         $totalCapacite = 0;
  1415.         $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByStatus(Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1416.         if($projectDeveloppement){
  1417.             $array['nbrProjectDeveloppement'] = (int)$projectDeveloppement['nbrProjectByStatus'];
  1418.             $array['sommeCapaciteDeveloppement'] = (float)$projectDeveloppement['sommeCapaciteByStatus'];
  1419.             $totalNbr += (int)$projectDeveloppement['nbrProjectByStatus'];
  1420.             $totalCapacite += (float)$projectDeveloppement['sommeCapaciteByStatus'];
  1421.         }
  1422.         $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByStatus(Project::STATUS_CUSTOM_CONSTRUCTION);
  1423.         if($projectConstruction){
  1424.             $array['nbrProjectConstruction'] = (int)$projectConstruction['nbrProjectByStatus'];
  1425.             $array['sommeCapaciteConstruction'] = (float)$projectConstruction['sommeCapaciteByStatus'];
  1426.             $totalNbr += (int)$projectConstruction['nbrProjectByStatus'];
  1427.             $totalCapacite += (float)$projectConstruction['sommeCapaciteByStatus'];
  1428.         }
  1429.         $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByStatus(Project::STATUS_CUSTOM_EXPLOITATION);
  1430.         if($projectExploitation){
  1431.             $array['nbrProjectExploitation'] = (int)$projectExploitation['nbrProjectByStatus'];
  1432.             $array['sommeCapaciteExploitation'] = (float)$projectExploitation['sommeCapaciteByStatus'];
  1433.             $totalNbr += (int)$projectExploitation['nbrProjectByStatus'];
  1434.             $totalCapacite += (float)$projectExploitation['sommeCapaciteByStatus'];
  1435.         }
  1436.         $array['totalNbr'] = $totalNbr;
  1437.         $array['totalCapacite'] = $totalCapacite;
  1438.         return $array;
  1439.     }
  1440.     public function getProjectByRequest($request,$isArchive = false){
  1441.         $spvProject = $request->get('spvProject');
  1442.         $search = $request->get('search');
  1443.         $status = $request->get('btnStatusTab');
  1444.         $user = $this->security->getUser();
  1445.         $dev = null;
  1446.         $epc = null;
  1447.         if(in_array('ROLE_DEV',$user->getRoles())){
  1448.             $dev = $user;
  1449.         }
  1450.         if(in_array('ROLE_EPC',$user->getRoles())){
  1451.             $epc = $user;
  1452.         }
  1453.         $user = $this->security->getUser();
  1454.         $projects= $this->em->getRepository(\App\Entity\Project::class)->getProjectsGlobal($isArchive,$spvProject,$search,$dev,$epc,$status,$user);
  1455.         return $projects;
  1456.     }
  1457.     public function getProjectByRequestSelectAll($request,$isArchive = false){
  1458.         $user = $this->security->getUser();
  1459.         $roles = $user->getRoles();
  1460.         if (in_array("ROLE_DEV", $roles) or in_array("ROLE_EPC", $roles) or in_array("ROLE_RESPONSABLE", $roles)) {
  1461.             $search = $request->get('search');
  1462.             $status = $request->get('statusProject');
  1463.             $statusAdministratifProject = $request->get('statusAdministratifProject');
  1464.             $statusTrackerProject = $request->get('statusTrackerProject');
  1465.             $typologieProject = $request->get('typologieProject');
  1466.             $responsableProject = $request->get('responsableProject');
  1467.             $responsableFoncierProject = $request->get('responsableFoncierProject');
  1468.             $responsableDevProject = $request->get('responsableDevProject');
  1469.             $constructeurProject = $request->get('constructeurProject');
  1470.             $constructeurEpcProject = $request->get('constructeurEpcProject');
  1471.             $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  1472.             $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  1473.             $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  1474.             $stadeConstruction = $request->get('stadeConstruction');
  1475.             $statusUrbanisme = $request->get('statusUrbanisme');
  1476.             $statusFoncier1 = $request->get('statusFoncier1');
  1477.             $statusFoncier2 = $request->get('statusFoncier2');
  1478.             $statusFoncier3 = $request->get('statusFoncier3');
  1479.             $entrepriseProject = $request->get('entrepriseProject');
  1480.             $achatLocation = $request->get('achatLocation');
  1481.             $filters = [
  1482.                 'query' => trim(@$search['value']),
  1483.                 'spvProject' =>  $request->get('spvProject'),
  1484.                 'statusAdministratifProject' =>  $statusAdministratifProject,
  1485.                 'statusTrackerProject' => $statusTrackerProject,
  1486.                 'typologieProject' => $typologieProject,
  1487.                 'responsableProject' => $responsableProject,
  1488.                 'responsableFoncierProject' => $responsableFoncierProject,
  1489.                 'responsableDevProject' => $responsableDevProject,
  1490.                 'constructeurProject' => $constructeurProject,
  1491.                 'constructeurEpcProject' => $constructeurEpcProject,
  1492.                 'constructeurInstallateurProject' => $constructeurInstallateurProject,
  1493.                 'constructeurCharpentierProject' => $constructeurCharpentierProject,
  1494.                 'constructeurNotaireProject' => $constructeurNotaireProject,
  1495.                 'stadeConstruction' => $stadeConstruction,
  1496.                 'statusUrbanisme' => $statusUrbanisme,
  1497.                 'statusFoncier1' => $statusFoncier1,
  1498.                 'statusFoncier2' => $statusFoncier2,
  1499.                 'statusFoncier3' => $statusFoncier3,
  1500.                 'entrepriseProject' => $entrepriseProject,
  1501.                 'achatLocation' => $achatLocation,
  1502.             ];
  1503.             $projects= $this->em->getRepository(\App\Entity\Project::class)->search($isArchive,$status,$user,$filters);
  1504.         }else{
  1505.             $search = $request->get('search');
  1506.             $status = $request->get('statusProject');
  1507.             $status2 = $request->get('status2Project');
  1508.             $statusAdministratifProject = $request->get('statusAdministratifProject');
  1509.             $spvProject = $request->get('spvProject');
  1510.             $devProject = $request->get('devProject');
  1511.             $responsableProject = $request->get('responsableProject');
  1512.             $responsableFoncierProject = $request->get('responsableFoncierProject');
  1513.             $responsableDevProject = $request->get('responsableDevProject');
  1514.             $constructeurProject = $request->get('constructeurProject');
  1515.             $statusTrackerProject = $request->get('statusTrackerProject');
  1516.             $typologieProject = $request->get('typologieProject');
  1517.             $constructeurEpcProject = $request->get('constructeurEpcProject');
  1518.             $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  1519.             $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  1520.             $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  1521.             $stadeConstruction = $request->get('stadeConstruction');
  1522.             $statusUrbanisme = $request->get('statusUrbanisme');
  1523.             $statusFoncier1 = $request->get('statusFoncier1');
  1524.             $statusFoncier2 = $request->get('statusFoncier2');
  1525.             $statusFoncier3 = $request->get('statusFoncier3');
  1526.             $entrepriseProject = $request->get('entrepriseProject');
  1527.             $achatLocation = $request->get('achatLocation');
  1528.             $spvsTab = [];
  1529.             if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  1530.                 $spvs = $user->getSpv();
  1531.                 foreach($spvs as $item){
  1532.                     $spvsTab[] = $item->getId();
  1533.                 }
  1534.             }
  1535.             $filters = [
  1536.                 'query' => trim(@$search['value']),
  1537.                 'devProject' => $devProject,
  1538.                 'responsableProject' => $responsableProject,
  1539.                 'responsableFoncierProject' => $responsableFoncierProject,
  1540.                 'responsableDevProject' => $responsableDevProject,
  1541.                 'constructeurProject' => $constructeurProject,
  1542.                 'spvsTab' => $spvsTab,
  1543.                 'user' => $user,
  1544.                 'statusAdministratifProject' => $statusAdministratifProject,
  1545.                 'statusTrackerProject' => $statusTrackerProject,
  1546.                 'typologieProject' => $typologieProject,
  1547.                 'constructeurEpcProject' => $constructeurEpcProject,
  1548.                 'constructeurInstallateurProject' => $constructeurInstallateurProject,
  1549.                 'constructeurCharpentierProject' => $constructeurCharpentierProject,
  1550.                 'constructeurNotaireProject' => $constructeurNotaireProject,
  1551.                 'stadeConstruction' => $stadeConstruction,
  1552.                 'statusUrbanisme' => $statusUrbanisme,
  1553.                 'statusFoncier1' => $statusFoncier1,
  1554.                 'statusFoncier2' => $statusFoncier2,
  1555.                 'statusFoncier3' => $statusFoncier3,
  1556.                 'entrepriseProject' => $entrepriseProject,
  1557.                 'achatLocation' => $achatLocation,
  1558.             ];
  1559.             $projects= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,$filters);
  1560.         }
  1561.         return $projects;
  1562.     }
  1563.     public function duplicateProject($project,$name)
  1564.     {
  1565.         $projectExist = $this->em->getRepository(Project::class)->findOneBy(['name'=>$name]);
  1566.         if($projectExist){
  1567.             return array(
  1568.                 'erreur' => 'Il existe déjà un projet avec ce nom',
  1569.                 'success' => false
  1570.             );
  1571.         }
  1572.         $newProject = clone $project;
  1573.         $newProject->setName($name);
  1574.         $newProject->setCreatedAt( new \DateTime());
  1575.         $newProject->setToken( md5(uniqid()));
  1576.         $newProject->setUserCreated( $this->security->getUser());
  1577.         $this->em->persist($newProject);
  1578.         $this->em->flush();
  1579.         $commentsEtaps = $this->em->getRepository(CommentEtap::class)->findBy(['project'=>$project->getId()]);
  1580.         foreach ($commentsEtaps as $commentsEtap){
  1581.             $commentsEtapNew = clone $commentsEtap;
  1582.             $commentsEtapNew->setProject($newProject);
  1583.             $this->em->persist($commentsEtapNew);
  1584.             $this->em->flush();
  1585.         }
  1586.         $etap0 = $this->em->getRepository(Etap0::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap0,$newProject);
  1587.         $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap1,$newProject);
  1588.         $etap2 = $this->em->getRepository(Etap2::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap2,$newProject);
  1589.         $etap3 = $this->em->getRepository(Etap3::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap3,$newProject);
  1590.         $etap4 = $this->em->getRepository(Etap4::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap4,$newProject);
  1591.         $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap5,$newProject);
  1592.         $etap6 = $this->em->getRepository(Etap6::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap6,$newProject);
  1593.         $etap601 = $this->em->getRepository(Etap601::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap601,$newProject);
  1594.         $etap602 = $this->em->getRepository(Etap602::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap602,$newProject);
  1595.         $etap7 = $this->em->getRepository(Etap7::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap7,$newProject);
  1596.         $etap71 = $this->em->getRepository(Etap71::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap71,$newProject);
  1597.         $etap8 = $this->em->getRepository(Etap8::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap8,$newProject);
  1598.         $etap80 = $this->em->getRepository(Etap80::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap80,$newProject);
  1599.         $etap9 = $this->em->getRepository(Etap9::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap9,$newProject);
  1600.         $etap10 = $this->em->getRepository(Etap10::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap10,$newProject);
  1601.         $etap11 = $this->em->getRepository(Etap11::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap11,$newProject);
  1602.         $etap12 = $this->em->getRepository(Etap12::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap12,$newProject);
  1603.         $etap121 = $this->em->getRepository(Etap121::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap121,$newProject);
  1604.         $etap13 = $this->em->getRepository(Etap13::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap13,$newProject);
  1605.         $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap14,$newProject);
  1606.         $etap15 = $this->em->getRepository(Etap15::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap15,$newProject);
  1607.         $etap159 = $this->em->getRepository(Etap159::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap159,$newProject);
  1608.         $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap160,$newProject);
  1609.         $etap161 = $this->em->getRepository(Etap161::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap161,$newProject);
  1610.         $etap16 = $this->em->getRepository(Etap16::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap16,$newProject);
  1611.         $etap17 = $this->em->getRepository(Etap17::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap17,$newProject);
  1612.         $etap171 = $this->em->getRepository(Etap171::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap171,$newProject);
  1613.         $etap172 = $this->em->getRepository(Etap172::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap172,$newProject);
  1614.         $etap173 = $this->em->getRepository(Etap173::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap173,$newProject);
  1615.         $etap174 = $this->em->getRepository(Etap174::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap174,$newProject);
  1616.         $etap175 = $this->em->getRepository(Etap175::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap175,$newProject);
  1617.         $etap18 = $this->em->getRepository(Etap18::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap18,$newProject);
  1618.         $etap19 = $this->em->getRepository(Etap19::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap19,$newProject);
  1619.         $etap20 = $this->em->getRepository(Etap20::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap20,$newProject);
  1620.         $etap201 = $this->em->getRepository(Etap201::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap201,$newProject);
  1621.         $etap21 = $this->em->getRepository(Etap21::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap21,$newProject);
  1622.         $etap22 = $this->em->getRepository(Etap22::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap22,$newProject);
  1623.         $etap23 = $this->em->getRepository(Etap23::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap23,$newProject);
  1624.         $etap24 = $this->em->getRepository(Etap24::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap24,$newProject);
  1625.         $etap25 = $this->em->getRepository(Etap25::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap25,$newProject);
  1626.         $etap26 = $this->em->getRepository(Etap26::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap26,$newProject);
  1627.         $etap50 = $this->em->getRepository(Etap50::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap50,$newProject);
  1628.         return [
  1629.             'success' => true
  1630.         ];
  1631.     }
  1632.     private function cloneEtap($etap,$newProject){
  1633.         if($etap){
  1634.             $newEtap = clone $etap;
  1635.             $newEtap->setProject($newProject);
  1636.             $this->em->persist($newEtap);
  1637.             $this->em->flush();
  1638.         }
  1639.     }
  1640.     public function paginateDocListProject($request,$isArchive=false){
  1641.         $length = $request->get('length');
  1642.         $length = $length && ($length!=-1)?$length:0;
  1643.         $start = $request->get('start');
  1644.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1645.         $column =  $search = $request->get('columns');
  1646.         $order = $request->get('order')[0];
  1647.         $columnOrder = $order['column'];
  1648.         $dirOrder = $order['dir'];
  1649.         $columNameOrder = $column[$columnOrder]['data'];
  1650.         $search = $request->get('search');
  1651.         $spvProject = $request->get('spvProject');
  1652.         $devProject = $request->get('devProject');
  1653.         $docsProject = $request->get('docsProject');
  1654.         $responsableProject = $request->get('responsableProject');
  1655.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  1656.         $responsableDevProject = $request->get('responsableDevProject');
  1657.         $constructeurProject = $request->get('constructeurProject');
  1658.         $user = $this->security->getUser();
  1659.         $roles = $user->getRoles();
  1660.         $spvsTab = [];
  1661.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  1662.             $spvs = $user->getSpv();
  1663.             foreach($spvs as $item){
  1664.                 $spvsTab[] = $item->getId();
  1665.             }
  1666.         }
  1667.         $filters = [
  1668.             'query' => trim(@$search['value']),
  1669.             'devProject' => $devProject,
  1670.             'responsableProject' => $responsableProject,
  1671.             'responsableFoncierProject' => $responsableFoncierProject,
  1672.             'responsableDevProject' => $responsableDevProject,
  1673.             'constructeurProject' => $constructeurProject,
  1674.             'spvsTab' => $spvsTab,
  1675.             'user' => $user
  1676.         ];
  1677.         $projectsPreFilter = $this->em->getRepository(\App\Entity\Project::class)->searchByDocPreFilter($spvProject,$filters);
  1678.         $array = [];
  1679.         if($projectsPreFilter){
  1680.             $array = [];
  1681.             foreach ($projectsPreFilter as $projectPreFilter){
  1682.                 if($docsProject){
  1683.                     foreach ($docsProject as $docs){
  1684.                         $str = explode("__", $docs);
  1685.                         $etapNum = $str[0];
  1686.                         $fileName = $str[1];
  1687.                         $nameChampManyToMany = isset($str[2])?$str[2]:null;
  1688.                         $nameChampManyToMany2 = isset($str[3])?$str[3]:null;
  1689.                         $etapClass = 'App\\Entity\\Etap'.$etapNum;
  1690.                         $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$projectPreFilter->getId()]);
  1691.                         if($etap){
  1692.                             $classMetadata = $this->em->getClassMetadata($etapClass);
  1693.                             if($nameChampManyToMany){
  1694.                                 $associationMappings = $classMetadata->getAssociationMapping($nameChampManyToMany);
  1695.                                 if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  1696.                                     $nameGeteurFiled = 'get'.ucfirst($nameChampManyToMany);
  1697.                                     $filedValue = $etap->{$nameGeteurFiled}();
  1698.                                     if(!$filedValue->isEmpty()){
  1699.                                         foreach ($filedValue as $item){
  1700.                                             if($nameChampManyToMany2){
  1701.                                                 $nameGeteurFiledLevel2 = 'get'.ucfirst($nameChampManyToMany2);
  1702.                                                 $filedValueLevel2 = $item->{$nameGeteurFiledLevel2}();
  1703.                                                 if(!$filedValueLevel2->isEmpty()){
  1704.                                                     foreach ($filedValueLevel2 as $itemLevel2){
  1705.                                                         $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  1706.                                                         $filedValue2 = $itemLevel2->{$nameGeteurFiled2}();
  1707.                                                         if(!$filedValue2->isEmpty()) {
  1708.                                                             foreach ($filedValue2 as $item2) {
  1709.                                                                 if (!$item2->getIsArchived()) {
  1710.                                                                     $array[$projectPreFilter->getId()] = $projectPreFilter;
  1711.                                                                 }
  1712.                                                             }
  1713.                                                         }
  1714.                                                     }
  1715.                                                 }
  1716.                                             }else{
  1717.                                                 $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  1718.                                                 $filedValue2 = $item->{$nameGeteurFiled2}();
  1719.                                                 if(!$filedValue2->isEmpty()) {
  1720.                                                     foreach ($filedValue2 as $item2) {
  1721.                                                         if ($item2->getIsArchived()) {
  1722.                                                         } else {
  1723.                                                             $array[$projectPreFilter->getId()] = $projectPreFilter;
  1724.                                                         }
  1725.                                                     }
  1726.                                                 }
  1727.                                             }
  1728.                                         }
  1729.                                     }
  1730.                                 }
  1731.                             }else{
  1732.                                 $associationMappings = $classMetadata->getAssociationMapping($fileName);
  1733.                                 if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  1734.                                     $nameGeteurFiled = 'get'.ucfirst($fileName);
  1735.                                     $filedValue = $etap->{$nameGeteurFiled}();
  1736.                                     if(!$filedValue->isEmpty()){
  1737.                                         foreach ($filedValue as $item){
  1738.                                             if($item->getIsArchived()){
  1739.                                                 // condition is promesse de bail
  1740.                                                 if($fileName == 'filePromessebailMultiple'){
  1741.                                                     if($projectPreFilter->getFilePromessebail() and !$projectPreFilter->getFilePromessebail()->getIsArchived()){
  1742.                                                         $array[$projectPreFilter->getId()] = $projectPreFilter;
  1743.                                                     }
  1744.                                                 }
  1745.                                             }else{
  1746.                                                 $array[$projectPreFilter->getId()] = $projectPreFilter;
  1747.                                             }
  1748.                                         }
  1749.                                     }
  1750.                                 }else{
  1751.                                     $nameGeteurFiled = 'get'.ucfirst($fileName);
  1752.                                     $filedValue = $etap->{$nameGeteurFiled}();
  1753.                                     if($filedValue && !$filedValue->getIsArchived()){
  1754.                                         $array[$projectPreFilter->getId()] = $projectPreFilter;
  1755.                                     }
  1756.                                 }
  1757.                             }
  1758.                         }
  1759.                     }
  1760.                 }
  1761.             }
  1762.         }
  1763.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchByIds($array, $start, $length, true,$columNameOrder, $dirOrder);
  1764.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->searchByIds($array, $start, $length, true,$columNameOrder, $dirOrder,true);
  1765.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->searchByIds($array, $start, $length, true,$columNameOrder, $dirOrder,true);
  1766.         $output = array(
  1767.             'data' => array(),
  1768.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1769.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1770.         );
  1771.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1772.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  1773.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  1774.         foreach ($projects as $project) {
  1775.             $statut3 =
  1776.                 $this->twig->render(
  1777.                     'admin/project/default/status3.html.twig', array(
  1778.                     'status' => $project->getStatusAdministratif()
  1779.                 ));
  1780.             $action = '<div class="btn-group"><input type="checkbox" class="selectProjectDocsExportation  ml-2" value="'.$project->getToken().'" name="selectProjectDocsExportation[]"></div>';
  1781.             $output['data'][] = [
  1782.                 'responsive_id' => '',
  1783.                 'id' => $project->getId(),
  1784.                 'capacite' => $this->espaceNumber($project->getCapacite()),
  1785.                 'name' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName())),
  1786.                 'spv' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getSpv() ? $project->getSpv()->getName() : '-')) ,
  1787.                 'developpeur' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getDeveloppeur() ? $project->getDeveloppeur()->getFirstname().' '.$project->getDeveloppeur()->getLastname() : '-')) ,
  1788.                 'entreprise' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getEntreprise() ? $project->getEntreprise()->getName() : ($project->getDeveloppeur() && $project->getDeveloppeur()->getEntreprise() ? $project->getDeveloppeur()->getEntreprise()->getName() : '-'))) ,
  1789.                 'createdAt' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCreatedAt()?$project->getCreatedAt()->format('d/m/Y'):'-' )),
  1790.                 'statusAdministratif' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut3)) ,
  1791.                 'action' => $action ,
  1792.             ];
  1793.         }
  1794.         return $output;
  1795.     }
  1796.     public function docsListProject($request){
  1797.         $spvProject = $request->get('spvProject');
  1798.         $docsProject = $request->get('docsProject');
  1799.         $projectIds = $request->get('projectIds');
  1800.         $devProject = $request->get('devProject');
  1801.         $projects= $this->em->getRepository(\App\Entity\Project::class)->getProjectDocs($docsProject,$spvProject,$projectIds,$devProject);
  1802.         if($projects){
  1803.             $array = [];
  1804.             foreach ($projects as $project){
  1805.                 if($docsProject){
  1806.                     $zip = new \ZipArchive();
  1807.                     $zipfile = $this->params->get('zips_directory') . '/project-' . $project->getName() .'.zip';
  1808.                     if (file_exists($zipfile)) unlink($zipfile);
  1809.                     if ($zip->open($zipfile, \ZipArchive::CREATE) === TRUE) {
  1810.                         foreach ($docsProject as $docs){
  1811.                             $str = explode("__", $docs);
  1812.                             $etapNum = $str[0];
  1813.                             $fileName = $str[1];
  1814.                             $nameChampManyToMany = isset($str[2])?$str[2]:null;
  1815.                             $nameChampManyToMany2 = isset($str[3])?$str[3]:null;
  1816.                             $etapClass = 'App\\Entity\\Etap'.$etapNum;
  1817.                             $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  1818.                             if($etap){
  1819.                                 $classMetadata = $this->em->getClassMetadata($etapClass);
  1820.                                 if($nameChampManyToMany){
  1821.                                     $associationMappings = $classMetadata->getAssociationMapping($nameChampManyToMany);
  1822.                                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  1823.                                         $nameGeteurFiled = 'get'.ucfirst($nameChampManyToMany);
  1824.                                         $filedValue = $etap->{$nameGeteurFiled}();
  1825.                                         if(!$filedValue->isEmpty()){
  1826.                                             foreach ($filedValue as $item){
  1827.                                                 if($nameChampManyToMany2){
  1828.                                                     $nameGeteurFiledLevel2 = 'get'.ucfirst($nameChampManyToMany2);
  1829.                                                     $filedValueLevel2 = $item->{$nameGeteurFiledLevel2}();
  1830.                                                     if(!$filedValueLevel2->isEmpty()){
  1831.                                                         foreach ($filedValueLevel2 as $itemLevel2){
  1832.                                                             $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  1833.                                                             $filedValue2 = $itemLevel2->{$nameGeteurFiled2}();
  1834.                                                             if(!$filedValue2->isEmpty()) {
  1835.                                                                 foreach ($filedValue2 as $item2) {
  1836.                                                                     if (!$item2->getIsArchived()) {
  1837.                                                                         $fileNameInZip = $item2->getNomenclature() ? $item2->getNomenclature() : $item2->getPath();
  1838.                                                                         $filePath = $this->params->get('uploads_directory') . '/' . $item2->getPath();
  1839.                                                                         // éviter l'écrasement quand plusieurs items etap26Champs ont un fichier de même nom
  1840.                                                                         if($zip->locateName($fileNameInZip) !== false){
  1841.                                                                             $ext = pathinfo($fileNameInZip, PATHINFO_EXTENSION);
  1842.                                                                             $base = $ext ? substr($fileNameInZip, 0, -(strlen($ext)+1)) : $fileNameInZip;
  1843.                                                                             $suffix = 1;
  1844.                                                                             do {
  1845.                                                                                 $fileNameInZip = $base.'_'.$suffix.($ext ? '.'.$ext : '');
  1846.                                                                                 $suffix++;
  1847.                                                                             } while($zip->locateName($fileNameInZip) !== false);
  1848.                                                                         }
  1849.                                                                         $zip->addFile($filePath, $fileNameInZip);
  1850.                                                                     }
  1851.                                                                 }
  1852.                                                             }
  1853.                                                         }
  1854.                                                     }
  1855.                                                 }else{
  1856.                                                     $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  1857.                                                     $filedValue2 = $item->{$nameGeteurFiled2}();
  1858.                                                     if(!$filedValue2->isEmpty()) {
  1859.                                                         foreach ($filedValue2 as $item2) {
  1860.                                                             if ($item2->getIsArchived()) {
  1861.                                                             } else {
  1862.                                                                 $fileNameInZip = $item2->getNomenclature() ? $item2->getNomenclature() : $item2->getPath();
  1863.                                                                 $filePath = $this->params->get('uploads_directory') . '/' . $item2->getPath();
  1864.                                                                 $zip->addFile($filePath, $fileNameInZip);
  1865.                                                             }
  1866.                                                         }
  1867.                                                     }
  1868.                                                 }
  1869.                                             }
  1870.                                         }
  1871.                                     }
  1872.                                 }else{
  1873.                                     $associationMappings = $classMetadata->getAssociationMapping($fileName);
  1874.                                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  1875.                                         $nameGeteurFiled = 'get'.ucfirst($fileName);
  1876.                                         $filedValue = $etap->{$nameGeteurFiled}();
  1877.                                         if(!$filedValue->isEmpty()){
  1878.                                             foreach ($filedValue as $item){
  1879.                                                 if($item->getIsArchived()){
  1880.                                                     // condition is promesse de bail
  1881.                                                     if($fileName == 'filePromessebailMultiple'){
  1882.                                                         if($project->getFilePromessebail() and !$project->getFilePromessebail()->getIsArchived()){
  1883.                                                             $fileNameInZip =  $project->getFilePromessebail()->getNomenclature()? $project->getFilePromessebail()->getNomenclature(): $project->getFilePromessebail()->getPath();
  1884.                                                             $filePath = $this->params->get('uploads_directory').'/'.$project->getFilePromessebail()->getPath();
  1885.                                                             $zip->addFile($filePath,$fileNameInZip);
  1886.                                                         }
  1887.                                                     }
  1888.                                                 }else{
  1889.                                                     $fileNameInZip =  $item->getNomenclature()? $item->getNomenclature(): $item->getPath();
  1890.                                                     $filePath = $this->params->get('uploads_directory').'/'.$item->getPath();
  1891.                                                     $zip->addFile($filePath,$fileNameInZip);
  1892.                                                 }
  1893.                                             }
  1894.                                         }
  1895.                                     }else{
  1896.                                         $nameGeteurFiled = 'get'.ucfirst($fileName);
  1897.                                         $filedValue = $etap->{$nameGeteurFiled}();
  1898.                                         if($filedValue && !$filedValue->getIsArchived()){
  1899.                                             $fileNameInZip =  $filedValue->getNomenclature()? $filedValue->getNomenclature(): $filedValue->getPath();
  1900.                                             $filePath = $this->params->get('uploads_directory').'/'.$filedValue->getPath();
  1901.                                             $zip->addFile($filePath,$fileNameInZip);
  1902.                                         }
  1903.                                     }
  1904.                                 }
  1905.                             }
  1906.                         }
  1907.                         $zip->close();
  1908.                     }
  1909.                     $array[$project->getName()]['path'] = $zipfile;
  1910.                     $array[$project->getName()]['name'] =  $project->getName();
  1911.                 }
  1912.             }
  1913.             return $array ;
  1914.         }
  1915.         return 0 ;
  1916.     }
  1917.     public function docsListProjectAll($request){
  1918.         $search = $request->get('search');
  1919.         $spvProject = $request->get('spvProject');
  1920.         $devProject = $request->get('devProject');
  1921.         $docsProject = $request->get('docsProject');
  1922.         $responsableProject = $request->get('responsableProject');
  1923.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  1924.         $responsableDevProject = $request->get('responsableDevProject');
  1925.         $constructeurProject = $request->get('constructeurProject');
  1926.         $user = $this->security->getUser();
  1927.         $roles = $user->getRoles();
  1928.         $spvsTab = [];
  1929.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  1930.             $spvs = $user->getSpv();
  1931.             foreach($spvs as $item){
  1932.                 $spvsTab[] = $item->getId();
  1933.             }
  1934.         }
  1935.         $filters = [
  1936.             'query' => trim(@$search['value']),
  1937.             'devProject' => $devProject,
  1938.             'responsableProject' => $responsableProject,
  1939.             'responsableFoncierProject' => $responsableFoncierProject,
  1940.             'responsableDevProject' => $responsableDevProject,
  1941.             'constructeurProject' => $constructeurProject,
  1942.             'spvsTab' => $spvsTab,
  1943.             'user' => $user
  1944.         ];
  1945.         $projects = $this->em->getRepository(\App\Entity\Project::class)->searchByDocPreFilter($spvProject,$filters);
  1946.         if($projects){
  1947.             $array = [];
  1948.             foreach ($projects as $project){
  1949.                 if($docsProject){
  1950.                     $zip = new \ZipArchive();
  1951.                     $zipfile = $this->params->get('zips_directory') . '/project-' . $project->getName() .'.zip';
  1952.                     if (file_exists($zipfile)) unlink($zipfile);
  1953.                     if ($zip->open($zipfile, \ZipArchive::CREATE) === TRUE) {
  1954.                         foreach ($docsProject as $docs){
  1955.                             $str = explode("__", $docs);
  1956.                             $etapNum = $str[0];
  1957.                             $fileName = $str[1];
  1958.                             $nameChampManyToMany = isset($str[2])?$str[2]:null;
  1959.                             $nameChampManyToMany2 = isset($str[3])?$str[3]:null;
  1960.                             $etapClass = 'App\\Entity\\Etap'.$etapNum;
  1961.                             $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  1962.                             if($etap){
  1963.                                 $classMetadata = $this->em->getClassMetadata($etapClass);
  1964.                                 if($nameChampManyToMany){
  1965.                                     $associationMappings = $classMetadata->getAssociationMapping($nameChampManyToMany);
  1966.                                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  1967.                                         $nameGeteurFiled = 'get'.ucfirst($nameChampManyToMany);
  1968.                                         $filedValue = $etap->{$nameGeteurFiled}();
  1969.                                         if(!$filedValue->isEmpty()){
  1970.                                             foreach ($filedValue as $item){
  1971.                                                 if($nameChampManyToMany2){
  1972.                                                     $nameGeteurFiledLevel2 = 'get'.ucfirst($nameChampManyToMany2);
  1973.                                                     $filedValueLevel2 = $item->{$nameGeteurFiledLevel2}();
  1974.                                                     if(!$filedValueLevel2->isEmpty()){
  1975.                                                         foreach ($filedValueLevel2 as $itemLevel2){
  1976.                                                             $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  1977.                                                             $filedValue2 = $itemLevel2->{$nameGeteurFiled2}();
  1978.                                                             if(!$filedValue2->isEmpty()) {
  1979.                                                                 foreach ($filedValue2 as $item2) {
  1980.                                                                     if (!$item2->getIsArchived()) {
  1981.                                                                         $fileNameInZip = $item2->getNomenclature() ? $item2->getNomenclature() : $item2->getPath();
  1982.                                                                         $filePath = $this->params->get('uploads_directory') . '/' . $item2->getPath();
  1983.                                                                         // éviter l'écrasement quand plusieurs items etap26Champs ont un fichier de même nom
  1984.                                                                         if($zip->locateName($fileNameInZip) !== false){
  1985.                                                                             $ext = pathinfo($fileNameInZip, PATHINFO_EXTENSION);
  1986.                                                                             $base = $ext ? substr($fileNameInZip, 0, -(strlen($ext)+1)) : $fileNameInZip;
  1987.                                                                             $suffix = 1;
  1988.                                                                             do {
  1989.                                                                                 $fileNameInZip = $base.'_'.$suffix.($ext ? '.'.$ext : '');
  1990.                                                                                 $suffix++;
  1991.                                                                             } while($zip->locateName($fileNameInZip) !== false);
  1992.                                                                         }
  1993.                                                                         $zip->addFile($filePath, $fileNameInZip);
  1994.                                                                     }
  1995.                                                                 }
  1996.                                                             }
  1997.                                                         }
  1998.                                                     }
  1999.                                                 }else{
  2000.                                                     $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  2001.                                                     $filedValue2 = $item->{$nameGeteurFiled2}();
  2002.                                                     if(!$filedValue2->isEmpty()) {
  2003.                                                         foreach ($filedValue2 as $item2) {
  2004.                                                             if ($item2->getIsArchived()) {
  2005.                                                             } else {
  2006.                                                                 $fileNameInZip = $item2->getNomenclature() ? $item2->getNomenclature() : $item2->getPath();
  2007.                                                                 $filePath = $this->params->get('uploads_directory') . '/' . $item2->getPath();
  2008.                                                                 $zip->addFile($filePath, $fileNameInZip);
  2009.                                                             }
  2010.                                                         }
  2011.                                                     }
  2012.                                                 }
  2013.                                             }
  2014.                                         }
  2015.                                     }
  2016.                                 }else{
  2017.                                     $associationMappings = $classMetadata->getAssociationMapping($fileName);
  2018.                                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  2019.                                         $nameGeteurFiled = 'get'.ucfirst($fileName);
  2020.                                         $filedValue = $etap->{$nameGeteurFiled}();
  2021.                                         if(!$filedValue->isEmpty()){
  2022.                                             foreach ($filedValue as $item){
  2023.                                                 if($item->getIsArchived()){
  2024.                                                     // condition is promesse de bail
  2025.                                                     if($fileName == 'filePromessebailMultiple'){
  2026.                                                         if($project->getFilePromessebail() and !$project->getFilePromessebail()->getIsArchived()){
  2027.                                                             $fileNameInZip =  $project->getFilePromessebail()->getNomenclature()? $project->getFilePromessebail()->getNomenclature(): $project->getFilePromessebail()->getPath();
  2028.                                                             $filePath = $this->params->get('uploads_directory').'/'.$project->getFilePromessebail()->getPath();
  2029.                                                             $zip->addFile($filePath,$fileNameInZip);
  2030.                                                         }
  2031.                                                     }
  2032.                                                 }else{
  2033.                                                     $fileNameInZip =  $item->getNomenclature()? $item->getNomenclature(): $item->getPath();
  2034.                                                     $filePath = $this->params->get('uploads_directory').'/'.$item->getPath();
  2035.                                                     $zip->addFile($filePath,$fileNameInZip);
  2036.                                                 }
  2037.                                             }
  2038.                                         }
  2039.                                     }else{
  2040.                                         $nameGeteurFiled = 'get'.ucfirst($fileName);
  2041.                                         $filedValue = $etap->{$nameGeteurFiled}();
  2042.                                         if($filedValue && !$filedValue->getIsArchived()){
  2043.                                             $fileNameInZip =  $filedValue->getNomenclature()? $filedValue->getNomenclature(): $filedValue->getPath();
  2044.                                             $filePath = $this->params->get('uploads_directory').'/'.$filedValue->getPath();
  2045.                                             $zip->addFile($filePath,$fileNameInZip);
  2046.                                         }
  2047.                                     }
  2048.                                 }
  2049.                             }
  2050.                         }
  2051.                         $zip->close();
  2052.                     }
  2053.                     $array[$project->getName()]['path'] = $zipfile;
  2054.                     $array[$project->getName()]['name'] =  $project->getName();
  2055.                 }
  2056.             }
  2057.             return $array ;
  2058.         }
  2059.         return 0 ;
  2060.     }
  2061.     public function addDocsInEtaps($array){
  2062.         if($array){
  2063.             foreach ($array as $item){
  2064.                 $tokenProject = $item['tokenproject'];
  2065.                 $tokenFile = $item['tokenFile'];
  2066.                 $etapData = $item['etapData'];
  2067.                 $isProjectFile = $item['isProjectFile'];
  2068.                 $etapsFilesManyToManyName = isset($item['etapsFilesManyToManyName'])?$item['etapsFilesManyToManyName']:0;
  2069.                 if($etapData){
  2070.                     if($isProjectFile == 1){
  2071.                         $project = $this->em->getRepository(Project::class)->findOneBy(['token' => $tokenProject]);
  2072.                         $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  2073.                         if ($project && $docUpload) {
  2074.                             $etapClass = 'App\\Entity\\Project';
  2075.                             $classMetadata = $this->em->getClassMetadata($etapClass);
  2076.                             $associationMappings = $classMetadata->getAssociationMapping($etapData);
  2077.                             if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
  2078.                                 $nameGeteurFiled = 'add' . ucfirst($etapData);
  2079.                                 $project->{$nameGeteurFiled}($docUpload);
  2080.                             } else {
  2081.                                 $nameGeteurFiled = 'set' . ucfirst($etapData);
  2082.                                 $project->{$nameGeteurFiled}($docUpload);
  2083.                             }
  2084.                             $this->em->persist($project);
  2085.                             $this->em->flush();
  2086.                             $this->etapsService->updateStatusTracker($project); // set status tracker
  2087.                         }
  2088.                     }else {
  2089.                         $str = explode("__", $etapData);
  2090.                         if (isset($str[1])) {
  2091.                             $project = $this->em->getRepository(Project::class)->findOneBy(['token' => $tokenProject]);
  2092.                             $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  2093.                             if ($project && $docUpload) {
  2094.                                 $etapNum = $str[0];
  2095.                                 $fileName = $str[1];
  2096.                                 $fileNameStr = $str[2];
  2097.                                 $etapClass = 'App\\Entity\\Etap' . $etapNum;
  2098.                                 $etap = $this->em->getRepository($etapClass)->findOneBy(['project' => $project->getId()]);
  2099.                                 if ($etap) {
  2100.                                     if(is_string($etapsFilesManyToManyName)){
  2101.                                         $etapsFilesManyToManyName = ucfirst($etapsFilesManyToManyName);
  2102.                                         $getEntityManyToMany = 'get'.$etapsFilesManyToManyName;
  2103.                                         if(count($etap->{$getEntityManyToMany}()) > 0 ){
  2104.                                             $valManyToMany = $etap->{$getEntityManyToMany}()[0];
  2105.                                         }else{
  2106.                                             $classNew = "App\\Entity\\$etapsFilesManyToManyName";
  2107.                                             $valManyToMany = new $classNew();
  2108.                                         }
  2109.                                         $classMetadata = $this->em->getClassMetadata("App\\Entity\\$etapsFilesManyToManyName");
  2110.                                         $associationMappings = $classMetadata->getAssociationMapping($fileName);
  2111.                                         if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
  2112.                                             $nameGeteurFiled = 'add' . ucfirst($fileName);
  2113.                                         } else {
  2114.                                             $nameGeteurFiled = 'set' . ucfirst($fileName);
  2115.                                         }
  2116.                                         $valManyToMany->{$nameGeteurFiled}($docUpload);
  2117.                                         $nameGeteurFiledClass = 'add' . ucfirst($etapsFilesManyToManyName);
  2118.                                         $etap->{$nameGeteurFiledClass}($valManyToMany);
  2119.                                         $this->em->persist($etap);
  2120.                                         $this->em->flush();
  2121.                                         $this->etapsService->getNomenclature($etap, $docUpload, $fileNameStr);
  2122.                                     }else{
  2123.                                         $classMetadata = $this->em->getClassMetadata($etapClass);
  2124.                                         $associationMappings = $classMetadata->getAssociationMapping($fileName);
  2125.                                         if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
  2126.                                             if($fileName == 'fileDiagnostiqueCharpente159Multiple'){
  2127.                                                 $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  2128.                                                 $etap160->addFileDiagnostiqueCharpenteMultiple($docUpload);
  2129.                                                 $this->em->persist($etap160);
  2130.                                                 $this->em->flush();
  2131.                                             }elseif ($fileName == 'fileDiagnostiqueCharpenteMultiple'){
  2132.                                                 $etap159 = $this->em->getRepository(Etap159::class)->findOneBy(['project'=>$project->getId()]);
  2133.                                                 $etap159->addFileDiagnostiqueCharpente159Multiple($docUpload);
  2134.                                                 $this->em->persist($etap159);
  2135.                                                 $this->em->flush();
  2136.                                             }
  2137.                                             $nameGeteurFiled = 'add' . ucfirst($fileName);
  2138.                                             $etap->{$nameGeteurFiled}($docUpload);
  2139.                                         } else {
  2140.                                             $nameGeteurFiled = 'set' . ucfirst($fileName);
  2141.                                             $etap->{$nameGeteurFiled}($docUpload);
  2142.                                         }
  2143.                                         if ($etap->getStatus() == Etaps::STATUS_FERMEE) {
  2144.                                             $etap->setStatus(Etaps::STATUS_EN_COURS);
  2145.                                         }
  2146.                                         $this->em->persist($etap);
  2147.                                         $this->em->flush();
  2148.                                         $this->etapsService->getNomenclature($etap, $docUpload, $fileNameStr);
  2149.                                     }
  2150.                                 }
  2151.                                 $this->etapsService->updateStatusTracker($project); // set status tracker
  2152.                             }
  2153.                         }
  2154.                     }
  2155.                 }
  2156.             }
  2157.         }
  2158.     }
  2159.     public function addPhotoInEtaps($array){
  2160.         if($array){
  2161.             foreach ($array as $item){
  2162.                 $tokenProject = $item['tokenproject'];
  2163.                 $tokenFile = $item['tokenFile'];
  2164.                 $tokenEtap = $item['tokenEtap'];
  2165.                 $numEtap = $item['numEtap'];
  2166.                 if($tokenEtap  && $tokenProject){
  2167.                     $etapClass = 'App\\Entity\\Etap' . $numEtap;
  2168.                     $etap = $this->em->getRepository($etapClass)->findOneBy(['token'=>$tokenEtap]);
  2169.                     $project = $this->em->getRepository(Project::class)->findOneBy(['token' => $tokenProject]);
  2170.                     $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  2171.                     if($etap){
  2172.                         $etap->addFilePhotosMultiple($docUpload);
  2173.                         $this->em->persist($etap);
  2174.                     }
  2175.                 }
  2176.             }
  2177.             $this->em->flush();
  2178.         }
  2179.     }
  2180.     public function getDocsName($project = null){
  2181.         $array = [];
  2182.         $array[1]['name_category'] = 'Urbanisme';
  2183.         $array[2]['name_category'] = 'Foncier';
  2184.         $array[3]['name_category'] = 'Raccordement';
  2185.         $array[4]['name_category'] = 'Construction';
  2186.         $array[5]['name_category'] = 'Valorisation';
  2187.         $etapsCat1 = [];
  2188.         $etapsCat1[1]['etapNum'] = '0';
  2189.         $etapsCat1[1]['name'] = 'Préparation dossier PC';
  2190.         $etapsCat1Files = [];
  2191.         $etapsCat1Files[1]['nameFile'] = 'Infos pour archi';
  2192.         $etapsCat1Files[1]['nameFileDB'] = 'fileInfoArchiMultiple';
  2193.         $etapsCat1Files[2]['nameFile'] = 'MSA Attestation';
  2194.         $etapsCat1Files[2]['nameFileDB'] = 'fileMsaAttestationMultiple';
  2195.         $etapsCat1Files[3]['nameFile'] = 'MSA Relevé d’exploitation';
  2196.         $etapsCat1Files[3]['nameFileDB'] = 'fileMsaReleveExploitationMultiple';
  2197.         $etapsCat1Files[4]['nameFile'] = 'Fiche de besoins agricoles';
  2198.         $etapsCat1Files[4]['nameFileDB'] = 'fileFicheBesoinAgricoleMultiple';
  2199.         $etapsCat1Files[5]['nameFile'] = 'Lettre de motivation';
  2200.         $etapsCat1Files[5]['nameFileDB'] = 'fileLettreMotivationMultiple';
  2201.         $etapsCat1Files[6]['nameFile'] = 'ICPE';
  2202.         $etapsCat1Files[6]['nameFileDB'] = 'fileICPEMultiple';
  2203.         $etapsCat1Files[7]['nameFile'] = 'Règlement d’urbanisme';
  2204.         $etapsCat1Files[7]['nameFileDB'] = 'fileReglementUrbanismeMultiple';
  2205.         $etapsCat1Files[8]['nameFile'] = 'Autre (CDPENAF, Natura 2000…)';
  2206.         $etapsCat1Files[8]['nameFileDB'] = 'fileAutreEtap0Multiple';
  2207.         $etapsCat1[1]['etapsFiles'] = $etapsCat1Files;
  2208.         $etapsCat1[2]['etapNum'] = '1';
  2209.         $etapsCat1[2]['name'] = 'Dossier PC/DP et Arrêté PC/DP';
  2210.         $etapsCat1Files = [];
  2211.         $etapsCat1Files[1]['nameFile'] = 'Dossier PC/DP';
  2212.         $etapsCat1Files[1]['nameFileDB'] = 'fileDossierPcDpMultiple';
  2213.         $etapsCat1Files[2]['nameFile'] = 'arrêté PC/DP';
  2214.         $etapsCat1Files[2]['nameFileDB'] = 'fileArretePcDpMultiple';
  2215.         $etapsCat1Files[3]['nameFile'] = 'Récépissé dépôt PC';
  2216.         $etapsCat1Files[3]['nameFileDB'] = 'fileRecepisseDepotPcMultiple';
  2217.         $etapsCat1Files[4]['nameFile'] = 'Demande compléments pc';
  2218.         $etapsCat1Files[4]['nameFileDB'] = 'fileDemandeComplementPcMultiple';
  2219.         $etapsCat1Files[5]['nameFile'] = 'Récépissé compléments pc';
  2220.         $etapsCat1Files[5]['nameFileDB'] = 'fileRecepisseComplementPcMultiple';
  2221.         $etapsCat1Files[6]['nameFile'] = 'Autre (prolongation délai d’instruction)';
  2222.         $etapsCat1Files[6]['nameFileDB'] = 'fileAutreDocPcMultiple';
  2223.         $etapsCat1Files[7]['nameFile'] = 'Certificat de non-opposition';
  2224.         $etapsCat1Files[7]['nameFileDB'] = 'fileCertificatNonOppositionEtap1Multiple';
  2225.         $etapsCat1[2]['etapsFiles'] = $etapsCat1Files;
  2226.         $etapsCat1[2]['class'] = 'Etap1Pcm';
  2227.         $etapsCat1[2]['etapsFilesManyToManyName'] = 'etap1Pcm';
  2228.         $etapsCat1FilesManyToMany = [];
  2229.         $etapsCat1FilesManyToMany[1]['nameFile'] = 'Autre dossier PC/DP';
  2230.         $etapsCat1FilesManyToMany[1]['nameFileDB'] = 'fileDossierPcmpMultiple';
  2231.         $etapsCat1FilesManyToMany[2]['nameFile'] = 'Arrêté PC/DP';
  2232.         $etapsCat1FilesManyToMany[2]['nameFileDB'] = 'fileArretePcmMultiple';
  2233.         $etapsCat1FilesManyToMany[3]['nameFile'] = 'Récépissé dépôt PC/DP';
  2234.         $etapsCat1FilesManyToMany[3]['nameFileDB'] = 'fileRecepisseDepotPcmMultiple';
  2235.         $etapsCat1FilesManyToMany[4]['nameFile'] = 'Demande compléments PC/DP';
  2236.         $etapsCat1FilesManyToMany[4]['nameFileDB'] = 'fileDemandeComplementPcmMultiple';
  2237.         $etapsCat1FilesManyToMany[5]['nameFile'] = 'Récépissé compléments PC/DP';
  2238.         $etapsCat1FilesManyToMany[5]['nameFileDB'] = 'fileRecepisseComplementPcmMultiple';
  2239.         $etapsCat1FilesManyToMany[6]['nameFile'] = 'Autre (prolongation délai d’instruction) PC/DP';
  2240.         $etapsCat1FilesManyToMany[6]['nameFileDB'] = 'fileAutreDocPcmMultiple';
  2241.         $etapsCat1[2]['etapsFilesManyToMany'] = $etapsCat1FilesManyToMany;
  2242.         $etapsCat1[3]['etapNum'] = '2';
  2243.         $etapsCat1[3]['name'] = 'PC/DP purgé';
  2244.         $etapsCat1Files = [];
  2245.         $etapsCat1Files[1]['nameFile'] = 'PV passage huissier';
  2246.         $etapsCat1Files[1]['nameFileDB'] = 'filePVPassageHuissierMultiple';
  2247.         $etapsCat1Files[2]['nameFile'] = 'Certificat de non-recours (Tribunal Administratif)';
  2248.         $etapsCat1Files[2]['nameFileDB'] = 'fileCertificatNonRecoursMultiple';
  2249.         $etapsCat1Files[3]['nameFile'] = 'Certificat de non-retrait (Mairie)';
  2250.         $etapsCat1Files[3]['nameFileDB'] = 'fileCertificatNonRetraitMultiple';
  2251.         $etapsCat1Files[4]['nameFile'] = 'Demande d’ANR Mairie';
  2252.         $etapsCat1Files[4]['nameFileDB'] = 'fileDemandeAnrMarieMultiple';
  2253.         $etapsCat1Files[5]['nameFile'] = 'Demande d’ANR TA';
  2254.         $etapsCat1Files[5]['nameFileDB'] = 'fileDemandeAnrTaMultiple';
  2255.         $etapsCat1Files[6]['nameFile'] = 'Attestation sur l’honneur ANR Mairie / TA';
  2256.         $etapsCat1Files[6]['nameFileDB'] = 'fileAttestationHonneurAnrMairieTaMultiple';
  2257.         $etapsCat1[3]['etapsFiles'] = $etapsCat1Files;
  2258.         $etapsCat1[3]['class'] = 'Etap2Pcm';
  2259.         $etapsCat1[3]['etapsFilesManyToManyName'] = 'etap2Pcm';
  2260.         $etapsCat1FilesManyToMany = [];
  2261.         $etapsCat1FilesManyToMany[1]['nameFile'] = 'PV passage huissier PC/DP ';
  2262.         $etapsCat1FilesManyToMany[1]['nameFileDB'] = 'filePVPassageHuissierPcmMultiple';
  2263.         $etapsCat1FilesManyToMany[2]['nameFile'] = 'Certificat de non-recours (Tribunal Administratif) PC/DP ';
  2264.         $etapsCat1FilesManyToMany[2]['nameFileDB'] = 'fileCertificatNonRecoursPcmMultiple';
  2265.         $etapsCat1FilesManyToMany[3]['nameFile'] = 'Certificat de non-retrait (Mairie) PC/DP ';
  2266.         $etapsCat1FilesManyToMany[3]['nameFileDB'] = 'fileCertificatNonRetraitPcmMultiple';
  2267.         $etapsCat1FilesManyToMany[4]['nameFile'] = 'Demande d’ANR Mairie PC/DP ';
  2268.         $etapsCat1FilesManyToMany[4]['nameFileDB'] = 'fileDemandeAnrMariePcmMultiple';
  2269.         $etapsCat1FilesManyToMany[5]['nameFile'] = 'Demande d’ANR TA PC/DP ';
  2270.         $etapsCat1FilesManyToMany[5]['nameFileDB'] = 'fileDemandeAnrTaPcmMultiple';
  2271.         $etapsCat1FilesManyToMany[6]['nameFile'] = 'Attestation sur l’honneur ANR Mairie / TA PC/DP ';
  2272.         $etapsCat1FilesManyToMany[6]['nameFileDB'] = 'fileAttestationHonneurAnrMairieTaPcmMultiple';
  2273.         $etapsCat1[3]['etapsFilesManyToMany'] = $etapsCat1FilesManyToMany;
  2274.         $etapsCat1[4]['etapNum'] = '3';
  2275.         $etapsCat1[4]['name'] = 'DOC / DROC';
  2276.         $etapsCat1Files = [];
  2277.         $etapsCat1Files[1]['nameFile'] = 'DOC | DROC';
  2278.         $etapsCat1Files[1]['nameFileDB'] = 'fileDocDrocMultiple';
  2279.         $etapsCat1[4]['etapsFiles'] = $etapsCat1Files;
  2280.         $etapsCat1[5]['etapNum'] = '4';
  2281.         $etapsCat1[5]['name'] = 'DAACT';
  2282.         $etapsCat1Files = [];
  2283.         $etapsCat1Files[1]['nameFile'] = 'DAACT';
  2284.         $etapsCat1Files[1]['nameFileDB'] = 'fileDaactMultiple';
  2285.         $etapsCat1Files[2]['nameFile'] = 'CERFA envoyé';
  2286.         $etapsCat1Files[2]['nameFileDB'] = 'fileCerfaEnvoyeMultiple';
  2287.         $etapsCat1Files[3]['nameFile'] = 'LRAR';
  2288.         $etapsCat1Files[3]['nameFileDB'] = 'fileLrarMultiple';
  2289.         $etapsCat1[5]['etapsFiles'] = $etapsCat1Files;
  2290.         $array[1]['etaps'] = $etapsCat1;
  2291.         $etapsCat2 = [];
  2292.         $etapsCat2[1]['etapNum'] = '5';
  2293.         $etapsCat2[1]['name'] = 'Promesse de bail';
  2294.         $etapsCat2Files = [];
  2295.         $etapsCat2Files[1]['nameFile'] = 'Promesse de bail';
  2296.         $etapsCat2Files[1]['nameFileDB'] = 'filePromessebailMultiple';
  2297.         $etapsCat2Files[2]['nameFile'] = 'Levée d’option';
  2298.         $etapsCat2Files[2]['nameFileDB'] = 'fileLeveeOptionMultiple';
  2299.         $etapsCat2Files[3]['nameFile'] = 'Acte de substitution';
  2300.         $etapsCat2Files[3]['nameFileDB'] = 'fileActeSubstitutionMultiple';
  2301.         $etapsCat2Files[4]['nameFile'] = 'LOI';
  2302.         $etapsCat2Files[4]['nameFileDB'] = 'fileLoiMultiple';
  2303.         $etapsCat2Files[5]['nameFile'] = 'Promesse d\'achat';
  2304.         $etapsCat2Files[5]['nameFileDB'] = 'filePromesseAchatMultiple';
  2305.         $etapsCat2[1]['etapsFiles'] = $etapsCat2Files;
  2306.         $etapsCat2[2]['etapNum'] = '6';
  2307.         $etapsCat2[2]['name'] = 'Documents pour annexes de bail';
  2308.         $etapsCat2Files = [];
  2309.         $etapsCat2Files[2]['nameFile'] = 'Etat hypothécaire';
  2310.         $etapsCat2Files[2]['nameFileDB'] = 'fileEtatHypothecaireMultiple';
  2311.         $etapsCat2Files[4]['nameFile'] = 'Titre de propriété';
  2312.         $etapsCat2Files[4]['nameFileDB'] = 'fileTitreProprieteMultiple';
  2313.         $etapsCat2Files[5]['nameFile'] = 'Autres (Cession de bail, projet de bail…) ';
  2314.         $etapsCat2Files[5]['nameFileDB'] = 'fileAutreEtap6';
  2315.         $etapsCat2Files[6]['nameFile'] = 'Statuts';
  2316.         $etapsCat2Files[6]['nameFileDB'] = 'fileStatuts';
  2317.         $etapsCat2Files[7]['nameFile'] = 'Kbis';
  2318.         $etapsCat2Files[7]['nameFileDB'] = 'fileKbis';
  2319.         $etapsCat2Files[8]['nameFile'] = 'Accord ML ';
  2320.         $etapsCat2Files[8]['nameFileDB'] = 'fileAccordMl';
  2321.         $etapsCat2Files[9]['nameFile'] = 'Livret de famille ';
  2322.         $etapsCat2Files[9]['nameFileDB'] = 'fileLivretFamille';
  2323.         $etapsCat2Files[10]['nameFile'] = 'Carte d’identité ';
  2324.         $etapsCat2Files[10]['nameFileDB'] = 'fileCarteIdentite';
  2325.         $etapsCat2Files[11]['nameFile'] = 'Extrait de matrice cadastrale ';
  2326.         $etapsCat2Files[11]['nameFileDB'] = 'fileExtraitMatriceCadastrale';
  2327.         $etapsCat2[2]['etapsFiles'] = $etapsCat2Files;
  2328.         $etapsCat2[3]['etapNum'] = '7';
  2329.         $etapsCat2[3]['name'] = 'Bail signé';
  2330.         $etapsCat2Files = [];
  2331.         $etapsCat2Files[1]['nameFile'] = 'Bail signé (avec l’ensemble des annexes)';
  2332.         $etapsCat2Files[1]['nameFileDB'] = 'fileBailSigneMultiple';
  2333.         $etapsCat2Files[2]['nameFile'] = 'Avenant au Bail';
  2334.         $etapsCat2Files[2]['nameFileDB'] = 'fileAvenantBailMultiple';
  2335.         $etapsCat2Files[3]['nameFile'] = 'Preuve de publications SPF';
  2336.         $etapsCat2Files[3]['nameFileDB'] = 'filePreuvePublicationsSPFMultiple';
  2337.         $etapsCat2[3]['etapsFiles'] = $etapsCat2Files;
  2338.         $etapsCat2[4]['etapNum'] = '601';
  2339.         $etapsCat2[4]['name'] = 'Géomètre ';
  2340.         $etapsCat2Files = [];
  2341.         $etapsCat2Files[1]['nameFile'] = 'DA / EDDV';
  2342.         $etapsCat2Files[1]['nameFileDB'] = 'fileEtatDecriptifMultiple';
  2343.         $etapsCat2Files[2]['nameFile'] = 'Plan de servitudes';
  2344.         $etapsCat2Files[2]['nameFileDB'] = 'filePlanServitudesMultiple';
  2345.         $etapsCat2[4]['etapsFiles'] = $etapsCat2Files;
  2346.         $etapsCat2[5]['etapNum'] = '602';
  2347.         $etapsCat2[5]['name'] = 'Avancement du bail ';
  2348.         $etapsCat2Files = [];
  2349.         $etapsCat2Files[1]['nameFile'] = 'Procuration Bailleur';
  2350.         $etapsCat2Files[1]['nameFileDB'] = 'fileProcurationBailleur';
  2351.         $etapsCat2[5]['etapsFiles'] = $etapsCat2Files;
  2352.         $array[2]['etaps'] = $etapsCat2;
  2353.         $etapsCat3 = [];
  2354.         $etapsCat3[0]['etapNum'] = '80';
  2355.         $etapsCat3[0]['name'] = 'Faisabilité du raccordement';
  2356.         $etapsCat3Files = [];
  2357.         $etapsCat3Files[1]['nameFile'] = 'IPR';
  2358.         $etapsCat3Files[1]['nameFileDB'] = 'fileIPR';
  2359.         $etapsCat3Files[2]['nameFile'] = 'PRAC';
  2360.         $etapsCat3Files[2]['nameFileDB'] = 'filePRAC';
  2361.         $etapsCat3[0]['etapsFiles'] = $etapsCat3Files;
  2362.         $etapsCat3[1]['etapNum'] = '8';
  2363.         $etapsCat3[1]['name'] = 'Création Etablissement secondaire';
  2364.         $etapsCat3Files = [];
  2365.         $etapsCat3Files[1]['nameFile'] = 'Kbis de l’ETS';
  2366.         $etapsCat3Files[1]['nameFileDB'] = 'fileKbisEtsMultiple';
  2367.         $etapsCat3[1]['etapsFiles'] = $etapsCat3Files;
  2368.         $etapsCat3[2]['etapNum'] = '9';
  2369.         $etapsCat3[2]['name'] = 'Date T0';
  2370.         $etapsCat3Files = [];
  2371.         $etapsCat3Files[1]['nameFile'] = 'Mail d’ENEDIS de confirmation';
  2372.         $etapsCat3Files[1]['nameFileDB'] = 'fileMailEnedisConfirmationMultiple';
  2373.         $etapsCat3Files[2]['nameFile'] = 'Demande de raccordement';
  2374.         $etapsCat3Files[2]['nameFileDB'] = 'fileDemandeRaccordementMultiple';
  2375. //        $etapsCat3Files[3]['nameFile'] = 'Garantie bancaire';
  2376. //        $etapsCat3Files[3]['nameFileDB'] = 'fileGarantieBancaireMultiple';
  2377.         $etapsCat3[2]['etapsFiles'] = $etapsCat3Files;
  2378.         $etapsCat3[3]['etapNum'] = '10';
  2379.         $etapsCat3[3]['name'] = 'PTF / CRD';
  2380.         $etapsCat3Files = [];
  2381.         $etapsCat3Files[1]['nameFile'] = 'PTF';
  2382.         $etapsCat3Files[1]['nameFileDB'] = 'filePtfMultiple';
  2383.         $etapsCat3Files[2]['nameFile'] = 'CRD signée';
  2384.         $etapsCat3Files[2]['nameFileDB'] = 'fileCrdSigneeMultiple';
  2385.         $etapsCat3Files[3]['nameFile'] = 'Preuve de virement';
  2386.         $etapsCat3Files[3]['nameFileDB'] = 'filePreuveVirementMultiple';
  2387.         $etapsCat3Files[4]['nameFile'] = 'Avenant CRD';
  2388.         $etapsCat3Files[4]['nameFileDB'] = 'fileAvenantCrdMultiple';
  2389.         $etapsCat3Files[5]['nameFile'] = 'Avenant CRD pour MES ';
  2390.         $etapsCat3Files[5]['nameFileDB'] = 'fileAvenantCrdMesMultiple';
  2391. //        $etapsCat3Files[4]['nameFile'] = 'CRD signée';
  2392. //        $etapsCat3Files[4]['nameFileDB'] = 'fileCrdSigneeSansPtfMultiple';
  2393. //        $etapsCat3Files[5]['nameFile'] = 'Preuve de virement';
  2394. //        $etapsCat3Files[5]['nameFileDB'] = 'filePreuveVirementSansPtfMultiple';
  2395.         $etapsCat3[3]['etapsFiles'] = $etapsCat3Files;
  2396.         $etapsCat3[4]['etapNum'] = '12';
  2397.         $etapsCat3[4]['name'] = 'CEX + CARDi';
  2398.         $etapsCat3Files = [];
  2399.         $etapsCat3Files[1]['nameFile'] = 'CEX signé';
  2400.         $etapsCat3Files[1]['nameFileDB'] = 'fileCexSigneMultiple';
  2401.         $etapsCat3Files[2]['nameFile'] = 'CARDi signé';
  2402.         $etapsCat3Files[2]['nameFileDB'] = 'fileCardiSigneMultiple';
  2403.         $etapsCat3Files[3]['nameFile'] = 'Avenant CARDi';
  2404.         $etapsCat3Files[3]['nameFileDB'] = 'fileAvenantCardiMultiple';
  2405.         $etapsCat3[4]['etapsFiles'] = $etapsCat3Files;
  2406.         $etapsCat3[5]['etapNum'] = '13';
  2407.         $etapsCat3[5]['name'] = 'Consuel';
  2408.         $etapsCat3Files = [];
  2409.         $etapsCat3Files[1]['nameFile'] = 'Consuel';
  2410.         $etapsCat3Files[1]['nameFileDB'] = 'fileConsuelMultiple';
  2411.         $etapsCat3Files[2]['nameFile'] = 'Attestation bureau de contrôle S21';
  2412.         $etapsCat3Files[2]['nameFileDB'] = 'fileAttestationBureauControleMultiple';
  2413.         $etapsCat3Files[3]['nameFile'] = 'DRE';
  2414.         $etapsCat3Files[3]['nameFileDB'] = 'fileDREMultiple';
  2415.         $etapsCat3[5]['etapsFiles'] = $etapsCat3Files;
  2416.         $etapsCat3[6]['etapNum'] = '14';
  2417.         $etapsCat3[6]['name'] = 'Mise en service';
  2418.         $etapsCat3Files = [];
  2419.         $etapsCat3Files[1]['nameFile'] = 'Attestation de mise en service';
  2420.         $etapsCat3Files[1]['nameFileDB'] = 'fileDoeMultiple';
  2421.         $etapsCat3Files[2]['nameFile'] = 'ARPE';
  2422.         $etapsCat3Files[2]['nameFileDB'] = 'fileARPE';
  2423.         $etapsCat3Files[3]['nameFile'] = 'DEIE';
  2424.         $etapsCat3Files[3]['nameFileDB'] = 'fileDEIE';
  2425.         $etapsCat3Files[4]['nameFile'] = 'Attestation S21 (attestation de conformité)';
  2426.         $etapsCat3Files[4]['nameFileDB'] = 'fileAttestationS21Multiple';
  2427.         $etapsCat3[6]['etapsFiles'] = $etapsCat3Files;
  2428. //        $etapsCat3[7]['etapNum'] = '15';
  2429. //        $etapsCat3[7]['name'] = 'Contrat d’achat';
  2430. //        $etapsCat3Files = [];
  2431. //        $etapsCat3Files[1]['nameFile'] = 'Contrat d’achat signé';
  2432. //        $etapsCat3Files[1]['nameFileDB'] = 'fileContratAchatSigneMultiple';
  2433. //        $etapsCat3Files[2]['nameFile'] = 'Attestation de producteur';
  2434. //        $etapsCat3Files[2]['nameFileDB'] = 'fileAttestionProducteurMultiple';
  2435. //        $etapsCat3Files[3]['nameFile'] = 'Attestation de l’installateur';
  2436. //        $etapsCat3Files[3]['nameFileDB'] = 'fileAttestionInstallateurMultiple';
  2437. //        $etapsCat3Files[4]['nameFile'] = 'AR Contrat d’achat';
  2438. //        $etapsCat3Files[4]['nameFileDB'] = 'fileArContratAchatMultiple';
  2439. //        $etapsCat3[7]['etapsFiles'] = $etapsCat3Files;
  2440.         $etapsCat3[8]['etapNum'] = '121';
  2441.         $etapsCat3[8]['name'] = 'Installation PDL';
  2442.         $etapsCat3Files = [];
  2443.         $etapsCat3Files[1]['nameFile'] = 'Installation PDL';
  2444.         $etapsCat3Files[1]['nameFileDB'] = 'fileDocument121Multiple';
  2445.         $etapsCat3[8]['etapsFiles'] = $etapsCat3Files;
  2446.         $array[3]['etaps'] = $etapsCat3;
  2447.         $etapsCat4[0]['etapNum'] = '159';
  2448.         $etapsCat4[0]['name'] = 'Dossier de Consultation';
  2449.         $etapsCat4Files = [];
  2450.         $etapsCat4Files[1]['nameFile'] = 'Visite technique';
  2451.         $etapsCat4Files[1]['nameFileDB'] = 'fileVisiteTechnique159Multiple';
  2452.         $etapsCat4Files[2]['nameFile'] = 'Etude de productible';
  2453.         $etapsCat4Files[2]['nameFileDB'] = 'fileEtudeProductible159Multiple';
  2454.         $etapsCat4Files[3]['nameFile'] = 'Etude de sol';
  2455.         $etapsCat4Files[3]['nameFileDB'] = 'fileGeotechnique159Multiple';
  2456.         $etapsCat4Files[4]['nameFile'] = 'Diagnostic charpente';
  2457.         $etapsCat4Files[4]['nameFileDB'] = 'fileDiagnostiqueCharpente159Multiple';
  2458.         $etapsCat4Files[5]['nameFile'] = 'Design pré-CRD';
  2459.         $etapsCat4Files[5]['nameFileDB'] = 'fileDesignPreCRD159Multiple';
  2460.         $etapsCat4Files[6]['nameFile'] = 'Design post-CRD';
  2461.         $etapsCat4Files[6]['nameFileDB'] = 'fileDesignPostCRD159Multiple';
  2462.         $etapsCat4Files[7]['nameFile'] = 'Plan de masse et de situation avec tranchée';
  2463.         $etapsCat4Files[7]['nameFileDB'] = 'filePlanMasseSituationTranchee159Multiple';
  2464.         $etapsCat4Files[8]['nameFile'] = 'Plan de calepinage';
  2465.         $etapsCat4Files[8]['nameFileDB'] = 'filePlanCalepinage159Multiple';
  2466.         $etapsCat4Files[9]['nameFile'] = 'Schéma unifilaire';
  2467.         $etapsCat4Files[9]['nameFileDB'] = 'fileSchemaUnifilaire159Multiple';
  2468.         $etapsCat4Files[10]['nameFile'] = 'Plans Autocad';
  2469.         $etapsCat4Files[10]['nameFileDB'] = 'filePlansAutocadMultiple';
  2470.         $etapsCat4Files[10]['nameFile'] = 'Plans dwg';
  2471.         $etapsCat4Files[10]['nameFileDB'] = 'filePlansDwgMultiple';
  2472.         $etapsCat4[0]['etapsFiles'] = $etapsCat4Files;
  2473.         $etapsCat4[1]['etapNum'] = '160';
  2474.         $etapsCat4[1]['name'] = 'Informations Techniques';
  2475.         $etapsCat4Files = [];
  2476.         $etapsCat4Files[1]['nameFile'] = 'Diagnostic charpente';
  2477.         $etapsCat4Files[1]['nameFileDB'] = 'fileDiagnostiqueCharpenteMultiple';
  2478.         $etapsCat4Files[2]['nameFile'] = 'Étude de sol';
  2479.         $etapsCat4Files[2]['nameFileDB'] = 'fileEtudeSoleMultiple';
  2480.         $etapsCat4Files[3]['nameFile'] = 'Notices hydrauliques ou études gestion eaux pluviales';
  2481.         $etapsCat4Files[3]['nameFileDB'] = 'fileNoticesHydrauliquesMultiple';
  2482.         $etapsCat4Files[4]['nameFile'] = 'Evaluation carbone des modules';
  2483.         $etapsCat4Files[4]['nameFileDB'] = 'fileEvaluationCarboneModuleMultiple';
  2484.         $etapsCat4Files[5]['nameFile'] = 'Fiche technique modules';
  2485.         $etapsCat4Files[5]['nameFileDB'] = 'fileFicheTechniqueModuleMultiple';
  2486.         $etapsCat4Files[6]['nameFile'] = 'Fiche technique onduleurs';
  2487.         $etapsCat4Files[6]['nameFileDB'] = 'fileFicheTechniqueOnduleurMultiple';
  2488.         $etapsCat4Files[7]['nameFile'] = 'Attestation de bridage';
  2489.         $etapsCat4Files[7]['nameFileDB'] = 'fileAttestationBrigageOnduleurMultiple';
  2490.         $etapsCat4Files[8]['nameFile'] = 'Fiches de garantie onduleur';
  2491.         $etapsCat4Files[8]['nameFileDB'] = 'fileFicheGarantiOnduleurMultiple';
  2492.         $etapsCat4Files[9]['nameFile'] = 'Fiche technique système d’intégration ';
  2493.         $etapsCat4Files[9]['nameFileDB'] = 'fileFicheSystemeIntegrationMultiple';
  2494.         $etapsCat4[1]['etapsFiles'] = $etapsCat4Files;
  2495.         $user = $this->security->getUser();
  2496.         if($user and (!in_array('ROLE_DEV',$user->getRoles()) or !in_array('ROLE_EPC',$user->getRoles()))){
  2497.             $etapsCat4[2]['etapNum'] = '161';
  2498.             $etapsCat4[2]['name'] = 'Devis fournisseurs et sous-traitants';
  2499.             $etapsCat4[3]['etapNum'] = '16';
  2500.             $etapsCat4[3]['name'] = 'Contrat de construction';
  2501.             $etapsCat4[3]['class'] = 'ContratConstruction';
  2502.             $etapsCat4[3]['etapsFilesManyToManyName'] = 'contratConstruction';
  2503.             $etapsCat4FilesManyToMany = [];
  2504.             $etapsCat4FilesManyToMany[1]['nameFile'] = 'Contrat de construction';
  2505.             $etapsCat4FilesManyToMany[1]['nameFileDB'] = 'fileContratEpcMultiple';
  2506.             $etapsCat4FilesManyToMany[2]['nameFile'] = 'Annexes (fiches techniques…)';
  2507.             $etapsCat4FilesManyToMany[2]['nameFileDB'] = 'fileAnnexesMultiple';
  2508.             $etapsCat4FilesManyToMany[3]['nameFile'] = 'Demande d’agrément';
  2509.             $etapsCat4FilesManyToMany[3]['nameFileDB'] = 'fileDemandeAgrementMultiple';
  2510.             $etapsCat4[3]['etapsFilesManyToMany'] = $etapsCat4FilesManyToMany;
  2511. //            $etapsCat4Files = [];
  2512. //            $etapsCat4Files[1]['nameFile'] = 'Contrat EPC';
  2513. //            $etapsCat4Files[1]['nameFileDB'] = 'fileContratEpcMultiple';
  2514. //            $etapsCat4Files[2]['nameFile'] = 'Annexes (fiches techniques…)';
  2515. //            $etapsCat4Files[2]['nameFileDB'] = 'fileAnnexesMultiple';
  2516. //            $etapsCat4[3]['etapsFiles'] = $etapsCat4Files;
  2517.             $etapsCat4[4]['etapNum'] = '171';
  2518.             $etapsCat4[4]['name'] = 'Pré-requis avant démarage de la construction';
  2519.             $etapsCat4Files = [];
  2520.             $etapsCat4Files[1]['nameFile'] = 'PV de démarrage';
  2521.             $etapsCat4Files[1]['nameFileDB'] = 'filePVDemarrageMultiple';
  2522.             $etapsCat4Files[2]['nameFile'] = 'DOC';
  2523.             $etapsCat4Files[2]['nameFileDB'] = 'fileDocEtap171Multiple';
  2524.             $etapsCat4Files[3]['nameFile'] = 'Ordre de service';
  2525.             $etapsCat4Files[3]['nameFileDB'] = 'fileOrderServiceMultiple';
  2526.             $etapsCat4Files[4]['nameFile'] = 'Planning prévisionnel ';
  2527.             $etapsCat4Files[4]['nameFileDB'] = 'filePlanningPrevisionnelMultiple';
  2528.             $etapsCat4Files[5]['nameFile'] = 'PGC';
  2529.             $etapsCat4Files[5]['nameFileDB'] = 'filePGCMultiple';
  2530.             $etapsCat4Files[6]['nameFile'] = 'Rapport de visite SPS';
  2531.             $etapsCat4Files[6]['nameFileDB'] = 'fileRapportVisiteSpsMultiple';
  2532.             $etapsCat4Files[7]['nameFile'] = 'DIUO';
  2533.             $etapsCat4Files[7]['nameFileDB'] = 'fileDIUOMultiple';
  2534.             $etapsCat4Files[8]['nameFile'] = 'Rapport de mission L/LE';
  2535.             $etapsCat4Files[8]['nameFileDB'] = 'fileMissionLLEMultiple';
  2536.             $etapsCat4Files[9]['nameFile'] = 'Harmonisation';
  2537.             $etapsCat4Files[9]['nameFileDB'] = 'fileHarmonisationMultiple';
  2538.             $etapsCat4Files[10]['nameFile'] = 'PPSPS';
  2539.             $etapsCat4Files[10]['nameFileDB'] = 'filePPSPSMultiple';
  2540.             $etapsCat4Files[11]['nameFile'] = 'Photos de la plateforme';
  2541.             $etapsCat4Files[11]['nameFileDB'] = 'filePhotosPlateformeMultiple';
  2542.             $etapsCat4[4]['etapsFiles'] = $etapsCat4Files;
  2543.             $etapsCat4[5]['etapNum'] = '172';
  2544.             $etapsCat4[5]['name'] = 'LOT Génie civil et fondations';
  2545.             $etapsCat4Files = [];
  2546.             $etapsCat4Files[1]['nameFile'] = 'Note de calcul béton et féraillage';
  2547.             $etapsCat4Files[1]['nameFileDB'] = 'fileNoteCalculBetonFeraillageMultiple';
  2548.             $etapsCat4Files[2]['nameFile'] = 'Plan implantation bâtiment avec dalle béton du local onduleur';
  2549.             $etapsCat4Files[2]['nameFileDB'] = 'filePlanImplantationBatimentAvecDalleBetonMultiple';
  2550.             $etapsCat4Files[3]['nameFile'] = 'PV de réception ';
  2551.             $etapsCat4Files[3]['nameFileDB'] = 'filePVReceptionMultiple';
  2552.             $etapsCat4Files[4]['nameFile'] = 'Fondations terminées';
  2553.             $etapsCat4Files[4]['nameFileDB'] = 'fileFondationTermineesMultiple';
  2554.             $etapsCat4Files[5]['nameFile'] = 'Dalle béton shelter';
  2555.             $etapsCat4Files[5]['nameFileDB'] = 'fileDalleBetonShelterMultiple';
  2556.             $etapsCat4Files[6]['nameFile'] = 'Chemin d’accès';
  2557.             $etapsCat4Files[6]['nameFileDB'] = 'fileCheminAccesMultiple';
  2558.             $etapsCat4Files[7]['nameFile'] = 'Photos de la plateforme';
  2559.             $etapsCat4Files[7]['nameFileDB'] = 'filePhotosPlateformeMultiple';
  2560.             $etapsCat4[5]['etapsFiles'] = $etapsCat4Files;
  2561.             $etapsCat4[6]['etapNum'] = '173';
  2562.             $etapsCat4[6]['name'] = 'LOT Charpente et couverture / bardage';
  2563.             $etapsCat4Files = [];
  2564.             $etapsCat4Files[1]['nameFile'] = 'Notes de calcul charpente';
  2565.             $etapsCat4Files[1]['nameFileDB'] = 'fileNoteCalculCharpente173Multiple';
  2566. //            $etapsCat4Files[2]['nameFile'] = 'Photos de renforcement charpente';
  2567. //            $etapsCat4Files[2]['nameFileDB'] = 'filePhotoRenforcementcharpente173Multiple';
  2568.             $etapsCat4Files[3]['nameFile'] = 'Plan de bardage';
  2569.             $etapsCat4Files[3]['nameFileDB'] = 'fileOssatureSecondaireBardage173Multiple';
  2570. //            $etapsCat4Files[4]['nameFile'] = 'Photos de renforcement des bardages';
  2571. //            $etapsCat4Files[4]['nameFileDB'] = 'filePhotoRenforcementBardage173Multiple';
  2572.             $etapsCat4Files[5]['nameFile'] = 'PV réception lot charpente / couverture / bardage';
  2573.             $etapsCat4Files[5]['nameFileDB'] = 'filePVreception173Multiple';
  2574. //            $etapsCat4Files[6]['nameFile'] = 'Photos de renforcement de la couverture terminée';
  2575. //            $etapsCat4Files[6]['nameFileDB'] = 'filePhotoRenforcementCouvertureTermine173Multiple';
  2576.             $etapsCat4Files[6]['nameFile'] = 'Plans de charpente';
  2577.             $etapsCat4Files[6]['nameFileDB'] = 'filePlansCharpente173Multiple';
  2578.             $etapsCat4Files[7]['nameFile'] = 'Plans de charpente signé par le bailleur';
  2579.             $etapsCat4Files[7]['nameFileDB'] = 'filePlansCharpente173SigneMultiple';
  2580. //            $etapsCat4Files[8]['nameFile'] = 'Vues 3D';
  2581. //            $etapsCat4Files[8]['nameFileDB'] = 'fileVues3d173Multiple';
  2582. //            $etapsCat4Files[9]['nameFile'] = 'Plan de couverture';
  2583. //            $etapsCat4Files[9]['nameFileDB'] = 'filePlanCouverture173Multiple';
  2584. //            $etapsCat4Files[10]['nameFile'] = 'Plan et descriptifs des travaux de renforcement de charpente';
  2585. //            $etapsCat4Files[10]['nameFileDB'] = 'filePlanDescriptionTravauxRenforcementCharpente173Multiple';
  2586. //            $etapsCat4Files[11]['nameFile'] = 'Plan et descriptifs des travaux de dépose/ repose de couverture';
  2587. //            $etapsCat4Files[11]['nameFileDB'] = 'filePlanDescriptionTravauxDeposeCouverture173Multiple';
  2588.             $etapsCat4[6]['etapsFiles'] = $etapsCat4Files;
  2589.             $etapsCat4[7]['etapNum'] = '174';
  2590.             $etapsCat4[7]['name'] = 'LOT photovoltaïque et élec';
  2591.             $etapsCat4Files = [];
  2592.             $etapsCat4Files[1]['nameFile'] = 'Plan de calepinage / câblage';
  2593.             $etapsCat4Files[1]['nameFileDB'] = 'filePlanCalepinageModule174Multiple';
  2594. //            $etapsCat4Files[2]['nameFile'] = 'Plan de câblage des strings';
  2595. //            $etapsCat4Files[2]['nameFileDB'] = 'filePlanCaplageStrings174Multiple';
  2596.             $etapsCat4Files[3]['nameFile'] = 'Note de calcul sous Lise PV ';
  2597.             $etapsCat4Files[3]['nameFileDB'] = 'fileNoteCalculSousLisePV174Multiple';
  2598.             $etapsCat4Files[4]['nameFile'] = 'Schéma Unifilaire de l’installation';
  2599.             $etapsCat4Files[4]['nameFileDB'] = 'fileSchemaUnifilaireInstallation174Multiple';
  2600.             $etapsCat4Files[5]['nameFile'] = 'Schéma d’agencement du shelter ou photos';
  2601.             $etapsCat4Files[5]['nameFileDB'] = 'fileShemaAgencementShelterPhotos174Multiple';
  2602. //            $etapsCat4Files[6]['nameFile'] = 'Test de PR à la mise en service';
  2603. //            $etapsCat4Files[6]['nameFileDB'] = 'fileTestPrMiseService174Multiple';
  2604.             $etapsCat4Files[7]['nameFile'] = 'Schéma unifilaire du système de monitoring';
  2605.             $etapsCat4Files[7]['nameFileDB'] = 'fileShemaUnifilaireSystemeMonitoring174Multiple';
  2606.             $etapsCat4Files[8]['nameFile'] = 'Tests et vérifications des travaux électriques, fiche d’auto-contrôle de l’installateur';
  2607.             $etapsCat4Files[8]['nameFileDB'] = 'fileTestVerificationTravauxElectriqueFiche174Multiple';
  2608.             $etapsCat4Files[9]['nameFile'] = 'PV de réception lot photovoltaïque/ élec / AMO';
  2609.             $etapsCat4Files[9]['nameFileDB'] = 'filePVReception174Multiple';
  2610.             $etapsCat4Files[10]['nameFile'] = 'Photos de la centrale solaire';
  2611.             $etapsCat4Files[10]['nameFileDB'] = 'filePhotosGenerateur174Multiple';
  2612.             $etapsCat4Files[11]['nameFile'] = 'Pv terminées';
  2613.             $etapsCat4Files[11]['nameFileDB'] = 'filePvTerminees174Multiple';
  2614.             $etapsCat4Files[12]['nameFile'] = 'Descentes de câbles';
  2615.             $etapsCat4Files[12]['nameFileDB'] = 'fileDescentesCables174Multiple';
  2616.             $etapsCat4Files[13]['nameFile'] = 'Raccordement du local onduleur';
  2617.             $etapsCat4Files[13]['nameFileDB'] = 'fileRaccordementLocalOnduleur174Multiple';
  2618.             $etapsCat4[7]['etapsFiles'] = $etapsCat4Files;
  2619.             $etapsCat4[8]['etapNum'] = '175';
  2620.             $etapsCat4[8]['name'] = 'LOT Raccordement, liaison PDL';
  2621.             $etapsCat4Files = [];
  2622.             $etapsCat4Files[1]['nameFile'] = 'Notes de calcul des câbles AC de la liaison';
  2623.             $etapsCat4Files[1]['nameFileDB'] = 'fileNoteCalculCableAcLiaison175Multiple';
  2624.             $etapsCat4Files[2]['nameFile'] = 'Plans de la tranchée (coupe et plan de localisation)';
  2625.             $etapsCat4Files[2]['nameFileDB'] = 'filePlanTranchee175Multiple';
  2626. //            $etapsCat4Files[3]['nameFile'] = 'DAACT : cerfa signé tamponné mairie';
  2627. //            $etapsCat4Files[3]['nameFileDB'] = 'fileDaact175Multiple';
  2628. //            $etapsCat4Files[4]['nameFile'] = 'PV de réception';
  2629. //            $etapsCat4Files[4]['nameFileDB'] = 'filePVReception175Multiple';
  2630. //            $etapsCat4Files[5]['nameFile'] = 'Photos de la liaison terminée';
  2631. //            $etapsCat4Files[5]['nameFileDB'] = 'filePhotosLiaisonTerminee175Multiple';
  2632.             $etapsCat4[8]['etapsFiles'] = $etapsCat4Files;
  2633.         }
  2634.         $etapsCat4[9]['etapNum'] = '20';
  2635.         $etapsCat4[9]['name'] =  'Consuel';
  2636.         $etapsCat4Files = [];
  2637.         $etapsCat4Files[1]['nameFile'] = 'Consuel';
  2638.         $etapsCat4Files[1]['nameFileDB'] = 'fileConsuelEtap20Multiple';
  2639.         $etapsCat4[9]['etapsFiles'] = $etapsCat4Files;
  2640.         $etapsCat4[10]['etapNum'] = '21';
  2641.         $etapsCat4[10]['name'] =  'Raccordement et tests de réception';
  2642.         $etapsCat4Files = [];
  2643.         $etapsCat4Files[1]['nameFile'] = 'Tests de réception';
  2644.         $etapsCat4Files[1]['nameFileDB'] = 'fileTestReceptionMultiple';
  2645.         $etapsCat4[10]['etapsFiles'] = $etapsCat4Files;
  2646.         $etapsCat4[11]['etapNum'] = '22';
  2647.         $etapsCat4[11]['name'] =  'Tests de PR à 2 ans';
  2648.         $etapsCat4Files = [];
  2649.         $etapsCat4Files[1]['nameFile'] = 'Tests de PR';
  2650.         $etapsCat4Files[1]['nameFileDB'] = 'fileTestPrMultiple';
  2651.         $etapsCat4[11]['etapsFiles'] = $etapsCat4Files;
  2652.         $etapsCat4[12]['etapNum'] = '201';
  2653.         $etapsCat4[12]['name'] =  'Dossier des Ouvrages Exécutés (DOE)';
  2654.         $etapsCat4Files = [];
  2655.         $etapsCat4Files[1]['nameFile'] = 'DOE';
  2656.         $etapsCat4Files[1]['nameFileDB'] = 'fileDoeEtap201Multiple';
  2657.         $etapsCat4[12]['etapsFiles'] = $etapsCat4Files;
  2658. //        $etapsCat4[13]['etapNum'] = '23';
  2659. //        $etapsCat4[13]['name'] = 'Compte-rendus';
  2660. //        $etapsCat4[13]['class'] = 'VisiteTerrain';
  2661. //        $etapsCat4[13]['etapsFilesManyToManyName'] = 'visiteTerrain';
  2662. //        $etapsCat4FilesManyToMany = [];
  2663. //        $etapsCat4FilesManyToMany[1]['nameFile'] = 'compte-rendus';
  2664. //        $etapsCat4FilesManyToMany[1]['nameFileDB'] = 'fileCompteRendusMultiple';
  2665. //        $etapsCat4FilesManyToMany[2]['nameFile'] = 'pré-visites';
  2666. //        $etapsCat4FilesManyToMany[2]['nameFileDB'] = 'filePreVisiteMultiple';
  2667. //        $etapsCat4FilesManyToMany[3]['nameFile'] = 'photos visite terrain';
  2668. //        $etapsCat4FilesManyToMany[3]['nameFileDB'] = 'filePhotosVisiteTerainMultiple';
  2669. //        $etapsCat4[13]['etapsFilesManyToMany'] = $etapsCat4FilesManyToMany;
  2670.         $array[4]['etaps'] = $etapsCat4;
  2671.         $etapsCat5 = [];
  2672.         $etapsCat5[1]['etapNum'] = '5';
  2673.         $etapsCat5[1]['name'] = 'Promesse de bail';
  2674.         $etapsCat2Files = [];
  2675.         $etapsCat2Files[1]['nameFile'] = 'Promesse de bail';
  2676.         $etapsCat2Files[1]['nameFileDB'] = 'filePromessebailMultiple';
  2677.         $etapsCat2Files[2]['nameFile'] = 'Levée d’option';
  2678.         $etapsCat2Files[2]['nameFileDB'] = 'fileLeveeOptionMultiple';
  2679.         $etapsCat2Files[3]['nameFile'] = 'Acte de substitution';
  2680.         $etapsCat2Files[3]['nameFileDB'] = 'fileActeSubstitutionMultiple';
  2681.         $etapsCat2Files[4]['nameFile'] = 'LOI';
  2682.         $etapsCat2Files[4]['nameFileDB'] = 'fileLoiMultiple';
  2683.         $etapsCat2Files[5]['nameFile'] = 'Promesse d\'achat';
  2684.         $etapsCat2Files[5]['nameFileDB'] = 'filePromesseAchatMultiple';
  2685.         $etapsCat2[1]['etapsFiles'] = $etapsCat2Files;
  2686.         $etapsCat5 = [];
  2687.         $etapsCat5[1]['etapNum'] = '25';
  2688.         $etapsCat5[1]['name'] = 'Avancée de la valorisation';
  2689.         $etapsCat5Files = [];
  2690.         $etapsCat5[1]['class'] = 'Etap24Champs';
  2691.         $etapsCat5[1]['etapsFilesManyToManyName'] = 'etap24Champs';
  2692.         $etapsCat5FilesManyToMany = [];
  2693.         $etapsCat5FilesManyToMany[1]['nameFile'] = 'Demande de raccordement ';
  2694.         $etapsCat5FilesManyToMany[1]['nameFileDB'] = 'fileDemandeRaccordementEtap25Multiple';
  2695.         $etapsCat5FilesManyToMany[2]['nameFile'] = 'Mail d’ENEDIS de confirmation';
  2696.         $etapsCat5FilesManyToMany[2]['nameFileDB'] = 'fileMailEnedisConfirmationEtap25Multiple';
  2697.         $etapsCat5FilesManyToMany[3]['nameFile'] = 'Garantie bancaire';
  2698.         $etapsCat5FilesManyToMany[3]['nameFileDB'] = 'fileGarantieBancaireEtap25Multiple';
  2699.         $etapsCat5FilesManyToMany[4]['nameFile'] = 'Récépissé demande AO';
  2700.         $etapsCat5FilesManyToMany[4]['nameFileDB'] = 'fileRecepisseDemandeAoMultiple';
  2701.         $etapsCat5FilesManyToMany[5]['nameFile'] = 'Lettre de lauréat';
  2702.         $etapsCat5FilesManyToMany[5]['nameFileDB'] = 'fileLettreLaureaMultiple';
  2703.         $etapsCat5[1]['etapsFiles'] = $etapsCat5Files;
  2704.         $etapsCat5[1]['etapsFilesManyToMany'] = $etapsCat5FilesManyToMany;
  2705.         $etapsCat5[2]['etapNum'] = '26';
  2706.         $etapsCat5[2]['name'] = 'Contrat d’achat';
  2707.         $etapsCat5Files = [];
  2708.         $etapsCat5[2]['class'] = 'Etap24Champs';
  2709.         $etapsCat5[2]['etapsFilesManyToManyName'] = 'etap24Champs';
  2710.         $etapsCat5[2]['class2'] = 'Etap26Champs';
  2711.         $etapsCat5[2]['etapsFilesManyToManyName2'] = 'etap26Champs';
  2712.         $etapsCat5FilesManyToMany = [];
  2713.         $etapsCat5FilesManyToMany[1]['nameFile'] = 'Contrat d’achat signé';
  2714.         $etapsCat5FilesManyToMany[1]['nameFileDB'] = 'fileContratAchatSigneEtap25Multiple';
  2715.         $etapsCat5FilesManyToMany[2]['nameFile'] = 'Attestation de producteur';
  2716.         $etapsCat5FilesManyToMany[2]['nameFileDB'] = 'fileAttestionProducteurEtap25Multiple';
  2717.         $etapsCat5FilesManyToMany[3]['nameFile'] = 'Attestation de l’installateur';
  2718.         $etapsCat5FilesManyToMany[3]['nameFileDB'] = 'fileAttestionInstallateurEtap25Multiple';
  2719.         $etapsCat5FilesManyToMany[4]['nameFile'] = 'AR Contrat d’achat';
  2720.         $etapsCat5FilesManyToMany[4]['nameFileDB'] = 'fileArContratAchatEtap25Multiple';
  2721.         $etapsCat5[2]['etapsFiles'] = $etapsCat5Files;
  2722.         $etapsCat5[2]['etapsFilesManyToMany'] = [];
  2723.         $etapsCat5[2]['etapsFilesManyToMany2'] = $etapsCat5FilesManyToMany;
  2724.         $array[5]['etaps'] = $etapsCat5;
  2725.         return $array;
  2726.     }
  2727.     public function paginateAlert($request,$isArchive=false){
  2728.         $length = $request->get('length');
  2729.         $length = $length && ($length!=-1)?$length:0;
  2730.         $start = $request->get('start');
  2731.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  2732.         $column =  $search = $request->get('columns');
  2733.         $order = $request->get('order')[0];
  2734.         $columnOrder = $order['column'];
  2735.         $dirOrder = $order['dir'];
  2736.         $columNameOrder = $column[$columnOrder]['data'];
  2737.         $search = $request->get('search');
  2738.         $typeAlert = $request->get('typeAlert');
  2739.         $devProject = $request->get('devProject');
  2740.         $searchDate = $request->get('searchDate');
  2741.         $user = $this->security->getUser();
  2742.         $roles = $user->getRoles();
  2743.         $spvsTab = [];
  2744.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  2745.             $spvs = $user->getSpv();
  2746.             foreach($spvs as $item){
  2747.                 $spvsTab[] = $item->getId();
  2748.             }
  2749.         }
  2750.         $filters = [
  2751.             'query' => trim(@$search['value']),
  2752.             'spvsTab' => $spvsTab,
  2753.             'devProject' => $devProject,
  2754.             'typeAlert' => $typeAlert,
  2755.             'searchDate' => $searchDate,
  2756.             'user' => $user
  2757.         ];
  2758.         $alerts= $this->em->getRepository(\App\Entity\Alert::class)->search($isArchive,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  2759.         $recordsFiltered= $this->em->getRepository(\App\Entity\Alert::class)->search($isArchive,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  2760.         $recordsTotal= $this->em->getRepository(\App\Entity\Alert::class)->search($isArchive,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  2761.         $output = array(
  2762.             'data' => array(),
  2763.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  2764.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  2765.         );
  2766.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  2767.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  2768.         foreach ($alerts as $alert) {
  2769.             $etapCat2 = null;
  2770.             if($alert->getTypeAlert() == Alert::ALERT_BAIL){
  2771.                 $typeAlert = 'Promesse de bail' ;
  2772.                 $etapCat2 = $this->getEtapByNumAndProject(Etaps::ETAP_5, $alert->getProject());
  2773.             }elseif ($alert->getTypeAlert() == Alert::ALERT_PC_CONSUEL){
  2774.                 $typeAlert = 'PC/DP' ;
  2775.                 $etapCat2 = $this->getEtapByNumAndProject(Etaps::ETAP_13, $alert->getProject());
  2776.             }elseif ($alert->getTypeAlert() == Alert::ALERT_T0){
  2777.                 $typeAlert = 'Date de T0 - Date limite d’achèvement' ;
  2778.                 $etapCat2 = $this->getEtapByNumAndProject(Etaps::ETAP_13, $alert->getProject());
  2779.             }elseif ($alert->getTypeAlert() == Alert::ALERT_Etap1And2){
  2780.                 $typeAlert = 'Avancement étape 1 et étape 2 timeline urbanisme' ;
  2781.                 $etapCat2 = $this->getEtapByNumAndProject(Etaps::ETAP_1, $alert->getProject());
  2782.             }else{
  2783.                 $typeAlert = '';
  2784.             }
  2785.             $action =
  2786.                 $this->twig->render(
  2787.                     'admin/alert/default/bouton.html.twig', array(
  2788.                     'alert' => $alert,
  2789.                     'user' => $user
  2790.                 ));
  2791.             $btnSelect =
  2792.                 $this->twig->render(
  2793.                     'admin/alert/default/btnSelect.html.twig', array(
  2794.                     'alert' => $alert
  2795.                 ));
  2796.             $status =
  2797.                 $this->twig->render(
  2798.                     'admin/alert/default/status.html.twig', array(
  2799.                     'alert' => $alert
  2800.                 ));
  2801.             $urlShow = null;
  2802.             if ($etapCat2) {
  2803.                 $params = [
  2804.                     'token'    => $alert->getProject()->getToken(),
  2805.                     'tokenEtap'=> $etapCat2->getToken(),
  2806.                     'etapNum'  => $etapCat2->getEtap()->getNum(),
  2807.                 ];
  2808.                 if ($this->security->isGranted('ROLE_SUPER_ADMINISTRATOR', $user) || $this->security->isGranted('ROLE_ADMIN', $user)) {
  2809.                     $urlShow = $this->router->generate('admin_project_etaps_view', $params);
  2810.                 } elseif ($this->security->isGranted('ROLE_EPC', $user) || $this->security->isGranted('ROLE_DEV', $user)) {
  2811.                     $urlShow = $this->router->generate('user_project_etaps_view', $params);
  2812.                 } elseif ($this->security->isGranted('ROLE_GESTION_FINANCIER', $user)) {
  2813.                     $urlShow = $this->router->generate('gestionnaire_financier_project_etaps_view', $params);
  2814.                 } elseif ($this->security->isGranted('ROLE_ADMINISTRATEUR_FINANCIER', $user) || $this->security->isGranted('ROLE_OPERATEUR_FINANCIER', $user)) {
  2815.                     $urlShow = $this->router->generate('gestionnaire_financier_project_etaps_view', $params);
  2816.                 }
  2817.             }
  2818.             $output['data'][] = [
  2819.                 'responsive_id' => '',
  2820.                 'id' => $alert->getId(),
  2821.                 'project' => "<a style='color: #4A4A68 !important; href='".$urlShow."'>".$alert->getProject()->getName()."</a>",
  2822.                 'spv' => $alert->getProject()->getSpv()?$alert->getProject()->getSpv()->getName():'',
  2823.                 'status' => $status,
  2824.                 'typeAlert' => $typeAlert,
  2825.                 'dateLimit' => $alert->getDateLimit()  ? $alert->getDateLimit()->format('d/m/Y') : '',
  2826.                 'delaiRestant' => $this->delaiRestantDateExpirationPromesseBail($alert),
  2827.                 'btnSelect' => $btnSelect,
  2828.                 'action' => $action,
  2829.                 'urlShow' => $urlShow
  2830.             ];
  2831.         }
  2832.         return $output;
  2833.     }
  2834.     public function addStyleToCellDate($cell,$row,$string,$spreadsheet){
  2835.         if($string){
  2836.             $spreadsheet->getActiveSheet()->setCellValue($cell.$row,Date::PHPToExcel($string->format('d/m/Y')) );
  2837.             $spreadsheet->getActiveSheet()->getStyle($cell.$row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);
  2838.         }else{
  2839.             $spreadsheet->getActiveSheet()->setCellValue($cell.$row,'-' );
  2840.         }
  2841.         return $spreadsheet;
  2842.     }
  2843.     public function extractAlerts($alerts,$request){
  2844.         $file= $this->params->get('zips_directory')."/extraire_alert.xlsx";
  2845.         $spreadsheet = new Spreadsheet();
  2846.         $sheet = $spreadsheet->getActiveSheet();
  2847.         // Head 2
  2848.         $tableHead2 = [
  2849.             'font'=>[
  2850.                 'color'=>[
  2851.                     'rgb'=>'0071c1'
  2852.                 ],
  2853.                 'bold'=>true,
  2854.                 'size'=>12
  2855.             ],
  2856.             'fill'=>[
  2857.                 'fillType' => Fill::FILL_SOLID,
  2858.                 'startColor' => [
  2859.                     'rgb' => 'dcebf4'
  2860.                 ]
  2861.             ],
  2862.         ];
  2863.         $sheet->setCellValue('A1',"Projet")
  2864.             ->setCellValue('B1',"SPV")
  2865.             ->setCellValue('C1',"Développeur")
  2866.             ->setCellValue('D1',"Capacité")
  2867.             ->setCellValue('E1',"Typologie")
  2868.             ->setCellValue('F1',"Type d'alerte")
  2869.             ->setCellValue('G1',"Délai restant")
  2870.             ->setCellValue('H1',"Date limite")
  2871.             ->setCellValue('I1',"Date PDB")
  2872.             ->setCellValue('J1',"Délai PDB")
  2873.             ->setCellValue('K1',"Date T0")
  2874.             ->setCellValue('L1',"Date arrêté PC/Dp")
  2875.             ->setCellValue('M1',"Statut administratif")
  2876.             ->setCellValue('N1',"Statut tracker");
  2877.         // Borders a2 z2
  2878.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2879.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2880.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2881.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2882.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2883.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2884.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2885.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2886.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2887.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2888.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2889.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2890.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2891.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2892.         //width
  2893.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
  2894.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  2895.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  2896.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  2897.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  2898.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  2899.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(30);
  2900.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(16);
  2901.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(20);
  2902.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  2903.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(20);
  2904.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(30);
  2905.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(30);
  2906.         $spreadsheet->getActiveSheet()->getStyle('A1:N1')->applyFromArray($tableHead2);
  2907.         //loop through the data
  2908.         //current row
  2909.         $row=2;
  2910.         foreach($alerts as $item){
  2911.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$item->getProject()->getId()]);
  2912.             $etap9 = $this->em->getRepository(Etap9::class)->findOneBy(['project'=>$item->getProject()->getId()]);
  2913.             $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project'=>$item->getProject()->getId()]);
  2914.             $spreadsheet->getActiveSheet()
  2915.                 ->setCellValue('A'.$row , $item->getProject()->getName())
  2916.                 ->setCellValue('B'.$row , $item->getProject()->getSpv()?$item->getProject()->getSpv()->getName():'')
  2917.                 ->setCellValue('C'.$row , $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().''.$item->getProject()->getDeveloppeur()->getLastname():'')
  2918.                 ->setCellValue('D'.$row , $item->getProject()->getCapacite())
  2919.                 ->setCellValue('E'.$row , $item->getProject()->getTypologieProject()?$item->getProject()->getTypologieProject()->getName():'')
  2920.                 ->setCellValue('F'.$row , $item->getTypeAlertStr())
  2921.                 ->setCellValue('G'.$row , $this->delaiRestantDateExpirationPromesseBail($item))
  2922.                 ->setCellValue('M'.$row , $item->getProject()->getStatusAdministratifNum())
  2923.                 ->setCellValue('N'.$row ,  $item->getProject()->getStatusTrackerStr())
  2924.             ;
  2925.             $spreadsheet = $this->addStyleToCellDate('H',$row,$item->getDateLimit(),$spreadsheet);
  2926.             $dateExpirationPromesseBail = $etap5->getDateExpirationPromesseBail();
  2927.             $nbr = (int)$etap5->getD1() + (int)$etap5->getD2() ;
  2928.             if($nbr == 0){
  2929.                 $nbr = 24;
  2930.             }
  2931.             $spreadsheet = $this->addStyleToCellDate('I',$row,$dateExpirationPromesseBail,$spreadsheet);
  2932.             $spreadsheet->getActiveSheet()->setCellValue('J'.$row , $nbr.' mois');
  2933.             $spreadsheet = $this->addStyleToCellDate('K',$row,$etap9->getDateT0(),$spreadsheet);
  2934.             $spreadsheet = $this->addStyleToCellDate('L',$row,$etap1->getDateArretePcDp(),$spreadsheet);
  2935.             //increment row
  2936.             $row++;
  2937.         }
  2938.         $firstRow=1;
  2939.         $lastRow=$row-1;
  2940.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":N".$lastRow);
  2941.         $writer = new Xlsx($spreadsheet);
  2942.         $writer->save($file);
  2943.         return $file;
  2944.     }
  2945.     public function delaiRestantDateExpirationPromesseBail($alert){
  2946.         $str = '-';
  2947.         if(is_object($alert)){
  2948.             $dateLimit = $alert->getDateLimit();
  2949.             $dateTime = new \DateTime('now');
  2950.             if($dateLimit >= $dateTime){
  2951.                 $interval = $dateTime->diff($dateLimit);
  2952.                 $str = $this->formatInterval($interval);
  2953.             }else{
  2954.                 $str = '-';
  2955.             }
  2956.         }
  2957.         return $str;
  2958.     }
  2959.     public function formatInterval($interval){
  2960.         $str = '';
  2961.         if(is_object($interval)){
  2962.             $days = $interval->d;
  2963.             $mounths = $interval->m;
  2964.             $years = $interval->y;
  2965.             $hours = $interval->h;
  2966.             $strDay = '' ;
  2967.             $strMounth = '' ;
  2968.             $strYear = '' ;
  2969.             $strh = '' ;
  2970.             if($days && $days > 0){
  2971.                 $strDay = ' '.$days." jours";
  2972.             }
  2973.             if($mounths && $mounths > 0){
  2974.                 $strMounth = ' '.$mounths." mois";
  2975.             }
  2976.             if($years && $years > 0){
  2977.                 $strYear = ' '.$years." an";
  2978.             }
  2979.             if($hours && $hours > 0){
  2980.                 $strh = ' '." 1 jour";
  2981.             }
  2982.             $str = $strYear.$strMounth.$strDay;
  2983.             if(empty($str)){
  2984.                 $str = $strh;
  2985.             }
  2986.         }
  2987.         return $str;
  2988.     }
  2989.     public function importProjects($filename)
  2990.     {
  2991.         $file = $this->params->get('uploads_directory')."/".$filename;
  2992.         $array = [];
  2993.         $f = fopen($file, "r");
  2994.         $flag = true;
  2995.         $i = 0;
  2996.         $header = [];
  2997.         while (($line = fgetcsv($f,0,";")) !== false) {
  2998.             if($flag) {
  2999.                 $header = [];
  3000.                 foreach ($line as $key1 => $cell) {
  3001.                     $header[] =  mb_convert_encoding(trim($cell), 'UTF-8', 'ISO-8859-1');
  3002.                 }
  3003.                 $flag = false;
  3004.                 continue;
  3005.             }
  3006.             foreach ($line as $key => $cell) {
  3007.                 $array[$i][$header[$key]]=  mb_convert_encoding(trim($cell), 'UTF-8', 'ISO-8859-1');
  3008.             }
  3009.             $i++ ;
  3010.         }
  3011.         fclose($f);
  3012.         foreach ($array as &$item){
  3013.             $item['project'] = 0;
  3014.             if(isset($item['Nom du projet'])){
  3015.                 $name = $item['Nom du projet'];
  3016.                 $project = $this->em->getRepository(Project::class)->findOneBy(['name'=>$name]);
  3017.                 if($project){
  3018.                     $item['project'] = $project->getId();
  3019.                     $item['action'] = 1;
  3020.                 }
  3021.                 else{
  3022.                     $item['action'] = 0;
  3023.                 }
  3024.             }else{
  3025.                 $item['action'] = 0;
  3026.             }
  3027.         }
  3028.         return ['headerTab' => $header,'bodyTab'=>$array];
  3029.     }
  3030.     public function importProjectsSubmit($object)
  3031.     {
  3032.         foreach (json_decode($object) as $item){
  3033.             if($item->project->id != 0){
  3034.                 $project = $this->em->getRepository(Project::class)->find($item->project->id);
  3035.                 if($project){
  3036.                     $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project' => $project->getId()]);
  3037.                     $etap2 = $this->em->getRepository(Etap2::class)->findOneBy(['project' => $project->getId()]);
  3038.                     $etap3 = $this->em->getRepository(Etap3::class)->findOneBy(['project' => $project->getId()]);
  3039.                     $etap4 = $this->em->getRepository(Etap4::class)->findOneBy(['project' => $project->getId()]);
  3040.                     $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project' => $project->getId()]);
  3041.                     $etap6 = $this->em->getRepository(Etap6::class)->findOneBy(['project' => $project->getId()]);
  3042.                     $etap7 = $this->em->getRepository(Etap7::class)->findOneBy(['project' => $project->getId()]);
  3043.                     $etap8 = $this->em->getRepository(Etap8::class)->findOneBy(['project' => $project->getId()]);
  3044.                     $etap9 = $this->em->getRepository(Etap9::class)->findOneBy(['project' => $project->getId()]);
  3045.                     $etap10 = $this->em->getRepository(Etap10::class)->findOneBy(['project' => $project->getId()]);
  3046.                     $etap11 = $this->em->getRepository(Etap11::class)->findOneBy(['project' => $project->getId()]);
  3047.                     $etap12 = $this->em->getRepository(Etap12::class)->findOneBy(['project' => $project->getId()]);
  3048.                     $etap13 = $this->em->getRepository(Etap13::class)->findOneBy(['project' => $project->getId()]);
  3049.                     $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  3050.                     $etap15 = $this->em->getRepository(Etap15::class)->findOneBy(['project' => $project->getId()]);
  3051.                     $etap16 = $this->em->getRepository(Etap16::class)->findOneBy(['project' => $project->getId()]);
  3052.                     $etap17 = $this->em->getRepository(Etap17::class)->findOneBy(['project' => $project->getId()]);
  3053.                     $etap18 = $this->em->getRepository(Etap18::class)->findOneBy(['project' => $project->getId()]);
  3054.                     $etap19 = $this->em->getRepository(Etap19::class)->findOneBy(['project' => $project->getId()]);
  3055.                     $etap20 = $this->em->getRepository(Etap20::class)->findOneBy(['project' => $project->getId()]);
  3056.                     $etap21 = $this->em->getRepository(Etap21::class)->findOneBy(['project' => $project->getId()]);
  3057.                     $etap22 = $this->em->getRepository(Etap22::class)->findOneBy(['project' => $project->getId()]);
  3058.                     $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project' => $project->getId()]);
  3059.                     $etap161 = $this->em->getRepository(Etap161::class)->findOneBy(['project' => $project->getId()]);
  3060.                     $etap171 = $this->em->getRepository(Etap171::class)->findOneBy(['project' => $project->getId()]);
  3061.                     $etap172 = $this->em->getRepository(Etap172::class)->findOneBy(['project' => $project->getId()]);
  3062.                     $etap173 = $this->em->getRepository(Etap173::class)->findOneBy(['project' => $project->getId()]);
  3063.                     $etap174 = $this->em->getRepository(Etap174::class)->findOneBy(['project' => $project->getId()]);
  3064.                     $etap175 = $this->em->getRepository(Etap175::class)->findOneBy(['project' => $project->getId()]);
  3065.                     $etap201 = $this->em->getRepository(Etap201::class)->findOneBy(['project' => $project->getId()]);
  3066.                     $etap159 = $this->em->getRepository(Etap159::class)->findOneBy(['project' => $project->getId()]);
  3067.                     $etap0 = $this->em->getRepository(Etap0::class)->findOneBy(['project' => $project->getId()]);
  3068.                     $etap23 = $this->em->getRepository(Etap23::class)->findOneBy(['project' => $project->getId()]);
  3069.                     $etap80 = $this->em->getRepository(Etap80::class)->findOneBy(['project' => $project->getId()]);
  3070.                     $etap121 = $this->em->getRepository(Etap121::class)->findOneBy(['project' => $project->getId()]);
  3071.                     $etap601 = $this->em->getRepository(Etap601::class)->findOneBy(['project' => $project->getId()]);
  3072.                     $etap602 = $this->em->getRepository(Etap602::class)->findOneBy(['project' => $project->getId()]);
  3073.                     foreach ($item->project->value as $value){
  3074.                         $arrayOneToManyString = [];
  3075.                         $champsEntity = $value->champ;
  3076.                         $champsValue = $value->value;
  3077.                         $champsEntityTab = explode("-", $champsEntity);
  3078.                         if(isset($champsEntityTab[3]) && $champsEntityTab[1] == 0){
  3079.                             $nameSeteurFiled = 'set'.ucfirst($champsEntityTab[4]);
  3080.                             if(${'etap'.$champsEntityTab[3]}){
  3081.                                 $etapEntityClass = 'App\\Entity\\Etap' . $champsEntityTab[3];
  3082.                                 $classMetadata = $this->em->getClassMetadata($etapEntityClass);
  3083.                                 if($classMetadata->hasAssociation($champsEntityTab[4])){
  3084.                                     $associationMappings = $classMetadata->getAssociationMapping($champsEntityTab[4]);
  3085.                                     if($associationMappings && $associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_ONE){
  3086.                                         $target = $this->em->getRepository($associationMappings['targetEntity'])->findOneBy(['name'=>$champsValue]);
  3087.                                         if($target){
  3088.                                             ${'etap'.$champsEntityTab[3]}->{$nameSeteurFiled}($target);
  3089.                                         }
  3090.                                     }elseif ($associationMappings && $associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  3091.                                         if(isset($champsEntityTab[6])and isset($champsEntityTab[7])){
  3092.                                             $nameGeteurFiled = 'get'.ucfirst($champsEntityTab[4]);
  3093.                                             $nameSeteurFiledChild = 'set'.ucfirst($champsEntityTab[6]);
  3094.                                             $nameSeteurFiledEtap = 'setEtap'.$champsEntityTab[3];
  3095.                                             $nameSeteurFiledClass = ucfirst($champsEntityTab[7]);
  3096.                                             $this->em->refresh(${'etap'.$champsEntityTab[3]});
  3097.                                             if(count(${'etap'.$champsEntityTab[3]}->{$nameGeteurFiled}())> 0){
  3098.                                                 $value0 = ${'etap'.$champsEntityTab[3]}->{$nameGeteurFiled}()[0];
  3099.                                                 $value0->{$nameSeteurFiledChild}($champsValue);
  3100.                                                 $this->em->persist($value0);
  3101.                                                 $this->em->flush();
  3102. //
  3103.                                             }
  3104.                                             else{
  3105.                                                 $classEntity = 'App\\Entity\\' .$nameSeteurFiledClass;
  3106.                                                 $value0 = new $classEntity();
  3107.                                                 $value0->{$nameSeteurFiledChild}($champsValue);
  3108.                                                 $value0->{$nameSeteurFiledEtap}(${'etap'.$champsEntityTab[3]});
  3109.                                                 $this->em->persist($value0);
  3110.                                                 $this->em->flush();
  3111.                                             }
  3112.                                         }else{
  3113.                                             if($nameSeteurFiled == "setNumeroCardiMultiple"){
  3114.                                                 $numeroCardiEntity = ${'etap'.$champsEntityTab[3]}->getNumeroCardiMultiple();
  3115.                                                 if(isset($champsEntityTab[6])){
  3116.                                                     if($champsEntityTab[6] == 'numeroCardi'){
  3117.                                                         if(count($numeroCardiEntity)> 0){
  3118.                                                             $numeroCardi = $numeroCardiEntity[0];
  3119.                                                         }else{
  3120.                                                             $numeroCardi = new NumeroCardi();
  3121.                                                         }
  3122.                                                         $numeroCardi->setNumeroCardi($champsValue);
  3123.                                                         $numeroCardi->setEtap12(${'etap'.$champsEntityTab[3]});
  3124.                                                         $this->em->persist($numeroCardi);
  3125.                                                     }else if($champsEntityTab[6] == 'identifiantEnedis'){
  3126.                                                         if(count($numeroCardiEntity)> 0){
  3127.                                                             $numeroCardi = $numeroCardiEntity[0];
  3128.                                                         }else{
  3129.                                                             $numeroCardi = new NumeroCardi();
  3130.                                                         }
  3131.                                                         $numeroCardi->setIdentifiantEnedis($champsValue);
  3132.                                                         $numeroCardi->setEtap12(${'etap'.$champsEntityTab[3]});
  3133.                                                         $this->em->persist($numeroCardi);
  3134.                                                     }
  3135.                                                 }
  3136.                                             }
  3137.                                             if($nameSeteurFiled == "setInformationMultiple"){
  3138.                                                 if(isset($champsEntityTab[6])){
  3139.                                                     if($champsEntityTab[6] == 'numeroContratAchat'){
  3140.                                                         if($etap15){
  3141.                                                             if(count($etap15->getInformationMultiple())> 0){
  3142.                                                                 $value0 = $etap15->getInformationMultiple()[0];
  3143.                                                                 $value0->setNumeroContratAchat($champsValue);
  3144.                                                                 $this->em->persist($value0);
  3145.                                                             }
  3146.                                                             else{
  3147.                                                                 $value0 = new ImfomationContratAchat();
  3148.                                                                 $value0->setNumeroContratAchat($champsValue);
  3149.                                                                 $value0->setEtap15($etap15);
  3150.                                                                 $this->em->persist($value0);
  3151.                                                             }
  3152.                                                         }
  3153.                                                     }
  3154.                                                     if($champsEntityTab[6] == 'typeContrat'){
  3155.                                                         if($etap15){
  3156.                                                             if(count($etap15->getInformationMultiple())> 0){
  3157.                                                                 $value0 = $etap15->getInformationMultiple()[0];
  3158.                                                                 $value0->setTypeContrat($champsValue);
  3159.                                                                 $this->em->persist($value0);
  3160.                                                             }
  3161.                                                             else{
  3162.                                                                 $value0 = new ImfomationContratAchat();
  3163.                                                                 $value0->setTypeContrat($champsValue);
  3164.                                                                 $value0->setEtap15($etap15);
  3165.                                                                 $this->em->persist($value0);
  3166.                                                             }
  3167.                                                         }
  3168.                                                     }
  3169.                                                 }
  3170.                                             }
  3171.                                             if($nameSeteurFiled == "setVisiteTerrainV2"){
  3172.                                                 if(isset($champsEntityTab[6]) && $champsEntityTab[6] == 'dateVisiteTerrain' && $etap23){
  3173.                                                     $dateStrTab = explode("/", $champsValue);
  3174.                                                     if(isset($dateStrTab[2]) && strlen($dateStrTab[2]) == 2){
  3175.                                                         $dateVisite = \DateTime::createFromFormat('d/m/y', $champsValue );
  3176.                                                     }else{
  3177.                                                         $dateVisite = \DateTime::createFromFormat('d/m/Y', $champsValue );
  3178.                                                     }
  3179.                                                     if($dateVisite && count($etap23->getVisiteTerrainV2()) > 0){
  3180.                                                         $visiteTerrainV2 = $etap23->getVisiteTerrainV2()[0];
  3181.                                                         $visiteTerrainV2->setDateVisiteTerrain($dateVisite);
  3182.                                                         $this->em->persist($visiteTerrainV2);
  3183.                                                     }
  3184.                                                 }
  3185.                                             }
  3186.                                         }
  3187.                                     }
  3188.                                 }else{
  3189.                                     if(isset($champsEntityTab[5]) && $champsEntityTab[5] == 1){
  3190.                                         $dateStrTab = explode("/", $champsValue);
  3191.                                         if(isset($dateStrTab[2]) && strlen($dateStrTab[2]) == 2){
  3192.                                             $date = \DateTime::createFromFormat('d/m/y', $champsValue );
  3193.                                         }else{
  3194.                                             $date = \DateTime::createFromFormat('d/m/Y', $champsValue );
  3195.                                         }
  3196.                                         if($date){
  3197.                                             if(method_exists( ${'etap'.$champsEntityTab[3]},$nameSeteurFiled)){
  3198.                                                 ${'etap'.$champsEntityTab[3]}->{$nameSeteurFiled}($date);
  3199.                                             }
  3200.                                             if($nameSeteurFiled == "setDateT0"){
  3201.                                                 $project->setDateT0Date($date);
  3202.                                             }
  3203.                                             if($nameSeteurFiled == "setDateArretePcDp"){
  3204.                                                 $project->setDateArretePc($date);
  3205.                                             }
  3206.                                             if($nameSeteurFiled == "setDateMiseEnService"){
  3207.                                                 $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project'=>$project->getId()]);
  3208.                                                 $etap21 = $this->em->getRepository(Etap21::class)->findOneBy(['project'=>$project->getId()]);
  3209.                                                 $project->setDateMiseEnService($date);
  3210.                                                 $etap14->setDateMiseEnService($date);
  3211.                                                 $etap21->setDateMiseEnService($date);
  3212.                                             }
  3213.                                             if($nameSeteurFiled == "setDateConsuel"){
  3214.                                                 $etap20->setDateConsuelEtap20($date);
  3215.                                             }
  3216.                                             if($nameSeteurFiled == "setDateConsuelEtap20"){
  3217.                                                 $etap20->setDateConsuel($date);
  3218.                                             }
  3219.                                         }
  3220.                                     }else{
  3221.                                         if(method_exists( ${'etap'.$champsEntityTab[3]},$nameSeteurFiled)){
  3222.                                             ${'etap'.$champsEntityTab[3]}->{$nameSeteurFiled}($champsValue);
  3223.                                         }
  3224.                                     }
  3225.                                     if($nameSeteurFiled == "setNumParcelleEtablissement"){
  3226.                                         $project->setNumParcelle($champsValue);
  3227.                                     }
  3228.                                     if($nameSeteurFiled == "setTarifFit"){
  3229.                                         $project->setTarifRevente($champsValue);
  3230.                                     }
  3231.                                     if($nameSeteurFiled == "setLoyerConfirme"){
  3232.                                         $project->setLoyerVise($champsValue);
  3233.                                     }
  3234.                                     if($nameSeteurFiled == "setSoulteConfirme"){
  3235.                                         $project->setSoulteVise($champsValue);
  3236.                                     }
  3237.                                 }
  3238.                             }
  3239.                         }
  3240.                         if(isset($champsEntityTab[1]) && $champsEntityTab[1] != 0){
  3241.                             $nameSeteurFiled = 'set'.ucfirst($champsEntityTab[4]);
  3242.                             $etapEntityClass = 'App\\Entity\\Project';
  3243.                             $classMetadata = $this->em->getClassMetadata($etapEntityClass);
  3244.                             if($classMetadata->hasAssociation($champsEntityTab[4])){
  3245.                                 $associationMappings = $classMetadata->getAssociationMapping($champsEntityTab[4]);
  3246.                                 if($associationMappings && $associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_ONE){
  3247.                                     if($nameSeteurFiled == "setFournisseur"){
  3248.                                         if($project->getSchemaConstruction() == 'EPC'){
  3249.                                             $fournisseur = $this->em->getRepository(Fournisseur::class)->findOneBy(['email'=>$champsValue]);
  3250.                                             if($fournisseur){
  3251.                                                 $this->addEpcFournisseur($project,$fournisseur);
  3252.                                             }
  3253.                                         }
  3254.                                     }else {
  3255.                                         $target = $this->em->getRepository($associationMappings['targetEntity'])->findOneBy(['name' => $champsValue]);
  3256.                                         if ($target) {
  3257.                                             $project->{$nameSeteurFiled}($target);
  3258.                                         }
  3259.                                     }
  3260.                                 }elseif ($associationMappings && $associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  3261.                                     if($nameSeteurFiled == "setCommentProject2"){
  3262.                                         if(isset($champsEntityTab[6])){
  3263.                                             if($champsEntityTab[6] == 'comment'){
  3264.                                                 $entityComment = new CommentProject2();
  3265.                                                 $entityComment->setComment($champsValue);
  3266.                                                 $entityComment->setProject($project);
  3267.                                                 $entityComment->setUser($this->security->getUser());
  3268.                                                 $this->em->persist($entityComment);
  3269.                                             }
  3270.                                         }
  3271.                                     }
  3272.                                     if($nameSeteurFiled == "setResponsableUser"){
  3273.                                         $user = $this->em->getRepository(User::class)->findOneBy(['email'=>$champsValue]);
  3274.                                         if($user){
  3275.                                             $checkResponcableConstructeur = $this->em->getRepository(ResponcablePorject::class)->findOneBy(['responsable'=>$user->getId(),'project'=>$project->getId()]);
  3276.                                            if(!$checkResponcableConstructeur){
  3277.                                                $projectResponsable = new ResponcablePorject();
  3278.                                                $projectResponsable->setResponsable($user);
  3279.                                                $projectResponsable->setProject($project);
  3280.                                                $this->em->persist($projectResponsable);
  3281.                                                $this->em->flush();
  3282.                                            }
  3283.                                         }
  3284.                                     }
  3285.                                     if($nameSeteurFiled == "setFournisseurProject"){
  3286.                                         if(isset($champsEntityTab[5]) && $champsEntityTab[5] == 'Installateur'){
  3287.                                             $fournisseurInstallateur = $this->em->getRepository(Fournisseur::class)->findOneBy(['name'=>$champsValue]);
  3288.                                             if($fournisseurInstallateur){
  3289.                                                 if($project->getSchemaConstruction() == 'Lots séparés') {
  3290.                                                     $fournisseurProjectInstallateur = $this->em->getRepository(FournisseurProject::class)->findOneBy(['fournisseur' => $fournisseurInstallateur->getId(), 'titre' => 'Installateur','project'=>$project->getId()]);
  3291.                                                     if (!$fournisseurProjectInstallateur) {
  3292.                                                         $projectFournisseurInstallateur = new FournisseurProject();
  3293.                                                         $projectFournisseurInstallateur->setFournisseur($fournisseurInstallateur);
  3294.                                                         $projectFournisseurInstallateur->setTitre('Installateur');
  3295.                                                         $projectFournisseurInstallateur->setProject($project);
  3296.                                                         $this->em->persist($projectFournisseurInstallateur);
  3297.                                                         $this->em->flush();
  3298.                                                         $this->addInstalateurCharpentier('Installateur', $project);
  3299.                                                     }
  3300.                                                 }
  3301.                                             }
  3302.                                         }
  3303.                                         if(isset($champsEntityTab[5]) && $champsEntityTab[5] == 'Charpentier'){
  3304.                                             $fournisseurCharpentier = $this->em->getRepository(Fournisseur::class)->findOneBy(['name'=>$champsValue]);
  3305.                                             if($fournisseurCharpentier){
  3306.                                                 if($project->getSchemaConstruction() == 'Lots séparés') {
  3307.                                                     $fournisseurProjectCharpentier = $this->em->getRepository(FournisseurProject::class)->findOneBy(['fournisseur' => $fournisseurCharpentier->getId(), 'titre' => 'Charpentier','project'=>$project->getId()]);
  3308.                                                     if (!$fournisseurProjectCharpentier) {
  3309.                                                         $projectFournisseurCharpentier = new FournisseurProject();
  3310.                                                         $projectFournisseurCharpentier->setFournisseur($fournisseurCharpentier);
  3311.                                                         $projectFournisseurCharpentier->setTitre('Charpentier');
  3312.                                                         $projectFournisseurCharpentier->setProject($project);
  3313.                                                         $this->em->persist($projectFournisseurCharpentier);
  3314.                                                         $this->em->flush();
  3315.                                                         $this->addInstalateurCharpentier('Charpentier', $project);
  3316.                                                     }
  3317.                                                 }
  3318.                                             }
  3319.                                         }
  3320.                                         if(isset($champsEntityTab[5]) && $champsEntityTab[5] == 'Mainteneur'){
  3321.                                             $fournisseurMainteneur = $this->em->getRepository(Fournisseur::class)->findOneBy(['name'=>$champsValue]);
  3322.                                             if($fournisseurMainteneur){
  3323.                                                 $fournisseurProjectMainteneur = $this->em->getRepository(FournisseurProject::class)->findOneBy(['fournisseur' => $fournisseurMainteneur->getId(), 'titre' => 'Mainteneur','project'=>$project->getId()]);
  3324.                                                 if (!$fournisseurProjectMainteneur) {
  3325.                                                     $projectFournisseurMainteneur = new FournisseurProject();
  3326.                                                     $projectFournisseurMainteneur->setFournisseur($fournisseurMainteneur);
  3327.                                                     $projectFournisseurMainteneur->setTitre('Mainteneur');
  3328.                                                     $projectFournisseurMainteneur->setProject($project);
  3329.                                                     $this->em->persist($projectFournisseurMainteneur);
  3330.                                                     $this->em->flush();
  3331.                                                 }
  3332.                                             }
  3333.                                         }
  3334.                                     }
  3335.                                 }elseif ($associationMappings && $associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  3336.                                     $targetManyToMany = $this->em->getRepository($associationMappings['targetEntity'])->findOneBy(['name' => trim($champsValue)]);
  3337.                                     $adderManyToMany = 'add'.ucfirst($champsEntityTab[4]);
  3338.                                     if($targetManyToMany && method_exists($project, $adderManyToMany)){
  3339.                                         $project->{$adderManyToMany}($targetManyToMany);
  3340.                                     }
  3341.                                 }
  3342.                             }else{
  3343.                                 if(isset($champsEntityTab[5]) && $champsEntityTab[5] == 1){
  3344.                                     $dateStrTab = explode("/", $champsValue);
  3345.                                     if(isset($dateStrTab[2]) && strlen($dateStrTab[2]) == 2){
  3346.                                         $date = \DateTime::createFromFormat('d/m/y', $champsValue );
  3347.                                     }else{
  3348.                                         $date = \DateTime::createFromFormat('d/m/Y', $champsValue );
  3349.                                     }
  3350.                                     if($date){
  3351.                                         if(method_exists($project,$nameSeteurFiled)){
  3352.                                             $project->{$nameSeteurFiled}($date);
  3353.                                         }
  3354.                                         if($nameSeteurFiled == "setDateT0Date"){
  3355.                                             $etap9->setDateT0($date);
  3356.                                         }
  3357.                                         if($nameSeteurFiled == "setDateMiseEnService"){
  3358.                                             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project'=>$project->getId()]);
  3359.                                             $etap21 = $this->em->getRepository(Etap21::class)->findOneBy(['project'=>$project->getId()]);
  3360.                                             $project->setDateMiseEnService($date);
  3361.                                             $etap14->setDateMiseEnService($date);
  3362.                                             $etap21->setDateMiseEnService($date);
  3363.                                         }
  3364.                                     }
  3365.                                 }else{
  3366.                                     if($nameSeteurFiled == "setAchatLocation"){
  3367.                                         $achatLocationValue = mb_strtolower(trim($champsValue));
  3368.                                         if($achatLocationValue == 'achat'){
  3369.                                             $project->setAchatLocation(Project::ACHAT);
  3370.                                         }elseif($achatLocationValue == 'location'){
  3371.                                             $project->setAchatLocation(Project::LOCATION);
  3372.                                         }elseif(in_array($achatLocationValue, ['1','2'])){
  3373.                                             $project->setAchatLocation((int)$achatLocationValue);
  3374.                                         }
  3375.                                     }elseif(method_exists($project,$nameSeteurFiled)){
  3376.                                         if(trim($champsValue)){
  3377.                                             $project->{$nameSeteurFiled}(trim($champsValue));
  3378.                                             if($nameSeteurFiled == "setNumParcelle"){
  3379.                                                 $etap8->setNumParcelleEtablissement($champsValue);
  3380.                                             }
  3381.                                         }
  3382.                                         if($nameSeteurFiled == "setStadeConstruction"){
  3383.                                             $project->{$nameSeteurFiled}(trim($champsValue));
  3384.                                             $project->setStadeConstructionDate(new \DateTime());
  3385.                                         }
  3386.                                     }
  3387.                                 }
  3388.                             }
  3389.                         }
  3390.                         $this->em->persist($etap1);
  3391.                         $this->em->persist($etap2);
  3392.                         $this->em->persist($etap3);
  3393.                         $this->em->persist($etap4);
  3394.                         $this->em->persist($etap5);
  3395.                         $this->em->persist($etap6);
  3396.                         $this->em->persist($etap7);
  3397.                         $this->em->persist($etap8);
  3398.                         $this->em->persist($etap9);
  3399.                         $this->em->persist($etap10);
  3400.                         $this->em->persist($etap11);
  3401.                         $this->em->persist($etap12);
  3402.                         $this->em->persist($etap13);
  3403.                         $this->em->persist($etap14);
  3404.                         $this->em->persist($etap15);
  3405.                         $this->em->persist($etap16);
  3406.                         $this->em->persist($etap17);
  3407.                         $this->em->persist($etap18);
  3408.                         $this->em->persist($etap19);
  3409.                         $this->em->persist($etap20);
  3410.                         $this->em->persist($etap21);
  3411.                         $this->em->persist($etap22);
  3412.                         $this->em->persist($etap160);
  3413.                         $this->em->persist($etap161);
  3414.                         $this->em->persist($etap171);
  3415.                         $this->em->persist($etap172);
  3416.                         $this->em->persist($etap173);
  3417.                         $this->em->persist($etap174);
  3418.                         $this->em->persist($etap175);
  3419.                         $this->em->persist($etap159);
  3420.                         if($etap0){
  3421.                             $this->em->persist($etap0);
  3422.                         }
  3423.                         if($etap23){
  3424.                             $this->em->persist($etap23);
  3425.                         }
  3426.                         if($etap80){
  3427.                             $this->em->persist($etap80);
  3428.                         }
  3429.                         if($etap121){
  3430.                             $this->em->persist($etap121);
  3431.                         }
  3432.                         if($etap601){
  3433.                             $this->em->persist($etap601);
  3434.                         }
  3435.                         if($etap602){
  3436.                             $this->em->persist($etap602);
  3437.                         }
  3438.                         $this->em->persist($project);
  3439.                         $this->em->flush();
  3440.                         $this->etapsService->updateStatusTracker($project); // set status tracker
  3441.                     }
  3442.                 }
  3443.             }
  3444.         }
  3445.     }
  3446.     public function importProjectsDev5($filename)
  3447.     {
  3448.         $file = $this->params->get('uploads_directory')."/".$filename;
  3449.         $array = [];
  3450.         $f = fopen($file, "r");
  3451.         $flag = true;
  3452.         $i = 0;
  3453.         $header = [];
  3454.         while (($line = fgetcsv($f,0,";")) !== false) {
  3455.             if($flag) {
  3456.                 $header = [];
  3457.                 foreach ($line as $cell) {
  3458.                     $header[] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  3459.                 }
  3460.                 $flag = false;
  3461.                 continue;
  3462.             }
  3463.             foreach ($line as $key => $cell) {
  3464.                 $array[$i][$header[$key]] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  3465.             }
  3466.             $i++ ;
  3467.         }
  3468.         fclose($f);
  3469.         foreach ($array as &$item){
  3470.             if(isset($item['Nom du projet'])){
  3471.                 $name = $item['Nom du projet'];
  3472.                 $project = $this->em->getRepository(Project::class)->findOneBy(['name'=>$name]);
  3473.                 if($project){
  3474.                     $this->etapsService->updateStatusTracker($project,true); // set status tracker
  3475.                     $item['action'] = 1;
  3476.                 }else{
  3477.                     $item['action'] = 0;
  3478.                 }
  3479.             }else{
  3480.                 $item['action'] = 0;
  3481.             }
  3482.         }
  3483.         return ['headerTab' => $header,'bodyTab'=>$array];
  3484.     }
  3485.     public function getRapportData($date1,$date2,$developpeur=null){
  3486.         $dev0 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_0,$developpeur);
  3487.         $dev1 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_1,$developpeur);
  3488.         $dev2 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_2,$developpeur);
  3489.         $dev3 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_3,$developpeur);
  3490.         $dev4 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_4,$developpeur);
  3491.         $dev5 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_5,$developpeur);
  3492.         $dev6 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_6,$developpeur);
  3493.         $dev0Identifie = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_0_identifie,$developpeur);
  3494.         $dev0Bis = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_0_bis,$developpeur);
  3495.         $dev2New = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_2_new,$developpeur);
  3496.         $dev4New = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_4_new,$developpeur);
  3497.         $miseEnserviceProjects = $this->em->getRepository(Project::class)->findAllProjectActiveMiseEnService($date1,$date2,$developpeur);
  3498.         $stadeConstructionProjects = $this->em->getRepository(Project::class)->findAllProjectByStadeConstruction('Go consultation',$date1,$date2,$developpeur);
  3499.         $bailSignesProjects = $this->em->getRepository(Project::class)->findAllProjectActiveBailSigne($date1,$date2,$developpeur);
  3500.         $archivesProjects = $this->em->getRepository(Project::class)->findAllArchives($date1,$date2,$developpeur);
  3501.         $annulesProjects = $this->em->getRepository(Project::class)->findAllAnnules($date1,$date2,$developpeur);
  3502.         $newProjects = $this->em->getRepository(Project::class)->findAllProjectActiveNew($date1,$date2,$developpeur);
  3503.         $statuDev0CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev0['date1Result']);
  3504.         $statuDev0CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev0['date2Result']);
  3505.         $statuDev1CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev1['date1Result']);
  3506.         $statuDev1CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev1['date2Result']);
  3507.         $statuDev2CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev2['date1Result']);
  3508.         $statuDev2CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev2['date2Result']);
  3509.         $statuDev3CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev3['date1Result']);
  3510.         $statuDev3CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev3['date2Result']);
  3511.         $statuDev4CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev4['date1Result']);
  3512.         $statuDev4CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev4['date2Result']);
  3513.         $statuDev5CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev5['date1Result']);
  3514.         $statuDev5CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev5['date2Result']);
  3515.         $statuDev6CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev6['date1Result']);
  3516.         $statuDev6CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev6['date2Result']);
  3517.         $statuDev0IdentifieCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev0Identifie['date1Result']);
  3518.         $statuDev0IdentifieCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev0Identifie['date2Result']);
  3519.         $statuDev0BisCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev0Bis['date1Result']);
  3520.         $statuDev0BisCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev0Bis['date2Result']);
  3521.         $statuDev2NewCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev2New['date1Result']);
  3522.         $statuDev2NewCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev2New['date2Result']);
  3523.         $statuDev4NewCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev4New['date1Result']);
  3524.         $statuDev4NewCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev4New['date2Result']);
  3525.         $arrayCapacite = [
  3526.             'statusDev0Identifie' => [
  3527.                 'date1' => $statuDev0IdentifieCapaciteDate1,
  3528.                 'date2' => $statuDev0IdentifieCapaciteDate2
  3529.             ],
  3530.             'statusDev0Bis' => [
  3531.                 'date1' => $statuDev0BisCapaciteDate1,
  3532.                 'date2' => $statuDev0BisCapaciteDate2
  3533.             ],
  3534.             'statusDev2New' => [
  3535.                 'date1' => $statuDev2NewCapaciteDate1,
  3536.                 'date2' => $statuDev2NewCapaciteDate2
  3537.             ],
  3538.             'statusDev4New' => [
  3539.                 'date1' => $statuDev4NewCapaciteDate1,
  3540.                 'date2' => $statuDev4NewCapaciteDate2
  3541.             ],
  3542.             'statusDev0' => [
  3543.                 'date1' => $statuDev0CapaciteDate1,
  3544.                 'date2' => $statuDev0CapaciteDate2
  3545.             ],
  3546.             'statusDev1' => [
  3547.                 'date1' => $statuDev1CapaciteDate1,
  3548.                 'date2' => $statuDev1CapaciteDate2
  3549.             ],
  3550.             'statusDev2' => [
  3551.                 'date1' => $statuDev2CapaciteDate1,
  3552.                 'date2' => $statuDev2CapaciteDate2
  3553.             ],
  3554.             'statusDev3' => [
  3555.                 'date1' => $statuDev3CapaciteDate1,
  3556.                 'date2' => $statuDev3CapaciteDate2
  3557.             ],
  3558.             'statusDev4' => [
  3559.                 'date1' => $statuDev4CapaciteDate1,
  3560.                 'date2' => $statuDev4CapaciteDate2
  3561.             ],
  3562.             'statusDev5' => [
  3563.                 'date1' => $statuDev5CapaciteDate1,
  3564.                 'date2' => $statuDev5CapaciteDate2
  3565.             ],
  3566.             'statusDev6' => [
  3567.                 'date1' => $statuDev6CapaciteDate1,
  3568.                 'date2' => $statuDev6CapaciteDate2
  3569.             ]
  3570.         ] ;
  3571.         return [
  3572.             'rapportDev0Identifie' => $dev0Identifie,
  3573.             'rapportDev0Bis' => $dev0Bis,
  3574.             'rapportDev0' => $dev0,
  3575.             'rapportDev2New' => $dev2New,
  3576.             'rapportDev1' => $dev1,
  3577.             'rapportDev4New' => $dev4New,
  3578.             'rapportDev2' => $dev2,
  3579.             'rapportDev3' => $dev3,
  3580.             'rapportDev4' => $dev4,
  3581.             'rapportDev5' => $dev5,
  3582.             'rapportDev6' => $dev6,
  3583.             'arrayCapacite' => $arrayCapacite,
  3584.             'totalCapaciteDate1' =>  floatval($statuDev0IdentifieCapaciteDate1) + floatval($statuDev0BisCapaciteDate1) + floatval($statuDev2NewCapaciteDate1) + floatval($statuDev4NewCapaciteDate1) + floatval($statuDev0CapaciteDate1) + floatval($statuDev1CapaciteDate1) + floatval($statuDev2CapaciteDate1) +floatval($statuDev3CapaciteDate1) +floatval($statuDev4CapaciteDate1) +floatval($statuDev5CapaciteDate1) + floatval($statuDev6CapaciteDate1),
  3585.             'totalCapaciteDate2' =>  floatval($statuDev0IdentifieCapaciteDate2) + floatval($statuDev0BisCapaciteDate2) + floatval($statuDev2NewCapaciteDate2) + floatval($statuDev4NewCapaciteDate2) + floatval($statuDev0CapaciteDate2) + floatval($statuDev1CapaciteDate2) + floatval($statuDev2CapaciteDate2) +floatval($statuDev3CapaciteDate2) +floatval($statuDev4CapaciteDate2) +floatval($statuDev5CapaciteDate2) + floatval($statuDev6CapaciteDate2),
  3586.             'totalDate1' => count($dev0Identifie['date1Result']) + count($dev0Bis['date1Result']) + count($dev2New['date1Result']) + count($dev4New['date1Result']) + count($dev0['date1Result']) + count($dev1['date1Result']) + count($dev2['date1Result']) + count($dev3['date1Result']) + count($dev4['date1Result']) + count($dev5['date1Result']) + count($dev6['date1Result']) ,
  3587.             'totalDate2' =>  count($dev0Identifie['date2Result']) + count($dev0Bis['date2Result']) + count($dev2New['date2Result']) + count($dev4New['date2Result']) + count($dev0['date2Result']) + count($dev1['date2Result']) + count($dev2['date2Result']) + count($dev3['date2Result']) + count($dev4['date2Result']) +count($dev5['date2Result']) + count($dev6['date2Result']) ,
  3588.             'date' => $date1,
  3589.             'date2' => $date2,
  3590.             'alertRapportTab' => $this->getAlertRapportTab($developpeur),
  3591.             'alertRapportTabAnnexe' => $this->getAlertRapportTabAnnexe($developpeur),
  3592.             'alertRapportTabDevs' => $this->getAlertRapportTabDevs($developpeur),
  3593.             'miseEnserviceProjects' => $miseEnserviceProjects,
  3594.             'bailSignesProjects' => $bailSignesProjects,
  3595.             'archivesProjects' => $archivesProjects,
  3596.             'annulesProjects' => $annulesProjects,
  3597.             'stadeConstructionProjects' => $stadeConstructionProjects,
  3598.             'developpeur' => $developpeur,
  3599.             'newProjects' => $newProjects,
  3600.         ];
  3601.     }
  3602.     public function getAlertRapportTab($developpeur = null,$responsableConstruction=null,$spv=null,$schemaConstruction=null){
  3603.         $alertT0Noires = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3604.         $alertPDBNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3605.         $alertPCDPNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3606.         $alertT0Rouges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3607.         $alertPDBRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3608.         $alertPCDPRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3609.         $alertT0Oranges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3610.         $alertPDBOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3611.         $alertPCDPOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3612.         $arrays = [];
  3613.         foreach ($alertT0Noires as $item){
  3614.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3615.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['T0']['project'][] = $item->getProject();
  3616.         }
  3617.         foreach ($alertPDBNoires as $item){
  3618.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3619.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PDB']['project'][] = $item->getProject();
  3620.         }
  3621.         foreach ($alertPCDPNoires as $item){
  3622.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3623.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PCDP']['project'][] = $item->getProject();
  3624.         }
  3625.         foreach ($alertT0Rouges as $item){
  3626.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3627.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['T0']['project'][] = $item->getProject();
  3628.         }
  3629.         foreach ($alertPDBRouges as $item){
  3630.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3631.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PDB']['project'][] = $item->getProject();
  3632.         }
  3633.         foreach ($alertPCDPRouges as $item){
  3634.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3635.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PCDP']['project'][] = $item->getProject();
  3636.         }
  3637.         foreach ($alertT0Oranges as $item){
  3638.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3639.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['T0']['project'][] = $item->getProject();
  3640.         }
  3641.         foreach ($alertPDBOranges as $item){
  3642.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3643.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PDB']['project'][] = $item->getProject();
  3644.         }
  3645.         foreach ($alertPCDPOranges as $item){
  3646.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3647.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PCDP']['project'][] = $item->getProject();
  3648.         }
  3649.         if(isset($arrays['alertNoire'])){
  3650.             foreach ($arrays['alertNoire'] as &$item){
  3651.                 $item = $this->getMaxValueTabAlert($item);
  3652.             }
  3653.         }
  3654.         if(isset($arrays['alertRouge'])){
  3655.             foreach ($arrays['alertRouge'] as &$item){
  3656.                 $item =$this->getMaxValueTabAlert($item);
  3657.             }
  3658.         }
  3659.         if(isset($arrays['alertOrange'])){
  3660.             foreach ($arrays['alertOrange'] as &$item){
  3661.                 $item = $this->getMaxValueTabAlert($item);
  3662.             }
  3663.         }
  3664.         return $arrays;
  3665.     }
  3666.     private function getMaxValueTabAlert(&$item){
  3667.         $tab = [];
  3668.         if(isset($item['T0'])){
  3669.             $tab[] = count($item['T0']['project']);
  3670.         }
  3671.         if(isset($item['PDB'])){
  3672.             $tab[] = count($item['PDB']['project']);
  3673.         }
  3674.         if(isset($item['PCDP'])){
  3675.             $tab[] = count($item['PCDP']['project']);
  3676.         }
  3677.         if($tab){
  3678.             $heightGlobal = 189;
  3679.             $max = max($tab);
  3680.             $item['max'] = $max;
  3681.             if(isset($item['T0'])){
  3682.                 $item['T0']['count'] = count($item['T0']['project']);
  3683.                 $item['T0']['pourcentage'] = (count($item['T0']['project']) / $max) *100;
  3684.                 $item['T0']['height'] = (((count($item['T0']['project']) / $max) *100) / 100) *$heightGlobal;
  3685.             }
  3686.             if(isset($item['PDB'])){
  3687.                 $item['PDB']['count'] = count($item['PDB']['project']);
  3688.                 $item['PDB']['pourcentage'] = (count($item['PDB']['project']) / $max) *100;
  3689.                 $item['PDB']['height'] = (((count($item['PDB']['project']) / $max) *100) / 100) *$heightGlobal;
  3690.             }
  3691.             if(isset($item['PCDP'])){
  3692.                 $item['PCDP']['count'] = count($item['PCDP']['project']);
  3693.                 $item['PCDP']['pourcentage'] = (count($item['PCDP']['project']) / $max) *100;
  3694.                 $item['PCDP']['height'] = (((count($item['PCDP']['project']) / $max) *100) / 100) *$heightGlobal;
  3695.             }
  3696.         }
  3697.         return $item;
  3698.     }
  3699.     public function getAlertRapportTabDevs($developpeur = null,$responsableConstruction=null,$spv=null,$schemaConstruction=null)
  3700.     {
  3701.         $alertT0Noires = $this->em->getRepository(AlertRapport::class)->findByStatut('T0', AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3702.         $alertPDBNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB', AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3703.         $alertPCDPNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP', AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3704.         $alertT0Rouges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0', AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3705.         $alertPDBRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB', AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3706.         $alertPCDPRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP', AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3707.         $alertT0Oranges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0', AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3708.         $alertPDBOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB', AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3709.         $alertPCDPOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP', AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3710.         $arrays = [];
  3711.         foreach ($alertT0Noires as $item){
  3712.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3713.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3714.         }
  3715.         foreach ($alertPDBNoires as $item){
  3716.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3717.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3718.         }
  3719.         foreach ($alertPCDPNoires as $item){
  3720.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3721.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3722.         }
  3723.         foreach ($alertT0Rouges as $item){
  3724.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3725.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3726.         }
  3727.         foreach ($alertPDBRouges as $item){
  3728.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3729.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3730.         }
  3731.         foreach ($alertPCDPRouges as $item){
  3732.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3733.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3734.         }
  3735.         foreach ($alertT0Oranges as $item){
  3736.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3737.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3738.         }
  3739.         foreach ($alertPDBOranges as $item){
  3740.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3741.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3742.         }
  3743.         foreach ($alertPCDPOranges as $item){
  3744.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3745.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3746.         }
  3747.         return $arrays;
  3748.     }
  3749.      public function getAlertRapportTabAnnexe($developpeur = null,$responsableConstruction=null,$spv=null,$schemaConstruction=null){
  3750.         $alertT0Noires = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3751.         $alertPDBNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3752.         $alertPCDPNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3753.         $alertT0Rouges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3754.         $alertPDBRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3755.         $alertPCDPRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3756.         $alertT0Oranges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3757.         $alertPDBOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3758.         $alertPCDPOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3759.         $arrays = [];
  3760.         foreach ($alertT0Noires as $item){
  3761.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3762.             $tab = [];
  3763.             $tab['statusCustom'] = 'Alerte T0';
  3764.             $tab['project'] = $item->getProject();
  3765.             $tab['dateFin'] = $item->getDateFinT0();
  3766.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertNoire'][] = $tab;
  3767.         }
  3768.         foreach ($alertPDBNoires as $item){
  3769.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3770.             $tab = [];
  3771.             $tab['statusCustom'] = 'Alerte PDB';
  3772.             $tab['project'] = $item->getProject();
  3773.             $tab['dateFin'] = $item->getDateFinPDB();
  3774.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertNoire'][] = $tab;
  3775.         }
  3776.         foreach ($alertPCDPNoires as $item){
  3777.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3778.             $tab = [];
  3779.             $tab['statusCustom'] = 'Alerte PC/DP';
  3780.             $tab['project'] = $item->getProject();
  3781.             $tab['dateFin'] = $item->getDateFinPCDP();
  3782.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertNoire'][] =$tab;
  3783.         }
  3784.         foreach ($alertT0Rouges as $item){
  3785.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3786.             $tab = [];
  3787.             $tab['statusCustom'] = 'Alerte T0';
  3788.             $tab['project'] = $item->getProject();
  3789.             $tab['dateFin'] = $item->getDateFinT0();
  3790.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertRouge'][] = $tab;
  3791.         }
  3792.         foreach ($alertPDBRouges as $item){
  3793.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3794.             $tab = [];
  3795.             $tab['statusCustom'] = 'Alerte PDB';
  3796.             $tab['project'] = $item->getProject();
  3797.             $tab['dateFin'] = $item->getDateFinPDB();
  3798.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertRouge'] = $tab;
  3799.         }
  3800.         foreach ($alertPCDPRouges as $item){
  3801.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3802.             $tab = [];
  3803.             $tab['statusCustom'] = 'Alerte PC/DP';
  3804.             $tab['project'] = $item->getProject();
  3805.             $tab['dateFin'] = $item->getDateFinPCDP();
  3806.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertRouge'][] = $tab;
  3807.         }
  3808.         foreach ($alertT0Oranges as $item){
  3809.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3810.             $tab = [];
  3811.             $tab['statusCustom'] = 'Alerte T0';
  3812.             $tab['project'] = $item->getProject();
  3813.             $tab['dateFin'] = $item->getDateFinT0();
  3814.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertOrange'][] = $tab;
  3815.         }
  3816.         foreach ($alertPDBOranges as $item){
  3817.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3818.             $tab = [];
  3819.             $tab['statusCustom'] = 'Alerte PDB';
  3820.             $tab['project'] = $item->getProject();
  3821.             $tab['dateFin'] = $item->getDateFinPDB();
  3822.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertOrange'][] = $tab;
  3823.         }
  3824.         foreach ($alertPCDPOranges as $item){
  3825.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3826.             $tab = [];
  3827.             $tab['statusCustom'] = 'Alerte PC/DP';
  3828.             $tab['project'] = $item->getProject();
  3829.             $tab['dateFin'] = $item->getDateFinPCDP();
  3830.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertOrange'][] = $tab;
  3831.         }
  3832.         return $arrays;
  3833.     }
  3834.     public function getRapportConstructionData($date1,$date2,$responsableConstruction=null,$spv=null,$schemaConstruction=null,$constructeurRapport =null){
  3835.         $statusGo_Consultation = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Go_Consultation,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3836.         $statusAttente_Devis = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Attente_Devis,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3837.         $statusBudget_Capex = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Budget_Capex,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3838.         $statusContrat_Construction = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Contrat_Construction,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3839.         $statusOrder_demarrage_envoye = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Order_demarrage_envoye,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3840.         $statusConstruction_Demarree = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Construction_Demarree,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3841.         $statusConstruction_Achevee_Non_Raccordable = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Construction_Achevee_Non_Raccordable,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3842.         $statusConstruction_Achevee_A_Raccorder = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Construction_Achevee_A_Raccorder,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3843.         $statusConstruction_Achevee_Raccordee = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Construction_Achevee_Raccordee,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3844.         $statusPassage_dre = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Passage_dre,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3845.         $statusConsuel_obtenu = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Consuel_obtenu,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3846.         $statusOperating = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Operating,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3847.         $statusBillable = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Billable,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3848.         $statusInvoiced = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Invoiced,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3849.         $statusGo_ConsultationCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusGo_Consultation['date1Result']);
  3850.         $statusGo_ConsultationCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusGo_Consultation['date2Result']);
  3851.         $statusAttente_DevisCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusAttente_Devis['date1Result']);
  3852.         $statusAttente_DevisCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusAttente_Devis['date2Result']);
  3853.         $statusBudget_CapexCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusBudget_Capex['date1Result']);
  3854.         $statusBudget_CapexCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusBudget_Capex['date2Result']);
  3855.         $statusContrat_ConstructionCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusContrat_Construction['date1Result']);
  3856.         $statusContrat_ConstructionCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusContrat_Construction['date2Result']);
  3857.         $statusOrder_demarrage_envoyeCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusOrder_demarrage_envoye['date1Result']);
  3858.         $statusOrder_demarrage_envoyeCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusOrder_demarrage_envoye['date2Result']);
  3859.         $statusConstruction_DemarreeCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Demarree['date1Result']);
  3860.         $statusConstruction_DemarreeCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Demarree['date2Result']);
  3861.         $statusConstruction_Achevee_Non_RaccordableCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_Non_Raccordable['date1Result']);
  3862.         $statusConstruction_Achevee_Non_RaccordableCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_Non_Raccordable['date2Result']);
  3863.         $statusConstruction_Achevee_A_RaccorderCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_A_Raccorder['date1Result']);
  3864.         $statusConstruction_Achevee_A_RaccorderCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_A_Raccorder['date2Result']);
  3865.         $statusConstruction_Achevee_RaccordeeCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_Raccordee['date1Result']);
  3866.         $statusConstruction_Achevee_RaccordeeCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_Raccordee['date2Result']);
  3867.         $statusPassage_dreCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusPassage_dre['date1Result']);
  3868.         $statusPassage_dreCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusPassage_dre['date2Result']);
  3869.         $statusConsuel_obtenuCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusConsuel_obtenu['date1Result']);
  3870.         $statusConsuel_obtenuCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusConsuel_obtenu['date2Result']);
  3871.         $statusOperatingCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusOperating['date1Result']);
  3872.         $statusOperatingCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusOperating['date2Result']);
  3873.         $statusBillableCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusBillable['date1Result']);
  3874.         $statusBillableCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusBillable['date2Result']);
  3875.         $statusInvoicedCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusInvoiced['date1Result']);
  3876.         $statusInvoicedCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusInvoiced['date2Result']);
  3877.         $arrayCapacite = [
  3878.             'statusGo_Consultation' => [
  3879.                 'date1' => $statusGo_ConsultationCapaciteDate1,
  3880.                 'date2' => $statusGo_ConsultationCapaciteDate2
  3881.             ],
  3882.             'statusAttente_Devis' => [
  3883.                 'date1' => $statusAttente_DevisCapaciteDate1,
  3884.                 'date2' => $statusAttente_DevisCapaciteDate2
  3885.             ],
  3886.             'statusBudget_Capex' => [
  3887.                 'date1' => $statusBudget_CapexCapaciteDate1,
  3888.                 'date2' => $statusBudget_CapexCapaciteDate2
  3889.             ],
  3890.             'statusContrat_Construction' => [
  3891.                 'date1' => $statusContrat_ConstructionCapaciteDate1,
  3892.                 'date2' => $statusContrat_ConstructionCapaciteDate2
  3893.             ],
  3894.             'statusOrder_demarrage_envoye' => [
  3895.                 'date1' => $statusOrder_demarrage_envoyeCapaciteDate1,
  3896.                 'date2' => $statusOrder_demarrage_envoyeCapaciteDate2
  3897.             ],
  3898.             'statusConstruction_Demarree' => [
  3899.                 'date1' => $statusConstruction_DemarreeCapaciteDate1,
  3900.                 'date2' => $statusConstruction_DemarreeCapaciteDate2
  3901.             ],
  3902.             'statusConstruction_Achevee_Non_Raccordable' => [
  3903.                 'date1' => $statusConstruction_Achevee_Non_RaccordableCapaciteDate1,
  3904.                 'date2' => $statusConstruction_Achevee_Non_RaccordableCapaciteDate2
  3905.             ],
  3906.             'statusConstruction_Achevee_A_Raccorder' => [
  3907.                 'date1' => $statusConstruction_Achevee_A_RaccorderCapaciteDate1,
  3908.                 'date2' => $statusConstruction_Achevee_A_RaccorderCapaciteDate2
  3909.             ],
  3910.             'statusConstruction_Achevee_Raccordee' => [
  3911.                 'date1' => $statusConstruction_Achevee_RaccordeeCapaciteDate1,
  3912.                 'date2' => $statusConstruction_Achevee_RaccordeeCapaciteDate2
  3913.             ],
  3914.             'statusPassage_dre' => [
  3915.                 'date1' => $statusPassage_dreCapaciteDate1,
  3916.                 'date2' => $statusPassage_dreCapaciteDate2
  3917.             ],
  3918.             'statusConsuel_obtenu' => [
  3919.                 'date1' => $statusConsuel_obtenuCapaciteDate1,
  3920.                 'date2' => $statusConsuel_obtenuCapaciteDate2
  3921.             ],
  3922.             'statusOperating' => [
  3923.                 'date1' => $statusOperatingCapaciteDate1,
  3924.                 'date2' => $statusOperatingCapaciteDate2
  3925.             ],
  3926.             'statusBillable' => [
  3927.                 'date1' => $statusBillableCapaciteDate1,
  3928.                 'date2' => $statusBillableCapaciteDate2
  3929.             ]
  3930.             ,
  3931.             'statusInvoiced' => [
  3932.                 'date1' => $statusInvoicedCapaciteDate1,
  3933.                 'date2' => $statusInvoicedCapaciteDate2
  3934.             ]
  3935.         ] ;
  3936.         $totalDeveloppement = [
  3937.             'date1' => [
  3938.                 'project'=> count($statusGo_Consultation['date1Result']) + count($statusAttente_Devis['date1Result']) + count($statusBudget_Capex['date1Result']) + count($statusContrat_Construction['date1Result']) + count($statusOrder_demarrage_envoye['date1Result']) ,
  3939.                 'capacite'=> floatval($statusGo_ConsultationCapaciteDate1) + floatval($statusAttente_DevisCapaciteDate1) + floatval($statusBudget_CapexCapaciteDate1) +floatval($statusContrat_ConstructionCapaciteDate1) +floatval($statusOrder_demarrage_envoyeCapaciteDate1)
  3940.             ],
  3941.             'date2' => [
  3942.                 'project'=> count($statusGo_Consultation['date2Result']) + count($statusAttente_Devis['date2Result']) + count($statusBudget_Capex['date2Result']) + count($statusContrat_Construction['date2Result']) + count($statusOrder_demarrage_envoye['date2Result']) ,
  3943.                 'capacite'=> floatval($statusGo_ConsultationCapaciteDate2) + floatval($statusAttente_DevisCapaciteDate2) + floatval($statusBudget_CapexCapaciteDate2) +floatval($statusContrat_ConstructionCapaciteDate2) +floatval($statusOrder_demarrage_envoyeCapaciteDate2)
  3944.             ]
  3945.         ];
  3946.         $totalConstruction = [
  3947.             'date1' => [
  3948.                 'project'=> count($statusConstruction_Demarree['date1Result']) + count($statusConstruction_Achevee_Non_Raccordable['date1Result']) + count($statusConstruction_Achevee_A_Raccorder['date1Result']) + count($statusConstruction_Achevee_Raccordee['date1Result']) + count($statusPassage_dre['date1Result']) + count($statusConsuel_obtenu['date1Result']) ,
  3949.                 'capacite'=> floatval($statusConstruction_DemarreeCapaciteDate1) + floatval($statusConstruction_Achevee_Non_RaccordableCapaciteDate1) + floatval($statusConstruction_Achevee_A_RaccorderCapaciteDate1) +floatval($statusConstruction_Achevee_RaccordeeCapaciteDate1) +floatval($statusPassage_dreCapaciteDate1) +floatval($statusConsuel_obtenuCapaciteDate1)
  3950.             ],
  3951.             'date2' => [
  3952.                 'project'=> count($statusConstruction_Demarree['date2Result']) + count($statusConstruction_Achevee_Non_Raccordable['date2Result']) + count($statusConstruction_Achevee_A_Raccorder['date2Result']) + count($statusConstruction_Achevee_Raccordee['date2Result']) + count($statusPassage_dre['date2Result']) + count($statusConsuel_obtenu['date2Result']) ,
  3953.                 'capacite'=> floatval($statusConstruction_DemarreeCapaciteDate2) + floatval($statusConstruction_Achevee_Non_RaccordableCapaciteDate2) + floatval($statusConstruction_Achevee_A_RaccorderCapaciteDate2) +floatval($statusConstruction_Achevee_RaccordeeCapaciteDate2) +floatval($statusPassage_dreCapaciteDate2) +floatval($statusConsuel_obtenuCapaciteDate2)
  3954.             ]
  3955.         ];
  3956.         $totalOperation = [
  3957.             'date1' => [
  3958.                 'project'=> count($statusOperating['date1Result']) + count($statusBillable['date1Result']) + count($statusInvoiced['date1Result']) ,
  3959.                 'capacite'=> floatval($statusOperatingCapaciteDate1) + floatval($statusBillableCapaciteDate1) + floatval($statusInvoicedCapaciteDate1)
  3960.             ],
  3961.             'date2' => [
  3962.                 'project'=> count($statusOperating['date2Result']) + count($statusBillable['date2Result']) + count($statusInvoiced['date2Result']) ,
  3963.                 'capacite'=> floatval($statusOperatingCapaciteDate2) + floatval($statusBillableCapaciteDate2) + floatval($statusInvoicedCapaciteDate2)
  3964.             ]
  3965.         ];
  3966.         $miseEnserviceProjects = $this->em->getRepository(Project::class)->findAllProjectActiveMiseEnService($date1,$date2,null,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3967.         $stadeConstructionProjects = $this->em->getRepository(Project::class)->findAllProjectByStadeConstruction('Go consultation',$date1,$date2,null);
  3968.         $bailSignesProjects = $this->em->getRepository(Project::class)->findAllProjectActiveBailSigne($date1,$date2,null,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3969.         $archivesProjects = $this->em->getRepository(Project::class)->findAllArchives($date1,$date2,null,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3970.         $annulesProjects = $this->em->getRepository(Project::class)->findAllAnnules($date1,$date2,null,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3971.         $newProjects = $this->em->getRepository(Project::class)->findAllProjectActiveNew($date1,$date2,null,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3972.         return [
  3973.             'rapportGo_Consultation' => $statusGo_Consultation,
  3974.             'rapportAttente_Devis' => $statusAttente_Devis,
  3975.             'rapportBudget_Capex' => $statusBudget_Capex,
  3976.             'rapportContrat_Construction' => $statusContrat_Construction,
  3977.             'rapportOrder_demarrage_envoye' => $statusOrder_demarrage_envoye,
  3978.             'rapportConstruction_Demarree' => $statusConstruction_Demarree,
  3979.             'rapportConstruction_Achevee_Non_Raccordable' => $statusConstruction_Achevee_Non_Raccordable,
  3980.             'rapportConstruction_Achevee_A_Raccorder' => $statusConstruction_Achevee_A_Raccorder,
  3981.             'rapportConstruction_Achevee_Raccordee' => $statusConstruction_Achevee_Raccordee,
  3982.             'rapportPassage_dre' => $statusPassage_dre,
  3983.             'rapportConsuel_obtenu' => $statusConsuel_obtenu,
  3984.             'rapportOperating' => $statusOperating,
  3985.             'rapportBillable' => $statusBillable,
  3986.             'rapportInvoiced' => $statusInvoiced,
  3987.             'arrayCapacite' => $arrayCapacite,
  3988.             'totalDate1' => count($statusGo_Consultation['date1Result']) + count($statusAttente_Devis['date1Result']) + count($statusBudget_Capex['date1Result']) + count($statusContrat_Construction['date1Result']) + count($statusOrder_demarrage_envoye['date1Result']) + count($statusConstruction_Demarree['date1Result']) + count($statusConstruction_Achevee_Non_Raccordable['date1Result']) + count($statusConstruction_Achevee_A_Raccorder['date1Result']) + count($statusConstruction_Achevee_Raccordee['date1Result']) + count($statusPassage_dre['date1Result']) + count($statusConsuel_obtenu['date1Result']) + count($statusOperating['date1Result']) + count($statusBillable['date1Result']) + count($statusInvoiced['date1Result'])  ,
  3989.             'totalDate2' =>  count($statusGo_Consultation['date2Result']) + count($statusAttente_Devis['date2Result']) + count($statusBudget_Capex['date2Result']) + count($statusContrat_Construction['date2Result']) + count($statusOrder_demarrage_envoye['date2Result']) + count($statusConstruction_Demarree['date2Result']) +count($statusConstruction_Achevee_Non_Raccordable['date2Result']) + count($statusConstruction_Achevee_A_Raccorder['date2Result']) + count($statusConstruction_Achevee_Raccordee['date2Result']) + count($statusPassage_dre['date2Result']) + count($statusConsuel_obtenu['date2Result']) + count($statusOperating['date2Result']) + count($statusBillable['date2Result']) + count($statusInvoiced['date2Result']),
  3990.             'totalCapaciteDate1' =>  floatval($statusGo_ConsultationCapaciteDate1) + floatval($statusAttente_DevisCapaciteDate1) + floatval($statusBudget_CapexCapaciteDate1) +floatval($statusContrat_ConstructionCapaciteDate1) +floatval($statusOrder_demarrage_envoyeCapaciteDate1) +floatval($statusConstruction_DemarreeCapaciteDate1) + floatval($statusConstruction_Achevee_Non_RaccordableCapaciteDate1) + floatval($statusConstruction_Achevee_A_RaccorderCapaciteDate1) +floatval($statusConstruction_Achevee_RaccordeeCapaciteDate1) +floatval($statusPassage_dreCapaciteDate1) +floatval($statusConsuel_obtenuCapaciteDate1) +floatval($statusOperatingCapaciteDate1) + floatval($statusBillableCapaciteDate1) + floatval($statusInvoicedCapaciteDate1),
  3991.             'totalCapaciteDate2' =>  floatval($statusGo_ConsultationCapaciteDate2) + floatval($statusAttente_DevisCapaciteDate2) + floatval($statusBudget_CapexCapaciteDate2) +floatval($statusContrat_ConstructionCapaciteDate2) +floatval($statusOrder_demarrage_envoyeCapaciteDate2) +floatval($statusConstruction_DemarreeCapaciteDate2) + floatval($statusConstruction_Achevee_Non_RaccordableCapaciteDate2) + floatval($statusConstruction_Achevee_A_RaccorderCapaciteDate2) +floatval($statusConstruction_Achevee_RaccordeeCapaciteDate2) +floatval($statusPassage_dreCapaciteDate2) +floatval($statusConsuel_obtenuCapaciteDate2) +floatval($statusOperatingCapaciteDate2) + floatval($statusBillableCapaciteDate2) + floatval($statusInvoicedCapaciteDate2),
  3992.             'date' => $date1,
  3993.             'date2' => $date2,
  3994.             'totalDeveloppement' => $totalDeveloppement,
  3995.             'totalConstruction' => $totalConstruction,
  3996.             'totalOperation' => $totalOperation,
  3997.             'alertRapportTab' => $this->getAlertRapportTab(null,$responsableConstruction,$spv,$schemaConstruction),
  3998.             'alertRapportTabAnnexe' => $this->getAlertRapportTabAnnexe(null,$responsableConstruction,$spv,$schemaConstruction),
  3999.             'alertRapportTabDevs' => $this->getAlertRapportTabDevs(null,$responsableConstruction,$spv,$schemaConstruction),
  4000.             'miseEnserviceProjects' => $miseEnserviceProjects,
  4001.             'bailSignesProjects' => $bailSignesProjects,
  4002.             'archivesProjects' => $archivesProjects,
  4003.             'annulesProjects' => $annulesProjects,
  4004.             'stadeConstructionProjects' => $stadeConstructionProjects,
  4005.             'developpeur' => null,
  4006.             'responsable' => $responsableConstruction ? $this->em->getRepository(User::class)->find($responsableConstruction):null,
  4007.             'newProjects' => $newProjects,
  4008.         ];
  4009.     }
  4010.     public function  getStatusTrackerStr($status){
  4011.         if($status == StatusTracker::STATUS_dev_0_identifie){
  4012.             return 'Dev.0 - Identifié' ;
  4013.         }elseif($status == StatusTracker::STATUS_dev_0_bis){
  4014.             return 'Dev 0.bis  - LOI' ;
  4015.         }elseif ($status == StatusTracker::STATUS_dev_0){
  4016.             return 'Dev.1 - Sécurisé' ;
  4017.         }elseif ($status == StatusTracker::STATUS_dev_2_new){
  4018.             return 'Dev.2 - PC/DP déposé' ;
  4019.         }elseif ($status == StatusTracker::STATUS_dev_1){
  4020.             return 'Dev.3 - PC/DP accepté' ;
  4021.         }elseif ($status == StatusTracker::STATUS_dev_4_new){
  4022.             return 'Dev.4 - PC/ DP purgé' ;
  4023.         }elseif ($status == StatusTracker::STATUS_dev_2){
  4024.             return 'Dev.5 - Raccordement obtenu' ;
  4025.         }elseif ($status == StatusTracker::STATUS_dev_3){
  4026.             return 'Dev.6 - RTB tarifé (Ready to Build)' ;
  4027.         }elseif ($status == StatusTracker::STATUS_dev_4){
  4028.             return 'Dev.7 - Construction en cours' ;
  4029.         }elseif ($status == StatusTracker::STATUS_dev_5){
  4030.             return 'Dev.8 - Construction terminée' ;
  4031.         }elseif ($status == StatusTracker::STATUS_dev_6){
  4032.             return 'Dev.9 - Consuel obtenu' ;
  4033.         }elseif ($status == StatusTracker::STATUS_operating){
  4034.             return 'En opération' ;
  4035.         }else {
  4036.             return '';
  4037.         }
  4038.     }
  4039.     public function getStatusTrackerConstructionStr($status){
  4040.             if($status == StatusTrackerConstruction::Go_Consultation){
  4041.                 return 'Go consultation' ;
  4042.             }elseif($status == StatusTrackerConstruction::Attente_Devis){
  4043.                 return 'Attente devis' ;
  4044.             }elseif ($status == StatusTrackerConstruction::Budget_Capex){
  4045.                 return 'Budget / Capex validé' ;
  4046.             }elseif ($status == StatusTrackerConstruction::Contrat_Construction){
  4047.                 return 'Contrat de construction signé' ;
  4048.             }elseif ($status == StatusTrackerConstruction::Order_demarrage_envoye){
  4049.                 return 'Ordre de démarrage envoyé' ;
  4050.             }elseif ($status == StatusTrackerConstruction::Construction_Demarree){
  4051.                 return 'Construction Démarrée' ;
  4052.             }elseif ($status == StatusTrackerConstruction::Construction_Achevee_Non_Raccordable){
  4053.                 return 'Construction Achevée Non Raccordable' ;
  4054.             }elseif ($status == StatusTrackerConstruction::Construction_Achevee_A_Raccorder){
  4055.                 return 'Construction Achevée à Raccorder' ;
  4056.             }elseif ($status == StatusTrackerConstruction::Construction_Achevee_Raccordee){
  4057.                 return 'Construction Achevée Raccordée' ;
  4058.             }elseif ($status == StatusTrackerConstruction::Passage_dre){
  4059.                 return 'DRE Obtenu' ;
  4060.             }elseif ($status == StatusTrackerConstruction::Consuel_obtenu){
  4061.                 return 'Consuel obtenu' ;
  4062.             }elseif ($status == StatusTrackerConstruction::Operating){
  4063.                 return 'Operation' ;
  4064.             }elseif ($status == StatusTrackerConstruction::Billable){
  4065.                 return 'Billable' ;
  4066.             }elseif ($status == StatusTrackerConstruction::Invoiced){
  4067.                 return 'Invoiced' ;
  4068.             }else {
  4069.                 return '';
  4070.             }
  4071.     }
  4072.     private function getDataRapportByStatusAndDate($date1,$date2,$status,$developpeur=null){
  4073.         $devDate1 = $this->em->getRepository(StatusTracker::class)->getRapportByStatusTrackerAndDate($date1,$status,$developpeur);
  4074.         $devDate2 = $this->em->getRepository(StatusTracker::class)->getRapportByStatusTrackerAndDate($date2,$status,$developpeur);
  4075.         $resultMoins = array_diff($this->formatArrayIdsProjects($devDate1), $this->formatArrayIdsProjects($devDate2));
  4076.         $resultPlus = array_diff($this->formatArrayIdsProjects($devDate2), $this->formatArrayIdsProjects($devDate1));
  4077.         $resultMoinsPlusMoins = $resultMoins ? $this->em->getRepository(StatusTracker::class)->getRapportByDate($date2,$resultMoins,$developpeur) : [];
  4078.         $date1Result = $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate1)) ? $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate1)) : array();
  4079.         $date2Result = $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate2)) ? $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate2)) : array();
  4080.         $resultMoins = $this->formatObjectsProjectByIds($resultMoins) ? $this->formatObjectsProjectByIds($resultMoins) : array();
  4081.         $resultPlus = $this->formatObjectsProjectByIds($resultPlus) ? $this->formatObjectsProjectByIds($resultPlus) : array();
  4082. //        $resultMoinsPlusMoins = array_diff($this->formatObjectsStatusTracker($devDate1), $this->formatObjectsStatusTracker($devDate2));
  4083. //        $resultMoinsPlusMoins =  $this->formatObjectsStatusTrackerByIds($resultMoinsPlusMoins) ? $this->formatObjectsStatusTrackerByIds($resultMoinsPlusMoins) : array();
  4084.         $countGloble = count($date1Result) + count($resultPlus);
  4085.         $pourcentageDate1 = $countGloble ? (count($date1Result)/$countGloble *100) : 0;
  4086.         $pourcentageDate2 = $countGloble ?  (count($date2Result)/$countGloble *100) : 0;
  4087.         $pourcentageResultMoins = $countGloble ?  (($countGloble - count($resultMoins))/$countGloble *100) : 0;
  4088.         $pourcentageResultPlus = $pourcentageDate1;
  4089.         return [
  4090.             'date1Result' => $date1Result,
  4091.             'date2Result' => $date2Result,
  4092.             'resultMoins' => $resultMoins,
  4093.             'resultMoinsPlusMoins' => $resultMoinsPlusMoins,
  4094.             'resultPlus' => $resultPlus,
  4095.             'pourcentageDate1' => $pourcentageDate1,
  4096.             'pourcentageDate2' => $pourcentageDate2,
  4097.             'pourcentageResultMoins' => $pourcentageResultMoins,
  4098.             'pourcentageResultPlus' => $pourcentageResultPlus,
  4099.         ];
  4100.     }
  4101.     private function getCapaciteByStatusTrackerConstruction($tabStatus){
  4102.         $capacite = 0 ;
  4103.         if($tabStatus){
  4104.             foreach ($tabStatus as $project){
  4105.                 $capacite +=  (float)(str_replace(',','.',$project->getCapacite()));
  4106.             }
  4107.         }
  4108.         return $capacite;
  4109.     }
  4110.     private function getDataRapportConstructionByStatusAndDate($date1,$date2,$status,$responsableConstruction=null,$spv=null,$schemaConstruction=null,$constructeurRapport=null){
  4111.         $devDate1 = $this->em->getRepository(StatusTrackerConstruction::class)->getRapportByStatusTrackerAndDate($date1,$status,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  4112.         $devDate2 = $this->em->getRepository(StatusTrackerConstruction::class)->getRapportByStatusTrackerAndDate($date2,$status,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  4113.         $resultMoins = array_diff($this->formatArrayIdsProjects($devDate1), $this->formatArrayIdsProjects($devDate2));
  4114.         $resultPlus = array_diff($this->formatArrayIdsProjects($devDate2), $this->formatArrayIdsProjects($devDate1));
  4115.         $resultMoinsPlusMoins = $resultMoins ? $this->em->getRepository(StatusTrackerConstruction::class)->getRapportByDate($date2,$resultMoins,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport) : [];
  4116.         $date1Result = $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate1)) ? $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate1)) : array();
  4117.         $date2Result = $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate2)) ? $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate2)) : array();
  4118.         $resultMoins = $this->formatObjectsProjectByIds($resultMoins) ? $this->formatObjectsProjectByIds($resultMoins) : array();
  4119.         $resultPlus = $this->formatObjectsProjectByIds($resultPlus) ? $this->formatObjectsProjectByIds($resultPlus) : array();
  4120.         $countGloble = count($date1Result) + count($resultPlus);
  4121.         $pourcentageDate1 = $countGloble ? (count($date1Result)/$countGloble *100) : 0;
  4122.         $pourcentageDate2 = $countGloble ?  (count($date2Result)/$countGloble *100) : 0;
  4123.         $pourcentageResultMoins = $countGloble ?  (($countGloble - count($resultMoins))/$countGloble *100) : 0;
  4124.         $pourcentageResultPlus = $pourcentageDate1;
  4125.         return [
  4126.             'date1Result' => $date1Result,
  4127.             'date2Result' => $date2Result,
  4128.             'resultMoins' => $resultMoins,
  4129.             'resultMoinsPlusMoins' => $resultMoinsPlusMoins,
  4130.             'resultPlus' => $resultPlus,
  4131.             'pourcentageDate1' => $pourcentageDate1,
  4132.             'pourcentageDate2' => $pourcentageDate2,
  4133.             'pourcentageResultMoins' => $pourcentageResultMoins,
  4134.             'pourcentageResultPlus' => $pourcentageResultPlus,
  4135.         ];
  4136.     }
  4137.     private function formatArrayIdsProjects($arrays){
  4138.         $arrayIds = [];
  4139.         foreach ( $arrays as $item){
  4140.             $arrayIds[] = $item->getProject()->getId();
  4141.         }
  4142.         return $arrayIds;
  4143.     }
  4144.     private function formatObjectsProjectByIds($ids){
  4145.         if($ids){
  4146.             $projects = $this->em->getRepository(Project::class)->findBy(['id'=>$ids]);
  4147.             return $projects;
  4148.         }
  4149.         return null;
  4150.     }
  4151.     private function formatObjectsStatusTrackerByIds($ids){
  4152.         if($ids){
  4153.             $projects = $this->em->getRepository(StatusTracker::class)->findBy(['id'=>$ids]);
  4154.             return $projects;
  4155.         }
  4156.         return null;
  4157.     }
  4158.     private function formatObjectsStatusTracker($arrays){
  4159.         $arrayIds = [];
  4160.         foreach ( $arrays as $item){
  4161.             $arrayIds[] = $item->getId();
  4162.         }
  4163.         return $arrayIds;
  4164.     }
  4165.     public function addPdfRapport($date1Rapport,$date2Rapport,$developpeur = null){
  4166.         if($date1Rapport && $date2Rapport){
  4167.             $data = $this->getRapportData($date1Rapport,$date2Rapport,$developpeur);
  4168.             $html = $this->twig->render('admin/project/rapport.html.twig',array('data'=>$data));
  4169.             $html2pdf = new Html2Pdf('L', array(502 , 286), 'fr', true, 'UTF-8', array('0','0','0','0'));
  4170.             $html2pdf->getSecurityService()->disableCheckAllowedHosts();
  4171.             $html2pdf->pdf->SetAuthor('prejeance');
  4172.             $html2pdf->pdf->SetTitle('Rapport');
  4173.             $html2pdf->pdf->SetSubject('Rapport');
  4174.             $html2pdf->pdf->SetKeywords('Rapport');
  4175.             $html2pdf->pdf->SetDisplayMode('real');
  4176.             $html2pdf->WriteHTML($html);
  4177.             $nameFichier = 'rapport'.time().'.pdf';
  4178.             $path_pdf = $this->params->get('images_directory').'/rapport/'.$nameFichier;
  4179.             $html2pdf->Output($path_pdf,'F');
  4180.             return $nameFichier ;
  4181.         }
  4182.         return false;
  4183.     }
  4184.     public function addCommentProject($project,$commentText,$user){
  4185.         $comment = new CommentProject();
  4186.         $comment->setProject($project);
  4187.         $comment->setComment($commentText);
  4188.         $comment->setUser($user);
  4189.         $this->em->persist($comment);
  4190.         $this->em->flush();
  4191.         $this->notification->notifChatProjectAllUser($project,$user,$comment); // notif
  4192.         return $comment ;
  4193.     }
  4194.     public function getTimeComment($datetime){
  4195.         $dateNow = new \DateTime();
  4196.         if($dateNow->format('d/m/Y') == $datetime->format('d/m/Y')){
  4197.             return $datetime->format('H:i');
  4198.         }else{
  4199.             return $datetime->format('d/m/Y H:i');
  4200.         }
  4201.     }
  4202.     public function getCommentsProject($project){
  4203.        $comments =  $this->em->getRepository(CommentProject::class)->getCommentsProject($project);
  4204.        return $comments;
  4205.     }
  4206.     public function getLastComment($project,$idLastComment){
  4207.         $comments =  $this->em->getRepository(CommentProject::class)->getLastCommentsProject($project,$idLastComment);
  4208.         return $comments;
  4209.     }
  4210.     public function paginateCentrale($request){
  4211.         $length = $request->get('length');
  4212.         $length = $length && ($length!=-1)?$length:0;
  4213.         $start = $request->get('start');
  4214.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  4215.         $column =  $search = $request->get('columns');
  4216.         $order = $request->get('order')[0];
  4217.         $columnOrder = $order['column'];
  4218.         $dirOrder = $order['dir'];
  4219.         $columNameOrder = $column[$columnOrder]['data'];
  4220.         $search = $request->get('search');
  4221.         $user = $this->security->getUser();
  4222.         $roles = $user->getRoles();
  4223.         $spvsTab = $request->get('spvsTab');
  4224.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  4225.             $spvs = $user->getSpv();
  4226.             foreach($spvs as $item){
  4227.                 $spvsTab[] = $item->getId();
  4228.             }
  4229.         }
  4230.         $isParametrer = $request->get('isParametrer');
  4231.         $filters = [
  4232.             'query' => trim(@$search['value']),
  4233.             'spvsTab' =>  $spvsTab,
  4234.             'dateTab' =>  $request->get('dateTab'),
  4235.             'user' =>  $user,
  4236.             'isParametrer' =>  $isParametrer
  4237.         ];
  4238.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchCentrale($filters, $start, $length, true,$columNameOrder, $dirOrder);
  4239.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->searchCentrale($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  4240.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->searchCentrale(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  4241.         $output = array(
  4242.             'data' => array(),
  4243.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  4244.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  4245.         );
  4246.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  4247.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  4248.         foreach ($projects as $project) {
  4249.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  4250.             if( $project && $project->getDateMiseEnService()){
  4251.                 $strDate = $project->getDateMiseEnService()->format('d/m/Y');
  4252.             }else{
  4253.                 if( $etap14 && $etap14->getDateMiseEnService()){
  4254.                     $strDate = $etap14->getDateMiseEnService()->format('d/m/Y');
  4255.                 }else{
  4256.                     $strDate = '';
  4257.                 }
  4258.             }
  4259.             $parametrageLoyer = $this->em->getRepository(ParametrageLoyer::class)->findOneBy(['centrale'=>$project->getId()]);
  4260.             if($parametrageLoyer){
  4261.                 if($parametrageLoyer->getIsLoyer()){
  4262.                     $isLoyer = "<span style='color:green'>Oui</span>" ;
  4263.                 }else{
  4264.                     $isLoyer = "<span style='color:red'>Non</span>" ;
  4265.                 }
  4266.                 $isAlert = false;
  4267.             }else{
  4268.                 $isLoyer = '';
  4269.                 $isAlert = true;
  4270.             }
  4271.             $action =
  4272.                 $this->twig->render(
  4273.                     'admin/exploitation/default/bouton.html.twig', array(
  4274.                     'project' => $project,
  4275.                     'isAlert' => $isAlert
  4276.                 ));
  4277.             $output['data'][] = [
  4278.                 'responsive_id' => '',
  4279.                 'id' => $project->getId(),
  4280.                 'capacite' => $this->espaceNumber($project->getCapacite()),
  4281.                 'name' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName())),
  4282.                 'spv' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getSpv() ? $project->getSpv()->getName() : '-')) ,
  4283.                 'dateMiseEnService' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$strDate)) ,
  4284.                 'isLoyer' =>  $isLoyer  ,
  4285.                 'action' => $action
  4286.             ];
  4287.         }
  4288.         return $output;
  4289.     }
  4290.     public function paginateRapport($request){
  4291.         $length = $request->get('length');
  4292.         $length = $length && ($length!=-1)?$length:0;
  4293.         $start = $request->get('start');
  4294.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  4295.         $column =  $search = $request->get('columns');
  4296.         $order = $request->get('order')[0];
  4297.         $columnOrder = $order['column'];
  4298.         $dirOrder = $order['dir'];
  4299.         $columNameOrder = $column[$columnOrder]['data'];
  4300.         $search = $request->get('search');
  4301.         $centrale = $request->get('centrale');
  4302.         $suivi = $request->get('suivi');
  4303.         $isPerteProduction = $request->get('isPerteProduction');
  4304.         $interventionObject = $request->get('interventionObject');
  4305.         $centraleToken = $request->get('centraleToken');
  4306.         $centraleEntiry = null;
  4307.         if($centraleToken && $centraleToken != 0){
  4308.             $centraleEntiry = $this->em->getRepository(Project::class)->findOneBy(['token' => $centraleToken]);
  4309.         }
  4310.         $user = $this->security->getUser();
  4311.         $roles = $user->getRoles();
  4312.         $spvsTab = [];
  4313.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  4314.             $spvs = $user->getSpv();
  4315.             foreach($spvs as $item){
  4316.                 $spvsTab[] = $item->getId();
  4317.             }
  4318.         }
  4319.         $filters = [
  4320.             'query' => trim(@$search['value']),
  4321.             'spvsTab' =>  $spvsTab,
  4322.             'centraleToken' =>  $centraleToken,
  4323.             'user' =>  $user
  4324.         ];
  4325.         $rapports= $this->em->getRepository(\App\Entity\RapportCentrale::class)->search($isPerteProduction,$centrale,$suivi,$interventionObject,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  4326.         $recordsFiltered= $this->em->getRepository(\App\Entity\RapportCentrale::class)->search($isPerteProduction,$centrale,$suivi,$interventionObject,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  4327.         $recordsTotal= $this->em->getRepository(\App\Entity\RapportCentrale::class)->search($isPerteProduction,$centrale,$suivi,$interventionObject,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  4328.         $output = array(
  4329.             'data' => array(),
  4330.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  4331.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  4332.         );
  4333.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  4334.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  4335.         foreach ($rapports as $rapport) {
  4336.             $action =
  4337.                 $this->twig->render(
  4338.                     'admin/exploitation/default/bouton2.html.twig', array(
  4339.                     'rapport' => $rapport,
  4340.                     'centraleEntiry'=>$centraleEntiry
  4341.                 ));
  4342.             $suivi =
  4343.                 $this->twig->render(
  4344.                     'admin/exploitation/default/suivi.html.twig', array(
  4345.                     'rapport' => $rapport,
  4346.                     'centraleEntiry'=>$centraleEntiry
  4347.                 ));
  4348.             $select =
  4349.                 $this->twig->render(
  4350.                     'admin/exploitation/default/selectAll.html.twig', array(
  4351.                     'rapport' => $rapport,
  4352.                     'centraleEntiry'=>$centraleEntiry
  4353.                 ));
  4354.             $perteProduction =
  4355.                 $this->twig->render(
  4356.                     'admin/exploitation/default/perte-production.html.twig', array(
  4357.                     'rapport' => $rapport,
  4358.                     'centraleEntiry'=>$centraleEntiry
  4359.                 ));
  4360.             $output['data'][] = [
  4361.                 'responsive_id' => '',
  4362.                 'name' => $rapport->getName(),
  4363.                 'project' => $rapport->getProject()->getName(),
  4364.                 'objectIntervention' => $rapport->getObjectInterventionSrc(),
  4365.                 'dateIntervention' => $rapport->getDateIntervention()?$rapport->getDateIntervention()->format('d/m/Y') : '-',
  4366.                 'isSuiviNecessaire' => $suivi ,
  4367.                 'isPerteProduction' => $perteProduction ,
  4368.                 'coutIntervention' => $rapport->getObjectIntervention() == RapportCentrale::INTERVENTION_CURATIVE ? $rapport->getCoutIntervention() ? $rapport->getCoutIntervention() .'€' : '' : '' ,
  4369.                 'action' => $action,
  4370.                 'selectRapport' => $select
  4371.             ];
  4372.         }
  4373.         return $output;
  4374.     }
  4375.     public function addRapportCentrale($request,$token =null)
  4376.     {
  4377.         $rapport = new RapportCentrale();
  4378.         $form = $this->form->create(RapportCentraleType::class, $rapport);
  4379.         $centrale = null;
  4380.         if($token){
  4381.             $centrale = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  4382.             $form->remove('project');
  4383.         }
  4384.         $form->handleRequest($request);
  4385.         if ($form->isSubmitted() && $form->isValid()) {
  4386.             $rapportToken = $request->get('fileRapport');
  4387.             if($rapportToken) {
  4388.                 $fileRapport = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $rapportToken]);
  4389.                 $rapport->setRapport($fileRapport);
  4390.             }
  4391.             if($centrale){
  4392.                 $rapport->setProject($centrale);
  4393.             }
  4394.             $constructeurId = $request->get('rapport_centrale_constructeur');
  4395.             if($constructeurId != 0){
  4396.                 $constructeur = $this->em->getRepository(Fournisseur::class)->find($constructeurId);
  4397.                 if($constructeur){
  4398.                     $rapport->setConstructeur($constructeur);
  4399.                 }
  4400.             }else{
  4401.                 $rapport->setConstructeur(null);
  4402.             }
  4403.             $this->em->persist($rapport);
  4404.             $this->em->flush();
  4405.             return [
  4406.                 'form' => $form->createView(),
  4407.                 'rapport' => $rapport,
  4408.                 'success' => true,
  4409.                 'centrale' => $centrale
  4410.             ];
  4411.         }
  4412.         return [
  4413.             'form' => $form->createView(),
  4414.             'centrale' => $centrale,
  4415.             'success' => false,
  4416.         ];
  4417.     }
  4418.     public function editRapportCentrale($request,$token)
  4419.     {
  4420.         $rapport = $this->em->getRepository(RapportCentrale::class)->findOneBy(['token'=> $token]);
  4421.         $form = $this->form->create(RapportCentraleType::class, $rapport);
  4422.         $form->handleRequest($request);
  4423.         if ($form->isSubmitted() && $form->isValid()) {
  4424.             $rapportToken = $request->get('fileRapport');
  4425.             if($rapportToken) {
  4426.                 $fileRapport = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $rapportToken]);
  4427.                 $rapport->setRapport($fileRapport);
  4428.             }
  4429.             $constructeurId = $request->get('rapport_centrale_constructeur');
  4430.             if($constructeurId != 0){
  4431.                 $constructeur = $this->em->getRepository(Fournisseur::class)->find($constructeurId);
  4432.                 if($constructeur){
  4433.                     $rapport->setConstructeur($constructeur);
  4434.                 }
  4435.             }else{
  4436.                 $rapport->setConstructeur(null);
  4437.             }
  4438.             $this->em->persist($rapport);
  4439.             $this->em->flush();
  4440.             return [
  4441.                 'form' => $form->createView(),
  4442.                 'rapport' => $rapport,
  4443.                 'success' => true
  4444.             ];
  4445.         }
  4446.         return [
  4447.             'form' => $form->createView(),
  4448.             'rapport' => $rapport,
  4449.             'success' => false,
  4450.         ];
  4451.     }
  4452.     public function tabOfMeltdClavus(){
  4453.         $array = [];
  4454.         $array['date.decision.urbanisme'] = 'project-0-etap-1-'.MeltdChamps::TYPE_DATE.'-dateArretePcDp' ;
  4455.         $array['date.decision.urbanisme'] = 'project-0-etap-1-'.MeltdChamps::TYPE_DATE.'-dateArretePcDp' ;
  4456.         $array['notary.office'] = 'project-0-etap-6-'.MeltdChamps::TYPE_STRING.'-nomNotaire' ;
  4457.         $array['etablissement.secondaire.siret'] = 'project-0-etap-8-'.MeltdChamps::TYPE_STRING.'-siretEts' ;
  4458.         $array['cp.postal.address'] = 'project-0-etap-14-'.MeltdChamps::TYPE_STRING.'-codePostalMiseEnService' ;
  4459.         $array['adresses.identiques'] = 'project-0-etap-14-'.MeltdChamps::TYPE_STRING.'-cityMiseEnService' ;
  4460.         $array['bta.raccordement'] = 'project-0-etap-15-'.MeltdChamps::TYPE_STRING_MANYTOMANY.'-informationMultiple-numeroContratAchat' ;
  4461.         $array['floor-width'] = 'project-0-etap-160-'.MeltdChamps::TYPE_STRING_MANYTOMANY.'-dimension-largeur' ;
  4462.         $array['floor-length'] = 'project-0-etap-160-'.MeltdChamps::TYPE_STRING_MANYTOMANY.'-dimension-langueur' ;
  4463.         $array['docs']['Accord Mairie (PC ou CNO)'] = 'project-0-etap-1-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDossierPcDpMultiple' ;
  4464.         $array['docs']['accord.mairie'] = 'project-0-etap-1-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDossierPcDpMultiple' ;
  4465.         $array['docs']['Acte de passage huissier'] = 'project-0-etap-2-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVPassageHuissierMultiple' ;
  4466.         $array['docs']['acte.passage.huissier'] = 'project-0-etap-2-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVPassageHuissierMultiple' ;
  4467.         $array['docs']['acte.passage.huissier'] = 'project-0-etap-2-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVPassageHuissierMultiple' ;
  4468.         $array['docs']['attestation.conformite.chantier'] = 'project-0-etap-14-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileAttestationS21Multiple' ;
  4469.         $array['docs']['attestation.s21'] = 'project-0-etap-14-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileAttestationS21Multiple' ;
  4470.         $array['docs']['attestation.de.non.recours'] = 'project-0-etap-2-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileCertificatNonRecoursMultiple' ;
  4471.         $array['docs']['attestation.non.retrait.juridique'] = 'project-0-etap-2-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileCertificatNonRetraitMultiple' ;
  4472.         $array['docs']['bail.et.pdb'] = 'project-0-etap-7-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileBailSigneMultiple' ;
  4473.         $array['docs']['consuel'] = 'project-0-etap-20-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileConsuelEtap20Multiple' ;
  4474.         $array['docs']['consuel.dossier.technique.chantier'] = 'project-0-etap-20-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileConsuelEtap20Multiple' ;
  4475.         $array['docs']['crd.final.raccordement'] = 'project-0-etap-10-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileCrdSigneeMultiple' ;
  4476.         $array['docs']['crd.provisoire.raccordement'] = 'project-0-etap-10-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePtfMultiple' ;
  4477.         $array['docs']['DOC'] = 'project-0-etap-3-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocDrocMultiple' ;
  4478.         $array['docs']['doc'] = 'project-0-etap-3-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocDrocMultiple' ;
  4479.         $array['docs']['dact'] = 'project-0-etap-4-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDaactMultiple' ;
  4480.         $array['docs']['DACT'] = 'project-0-etap-4-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDaactMultiple' ;
  4481.         $array['docs']['doe'] = 'project-0-etap-201-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDoeEtap201Multiple' ;
  4482.         $array['docs']['DOE'] = 'project-0-etap-201-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDoeEtap201Multiple' ;
  4483.         $array['docs']['etude.sol./.etude.structure'] = 'project-0-etap-160-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileEtudeSoleMultiple' ;
  4484.         $array['docs']['ICPE'] = 'project-0-etap-0-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileICPEMultiple' ;
  4485.         $array['docs']['PV réception fin de chantier'] = 'project-0-etap-21-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileTestReceptionMultiple' ;
  4486.         $array['docs']['Justificatif agricole'] = 'project-0-etap-0-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileFicheBesoinAgricoleMultiple' ;
  4487.         $array['docs']['justify.agri'] = 'project-0-etap-0-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileFicheBesoinAgricoleMultiple' ;
  4488.         $array['docs']['kbis'] = 'project-0-etap-8-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileKbisEtsMultiple' ;
  4489.         $array['docs']['KBIS'] = 'project-0-etap-8-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileKbisEtsMultiple' ;
  4490.         $array['docs']['pc.doc'] = 'project-0-etap-1-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileArretePcDpMultiple' ;
  4491.         $array['docs']['pdb.signee'] = 'project-0-etap-5-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePromessebailMultiple' ;
  4492.         $array['docs']['promesse_bail'] = 'project-0-etap-5-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePromessebailMultiple' ;
  4493.         $array['docs']['plan.masse.commercial'] = 'project-0-etap-159-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePlanMasseSituationTranchee159MultipleBtn' ;
  4494.         $array['docs']['productible.rapport'] = 'project-0-etap-159-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileEtudeProductible159Multiple' ;
  4495.         $array['docs']['pv.fin.chantier'] = 'project-0-etap-172-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVReceptionMultiple' ;
  4496.         $array['docs']['pv.suivi.installation.pdl'] = 'project-0-etap-121-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocument121Multiple' ;
  4497.         $array['docs']['rapport.final.geometre.juridique'] = 'project-0-etap-17-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocumentGeometre' ;
  4498.         $array['docs']['rapport.rapport.geometre'] = 'project-0-etap-17-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocumentGeometre' ;
  4499.         $array['docs']['rapport.rapport.geometre'] = 'project-0-etap-17-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocumentGeometre' ;
  4500.         $array['docs']['rapport.provisoire.geometre.juridique'] = 'project-0-etap-17-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocumentGeometre' ;
  4501.         $array['docs']['Relevé d’exploitation'] = 'project-0-etap-0-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileMsaReleveExploitationMultiple' ;
  4502.         $array['docs']['titre.propriete'] = 'project-0-etap-6-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileTitreProprieteMultiple' ;
  4503.         $array['docs']['pv.mise.en.service'] = 'project-0-etap-14-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDoeMultiple' ;
  4504.         $array['docs']['Rapport de VT'] = 'project-0-etap-159-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileVisiteTechnique159Multiple' ;
  4505.         $array['docs']['rapport.reception.electrique'] = 'project-0-etap-174-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVReception174Multiple' ;
  4506.         $array['docs']['rapport.reception.mecanique'] = 'project-0-etap-173-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVreception173Multiple' ;
  4507.         $array['acompte'] = 'project-0-etap-10-'.MeltdChamps::TYPE_STRING.'-montantAcompte' ;
  4508.         $array['acompte'] = 'project-0-etap-10-'.MeltdChamps::TYPE_STRING.'-montantAcompteSansPtf' ;
  4509.         $array['crd.raccordement'] = 'project-0-etap-10-'.MeltdChamps::TYPE_STRING.'-montantCrdSansPtf' ;
  4510.         $array['date.envoi.dact'] = 'project-0-etap-4-'.MeltdChamps::TYPE_DATE.'-dateDaact' ;
  4511.         return $array ;
  4512.     }
  4513.     public function getFileJson(){
  4514.         $local_file = 'erpi.json';
  4515.         $server_file = 'erpi.json';
  4516.         $path = '/httpdocs/prejeance-industrial/public/clavus';
  4517.         $ftp_server="87.98.140.172";
  4518.         $ftp_user_name="erpi.prejeanceindust_20gzzzf6in4";
  4519.         $ftp_user_pass="VLmyuR#706";
  4520.         $conn_id = ftp_ssl_connect($ftp_server);
  4521.         $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
  4522.         ftp_pasv($conn_id, true) or die("Cannot switch to passive mode");
  4523.         if (ftp_get($conn_id,  $this->params->get('images_directory') . "/".$local_file, $path.'/'.$server_file, FTP_BINARY)) {
  4524.             $file = $this->params->get('images_directory') . "/".$local_file;
  4525.             $array = [];
  4526.             $f = file_get_contents($file);
  4527.             return json_decode($f);
  4528.         }
  4529.         else {
  4530.             return false;
  4531.         }
  4532.         ftp_close($conn_id);
  4533.     }
  4534.     public function updateProjectViaJson($data){
  4535.         $tabOfMeltdClavus = $this->tabOfMeltdClavus();
  4536.         if($data){
  4537.             foreach ($data as $item){
  4538.                 $arrayObject = (array)$item ;
  4539.                 $project = $this->em->getRepository(Project::class)->findOneBy(['name'=>$arrayObject['script.folderIdDynamic']]);
  4540.                 if($project){
  4541.                     $updateAt = new \DateTime($arrayObject['updatedAt']);
  4542.                     if($updateAt){
  4543.                         $updateAtFormat = $updateAt->format('y-m-d H:i:s');
  4544.                         $updateAtProjectFormat = $project->getUpdateAtClavus() ? $project->getUpdateAtClavus()->format('y-m-d H:i:s'): null;
  4545.                         if($updateAtFormat != $updateAtProjectFormat){
  4546.                             $isNotif = false;
  4547.                             $isNotifVide = true;
  4548.                             $project->setUpdateAtClavus($updateAt);
  4549.                             $this->em->persist($project);
  4550.                             $this->em->flush();
  4551.                             foreach ($arrayObject as $key => $value){
  4552.                                 if(isset($tabOfMeltdClavus[$key])){
  4553.                                     if($value != '') {
  4554.                                         $strProjectEtap = $tabOfMeltdClavus[$key];
  4555.                                         if($key == 'docs'){
  4556.                                             $arrayObjectDocs = (array)$value ;
  4557.                                             foreach ($arrayObjectDocs as $key2 => $value2) {
  4558.                                                 if (isset($tabOfMeltdClavus[$key][$key2])) {
  4559.                                                     if ($value2 != '') {
  4560.                                                         $strProjectEtap2 = $tabOfMeltdClavus[$key][$key2];
  4561.                                                         $tab = explode("-", $strProjectEtap2);
  4562.                                                         if ($tab[1] == 1) {
  4563.                                                             $nameChamp = $tab[5];
  4564.                                                             $typeChamp = $tab[4];
  4565.                                                             $meltd = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project' => $project->getId(), 'champName' => $nameChamp, 'isProject' => true]);
  4566.                                                             $persist = true;
  4567.                                                             if ($meltd) {
  4568.                                                                 if ($meltd->getChampValue() == $value2) {
  4569.                                                                     $persist = false;
  4570.                                                                 }
  4571.                                                             } else {
  4572.                                                                 $meltd = new MeltdChamps();
  4573.                                                             }
  4574.                                                             $checkExistValue = $this->getProjectViaJsonInput($nameChamp,$value2,$typeChamp,true,$project,0,null);
  4575.                                                             if ($persist && $checkExistValue) {
  4576.                                                                 $isNotifVide =false;
  4577.                                                                 $meltd->setProject($project);
  4578.                                                                 $meltd->setChampName($nameChamp);
  4579.                                                                 $meltd->setChampType($typeChamp);
  4580.                                                                 $meltd->setChampValue($value2);
  4581.                                                                 if (isset($arrayObject['createdAt'])) {
  4582.                                                                     $meltd->setCreatedAt(new \DateTime($arrayObject['createdAt']));
  4583.                                                                 }
  4584.                                                                 if (isset($arrayObject['updatedAt'])) {
  4585.                                                                     $meltd->setUpdateAt(new \DateTime($arrayObject['updatedAt']));
  4586.                                                                 }
  4587.                                                                 $meltd->setIsProject(true);
  4588.                                                                 $meltd->setIsValid(false);
  4589.                                                                 $meltd->setIsEmpty(true);
  4590.                                                                 $this->em->persist($meltd);
  4591.                                                                 $this->em->flush();
  4592.                                                                 $isNotif = true;
  4593.                                                             }
  4594.                                                         } else {
  4595.                                                             $numEtap = $tab[3];
  4596.                                                             $nameChamp = $tab[5];
  4597.                                                             $typeChamp = $tab[4];
  4598.                                                             $meltd = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project' => $project->getId(), 'numEtap' => $numEtap, 'champName' => $nameChamp]);
  4599.                                                             $persist = true;
  4600.                                                             if ($meltd) {
  4601.                                                                 if ($meltd->getChampValue() == $value2) {
  4602.                                                                     $persist = false;
  4603.                                                                 }
  4604.                                                             } else {
  4605.                                                                 $meltd = new MeltdChamps();
  4606.                                                             }
  4607.                                                             $checkExistValue = $this->getProjectViaJsonInput($nameChamp,$value2,$typeChamp,false,$project,$numEtap,null);
  4608.                                                             if ($persist && $checkExistValue) {
  4609.                                                                 $isNotifVide =false;
  4610.                                                                 $meltd->setProject($project);
  4611.                                                                 $meltd->setNumEtap($numEtap);
  4612.                                                                 $meltd->setChampName($nameChamp);
  4613.                                                                 $meltd->setChampType($typeChamp);
  4614.                                                                 $meltd->setChampValue($value2);
  4615.                                                                 if (isset($arrayObject['createdAt'])) {
  4616.                                                                     $meltd->setCreatedAt(new \DateTime($arrayObject['createdAt']));
  4617.                                                                 }
  4618.                                                                 if (isset($arrayObject['updatedAt'])) {
  4619.                                                                     $meltd->setUpdateAt(new \DateTime($arrayObject['updatedAt']));
  4620.                                                                 }
  4621.                                                                 $meltd->setIsProject(false);
  4622.                                                                 $meltd->setIsValid(false);
  4623.                                                                 $meltd->setIsEmpty(true);
  4624.                                                                 $this->em->persist($meltd);
  4625.                                                                 $this->em->flush();
  4626.                                                                 $isNotif = true;
  4627.                                                             }
  4628.                                                         }
  4629.                                                     }
  4630.                                                 }
  4631.                                             }
  4632.                                         }else{
  4633.                                             $tab = explode("-", $strProjectEtap);
  4634.                                             if ($tab[1] == 1) {
  4635.                                                 if(isset($tab[6])){
  4636.                                                     $nameChampRelation = $tab[5];
  4637.                                                     $nameChamp = $tab[6];
  4638.                                                     $typeChamp = $tab[4];
  4639.                                                 }else{
  4640.                                                     $nameChampRelation = '';
  4641.                                                     $nameChamp = $tab[5];
  4642.                                                     $typeChamp = $tab[4];
  4643.                                                 }
  4644.                                                 $meltd = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project' => $project->getId(), 'champName' => $nameChamp, 'isProject' => true]);
  4645.                                                 $persist = true;
  4646.                                                 if ($meltd) {
  4647.                                                     if ($meltd->getChampValue() == $value) {
  4648.                                                         $persist = false;
  4649.                                                     }
  4650.                                                 } else {
  4651.                                                     $meltd = new MeltdChamps();
  4652.                                                 }
  4653.                                                 $checkExistValue = $this->getProjectViaJsonInput($nameChamp,$value,$typeChamp,true,$project,null,$nameChampRelation);
  4654.                                                 if ($persist && $checkExistValue) {
  4655.                                                     $isNotifVide =false;
  4656.                                                     $meltd->setProject($project);
  4657.                                                     $meltd->setNameChampRelation($nameChampRelation);
  4658.                                                     $meltd->setChampName($nameChamp);
  4659.                                                     $meltd->setChampType($typeChamp);
  4660.                                                     $meltd->setChampValue($value);
  4661.                                                     if (isset($arrayObject['createdAt'])) {
  4662.                                                         $meltd->setCreatedAt(new \DateTime($arrayObject['createdAt']));
  4663.                                                     }
  4664.                                                     if (isset($arrayObject['updatedAt'])) {
  4665.                                                         $meltd->setUpdateAt(new \DateTime($arrayObject['updatedAt']));
  4666.                                                     }
  4667.                                                     $meltd->setIsProject(true);
  4668.                                                     $meltd->setIsValid(false);
  4669.                                                     $checkEmptyValue = $this->getProjectViaJsonInputNotEmpty($nameChamp,$value,$typeChamp,true,$project,null,$nameChampRelation);
  4670.                                                     $meltd->setIsEmpty($checkEmptyValue);
  4671.                                                     $this->em->persist($meltd);
  4672.                                                     $this->em->flush();
  4673.                                                     $isNotif = true;
  4674.                                                 }
  4675.                                             } else {
  4676.                                                 if(isset($tab[6])){
  4677.                                                     $nameChampRelation = $tab[5];
  4678.                                                     $nameChamp = $tab[6];
  4679.                                                     $typeChamp = $tab[4];
  4680.                                                 }else{
  4681.                                                     $nameChampRelation = '';
  4682.                                                     $nameChamp = $tab[5];
  4683.                                                     $typeChamp = $tab[4];
  4684.                                                 }
  4685.                                                 $numEtap = $tab[3];
  4686.                                                 $meltd = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project' => $project->getId(), 'numEtap' => $numEtap, 'champName' => $nameChamp]);
  4687.                                                 $persist = true;
  4688.                                                 if ($meltd) {
  4689.                                                     if ($meltd->getChampValue() == $value) {
  4690.                                                         $persist = false;
  4691.                                                     }
  4692.                                                 } else {
  4693.                                                     $meltd = new MeltdChamps();
  4694.                                                 }
  4695.                                                 $checkExistValue = $this->getProjectViaJsonInput($nameChamp,$value,$typeChamp,false,$project,$numEtap,$nameChampRelation);
  4696.                                                 if ($persist && $checkExistValue) {
  4697.                                                     $isNotifVide =false;
  4698.                                                     $meltd->setProject($project);
  4699.                                                     $meltd->setNameChampRelation($nameChampRelation);
  4700.                                                     $meltd->setNumEtap($numEtap);
  4701.                                                     $meltd->setChampName($nameChamp);
  4702.                                                     $meltd->setChampType($typeChamp);
  4703.                                                     $meltd->setChampValue($value);
  4704.                                                     if (isset($arrayObject['createdAt'])) {
  4705.                                                         $meltd->setCreatedAt(new \DateTime($arrayObject['createdAt']));
  4706.                                                     }
  4707.                                                     if (isset($arrayObject['updatedAt'])) {
  4708.                                                         $meltd->setUpdateAt(new \DateTime($arrayObject['updatedAt']));
  4709.                                                     }
  4710.                                                     $meltd->setIsProject(false);
  4711.                                                     $meltd->setIsValid(false);
  4712.                                                     $checkEmptyValue = $this->getProjectViaJsonInputNotEmpty($nameChamp,$value,$typeChamp,false,$project,$numEtap,$nameChampRelation);
  4713.                                                     $meltd->setIsEmpty($checkEmptyValue);
  4714.                                                     $this->em->persist($meltd);
  4715.                                                     $this->em->flush();
  4716.                                                     $isNotif = true;
  4717.                                                 }
  4718.                                             }
  4719.                                         }
  4720.                                     }
  4721.                                 }
  4722.                             }
  4723.                             if($isNotif){
  4724.                                 $admin = $this->em->getRepository(User::class)->findOneBy(['email' => $this->params->get('admin_login')]);
  4725.                                 $string = '<span class="spanNotif" >le projet ' . $project->getName() . '</span> vient d’être mise à jour à partir de CLAVIUS - MELTD';
  4726.                                 $usersAdmin = $this->em->getRepository(User::class)->getUserByNotRoleAndIsNotif(['ROLE_DEV', 'ROLE_EPC'], 'isNotifClavus');
  4727.                                 foreach ($usersAdmin as $item) {
  4728.                                     $this->notification->addNotification($item, $admin, $string, $project,false,false,false,false,false,null,Notification::STATUS_PROJECT_COMPLETED);
  4729.                                 }
  4730.                             }
  4731.                             if($isNotifVide){
  4732.                                 $admin = $this->em->getRepository(User::class)->findOneBy(['email' => $this->params->get('admin_login')]);
  4733.                                 $string = '<span class="spanNotif" >le projet ' . $project->getName() . '</span> vient d’être mise à jour à partir de CLAVIUS - MELTD sans changement';
  4734.                                 $usersAdmin = $this->em->getRepository(User::class)->getUserByNotRoleAndIsNotif(['ROLE_DEV', 'ROLE_EPC'], 'isNotifClavus');
  4735.                                 foreach ($usersAdmin as $item) {
  4736.                                     $this->notification->addNotification($item, $admin, $string, $project,false,false,false,false,false,null,Notification::STATUS_PROJECT_COMPLETED);
  4737.                                 }
  4738.                             }
  4739.                         }
  4740.                     }
  4741.                 }
  4742.             }
  4743.         }
  4744.     }
  4745.     public function deleteProjectViaJsonInput($melted){
  4746.         if($melted){
  4747.             $this->em->remove($melted);
  4748.             $this->em->flush();
  4749.         }
  4750.     }
  4751.     public function getProjectViaJsonInput($champName,$champValue,$champType,$isProject,$project,$numEtap,$nameChampRelation){
  4752.         $return = true ;
  4753.         if($project){
  4754.             $nameGeteurFiled = 'get'.ucfirst($champName);
  4755.             if($isProject){
  4756.                 if($champType == MeltdChamps::TYPE_STRING){
  4757.                     if($project->{$nameGeteurFiled}() == $champValue){
  4758.                         $return = false ;
  4759.                     }
  4760.                 }else if ($champType == MeltdChamps::TYPE_DATE){
  4761.                     if($project->{$nameGeteurFiled}()){
  4762.                         $dateValue = new \DateTime( $champValue);
  4763.                         if($project->{$nameGeteurFiled}()->format('y-m-d') == $dateValue->format('y-m-d')){
  4764.                             $return = false ;
  4765.                         }
  4766.                     }
  4767.                 }else if ($champType == MeltdChamps::TYPE_FILE_MANYTOMANY){
  4768.                     if(count($project->{$nameGeteurFiled}()) > 0){
  4769.                         $isNotefileArchive = false;
  4770.                         foreach ($project->{$nameGeteurFiled}() as $value){
  4771.                             if(!$value->getIsArchived()){
  4772.                                 $isNotefileArchive = true;
  4773.                             }
  4774.                         }
  4775.                         if($isNotefileArchive){
  4776.                             $return = false ;
  4777.                         }
  4778.                     }
  4779.                 }
  4780.             }else{
  4781.                 $etapClass = 'App\\Entity\\Etap'.$numEtap;
  4782.                 $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  4783.                 if($champType == MeltdChamps::TYPE_STRING){
  4784.                     if($etap->{$nameGeteurFiled}() == $champValue){
  4785.                         $return = false ;
  4786.                     }
  4787.                 }else if ($champType == MeltdChamps::TYPE_DATE){
  4788.                     if($etap->{$nameGeteurFiled}()){
  4789.                         $dateValue = new \DateTime( $champValue);
  4790.                         if($etap->{$nameGeteurFiled}()->format('y-m-d') == $dateValue->format('y-m-d')){
  4791.                             $return = false ;
  4792.                         }
  4793.                     }
  4794.                 }else if($champType == MeltdChamps::TYPE_STRING_MANYTOMANY){
  4795.                     $nameGeteurFiled = 'get'.ucfirst($nameChampRelation);
  4796.                     if($etap->$nameGeteurFiled()){
  4797.                         if(count($etap->$nameGeteurFiled()) > 0  && $etap->$nameGeteurFiled()[0]){
  4798.                             $entity = $etap->$nameGeteurFiled()[0];
  4799.                             $nameGeteurFiled2 = 'get'.ucfirst($champName);
  4800.                             if($entity->{$nameGeteurFiled2}() == $champValue){
  4801.                                 $return = false ;
  4802.                             }
  4803.                         }
  4804.                     }
  4805.                 }else if ($champType == MeltdChamps::TYPE_FILE_MANYTOMANY){
  4806.                     if(count($etap->{$nameGeteurFiled}()) > 0){
  4807.                         $isNotefileArchive = false;
  4808.                         foreach ($etap->{$nameGeteurFiled}() as $value){
  4809.                             if(!$value->getIsArchived()){
  4810.                                 $isNotefileArchive = true;
  4811.                             }
  4812.                         }
  4813.                         if($isNotefileArchive){
  4814.                             $return = false ;
  4815.                         }
  4816.                     }
  4817.                 }
  4818.             }
  4819.             return  $return;
  4820.         }
  4821.     }
  4822.     public function getProjectViaJsonInputNotEmpty($champName,$champValue,$champType,$isProject,$project,$numEtap,$nameChampRelation){
  4823.         $return = false ;
  4824.         if($project){
  4825.             $nameGeteurFiled = 'get'.ucfirst($champName);
  4826.             if($isProject){
  4827.                 if($champType == MeltdChamps::TYPE_STRING){
  4828.                     if(!$project->{$nameGeteurFiled}() || $project->{$nameGeteurFiled}() == '' ){
  4829.                         $return = true ;
  4830.                     }
  4831.                 }else if ($champType == MeltdChamps::TYPE_DATE){
  4832.                     if(!$project->{$nameGeteurFiled}()){
  4833.                         $return = true ;
  4834.                     }
  4835.                 }
  4836.             }else{
  4837.                 $etapClass = 'App\\Entity\\Etap'.$numEtap;
  4838.                 $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  4839.                 if($champType == MeltdChamps::TYPE_STRING){
  4840.                     if(!$etap->{$nameGeteurFiled}() || $etap->{$nameGeteurFiled}() == ''){
  4841.                         $return = true ;
  4842.                     }
  4843.                 }else if ($champType == MeltdChamps::TYPE_DATE){
  4844.                     if(!$etap->{$nameGeteurFiled}()){
  4845.                         $return = true ;
  4846.                     }
  4847.                 }else if($champType == MeltdChamps::TYPE_STRING_MANYTOMANY){
  4848.                     $nameGeteurFiled = 'get'.ucfirst($nameChampRelation);
  4849.                     if($etap->$nameGeteurFiled()){
  4850.                         if(count($etap->$nameGeteurFiled()) > 0  && $etap->$nameGeteurFiled()[0]){
  4851.                             $entity = $etap->$nameGeteurFiled()[0];
  4852.                             $nameGeteurFiled2 = 'get'.ucfirst($champName);
  4853.                             if(!$entity->{$nameGeteurFiled2}()){
  4854.                                 $return = true ;
  4855.                             }
  4856.                         }
  4857.                     }
  4858.                 }
  4859.             }
  4860.             return  $return;
  4861.         }
  4862.     }
  4863.     public function updateProjectViaJsonInputEmpty(){
  4864.         $melteds = $this->em->getRepository(MeltdChamps::class)->findBy(['isEmpty'=>true]);
  4865.         if($melteds){
  4866.             foreach ($melteds as $melted){
  4867.                 $this->updateProjectViaJsonInput($melted);
  4868.             }
  4869.         }
  4870.     }
  4871.     public function updateProjectViaJsonInput($melted){
  4872.         if($melted){
  4873.             $nameGeteurFiled = 'set'.ucfirst($melted->getChampName());
  4874.             if($melted->getIsProject()){
  4875.                 if($melted->getChampType() == MeltdChamps::TYPE_STRING){
  4876.                     $melted->getProject()->{$nameGeteurFiled}($melted->getChampValue());
  4877.                     $melted->setIsValid(true);
  4878.                     $melted->setIsEmpty(false);
  4879.                 }else if ($melted->getChampType() == MeltdChamps::TYPE_DATE){
  4880.                     $melted->getProject()->{$nameGeteurFiled}(new \DateTime( $melted->getChampValue()));
  4881.                     $melted->setIsValid(true);
  4882.                     $melted->setIsEmpty(false);
  4883.                 }
  4884.                 $this->em->persist($melted->getProject());
  4885.             }else{
  4886.                 $etapClass = 'App\\Entity\\Etap'.$melted->getNumEtap();
  4887.                 $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$melted->getProject()->getId()]);
  4888.                 if($melted->getChampType() == MeltdChamps::TYPE_STRING){
  4889.                     $etap->{$nameGeteurFiled}($melted->getChampValue());
  4890.                     $melted->setIsValid(true);
  4891.                     $melted->setIsEmpty(false);
  4892.                 }else if ($melted->getChampType() == MeltdChamps::TYPE_DATE){
  4893.                     $etap->{$nameGeteurFiled}(new \DateTime( $melted->getChampValue()));
  4894.                     $melted->setIsValid(true);
  4895.                     $melted->setIsEmpty(false);
  4896.                 }else if ($melted->getChampType() == MeltdChamps::TYPE_FILE_MANYTOMANY){
  4897.                     $fileEntity = $this->getFileViaMeltdApi($melted->getChampValue(),$melted);
  4898.                     $nameGeteurFiled = 'add'.ucfirst($melted->getChampName());
  4899.                     $etap->{$nameGeteurFiled}($fileEntity);
  4900.                     $melted->setIsValid(true);
  4901.                     $melted->setIsEmpty(false);
  4902.                 }
  4903.                 else if ($melted->getChampType() == MeltdChamps::TYPE_FILE_MANYTOONE){
  4904.                     $fileEntity = $this->getFileViaMeltdApi($melted->getChampValue(),$melted);
  4905.                     $nameGeteurFiled = 'set'.ucfirst($melted->getChampName());
  4906.                     $etap->{$nameGeteurFiled}($fileEntity);
  4907.                     $melted->setIsValid(true);
  4908.                     $melted->setIsEmpty(false);
  4909.                 }else if($melted->getChampType() == MeltdChamps::TYPE_STRING_MANYTOMANY){
  4910.                     $nameGeteurFiled = 'get'.ucfirst($melted->getNameChampRelation());
  4911.                     $nameSeteurFiled = 'set'.ucfirst($melted->getChampName());
  4912.                     if($etap->$nameGeteurFiled()){
  4913.                         if(count($etap->$nameGeteurFiled()) > 0  && $etap->$nameGeteurFiled()[0]){
  4914.                             $entity = $etap->$nameGeteurFiled()[0];
  4915.                             $entity->{$nameSeteurFiled}($melted->getChampValue());
  4916.                             $melted->setIsValid(true);
  4917.                             $melted->setIsEmpty(false);
  4918.                             $this->em->persist($entity);
  4919.                         }
  4920.                     }
  4921.                 }
  4922.                 $this->em->persist($etap);
  4923.             }
  4924.             $this->em->persist($melted);
  4925.             $this->em->flush();
  4926.         }
  4927.     }
  4928.     private function getAnnotationOptions($entity,$champ, $annotationName)
  4929.     {
  4930.         $reflector = new \ReflectionClass($entity);
  4931.         $property = $reflector->getProperty($champ);
  4932.         $annotations = $property->getDocComment();
  4933.         $pattern = '/@' . preg_quote($annotationName) . '\((.*?)\)/';
  4934.         preg_match($pattern, $annotations, $matches);
  4935.         if (isset($matches[1])) {
  4936.             return trim($matches[1], '"');
  4937.         }
  4938.         return null;
  4939.     }
  4940.     public function getFileViaMeltdApi($id,$melted){
  4941.         $curl = curl_init();
  4942.         curl_setopt_array($curl, array(
  4943.             CURLOPT_URL => 'https://api-v2.clavus.io/api/downloadFile',
  4944.             CURLOPT_RETURNTRANSFER => true,
  4945.             CURLOPT_ENCODING => '',
  4946.             CURLOPT_MAXREDIRS => 10,
  4947.             CURLOPT_TIMEOUT => 0,
  4948.             CURLOPT_FOLLOWLOCATION => true,
  4949.             CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  4950.             CURLOPT_CUSTOMREQUEST => 'POST',
  4951.             CURLOPT_POSTFIELDS =>'{
  4952.         "fileId": "'.$id.'"
  4953.       }',
  4954.             CURLOPT_HTTPHEADER => array(
  4955.                 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3bUlkIjoiY2t5aG4yenFyMTYwMTY1MWZxbGVveGk0b2p0IiwidWlkIjoiNDVhYzgxYTctYzY3ZC00MDY4LWJmYjktN2U4ODljMDFjMTEwIiwiaWF0IjoxNjg4NTQ3NTEzfQ.2Hq-Kkf9zOgzFx3CktIubDa39hqAlIMC9v6jLK-ZJOs',
  4956.                 'Content-Type: application/json'
  4957.             ),
  4958.         ));
  4959.         $response = curl_exec($curl);
  4960.         curl_close($curl);
  4961.         $res = json_decode($response);
  4962.         if($res->status == 'success'){
  4963.             $urlFile = $res->data->s3Url ;
  4964.             $curl = curl_init();
  4965.             curl_setopt($curl, CURLOPT_URL, $urlFile);
  4966.             curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  4967.             curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
  4968.             $filename = md5(uniqid()).'.pdf';
  4969.             $localFilename = $this->params->get('uploads_directory') . '/'.$filename;
  4970.             $fh = fopen($localFilename, "wb");
  4971.             curl_setopt($curl, CURLOPT_FILE, $fh);
  4972.             curl_exec($curl);
  4973.             curl_close($curl);
  4974.             if($melted->getIsProject()){
  4975.                 $entity = $melted->getProject();
  4976.             }else{
  4977.                 $etapClass = 'App\\Entity\\Etap'.$melted->getNumEtap();
  4978.                 $entity = $this->em->getRepository($etapClass)->findOneBy(['project'=>$melted->getProject()->getId()]);
  4979.             }
  4980.             $docUpload = new DocUpload();
  4981.             $champsName = $this->getAnnotationOptions($entity,$melted->getChampName(),'CustomAnnotation');
  4982.             $docUpload->setName($champsName.'.pdf');
  4983.             $docUpload->setPath($filename);
  4984.             $docUpload->setUserCreated($this->security->getUser());
  4985.             $this->em->persist($docUpload);
  4986.             $this->em->flush();
  4987.             if($melted->getIsProject()){
  4988.             }else{
  4989.                 $this->etapsService->getNomenclature($entity,$docUpload,$champsName);
  4990.             }
  4991.             return $docUpload;
  4992.         }
  4993.         curl_close($curl);
  4994.         return false;
  4995.     }
  4996.     public function getFileViaMeltdApiUrl($id){
  4997.         $curl = curl_init();
  4998.         curl_setopt_array($curl, array(
  4999.             CURLOPT_URL => 'https://api-v2.clavus.io/api/downloadFile',
  5000.             CURLOPT_RETURNTRANSFER => true,
  5001.             CURLOPT_ENCODING => '',
  5002.             CURLOPT_MAXREDIRS => 10,
  5003.             CURLOPT_TIMEOUT => 0,
  5004.             CURLOPT_FOLLOWLOCATION => true,
  5005.             CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  5006.             CURLOPT_CUSTOMREQUEST => 'POST',
  5007.             CURLOPT_POSTFIELDS =>'{
  5008.         "fileId": "'.$id.'"
  5009.       }',
  5010.             CURLOPT_HTTPHEADER => array(
  5011.                 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3bUlkIjoiY2t5aG4yenFyMTYwMTY1MWZxbGVveGk0b2p0IiwidWlkIjoiNDVhYzgxYTctYzY3ZC00MDY4LWJmYjktN2U4ODljMDFjMTEwIiwiaWF0IjoxNjg4NTQ3NTEzfQ.2Hq-Kkf9zOgzFx3CktIubDa39hqAlIMC9v6jLK-ZJOs',
  5012.                 'Content-Type: application/json'
  5013.             ),
  5014.         ));
  5015.         $response = curl_exec($curl);
  5016.         curl_close($curl);
  5017.         $res = json_decode($response);
  5018.         if($res->status == 'success'){
  5019.             $urlFile = $res->data->s3Url ;
  5020.             return $urlFile;
  5021.         }
  5022.         curl_close($curl);
  5023.         return false;
  5024.     }
  5025.     public function getNameChampGlobale($meltedId){
  5026.         $melted = $this->em->getRepository(MeltdChamps::class)->find($meltedId);
  5027.         if($melted->getIsProject()){
  5028.             $entity = $melted->getProject();
  5029.             $champsName = $this->getAnnotationOptions($entity,$melted->getChampName(),'CustomAnnotation') ;
  5030.         }else{
  5031.             $etapClass = 'App\\Entity\\Etap'.$melted->getNumEtap();
  5032.             $entity = $this->em->getRepository($etapClass)->findOneBy(['project'=>$melted->getProject()->getId()]);
  5033.             $description = 'Étap '.$entity->getEtap()->getName().' Timeline '.$entity->getEtap()->getCategory()->getName();
  5034.             $champsName = $this->getAnnotationOptions($entity,$melted->getChampName(),'CustomAnnotation').' ('.$description.')' ;
  5035.         }
  5036.         return $champsName;
  5037.     }
  5038.     public function getTabFacturationParProject($project){
  5039.         $developpementFactures = $this->em->getRepository(ProjectFactureFinance::class)->findSuiviByProject($project,'DEVEX');
  5040.         $constructionFactures = $this->em->getRepository(ProjectFactureFinance::class)->findSuiviByProject($project,'CAPEX');
  5041.         $exploitationFactures = $this->em->getRepository(ProjectFactureFinance::class)->findSuiviByProject($project,'OPEX');
  5042.         $developpementAvoirs = $this->em->getRepository(ProjectAvoir::class)->findSuiviByProject($project,'DEVEX');
  5043.         $constructionAvoirs = $this->em->getRepository(ProjectAvoir::class)->findSuiviByProject($project,'CAPEX');
  5044.         $exploitationAvoirs = $this->em->getRepository(ProjectAvoir::class)->findSuiviByProject($project,'OPEX');
  5045.         $mantantHtDeveloppement = 0;
  5046.         $mantantHtConstruction = 0;
  5047.         $mantantHtExploitation = 0;
  5048.         $mantantHtTotal = 0;
  5049.         $mantantHtBudgetDeveloppement = $project->getBudgetDeveloppement();
  5050.         $mantantHtBudgetConstruction = $project->getBudgetConstruction();
  5051.         $mantantHtBudgetExploitation = $project->getBudgetExploitation();
  5052.         $isDepasseDeveloppement = false;
  5053.         $isDepasseConstruction = false;
  5054.         $isDepasseExploitation = false;
  5055.         $isDepasseTotal = false;
  5056.         $pourcentageDeveloppement = 0;
  5057.         $pourcentageConstruction = 0;
  5058.         $pourcentageExploitation = 0;
  5059.         $pourcentageTotal = 0;
  5060.         foreach ($developpementFactures as $facture){
  5061.             $mantantHtDeveloppement += (float)$facture->getMontantHt();
  5062.         }
  5063.         foreach ($constructionFactures as $facture){
  5064.             $mantantHtConstruction += (float)$facture->getMontantHt();
  5065.         }
  5066.         foreach ($exploitationFactures as $facture){
  5067.             $mantantHtExploitation += (float)$facture->getMontantHt();
  5068.         }
  5069.         foreach ($developpementAvoirs as $facture){
  5070.             $mtHt = $facture->getMontantHt()?$facture->getMontantHt():$facture->getAvoir()->getMonatantHt();
  5071.             $mantantHtDeveloppement -= (float)$mtHt;
  5072.         }
  5073.         foreach ($constructionAvoirs as $facture){
  5074.             $mtHt = $facture->getMontantHt()?$facture->getMontantHt():$facture->getAvoir()->getMonatantHt();
  5075.             $mantantHtConstruction -= (float)$mtHt;
  5076.         }
  5077.         foreach ($exploitationAvoirs as $facture){
  5078.             $mtHt = $facture->getMontantHt()?$facture->getMontantHt():$facture->getAvoir()->getMonatantHt();
  5079.             $mantantHtExploitation -= (float)$mtHt;
  5080.         }
  5081.         if((float)$mantantHtBudgetDeveloppement > 0 ){
  5082.             if((float)$mantantHtBudgetDeveloppement < $mantantHtDeveloppement){
  5083.                 $isDepasseDeveloppement = true;
  5084.             }
  5085.         }else{
  5086.             $mantantHtBudgetDeveloppement = 0;
  5087.         }
  5088.         if($isDepasseDeveloppement){
  5089.             $pourcentageDeveloppement = $mantantHtDeveloppement ? ($mantantHtBudgetDeveloppement / $mantantHtDeveloppement * 100) : 0;
  5090.         }else{
  5091.             $pourcentageDeveloppement = $mantantHtBudgetDeveloppement ? ($mantantHtDeveloppement / $mantantHtBudgetDeveloppement * 100) : 0;
  5092.         }
  5093.         if((float)$mantantHtBudgetConstruction > 0 ){
  5094.             if((float)$mantantHtBudgetConstruction < $mantantHtConstruction){
  5095.                 $isDepasseConstruction = true;
  5096.             }
  5097.         }else{
  5098.             $mantantHtBudgetConstruction = 0;
  5099.         }
  5100.         if($isDepasseConstruction){
  5101.             $pourcentageConstruction = $mantantHtConstruction ? ($mantantHtBudgetConstruction / $mantantHtConstruction * 100) : 0;
  5102.         }else{
  5103.             $pourcentageConstruction = $mantantHtBudgetConstruction ? ($mantantHtConstruction / $mantantHtBudgetConstruction * 100) : 0;
  5104.         }
  5105.         $mantantHtBudgetTotal = $mantantHtBudgetConstruction + $mantantHtBudgetDeveloppement;
  5106.         $mantantHtTotal = $mantantHtDeveloppement + $mantantHtConstruction;
  5107.         if((float)$mantantHtBudgetTotal > 0 ){
  5108.             if((float)$mantantHtBudgetTotal < $mantantHtTotal){
  5109.                 $isDepasseTotal = true;
  5110.             }
  5111.         }else{
  5112.             $mantantHtBudgetTotal = 0;
  5113.         }
  5114.         if($isDepasseTotal){
  5115.             $pourcentageTotal = $mantantHtTotal ? ($mantantHtBudgetTotal / $mantantHtTotal * 100) : 0;
  5116.         }else{
  5117.             $pourcentageTotal = $mantantHtBudgetTotal ? ($mantantHtTotal / $mantantHtBudgetTotal * 100) : 0;
  5118.         }
  5119.         if((float)$mantantHtBudgetExploitation > 0 ){
  5120.             if((float)$mantantHtBudgetExploitation < $mantantHtExploitation){
  5121.                 $isDepasseExploitation = true;
  5122.             }
  5123.         }else{
  5124.             $mantantHtBudgetExploitation = 0;
  5125.         }
  5126.         if($isDepasseExploitation){
  5127.             $pourcentageExploitation = $mantantHtExploitation ? ($mantantHtBudgetExploitation / $mantantHtExploitation * 100) : 0;
  5128.         }else{
  5129.             $pourcentageExploitation = $mantantHtBudgetExploitation ? ($mantantHtExploitation / $mantantHtBudgetExploitation * 100) : 0;
  5130.         }
  5131.         return [
  5132.           'developpement' => ['factures'=>$developpementFactures,'avoirs'=>$developpementAvoirs,'montant'=>$mantantHtDeveloppement,'budget'=>$mantantHtBudgetDeveloppement,'pourcentage'=>$pourcentageDeveloppement,'isDepasse'=>$isDepasseDeveloppement] ,
  5133.           'construction' => ['factures'=>$constructionFactures,'avoirs'=>$constructionAvoirs,'montant'=>$mantantHtConstruction,'budget'=>$mantantHtBudgetConstruction,'pourcentage'=>$pourcentageConstruction,'isDepasse'=>$isDepasseConstruction] ,
  5134.           'exploitation' => ['factures'=>$exploitationFactures,'avoirs'=>$exploitationAvoirs,'montant'=>$mantantHtExploitation,'budget'=>$mantantHtBudgetExploitation,'pourcentage'=>$pourcentageExploitation,'isDepasse'=>$isDepasseExploitation],
  5135.           'total' => ['factures'=>[],'montant'=>$mantantHtTotal,'budget'=>$mantantHtBudgetTotal,'pourcentage'=>$pourcentageTotal,'isDepasse'=>$isDepasseTotal],
  5136.           'projet' => ['name'=>$project->getName()]
  5137.         ];
  5138.     }
  5139.     public function getPdfDoe($project){
  5140.         $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project'=>$project->getId()]);
  5141.         $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  5142.         $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project'=>$project->getId()]);
  5143.         $etap174 = $this->em->getRepository(Etap174::class)->findOneBy(['project'=>$project->getId()]);
  5144.         $etap161 = $this->em->getRepository(Etap161::class)->findOneBy(['project'=>$project->getId()]);
  5145.         $etap20 = $this->em->getRepository(Etap20::class)->findOneBy(['project'=>$project->getId()]);
  5146.         $html = $this->twig->render('admin/project/first-pdf-doe.html.twig',['project'=>$project,'etap14'=>$etap14,'etap160'=>$etap160]);
  5147.         $html2pdf = new Html2Pdf('P', 'A4', 'fr', true, 'UTF-8', array('5','5','5','5'));
  5148.         $html2pdf->getSecurityService()->disableCheckAllowedHosts();
  5149.         $html2pdf->pdf->SetAuthor('Prejeace-Industrial');
  5150.         $html2pdf->pdf->SetTitle('DOE');
  5151.         $html2pdf->pdf->SetSubject('DOE');
  5152.         $html2pdf->pdf->SetKeywords('DOE');
  5153.         $html2pdf->pdf->SetDisplayMode('real');
  5154.         $html2pdf->WriteHTML($html);
  5155.         $nameFichier = 'DOE-info'.time().'.pdf';
  5156.         $path_pdf = $this->params->get('uploads_directory').'/'.$nameFichier;
  5157.         $html2pdf->Output($path_pdf,'F');
  5158.         $filesDossierPcDpMultiple = [];
  5159.         $filesPlanDeCalepinageCablage = [];
  5160.         $filesModulePhotvoltaiques = [];
  5161.         $filesOnduleurs = [];
  5162.         $filesStructureIntegration = [];
  5163.         $filesGarantie = [];
  5164.         $filesCertificats = [];
  5165.         $filesConsuel = [];
  5166.         $filesPhotos = [];
  5167.         if($etap1){
  5168.             if(count($etap1->getFileDossierPcDpMultiple())>0){
  5169.                 foreach ($etap1->getFileDossierPcDpMultiple() as $item){
  5170.                     if($item->getIsArchived()){}
  5171.                     else{
  5172.                         $filesDossierPcDpMultiple[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5173.                     }
  5174.                 }
  5175.             }
  5176.         }
  5177.         if($etap174){
  5178.             if(count($etap174->getFilePlanCaplageStrings174Multiple())>0){
  5179.                 foreach ($etap174->getFilePlanCaplageStrings174Multiple() as $item){
  5180.                     if($item->getIsArchived()){}
  5181.                     else{
  5182.                         $filesPlanDeCalepinageCablage[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5183.                     }
  5184.                 }
  5185.             }
  5186.             if(count($etap174->getFilePlanCalepinageModule174Multiple())>0){
  5187.                 foreach ($etap174->getFilePlanCalepinageModule174Multiple() as $item){
  5188.                     if($item->getIsArchived()){}
  5189.                     else{
  5190.                         $filesPlanDeCalepinageCablage[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5191.                     }
  5192.                 }
  5193.             }
  5194.             if(count($etap174->getFileSchemaUnifilaireInstallation174Multiple())>0){
  5195.                 foreach ($etap174->getFileSchemaUnifilaireInstallation174Multiple() as $item){
  5196.                     if($item->getIsArchived()){}
  5197.                     else{
  5198.                         $filesPlanDeCalepinageCablage[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5199.                     }
  5200.                 }
  5201.             }
  5202.         }
  5203.         if($etap160){
  5204.             if(count($etap160->getFileEvaluationCarboneModuleMultiple())>0){
  5205.                 foreach ($etap160->getFileEvaluationCarboneModuleMultiple() as $item){
  5206.                     if($item->getIsArchived()){}
  5207.                     else{
  5208.                         $filesModulePhotvoltaiques[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5209.                     }
  5210.                 }
  5211.             }
  5212.             if(count($etap160->getFileFicheTechniqueModuleMultiple())>0){
  5213.                 foreach ($etap160->getFileFicheTechniqueModuleMultiple() as $item){
  5214.                     if($item->getIsArchived()){}
  5215.                     else{
  5216.                         $filesModulePhotvoltaiques[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5217.                     }
  5218.                 }
  5219.             }
  5220.             if(count($etap160->getFileFicheTechniqueOnduleurMultiple())>0){
  5221.                 foreach ($etap160->getFileFicheTechniqueOnduleurMultiple() as $item){
  5222.                     if($item->getIsArchived()){}
  5223.                     else{
  5224.                         $filesOnduleurs[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5225.                     }
  5226.                 }
  5227.             }
  5228.             if(count($etap160->getFileAttestationBrigageOnduleurMultiple())>0){
  5229.                 foreach ($etap160->getFileAttestationBrigageOnduleurMultiple() as $item){
  5230.                     if($item->getIsArchived()){}
  5231.                     else{
  5232.                         $filesOnduleurs[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5233.                     }
  5234.                 }
  5235.             }
  5236.             if(count($etap160->getFileFicheSystemeIntegrationMultiple())>0){
  5237.                 foreach ($etap160->getFileFicheSystemeIntegrationMultiple() as $item){
  5238.                     if($item->getIsArchived()){}
  5239.                     else{
  5240.                         $filesStructureIntegration[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5241.                     }
  5242.                 }
  5243.             }
  5244.             if(count($etap160->getFileFicheGarantiOnduleurMultiple())>0){
  5245.                 foreach ($etap160->getFileFicheGarantiOnduleurMultiple() as $item){
  5246.                     if($item->getIsArchived()){}
  5247.                     else{
  5248.                         $filesGarantie[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5249.                     }
  5250.                 }
  5251.             }
  5252.         }
  5253.         if($etap14) {
  5254.             if (count($etap14->getFileAttestationS21Multiple()) > 0) {
  5255.                 foreach ($etap14->getFileAttestationS21Multiple() as $item) {
  5256.                     if ($item->getIsArchived()) {
  5257.                     } else {
  5258.                         $filesCertificats[] = $this->params->get('uploads_directory') . '/' . $item->getPath();
  5259.                     }
  5260.                 }
  5261.             }
  5262.         }
  5263.         if($etap161) {
  5264.             if (count($etap161->getFileQualiPVInstallateurMultiple()) > 0) {
  5265.                 foreach ($etap161->getFileQualiPVInstallateurMultiple() as $item) {
  5266.                     if ($item->getIsArchived()) {
  5267.                     } else {
  5268.                         $filesCertificats[] = $this->params->get('uploads_directory') . '/' . $item->getPath();
  5269.                     }
  5270.                 }
  5271.             }
  5272.         }
  5273.         if($etap20) {
  5274.             if (count($etap20->getFileConsuelEtap20Multiple()) > 0) {
  5275.                 foreach ($etap20->getFileConsuelEtap20Multiple() as $item) {
  5276.                     if ($item->getIsArchived()) {
  5277.                     } else {
  5278.                         $filesConsuel[] = $this->params->get('uploads_directory') . '/' . $item->getPath();
  5279.                     }
  5280.                 }
  5281.             }
  5282.         }
  5283.         if($etap174){
  5284.             if(count($etap174->getFilePhotosGenerateur174Multiple())>0){
  5285.                 foreach ($etap174->getFilePhotosGenerateur174Multiple() as $item){
  5286.                     if($item->getIsArchived()){}
  5287.                     else{
  5288.                         $filesPhotos[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5289.                     }
  5290.                 }
  5291.             }
  5292.             if(count($etap174->getFileShemaAgencementShelterPhotos174Multiple())>0){
  5293.                 foreach ($etap174->getFileShemaAgencementShelterPhotos174Multiple() as $item){
  5294.                     if($item->getIsArchived()){}
  5295.                     else{
  5296.                         $filesPhotos[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5297.                     }
  5298.                 }
  5299.             }
  5300.         }
  5301.         $pdf = new Fpdi();
  5302.         $fileContent = file_get_contents($path_pdf);
  5303.         $pageCount = $pdf->setSourceFile(StreamReader::createByString($fileContent));
  5304.         for ($i = 0; $i < $pageCount; $i++) {
  5305.             $pdf->setPrintHeader(false);
  5306.             $tpl = $pdf->importPage($i + 1, '/MediaBox');
  5307.             $pdf->addPage();
  5308.             $pdf->useTemplate($tpl,0,0,null,null,true);
  5309.         }
  5310.         $pdfFile = $this->addPagePdfStr('Le dossier PC/DP du projet ',$filesDossierPcDpMultiple); $pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5311.         foreach ($filesDossierPcDpMultiple as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5312.         $pdfFile = $this->addPagePdfStr('Plan de calepinage et de câblage ',$filesPlanDeCalepinageCablage); $pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5313.         foreach ($filesPlanDeCalepinageCablage as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5314.         $pdfFile = $this->addPagePdfStr('Documentation technique modules photovoltaiques',$filesModulePhotvoltaiques);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5315.         foreach ($filesModulePhotvoltaiques as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5316.         $pdfFile = $this->addPagePdfStr('Documentation technique onduleurs',$filesOnduleurs);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5317.         foreach ($filesOnduleurs as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5318.         $pdfFile = $this->addPagePdfStr('Documentation technique structure d’intégration',$filesStructureIntegration);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5319.         foreach ($filesStructureIntegration as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5320.         $pdfFile = $this->addPagePdfStr('Documentation de garantie',$filesGarantie);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5321.         foreach ($filesGarantie as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5322.         $pdfFile = $this->addPagePdfStr('Certificats',$filesCertificats);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5323.         foreach ($filesCertificats as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5324.         $pdfFile = $this->addPagePdfStr('Consuel',$filesConsuel);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5325.         foreach ($filesConsuel as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5326.         $pdfFile = $this->addPagePdfStr('Photos',$filesPhotos);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5327.         foreach ($filesPhotos as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5328.         if(file_exists($path_pdf)){
  5329.             unlink($path_pdf);
  5330.         }
  5331.         return $pdf;
  5332.     }
  5333.     public function addZipArray($zip,$namePath,$array){
  5334.         $name = $namePath;
  5335.         if(count($array)>0){
  5336.             foreach ($array as $item){
  5337.                 $name = $namePath.($item->getNomenclature()?  $item->getCreatedAt()->format('d-m-Y H:i:s').' - '.$item->getNomenclature(): $item->getPath());
  5338.                 $path = $this->params->get('uploads_directory').'/'.$item->getPath();
  5339.                 $zip->addFile($path,$name);
  5340.             }
  5341.         }else{
  5342.             $zip->addEmptyDir($name);
  5343.         }
  5344.         return $zip;
  5345.     }
  5346.     public function getZipBail($project){
  5347.         $data = $this->getBailListFile($project);
  5348.         $zip = new \ZipArchive();
  5349.         $zipfile = $this->params->get('zips_directory') . '/bail-' . $project->getName() .'.zip';
  5350.         if (file_exists($zipfile)) unlink($zipfile);
  5351.         if ($zip->open($zipfile, \ZipArchive::CREATE) === TRUE) {
  5352.             foreach ($data as $key => $datum){
  5353.                 if($key == 'filesDossierPcDpMultiple'){
  5354.                     $name = 'Urbanisme/Dossier PC - DP/'; $zip = $this->addZipArray($zip,$name,$datum);
  5355.                 }
  5356.                 if($key == 'filesArretePcDpMultiple'){
  5357.                     $name = 'Urbanisme/Arrêté PC/DP/'; $zip = $this->addZipArray($zip,$name,$datum);
  5358.                 }
  5359.                 if($key == 'filesPVPassageHuissierMultiple'){
  5360.                     $name = 'Urbanisme/PV passage huissier/'; $zip = $this->addZipArray($zip,$name,$datum);
  5361.                 }
  5362.                 if($key == 'filesCertificatNonRecoursMultiple'){
  5363.                     $name = 'Urbanisme/Certificat de non-recours/'; $zip = $this->addZipArray($zip,$name,$datum);
  5364.                 }
  5365.                 if($key == 'filesCertificatNonRetraitMultiple'){
  5366.                     $name = 'Urbanisme/Certificat de non-retrait/'; $zip = $this->addZipArray($zip,$name,$datum);
  5367.                 }
  5368.                 if($key == 'filesPromessebailMultiple'){
  5369.                     $name = 'Foncier/Promesse de bail/'; $zip = $this->addZipArray($zip,$name,$datum);
  5370.                 }
  5371.                 if($key == 'filesEtatHypothecaireMultiple'){
  5372.                     $name = 'Foncier/Etat hypothécaire/'; $zip = $this->addZipArray($zip,$name,$datum);
  5373.                 }
  5374.                 if($key == 'filesTitreProprieteMultiple'){
  5375.                     $name = 'Foncier/Titre de propriété/'; $zip = $this->addZipArray($zip,$name,$datum);
  5376.                 }
  5377.                 if($key == 'filesAutreEtap6'){
  5378.                     $name = 'Foncier/Autres (Cession de bail, projet de bail…)/'; $zip = $this->addZipArray($zip,$name,$datum);
  5379.                 }
  5380.                 if($key == 'filesExtraitMatriceCadastrale'){
  5381.                     $name = 'Foncier/Extrait de matrice cadastrale/'; $zip = $this->addZipArray($zip,$name,$datum);
  5382.                 }
  5383.                 if($key == 'filesCarteIdentite'){
  5384.                     $name = 'Foncier/Carte d’identité/'; $zip = $this->addZipArray($zip,$name,$datum);
  5385.                 }
  5386.                 if($key == 'filesLivretFamille'){
  5387.                     $name = 'Foncier/Livret de famille/'; $zip = $this->addZipArray($zip,$name,$datum);
  5388.                 }
  5389.                 if($key == 'filesAccordMl'){
  5390.                     $name = 'Foncier/Accord ML/'; $zip = $this->addZipArray($zip,$name,$datum);
  5391.                 }
  5392.                 if($key == 'filesKbis'){
  5393.                     $name = 'Foncier/Kbis/'; $zip = $this->addZipArray($zip,$name,$datum);
  5394.                 }
  5395.                 if($key == 'filesStatuts'){
  5396.                     $name = 'Foncier/Statuts/'; $zip = $this->addZipArray($zip,$name,$datum);
  5397.                 }
  5398.                 if($key == 'filesEtatDecriptifMultiple'){
  5399.                     $name = 'Foncier/DA - EDDV/'; $zip = $this->addZipArray($zip,$name,$datum);
  5400.                 }
  5401.                 if($key == 'filesPlanServitudesMultiple'){
  5402.                     $name = 'Foncier/Plan de servitudes/'; $zip = $this->addZipArray($zip,$name,$datum);
  5403.                 }
  5404.             }
  5405.         }
  5406.         return $zipfile;
  5407.     }
  5408.     private function addPdfFpdi($pdf,$file){
  5409.         $fileContent = file_get_contents($file);
  5410.         if(strpos(mime_content_type($file),'image/') === 0){
  5411.             $pdf->addPage();
  5412.             $pdf->Image($file);
  5413.         }else if(strpos(mime_content_type($file),'application/pdf') === 0){
  5414.             $pageCount = $pdf->setSourceFile(StreamReader::createByString($fileContent));
  5415.             for ($i = 0; $i < $pageCount; $i++) {
  5416.                 $tpl = $pdf->importPage($i + 1, '/MediaBox');
  5417.                 $pdf->addPage();
  5418.                 $pdf->useTemplate($tpl,0,0,null,null,true);
  5419.             }
  5420.         }
  5421.         return $pdf;
  5422.     }
  5423.     private function addPagePdfStr($str,$array){
  5424.         $html = $this->twig->render('admin/project/page-pdf-str.html.twig',['str'=>$str,'array'=>$array]);
  5425.         $html2pdf = new Html2Pdf('P', 'A4', 'fr', true, 'UTF-8', array('5','5','5','5'));
  5426.         $html2pdf->getSecurityService()->disableCheckAllowedHosts();
  5427.         $html2pdf->pdf->SetAuthor('Prejeace-Industrial');
  5428.         $html2pdf->pdf->SetTitle('DOE');
  5429.         $html2pdf->pdf->SetSubject('DOE');
  5430.         $html2pdf->pdf->SetKeywords('DOE');
  5431.         $html2pdf->pdf->SetDisplayMode('real');
  5432.         $html2pdf->WriteHTML($html);
  5433.         $nameFichier = 'page-pdf-str.pdf';
  5434.         $path_pdf = $this->params->get('uploads_directory').'/'.$nameFichier;
  5435.         $html2pdf->Output($path_pdf,'F');
  5436.         return $path_pdf ;
  5437.     }
  5438.     public function addComment2($request,$user,$idComment=null)
  5439.     {
  5440.         $comment = $request->get('comment');
  5441.         $token = $request->get('token');
  5442.         if($comment and $token){
  5443.             $project = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  5444.             if($project && $user){
  5445.                 if($idComment){
  5446.                     $commentEntity = $this->em->getRepository(CommentProject2::class)->find($idComment);
  5447.                     $commentEntity->setUpdateAt(new \DateTime());
  5448.                     $commentChild = $commentEntity->getComment();
  5449.                     $userChild = $commentEntity->getUser();
  5450.                     $createdAt = $commentEntity->getCreatedAt();
  5451.                     $commentEntityChild = new CommentProject2Child();
  5452.                     $commentEntityChild->setUser($userChild);
  5453.                     $commentEntityChild->setComment($commentChild);
  5454.                     $commentEntityChild->setCommentProject2($commentEntity);
  5455.                     $commentEntityChild->setCreatedAt($createdAt);
  5456.                     $this->em->persist($commentEntityChild);
  5457.                     $this->em->flush();
  5458.                 }else{
  5459.                     $commentEntity = new CommentProject2();
  5460.                 }
  5461.                 $commentEntity->setProject($project);
  5462.                 $commentEntity->setUser($user);
  5463.                 $commentEntity->setComment($comment);
  5464.                 $this->em->persist($commentEntity);
  5465.                 $this->em->flush();
  5466.                 $this->notification->notifCommentProjectAllUser($project,$user);
  5467.                 return [
  5468.                     'commentEntity' => $commentEntity,
  5469.                     'project' => $project,
  5470.                     'success' => true
  5471.                 ];
  5472.             }
  5473.         }
  5474.         return [
  5475.             'success' => false
  5476.         ];
  5477.     }
  5478.     public function deleteComment2($idComment)
  5479.     {
  5480.         if($idComment){
  5481.             $commentEntity = $this->em->getRepository(CommentProject2::class)->find($idComment);
  5482.             if($commentEntity) {
  5483.                 $this->em->remove($commentEntity);
  5484.                 $this->em->flush();
  5485.             }
  5486.             return [
  5487.                 'success' => true
  5488.             ];
  5489.         }
  5490.         return [
  5491.             'success' => false
  5492.         ];
  5493.     }
  5494.     public function getDoeListFile($project){
  5495.         $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project'=>$project->getId()]);
  5496.         $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  5497.         $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project'=>$project->getId()]);
  5498.         $etap174 = $this->em->getRepository(Etap174::class)->findOneBy(['project'=>$project->getId()]);
  5499.         $etap161 = $this->em->getRepository(Etap161::class)->findOneBy(['project'=>$project->getId()]);
  5500.         $etap20 = $this->em->getRepository(Etap20::class)->findOneBy(['project'=>$project->getId()]);
  5501.         $filesDossierPcDpMultiple = [];
  5502.         $filesPlanDeCalepinageCablage = [];
  5503.         $filesModulePhotvoltaiques = [];
  5504.         $filesOnduleurs = [];
  5505.         $filesStructureIntegration = [];
  5506.         $filesGarantie = [];
  5507.         $filesCertificats = [];
  5508.         $filesConsuel = [];
  5509.         $filesPhotos = [];
  5510.         if($etap1){
  5511.             if(count($etap1->getFileDossierPcDpMultiple())>0){
  5512.                 foreach ($etap1->getFileDossierPcDpMultiple() as $item){
  5513.                     $filesDossierPcDpMultiple[] = $item;
  5514.                 }
  5515.             }
  5516.         }
  5517.         if($etap174){
  5518.             if(count($etap174->getFilePlanCaplageStrings174Multiple())>0){
  5519.                 foreach ($etap174->getFilePlanCaplageStrings174Multiple() as $item){
  5520.                         $filesPlanDeCalepinageCablage[] = $item ;
  5521.                 }
  5522.             }
  5523.             if(count($etap174->getFilePlanCalepinageModule174Multiple())>0){
  5524.                 foreach ($etap174->getFilePlanCalepinageModule174Multiple() as $item){
  5525.                         $filesPlanDeCalepinageCablage[] = $item ;
  5526.                 }
  5527.             }
  5528.             if(count($etap174->getFileSchemaUnifilaireInstallation174Multiple())>0){
  5529.                 foreach ($etap174->getFileSchemaUnifilaireInstallation174Multiple() as $item){
  5530.                     $filesPlanDeCalepinageCablage[] =  $item ;
  5531.                 }
  5532.             }
  5533.         }
  5534.         if($etap160){
  5535.             if(count($etap160->getFileEvaluationCarboneModuleMultiple())>0){
  5536.                 foreach ($etap160->getFileEvaluationCarboneModuleMultiple() as $item){
  5537.                     $filesModulePhotvoltaiques[] = $item ;
  5538.                 }
  5539.             }
  5540.             if(count($etap160->getFileFicheTechniqueModuleMultiple())>0){
  5541.                 foreach ($etap160->getFileFicheTechniqueModuleMultiple() as $item){
  5542.                     $filesModulePhotvoltaiques[] = $item ;
  5543.                 }
  5544.             }
  5545.             if(count($etap160->getFileFicheTechniqueOnduleurMultiple())>0){
  5546.                 foreach ($etap160->getFileFicheTechniqueOnduleurMultiple() as $item){
  5547.                     $filesOnduleurs[] = $item ;
  5548.                 }
  5549.             }
  5550.             if(count($etap160->getFileAttestationBrigageOnduleurMultiple())>0){
  5551.                 foreach ($etap160->getFileAttestationBrigageOnduleurMultiple() as $item){
  5552.                     $filesOnduleurs[] = $item ;
  5553.                 }
  5554.             }
  5555.             if(count($etap160->getFileFicheSystemeIntegrationMultiple())>0){
  5556.                 foreach ($etap160->getFileFicheSystemeIntegrationMultiple() as $item){
  5557.                     $filesStructureIntegration[] = $item ;
  5558.                 }
  5559.             }
  5560.             if(count($etap160->getFileFicheGarantiOnduleurMultiple())>0){
  5561.                 foreach ($etap160->getFileFicheGarantiOnduleurMultiple() as $item){
  5562.                     $filesGarantie[] = $item ;
  5563.                 }
  5564.             }
  5565.         }
  5566.         if($etap14) {
  5567.             if (count($etap14->getFileAttestationS21Multiple()) > 0) {
  5568.                 foreach ($etap14->getFileAttestationS21Multiple() as $item) {
  5569.                     $filesCertificats[] = $item ;
  5570.                 }
  5571.             }
  5572.         }
  5573.         if($etap161) {
  5574.             if (count($etap161->getFileQualiPVInstallateurMultiple()) > 0) {
  5575.                 foreach ($etap161->getFileQualiPVInstallateurMultiple() as $item) {
  5576.                     $filesCertificats[] = $item ;
  5577.                 }
  5578.             }
  5579.         }
  5580.         if($etap20) {
  5581.             if (count($etap20->getFileConsuelEtap20Multiple()) > 0) {
  5582.                 foreach ($etap20->getFileConsuelEtap20Multiple() as $item) {
  5583.                     $filesConsuel[] = $item ;
  5584.                 }
  5585.             }
  5586.         }
  5587.         if($etap174){
  5588.             if(count($etap174->getFilePhotosGenerateur174Multiple())>0){
  5589.                 foreach ($etap174->getFilePhotosGenerateur174Multiple() as $item){
  5590.                     $filesPhotos[] = $item ;
  5591.                 }
  5592.             }
  5593.             if(count($etap174->getFileShemaAgencementShelterPhotos174Multiple())>0){
  5594.                 foreach ($etap174->getFileShemaAgencementShelterPhotos174Multiple() as $item){
  5595.                     $filesPhotos[] = $item ;
  5596.                 }
  5597.             }
  5598.         }
  5599.         return [
  5600.             'filesDossierPcDpMultiple' => $filesDossierPcDpMultiple,
  5601.             'filesPlanDeCalepinageCablage' => $filesPlanDeCalepinageCablage,
  5602.             'filesModulePhotvoltaiques' => $filesModulePhotvoltaiques,
  5603.             'filesOnduleurs' => $filesOnduleurs,
  5604.             'filesStructureIntegration' => $filesStructureIntegration,
  5605.             'filesGarantie' => $filesGarantie,
  5606.             'filesCertificats' => $filesCertificats,
  5607.             'filesConsuel' => $filesConsuel,
  5608.             'filesPhotos' => $filesPhotos
  5609.         ];
  5610.     }
  5611.     public function getBailListFile($project){
  5612.         $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  5613.         $etap6 = $this->em->getRepository(Etap6::class)->findOneBy(['project'=>$project->getId()]);
  5614.         $etap601 = $this->em->getRepository(Etap601::class)->findOneBy(['project'=>$project->getId()]);
  5615.         $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project'=>$project->getId()]);
  5616.         $etap2 = $this->em->getRepository(Etap2::class)->findOneBy(['project'=>$project->getId()]);
  5617.         $filesDossierPcDpMultiple = [];
  5618.         $filesArretePcDpMultiple = [];
  5619.         $filesPVPassageHuissierMultiple = [];
  5620.         $filesCertificatNonRecoursMultiple = [];
  5621.         $filesCertificatNonRetraitMultiple= [];
  5622.         $filesPromessebailMultiple = [];
  5623.         $filesEtatHypothecaireMultiple = [];
  5624.         $filesTitreProprieteMultiple = [];
  5625.         $filesAutreEtap6 = [];
  5626.         $filesExtraitMatriceCadastrale = [];
  5627.         $filesCarteIdentite = [];
  5628.         $filesLivretFamille = [];
  5629.         $filesAccordMl = [];
  5630.         $filesKbis = [];
  5631.         $filesStatuts = [];
  5632.         $filesEtatDecriptifMultiple = [];
  5633.         $filesPlanServitudesMultiple = [];
  5634.         if($etap1){
  5635.             if(count($etap1->getFileDossierPcDpMultiple())>0){
  5636.                 foreach ($etap1->getFileDossierPcDpMultiple() as $item){
  5637.                     $filesDossierPcDpMultiple[] = $item;
  5638.                 }
  5639.             }
  5640.             if(count($etap1->getFileArretePcDpMultiple())>0){
  5641.                 foreach ($etap1->getFileArretePcDpMultiple() as $item){
  5642.                     $filesArretePcDpMultiple[] = $item;
  5643.                 }
  5644.             }
  5645.         }
  5646.         if($etap2){
  5647.             if(count($etap2->getFilePVPassageHuissierMultiple())>0){
  5648.                 foreach ($etap2->getFilePVPassageHuissierMultiple() as $item){
  5649.                     $filesPVPassageHuissierMultiple[] = $item;
  5650.                 }
  5651.             }
  5652.             if(count($etap2->getFileCertificatNonRecoursMultiple())>0){
  5653.                 foreach ($etap2->getFileCertificatNonRecoursMultiple() as $item){
  5654.                     $filesCertificatNonRecoursMultiple[] = $item;
  5655.                 }
  5656.             }
  5657.             if(count($etap2->getFileCertificatNonRetraitMultiple())>0){
  5658.                 foreach ($etap2->getFileCertificatNonRetraitMultiple() as $item){
  5659.                     $filesCertificatNonRetraitMultiple[] = $item;
  5660.                 }
  5661.             }
  5662.         }
  5663.         if($etap5){
  5664.             if(count($etap5->getFilePromessebailMultiple())>0){
  5665.                 foreach ($etap5->getFilePromessebailMultiple() as $item){
  5666.                     $filesPromessebailMultiple[] = $item;
  5667.                 }
  5668.             }
  5669.         }
  5670.         if($etap6){
  5671.             if(count($etap6->getFileEtatHypothecaireMultiple())>0){
  5672.                 foreach ($etap6->getFileEtatHypothecaireMultiple() as $item){
  5673.                     $filesEtatHypothecaireMultiple[] = $item;
  5674.                 }
  5675.             }
  5676.             if(count($etap6->getFileTitreProprieteMultiple())>0){
  5677.                 foreach ($etap6->getFileTitreProprieteMultiple() as $item){
  5678.                     $filesTitreProprieteMultiple[] = $item;
  5679.                 }
  5680.             }
  5681.             if(count($etap6->getFileAutreEtap6())>0){
  5682.                 foreach ($etap6->getFileAutreEtap6() as $item){
  5683.                     $filesAutreEtap6[] = $item;
  5684.                 }
  5685.             }
  5686.             if(count($etap6->getFileExtraitMatriceCadastrale())>0){
  5687.                 foreach ($etap6->getFileExtraitMatriceCadastrale() as $item){
  5688.                     $filesExtraitMatriceCadastrale[] = $item;
  5689.                 }
  5690.             }
  5691.             if(count($etap6->getFileCarteIdentite())>0){
  5692.                 foreach ($etap6->getFileCarteIdentite() as $item){
  5693.                     $filesCarteIdentite[] = $item;
  5694.                 }
  5695.             }
  5696.             if(count($etap6->getFileLivretFamille())>0){
  5697.                 foreach ($etap6->getFileLivretFamille() as $item){
  5698.                     $filesLivretFamille[] = $item;
  5699.                 }
  5700.             }
  5701.             if(count($etap6->getFileAccordMl())>0){
  5702.                 foreach ($etap6->getFileAccordMl() as $item){
  5703.                     $filesAccordMl[] = $item;
  5704.                 }
  5705.             }
  5706.             if(count($etap6->getFileKbis())>0){
  5707.                 foreach ($etap6->getFileKbis() as $item){
  5708.                     $filesKbis[] = $item;
  5709.                 }
  5710.             }
  5711.             if(count($etap6->getFileStatuts())>0){
  5712.                 foreach ($etap6->getFileStatuts() as $item){
  5713.                     $filesStatuts[] = $item;
  5714.                 }
  5715.             }
  5716.         }
  5717.         if($etap601){
  5718.             if(count($etap601->getFileEtatDecriptifMultiple())>0){
  5719.                 foreach ($etap601->getFileEtatDecriptifMultiple() as $item){
  5720.                     $filesEtatDecriptifMultiple[] = $item;
  5721.                 }
  5722.             }
  5723.             if(count($etap601->getFilePlanServitudesMultiple())>0){
  5724.                 foreach ($etap601->getFilePlanServitudesMultiple() as $item){
  5725.                     $filesPlanServitudesMultiple[] = $item;
  5726.                 }
  5727.             }
  5728.         }
  5729.         return [
  5730.             'filesDossierPcDpMultiple' => $filesDossierPcDpMultiple,
  5731.             'filesArretePcDpMultiple' => $filesArretePcDpMultiple,
  5732.             'filesPVPassageHuissierMultiple' => $filesPVPassageHuissierMultiple,
  5733.             'filesCertificatNonRecoursMultiple' => $filesCertificatNonRecoursMultiple,
  5734.             'filesCertificatNonRetraitMultiple' => $filesCertificatNonRetraitMultiple,
  5735.             'filesPromessebailMultiple' => $filesPromessebailMultiple,
  5736.             'filesEtatHypothecaireMultiple' => $filesEtatHypothecaireMultiple,
  5737.             'filesTitreProprieteMultiple' => $filesTitreProprieteMultiple,
  5738.             'filesAutreEtap6' => $filesAutreEtap6,
  5739.             'filesExtraitMatriceCadastrale' => $filesExtraitMatriceCadastrale,
  5740.             'filesCarteIdentite' => $filesCarteIdentite,
  5741.             'filesLivretFamille' => $filesLivretFamille,
  5742.             'filesAccordMl' => $filesAccordMl,
  5743.             'filesKbis' => $filesKbis,
  5744.             'filesStatuts' => $filesStatuts,
  5745.             'filesEtatDecriptifMultiple' => $filesEtatDecriptifMultiple,
  5746.             'filesEtatDecriptifMultiple' => $filesEtatDecriptifMultiple,
  5747.             'filesPlanServitudesMultiple' => $filesPlanServitudesMultiple,
  5748.         ];
  5749.     }
  5750.     public function extractBudget($projects,$request){
  5751.         $file= $this->params->get('zips_directory')."/extraire_budgets.xlsx";
  5752.         $spreadsheet = new Spreadsheet();
  5753.         $sheet = $spreadsheet->getActiveSheet();
  5754.         // Head 2
  5755.         $tableHead2 = [
  5756.             'font'=>[
  5757.                 'color'=>[
  5758.                     'rgb'=>'0071c1'
  5759.                 ],
  5760.                 'bold'=>true,
  5761.                 'size'=>12
  5762.             ],
  5763.             'fill'=>[
  5764.                 'fillType' => Fill::FILL_SOLID,
  5765.                 'startColor' => [
  5766.                     'rgb' => 'dcebf4'
  5767.                 ]
  5768.             ],
  5769.         ];
  5770.         $sheet->setCellValue('A1',"Nom du projet")
  5771.             ->setCellValue('B1',"Budget développement")
  5772.             ->setCellValue('C1',"Montant dépenses développement")
  5773.             ->setCellValue('D1',"Budget Construction")
  5774.             ->setCellValue('E1',"Montant factures Construction")
  5775.             ->setCellValue('F1',"Total DEVEX - CAPEX")
  5776.             ->setCellValue('G1',"Montant dépenses DEVEX - CAPEX")
  5777.             ->setCellValue('H1',"Exploitation");
  5778.         // Borders a2 z2
  5779.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5780.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5781.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5782.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5783.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5784.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5785.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5786.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5787.         //width
  5788.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(35);
  5789.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  5790.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(35);
  5791.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  5792.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(35);
  5793.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  5794.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(35);
  5795.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(16);
  5796.         $spreadsheet->getActiveSheet()->getStyle('A1:H1')->applyFromArray($tableHead2);
  5797.         //loop through the data
  5798.         //current row
  5799.         $row=2;
  5800.         foreach($projects as $project){
  5801.             $tab = $this->getTabFacturationParProject($project);
  5802.             $spreadsheet->getActiveSheet()
  5803.                 ->setCellValue('A'.$row , $tab['projet']['name'])
  5804.                 ->setCellValue('B'.$row , $tab['developpement']['budget'])
  5805.                 ->setCellValue('C'.$row , $tab['developpement']['montant'])
  5806.                 ->setCellValue('D'.$row , $tab['construction']['budget'])
  5807.                 ->setCellValue('E'.$row , $tab['construction']['montant'])
  5808.                 ->setCellValue('F'.$row , $tab['total']['budget'])
  5809.                 ->setCellValue('G'.$row , $tab['total']['montant'])
  5810.                 ->setCellValue('H'.$row , $tab['exploitation']['montant'])
  5811.             ;
  5812.             //increment row
  5813.             $row++;
  5814.         }
  5815.         $firstRow=1;
  5816.         $lastRow=$row-1;
  5817.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":H".$lastRow);
  5818.         $writer = new Xlsx($spreadsheet);
  5819.         $writer->save($file);
  5820.         return $file;
  5821.     }
  5822.     public function extractRapports($rapports,$request){
  5823.         $file= $this->params->get('zips_directory')."/extraire_rapports.xlsx";
  5824.         $spreadsheet = new Spreadsheet();
  5825.         $sheet = $spreadsheet->getActiveSheet();
  5826.         // Head 2
  5827.         $tableHead2 = [
  5828.             'font'=>[
  5829.                 'color'=>[
  5830.                     'rgb'=>'0071c1'
  5831.                 ],
  5832.                 'bold'=>true,
  5833.                 'size'=>12
  5834.             ],
  5835.             'fill'=>[
  5836.                 'fillType' => Fill::FILL_SOLID,
  5837.                 'startColor' => [
  5838.                     'rgb' => 'dcebf4'
  5839.                 ]
  5840.             ],
  5841.         ];
  5842.         $sheet->setCellValue('A1',"Centrale")
  5843.             ->setCellValue('B1',"Objet d’intervention")
  5844.             ->setCellValue('C1',"Nom du rapport")
  5845.             ->setCellValue('D1',"Date de l’intervention")
  5846.             ->setCellValue('E1',"Description de l’intervention")
  5847.             ->setCellValue('F1',"Suivi nécessaire")
  5848.             ->setCellValue('G1',"Commentaire Suivi")
  5849.             ->setCellValue('H1',"Chargé intervention corrective")
  5850.             ->setCellValue('I1',"Devis à recevoir")
  5851.             ->setCellValue('J1',"Constructeur")
  5852.             ->setCellValue('K1',"Pertes de production")
  5853.             ->setCellValue('L1',"Date de début de perte")
  5854.             ->setCellValue('M1',"Date de fin de perte")
  5855.             ->setCellValue('N1',"Coût de l’intervention")
  5856.             ->setCellValue('O1',"Numero facture")
  5857.             ->setCellValue('P1',"Document url")
  5858.         ;
  5859.         // Borders a2 z2
  5860.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5861.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5862.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5863.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5864.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5865.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5866.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5867.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5868.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5869.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5870.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5871.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5872.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5873.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5874.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5875.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5876.         //width
  5877.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
  5878.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  5879.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  5880.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  5881.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  5882.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  5883.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(30);
  5884.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(30);
  5885.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(30);
  5886.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(30);
  5887.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(30);
  5888.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(30);
  5889.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(30);
  5890.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(30);
  5891.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(30);
  5892.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(30);
  5893.         $spreadsheet->getActiveSheet()->getStyle('A1:P1')->applyFromArray($tableHead2);
  5894.         //loop through the data
  5895.         //current row
  5896.         $row=2;
  5897.         foreach($rapports as $rapport){
  5898.             $urlDocumment = $rapport->getRapport()?$rapport->getRapport()->getPath() : null;
  5899.             $nameDocumment = $rapport->getRapport()?$rapport->getRapport()->getNomenclature()?$rapport->getRapport()->getNomenclature():$rapport->getRapport()->getName():null;
  5900.            $factureNum = '';
  5901.             $j = 1;
  5902.             $jCount = count($rapport->getFinanceFacture());
  5903.             if($jCount>0){
  5904.                 foreach ($rapport->getFinanceFacture() as $item){
  5905.                     $trait = $jCount == $j  ? ' ' : "\n";
  5906.                     $factureNum .= $item->getNumeroFacture().$trait;
  5907.                     $j++;
  5908.                 }
  5909.                 $spreadsheet->getActiveSheet()->setCellValue('O'.$row , $factureNum );
  5910.             }
  5911.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getAlignment()->setWrapText(true);
  5912.             $spreadsheet->getActiveSheet()
  5913.                 ->setCellValue('A'.$row , $rapport->getProject()?$rapport->getProject()->getName():'')
  5914.                 ->setCellValue('B'.$row , $rapport->getObjectInterventionSrc())
  5915.                 ->setCellValue('C'.$row , $rapport->getName())
  5916.                 ->setCellValue('E'.$row , $rapport->getDescriptionIntervention())
  5917.                 ->setCellValue('F'.$row , $rapport->getIsSuiviNecessaire()? 'Oui': 'Non')
  5918.                 ->setCellValue('G'.$row , $rapport->getCommentaireSuivi())
  5919.                 ->setCellValue('H'.$row , $rapport->getChargeInterventionCorrectiveStrAll())
  5920.                 ->setCellValue('I'.$row , $rapport->getDevisARecevoir()? 'Oui': 'Non')
  5921.                 ->setCellValue('J'.$row , $rapport->getConstructeur()? $rapport->getConstructeur()->getName() : '-')
  5922.                 ->setCellValue('K'.$row , $rapport->getIsPerteProduction()? 'Oui': 'Non')
  5923.                 ->setCellValue('N'.$row , $rapport->getCoutIntervention() ? $rapport->getCoutIntervention().'€' : '0€')
  5924.             ;
  5925.             $spreadsheet = $this->addStyleToCellDate('D',$row,$rapport->getDateIntervention(),$spreadsheet);
  5926.             $spreadsheet = $this->addStyleToCellDate('L',$row,$rapport->getIsPerteProduction()?$rapport->getDateDebutPerteProduction():null,$spreadsheet);
  5927.             $spreadsheet = $this->addStyleToCellDate('M',$row,$rapport->getIsPerteProduction()?$rapport->getDateFinDebutPerteProduction():null,$spreadsheet);
  5928.                 ;
  5929.             if($urlDocumment){
  5930.                 $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  5931.                 $spreadsheet->getActiveSheet()->setCellValue('P'.$row ,$nameDocumment);
  5932.                 $spreadsheet->getActiveSheet()->getCell('P'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlDocumment);
  5933.             }
  5934.             //increment row
  5935.             $row++;
  5936.         }
  5937.         $firstRow=1;
  5938.         $lastRow=$row-1;
  5939.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":L".$lastRow);
  5940.         $writer = new Xlsx($spreadsheet);
  5941.         $writer->save($file);
  5942.         return $file;
  5943.     }
  5944.     public function getRapportByRequestSelectAll($request){
  5945.         $search = $request->get('search');
  5946.         $centrale = $request->get('centrale');
  5947.         $suivi = $request->get('suivi');
  5948.         $isPerteProduction = $request->get('isPerteProduction');
  5949.         $interventionObject = $request->get('interventionObject');
  5950.         $centraleToken = $request->get('centraleToken');
  5951.         $user = $this->security->getUser();
  5952.         $roles = $user->getRoles();
  5953.         $spvsTab = [];
  5954.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  5955.             $spvs = $user->getSpv();
  5956.             foreach($spvs as $item){
  5957.                 $spvsTab[] = $item->getId();
  5958.             }
  5959.         }
  5960.         $filters = [
  5961.             'query' => trim(@$search['value']),
  5962.             'spvsTab' =>  $spvsTab,
  5963.             'centraleToken' =>  $centraleToken,
  5964.             'user' =>  $user
  5965.         ];
  5966.         $rapports= $this->em->getRepository(\App\Entity\RapportCentrale::class)->search($isPerteProduction,$centrale,$suivi,$interventionObject,$filters);
  5967.         return $rapports;
  5968.     }
  5969.     public function updateNomenclatureDocProject($token){
  5970.         $project = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  5971.         $nameDocEtaps = $this->getDocsName();
  5972.         if($project){
  5973.             foreach ($nameDocEtaps as $value){
  5974.                 foreach ($value['etaps'] as $etap){
  5975.                     if(isset($etap['etapsFiles'])) {
  5976.                         $etapNum = $etap['etapNum'];
  5977.                         $class = 'App\Entity\Etap' . $etapNum;
  5978.                         $etapEntity = $this->em->getRepository($class)->findOneBy(['project' => $project->getId()]);
  5979.                         if ($etapEntity) {
  5980.                             foreach ($etap['etapsFiles'] as $docName) {
  5981.                                 $nameFileDB = $docName['nameFileDB'];
  5982.                                 $nameFile = $docName['nameFile'];
  5983.                                 $classMetadata = $this->em->getClassMetadata($class);
  5984.                                 $associationMappings = $classMetadata->getAssociationMapping($nameFileDB);
  5985.                                 if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
  5986.                                     $nameGeteurFiled = 'get' . ucfirst($nameFileDB);
  5987.                                     $filedValue = $etapEntity->{$nameGeteurFiled}();
  5988.                                     if (!$filedValue->isEmpty()) {
  5989.                                         foreach ($filedValue as $item) {
  5990.                                             $this->etapsService->getNomenclature($etapEntity, $item, $nameFile);
  5991.                                         }
  5992.                                     }
  5993.                                 } else {
  5994.                                     $nameGeteurFiled = 'get' . ucfirst($nameFileDB);
  5995.                                     $filedValue = $etapEntity->{$nameGeteurFiled}();
  5996.                                     if ($filedValue) {
  5997.                                         $this->etapsService->getNomenclature($etapEntity, $filedValue, $nameFile);
  5998.                                     }
  5999.                                 }
  6000.                             }
  6001.                         }
  6002.                     }
  6003.                 }
  6004.             }
  6005.         }
  6006.     }
  6007.     public function getNomenclatureDocProjectDifferentSpv($project){
  6008.         $notPositon = false;
  6009.         $nameDocEtaps = $this->getDocsName();
  6010.         if($project){
  6011.             foreach ($nameDocEtaps as $value){
  6012.                 foreach ($value['etaps'] as $etap){
  6013.                     if(isset($etap['etapsFiles'])) {
  6014.                         $etapNum = $etap['etapNum'];
  6015.                         $class = 'App\Entity\Etap' . $etapNum;
  6016.                         $etapEntity = $this->em->getRepository($class)->findOneBy(['project' => $project->getId()]);
  6017.                         if ($etapEntity) {
  6018.                             foreach ($etap['etapsFiles'] as $docName) {
  6019.                                 $nameFileDB = $docName['nameFileDB'];
  6020.                                 $nameFile = $docName['nameFile'];
  6021.                                 $classMetadata = $this->em->getClassMetadata($class);
  6022.                                 $associationMappings = $classMetadata->getAssociationMapping($nameFileDB);
  6023.                                 if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
  6024.                                     $nameGeteurFiled = 'get' . ucfirst($nameFileDB);
  6025.                                     $filedValue = $etapEntity->{$nameGeteurFiled}();
  6026.                                     if (!$filedValue->isEmpty()) {
  6027.                                         foreach ($filedValue as $item) {
  6028.                                             if($project->getSpv() and (strpos($item->getNomenclature(),$project->getSpv()->getName()) === false)){
  6029.                                                 $notPositon = true;
  6030.                                             }
  6031.                                         }
  6032.                                     }
  6033.                                 } else {
  6034.                                     $nameGeteurFiled = 'get' . ucfirst($nameFileDB);
  6035.                                     $filedValue = $etapEntity->{$nameGeteurFiled}();
  6036.                                     if ($filedValue) {
  6037.                                         if($project->getSpv() and (strpos($filedValue->getNomenclature(),$project->getSpv()->getName()) === false)){
  6038.                                             $notPositon = true;
  6039.                                         }
  6040.                                     }
  6041.                                 }
  6042.                             }
  6043.                         }
  6044.                     }
  6045.                 }
  6046.             }
  6047.         }
  6048.         if($notPositon){
  6049.             return $project;
  6050.         }else{
  6051.             return false;
  6052.         }
  6053.     }
  6054.     public function checkParametrageLoyer($request,$token =null)
  6055.     {
  6056.         $centrale = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  6057.         $parametrageLoyer = $this->em->getRepository(ParametrageLoyer::class)->findOneBy(['centrale'=>$centrale->getId()]);
  6058.         if(!$parametrageLoyer){
  6059.             $parametrageLoyer = new ParametrageLoyer();
  6060.         }
  6061.         $originalTags = null;
  6062.         if($parametrageLoyer->getId()){
  6063.             $originalTags = new ArrayCollection();
  6064.             foreach ($parametrageLoyer->getParametrageLoyerPeriode() as $tag) {
  6065.                 $originalTags->add($tag);
  6066.             }
  6067.         }
  6068.         $form = $this->form->create(ParametrageLoyerType::class, $parametrageLoyer);
  6069.         $form->handleRequest($request);
  6070.         if ($form->isSubmitted() && $form->isValid()) {
  6071.             if($originalTags){
  6072.                 foreach ($originalTags as $tag) {
  6073.                     if (!$parametrageLoyer->getParametrageLoyerPeriode()->contains($tag)) {
  6074.                         if($this->checkLoyerFinance($tag)){
  6075.                             return true;
  6076.                         }else{
  6077.                         }
  6078.                     }
  6079.                 }
  6080.             }
  6081.         }
  6082.         return true;
  6083.     }
  6084.     public function checkLoyerFinance($parametrageLoyerPeriode){
  6085.         $isFactureAssocie = false;
  6086.         if($parametrageLoyerPeriode){
  6087.             $loyerPeriodes = $this->em->getRepository(LoyerFinance::class)->findBy(['parametrageLoyerPeriode'=>$parametrageLoyerPeriode->getId()]);
  6088.             if($loyerPeriodes){
  6089.                 return true;
  6090.             }
  6091.         }
  6092.         return false;
  6093.     }
  6094.     public function addParametrageLoyer($request,$token =null)
  6095.     {
  6096.         $centrale = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  6097.         $parametrageLoyer = $this->em->getRepository(ParametrageLoyer::class)->findOneBy(['centrale'=>$centrale->getId()]);
  6098.         if(!$parametrageLoyer){
  6099.             $parametrageLoyer = new ParametrageLoyer();
  6100.         }
  6101.         $originalTags = null;
  6102.         if($parametrageLoyer->getId()){
  6103.             $originalTags = new ArrayCollection();
  6104.             foreach ($parametrageLoyer->getParametrageLoyerPeriode() as $tag) {
  6105.                 $originalTags->add($tag);
  6106.             }
  6107.         }
  6108.         $form = $this->form->create(ParametrageLoyerType::class, $parametrageLoyer);
  6109.         $form->handleRequest($request);
  6110.         if ($form->isSubmitted() && $form->isValid()) {
  6111.             if($originalTags){
  6112.                 foreach ($originalTags as $tag) {
  6113.                     if (!$parametrageLoyer->getParametrageLoyerPeriode()->contains($tag)) {
  6114.                         if($this->deleteLoyerFinance($tag)){
  6115.                             $this->flashBag->add(
  6116.                                 'success',
  6117.                                 '⚠️ Nouveau paramétrage du loyer. Les anciennes données sont supprimées.'
  6118.                             );
  6119.                         }else{
  6120. //                            $this->flashBag->add(
  6121. //                                'danger',
  6122. //                                'Facture associé à certaines lignes de loyers !'
  6123. //                            );
  6124. //                            return [
  6125. //                                'form' => $form->createView(),
  6126. //                                'parametrageLoyer' => $parametrageLoyer,
  6127. //                                'loyersFinance' => $this->em->getRepository(LoyerFinance::class)->getByParametrageLoyer($parametrageLoyer),
  6128. //                                'centrale' => $centrale,
  6129. //                                'success' => false,
  6130. //                                'erreurMsg' => 'Facture associé à certaines lignes de loyers !',
  6131. //                                'action' => $this->router->generate('admin_exploitation_parametrage_layer_view',['token'=>$token]),
  6132. //                            ];
  6133.                         }
  6134.                     }
  6135.                 }
  6136.             }
  6137.             if($centrale){
  6138.                 $parametrageLoyer->setCentrale($centrale);
  6139.             }
  6140.             $this->em->persist($parametrageLoyer);
  6141.             $this->em->flush();
  6142.             $this->addLoyerPeride($parametrageLoyer);
  6143.             return [
  6144.                 'form' => $form->createView(),
  6145.                 'parametrageLoyer' => $parametrageLoyer,
  6146.                 'success' => true,
  6147.                 'centrale' => $centrale
  6148.             ];
  6149.         }
  6150.         return [
  6151.             'form' => $form->createView(),
  6152.             'parametrageLoyer' => $parametrageLoyer,
  6153.             'loyersFinance' => $this->em->getRepository(LoyerFinance::class)->getByParametrageLoyer($parametrageLoyer),
  6154.             'centrale' => $centrale,
  6155.             'success' => false,
  6156.             'action' => $this->router->generate('admin_exploitation_parametrage_layer_view',['token'=>$token]),
  6157.         ];
  6158.     }
  6159.     public function deleteLoyerFinance($parametrageLoyerPeriode){
  6160.         $isFactureAssocie = false;
  6161.         if($parametrageLoyerPeriode){
  6162.             $loyerPeriodes = $this->em->getRepository(LoyerFinance::class)->findBy(['parametrageLoyerPeriode'=>$parametrageLoyerPeriode->getId()]);
  6163.             if($loyerPeriodes){
  6164. //                foreach ($loyerPeriodes as $item){
  6165. //                    if($item->getFinanceFacture()){
  6166. //                        $isFactureAssocie = true;
  6167. //                    }
  6168. //                }
  6169. //                if($isFactureAssocie){
  6170. //                    return false;
  6171. //                }else{
  6172. //                    foreach ($loyerPeriodes as $item){
  6173. //                        $this->em->remove($item);
  6174. //                    }
  6175. //                    $this->em->flush();
  6176. //                    return true;
  6177. //                }
  6178.                 foreach ($loyerPeriodes as $item){
  6179.                     $this->em->remove($item);
  6180.                 }
  6181.                 $this->em->flush();
  6182.                 return true;
  6183.             }
  6184.         }
  6185.         return false;
  6186.     }
  6187.     public function addLoyerPeride($parametrageLoyer){
  6188.         $arrayLoyerIds = [];
  6189.         if($parametrageLoyer->getParametrageLoyerPeriode()){
  6190.             foreach ($parametrageLoyer->getParametrageLoyerPeriode() as $loyerPeriode){
  6191.                 $dateDebut = $loyerPeriode->getDateDebut();
  6192.                 $dateFin = $loyerPeriode->getDateFin();
  6193.                 $echeance = $loyerPeriode->getEcheance();
  6194.                 if($echeance == ParametrageLoyerPeriode::echeance_mensuelle){
  6195.                     $i=0;
  6196.                     $dateDebutLoyer = new \DateTime($dateDebut->format('Y-m-d'));
  6197.                     while ($dateDebutLoyer < $dateFin) {
  6198.                         $i += 1;
  6199.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6200.                         $dateFinLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6201.                         if($dateFinLoyer > $dateFin){
  6202.                             $dateFinLoyer = new \DateTime($dateFin->format('Y-m-d'));
  6203.                         }
  6204.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6205.                         $arrayLoyerIds[] = $this->addLoyerFinance($dateDebutLoyer,$dateFinLoyer,$loyerPeriode);
  6206.                         $dateDebutLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6207.                     }
  6208.                 }elseif ($echeance == ParametrageLoyerPeriode::echeance_semestrielle){
  6209.                     $i=0;
  6210.                     $dateDebutLoyer = new \DateTime($dateDebut->format('Y-m-d'));
  6211.                     while ($dateDebutLoyer < $dateFin) {
  6212.                         $i += 6;
  6213.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6214.                         $dateFinLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6215.                         if($dateFinLoyer > $dateFin){
  6216.                             $dateFinLoyer = new \DateTime($dateFin->format('Y-m-d'));
  6217.                         }
  6218.                         $arrayLoyerIds[] = $this->addLoyerFinance($dateDebutLoyer,$dateFinLoyer,$loyerPeriode);
  6219.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6220.                         $dateDebutLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6221.                     }
  6222.                 }elseif ($echeance == ParametrageLoyerPeriode::echeance_annuelle){
  6223.                     $i=0;
  6224.                     $dateDebutLoyer = new \DateTime($dateDebut->format('Y-m-d'));
  6225.                     while ($dateDebutLoyer < $dateFin) {
  6226.                         $i += 12;
  6227.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6228.                         $dateFinLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6229.                         if($dateFinLoyer > $dateFin){
  6230.                             $dateFinLoyer = new \DateTime($dateFin->format('Y-m-d'));
  6231.                         }
  6232.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6233.                         $arrayLoyerIds[] = $this->addLoyerFinance($dateDebutLoyer,$dateFinLoyer,$loyerPeriode);
  6234.                         $dateDebutLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6235.                     }
  6236.                 }
  6237.             }
  6238.         }
  6239.         if($arrayLoyerIds){
  6240.             $loyerFinanceNotPeriode = $this->em->getRepository(LoyerFinance::class)->getLoyerFinanceNotIds($arrayLoyerIds,$parametrageLoyer->getId());
  6241.             if($loyerFinanceNotPeriode){
  6242.                 foreach ($loyerFinanceNotPeriode as $value){
  6243.                     $this->em->remove($value);
  6244.                     $this->em->flush();
  6245.                 }
  6246.             }
  6247.         }
  6248.         $this->displayLoyerPeriode();
  6249.     }
  6250.     private function addLoyerFinance($dateDebut,$dateFin,$loyerPeriode){
  6251.         if($loyerPeriode->getEcheance() == ParametrageLoyerPeriode::echeance_mensuelle){
  6252.             $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'MMMM');
  6253.             $echeanceStr = 'Loyer '.$dateFin->format('Y').' - '.$intl->format($dateFin);
  6254.         }elseif ($loyerPeriode->getEcheance() == ParametrageLoyerPeriode::echeance_semestrielle){
  6255.             if($dateFin->format('m') > 6){
  6256.                 if($dateFin->format('m') == 7 && $dateFin->format('d') < 10){
  6257.                     $echeanceStr = 'Loyer '.$dateFin->format('Y').' - S1';
  6258.                 }else{
  6259.                     $echeanceStr = 'Loyer '.$dateFin->format('Y').' - S2';
  6260.                 }
  6261.             }else{
  6262.                 $echeanceStr = 'Loyer '.$dateFin->format('Y').' - S1';
  6263.             }
  6264.         }elseif ($loyerPeriode->getEcheance() == ParametrageLoyerPeriode::echeance_annuelle){
  6265.             $echeanceStr = 'Loyer '.$dateFin->format('Y');
  6266.         }
  6267.         $loyerPeriodeOld = $this->em->getRepository(LoyerFinance::class)->getByDateAndPeriode($dateDebut,$dateFin,$loyerPeriode);
  6268.         if($loyerPeriodeOld) {
  6269.             $loyerFinance = $loyerPeriodeOld[0];
  6270.         }else {
  6271.             $loyerFinance = new LoyerFinance();
  6272.         }
  6273.         $loyerFinance->setDateDebut($dateDebut);
  6274.         $loyerFinance->setDateFin($dateFin);
  6275.         $loyerFinance->setEcheanceStr($echeanceStr);
  6276.         $loyerFinance->setMontantHt($loyerPeriode->getMontant());
  6277.         $loyerFinance->setParametrageLoyerPeriode($loyerPeriode);
  6278.         $loyerFinance->setParametrageLoyer($loyerPeriode->getParametrageLoyer());
  6279.         $loyerFinance->setIsDisplay(false);
  6280.         $this->em->persist($loyerFinance);
  6281.         $this->em->flush();
  6282. //        $namefile = $this->getHtmlLoyerFacture($loyerFinance->getToken());
  6283. //        $loyerFinance->setPdfFile($namefile);
  6284. //        $this->em->persist($loyerFinance);
  6285. //        $this->em->flush();
  6286.         return $loyerFinance->getId();
  6287.     }
  6288.     public function updateFinanceLoyer($request,$token =null)
  6289.     {
  6290.         $loyerFinance = $this->em->getRepository(LoyerFinance::class)->findOneBy(['token'=>$token]);
  6291.         $form = $this->form->create(LoyerFinanceType::class, $loyerFinance);
  6292.         $form->handleRequest($request);
  6293.         if ($form->isSubmitted() && $form->isValid()) {
  6294.             $this->em->persist($loyerFinance);
  6295.             $this->em->flush();
  6296.             if(count($loyerFinance->getLoyerFinanceItem()) > 0){
  6297.                 foreach ($loyerFinance->getLoyerFinanceItem() as $item){
  6298.                     $namefile = $this->getHtmlLoyerFacture($item);
  6299.                     $item->setPdfFile($namefile);
  6300.                     $fileLoyerToken = $item->getTokenFileLoyer();
  6301.                     if($fileLoyerToken){
  6302.                         $fileLoyer = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileLoyerToken]);
  6303.                         $item->setFileLoyer($fileLoyer);
  6304.                     }
  6305.                     $this->em->persist($item);
  6306.                     $this->em->flush();
  6307.                 }
  6308.             }
  6309.             return [
  6310.                 'form' => $form->createView(),
  6311.                 'loyerFinance' => $loyerFinance,
  6312.                 'success' => true,
  6313.             ];
  6314.         }
  6315.         return [
  6316.             'form' => $form->createView(),
  6317.             'loyerFinance' => $loyerFinance,
  6318.             'success' => false,
  6319.             'action' => $this->router->generate('admin_exploitation_finance_loyer_view',['token'=>$token]),
  6320.         ];
  6321.     }
  6322.     public function updateAllFinanceLoyer($request)
  6323.     {
  6324.         $loyerFinances = $this->em->getRepository(LoyerFinance::class)->findAll();
  6325.         foreach ($loyerFinances as $finance){
  6326.             $facture = $finance->getFinanceFacture();
  6327.             if($facture){
  6328.                 $itemFacture = $this->em->getRepository(LoyerFinanceItem::class)->findOneBy(['financeFacture'=>$facture->getId(),'loyerFinance'=>$finance->getId()]);
  6329.                 if($itemFacture){
  6330.                     $itemFacture->setFinanceFacture($facture);
  6331.                     $itemFacture->setLoyerFinance($finance);
  6332.                     $itemFacture->setDateReglement($facture->getDatePaiement());
  6333.                     $itemFacture->setNumeroLoyer($facture->getNumeroFacture());
  6334.                     $itemFacture->setMontant($facture->getMonatantTtc());
  6335.                     $itemFacture->setMontantHt($facture->getMonatantHt());
  6336.                     $itemFacture->setMontantTva($facture->getTva());
  6337.                     $this->em->persist($itemFacture);
  6338.                     $this->em->flush();
  6339.                     $namefile = $this->getHtmlLoyerFacture($itemFacture);
  6340.                     $itemFacture->setPdfFile($namefile);
  6341.                     $this->em->persist($itemFacture);
  6342.                     $this->em->flush();
  6343.                 }
  6344.             }
  6345.         }
  6346.     }
  6347.     public function paginateFinanceLoyer($request){
  6348.         $length = $request->get('length');
  6349.         $length = $length && ($length!=-1)?$length:0;
  6350.         $start = $request->get('start');
  6351.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  6352.         $column =  $search = $request->get('columns');
  6353.         $order = $request->get('order')[0];
  6354.         $columnOrder = $order['column'];
  6355.         $dirOrder = $order['dir'];
  6356.         $columNameOrder = $column[$columnOrder]['data'];
  6357.         $search = $request->get('search');
  6358.         $user = $this->security->getUser();
  6359.         $roles = $user->getRoles();
  6360.         $spvsTab = [];
  6361.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  6362.             $spvs = $user->getSpv();
  6363.             foreach($spvs as $item){
  6364.                 $spvsTab[] = $item->getId();
  6365.             }
  6366.         }
  6367.         $filters = [
  6368.             'query' => trim(@$search['value']),
  6369.             'spvsTab' =>  $spvsTab,
  6370.             'centrales' =>  $request->get('centraleToken'),
  6371.             'spvLoyers' =>  $request->get('spvToken'),
  6372.             'isFactureReglee' =>  $request->get('isFactureReglee'),
  6373.             'user' =>  $user
  6374.         ];
  6375.         $loyers= $this->em->getRepository(\App\Entity\LoyerFinance::class)->searchLoyerFinance($filters, $start, $length, true,$columNameOrder, $dirOrder);
  6376.         $recordsFiltered= $this->em->getRepository(\App\Entity\LoyerFinance::class)->searchLoyerFinance($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  6377.         $recordsTotal= $this->em->getRepository(\App\Entity\LoyerFinance::class)->searchLoyerFinance(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  6378.         $output = array(
  6379.             'data' => array(),
  6380.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  6381.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  6382.         );
  6383.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  6384.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  6385.         foreach ($loyers as $loyer) {
  6386.             $action = $this->twig->render(
  6387.                 'admin/exploitation/default/boutonLoyer.html.twig', array(
  6388.                 'loyer' => $loyer
  6389.             ));
  6390.             $select = $this->twig->render(
  6391.                     'admin/exploitation/default/checkboxLoyer.html.twig', array(
  6392.                     'loyer' => $loyer
  6393.                 ));
  6394.             $commentaires = $loyer->getCommentFinanceLoyer();
  6395.             $facturesFinance = '';
  6396.             $numeroLoyer = '';
  6397.             $montantHt = 0;
  6398.             $dateReglement = '';
  6399.             if(count($loyer->getLoyerFinanceItem())>0){
  6400.                 foreach ($loyer->getLoyerFinanceItem() as $item){
  6401.                     $facturesFinance =  $facturesFinance.' '. $item->getFinanceFacture()->getNumeroFacture()."<br>" ;
  6402.                     $numeroLoyer =   $numeroLoyer.' '.$item->getNumeroLoyer()."<br>";
  6403.                     if($item->getDateReglement()){
  6404.                         $dateReglement = $dateReglement .' '.$item->getDateReglement()->format('d/m/Y')."<br>";
  6405.                     }
  6406.                     $montantHt = $montantHt + $item->getMontantHt();
  6407.                 }
  6408.             }
  6409.             if($montantHt != 0){
  6410.                 $montantHtTotal =  $this->espaceNumber($montantHt);
  6411.             }else{
  6412.                 $montantHtTotal = $this->espaceNumber($loyer->getMontant());
  6413.             }
  6414.             if($facturesFinance == ''){
  6415.                 $facturesFinance = $loyer->getFinanceFacture() ?$loyer->getFinanceFacture()->getNumeroFacture():'';
  6416.             }
  6417.             $output['data'][] = [
  6418.                 'responsive_id' => '',
  6419.                 'id' => $loyer->getId(),
  6420.                 'centrale' => $this->twig->render('admin/exploitation/default/nameCentraleLoyer.html.twig', array( 'string'=>$loyer->getParametrageLoyer()->getCentrale()->getName(),'commentaires'=>$commentaires)),
  6421.                 'spv' => $loyer->getParametrageLoyer()->getCentrale()->getSpv()?$loyer->getParametrageLoyer()->getCentrale()->getSpv()->getName():'',
  6422.                 'echeanceStr' => $loyer->getEcheanceStr(),
  6423.                 'dateDebut' => $loyer->getDateDebut()->format('d/m/Y'),
  6424.                 'dateFin' => $loyer->getDateFin()->format('d/m/Y'),
  6425.                 'montant' => $montantHtTotal,
  6426.                 'financeFacture' => $facturesFinance,
  6427.                 'isFactureReglee' => $loyer->getIsFactureReglee() ?"<span style='color:green;'>Oui</span>":"<span style='color:red;'>Non</span>",
  6428.                 'action' => $action,
  6429.                 'selectLoyer' => $select
  6430.             ];
  6431.         }
  6432.         return $output;
  6433.     }
  6434.     public function extractFactureLoyer($loyers,$request){
  6435.         $file= $this->params->get('zips_directory')."/extraire_loyers.xlsx";
  6436.         $spreadsheet = new Spreadsheet();
  6437.         $sheet = $spreadsheet->getActiveSheet();
  6438.         // Head 2
  6439.         $tableHead2 = [
  6440.             'font'=>[
  6441.                 'color'=>[
  6442.                     'rgb'=>'0071c1'
  6443.                 ],
  6444.                 'bold'=>true,
  6445.                 'size'=>12
  6446.             ],
  6447.             'fill'=>[
  6448.                 'fillType' => Fill::FILL_SOLID,
  6449.                 'startColor' => [
  6450.                     'rgb' => 'dcebf4'
  6451.                 ]
  6452.             ],
  6453.         ];
  6454.         $sheet->setCellValue('A1',"Centrale")
  6455.             ->setCellValue('B1',"SPV")
  6456.             ->setCellValue('C1',"Échéance du loyer ")
  6457.             ->setCellValue('D1',"Date de début de période ")
  6458.             ->setCellValue('E1',"Date de fin de période ")
  6459.             ->setCellValue('F1',"Montant")
  6460.             ->setCellValue('G1',"Facture associée")
  6461.             ->setCellValue('H1',"numéro de facture ")
  6462.             ->setCellValue('I1',"Facture réglée ")
  6463.             ->setCellValue('J1',"Date de règlement");
  6464.         // Borders a2 z2
  6465.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6466.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6467.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6468.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6469.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6470.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6471.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6472.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6473.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6474.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6475.         //width
  6476.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(50);
  6477.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  6478.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  6479.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(25);
  6480.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  6481.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  6482.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  6483.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  6484.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(20);
  6485.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  6486.         $spreadsheet->getActiveSheet()->getStyle('A1:J1')->applyFromArray($tableHead2);
  6487.         //loop through the data
  6488.         //current row
  6489.         $row=2;
  6490.         foreach($loyers as $loyer){
  6491.             $facturesFinance = '';
  6492.             $numeroLoyer = '';
  6493.             $montantHt = 0;
  6494.             $dateReglement = '';
  6495.             if(count($loyer->getLoyerFinanceItem())>0){
  6496.                 foreach ($loyer->getLoyerFinanceItem() as $item){
  6497.                     $facturesFinance =  $facturesFinance.' '. $item->getFinanceFacture()->getNumeroFacture()."\n" ;
  6498.                     $numeroLoyer =   $numeroLoyer.' '.$item->getNumeroLoyer()."\n";
  6499.                     if($item->getDateReglement()){
  6500.                         $dateReglement = $dateReglement .' '.$item->getDateReglement()->format('d/m/Y')."\n";
  6501.                     }
  6502.                     $montantHt = $montantHt + $item->getMontantHt();
  6503.                 }
  6504.             }
  6505.             if($montantHt != 0){
  6506.                 $montantHtTotal =  $this->espaceNumber($montantHt);
  6507.             }else{
  6508.                 $montantHtTotal = $this->espaceNumber($loyer->getMontant());
  6509.             }
  6510.             if($facturesFinance == ''){
  6511.                 $facturesFinance = $loyer->getFinanceFacture() ?$loyer->getFinanceFacture()->getNumeroFacture():'';
  6512.             }else{
  6513.                 $facturesFinance = rtrim($facturesFinance, "\n");
  6514.             }
  6515.             if($numeroLoyer == ''){
  6516.                 $numeroLoyer = $loyer->getNumeroLoyer();
  6517.             }else{
  6518.                 $numeroLoyer = rtrim($numeroLoyer, "\n");
  6519.             }
  6520.             if($dateReglement == ''){
  6521.                 $dateReglement = $loyer->getDateReglement() ? $loyer->getDateReglement()->format('d/m/Y') : '';
  6522.             }else{
  6523.                 $dateReglement = rtrim($dateReglement, "\n");
  6524.             }
  6525.             $spreadsheet->getActiveSheet()
  6526.                 ->setCellValue('A'.$row , (string)$loyer->getParametrageLoyer()->getCentrale()->getName())
  6527.                 ->setCellValue('B'.$row , $loyer->getParametrageLoyer()->getCentrale()->getSpv()?$loyer->getParametrageLoyer()->getCentrale()->getSpv()->getName():'')
  6528.                 ->setCellValue('C'.$row , (string)$loyer->getEcheanceStr())
  6529.                 ->setCellValue('F'.$row , $montantHtTotal)
  6530.                 ->setCellValue('G'.$row , $facturesFinance)
  6531.                 ->setCellValue('H'.$row , $numeroLoyer)
  6532.                 ->setCellValue('I'.$row , $loyer->getIsFactureReglee() ?"Oui":"Non")
  6533.                 ->setCellValue('J'.$row , $dateReglement)
  6534.             ;
  6535.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getAlignment()->setWrapText(true);
  6536.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getAlignment()->setWrapText(true);
  6537.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getAlignment()->setWrapText(true);
  6538.             $spreadsheet = $this->addStyleToCellDate('D',$row,$loyer->getDateDebut(),$spreadsheet);
  6539.             $spreadsheet = $this->addStyleToCellDate('E',$row,$loyer->getDateFin(),$spreadsheet);
  6540.             //increment row
  6541.             $row++;
  6542.         }
  6543.         $firstRow=1;
  6544.         $lastRow=$row-1;
  6545.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":J".$lastRow);
  6546.         $writer = new Xlsx($spreadsheet);
  6547.         $writer->save($file);
  6548.         return $file;
  6549.     }
  6550.     public function getLoyersByRequestSelectAll($request){
  6551.         $user = $this->security->getUser();
  6552.         $roles = $user->getRoles();
  6553.         $search = $request->get('search');
  6554.         $spvsTab = [];
  6555.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  6556.             $spvs = $user->getSpv();
  6557.             foreach($spvs as $item){
  6558.                 $spvsTab[] = $item->getId();
  6559.             }
  6560.         }
  6561.         $filters = [
  6562.             'query' => trim(@$search['value']),
  6563.             'spvsTab' =>  $spvsTab,
  6564.             'isFactureReglee' =>  $request->get('isFactureReglee'),
  6565.             'centrales' =>  $request->get('centraleToken'),
  6566.             'spvLoyers' =>  $request->get('spvToken'),
  6567.             'user' =>  $user
  6568.         ];
  6569.         $loyers= $this->em->getRepository(\App\Entity\LoyerFinance::class)->searchLoyerFinance($filters);
  6570.         return $loyers;
  6571.     }
  6572.     public function getPdfLoyerFacture($token){
  6573.         $loyer = $this->em->getRepository(LoyerFinance::class)->findOneBy(['token'=>$token]);
  6574.         if($loyer){
  6575.             $html = $this->twig->render('admin/exploitation/pdf-loyer.html.twig',array('data'=>$loyer));
  6576.             $title = 'Loyer';
  6577.             $html2pdf = new Html2Pdf('P', 'A4', 'fr', true, 'UTF-8', array('5','5','5','5'));
  6578.             $html2pdf->getSecurityService()->disableCheckAllowedHosts();
  6579.             $html2pdf->pdf->SetAuthor('prejeance');
  6580.             $html2pdf->pdf->SetTitle($title);
  6581.             $html2pdf->pdf->SetSubject($title);
  6582.             $html2pdf->pdf->SetKeywords($title);
  6583.             $html2pdf->pdf->SetDisplayMode('real');
  6584.             $html2pdf->WriteHTML($html);
  6585.             $nameFichier = 'LOYER-FACTURE-'.time().$loyer->getId().'.pdf';
  6586.             $path_pdf = $this->params->get('justificatif_finance_directory').'/'.$nameFichier;
  6587.             $html2pdf->Output($path_pdf,'F');
  6588.             return $nameFichier;
  6589.         }
  6590.         return null;
  6591.     }
  6592.     public function getHtmlLoyerFacture($loyerItem){
  6593.         if($loyerItem){
  6594.             $html = $this->twig->render('admin/exploitation/word-loyer.html.twig',array('data'=>$loyerItem));
  6595.             $phpWord = new PhpWord();
  6596.             $section = $phpWord->addSection();
  6597.             \PhpOffice\PhpWord\Shared\Html::addHtml($section, $html, false, false);
  6598.             $nameFichier = 'LOYER-FACTURE-'.time().$loyerItem->getLoyerFinance()->getId().'-'.$loyerItem->getId().'.docx';
  6599.             $path_pdf = $this->params->get('justificatif_finance_directory').'/'.$nameFichier;
  6600.             $phpWord->save($path_pdf,'Word2007');
  6601.             return $nameFichier;
  6602.         }
  6603.         return null;
  6604.     }
  6605.     /**
  6606.      * GENERATE RANDOM PASSWORD ON CREATE USER
  6607.      * @return string
  6608.      */
  6609.     function randomPassword() {
  6610.         $alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
  6611.         $pass = array(); //remember to declare $pass as an array
  6612.         $alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
  6613.         for ($i = 0; $i < 8; $i++) {
  6614.             $n = rand(0, $alphaLength);
  6615.             $pass[] = $alphabet[$n];
  6616.         }
  6617.         return implode($pass); //turn the array into a string
  6618.     }
  6619.     public function addUserFournisseurInProject($fournisseur){
  6620.         $name = $fournisseur->getName();
  6621.         $email = $fournisseur->getEmail();
  6622.         if(!$fournisseur->getUser()){
  6623.                 if($email) {
  6624.                     $user = new User();
  6625.                     // encode the plain password
  6626.                     $password = $this->randomPassword();
  6627.                     $user->setPassword(
  6628.                         $this->passwordEncoder->encodePassword(
  6629.                             $user,
  6630.                             $password
  6631.                         )
  6632.                     );
  6633.                     $user->setRoles(array('ROLE_FOURNISSEUR'));
  6634.                     $user->setFirstname($name);
  6635.                     $user->setLastname($name);
  6636.                     $user->setEmail($email);
  6637.                     $user->setAcces(User::ACCES_ECRETURE);
  6638.                     if ($fournisseur->getId()) {
  6639.                         $user->setIsEnabled($fournisseur->getIsEnabled());
  6640.                     } else {
  6641.                         $user->setIsEnabled(true);
  6642.                     }
  6643.                     $errors = $this->validator->validate($user);
  6644.                     if (count($errors) > 0) {
  6645.                         foreach ($errors as $error) {
  6646.                             $erreurs[] = $error->getMessage();
  6647.                         }
  6648.                         return array(
  6649.                             'erreurs' => $erreurs,
  6650.                             'success' => false
  6651.                         );
  6652.                     }
  6653.                     $this->em->persist($user);
  6654.                     $this->em->flush();
  6655.                     $this->notification->createUser($user, $password);
  6656.                 }else{
  6657.                     return array(
  6658.                         'success' => false,
  6659.                         'erreurs' => 'Erreur email !',
  6660.                     );
  6661.                 }
  6662.         }
  6663.         return array(
  6664.             'success' => true,
  6665.             'user' => $user
  6666.         );
  6667.     }
  6668.     public function getLogsSpv($str){
  6669.         $logs = $this->em->getRepository(HistoryProject::class)->getLogByStr($str);
  6670.         return $logs;
  6671.     }
  6672.     public function getLogsSpvProject($str,$tokenProjects){
  6673.         $logs = $this->em->getRepository(HistoryProject::class)->getLogByStrProject($str,$tokenProjects);
  6674.         return $logs;
  6675.     }
  6676.     public function getLogSpvXlsx($logs,$request){
  6677.         $file= $this->params->get('zips_directory')."/extraire_log_spv.xlsx";
  6678.         $spreadsheet = new Spreadsheet();
  6679.         $sheet = $spreadsheet->getActiveSheet();
  6680.         // Head 2
  6681.         $tableHead2 = [
  6682.             'font'=>[
  6683.                 'color'=>[
  6684.                     'rgb'=>'0071c1'
  6685.                 ],
  6686.                 'bold'=>true,
  6687.                 'size'=>12
  6688.             ],
  6689.             'fill'=>[
  6690.                 'fillType' => Fill::FILL_SOLID,
  6691.                 'startColor' => [
  6692.                     'rgb' => 'dcebf4'
  6693.                 ]
  6694.             ],
  6695.         ];
  6696.         $sheet->setCellValue('A1',"Projet")
  6697.             ->setCellValue('B1',"Date de changement")
  6698.             ->setCellValue('C1',"Ancienne SPV")
  6699.             ->setCellValue('D1',"Nouvelle SPV")
  6700.             ->setCellValue('E1',"personne en charge")
  6701.             ;
  6702.         // Borders a2 z2
  6703.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6704.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6705.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6706.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6707.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6708.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(50);
  6709.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  6710.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  6711.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  6712.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  6713.         $spreadsheet->getActiveSheet()->getStyle('A1:E1')->applyFromArray($tableHead2);
  6714.         //loop through the data
  6715.         //current row
  6716.         $row=2;
  6717.         foreach($logs as $item){
  6718.             $matches = [];
  6719.             preg_match_all("/`([^`]+)`/", $item->getAction(), $matches);
  6720.             $spvOld = '';
  6721.             $spvNew = '';
  6722.             if(isset($matches[1])){
  6723.                 if(isset($matches[1][1])){
  6724.                     $spvOld = isset($matches[1][0])?$matches[1][0]:null;
  6725.                     $spvNew = isset($matches[1][1])?$matches[1][1]:null;
  6726.                 }else{
  6727.                     $spvOld = '';
  6728.                     $spvNew = isset($matches[1][0])?$matches[1][0]:null;
  6729.                 }
  6730.             }
  6731.             $spreadsheet->getActiveSheet()
  6732.                 ->setCellValue('A'.$row , $item->getProject()->getName())
  6733.                 ->setCellValue('C'.$row , $spvOld)
  6734.                 ->setCellValue('D'.$row , $spvNew)
  6735.                 ->setCellValue('E'.$row , $item->getUser() ? $item->getUser()->getFirstname() .' '.$item->getUser()->getLastname() : '')
  6736.             ;
  6737.             $spreadsheet = $this->addStyleToCellDate('B',$row,$item->getCreatedAt(),$spreadsheet);
  6738.             $row++;
  6739.         }
  6740.         $firstRow=1;
  6741.         $lastRow=$row-1;
  6742.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":E".$lastRow);
  6743.         $writer = new Xlsx($spreadsheet);
  6744.         $writer->save($file);
  6745.         return $file;
  6746.     }
  6747.     public function addInstalateurCharpentier($fournisseurTitre,$project){
  6748.         if($fournisseurTitre == 'Installateur'){
  6749.             $etap16 = $this->em->getRepository(Etap16::class)->findOneBy(['project'=>$project->getId()]);
  6750.             if($etap16 && count($etap16->getContratConstruction())>0){
  6751.                 $contratConstructeurs = $etap16->getContratConstruction();
  6752.                 $isContratLotPv = false;
  6753.                 $installateur = $this->em->getRepository(FournisseurProject::class)->findOneBy(['project'=>$project->getId(),'titre'=>'Installateur']);
  6754.                 foreach ($contratConstructeurs as $constructeur){
  6755.                     if($constructeur->getTitre() == 'Contrat lot PV'){
  6756.                         if($installateur){
  6757.                             $constructeur->setFournisseur($installateur->getFournisseur());
  6758.                             $this->em->persist($constructeur);
  6759.                             $this->em->flush();
  6760.                         }
  6761.                         $isContratLotPv == true;
  6762.                     }
  6763.                 }
  6764.                 if(!$isContratLotPv && $installateur){
  6765.                     if($contratConstructeurs[0]->getTitre()){
  6766.                         if(isset($contratConstructeurs[1])){
  6767.                             if($contratConstructeurs[1]->getTitre()){
  6768.                             }else{
  6769.                                 $contratConstructeurs[1]->setFournisseur($installateur->getFournisseur());
  6770.                                 $contratConstructeurs[1]->setTitre('Contrat lot PV');
  6771.                                 $this->em->persist($contratConstructeurs[0]);
  6772.                                 $this->em->flush();
  6773.                             }
  6774.                         }
  6775.                     }else {
  6776.                         $contratConstructeurs[0]->setFournisseur($installateur->getFournisseur());
  6777.                         $contratConstructeurs[0]->setTitre('Contrat lot PV');
  6778.                         $this->em->persist($contratConstructeurs[0]);
  6779.                         $this->em->flush();
  6780.                     }
  6781.                 }
  6782.             }
  6783.         }
  6784.         if($fournisseurTitre == 'Charpentier'){
  6785.             $etap16 = $this->em->getRepository(Etap16::class)->findOneBy(['project'=>$project->getId()]);
  6786.             if($etap16 && count($etap16->getContratConstruction())>0){
  6787.                 $contratConstructeurs = $etap16->getContratConstruction();
  6788.                 $isContratLotBatiment = false;
  6789.                 $charpentier = $this->em->getRepository(FournisseurProject::class)->findOneBy(['project'=>$project->getId(),'titre'=>'Charpentier']);
  6790.                 foreach ($contratConstructeurs as $constructeur){
  6791.                     if($constructeur->getTitre() == 'Contrat lot Bâtiment'){
  6792.                         if($charpentier){
  6793.                             $constructeur->setFournisseur($charpentier->getFournisseur());
  6794.                             $this->em->persist($constructeur);
  6795.                             $this->em->flush();
  6796.                             $isContratLotBatiment == true;
  6797.                         }
  6798.                     }
  6799.                 }
  6800.                 if(!$isContratLotBatiment && $charpentier){
  6801.                     if($contratConstructeurs[0]->getTitre()){
  6802.                         if(isset($contratConstructeurs[1])){
  6803.                             if($contratConstructeurs[1]->getTitre()){
  6804.                             }else{
  6805.                                 $contratConstructeurs[1]->setFournisseur($charpentier->getFournisseur());;
  6806.                                 $contratConstructeurs[1]->setTitre('Contrat lot Bâtiment');
  6807.                                 $this->em->persist($contratConstructeurs[1]);
  6808.                                 $this->em->flush();
  6809.                             }
  6810.                         }
  6811.                     }else {
  6812.                         $contratConstructeurs[0]->setFournisseur($charpentier->getFournisseur());
  6813.                         $contratConstructeurs[0]->setTitre('Contrat lot Bâtiment');
  6814.                         $this->em->persist($contratConstructeurs[0]);
  6815.                         $this->em->flush();
  6816.                     }
  6817.                 }
  6818.             }
  6819.         }
  6820.     }
  6821.     public function addEpcFournisseur($project,$epc){
  6822.         $etap16 = $this->em->getRepository(Etap16::class)->findOneBy(['project'=>$project->getId()]);
  6823.         $constructeurEntity = null;
  6824.         $isContratEpc= false;
  6825.         if($etap16 && count($etap16->getContratConstruction())>0){
  6826.             $contratConstructeurs = $etap16->getContratConstruction();
  6827.             foreach ($contratConstructeurs as $constructeur){
  6828.                 if($constructeur->getTitre() == 'Contrat EPC'){
  6829.                     $isContratEpc == true;
  6830.                     $constructeurEntity = $constructeur;
  6831.                 }
  6832.             }
  6833.             if(!$isContratEpc){
  6834.                 if($contratConstructeurs[0]){
  6835.                     $constructeurEntity = $contratConstructeurs[0];
  6836.                 }
  6837.             }
  6838.         }
  6839.         if($epc){
  6840.             $project->setFournisseur($epc);
  6841.             $this->em->persist($project);
  6842.             $this->em->flush();
  6843.             if($constructeurEntity) {
  6844.                 $constructeurEntity->setFournisseur($epc);
  6845.                 $constructeurEntity->setTitre('Contrat EPC');
  6846.                 $this->em->persist($constructeurEntity);
  6847.                 $this->em->flush();
  6848.             }
  6849.         }else{
  6850.             $project->setFournisseur(null);
  6851.             $this->em->persist($project);
  6852.             $this->em->flush();
  6853.             if($constructeurEntity) {
  6854.                 $constructeurEntity->setFournisseur(null);
  6855.                 $constructeurEntity->setTitre('Contrat EPC');
  6856.                 $this->em->persist($constructeurEntity);
  6857.                 $this->em->flush();
  6858.             }
  6859.         }
  6860.     }
  6861.     public function getRapportPreventiveCase($project,$annee,$anneeMiseEnService){
  6862.         $isDisabled = false;
  6863.         $statusRapport = 'KO';
  6864.         $rapport = null;
  6865.         if($anneeMiseEnService <= $annee){
  6866.             $rapports = $this->em->getRepository(\App\Entity\RapportCentrale::class)->getRapportPreventiveByAnnee($project,$annee);
  6867.             if($rapports){
  6868.                 $statusRapport = 'OK';
  6869.                 $rapport = $rapports[0];
  6870.             }
  6871.         }else{
  6872.             $isDisabled = true;
  6873.         }
  6874.       return  $this->twig->render('admin/exploitation/default/rapportPreventiveCase.html.twig',
  6875.             array(
  6876.                 'isDisabled'=>$isDisabled,
  6877.                 'statusRapport'=>$statusRapport,
  6878.                 'rapport'=>$rapport
  6879.             )
  6880.         );
  6881.     }
  6882.     public function paginateCentraleSuiviMaintenance($request){
  6883.         $length = $request->get('length');
  6884.         $length = $length && ($length!=-1)?$length:0;
  6885.         $start = $request->get('start');
  6886.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  6887.         $column =  $search = $request->get('columns');
  6888.         $order = $request->get('order')[0];
  6889.         $columnOrder = $order['column'];
  6890.         $dirOrder = $order['dir'];
  6891.         $columNameOrder = $column[$columnOrder]['data'];
  6892.         $search = $request->get('search');
  6893.         $user = $this->security->getUser();
  6894.         $roles = $user->getRoles();
  6895.         $spvsTab = [];
  6896.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  6897.             $spvs = $user->getSpv();
  6898.             foreach($spvs as $item){
  6899.                 $spvsTab[] = $item->getId();
  6900.             }
  6901.         }
  6902.         $centraleRapportSuivi= $request->get('centraleRapportSuivi');
  6903.         $filters = [
  6904.             'query' => trim(@$search['value']),
  6905.             'spvsTab' =>  $spvsTab,
  6906.             'user' =>  $user,
  6907.             'centraleRapportSuivi' =>  $centraleRapportSuivi,
  6908.         ];
  6909.         $centrales = $this->em->getRepository(\App\Entity\Project::class)->getCentrales($filters);
  6910.         $arrayIdCentrale = array();
  6911.         foreach ($centrales as $project) {
  6912.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  6913.             if ($project && $project->getDateMiseEnService()) {
  6914.                 $dateMiseEnservice = $project->getDateMiseEnService();
  6915.             } else {
  6916.                 if ($etap14 && $etap14->getDateMiseEnService()) {
  6917.                     $dateMiseEnservice = $etap14->getDateMiseEnService();
  6918.                 }
  6919.             }
  6920.             if($dateMiseEnservice){
  6921.                 $annee= $request->get('anneeRapport');
  6922.                 $status= $request->get('status');
  6923.                 if($status && $annee){
  6924.                     if($dateMiseEnservice->format('Y') <= $annee){
  6925.                         $rapport = $this->em->getRepository(\App\Entity\RapportCentrale::class)->getRapportPreventiveByAnnee($project,$annee);
  6926.                         if($status == 'OK' and $rapport){
  6927.                             $arrayIdCentrale[] = $project->getId();
  6928.                         }
  6929.                         if($status == 'KO' and !$rapport){
  6930.                             $arrayIdCentrale[] = $project->getId();
  6931.                         }
  6932.                     }
  6933.                 }else{
  6934.                     $arrayIdCentrale[] = $project->getId();
  6935.                 }
  6936.             }
  6937.         }
  6938.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchCentraleRapportById($arrayIdCentrale, $start, $length, true,$columNameOrder, $dirOrder);
  6939.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->searchCentraleRapportById($arrayIdCentrale, $start, $length, true,$columNameOrder, $dirOrder,true);
  6940.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->searchCentraleRapportById($arrayIdCentrale, $start, $length, true,$columNameOrder, $dirOrder,true);
  6941.         $output = array(
  6942.             'data' => array(),
  6943.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  6944.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  6945.         );
  6946.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  6947.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  6948.         foreach ($projects as $project) {
  6949.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  6950.             if ($project && $project->getDateMiseEnService()) {
  6951.                 $dateMiseEnservice = $project->getDateMiseEnService();
  6952.             } else {
  6953.                 if ($etap14 && $etap14->getDateMiseEnService()) {
  6954.                     $dateMiseEnservice = $etap14->getDateMiseEnService();
  6955.                 }
  6956.             }
  6957.             $dataNow = new \DateTime();
  6958.             $anneRapport4 = (int)$dataNow->format('Y');
  6959.             $anneRapport3 = $anneRapport4 - 1;
  6960.             $anneRapport2 = $anneRapport4 - 2;
  6961.             $anneRapport1 = $anneRapport4 - 3;
  6962.             if($dateMiseEnservice){
  6963.                 $output['data'][] = [
  6964.                     'responsive_id' => '',
  6965.                     'id' => $project->getId(),
  6966.                     'name' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName())),
  6967.                     'dateMiseEnService' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$dateMiseEnservice->format('d/m/Y'))) ,
  6968.                     'date1' => $this->getRapportPreventiveCase($project,$anneRapport1,$dateMiseEnservice->format('Y')),
  6969.                     'date2' => $this->getRapportPreventiveCase($project,$anneRapport2,$dateMiseEnservice->format('Y')),
  6970.                     'date3' => $this->getRapportPreventiveCase($project,$anneRapport3,$dateMiseEnservice->format('Y')),
  6971.                     'date4' => $this->getRapportPreventiveCase($project,$anneRapport4,$dateMiseEnservice->format('Y'))
  6972.                 ];
  6973.             }
  6974.         }
  6975.         return $output;
  6976.     }
  6977.     public function getRapportPreventiveCaseStr($project,$annee,$anneeMiseEnService){
  6978.         $isDisabled = false;
  6979.         $statusRapport = 'KO';
  6980.         $rapport = null;
  6981.         if($anneeMiseEnService <= $annee){
  6982.             $rapports = $this->em->getRepository(\App\Entity\RapportCentrale::class)->getRapportPreventiveByAnnee($project,$annee);
  6983.             if($rapports){
  6984.                 $statusRapport = 'OK';
  6985.                 $rapport = $rapports[0];
  6986.             }
  6987.         }else{
  6988.             $isDisabled = true;
  6989.         }
  6990.         return
  6991.             array(
  6992.                 'isDisabled'=>$isDisabled,
  6993.                 'statusRapport'=>$statusRapport,
  6994.                 'rapport'=>$rapport
  6995.             );
  6996.     }
  6997.     public function getCentraleSuiviMaintenanceBySelect($request){
  6998.         $search = $request->get('search');
  6999.         $user = $this->security->getUser();
  7000.         $roles = $user->getRoles();
  7001.         $spvsTab = [];
  7002.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  7003.             $spvs = $user->getSpv();
  7004.             foreach($spvs as $item){
  7005.                 $spvsTab[] = $item->getId();
  7006.             }
  7007.         }
  7008.         $filters = [
  7009.             'query' => trim(@$search['value']),
  7010.             'spvsTab' =>  $spvsTab,
  7011.             'user' =>  $user,
  7012.         ];
  7013.         $centrales = $this->em->getRepository(\App\Entity\Project::class)->getCentrales($filters);
  7014.         $arrayIdCentrale = array();
  7015.         foreach ($centrales as $project) {
  7016.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  7017.             if ($project && $project->getDateMiseEnService()) {
  7018.                 $dateMiseEnservice = $project->getDateMiseEnService();
  7019.             } else {
  7020.                 if ($etap14 && $etap14->getDateMiseEnService()) {
  7021.                     $dateMiseEnservice = $etap14->getDateMiseEnService();
  7022.                 }
  7023.             }
  7024.             if($dateMiseEnservice){
  7025.                 $annee= $request->get('anneeRapport');
  7026.                 $status= $request->get('status');
  7027.                 if($status && $annee){
  7028.                     if($dateMiseEnservice->format('Y') <= $annee){
  7029.                         $rapport = $this->em->getRepository(\App\Entity\RapportCentrale::class)->getRapportPreventiveByAnnee($project,$annee);
  7030.                         if($status == 'OK' and $rapport){
  7031.                             $arrayIdCentrale[] = $project->getId();
  7032.                         }
  7033.                         if($status == 'KO' and !$rapport){
  7034.                             $arrayIdCentrale[] = $project->getId();
  7035.                         }
  7036.                     }
  7037.                 }else{
  7038.                     $arrayIdCentrale[] = $project->getId();
  7039.                 }
  7040.             }
  7041.         }
  7042.         $output = [];
  7043.         $projects= $this->em->getRepository(\App\Entity\Project::class)->getCentraleRapportById($arrayIdCentrale);
  7044.         foreach ($projects as $project) {
  7045.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  7046.             if ($project && $project->getDateMiseEnService()) {
  7047.                 $dateMiseEnservice = $project->getDateMiseEnService();
  7048.             } else {
  7049.                 if ($etap14 && $etap14->getDateMiseEnService()) {
  7050.                     $dateMiseEnservice = $etap14->getDateMiseEnService();
  7051.                 }
  7052.             }
  7053.             $dataNow = new \DateTime();
  7054.             $anneRapport4 = (int)$dataNow->format('Y');
  7055.             $anneRapport3 = $anneRapport4 - 1;
  7056.             $anneRapport2 = $anneRapport4 - 2;
  7057.             $anneRapport1 = $anneRapport4 - 3;
  7058.             if($dateMiseEnservice){
  7059.                 $output[] = [
  7060.                     'responsive_id' => '',
  7061.                     'id' => $project->getId(),
  7062.                     'name' => $project->getName(),
  7063.                     'dateMiseEnService' => $dateMiseEnservice ,
  7064.                     'date1' => $this->getRapportPreventiveCaseStr($project,$anneRapport1,$dateMiseEnservice->format('Y')),
  7065.                     'date2' => $this->getRapportPreventiveCaseStr($project,$anneRapport2,$dateMiseEnservice->format('Y')),
  7066.                     'date3' => $this->getRapportPreventiveCaseStr($project,$anneRapport3,$dateMiseEnservice->format('Y')),
  7067.                     'date4' => $this->getRapportPreventiveCaseStr($project,$anneRapport4,$dateMiseEnservice->format('Y'))
  7068.                 ];
  7069.             }
  7070.         }
  7071.         return $output;
  7072.     }
  7073.     public function extractRapportsSuivPreventive($rapports,$request){
  7074.         $file= $this->params->get('zips_directory')."/extraire_rapports_preventive.xlsx";
  7075.         $spreadsheet = new Spreadsheet();
  7076.         $sheet = $spreadsheet->getActiveSheet();
  7077.         // Head 2
  7078.         $tableHead2 = [
  7079.             'font'=>[
  7080.                 'color'=>[
  7081.                     'rgb'=>'0071c1'
  7082.                 ],
  7083.                 'bold'=>true,
  7084.                 'size'=>12
  7085.             ],
  7086.             'fill'=>[
  7087.                 'fillType' => Fill::FILL_SOLID,
  7088.                 'startColor' => [
  7089.                     'rgb' => 'dcebf4'
  7090.                 ]
  7091.             ],
  7092.         ];
  7093.         $dataNow = new \DateTime();
  7094.         $anneRapport4 = (int)$dataNow->format('Y');
  7095.         $anneRapport3 = $anneRapport4 - 1;
  7096.         $anneRapport2 = $anneRapport4 - 2;
  7097.         $anneRapport1 = $anneRapport4 - 3;
  7098.         $sheet->setCellValue('A1',"Centrale")
  7099.             ->setCellValue('B1',"Date de mise en service")
  7100.             ->setCellValue('C1',"Rapport ".$anneRapport1)
  7101.             ->setCellValue('D1',"Rapport ".$anneRapport2)
  7102.             ->setCellValue('E1',"Rapport ".$anneRapport3)
  7103.             ->setCellValue('F1',"Rapport ".$anneRapport4)
  7104.         ;
  7105.         // Borders a2 z2
  7106.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7107.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7108.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7109.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7110.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7111.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7112.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7113.         //width
  7114.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
  7115.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  7116.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  7117.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  7118.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  7119.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  7120.         $spreadsheet->getActiveSheet()->getStyle('A1:F1')->applyFromArray($tableHead2);
  7121.         //loop through the data
  7122.         //current row
  7123.         $row=2;
  7124.         foreach($rapports as $rapport){
  7125.             $spreadsheet->getActiveSheet()->setCellValue('A'.$row , $rapport['name']);
  7126.             $spreadsheet = $this->addStyleToCellDate('B',$row,$rapport['dateMiseEnService'],$spreadsheet);
  7127.             $arrayStyleRed =  [
  7128.                 'fill'=>[
  7129.                     'fillType' => Fill::FILL_SOLID,
  7130.                     'startColor' => [
  7131.                         'rgb' => 'ff0000'
  7132.                     ]
  7133.                 ],
  7134.             ];
  7135.             $arrayStyleGreen =  [
  7136.                 'fill'=>[
  7137.                     'fillType' => Fill::FILL_SOLID,
  7138.                     'startColor' => [
  7139.                         'rgb' => '00fd00'
  7140.                     ]
  7141.                 ],
  7142.             ];
  7143.             $arrayStyleDesabled =  [
  7144.                 'fill'=>[
  7145.                     'fillType' => Fill::FILL_SOLID,
  7146.                     'startColor' => [
  7147.                         'rgb' => '707070'
  7148.                     ]
  7149.                 ],
  7150.             ];
  7151.             // Date 1
  7152.             if($rapport['date1']['isDisabled']){
  7153.                 $spreadsheet->getActiveSheet()->getStyle('C' . $row)->applyFromArray($arrayStyleDesabled);
  7154.             }else{
  7155.                 if($rapport['date1']['statusRapport'] == 'OK'){
  7156.                     $spreadsheet->getActiveSheet()->setCellValue('C' . $row, $rapport['date1']['statusRapport']);
  7157.                     $spreadsheet->getActiveSheet()->getStyle('C' . $row)->applyFromArray($arrayStyleGreen);
  7158.                 }else{
  7159.                     $spreadsheet->getActiveSheet()->setCellValue('C' . $row, $rapport['date1']['statusRapport']);
  7160.                     $spreadsheet->getActiveSheet()->getStyle('C' . $row)->applyFromArray($arrayStyleRed);
  7161.                 }
  7162.             }
  7163.             // Date 2
  7164.             if($rapport['date2']['isDisabled']){
  7165.                 $spreadsheet->getActiveSheet()->getStyle('D' . $row)->applyFromArray($arrayStyleDesabled);
  7166.             }else{
  7167.                 if($rapport['date2']['statusRapport'] == 'OK'){
  7168.                     $spreadsheet->getActiveSheet()->setCellValue('D' . $row, $rapport['date2']['statusRapport']);
  7169.                     $spreadsheet->getActiveSheet()->getStyle('D' . $row)->applyFromArray($arrayStyleGreen);
  7170.                 }else{
  7171.                     $spreadsheet->getActiveSheet()->setCellValue('D' . $row, $rapport['date2']['statusRapport']);
  7172.                     $spreadsheet->getActiveSheet()->getStyle('D' . $row)->applyFromArray($arrayStyleRed);
  7173.                 }
  7174.             }
  7175.             // Date 3
  7176.             if($rapport['date3']['isDisabled']){
  7177.                 $spreadsheet->getActiveSheet()->getStyle('E' . $row)->applyFromArray($arrayStyleDesabled);
  7178.             }else{
  7179.                 if($rapport['date3']['statusRapport'] == 'OK'){
  7180.                     $spreadsheet->getActiveSheet()->setCellValue('E' . $row, $rapport['date3']['statusRapport']);
  7181.                     $spreadsheet->getActiveSheet()->getStyle('E' . $row)->applyFromArray($arrayStyleGreen);
  7182.                 }else{
  7183.                     $spreadsheet->getActiveSheet()->setCellValue('E' . $row, $rapport['date3']['statusRapport']);
  7184.                     $spreadsheet->getActiveSheet()->getStyle('E' . $row)->applyFromArray($arrayStyleRed);
  7185.                 }
  7186.             }
  7187.             // Date 4
  7188.             if($rapport['date4']['isDisabled']){
  7189.                 $spreadsheet->getActiveSheet()->getStyle('F' . $row)->applyFromArray($arrayStyleDesabled);
  7190.             }else{
  7191.                 if($rapport['date4']['statusRapport'] == 'OK'){
  7192.                     $spreadsheet->getActiveSheet()->setCellValue('F' . $row, $rapport['date4']['statusRapport']);
  7193.                     $spreadsheet->getActiveSheet()->getStyle('F' . $row)->applyFromArray($arrayStyleGreen);
  7194.                 }else{
  7195.                     $spreadsheet->getActiveSheet()->setCellValue('F' . $row, $rapport['date4']['statusRapport']);
  7196.                     $spreadsheet->getActiveSheet()->getStyle('F' . $row)->applyFromArray($arrayStyleRed);
  7197.                 }
  7198.             }
  7199.             $row++;
  7200.         }
  7201.         $firstRow=1;
  7202.         $lastRow=$row-1;
  7203.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":F".$lastRow);
  7204.         $writer = new Xlsx($spreadsheet);
  7205.         $writer->save($file);
  7206.         return $file;
  7207.     }
  7208.     public function addProjectExiste($token){
  7209.         $project = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  7210.         $this->addAllTimeline($project);
  7211.         $this->etapsService->updateStatusTracker($project); // set status tracker
  7212.         $this->etapsService->setCodeProject($project);
  7213.         $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  7214.         if($etap160){
  7215.             $etap160->setLat($project->getLongi());
  7216.             $etap160->setLongi($project->getLat());
  7217.             $this->em->persist($etap160);
  7218.             $this->em->flush();
  7219.         }
  7220.     }
  7221.     public function addCommentParametrageLoyer($request,$user,$idComment=null)
  7222.     {
  7223.         $comment = $request->get('comment');
  7224.         $token = $request->get('token');
  7225.         if($comment and $token){
  7226.             $centrale = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  7227.             $parametrageLoyer = $this->em->getRepository(ParametrageLoyer::class)->findOneBy(['centrale'=>$centrale->getId()]);
  7228.             if($parametrageLoyer && $user){
  7229.                 if($idComment){
  7230.                     $commentEntity = $this->em->getRepository(CommentLoyer::class)->find($idComment);
  7231.                     $commentEntity->setUpdateAt(new \DateTime());
  7232.                     $commentChild = $commentEntity->getComment();
  7233.                     $userChild = $commentEntity->getUser();
  7234.                     $createdAt = $commentEntity->getCreatedAt();
  7235.                     $commentEntityChild = new CommentLoyerChild();
  7236.                     $commentEntityChild->setUser($userChild);
  7237.                     $commentEntityChild->setComment($commentChild);
  7238.                     $commentEntityChild->setCommentLoyer($commentEntity);
  7239.                     $commentEntityChild->setCreatedAt($createdAt);
  7240.                     $this->em->persist($commentEntityChild);
  7241.                     $this->em->flush();
  7242.                 }else{
  7243.                     $commentEntity = new CommentLoyer();
  7244.                 }
  7245.                 $commentEntity->setParametrageLoyer($parametrageLoyer);
  7246.                 $commentEntity->setUser($user);
  7247.                 $commentEntity->setComment($comment);
  7248.                 $this->em->persist($commentEntity);
  7249.                 $this->em->flush();
  7250.                 return [
  7251.                     'commentEntity' => $commentEntity,
  7252.                     'parametrageLoyer' => $parametrageLoyer,
  7253.                     'success' => true
  7254.                 ];
  7255.             }
  7256.         }
  7257.         return [
  7258.             'success' => false
  7259.         ];
  7260.     }
  7261.     public function deleteCommentParametrageLoyer($idComment)
  7262.     {
  7263.         if($idComment){
  7264.             $commentEntity = $this->em->getRepository(CommentLoyer::class)->find($idComment);
  7265.             if($commentEntity) {
  7266.                 $this->em->remove($commentEntity);
  7267.                 $this->em->flush();
  7268.             }
  7269.             return [
  7270.                 'success' => true
  7271.             ];
  7272.         }
  7273.         return [
  7274.             'success' => false
  7275.         ];
  7276.     }
  7277.     public function displayLoyerPeriode()
  7278.     {
  7279.         $loyers = $this->em->getRepository(LoyerFinance::class)->getLoyerFinanceNotDisplay();
  7280.         $dateNow = new \DateTime();
  7281.         $dateNow->modify('+1 month');
  7282.         $user = $this->security->getUser();
  7283.         $admins = $this->em->getRepository(User::class)->getUserByRoles(['ROLE_SUPER_ADMINISTRATOR']);
  7284.         if($loyers){
  7285.             $i = 1;
  7286.             foreach ($loyers as $loyer){
  7287.                 $string = '<span class="spanNotif" >'.$loyer->getParametrageLoyer()->getCentrale()->getName().' - '.$loyer->getEcheanceStr().' </span> a été créé';
  7288.                 if($loyer->getParametrageLoyerPeriode()->getMethodeReglement() == 'A échoir'){
  7289.                     if($loyer->getDateDebut() <= $dateNow ){
  7290.                         $loyer->setIsDisplay(true);
  7291.                         $this->em->persist($loyer);
  7292.                         foreach ($admins as $admin){
  7293.                             $this->notification->addNotification($admin,$user, $string, null,false,null,false,false,true,$loyer,Notification::FACTURE);
  7294.                         }
  7295.                     }
  7296.                 }
  7297.                 if($loyer->getParametrageLoyerPeriode()->getMethodeReglement() == 'Echu'){
  7298.                     if($loyer->getDateFin() <= $dateNow ){
  7299.                         $loyer->setIsDisplay(true);
  7300.                         $this->em->persist($loyer);
  7301.                         foreach ($admins as $admin){
  7302.                             $this->notification->addNotification($admin,$user, $string, null,false,null,false,false,true,$loyer,Notification::FACTURE);
  7303.                         }
  7304.                     }
  7305.                 }
  7306.                 if(($i % 1000) == 0 or (count($loyers) == $i)){
  7307.                     $this->em->flush();
  7308.                 }
  7309.                 $i++;
  7310.             }
  7311.         }
  7312.     }
  7313.     public function addCommentFinanceLoyer($request,$user,$idComment=null)
  7314.     {
  7315.         $comment = $request->get('comment');
  7316.         $token = $request->get('token');
  7317.         if($comment and $token){
  7318.             $loyerFinance = $this->em->getRepository(LoyerFinance::class)->findOneBy(['token'=>$token]);
  7319.             if($loyerFinance && $user){
  7320.                 if($idComment){
  7321.                     $commentEntity = $this->em->getRepository(CommentFinanceLoyer::class)->find($idComment);
  7322.                     $commentEntity->setUpdateAt(new \DateTime());
  7323.                     $commentChild = $commentEntity->getComment();
  7324.                     $userChild = $commentEntity->getUser();
  7325.                     $createdAt = $commentEntity->getCreatedAt();
  7326.                     $commentEntityChild = new CommentFinanceLoyerChild();
  7327.                     $commentEntityChild->setUser($userChild);
  7328.                     $commentEntityChild->setComment($commentChild);
  7329.                     $commentEntityChild->setCommentFinanceLoyer($commentEntity);
  7330.                     $commentEntityChild->setCreatedAt($createdAt);
  7331.                     $this->em->persist($commentEntityChild);
  7332.                     $this->em->flush();
  7333.                 }else{
  7334.                     $commentEntity = new CommentFinanceLoyer();
  7335.                 }
  7336.                 $commentEntity->setLoyerFinance($loyerFinance);
  7337.                 $commentEntity->setUser($user);
  7338.                 $commentEntity->setComment($comment);
  7339.                 $this->em->persist($commentEntity);
  7340.                 $this->em->flush();
  7341.                 return [
  7342.                     'commentEntity' => $commentEntity,
  7343.                     'loyerFinance' => $loyerFinance,
  7344.                     'success' => true
  7345.                 ];
  7346.             }
  7347.         }
  7348.         return [
  7349.             'success' => false
  7350.         ];
  7351.     }
  7352.     public function deleteCommentFinanceLoyer($idComment)
  7353.     {
  7354.         if($idComment){
  7355.             $commentEntity = $this->em->getRepository(CommentFinanceLoyer::class)->find($idComment);
  7356.             if($commentEntity) {
  7357.                 $this->em->remove($commentEntity);
  7358.                 $this->em->flush();
  7359.             }
  7360.             return [
  7361.                 'success' => true
  7362.             ];
  7363.         }
  7364.         return [
  7365.             'success' => false
  7366.         ];
  7367.     }
  7368.     public function getProjectsForCarte($request){
  7369.         $search = $request->get('search');
  7370.         $status = $request->get('statusProject');
  7371.         $status2 = $request->get('status2Project');
  7372.         $statusAdministratifProject = $request->get('statusAdministratifProject');
  7373.         $statusTrackerProject = $request->get('statusTrackerProject');
  7374.         $typologieProject = $request->get('typologieProject');
  7375.         $spvProject = $request->get('spvProject');
  7376.         $devProject = $request->get('devProject');
  7377.         $entrepriseProject = $request->get('entrepriseProject');
  7378.         $responsableProject = $request->get('responsableProject');
  7379.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  7380.         $responsableDevProject = $request->get('responsableDevProject');
  7381.         $constructeurProject = $request->get('constructeurProject');
  7382.         $constructeurEpcProject = $request->get('constructeurEpcProject');
  7383.         $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  7384.         $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  7385.         $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  7386.         $intervenantProject = $request->get('intervenantProject');
  7387.         $stadeConstruction = $request->get('stadeConstruction');
  7388.         $statusUrbanisme = $request->get('statusUrbanisme');
  7389.         $statusFoncier1 = $request->get('statusFoncier1');
  7390.         $statusFoncier2 = $request->get('statusFoncier2');
  7391.         $statusFoncier3 = $request->get('statusFoncier3');
  7392.         $achatLocation = $request->get('achatLocation');
  7393.         $user = $this->security->getUser();
  7394.         $roles = $user->getRoles();
  7395.         $spvsTab = [];
  7396.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  7397.             $spvs = $user->getSpv();
  7398.             foreach($spvs as $item){
  7399.                 $spvsTab[] = $item->getId();
  7400.             }
  7401.         }
  7402.         $filters = [
  7403.             'query' => $search,
  7404.             'devProject' => $devProject,
  7405.             'entrepriseProject' => $entrepriseProject,
  7406.             'spvsTab' => $spvsTab,
  7407.             'responsableProject' => $responsableProject,
  7408.             'responsableFoncierProject' => $responsableFoncierProject,
  7409.             'responsableDevProject' => $responsableDevProject,
  7410.             'constructeurProject' => $constructeurProject,
  7411.             'constructeurEpcProject' => $constructeurEpcProject,
  7412.             'constructeurInstallateurProject' => $constructeurInstallateurProject,
  7413.             'constructeurCharpentierProject' => $constructeurCharpentierProject,
  7414.             'constructeurNotaireProject' => $constructeurNotaireProject,
  7415.             'user' => $user,
  7416.             'statusAdministratifProject' => $statusAdministratifProject,
  7417.             'statusTrackerProject' => $statusTrackerProject,
  7418.             'intervenantProject' => $intervenantProject,
  7419.             'stadeConstruction' => $stadeConstruction,
  7420.             'statusUrbanisme' => $statusUrbanisme,
  7421.             'statusFoncier1' => $statusFoncier1,
  7422.             'statusFoncier2' => $statusFoncier2,
  7423.             'statusFoncier3' => $statusFoncier3,
  7424.             'achatLocation' => $achatLocation,
  7425.             'typologieProject' => $typologieProject
  7426.         ];
  7427.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchForCarte(false,$status,$status2,$spvProject,$filters);
  7428.         $output = array();
  7429.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  7430.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  7431.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  7432.         foreach ($projects as $project) {
  7433.             $outputDetail = [];
  7434.             if($project[0]->getLat()){
  7435.                 $outputDetail['lat'] = str_replace([','], ".", str_replace([' '], "", $project[0]->getLongi())) ;
  7436.             }else{
  7437.                 $outputDetail['lat'] = isset($project['lat'])? $project['lat'] : null ;
  7438.             }
  7439.             if($project[0]->getLongi()){
  7440.                 $outputDetail['longi'] = str_replace([','], ".", str_replace([' '], "", $project[0]->getLat())) ;
  7441.             }else{
  7442.                 $outputDetail['longi'] = isset($project['longi'])? $project['longi'] : null ;
  7443.             }
  7444. //            $outputDetail['adresse'] = $project[0]->getAdresse();
  7445. //            $outputDetail['codePostale'] = $project[0]->getCodePostal();
  7446. //            $outputDetail['city'] = $project[0]->getCity();
  7447.             $outputDetail['spv'] = $project[0]->getSpv()?$project[0]->getSpv()->getName():'';
  7448. //            $outputDetail['tokenProject'] = $project[0]->getToken();
  7449.             $outputDetail['name'] = $project[0]->getName();
  7450.             $outputDetail['lien'] = $this->router->generate('admin_project_view_recap',['token'=>$project[0]->getToken()]) ;
  7451. //            $outputDetail['image'] = $project[0]->getImageProject() ? $baseurl.'/uploads/'.$project[0]->getImageProject()->getPath(): 0;
  7452.             $outputDetail['firstnameProprietaire'] = isset($project['firstnameProprietaire'])? $project['firstnameProprietaire'] : '' ;
  7453.             $outputDetail['lastnameProprietaire'] = isset($project['lastnameProprietaire'])? $project['lastnameProprietaire'] : '' ;
  7454.             $outputDetail['phoneProprietaire'] = isset($project['phoneProprietaire'])? $project['phoneProprietaire'] : '' ;
  7455.             if($project[0]->getStatusAdministratif() == Project::STATUS_CUSTOM_DEVELOPPEMENT){
  7456.                 $outputDetail['status'] = Project::STATUS_CUSTOM_DEVELOPPEMENT ;
  7457.             }elseif ($project[0]->getStatusAdministratif() == Project::STATUS_CUSTOM_CONSTRUCTION){
  7458.                 $outputDetail['status'] = Project::STATUS_CUSTOM_CONSTRUCTION ;
  7459.             }elseif ($project[0]->getStatusAdministratif() == Project::STATUS_CUSTOM_EXPLOITATION){
  7460.                 $outputDetail['status'] = Project::STATUS_CUSTOM_EXPLOITATION ;
  7461.             }else{
  7462.                 $outputDetail['status'] = Project::STATUS_CUSTOM_EN_ATTENT ;
  7463.             }
  7464.             $output[] = $outputDetail;
  7465.         }
  7466.         return $output;
  7467.     }
  7468.     public function getDashboardAlert($user)
  7469.     {
  7470.         $response = [];
  7471.         $filters = ['user' => $user];
  7472.         $alerts = $this->em->getRepository(\App\Entity\Alert::class)->search(false,$filters, 0, 4, true,'id', 'desc');
  7473.         $now = new \DateTime();
  7474.         foreach ($alerts as $alert) {
  7475.             if($alert->getTypeAlert() == Alert::ALERT_BAIL){
  7476.                 $typeAlert = 'Promesse de bail' ;
  7477.                 $typeAlertId = Alert::ALERT_BAIL ;
  7478.             }elseif ($alert->getTypeAlert() == Alert::ALERT_PC_CONSUEL){
  7479.                 $typeAlert = 'PC/DP' ;
  7480.                 $typeAlertId = Alert::ALERT_PC_CONSUEL ;
  7481.             }elseif ($alert->getTypeAlert() == Alert::ALERT_T0){
  7482.                 $typeAlert = 'Date de T0 - Date limite d’achèvement' ;
  7483.                 $typeAlertId = Alert::ALERT_T0 ;
  7484.             }elseif ($alert->getTypeAlert() == Alert::ALERT_Etap1And2){
  7485.                 $typeAlert = 'Avancement étape 1 et étape 2 timeline urbanisme' ;
  7486.                 $typeAlertId = Alert::ALERT_Etap1And2 ;
  7487.             }else{
  7488.                 $typeAlert = '';
  7489.                 $typeAlertId = null ;
  7490.             }
  7491.             $dateLimit = $alert->getDateLimit();
  7492.             $alertClass = 'alert-primary';
  7493.             if (is_object($dateLimit)) {
  7494.                 $diff = $now->diff($dateLimit);
  7495.                 $isPast = $dateLimit < $now;
  7496.                 if ($isPast) {
  7497.                     $alertClass = 'alert-danger';
  7498.                 } elseif ($diff->days <= 15) {
  7499.                     $alertClass = 'alert-warning';
  7500.                 }
  7501.             }
  7502.             array_push($response, [
  7503.                 'responsive_id' => '',
  7504.                 'id' => $alert->getId(),
  7505.                 'token' => $alert->getToken(),
  7506.                 'projectEntity' => $alert->getProject(),
  7507.                 'project' => $alert->getProject()->getName(),
  7508.                 'spv' => $alert->getProject()->getSpv()?$alert->getProject()->getSpv()->getName():'',
  7509.                 'status' => $alert->getProject()->getStatusAdministratifNum() .'('.$alert->getProject()->getStatusTrackerStr().')',
  7510.                 'typeAlert' => $typeAlert,
  7511.                 'typeAlertId' => $typeAlertId,
  7512.                 'dateLimit' => $alert->getDateLimit()  ? $alert->getDateLimit()->format('d/m/Y') : '',
  7513.                 'createdAt' => $alert->getCreatedAt()->format('H:m - d/m/Y'),
  7514.                 'delaiRestant' => $this->delaiRestantDateExpirationPromesseBail($alert),
  7515.                 'alertClass' => $alertClass
  7516.             ]);
  7517.         }
  7518.         return $response;
  7519.     }
  7520.     public function addPhotoInQuestion($array){
  7521.         if($array){
  7522.             foreach ($array as $item){
  7523.                 $tokenQuestion = $item['tokenQustion'];
  7524.                 $tokenFile = $item['tokenFile'];
  7525.                 if($tokenFile  && $tokenQuestion){
  7526.                     $question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token' => $tokenQuestion]);
  7527.                     $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  7528.                     if($question){
  7529.                         $question->addFilePhotosMultiple($docUpload);
  7530.                         $this->em->persist($question);
  7531.                     }
  7532.                 }
  7533.             }
  7534.             $this->em->flush();
  7535.         }
  7536.     }
  7537.     public function getEtapByNumAndProject(int $num, Project $project)
  7538.     {
  7539.         $etapEntity = 'App\\Entity\\Etap' . $num;
  7540.         if($project){
  7541.             return $this->em->getRepository($etapEntity)->findOneBy(['project' => $project->getId()]);
  7542.         }else{
  7543.             return null;
  7544.         }
  7545.     }
  7546.     public function addEditInfoProject($entity,$className){
  7547.         if($className == 'ActualiteProject'){
  7548.             $entityProject = new ActualiteProjectChild();
  7549.             $entityProject->setActualiteProject($entity);
  7550.         }elseif ($className == 'ContextProject'){
  7551.             $entityProject = new ContextProjectChild();
  7552.             $entityProject->setContextProject($entity);
  7553.         }elseif ($className == 'EnvironnementProject'){
  7554.             $entityProject = new EnvironnementProjectChild();
  7555.             $entityProject->setEnvironnementProject($entity);
  7556.         }
  7557.         $entityProject->setComment($entity->getComment());
  7558.         $entityProject->setCreatedAt($entity->getCreatedAt());
  7559.         $entityProject->setUser($entity->getUser());
  7560.         $this->em->persist($entityProject);
  7561.         $this->em->flush();
  7562.     }
  7563.     public function importProjectsAltaria($filename)
  7564.     {
  7565.         $file = $this->params->get('uploads_directory')."/".$filename;
  7566.         $array = [];
  7567.         $f = fopen($file, "r");
  7568.         $flag = true;
  7569.         $i = 0;
  7570.         $header = [];
  7571.         while (($line = fgetcsv($f,0,";")) !== false) {
  7572.             if($flag) {
  7573.                 $header = [];
  7574.                 foreach ($line as $key1 => $cell) {
  7575.                     $header[] =  trim(preg_replace('/^\xEF\xBB\xBF/', '', $cell));
  7576.                 }
  7577.                 $flag = false;
  7578.                 continue;
  7579.             }
  7580.             foreach ($line as $key => $cell) {
  7581.                 $array[$i][$header[$key]]=  trim($cell);
  7582.             }
  7583.             $i++ ;
  7584.         }
  7585.         fclose($f);
  7586.         $entreprise = $this->em->getRepository(Entreprise::class)->findOneBy(['isAlteria'=>true]);
  7587.         $admins = $this->em->getRepository(User::class)->getUserByRoles(['ROLE_SUPER_ADMINISTRATOR']);
  7588.         $admin = $admins[0];
  7589.         foreach ($array as $item){
  7590.             if(isset($item['Code du projet']) and $item['Code du projet']){
  7591.                 $project = $this->em->getRepository(Project::class)->findOneBy(['codeProject'=>$item['Code du projet']]);
  7592.                 if(!$project){
  7593.                     $project = new Project();
  7594.                 }
  7595.                 // add or update timeline
  7596.                 $etap0 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_0]); $etapEntity0 = $this->setOrAddEntityEtap($project,$etap0,Etaps::STATUS_EN_COURS,'App\Entity\Etap0');
  7597.                 $etap1 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_1]); $etapEntity1 = $this->setOrAddEntityEtap($project,$etap1,Etaps::STATUS_EN_COURS,'App\Entity\Etap1');
  7598.                 $etap2 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_2]); $etapEntity2 = $this->setOrAddEntityEtap($project,$etap2,Etaps::STATUS_EN_COURS,'App\Entity\Etap2');
  7599.                 $etap3 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_3]); $etapEntity3 = $this->setOrAddEntityEtap($project,$etap3,Etaps::STATUS_EN_COURS,'App\Entity\Etap3');
  7600.                 $etap4 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_4]); $etapEntity4 = $this->setOrAddEntityEtap($project,$etap4,Etaps::STATUS_EN_COURS,'App\Entity\Etap4');
  7601.                 $etap5 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_5]); $etapEntity5 = $this->setOrAddEntityEtap($project,$etap5,Etaps::STATUS_EN_COURS,'App\Entity\Etap5');
  7602.                 $etap6 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_6]); $etapEntity6 = $this->setOrAddEntityEtap($project,$etap6,Etaps::STATUS_EN_COURS,'App\Entity\Etap6');
  7603.                 $etap601 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_601]); $etapEntity601 = $this->setOrAddEntityEtap($project,$etap601,Etaps::STATUS_EN_COURS,'App\Entity\Etap601');
  7604.                 $etap602 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_602]); $etapEntity602 = $this->setOrAddEntityEtap($project,$etap602,Etaps::STATUS_EN_COURS,'App\Entity\Etap602');
  7605.                 $etap7 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_7]); $etapEntity7 = $this->setOrAddEntityEtap($project,$etap7,Etaps::STATUS_EN_COURS,'App\Entity\Etap7');
  7606.                 $etap71 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_71]); $etapEntity71 = $this->setOrAddEntityEtap($project,$etap71,Etaps::STATUS_EN_COURS,'App\Entity\Etap71');
  7607.                 $etap8 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_8]); $etapEntity8 = $this->setOrAddEntityEtap($project,$etap8,Etaps::STATUS_EN_COURS,'App\Entity\Etap8');
  7608.                 $etap80 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_80]); $etapEntity80 = $this->setOrAddEntityEtap($project,$etap80,Etaps::STATUS_EN_COURS,'App\Entity\Etap80');
  7609.                 $etap9 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_9]); $etapEntity9 = $this->setOrAddEntityEtap($project,$etap9,Etaps::STATUS_EN_COURS,'App\Entity\Etap9');
  7610.                 $etap10 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_10]); $etapEntity10 = $this->setOrAddEntityEtap($project,$etap10,Etaps::STATUS_EN_COURS,'App\Entity\Etap10');
  7611.                 $etap11 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_11]); $etapEntity11 = $this->setOrAddEntityEtap($project,$etap11,Etaps::STATUS_EN_COURS,'App\Entity\Etap11');
  7612.                 $etap12 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_12]); $etapEntity12 = $this->setOrAddEntityEtap($project,$etap12,Etaps::STATUS_EN_COURS,'App\Entity\Etap12');
  7613.                 $etap121 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_121]); $etapEntity121 = $this->setOrAddEntityEtap($project,$etap121,Etaps::STATUS_EN_COURS,'App\Entity\Etap121');
  7614.                 $etap13 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_13]); $etapEntity13 = $this->setOrAddEntityEtap($project,$etap13,Etaps::STATUS_EN_COURS,'App\Entity\Etap13');
  7615.                 $etap14 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_14]); $etapEntity14 = $this->setOrAddEntityEtap($project,$etap14,Etaps::STATUS_EN_COURS,'App\Entity\Etap14');
  7616.                 $etap15 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_15]); $etapEntity15 = $this->setOrAddEntityEtap($project,$etap15,Etaps::STATUS_EN_COURS,'App\Entity\Etap15');
  7617.                 $etap159 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_159]); $etapEntity159 = $this->setOrAddEntityEtap($project,$etap159,Etaps::STATUS_EN_COURS,'App\Entity\Etap159');
  7618.                 $etap23 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_23]); $etapEntity23 = $this->setOrAddEntityEtap($project,$etap23,Etaps::STATUS_EN_COURS,'App\Entity\Etap23');
  7619.                 $etap160 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_160]); $etapEntity160 = $this->setOrAddEntityEtap($project,$etap160,Etaps::STATUS_EN_COURS,'App\Entity\Etap160');
  7620.                 $etap161 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_161]); $etapEntity161 = $this->setOrAddEntityEtap($project,$etap161,Etaps::STATUS_EN_COURS,'App\Entity\Etap161');
  7621.                 $etap16 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_16]); $etapEntity16 = $this->setOrAddEntityEtap($project,$etap16,Etaps::STATUS_EN_COURS,'App\Entity\Etap16');
  7622.                 $etap17 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_17]); $etapEntity17 = $this->setOrAddEntityEtap($project,$etap17,Etaps::STATUS_EN_COURS,'App\Entity\Etap17');
  7623.                 $etap171 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_171]); $etapEntity171 = $this->setOrAddEntityEtap($project,$etap171,Etaps::STATUS_EN_COURS,'App\Entity\Etap171');
  7624.                 $etap172 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_172]); $etapEntity172 = $this->setOrAddEntityEtap($project,$etap172,Etaps::STATUS_EN_COURS,'App\Entity\Etap172');
  7625.                 $etap173 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_173]); $etapEntity173 = $this->setOrAddEntityEtap($project,$etap173,Etaps::STATUS_EN_COURS,'App\Entity\Etap173');
  7626.                 $etap174 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_174]); $etapEntity174 = $this->setOrAddEntityEtap($project,$etap174,Etaps::STATUS_EN_COURS,'App\Entity\Etap174');
  7627.                 $etap175 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_175]); $etapEntity175 = $this->setOrAddEntityEtap($project,$etap175,Etaps::STATUS_EN_COURS,'App\Entity\Etap175');
  7628.                 $etap18 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_18]); $etapEntity18 = $this->setOrAddEntityEtap($project,$etap18,Etaps::STATUS_EN_COURS,'App\Entity\Etap18');
  7629.                 $etap19 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_19]); $etapEntity19 = $this->setOrAddEntityEtap($project,$etap19,Etaps::STATUS_EN_COURS,'App\Entity\Etap19');
  7630.                 $etap20 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_20]); $etapEntity20 = $this->setOrAddEntityEtap($project,$etap20,Etaps::STATUS_EN_COURS,'App\Entity\Etap20');
  7631.                 $etap201 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_201]); $etapEntity201 = $this->setOrAddEntityEtap($project,$etap201,Etaps::STATUS_EN_COURS,'App\Entity\Etap201');
  7632.                 $etap21 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_21]); $etapEntity21 = $this->setOrAddEntityEtap($project,$etap21,Etaps::STATUS_EN_COURS,'App\Entity\Etap21');
  7633.                 $etap22 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_22]); $etapEntity22 = $this->setOrAddEntityEtap($project,$etap22,Etaps::STATUS_EN_COURS,'App\Entity\Etap22');
  7634.                 $etap24 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_24]); $etapEntity24 = $this->setOrAddEntityEtap($project,$etap24,Etaps::STATUS_EN_COURS,'App\Entity\Etap24');
  7635.                 $etap25 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_25]); $etapEntity25 = $this->setOrAddEntityEtap($project,$etap25,Etaps::STATUS_EN_COURS,'App\Entity\Etap25');
  7636.                 $etap26 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_26]); $etapEntity26 = $this->setOrAddEntityEtap($project,$etap26,Etaps::STATUS_EN_COURS,'App\Entity\Etap26');
  7637.                 $project->setCodeProject($item['Code du projet']);
  7638.                 if(isset($item['Nom du projet']) and $item['Nom du projet']){$project->setName($item['Nom du projet']);}
  7639.                 if(isset($item['Date de sourcing']) and $item['Date de sourcing']){
  7640.                     $b = explode(' au ',$item['Date de sourcing']);
  7641.                     $dateSourcing = new \Datetime($b[0]);
  7642.                     $project->setDateSourcing($dateSourcing);
  7643.                 }
  7644.                 if(isset($item['Sourcing']) and $item['Sourcing']){
  7645.                     $sourcing = $this->em->getRepository(Sourcing::class)->findOneBy(['name'=>$item['Sourcing']]);
  7646.                     if(!$sourcing){
  7647.                         $sourcing = new Sourcing();
  7648.                         $sourcing->setName($item['Sourcing']);
  7649.                         $this->em->persist($sourcing);
  7650.                     }
  7651.                     $project->setSourcing($sourcing);
  7652.                 }
  7653.                 if(isset($item['Ville']) and $item['Ville']){$project->setCity($item['Ville']);}
  7654.                 if(isset($item['Productible (P50)']) and $item['Productible (P50)']){$project->setProductible($item['Productible (P50)']);}
  7655.                 if(isset($item['Typologie du projet']) and $item['Typologie du projet']){}
  7656.                 if(isset($item['Famille du projet']) and $item['Famille du projet']){
  7657.                 }
  7658.                 if(isset($item['Sous-famille du projet']) and $item['Sous-famille du projet']){
  7659.                     $tabSousFamille = explode(',',$item['Sous-famille du projet']);
  7660.                     if($tabSousFamille){
  7661.                         foreach ($tabSousFamille as $itemSousFamille){
  7662.                             $sousFamille = $this->em->getRepository(SousFamilleProject::class)->findOneBy(['name'=>$itemSousFamille]);
  7663.                             if(!$sousFamille){
  7664.                                 $sousFamille = new SousFamilleProject();
  7665.                                 $sousFamille->setName($itemSousFamille);
  7666.                                 $this->em->persist($sousFamille);
  7667.                             }
  7668.                             $project->addSousFamilleProject($sousFamille);
  7669.                         }
  7670.                     }
  7671.                 }
  7672.                 if(isset($item['Surface disponible (EN HA)']) and $item['Surface disponible (EN HA)']){$project->setSurfaceDisponible(floatval(str_replace(',','.',$item['Surface disponible (EN HA)'])));}
  7673.                 if(isset($item['Surface exploitable (EN HA)']) and $item['Surface exploitable (EN HA)']){$project->setSurfaceExploitable(floatval(str_replace(',','.',$item['Surface exploitable (EN HA)'])));}
  7674.                 if(isset($item['Capacité installée (kWc)']) and $item['Capacité installée (kWc)']){$project->setCapacite(floatval(str_replace(',','.',$item['Capacité installée (kWc)'])));}
  7675.                 if(isset($item['Actualité']) and $item['Actualité']){
  7676.                     $actualite = $this->em->getRepository(ActualiteProject::class)->findOneBy(['project'=>$project->getId()]);
  7677.                     if(!$actualite){
  7678.                         $actualite = new ActualiteProject();
  7679.                     }
  7680.                     $actualite->setComment($item['Actualité']);
  7681.                     $actualite->setCreatedAt(new \DateTime());
  7682.                     $actualite->setUser($admin);
  7683.                     $actualite->setProject($project);
  7684.                     $this->em->persist($actualite);
  7685.                 }
  7686.                 if(isset($item['Situation foncière']) and $item['Situation foncière']){
  7687.                     $etapEntity6->setSituationFonciere($item['Situation foncière']);
  7688.                     $this->em->persist($etapEntity6);
  7689.                 }
  7690.                 if(isset($item['Type de développement (ou boutons Achat / Location)']) and $item['Type de développement (ou boutons Achat / Location)']){
  7691.                     if($item['Type de développement (ou boutons Achat / Location)'] == 'LOCATION'){
  7692.                         $project->setAchatLocation(Project::LOCATION);
  7693.                     }elseif($item['Type de développement (ou boutons Achat / Location)'] == 'ACHAT'){
  7694.                         $project->setAchatLocation(Project::ACHAT);
  7695.                     }
  7696.                 }
  7697.                 if(isset($item['Zonage PLU']) and $item['Zonage PLU']){
  7698.                     $zonagePlu = $this->em->getRepository(ZonagePlu::class)->findOneBy(['name'=>$item['Zonage PLU']]);
  7699.                     if(!$zonagePlu){
  7700.                         $zonagePlu = new ZonagePlu();
  7701.                         $zonagePlu->setName($item['Zonage PLU']);
  7702.                         $this->em->persist($zonagePlu);
  7703.                     }
  7704.                     $project->addZonagePlu($zonagePlu);
  7705.                 }
  7706.                 if(isset($item['Numéro de parcelle']) and $item['Numéro de parcelle']){$project->setNumParcelle($item['Numéro de parcelle']);}
  7707.                 if(isset($item['Nature du raccordement']) and $item['Nature du raccordement']){
  7708.                     $etapEntity80->setNatureRaccordement($item['Nature du raccordement']);
  7709.                     $this->em->persist($etapEntity80);
  7710.                 }
  7711.                 if(isset($item['Distance Poste Source']) and $item['Distance Poste Source']){
  7712.                     $etapEntity80->setDistancePdl($item['Distance Poste Source']);
  7713.                     $this->em->persist($etapEntity80);
  7714.                 }
  7715.                 if(isset($item['date de fin d’exclusivité loi']) and $item['date de fin d’exclusivité loi']){
  7716.                     $b = explode(' au ',$item['date de fin d’exclusivité loi']);
  7717.                     $dateFinExclusiviteLoi = new \Datetime($b[0]);
  7718.                     $etapEntity5->setDateFinExclusiviteLoi($dateFinExclusiviteLoi);
  7719.                     $this->em->persist($etapEntity5);
  7720.                 }
  7721.                 if(isset($item['Date PDB']) and $item['Date PDB']){
  7722.                     $b = explode(' au ',$item['Date PDB']);
  7723.                     $datePdb = new \Datetime($b[0]);
  7724.                     $project->setDateExpirationPromesseBail($datePdb);
  7725.                     $etapEntity5->setDateExpirationPromesseBail($datePdb);
  7726.                     $this->em->persist($etapEntity5);
  7727.                 }
  7728.                 if(isset($item['Validité PDB']) and $item['Validité PDB']){
  7729.                 }
  7730.                 if(isset($item['Durée du bail en année']) and $item['Durée du bail en année']){
  7731.                     $etapEntity5->setDureeBail($item['Durée du bail en année']);
  7732.                     $this->em->persist($etapEntity5);
  7733.                 }
  7734.                 if(isset($item['Date de dépôt PC']) and $item['Date de dépôt PC']){
  7735.                     $b = explode(' au ',$item['Date de dépôt PC']);
  7736.                     $dateDepotPc = new \Datetime($b[0]);
  7737.                     $project->setDateDepotPc($dateDepotPc);
  7738.                     $etapEntity1->setDateDepotPc($dateDepotPc);
  7739.                     $this->em->persist($etapEntity1);
  7740.                 }
  7741.                 if(isset($item['Date PC/DP purgé']) and $item['Date PC/DP purgé']){
  7742.                     $b = explode(' au ',$item['Date PC/DP purgé']);
  7743.                     $datePcDpPurge = new \Datetime($b[0]);
  7744.                     $etapEntity2->setDatePcDpPurge($datePcDpPurge);
  7745.                     $this->em->persist($etapEntity2);
  7746.                 }
  7747.                 if(isset($item['Date T0']) and $item['Date T0']){
  7748.                     $b = explode(' au ',$item['Date T0']);
  7749.                     $dateT0 = new \Datetime($b[0]);
  7750.                     $etapEntity9->setDateT0($dateT0);
  7751.                     $this->em->persist($etapEntity9);
  7752.                 }
  7753.                 if(isset($item['Date de signature du bail']) and $item['Date de signature du bail']){
  7754.                     $b = explode(' au ',$item['Date de signature du bail']);
  7755.                     $dateSignatureBail = new \Datetime($b[0]);
  7756.                     $etapEntity7->setDateSignatureBail($dateSignatureBail);
  7757.                     $this->em->persist($etapEntity7);
  7758.                 }
  7759.                 if(isset($item['Durée d’exploitation']) and $item['Durée d’exploitation']){$project->setDureeExploitation($item['Durée d’exploitation']);}
  7760.                 if(isset($item['Loyer en €/an']) and $item['Loyer en €/an']){
  7761.                     $project->setLoyerVise(floatval(str_replace(',','.',$item['Loyer en €/an'])));
  7762.                     $etapEntity5->setLoyerConfirme(floatval(str_replace(',','.',$item['Loyer en €/an'])));
  7763.                     $this->em->persist($etapEntity5);
  7764.                 }
  7765.                 if(isset($item['Rémunération exploitant agricole']) and $item['Rémunération exploitant agricole']){
  7766.                     $project->setRemunerationExploitantAgricole($item['Rémunération exploitant agricole']);
  7767.                 }
  7768.                 if(isset($item['Soulte']) and $item['Soulte']){
  7769.                     $project->setSoulteVise(floatval(str_replace(',','.',$item['Soulte'])));
  7770.                     $etapEntity5->setSoulteConfirme(floatval(str_replace(',','.',$item['Soulte'])));
  7771.                     $this->em->persist($etapEntity5);
  7772.                 }
  7773.                 if(isset($item['Honoraire apporteur (k€/MWc)']) and $item['Honoraire apporteur (k€/MWc)']){
  7774.                     $etapEntity5->setHonoraireApporteur($item['Soulte']);
  7775.                     $this->em->persist($etapEntity5);
  7776.                 }
  7777.                 if(isset($item['Prix d’achat foncier (k€/ha)']) and $item['Prix d’achat foncier (k€/ha)']){
  7778.                     $project->setPrixAchatFoncierKHa($item['Prix d’achat foncier (k€/ha)']);
  7779.                 }
  7780.                 if(isset($item['Prix d’achat foncier (k€/MWc)']) and $item['Prix d’achat foncier (k€/MWc)']){
  7781.                     $project->setPrixAchatFoncierKMWc($item['Prix d’achat foncier (k€/MWc)']);
  7782.                 }
  7783.                 if(isset($item['Indemnité transitoire (€/an)']) and $item['Indemnité transitoire (€/an)']){
  7784.                     $project->setIndemiteTransitoire($item['Indemnité transitoire (€/an)']);
  7785.                 }
  7786.                 if((isset($item['Type / Sous-type de valorisation']) and $item['Type / Sous-type de valorisation'])
  7787.                    or (isset($item['Prix de vente électricité']) and $item['Prix de vente électricité'])
  7788.                    or (isset($item['Durée du contrat (en année)']) and $item['Durée du contrat (en année)'])
  7789.                    or (isset($item['Taux d’indexation du tarif']) and $item['Taux d’indexation du tarif'])
  7790.                 ){
  7791.                     if(count($etapEntity24->getEtap24Champs()) > 0){
  7792.                         foreach ($etapEntity24->getEtap24Champs() as $item2){
  7793.                             $etap24Champs = $item2;
  7794.                         }
  7795.                     }else{
  7796.                         $etap24Champs = new Etap24Champs();
  7797.                         $etap24Champs->setEtap24($etapEntity24);
  7798.                         $etap24Champs->setEtap25($etapEntity25);
  7799.                         $etap24Champs->setEtap26($etapEntity26);
  7800.                     }
  7801.                     if($item['Type / Sous-type de valorisation']){
  7802.                         if(in_array($item['Type / Sous-type de valorisation'],['CRE Bat','CRE Sol','AOS'])){
  7803.                           $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_ao_cre]);
  7804.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7805.                             $etap24Champs->setSousChoixValorisation($item['Type / Sous-type de valorisation']);
  7806.                         }elseif (in_array($item['Type / Sous-type de valorisation'],['S21','S24','S23'])){
  7807.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_guichet_ouvert]);
  7808.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7809.                             if($item['Type / Sous-type de valorisation'] == 'S21'){
  7810.                                 $etap24Champs->setSousChoixValorisation('OA - S21');
  7811.                             }
  7812.                             if($item['Type / Sous-type de valorisation'] == 'S24'){
  7813.                                 $etap24Champs->setSousChoixValorisation('OA - S24');
  7814.                             }
  7815.                             if($item['Type / Sous-type de valorisation'] == 'S23'){
  7816.                                 $etap24Champs->setSousChoixValorisation('OA - S23');
  7817.                             }
  7818.                         }
  7819.                         elseif (in_array($item['Type / Sous-type de valorisation'],['ACC','CRE ou ACC'])){
  7820.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_acc]);
  7821.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7822.                         }
  7823.                         elseif (in_array($item['Type / Sous-type de valorisation'],['PPA ou FER'])){
  7824.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_ppa]);
  7825.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7826.                         }
  7827.                         elseif (in_array($item['Type / Sous-type de valorisation'],['ACI'])){
  7828.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_aci]);
  7829.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7830.                         }
  7831.                         elseif (in_array($item['Type / Sous-type de valorisation'],['U-PPA ou spot'])){
  7832.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_spot]);
  7833.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7834.                         }
  7835.                     }
  7836.                     if($item['Durée du contrat (en année)']){
  7837.                         $etap24Champs->setDureeContrat((int)$item['Durée du contrat (en année)']);
  7838.                     }
  7839.                     if($item['Prix de vente électricité']){
  7840.                         $etap24Champs->setPrixVenteElectricite($item['Prix de vente électricité']);
  7841.                     }
  7842.                     $etap24Champs->setTauxIndexationTarif($item['Taux d’indexation du tarif'] ? str_replace('%/an','',$item['Taux d’indexation du tarif']): '');
  7843.                     $this->em->persist($etap24Champs);
  7844.                 }
  7845.                 if(isset($item['TRI']) and $item['TRI']){$project->setTri($item['TRI']);}
  7846.                 if(isset($item['TRI avec Prime']) and $item['TRI avec Prime']){$project->setTriPrime($item['TRI avec Prime']);}
  7847.                 if(isset($item['Rendement EBE/CAPEX']) and $item['Rendement EBE/CAPEX']){$project->setRendementEbeCapex($item['Rendement EBE/CAPEX']);}
  7848.                 if(isset($item['Rendement EBE/CAPEX PPA 70€']) and $item['Rendement EBE/CAPEX PPA 70€']){$project->setRendementEbeCapexPPA($item['Rendement EBE/CAPEX PPA 70€']);}
  7849.                 if(isset($item['Ratio CAPEX/Puissance']) and $item['Ratio CAPEX/Puissance']){$project->setRatioCapexPuissance($item['Ratio CAPEX/Puissance']);}
  7850.                 if(isset($item['Date d’abandon']) and $item['Date d’abandon']){
  7851.                     $b = explode(' au ',$item['Date d’abandon']);
  7852.                     $dateAbandon = new \Datetime($b[0]);
  7853.                     $project->setDateAbandon($dateAbandon);
  7854.                 }
  7855.                 if(isset($item['SPV']) and $item['SPV']){
  7856.                     $spv = $this->em->getRepository(Spv::class)->findOneBy(['name'=>$item['SPV']]);
  7857.                     if($spv){
  7858.                         $project->setSpv($spv);
  7859.                     }
  7860.                 }
  7861.                 if($entreprise){
  7862.                     $project->setEntreprise($entreprise);
  7863.                 }
  7864.                 $project->setStatus(Project::STATUS_EN_COURS);
  7865.                 $project->setIsNewConstruction(true);
  7866.                 $project->setIsEnabled(true);
  7867.                 $project->setIsImportCode(true);
  7868.                 $project->setUserCreated($admin);
  7869.                 $project->setCreatedAt(new \DateTime());
  7870.                 $this->em->persist($project);
  7871.                 $this->em->flush();
  7872.                 $this->etapsService->updateStatusTracker($project); // set status tracker
  7873.             }
  7874.             if(isset($item['Code Projet']) and $item['Code Projet']){
  7875.                 $project = $this->em->getRepository(Project::class)->findOneBy(['codeProject'=>$item['Code Projet']]);
  7876.                 if(!$project){
  7877.                     $project = new Project();
  7878.                 }
  7879.                 // add or update timeline
  7880.                 $etap0 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_0]); $etapEntity0 = $this->setOrAddEntityEtap($project,$etap0,Etaps::STATUS_EN_COURS,'App\Entity\Etap0');
  7881.                 $etap1 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_1]); $etapEntity1 = $this->setOrAddEntityEtap($project,$etap1,Etaps::STATUS_EN_COURS,'App\Entity\Etap1');
  7882.                 $etap2 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_2]); $etapEntity2 = $this->setOrAddEntityEtap($project,$etap2,Etaps::STATUS_EN_COURS,'App\Entity\Etap2');
  7883.                 $etap3 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_3]); $etapEntity3 = $this->setOrAddEntityEtap($project,$etap3,Etaps::STATUS_EN_COURS,'App\Entity\Etap3');
  7884.                 $etap4 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_4]); $etapEntity4 = $this->setOrAddEntityEtap($project,$etap4,Etaps::STATUS_EN_COURS,'App\Entity\Etap4');
  7885.                 $etap5 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_5]); $etapEntity5 = $this->setOrAddEntityEtap($project,$etap5,Etaps::STATUS_EN_COURS,'App\Entity\Etap5');
  7886.                 $etap6 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_6]); $etapEntity6 = $this->setOrAddEntityEtap($project,$etap6,Etaps::STATUS_EN_COURS,'App\Entity\Etap6');
  7887.                 $etap601 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_601]); $etapEntity601 = $this->setOrAddEntityEtap($project,$etap601,Etaps::STATUS_EN_COURS,'App\Entity\Etap601');
  7888.                 $etap602 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_602]); $etapEntity602 = $this->setOrAddEntityEtap($project,$etap602,Etaps::STATUS_EN_COURS,'App\Entity\Etap602');
  7889.                 $etap7 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_7]); $etapEntity7 = $this->setOrAddEntityEtap($project,$etap7,Etaps::STATUS_EN_COURS,'App\Entity\Etap7');
  7890.                 $etap71 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_71]); $etapEntity71 = $this->setOrAddEntityEtap($project,$etap71,Etaps::STATUS_EN_COURS,'App\Entity\Etap71');
  7891.                 $etap8 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_8]); $etapEntity8 = $this->setOrAddEntityEtap($project,$etap8,Etaps::STATUS_EN_COURS,'App\Entity\Etap8');
  7892.                 $etap80 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_80]); $etapEntity80 = $this->setOrAddEntityEtap($project,$etap80,Etaps::STATUS_EN_COURS,'App\Entity\Etap80');
  7893.                 $etap9 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_9]); $etapEntity9 = $this->setOrAddEntityEtap($project,$etap9,Etaps::STATUS_EN_COURS,'App\Entity\Etap9');
  7894.                 $etap10 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_10]); $etapEntity10 = $this->setOrAddEntityEtap($project,$etap10,Etaps::STATUS_EN_COURS,'App\Entity\Etap10');
  7895.                 $etap11 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_11]); $etapEntity11 = $this->setOrAddEntityEtap($project,$etap11,Etaps::STATUS_EN_COURS,'App\Entity\Etap11');
  7896.                 $etap12 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_12]); $etapEntity12 = $this->setOrAddEntityEtap($project,$etap12,Etaps::STATUS_EN_COURS,'App\Entity\Etap12');
  7897.                 $etap121 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_121]); $etapEntity121 = $this->setOrAddEntityEtap($project,$etap121,Etaps::STATUS_EN_COURS,'App\Entity\Etap121');
  7898.                 $etap13 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_13]); $etapEntity13 = $this->setOrAddEntityEtap($project,$etap13,Etaps::STATUS_EN_COURS,'App\Entity\Etap13');
  7899.                 $etap14 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_14]); $etapEntity14 = $this->setOrAddEntityEtap($project,$etap14,Etaps::STATUS_EN_COURS,'App\Entity\Etap14');
  7900.                 $etap15 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_15]); $etapEntity15 = $this->setOrAddEntityEtap($project,$etap15,Etaps::STATUS_EN_COURS,'App\Entity\Etap15');
  7901.                 $etap159 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_159]); $etapEntity159 = $this->setOrAddEntityEtap($project,$etap159,Etaps::STATUS_EN_COURS,'App\Entity\Etap159');
  7902.                 $etap23 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_23]); $etapEntity23 = $this->setOrAddEntityEtap($project,$etap23,Etaps::STATUS_EN_COURS,'App\Entity\Etap23');
  7903.                 $etap160 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_160]); $etapEntity160 = $this->setOrAddEntityEtap($project,$etap160,Etaps::STATUS_EN_COURS,'App\Entity\Etap160');
  7904.                 $etap161 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_161]); $etapEntity161 = $this->setOrAddEntityEtap($project,$etap161,Etaps::STATUS_EN_COURS,'App\Entity\Etap161');
  7905.                 $etap16 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_16]); $etapEntity16 = $this->setOrAddEntityEtap($project,$etap16,Etaps::STATUS_EN_COURS,'App\Entity\Etap16');
  7906.                 $etap17 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_17]); $etapEntity17 = $this->setOrAddEntityEtap($project,$etap17,Etaps::STATUS_EN_COURS,'App\Entity\Etap17');
  7907.                 $etap171 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_171]); $etapEntity171 = $this->setOrAddEntityEtap($project,$etap171,Etaps::STATUS_EN_COURS,'App\Entity\Etap171');
  7908.                 $etap172 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_172]); $etapEntity172 = $this->setOrAddEntityEtap($project,$etap172,Etaps::STATUS_EN_COURS,'App\Entity\Etap172');
  7909.                 $etap173 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_173]); $etapEntity173 = $this->setOrAddEntityEtap($project,$etap173,Etaps::STATUS_EN_COURS,'App\Entity\Etap173');
  7910.                 $etap174 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_174]); $etapEntity174 = $this->setOrAddEntityEtap($project,$etap174,Etaps::STATUS_EN_COURS,'App\Entity\Etap174');
  7911.                 $etap175 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_175]); $etapEntity175 = $this->setOrAddEntityEtap($project,$etap175,Etaps::STATUS_EN_COURS,'App\Entity\Etap175');
  7912.                 $etap18 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_18]); $etapEntity18 = $this->setOrAddEntityEtap($project,$etap18,Etaps::STATUS_EN_COURS,'App\Entity\Etap18');
  7913.                 $etap19 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_19]); $etapEntity19 = $this->setOrAddEntityEtap($project,$etap19,Etaps::STATUS_EN_COURS,'App\Entity\Etap19');
  7914.                 $etap20 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_20]); $etapEntity20 = $this->setOrAddEntityEtap($project,$etap20,Etaps::STATUS_EN_COURS,'App\Entity\Etap20');
  7915.                 $etap201 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_201]); $etapEntity201 = $this->setOrAddEntityEtap($project,$etap201,Etaps::STATUS_EN_COURS,'App\Entity\Etap201');
  7916.                 $etap21 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_21]); $etapEntity21 = $this->setOrAddEntityEtap($project,$etap21,Etaps::STATUS_EN_COURS,'App\Entity\Etap21');
  7917.                 $etap22 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_22]); $etapEntity22 = $this->setOrAddEntityEtap($project,$etap22,Etaps::STATUS_EN_COURS,'App\Entity\Etap22');
  7918.                 $etap24 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_24]); $etapEntity24 = $this->setOrAddEntityEtap($project,$etap24,Etaps::STATUS_EN_COURS,'App\Entity\Etap24');
  7919.                 $etap25 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_25]); $etapEntity25 = $this->setOrAddEntityEtap($project,$etap25,Etaps::STATUS_EN_COURS,'App\Entity\Etap25');
  7920.                 $etap26 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_26]); $etapEntity26 = $this->setOrAddEntityEtap($project,$etap26,Etaps::STATUS_EN_COURS,'App\Entity\Etap26');
  7921.                 $project->setCodeProject($item['Code Projet']);
  7922.                 if(isset($item['Name']) and $item['Name']){$project->setName($item['Name']);}
  7923.                 if(isset($item['Développeur']) and $item['Développeur']){
  7924.                     $fullNameTab = explode(',',trim($item['Développeur']));
  7925.                     foreach ($fullNameTab as $fullName){
  7926.                         $fullNameTabItem = explode(' ',trim($fullName));
  7927.                         if (count($fullNameTabItem) !== 2) {
  7928.                         }else{
  7929.                             $p1 = $fullNameTabItem[0];
  7930.                             $p2 = $fullNameTabItem[1];
  7931.                             $user = $this->em->getRepository(User::class)->checkUserByName($p1,$p2);
  7932.                             if($user){
  7933.                                 $responsableFoncier = new ResponcableFoncierPorject();
  7934.                                 $responsableFoncier->setResponsable($user);
  7935.                                 $responsableFoncier->setProject($project);
  7936.                                 $this->em->persist($responsableFoncier);
  7937.                             }
  7938.                         }
  7939.                     }
  7940.                 }
  7941.                 if(isset($item['Chef de projet']) and $item['Chef de projet']){
  7942.                     $fullNameTab = explode(',',trim($item['Chef de projet']));
  7943.                     foreach ($fullNameTab as $fullName){
  7944.                         $fullNameTabItem = explode(' ',trim($fullName));
  7945.                         if (count($fullNameTabItem) !== 2) {
  7946.                         }else{
  7947.                             $p1 = $fullNameTabItem[0];
  7948.                             $p2 = $fullNameTabItem[1];
  7949.                             $user = $this->em->getRepository(User::class)->checkUserByName($p1,$p2);
  7950.                             if($user){
  7951.                                 $responsableDeveloppement = new ResponsableDeveloppement();
  7952.                                 $responsableDeveloppement->setResponsable($user);
  7953.                                 $responsableDeveloppement->setProject($project);
  7954.                                 $this->em->persist($responsableDeveloppement);
  7955.                             }
  7956.                         }
  7957.                     }
  7958.                 }
  7959.                 if(isset($item['Promotion']) and $item['Promotion']){
  7960.                     $fullNameTab = explode(',',trim($item['Promotion']));
  7961.                     foreach ($fullNameTab as $fullName){
  7962.                         $fullNameTabItem = explode(' ',trim($fullName));
  7963.                         if (count($fullNameTabItem) !== 2) {
  7964.                         }else{
  7965.                             $p1 = $fullNameTabItem[0];
  7966.                             $p2 = $fullNameTabItem[1];
  7967.                             $user = $this->em->getRepository(User::class)->checkUserByName($p1,$p2);
  7968.                             if($user){
  7969.                                 $responsableUser = new ResponcablePorject();
  7970.                                 $responsableUser->setResponsable($user);
  7971.                                 $responsableUser->setProject($project);
  7972.                                 $this->em->persist($responsableUser);
  7973.                             }
  7974.                         }
  7975.                     }
  7976.                 }
  7977.                 if(isset($item['Date sourcing']) and $item['Date sourcing']){
  7978.                     $b = explode(' au ',$item['Date sourcing']);
  7979.                     if(strpos($b[0],'/')){
  7980.                         $dateSourcing = \DateTime::createFromFormat('d/m/Y', $b[0] );
  7981.                     }else{
  7982.                         $dateSourcing = \DateTime::createFromFormat('Y-m-d', $b[0] );
  7983.                     }
  7984.                     $project->setDateSourcing($dateSourcing);
  7985.                 }
  7986.                 if(isset($item['Sourcing']) and $item['Sourcing']){
  7987.                     $sourcing = $this->em->getRepository(Sourcing::class)->findOneBy(['name'=>$item['Sourcing']]);
  7988.                     if(!$sourcing){
  7989.                         $sourcing = new Sourcing();
  7990.                         $sourcing->setName($item['Sourcing']);
  7991.                         $this->em->persist($sourcing);
  7992.                     }
  7993.                     $project->setSourcing($sourcing);
  7994.                 }
  7995.                 if(isset($item['Ville']) and $item['Ville']){$project->setCity($item['Ville']);}
  7996.                 if(isset($item['Département']) and $item['Département']){$project->setDepartement($item['Département']);}
  7997.                 if(isset($item['Nature du Foncier']) and $item['Nature du Foncier']){
  7998.                     $context = $this->em->getRepository(ContextProject::class)->findOneBy(['project'=>$project->getId()]);
  7999.                     if(!$context){
  8000.                         $context = new ContextProject();
  8001.                     }
  8002.                     $context->setComment($item['Nature du Foncier']);
  8003.                     $context->setUser($admin);
  8004.                     $context->setProject($project);
  8005.                     $this->em->persist($context);
  8006.                 }
  8007.                 if(isset($item['P 50 (kWh/kWc/an)']) and $item['P 50 (kWh/kWc/an)']){$project->setProductible($item['P 50 (kWh/kWc/an)']);}
  8008.                 if(isset($item['Famille de projet']) and $item['Famille de projet']){
  8009.                     if($item['Famille de projet'] == 'Ombrières'){
  8010.                         $typo = $this->em->getRepository(TypologieProject::class)->findOneBy(['name'=>'Ombrière']);
  8011.                         if($typo){
  8012.                             $project->setTypologieProject($typo);
  8013.                         }
  8014.                     }
  8015.                     if($item['Famille de projet'] == 'AgriPV'){
  8016.                         $typo = $this->em->getRepository(TypologieProject::class)->findOneBy(['name'=>'Agrivoltaïsme']);
  8017.                         if($typo){
  8018.                             $project->setTypologieProject($typo);
  8019.                         }
  8020.                     }
  8021.                     if($item['Famille de projet'] == 'Sol' and isset($item['Puissance'])){
  8022.                         $typoPetitSol = $this->em->getRepository(TypologieProject::class)->findOneBy(['name'=>'Petit Sol']);
  8023.                         $typoGrandSol = $this->em->getRepository(TypologieProject::class)->findOneBy(['name'=>'Grand Sol']);
  8024.                         if(floatval(str_replace(',','.',$item['Puissance'])) > 1 ){
  8025.                             $project->setTypologieProject($typoGrandSol);
  8026.                         }else{
  8027.                             $project->setTypologieProject($typoPetitSol);
  8028.                         }
  8029.                     }
  8030.                     if($item['Famille de projet'] == 'Petit Sol'){
  8031.                         $typo = $this->em->getRepository(TypologieProject::class)->findOneBy(['name'=>'Petit Sol']);
  8032.                         if($typo){
  8033.                             $project->setTypologieProject($typo);
  8034.                         }
  8035.                     }
  8036.                     if($item['Famille de projet'] == 'Hangar'){
  8037.                     }
  8038.                 }
  8039.                 if(isset($item['Prix de vente éléctricité (€/MWc)']) and $item['Prix de vente éléctricité (€/MWc)']){
  8040.                     $project->setTarifRevente($item['Prix de vente éléctricité (€/MWc)']);
  8041.                 }
  8042.                 if(isset($item['Sous-famille']) and $item['Sous-famille']){
  8043.                     $tabSousFamille = explode(',',$item['Sous-famille']);
  8044.                     if($tabSousFamille){
  8045.                         foreach ($tabSousFamille as $itemSousFamille){
  8046.                             $sousFamille = $this->em->getRepository(SousFamilleProject::class)->findOneBy(['name'=>$itemSousFamille]);
  8047.                             if(!$sousFamille){
  8048.                                 $sousFamille = new SousFamilleProject();
  8049.                                 $sousFamille->setName($itemSousFamille);
  8050.                                 $this->em->persist($sousFamille);
  8051.                             }
  8052.                             $project->addSousFamilleProject($sousFamille);
  8053.                         }
  8054.                     }
  8055.                 }
  8056.                 if(isset($item['Surface disponible']) and $item['Surface disponible']){$project->setSurfaceDisponible(floatval(str_replace(',','.',$item['Surface disponible'])));}
  8057.                 if(isset($item['Surface exploitable']) and $item['Surface exploitable']){$project->setSurfaceExploitable(floatval(str_replace(',','.',$item['Surface exploitable'])));}
  8058.                 if(isset($item['Puissance']) and $item['Puissance']){$project->setCapacite(floatval(str_replace(',','.',$item['Puissance'])) * 1000);}
  8059.                 if(isset($item['Contexte']) and $item['Contexte']){
  8060.                     $context = $this->em->getRepository(ContextProject::class)->findOneBy(['project'=>$project->getId()]);
  8061.                     if(!$context){
  8062.                         $context = new ContextProject();
  8063.                     }
  8064.                     $context->setComment($item['Contexte']);
  8065.                     $context->setUser($admin);
  8066.                     $context->setProject($project);
  8067.                     $this->em->persist($context);
  8068.                 }
  8069.                 if(isset($item['Environnement']) and $item['Environnement']){
  8070.                     $environnement = $this->em->getRepository(EnvironnementProject::class)->findOneBy(['project'=>$project->getId()]);
  8071.                     if(!$environnement){
  8072.                         $environnement = new EnvironnementProject();
  8073.                     }
  8074.                     $environnement->setComment($item['Environnement']);
  8075.                     $environnement->setUser($admin);
  8076.                     $environnement->setProject($project);
  8077.                     $this->em->persist($environnement);
  8078.                 }
  8079.                 if(isset($item['Ranking']) and $item['Ranking']){$project->setRanking($item['Ranking']);}
  8080.                 if(isset($item['Achat/Location']) and $item['Achat/Location']){
  8081.                     if($item['Achat/Location'] == 'LOCATION'){
  8082.                         $project->setAchatLocation(Project::LOCATION);
  8083.                     }elseif($item['Achat/Location'] == 'ACHAT'){
  8084.                         $project->setAchatLocation(Project::ACHAT);
  8085.                     }
  8086.                 }
  8087.                 if(isset($item['Zonage PLU']) and $item['Zonage PLU']){
  8088.                     $zonagePlu = $this->em->getRepository(ZonagePlu::class)->findOneBy(['name'=>$item['Zonage PLU']]);
  8089.                     if(!$zonagePlu){
  8090.                         $zonagePlu = new ZonagePlu();
  8091.                         $zonagePlu->setName($item['Zonage PLU']);
  8092.                         $this->em->persist($zonagePlu);
  8093.                     }
  8094.                     $project->addZonagePlu($zonagePlu);
  8095.                 }
  8096.                 if(isset($item['Parcelles']) and $item['Parcelles']){$project->setNumParcelle($item['Parcelles']);}
  8097.                 if(isset($item['Nature du raccordement']) and $item['Nature du raccordement']){
  8098.                     $etapEntity80->setNatureRaccordement($item['Nature du raccordement']);
  8099.                     $this->em->persist($etapEntity80);
  8100.                 }
  8101.                 if(isset($item['Distance Poste Source']) and $item['Distance Poste Source']){
  8102.                     $etapEntity80->setDistancePdl($item['Distance Poste Source']);
  8103.                     $this->em->persist($etapEntity80);
  8104.                 }
  8105. //                if(isset($item['Actualités']) and $item['Actualités']){
  8106. //                    $commentProject2 = new CommentProject2();
  8107. //                    $commentProject2->setComment($item['Actualités']);
  8108. //                    $commentProject2->setCreatedAt(new \DateTime());
  8109. //                    $commentProject2->setUser($admin);
  8110. //                    $commentProject2->setProject($project);
  8111. //                    $this->em->persist($commentProject2);
  8112. //                }
  8113. //                if(isset($item['Avancement Développement']) and $item['Avancement Développement']){
  8114. //                    $commentProject2 = new CommentProject2();
  8115. //                    $commentProject2->setComment($item['Avancement Développement']);
  8116. //                    $commentProject2->setCreatedAt(new \DateTime());
  8117. //                    $commentProject2->setUser($admin);
  8118. //                    $commentProject2->setProject($project);
  8119. //                    $this->em->persist($commentProject2);
  8120. //                }
  8121.                 if(isset($item['Fin Exclusivité LOI']) and $item['Fin Exclusivité LOI']){
  8122.                     $b = explode(' au ',$item['Fin Exclusivité LOI']);
  8123.                     if(strpos($b[0],'/')){
  8124.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8125.                     }else{
  8126.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8127.                     }
  8128.                     $etapEntity5->setDateFinExclusiviteLoi($datetimeFromFormat);
  8129.                     $this->em->persist($etapEntity5);
  8130.                 }
  8131.                 if(isset($item['Signature LOI']) and $item['Signature LOI']){
  8132.                     $b = explode(' au ',$item['Signature LOI']);
  8133.                     if(strpos($b[0],'/')){
  8134.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8135.                     }else{
  8136.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8137.                     }
  8138.                     $etapEntity5->setDateSignature($datetimeFromFormat);
  8139.                     $this->em->persist($etapEntity5);
  8140.                 }
  8141.                 if(isset($item['Signature Promesse']) and $item['Signature Promesse']){
  8142.                     $b = explode(' au ',$item['Signature Promesse']);
  8143.                     if(strpos($b[0],'/')){
  8144.                         $datePdb = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8145.                     }else{
  8146.                         $datePdb = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8147.                     }
  8148.                     $project->setDateExpirationPromesseBail($datePdb);
  8149.                     $etapEntity5->setDateExpirationPromesseBail($datePdb);
  8150.                     $this->em->persist($etapEntity5);
  8151.                 }
  8152.                 if(isset($item['Échéance Promesse']) and $item['Échéance Promesse']){
  8153.                     $b = explode(' au ',$item['Échéance Promesse']);
  8154.                     if(strpos($b[0],'/')){
  8155.                         $datePdb = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8156.                     }else{
  8157.                         $datePdb = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8158.                     }
  8159.                     $etapEntity5->setDateEcheancePromesse($datePdb);
  8160.                     $this->em->persist($etapEntity5);
  8161.                 }
  8162.                 if(isset($item['Durée maximale du bail']) and $item['Durée maximale du bail']){
  8163.                     $etapEntity5->setDureeBail($item['Durée maximale du bail']);
  8164.                     $this->em->persist($etapEntity5);
  8165.                 }
  8166.                  if(isset($item['Objectif dépôt PC/DP']) and $item['Objectif dépôt PC/DP']){
  8167.                      $b = explode(' au ',$item['Objectif dépôt PC/DP']);
  8168.                      if(strpos($b[0],'/')){
  8169.                          $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8170.                      }else{
  8171.                          $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8172.                      }
  8173.                      $project->setDateDepotPc($datetimeFromFormat);
  8174. //                     $project->setDateMiseEnService($datetimeFromFormat);
  8175. //                     $etapEntity14->setDateMiseEnService($datetimeFromFormat);
  8176. //                     $etapEntity21->setDateMiseEnService($datetimeFromFormat);
  8177. //                     $this->em->persist($etapEntity21);
  8178. //                     $this->em->persist($etapEntity14);
  8179.                  }
  8180.                 if(isset($item['Objectif PC/DP obtenu']) and $item['Objectif PC/DP obtenu']){
  8181.                     $b = explode(' au ',$item['Objectif PC/DP obtenu']);
  8182.                     if(strpos($b[0],'/')){
  8183.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8184.                     }else{
  8185.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8186.                     }
  8187.                     $project->setDateObtentionPc($datetimeFromFormat);
  8188.                 }
  8189.                 if(isset($item['Objectif RTB']) and $item['Objectif RTB']){
  8190.                     $b = explode(' au ',$item['Objectif RTB']);
  8191.                     if(strpos($b[0],'/')){
  8192.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8193.                     }else{
  8194.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8195.                     }
  8196.                     $project->setDateRTBtarifie($datetimeFromFormat);
  8197.                 }
  8198.                 if(isset($item['Date Dépôt PC/DP']) and $item['Date Dépôt PC/DP']){
  8199.                     $b = explode(' au ',$item['Date Dépôt PC/DP']);
  8200.                     if(strpos($b[0],'/')){
  8201.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8202.                     }else{
  8203.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8204.                     }
  8205.                     $project->setDateDepotPc($datetimeFromFormat);
  8206.                     $etapEntity1->setDateDepotPc($datetimeFromFormat);
  8207.                     $this->em->persist($etapEntity1);
  8208.                 }
  8209.                 if(isset($item['Date PC/DP purgé']) and $item['Date PC/DP purgé']){
  8210.                     $b = explode(' au ',$item['Date PC/DP purgé']);
  8211.                     if(strpos($b[0],'/')){
  8212.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8213.                     }else{
  8214.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8215.                     }
  8216.                     $etapEntity2->setDatePcDpPurge($datetimeFromFormat);
  8217.                     $this->em->persist($etapEntity2);
  8218.                 }
  8219.                 if(isset($item['Signature Bail / Achat']) and $item['Signature Bail / Achat']){
  8220.                     $b = explode(' au ',$item['Signature Bail / Achat']);
  8221.                     if(strpos($b[0],'/')){
  8222.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8223.                     }else{
  8224.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8225.                     }
  8226.                     $etapEntity7->setDateSignatureBail($datetimeFromFormat);
  8227.                     $this->em->persist($etapEntity7);
  8228.                 }
  8229.                 if(isset($item['Objectif mise en service']) and $item['Objectif mise en service']){
  8230.                     $b = explode(' au ',$item['Objectif mise en service']);
  8231.                     if(strpos($b[0],'/')){
  8232.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8233.                     }else{
  8234.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8235.                     }
  8236.                     $etapEntity14->setDateMesPrevisionnelle($datetimeFromFormat);
  8237.                     $this->em->persist($etapEntity14);
  8238.                 }
  8239. //                if(isset($item['Date mise en service'])){
  8240. //                    if($item['Date mise en service']){
  8241. //                        $datetimeFromFormat = null;
  8242. //                    }else{
  8243. //                        $b = explode(' au ',$item['Date mise en service']);
  8244. //                        if(strpos($b[0],'/')){
  8245. //                            $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8246. //                        }else{
  8247. //                            $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8248. //                        }
  8249. //                    }
  8250. //
  8251. //                    $project->setDateMiseEnService($datetimeFromFormat);
  8252. //                    $etapEntity14->setDateMiseEnService($datetimeFromFormat);
  8253. //                    $etapEntity21->setDateMiseEnService($datetimeFromFormat);
  8254. //                    $this->em->persist($etapEntity21);
  8255. //                    $this->em->persist($etapEntity14);
  8256. //                }
  8257.                 if(isset($item["Durée d'exploitation"]) and $item["Durée d'exploitation"]){$project->setDureeExploitation($item["Durée d'exploitation"]);}
  8258.                 if(isset($item['Loyer (€/MWc)']) and $item['Loyer (€/MWc)']){
  8259.                     $project->setLoyerVise(floatval(str_replace(',','.',$item['Loyer (€/MWc)'])));
  8260.                     $etapEntity5->setLoyerConfirme(floatval(str_replace(',','.',$item['Loyer (€/MWc)'])));
  8261.                     $this->em->persist($etapEntity5);
  8262.                 }
  8263.                 if(isset($item['Rémunération exploitant agricole']) and $item['Rémunération exploitant agricole']){
  8264.                     $project->setRemunerationExploitantAgricole($item['Rémunération exploitant agricole']);
  8265.                 }
  8266.                 if(isset($item['Soulte (k€)']) and $item['Soulte (k€)']){
  8267.                     $project->setSoulteVise(floatval(str_replace(',','.',$item['Soulte (k€)'])));
  8268.                     $etapEntity5->setSoulteConfirme(floatval(str_replace(',','.',$item['Soulte (k€)'])));
  8269.                     $this->em->persist($etapEntity5);
  8270.                 }
  8271.                 if(isset($item['Honoraires apporteur (k€/MWc)']) and $item['Honoraires apporteur (k€/MWc)']){
  8272.                     $etapEntity5->setHonoraireApporteur($item['Honoraires apporteur (k€/MWc)']);
  8273.                     $this->em->persist($etapEntity5);
  8274.                 }
  8275.                 if(isset($item["Prix d'achat foncier (k€/ha)"]) and $item["Prix d'achat foncier (k€/ha)"]){
  8276.                     $project->setPrixAchatFoncierKHa($item["Prix d'achat foncier (k€/ha)"]);
  8277.                 }
  8278.                 if(isset($item["Prix d'achat foncier (k€/MWc)"]) and $item["Prix d'achat foncier (k€/MWc)"]){
  8279.                     $project->setPrixAchatFoncierKMWc($item["Prix d'achat foncier (k€/MWc)"]);
  8280.                 }
  8281.                 if(isset($item["Indemnité transitoire (k€/an)"]) and $item["Indemnité transitoire (k€/an)"]){
  8282.                     $project->setIndemiteTransitoire($item["Indemnité transitoire (k€/an)"]);
  8283.                 }
  8284.                 if((isset($item['Valorisation']) and $item['Valorisation'])
  8285.                     or (isset($item['Prix de vente éléctricité (€/MWc)']) and $item['Prix de vente éléctricité (€/MWc)'])
  8286.                     or (isset($item['Durée du contrat valorisation']) and $item['Durée du contrat valorisation'])
  8287.                     or (isset($item['Taux inflation de tarif']) and $item['Taux inflation de tarif'])
  8288.                 ){
  8289.                     if(count($etapEntity24->getEtap24Champs()) > 0){
  8290.                         foreach ($etapEntity24->getEtap24Champs() as $item2){
  8291.                             $etap24Champs = $item2;
  8292.                         }
  8293.                     }else{
  8294.                         $etap24Champs = new Etap24Champs();
  8295.                         $etap24Champs->setEtap24($etapEntity24);
  8296.                         $etap24Champs->setEtap25($etapEntity25);
  8297.                         $etap24Champs->setEtap26($etapEntity26);
  8298.                     }
  8299.                     if($item['Valorisation']){
  8300.                         if(in_array($item['Valorisation'],['CRE Bat','CRE Sol','AOS'])){
  8301.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_ao_cre]);
  8302.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8303.                             $etap24Champs->setSousChoixValorisation($item['Valorisation']);
  8304.                         }elseif (in_array($item['Valorisation'],['S21','S24','S23'])){
  8305.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_guichet_ouvert]);
  8306.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8307.                             if($item['Valorisation'] == 'S21'){
  8308.                                 $etap24Champs->setSousChoixValorisation('OA - S21');
  8309.                             }
  8310.                             if($item['Valorisation'] == 'S24'){
  8311.                                 $etap24Champs->setSousChoixValorisation('OA - S24');
  8312.                             }
  8313.                             if($item['Valorisation'] == 'S23'){
  8314.                                 $etap24Champs->setSousChoixValorisation('OA - S23');
  8315.                             }
  8316.                         }
  8317.                         elseif (in_array($item['Valorisation'],['ACC','CRE ou ACC'])){
  8318.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_acc]);
  8319.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8320.                         }
  8321.                         elseif (in_array($item['Valorisation'],['PPA ou FER'])){
  8322.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_ppa]);
  8323.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8324.                         }
  8325.                         elseif (in_array($item['Valorisation'],['ACI'])){
  8326.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_aci]);
  8327.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8328.                         }
  8329.                         elseif (in_array($item['Valorisation'],['U-PPA ou spot'])){
  8330.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_spot]);
  8331.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8332.                         }
  8333.                     }
  8334.                     if($item['Durée du contrat valorisation']){
  8335.                         $etap24Champs->setDureeContrat((int)$item['Durée du contrat valorisation']);
  8336.                     }
  8337.                     if($item['Prix de vente éléctricité (€/MWc)']){
  8338.                         $etap24Champs->setPrixVenteElectricite($item['Prix de vente éléctricité (€/MWc)']);
  8339.                     }
  8340.                     $etap24Champs->setTauxIndexationTarif($item['Taux inflation de tarif'] ? str_replace('%/an','',$item['Taux inflation de tarif']): '');
  8341.                     $this->em->persist($etap24Champs);
  8342.                 }
  8343.                 if(isset($item['TRI']) and $item['TRI']){$project->setTri($item['TRI']);}
  8344.                 if(isset($item['TRI avec Prime']) and $item['TRI avec Prime']){$project->setTriPrime($item['TRI avec Prime']);}
  8345.                 if(isset($item['TRI PPA 70€']) and $item['TRI PPA 70€']){$project->setTriPpaMin($item['TRI PPA 70€']);}
  8346.                 if(isset($item['Rendement EBE/CAPEX']) and $item['Rendement EBE/CAPEX']){$project->setRendementEbeCapex($item['Rendement EBE/CAPEX']);}
  8347.                 if(isset($item['Rendement EBE/CAPEX Tarif PPA 70€']) and $item['Rendement EBE/CAPEX Tarif PPA 70€']){$project->setRendementEbeCapexPPA($item['Rendement EBE/CAPEX Tarif PPA 70€']);}
  8348.                 if(isset($item['Ratio CAPEX / Puissance']) and $item['Ratio CAPEX / Puissance']){$project->setRatioCapexPuissance($item['Ratio CAPEX / Puissance']);}
  8349.                 if(isset($item['SPV']) and $item['SPV']){
  8350.                     $spv = $this->em->getRepository(Spv::class)->findOneBy(['name'=>$item['SPV']]);
  8351.                     if($spv){
  8352.                         $project->setSpv($spv);
  8353.                     }
  8354.                 }
  8355.                 if(isset($item['Actualités']) and $item['Actualités']){
  8356.                     $actualite = $this->em->getRepository(ActualiteProject::class)->findOneBy(['project'=>$project->getId()]);
  8357.                     if(!$actualite){
  8358.                         $actualite = new ActualiteProject();
  8359.                     }
  8360.                     $actualite->setComment($item['Actualités']);
  8361.                     $actualite->setCreatedAt(new \DateTime());
  8362.                     $actualite->setUser($admin);
  8363.                     $actualite->setProject($project);
  8364.                     $this->em->persist($actualite);
  8365.                 }
  8366.                 if(isset($item['Avancement Développement']) and $item['Avancement Développement']){
  8367.                     $actualite = $this->em->getRepository(ActualiteProject::class)->findOneBy(['project'=>$project->getId()]);
  8368.                     if(!$actualite){
  8369.                         $actualite = new ActualiteProject();
  8370.                     }
  8371.                     $actualite->setComment($item['Avancement Développement']);
  8372.                     $actualite->setCreatedAt(new \DateTime());
  8373.                     $actualite->setUser($admin);
  8374.                     $actualite->setProject($project);
  8375.                     $this->em->persist($actualite);
  8376.                 }
  8377.                 if($entreprise){
  8378.                     $project->setEntreprise($entreprise);
  8379.                 }
  8380.                 $project->setStatus(Project::STATUS_EN_COURS);
  8381.                 $project->setIsNewConstruction(true);
  8382.                 $project->setIsEnabled(true);
  8383.                 $project->setIsImportCode(true);
  8384.                 $project->setUserCreated($admin);
  8385.                 $project->setCreatedAt(new \DateTime());
  8386.                 $this->em->persist($project);
  8387.                 $this->em->flush();
  8388.                 $this->etapsService->updateStatusTracker($project); // set status tracker
  8389.             }
  8390.             if(isset($item['Prénom']) and $item['Prénom'] and isset($item['Nom']) and $item['Nom'] and isset($item['Email']) and $item['Email']){
  8391.                 $this->userService->addUsersByArray($item['Nom'],$item['Prénom'],$item['Email'],$item['Téléphone']);
  8392.             }
  8393.         }
  8394.     }
  8395.     private function setOrAddEntityEtap($project,$etap,$status,$className){
  8396.         if($project && $project->getId()){
  8397.             $etapEntity = $this->em->getRepository($className)->findOneBy(['project'=>$project->getId()]);
  8398.             if(!$etapEntity){
  8399.                 $etapEntity = new $className();
  8400.                 $etapEntity->setStatus($status);
  8401.             }
  8402.         }else{
  8403.             $etapEntity = new $className();
  8404.             $etapEntity->setStatus($status);
  8405.         }
  8406.         $etapEntity->setProject($project);
  8407.         $etapEntity->setEtap($etap);
  8408.         $this->em->persist($etapEntity);
  8409.         $this->em->flush();
  8410.         return $etapEntity;
  8411.     }
  8412.     public function checkProjectAccess($project){
  8413.         $user = $this->security->getUser();
  8414.         $roles = $user->getRoles();
  8415.         $spvsTab = [];
  8416.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  8417.             $spvs = $user->getSpv();
  8418.             foreach($spvs as $item){
  8419.                 $spvsTab[] = $item->getId();
  8420.             }
  8421.         }
  8422.         $result = $this->em->getRepository(Project::class)->checkProjectAccess($user,$project,$spvsTab);
  8423.         return $result;
  8424.     }
  8425. }