src/Services/ProjectService.php line 187

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\Etap6;
  41. use App\Entity\Etap601;
  42. use App\Entity\Etap602;
  43. use App\Entity\Etap7;
  44. use App\Entity\Etap71;
  45. use App\Entity\Etap8;
  46. use App\Entity\Etap80;
  47. use App\Entity\Etap9;
  48. use App\Entity\Etap10;
  49. use App\Entity\Etap11;
  50. use App\Entity\Etap12;
  51. use App\Entity\Etap13;
  52. use App\Entity\Etap14;
  53. use App\Entity\Etap15;
  54. use App\Entity\Etap16;
  55. use App\Entity\Etap160;
  56. use App\Entity\Etap161;
  57. use App\Entity\Etap17;
  58. use App\Entity\Etap171;
  59. use App\Entity\Etap172;
  60. use App\Entity\Etap173;
  61. use App\Entity\Etap174;
  62. use App\Entity\Etap175;
  63. use App\Entity\Etap18;
  64. use App\Entity\Etap19;
  65. use App\Entity\Etap20;
  66. use App\Entity\Etap21;
  67. use App\Entity\Etap22;
  68. use App\Entity\Etaps;
  69. use App\Entity\EtapsCategory;
  70. use App\Entity\ExportTab;
  71. use App\Entity\FactureFinance;
  72. use App\Entity\FamilleProject;
  73. use App\Entity\Fournisseur;
  74. use App\Entity\FournisseurProject;
  75. use App\Entity\HistoryProject;
  76. use App\Entity\ImfomationContratAchat;
  77. use App\Entity\LoyerFinance;
  78. use App\Entity\LoyerFinanceItem;
  79. use App\Entity\MeltdChamps;
  80. use App\Entity\Notification;
  81. use App\Entity\NumeroCardi;
  82. use App\Entity\ParametrageLoyer;
  83. use App\Entity\ParametrageLoyerPeriode;
  84. use App\Entity\Project;
  85. use App\Entity\ProjectAvoir;
  86. use App\Entity\ProjectEdit;
  87. use App\Entity\ProjectFactureFinance;
  88. use App\Entity\RapportCentrale;
  89. use App\Entity\ResponcableFoncierPorject;
  90. use App\Entity\ResponcablePorject;
  91. use App\Entity\ResponsableDeveloppement;
  92. use App\Entity\Spv;
  93. use App\Entity\StatusTracker;
  94. use App\Entity\StatusTrackerConstruction;
  95. use App\Entity\TypologieProject;
  96. use App\Entity\User;
  97. use App\Entity\VisiteTerrainV2Question;
  98. use App\Entity\SousFamilleProject;
  99. use App\Entity\Sourcing;
  100. use App\Entity\ZonagePlu;
  101. use App\Entity\TypeValorisation;
  102. use App\Form\LoyerFinanceType;
  103. use App\Form\ParametrageLoyerType;
  104. use App\Form\ProjectEditType;
  105. use App\Form\ProjectType;
  106. use App\Form\RapportCentraleType;
  107. use App\Form\UserType;
  108. use Doctrine\Common\Collections\ArrayCollection;
  109. use Kunnu\Dropbox\Dropbox;
  110. use Kunnu\Dropbox\DropboxApp;
  111. use Kunnu\Dropbox\Exceptions\DropboxClientException;
  112. use phpDocumentor\Reflection\Types\Self_;
  113. use PhpOffice\PhpWord\PhpWord;
  114. use Spipu\Html2Pdf\Html2Pdf;
  115. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  116. use Doctrine\ORM\EntityManagerInterface;
  117. use Symfony\Component\Form\FormFactoryInterface;
  118. use Symfony\Component\HttpFoundation\File\UploadedFile;
  119. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  120. use Symfony\Component\Routing\RouterInterface;
  121. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  122. use Symfony\Contracts\Translation\TranslatorInterface;
  123. use Symfony\Component\Security\Core\Security;
  124. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  125. use Twig\Environment;
  126. use App\Entity\Centrale;
  127. use Symfony\Component\Validator\Constraints as Assert;
  128. use Symfony\Component\Validator\Validator\ValidatorInterface;
  129. use PhpOffice\PhpSpreadsheet\Shared\Date;
  130. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  131. use PhpOffice\PhpSpreadsheet\Style\Border;
  132. use PhpOffice\PhpSpreadsheet\Style\Color;
  133. use PhpOffice\PhpSpreadsheet\Style\Fill;
  134. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  135. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  136. use setasign\Fpdi\PdfParser\StreamReader;
  137. use setasign\Fpdi\Tcpdf\Fpdi;
  138. class ProjectService
  139. {
  140.     private $em;
  141.     private $trans;
  142.     private $params;
  143.     private $security;
  144.     private $session;
  145.     private $twig;
  146.     private $notification;
  147.     public function __construct(
  148.         Environment $twig,
  149.         SessionInterface $session,
  150.         Security $security,
  151.         ParameterBagInterface $params,
  152.         EntityManagerInterface $em,
  153.         TranslatorInterface $trans,
  154.         ValidatorInterface $validator,
  155.         FlashBagInterface $flashBag,
  156.         UserPasswordEncoderInterface $passwordEncoder,
  157.         Notifications $notifications,
  158.         EtapsService $etapsService,
  159.         \Symfony\Component\Mailer\MailerInterface $mailer,
  160.         FormFactoryInterface $form,
  161.         RouterInterface $router,
  162.         UploadService $uploadService,
  163.         UserService $userService
  164.     ) {
  165.         $this->em = $em;
  166.         $this->trans = $trans;
  167.         $this->params = $params;
  168.         $this->security = $security;
  169.         $this->session = $session;
  170.         $this->twig = $twig;
  171.         $this->validator = $validator;
  172.         $this->form = $form;
  173.         $this->form = $form;
  174.         $this->flashBag = $flashBag;
  175.         $this->passwordEncoder = $passwordEncoder;
  176.         $this->notification = $notifications;
  177.         $this->etapsService = $etapsService;
  178.         $this->mailer = $mailer;
  179.         $this->router = $router;
  180.         $this->uploadService = $uploadService;
  181.         $this->userService = $userService;
  182.     }
  183.     public function uploadFileToDropbox($doc,$project,$pathTo){
  184.         $dropboxKey = $this->params->get('dropbox_key');
  185.         $dropboxSecret = $this->params->get('dropbox_secret');
  186.         $dropboxToken= $this->params->get('dropbox_token');
  187.         $app = new DropboxApp($dropboxKey,$dropboxSecret,$dropboxToken);
  188.         $dropbox = new Dropbox($app);
  189.         if(is_object($doc) && is_object($project) ) {
  190.             try {
  191.                 $path = $this->params->get('uploads_directory') . '/' . $doc->getPath();
  192.                 $userName = $project->getUserCreated()->getFirstname().' '.$project->getUserCreated()->getLastname();
  193.                 $pathTo = "/Projets signés/".trim($project->getSpv()->getName())."/Fichiers Projets/".trim($userName)."/".trim($project->getName())."/".trim($pathTo);
  194.                 $file = $dropbox->upload($path,$pathTo );
  195.                 $doc->setIdDropBox($file->getId());
  196.                 $doc->setPathDropbox($file->getPathDisplay());
  197.                 $this->em->persist($doc);
  198.                 $this->em->flush();
  199.                 return true;
  200.             } catch (DropboxClientException $e) {
  201.                 return false;
  202.             }
  203.         }
  204.         return true;
  205.     }
  206.     public function addProject($request,$user,$isDev = true)
  207.     {
  208.         $project = new Project();
  209.         $form = $this->form->create(ProjectType::class, $project);
  210.         /*$form->remove('contrat');
  211.         $form->remove('tranche');*/
  212. //        $form->remove('codeProject');
  213.         if($isDev){
  214.             if ($user && in_array("ROLE_RESPONSABLE", $user->getRoles())) {
  215.             }else{
  216.                 $form->remove('developpeur');
  217.             }
  218.         }
  219.         $form->handleRequest($request);
  220.         if ($form->isSubmitted() && $form->isValid()) {
  221.             if(in_array('ROLE_SUPER_ADMINISTRATOR', $user->getRoles()) or in_array('ROLE_ADMIN', $user->getRoles())){
  222.                 $project->setStatus(Project::STATUS_EN_COURS);
  223.             }else{
  224.                 if ($user && in_array("ROLE_RESPONSABLE", $user->getRoles())) {
  225.                     $project->setResponsable($user);
  226.                 }
  227.                 if($isDev){
  228.                     $project->setStatus(Project::STATUS_EN_ATTENT);
  229.                     $project->setDeveloppeur($user);
  230.                 }else{
  231.                     $project->setStatus(Project::STATUS_EN_COURS);
  232.                 }
  233.             }
  234.             $project->setUserCreated($user);
  235.             $project->setNumEtapEncours(Etaps::ETAP_1);
  236.             $project->setIsEnabled(true);
  237.             $fileEtudeProductibleToken = $request->get('fileEtudeProductible');
  238.             if($fileEtudeProductibleToken){
  239.                 $fileEtudeProductible = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileEtudeProductibleToken]);
  240.                 $project->setFileEtudeProductible($fileEtudeProductible);
  241. //                $this->uploadFileToDropbox($fileEtudeProductible,$project,"Présentation générale/".$fileEtudeProductible->getPath());
  242.                 $etap159 = $this->em->getRepository(Etap159::class)->findOneBy(['project'=>$project->getId()]);
  243.                 if($etap159){
  244.                     $etap159->addFileEtudeProductible159Multiple($fileEtudeProductible) ;
  245.                     $this->em->persist($etap159);
  246.                 }
  247.             }
  248.             $filePromessebailToken = $request->get('filePromessebail');
  249.             if($filePromessebailToken){
  250.                 $filePromessebail = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$filePromessebailToken]);
  251.                 $project->setFilePromessebail($filePromessebail);
  252. //                $this->uploadFileToDropbox($filePromessebail,$project,"Présentation générale/".$filePromessebail->getPath());
  253.             }
  254.             $fileDocCompementaire = $request->get('fileDocCompementaire');
  255.             if($fileDocCompementaire){
  256.                 $array = explode(',',$fileDocCompementaire);
  257.                 foreach ($array as $item){
  258.                     $fileDocCompementaireEntity = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$item]);
  259.                     $project->addFileDocCompementaire($fileDocCompementaireEntity);
  260. //                    $this->uploadFileToDropbox($fileDocCompementaireEntity,$project,"Présentation générale/".$fileDocCompementaireEntity->getPath());
  261.                 }
  262.             }
  263.             $filePhotoProject = $request->get('imageProject');
  264.             if($filePhotoProject and $filePhotoProject != ''){
  265.                 $array = explode(',',$filePhotoProject);
  266.                 foreach ($array as $item1){
  267.                     $fileMultipleEntity = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$item1]);
  268.                     $project->addImagesProject($fileMultipleEntity);
  269.                 }
  270.             }
  271.             $project->setIsNewConstruction(true);
  272.             $this->em->persist($project);
  273.             $this->em->flush();
  274.             $this->addAllTimeline($project);
  275.             $this->etapsService->setCodeProject($project);
  276.             $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  277.             if($etap160){
  278.                 $etap160->setLat($project->getLongi());
  279.                 $etap160->setLongi($project->getLat());
  280.                 $this->em->persist($etap160);
  281.                 $this->em->flush();
  282.             }
  283.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  284.             if($etap5){
  285.                 $etap5->setDateExpirationPromesseBail($project->getDateExpirationPromesseBail());
  286.                 $etap5->setD1($project->getD1());
  287.                 $this->em->persist($etap5);
  288.                 $this->em->flush();
  289.             }
  290.             $this->etapsService->updateStatusTracker($project); // set status tracker
  291.             return [
  292.                 'form' => $form->createView(),
  293.                 'project' => $project,
  294.                 'success' => true
  295.             ];
  296.         }
  297.         return [
  298.             'form' => $form->createView(),
  299.             'success' => false,
  300.         ];
  301.     }
  302.     public function EditProjectAdmin($request,$project)
  303.     {
  304.         $form = $this->form->create(ProjectType::class, $project,['edit'=>true]);
  305.         $form->handleRequest($request);
  306.         if ($form->isSubmitted() && $form->isValid()) {
  307.             $fileEtudeProductibleToken = $request->get('fileEtudeProductible');
  308.             if($fileEtudeProductibleToken){
  309.                 $fileEtudeProductible = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileEtudeProductibleToken]);
  310.                 $project->setFileEtudeProductible($fileEtudeProductible);
  311. //                $this->uploadFileToDropbox($fileEtudeProductible,$project,"Présentation générale/".$fileEtudeProductible->getPath());
  312.                 $etap159 = $this->em->getRepository(Etap159::class)->findOneBy(['project'=>$project->getId()]);
  313.                 if($etap159){
  314.                     $etap159->addFileEtudeProductible159Multiple($fileEtudeProductible) ;
  315.                     $this->em->persist($etap159);
  316.                 }
  317.             }
  318.             $filePromessebailToken = $request->get('filePromessebail');
  319.             if($filePromessebailToken){
  320.                 $filePromessebail = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$filePromessebailToken]);
  321.                 $project->setFilePromessebail($filePromessebail);
  322. //                $this->uploadFileToDropbox($filePromessebail,$project,"Présentation générale/".$filePromessebail->getPath());
  323.             }
  324.             $fileDocCompementaire = $request->get('fileDocCompementaire');
  325.             if($fileDocCompementaire){
  326.                 $array = explode(',',$fileDocCompementaire);
  327.                 foreach ($array as $item){
  328.                     $fileDocCompementaireEntity = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$item]);
  329.                     $project->addFileDocCompementaire($fileDocCompementaireEntity);
  330. //                    $this->uploadFileToDropbox($fileDocCompementaireEntity,$project,"Présentation générale/".$fileDocCompementaireEntity->getPath());
  331.                 }
  332.             }
  333.             $this->em->persist($project);
  334.             $this->em->flush();
  335.             $etapEntity9 = $this->em->getRepository(Etap9::class)->findOneBy(['project'=>$project->getId()]);
  336.             $etapEntity5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  337.             if($etapEntity9){
  338.                 $etapEntity9->setTarifFit($project->getTarifVise());
  339.                 if($project->getDateT0Date()){
  340.                     $etapEntity9->setDateT0($project->getDateT0Date());
  341.                 }
  342.                 $this->em->persist($etapEntity9);
  343.                 $this->em->flush();
  344.             }
  345.             if($etapEntity5 && $project->getLoyerVise()){
  346.                 $etapEntity5->setLoyerConfirme($project->getLoyerVise());
  347.                 $this->em->persist($etapEntity5);
  348.                 $this->em->flush();
  349.             }
  350.             $this->etapsService->updateStatusTracker($project); // set status tracker
  351.             $this->etapsService->setCodeProject($project);
  352.             $this->updateNomenclatureDocProject($project->getToken()); // set nomenclature all doc
  353.             $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  354.             if($etap160){
  355.                 $etap160->setLat($project->getLongi());
  356.                 $etap160->setLongi($project->getLat());
  357.                 $this->em->persist($etap160);
  358.                 $this->em->flush();
  359.             }
  360.             return [
  361.                 'form' => $form->createView(),
  362.                 'project' => $project,
  363.                 'success' => true
  364.             ];
  365.         }
  366.         return [
  367.             'form' => $form->createView(),
  368.             'success' => false,
  369.         ];
  370.     }
  371.     public function EditProjectValidationAdmin($project)
  372.     {
  373.         $projectEdit = $this->em->getRepository(ProjectEdit::class)->findOneBy(['project'=>$project->getId(),'isDeleted'=>0]);
  374.         if(!$projectEdit){
  375.             return [
  376.                 'success' => false
  377.             ];
  378.         }
  379.         $project->setName($projectEdit->getName());
  380.         $project->setFamilleProject($projectEdit->getFamilleProject());
  381.         $project->setTypologieProject($projectEdit->getTypologieProject());
  382.         $project->setAdresse($projectEdit->getAdresse());
  383.         $project->setCodePostal($projectEdit->getCodePostal());
  384.         $project->setCity($projectEdit->getCity());
  385.         $project->setLat($projectEdit->getLat());
  386.         $project->setLongi($projectEdit->getLongi());
  387.         $project->setNumParcelle($projectEdit->getNumParcelle());
  388.         $project->setCapacite($projectEdit->getCapacite());
  389.         $project->setProductible($projectEdit->getProductible());
  390.         $project->setProductibleP90($projectEdit->getProductibleP90());
  391.         $project->setDateArretePc($projectEdit->getDateArretePc());
  392.         $project->setIsArretePcNonRecu($projectEdit->getIsArretePcNonRecu());
  393.         $project->setDateT0NonRecu($projectEdit->getDateT0NonRecu());
  394.         $project->setLoyerVise($projectEdit->getLoyerVise());
  395.         $project->setDateT0Annee($projectEdit->getDateT0Annee());
  396.         $project->setDateT0Semestere($projectEdit->getDateT0Semestere());
  397.         $project->setDateT0Date($projectEdit->getDateT0Date());
  398.         $project->setSoulteVise($projectEdit->getSoulteVise());
  399.         $project->setTypeBatimentProject($projectEdit->getTypeBatimentProject());
  400.         $project->setIsPromesseBailSignee($projectEdit->getIsPromesseBailSignee());
  401.         $project->setSpv($projectEdit->getSpv());
  402.         $project->setTranche($projectEdit->getTranche());
  403.         $project->setContrat($projectEdit->getContrat());
  404.         $project->setIsDemandeModif(false);
  405.         $project->setUserDemandeModif(null);
  406.         $errors = $this->validator->validate($project);
  407.         if (count($errors) > 0) {
  408.             foreach ($errors as $error) {
  409.                 $erreurs[] =  $error->getMessage();
  410.             }
  411.             return array(
  412.                 'erreurs' => $erreurs,
  413.                 'success' => false
  414.             );
  415.         }
  416.         $this->em->persist($project);
  417.         $this->em->flush();
  418.         $this->etapsService->updateStatusTracker($project); // set status tracker
  419.         $this->etapsService->setCodeProject($project);
  420.         $projectEdit->setIsDeleted(true);
  421.         $this->em->persist($projectEdit);
  422.         $this->em->flush();
  423.         $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  424.         if($etap160){
  425.             $etap160->setLat($project->getLongi());
  426.             $etap160->setLongi($project->getLat());
  427.             $this->em->persist($etap160);
  428.             $this->em->flush();
  429.         }
  430.         $this->updateNomenclatureDocProject($project->getToken()); // set nomenclature all doc
  431.         return [
  432.             'success' => true
  433.         ];
  434.     }
  435.     public function EditProjectRefuseAdmin($project)
  436.     {
  437.         $projectEdit = $this->em->getRepository(ProjectEdit::class)->findOneBy(['project'=>$project->getId(),'isDeleted'=>0]);
  438.         if(!$projectEdit){
  439.             return [
  440.                 'success' => false
  441.             ];
  442.         }
  443.         $project->setIsDemandeModif(false);
  444.         $project->setUserDemandeModif(null);
  445.         $this->em->persist($project);
  446.         $this->em->flush();
  447.         $projectEdit->setIsDeleted(true);
  448.         $this->em->persist($projectEdit);
  449.         $this->em->flush();
  450.         return [
  451.             'success' => true
  452.         ];
  453.     }
  454.     public function EditProjectUser($request,$project,$user)
  455.     {
  456.         $projectEdit = $this->em->getRepository(ProjectEdit::class)->findOneBy(['project'=>$project->getId(),'isDeleted'=>0]);
  457.         if(!$projectEdit){
  458.             $projectEdit = new ProjectEdit();
  459.         }
  460.         $form = $this->form->create(ProjectEditType::class, $projectEdit,['project'=>$project]);
  461.         $form->handleRequest($request);
  462.         if ($form->isSubmitted() && $form->isValid()) {
  463.             $fileEtudeProductibleToken = $request->get('fileEtudeProductible');
  464.             if($fileEtudeProductibleToken){
  465.                 $fileEtudeProductible = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileEtudeProductibleToken]);
  466.                 $projectEdit->setFileEtudeProductible($fileEtudeProductible);
  467.             }
  468.             $fileEtudeProductibleToken = $request->get('fileEtudeProductible');
  469.             if($fileEtudeProductibleToken){
  470.                 $fileEtudeProductible = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileEtudeProductibleToken]);
  471.                 $projectEdit->setFileEtudeProductible($fileEtudeProductible);
  472.             }
  473.             $fileDocCompementaire = $request->get('fileDocCompementaire');
  474.             if($fileDocCompementaire){
  475.                 $array = explode(',',$fileDocCompementaire);
  476.                 foreach ($array as $item){
  477.                     $fileDocCompementaireEntity = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$item]);
  478.                     $project->addFileDocCompementaire($fileDocCompementaireEntity);
  479.                 }
  480.             }
  481.             $projectEdit->setProject($project);
  482.             $projectEdit->setUserCreated($user);
  483.             $this->em->persist($projectEdit);
  484.             $this->em->flush();
  485.             $project->setIsDemandeModif(true);
  486.             $project->setUserDemandeModif($user);
  487.             $this->em->persist($project);
  488.             $this->em->flush();
  489.             $this->etapsService->setCodeProject($project);
  490.             $this->flashBag->add(
  491.                 'success',
  492.                 'L\'opération a été effectuée avec succès.'
  493.             );
  494.             return [
  495.                 'form' => $form->createView(),
  496.                 'project' => $project,
  497.                 'projectEdit' => $projectEdit,
  498.                 'success' => true
  499.             ];
  500.         }
  501.         return [
  502.             'form' => $form->createView(),
  503.             'project' => $project,
  504.             'projectEdit' => $projectEdit,
  505.             'success' => false,
  506.         ];
  507.     }
  508.     public function addAllTimeline($project){
  509.         $etap0 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_0]); $this->setEntityEtap($project,$etap0,Etaps::STATUS_EN_COURS,'App\Entity\Etap0');
  510.         $etap1 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_1]); $this->setEntityEtap($project,$etap1,Etaps::STATUS_EN_COURS,'App\Entity\Etap1');
  511.         $etap2 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_2]); $this->setEntityEtap($project,$etap2,Etaps::STATUS_EN_COURS,'App\Entity\Etap2');
  512.         $etap3 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_3]); $this->setEntityEtap($project,$etap3,Etaps::STATUS_EN_COURS,'App\Entity\Etap3');
  513.         $etap4 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_4]); $this->setEntityEtap($project,$etap4,Etaps::STATUS_EN_COURS,'App\Entity\Etap4');
  514.         $etap5 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_5]); $this->setEntityEtap($project,$etap5,Etaps::STATUS_EN_COURS,'App\Entity\Etap5');
  515.         $etap6 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_6]); $this->setEntityEtap($project,$etap6,Etaps::STATUS_EN_COURS,'App\Entity\Etap6');
  516.         $etap601 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_601]); $this->setEntityEtap($project,$etap601,Etaps::STATUS_EN_COURS,'App\Entity\Etap601');
  517.         $etap602 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_602]); $this->setEntityEtap($project,$etap602,Etaps::STATUS_EN_COURS,'App\Entity\Etap602');
  518.         $etap7 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_7]); $this->setEntityEtap($project,$etap7,Etaps::STATUS_EN_COURS,'App\Entity\Etap7');
  519.         $etap71 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_71]); $this->setEntityEtap($project,$etap71,Etaps::STATUS_EN_COURS,'App\Entity\Etap71');
  520.         $etap8 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_8]); $this->setEntityEtap($project,$etap8,Etaps::STATUS_EN_COURS,'App\Entity\Etap8');
  521.         $etap80 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_80]); $this->setEntityEtap($project,$etap80,Etaps::STATUS_EN_COURS,'App\Entity\Etap80');
  522.         $etap9 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_9]); $this->setEntityEtap($project,$etap9,Etaps::STATUS_EN_COURS,'App\Entity\Etap9');
  523.         $etap10 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_10]); $this->setEntityEtap($project,$etap10,Etaps::STATUS_EN_COURS,'App\Entity\Etap10');
  524.         $etap11 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_11]); $this->setEntityEtap($project,$etap11,Etaps::STATUS_EN_COURS,'App\Entity\Etap11');
  525.         $etap12 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_12]); $this->setEntityEtap($project,$etap12,Etaps::STATUS_EN_COURS,'App\Entity\Etap12');
  526.         $etap121 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_121]); $this->setEntityEtap($project,$etap121,Etaps::STATUS_EN_COURS,'App\Entity\Etap121');
  527.         $etap13 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_13]); $this->setEntityEtap($project,$etap13,Etaps::STATUS_EN_COURS,'App\Entity\Etap13');
  528.         $etap14 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_14]); $this->setEntityEtap($project,$etap14,Etaps::STATUS_EN_COURS,'App\Entity\Etap14');
  529.         $etap15 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_15]); $this->setEntityEtap($project,$etap15,Etaps::STATUS_EN_COURS,'App\Entity\Etap15');
  530.         $etap159 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_159]); $this->setEntityEtap($project,$etap159,Etaps::STATUS_EN_COURS,'App\Entity\Etap159');
  531.         $etap23 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_23]); $this->setEntityEtap($project,$etap23,Etaps::STATUS_EN_COURS,'App\Entity\Etap23');
  532.         $etap160 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_160]); $this->setEntityEtap($project,$etap160,Etaps::STATUS_EN_COURS,'App\Entity\Etap160');
  533.         $etap161 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_161]); $this->setEntityEtap($project,$etap161,Etaps::STATUS_EN_COURS,'App\Entity\Etap161');
  534.         $etap16 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_16]); $this->setEntityEtap($project,$etap16,Etaps::STATUS_EN_COURS,'App\Entity\Etap16');
  535.         $etap17 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_17]); $this->setEntityEtap($project,$etap17,Etaps::STATUS_EN_COURS,'App\Entity\Etap17');
  536.         $etap171 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_171]); $this->setEntityEtap($project,$etap171,Etaps::STATUS_EN_COURS,'App\Entity\Etap171');
  537.         $etap172 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_172]); $this->setEntityEtap($project,$etap172,Etaps::STATUS_EN_COURS,'App\Entity\Etap172');
  538.         $etap173 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_173]); $this->setEntityEtap($project,$etap173,Etaps::STATUS_EN_COURS,'App\Entity\Etap173');
  539.         $etap174 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_174]); $this->setEntityEtap($project,$etap174,Etaps::STATUS_EN_COURS,'App\Entity\Etap174');
  540.         $etap175 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_175]); $this->setEntityEtap($project,$etap175,Etaps::STATUS_EN_COURS,'App\Entity\Etap175');
  541.         $etap18 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_18]); $this->setEntityEtap($project,$etap18,Etaps::STATUS_EN_COURS,'App\Entity\Etap18');
  542.         $etap19 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_19]); $this->setEntityEtap($project,$etap19,Etaps::STATUS_EN_COURS,'App\Entity\Etap19');
  543.         $etap20 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_20]); $this->setEntityEtap($project,$etap20,Etaps::STATUS_EN_COURS,'App\Entity\Etap20');
  544.         $etap201 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_201]); $this->setEntityEtap($project,$etap201,Etaps::STATUS_EN_COURS,'App\Entity\Etap201');
  545.         $etap21 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_21]); $this->setEntityEtap($project,$etap21,Etaps::STATUS_EN_COURS,'App\Entity\Etap21');
  546.         $etap22 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_22]); $this->setEntityEtap($project,$etap22,Etaps::STATUS_EN_COURS,'App\Entity\Etap22');
  547.         $etap24 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_24]); $this->setEntityEtap($project,$etap24,Etaps::STATUS_EN_COURS,'App\Entity\Etap24');
  548.         $etap25 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_25]); $this->setEntityEtap($project,$etap25,Etaps::STATUS_EN_COURS,'App\Entity\Etap25');
  549.         $etap26 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_26]); $this->setEntityEtap($project,$etap26,Etaps::STATUS_EN_COURS,'App\Entity\Etap26');
  550.         // set champs
  551.         $etapEntity5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  552.         if($etapEntity5){
  553.             $etapEntity5->setLoyerConfirme($project->getLoyerVise());
  554.             $etapEntity5->setSoulteConfirme($project->getSoulteVise());
  555.             $this->em->persist($etapEntity5);
  556.             $this->em->flush();
  557.         }
  558.         $etapEntity9 = $this->em->getRepository(Etap9::class)->findOneBy(['project'=>$project->getId()]);
  559.         if($etapEntity9){
  560.             $etapEntity9->setTarifFit($project->getTarifVise());
  561.             $this->em->persist($etapEntity9);
  562.             $this->em->flush();
  563.         }
  564.     }
  565.     private function setEntityEtap($project,$etap,$status,$className){
  566.         $etapEntity = new $className();
  567.         $etapEntity->setProject($project);
  568.         $etapEntity->setEtap($etap);
  569.         $etapEntity->setStatus($status);
  570.         $this->em->persist($etapEntity);
  571.         $this->em->flush();
  572.     }
  573.     public function paginate($request,$user,$isArchive=false){
  574.         $length = $request->get('length');
  575.         $length = $length && ($length!=-1)?$length:0;
  576.         $start = $request->get('start');
  577.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  578.         $column =  $search = $request->get('columns');
  579.         $order = $request->get('order')[0];
  580.         $columnOrder = $order['column'];
  581.         $dirOrder = $order['dir'];
  582.         $columNameOrder = $column[$columnOrder]['data'];
  583.         $search = $request->get('search');
  584.         $status = $request->get('statusProject');
  585.         $statusAdministratifProject = $request->get('statusAdministratifProject');
  586.         $statusTrackerProject = $request->get('statusTrackerProject');
  587.         $typologieProject = $request->get('typologieProject');
  588.         $responsableProject = $request->get('responsableProject');
  589.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  590.         $responsableDevProject = $request->get('responsableDevProject');
  591.         $constructeurProject = $request->get('constructeurProject');
  592.         $constructeurEpcProject = $request->get('constructeurEpcProject');
  593.         $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  594.         $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  595.         $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  596.         $intervenantProject = $request->get('intervenantProject');
  597.         $stadeConstruction = $request->get('stadeConstruction');
  598.         $statusUrbanisme = $request->get('statusUrbanisme');
  599.         $statusFoncier1 = $request->get('statusFoncier1');
  600.         $statusFoncier2 = $request->get('statusFoncier2');
  601.         $statusFoncier3 = $request->get('statusFoncier3');
  602.         $entrepriseProject = $request->get('entrepriseProject');
  603.         $achatLocation = $request->get('achatLocation');
  604.         $spvsTab = [];
  605.         $roles = $user->getRoles();
  606.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  607.             $spvs = $user->getSpv();
  608.             foreach($spvs as $item){
  609.                 $spvsTab[] = $item->getId();
  610.             }
  611.         }
  612.         $filters = [
  613.             'query' => trim(@$search['value']),
  614.             'spvProject' =>  $request->get('spvProject'),
  615.             'spvsTab' =>  $spvsTab,
  616.             'statusAdministratifProject' =>  $statusAdministratifProject,
  617.             'statusTrackerProject' => $statusTrackerProject,
  618.             'responsableProject' => $responsableProject,
  619.             'responsableFoncierProject' => $responsableFoncierProject,
  620.             'responsableDevProject' => $responsableDevProject,
  621.             'constructeurProject' => $constructeurProject,
  622.             'typologieProject' => $typologieProject,
  623.             'stadeConstruction' => $stadeConstruction,
  624.             'statusUrbanisme' => $statusUrbanisme,
  625.             'statusFoncier1' => $statusFoncier1,
  626.             'statusFoncier2' => $statusFoncier2,
  627.             'statusFoncier3' => $statusFoncier3,
  628.             'intervenantProject' => $intervenantProject,
  629.             'constructeurEpcProject' => $constructeurEpcProject,
  630.             'constructeurInstallateurProject' => $constructeurInstallateurProject,
  631.             'constructeurCharpentierProject' => $constructeurCharpentierProject,
  632.             'entrepriseProject' => $entrepriseProject,
  633.             'constructeurNotaireProject' => $constructeurNotaireProject,
  634.             'achatLocation' => $achatLocation
  635.         ];
  636.         $projects= $this->em->getRepository(\App\Entity\Project::class)->search($isArchive,$status,$user,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  637.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->search($isArchive,$status,$user,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  638.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->search($isArchive,$status,$user,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  639.         $output = array(
  640.             'data' => array(),
  641.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  642.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  643.         );
  644.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  645.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  646.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  647.         foreach ($projects as $project) {
  648.             $action =
  649.                 $this->twig->render(
  650.                     'user/project/default/bouton.html.twig', array(
  651.                     'project' => $project
  652.                 ));
  653.             $statut =
  654.                 $this->twig->render(
  655.                     'user/project/default/status.html.twig', array(
  656.                     'status' => $project->getStatus()
  657.                 ));
  658.             $statut2 =
  659.                 $this->twig->render(
  660.                     'admin/project/default/status3.html.twig', array(
  661.                     'status' => $this->getStatusCustom($project)
  662.                 ));
  663.             $statut3 =
  664.                 $this->twig->render(
  665.                     'admin/project/default/status3.html.twig', array(
  666.                     'status' => $project->getStatusAdministratif()
  667.                 ));
  668.             $completude =
  669.                 $this->twig->render(
  670.                     'user/project/default/completude-global.html.twig', array(
  671.                     'completude' => $this->etapsService->completudeValideDocumentEtapProject($project),
  672.                     'cats' => $cats,
  673.                     'project' => $project
  674.                 ));
  675.             $statutTracker =
  676.                 $this->twig->render(
  677.                     'admin/project/default/statusTracker.html.twig', array(
  678.                     'status' => $project->getStatusTrackerActuel()
  679.                 ));
  680.             $commentaires = null;
  681.             if(count($project->getCommentProject2())>0) {
  682.                 $commentaires .= $project->getCommentProject2()[0]->getComment();
  683.             }
  684.             $inputCheckbox =
  685.                 $this->twig->render(
  686.                     'admin/project/default/checkbox.html.twig', array(
  687.                     'project' => $project,
  688.                     'user' => $user
  689.                 ));
  690.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  691.             $datePdb = '-';
  692.             if($etap5 && $etap5->getDateExpirationPromesseBail()){
  693.                 $datePdb = $etap5->getDateExpirationPromesseBail()->format('d/m/Y');
  694.             }
  695.             $output['data'][] = [
  696.                 'responsive_id' => '',
  697.                 'inputCheckbox' => $inputCheckbox,
  698.                 'id' => $project->getId(),
  699.                 'capacite' => $this->espaceNumber($project->getCapacite()),
  700.                 'name' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName(),'commentaires'=>$commentaires)),
  701.                 'codeProject' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCodeProject())),
  702.                 'spv' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getSpv() ? $project->getSpv()->getName() : '-')) ,
  703.                 '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() : '-'))) ,
  704.                 'status' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut)),
  705.                 'status2' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut2)),
  706.                 'createdAt' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCreatedAt()?$project->getCreatedAt()->format('d/m/Y'):'-')) ,
  707.                 'archiveAt' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getArchiveAt()?$project->getArchiveAt()->format('d/m/Y'):'-')) ,
  708.                 'commentArchive' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCommentArchive())) ,
  709.                 'statusAdministratif' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut3)) ,
  710.                 'statusTrackerActuel' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statutTracker)) ,
  711.                 'completude' => $completude,
  712.                 'datePdb' => $datePdb,
  713.                 'typologieProject' => $project->getTypologieProject()?$project->getTypologieProject()->getName():'',
  714.                 'achatLocation' => $project->getAchatLocation() == Project::ACHAT ? 'Achat' : 'Location',
  715.                 'action' => $action
  716.             ];
  717.         }
  718.         return $output;
  719.     }
  720.     public function espaceNumber($str){
  721.         $formattedNumber = $str;
  722.         if($str and is_numeric($str)){
  723.             if(strpos($str,'.') or strpos($str,',')){
  724.                 if(strpos($str,'.')){
  725.                     $formattedNumber = number_format($str, 3, '.', ' ');
  726.                 }else{
  727.                     $formattedNumber = number_format($str, 3, ',', ' ');
  728.                 }
  729.             }else{
  730.                 $formattedNumber = number_format($str, 0, '0', ' ');
  731.             }
  732.         }
  733.         return $formattedNumber;
  734.     }
  735.     public function paginateAdmin($request,$isArchive=false){
  736.         $length = $request->get('length');
  737.         $length = $length && ($length!=-1)?$length:0;
  738.         $start = $request->get('start');
  739.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  740.         $column =  $search = $request->get('columns');
  741.         $order = $request->get('order')[0];
  742.         $columnOrder = $order['column'];
  743.         $dirOrder = $order['dir'];
  744.         $columNameOrder = $column[$columnOrder]['data'];
  745.         $search = $request->get('search');
  746.         $status = $request->get('statusProject');
  747.         $status2 = $request->get('status2Project');
  748.         $statusAdministratifProject = $request->get('statusAdministratifProject');
  749.         $statusTrackerProject = $request->get('statusTrackerProject');
  750.         $typologieProject = $request->get('typologieProject');
  751.         $spvProject = $request->get('spvProject');
  752.         $devProject = $request->get('devProject');
  753.         $entrepriseProject = $request->get('entrepriseProject');
  754.         $responsableProject = $request->get('responsableProject');
  755.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  756.         $responsableDevProject = $request->get('responsableDevProject');
  757.         $constructeurEpcProject = $request->get('constructeurEpcProject');
  758.         $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  759.         $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  760.         $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  761.         $intervenantProject = $request->get('intervenantProject');
  762.         $stadeConstruction = $request->get('stadeConstruction');
  763.         $statusUrbanisme = $request->get('statusUrbanisme');
  764.         $statusFoncier1 = $request->get('statusFoncier1');
  765.         $statusFoncier2 = $request->get('statusFoncier2');
  766.         $statusFoncier3 = $request->get('statusFoncier3');
  767.         $achatLocation = $request->get('achatLocation');
  768.         $user = $this->security->getUser();
  769.         $roles = $user->getRoles();
  770.         $spvsTab = [];
  771.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  772.             $spvs = $user->getSpv();
  773.             foreach($spvs as $item){
  774.                 $spvsTab[] = $item->getId();
  775.             }
  776.         }
  777.         $filters = [
  778.             'query' => trim(@$search['value']),
  779.             'devProject' => $devProject,
  780.             'entrepriseProject' => $entrepriseProject,
  781.             'spvsTab' => $spvsTab,
  782.             'responsableProject' => $responsableProject,
  783.             'responsableFoncierProject' => $responsableFoncierProject,
  784.             'responsableDevProject' => $responsableDevProject,
  785.             'constructeurEpcProject' => $constructeurEpcProject,
  786.             'constructeurInstallateurProject' => $constructeurInstallateurProject,
  787.             'constructeurCharpentierProject' => $constructeurCharpentierProject,
  788.             'constructeurNotaireProject' => $constructeurNotaireProject,
  789.             'user' => $user,
  790.             'statusAdministratifProject' => $statusAdministratifProject,
  791.             'statusTrackerProject' => $statusTrackerProject,
  792.             'intervenantProject' => $intervenantProject,
  793.             'stadeConstruction' => $stadeConstruction,
  794.             'statusUrbanisme' => $statusUrbanisme,
  795.             'statusFoncier1' => $statusFoncier1,
  796.             'statusFoncier2' => $statusFoncier2,
  797.             'statusFoncier3' => $statusFoncier3,
  798.             'achatLocation' => $achatLocation,
  799.             'typologieProject' => $typologieProject
  800.         ];
  801.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  802.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  803.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  804.         $output = array(
  805.             'data' => array(),
  806.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  807.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  808.         );
  809.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  810.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  811.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  812.         foreach ($projects as $project) {
  813.             $inputCheckbox =
  814.                 $this->twig->render(
  815.                     'admin/project/default/checkbox.html.twig', array(
  816.                     'project' => $project,
  817.                     'user' => $user
  818.                 ));
  819.             $action =
  820.                 $this->twig->render(
  821.                     'admin/project/default/bouton.html.twig', array(
  822.                     'project' => $project,
  823.                     'user' => $user
  824.                 ));
  825.             $statut =
  826.                 $this->twig->render(
  827.                     'admin/project/default/status.html.twig', array(
  828.                     'status' => $project->getStatus()
  829.                 ));
  830.             $statut2 =
  831.                 $this->twig->render(
  832.                     'admin/project/default/status2.html.twig', array(
  833.                     'status' => $this->getStatusCustom($project)
  834.                 ));
  835.             $statut3 =
  836.                 $this->twig->render(
  837.                     'admin/project/default/status3.html.twig', array(
  838.                     'status' => $project->getStatusAdministratif()
  839.                 ));
  840.             $statutTracker =
  841.                 $this->twig->render(
  842.                     'admin/project/default/statusTracker.html.twig', array(
  843.                     'status' => $project->getStatusTrackerActuel()
  844.                 ));
  845.             $completude =
  846.                 $this->twig->render(
  847.                     'user/project/default/completude-global.html.twig', array(
  848.                     'completude' => $this->etapsService->completudeValideDocumentEtapProject($project),
  849.                     'cats' => $cats,
  850.                     'project' => $project
  851.                 ));
  852.             $commentaires = null;
  853.             if(count($project->getCommentProject2())>0) {
  854.                 foreach ($project->getCommentProject2() as $commentaire) {
  855.                     $commentaires .= $commentaire->getComment().'<br>';
  856.                 }
  857.             }
  858.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  859.             $datePdb = '-';
  860.             if($etap5 && $etap5->getDateExpirationPromesseBail()){
  861.                 $datePdb = $etap5->getDateExpirationPromesseBail()->format('d/m/Y');
  862.             }
  863.             $output['data'][] = [
  864.                 'responsive_id' => '',
  865.                 'inputCheckbox' => $inputCheckbox,
  866.                 'id' => $project->getId(),
  867.                 'capacite' => $this->espaceNumber($project->getCapacite()),
  868.                 'name' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName(),'commentaires'=>$commentaires)),
  869.                 'codeProject' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCodeProject())),
  870.                 'spv' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getSpv() ? $project->getSpv()->getName() : '-')) ,
  871.                 'developpeur' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getDeveloppeur() ? $project->getDeveloppeur()->getFirstname().' '.$project->getDeveloppeur()->getLastname() : '-')) ,
  872.                 '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() : '-'))) ,
  873.                 'status' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut)),
  874.                 'status2' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut2)),
  875.                 'statusTrackerActuel' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statutTracker)),
  876.                 'createdAt' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCreatedAt()?$project->getCreatedAt()->format('d/m/Y'):'-' )),
  877.                 'archiveAt' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getArchiveAt()?$project->getArchiveAt()->format('d/m/Y'):'-' )),
  878.                 'commentArchive' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCommentArchive())) ,
  879.                 'statusAdministratif' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut3)) ,
  880.                 'completude' => $completude,
  881.                 'datePdb' => $datePdb,
  882.                 'typologieProject' => $project->getTypologieProject()?$project->getTypologieProject()->getName():'',
  883.                 'achatLocation' => $project->getAchatLocation() == Project::ACHAT ? 'Achat' : 'Location',
  884.                 'action' => $action
  885.             ];
  886.         }
  887.         return $output;
  888.     }
  889.     public function paginateGestionaire($request,$isArchive=false){
  890.         $length = $request->get('length');
  891.         $length = $length && ($length!=-1)?$length:0;
  892.         $start = $request->get('start');
  893.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  894.         $column =  $search = $request->get('columns');
  895.         $order = $request->get('order')[0];
  896.         $columnOrder = $order['column'];
  897.         $dirOrder = $order['dir'];
  898.         $columNameOrder = $column[$columnOrder]['data'];
  899.         $search = $request->get('search');
  900.         $status = $request->get('statusProject');
  901.         $status2 = $request->get('status2Project');
  902.         $spvProject = $request->get('spvProject');
  903.         $devProject = $request->get('devProject');
  904.         $entrepriseProject = $request->get('entrepriseProject');
  905.         $statusAdministratifProject = $request->get('statusAdministratifProject');
  906.         $statusTrackerProject = $request->get('statusTrackerProject');
  907.         $typologieProject = $request->get('typologieProject');
  908.         $responsableProject = $request->get('responsableProject');
  909.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  910.         $responsableDevProject = $request->get('responsableDevProject');
  911.         $constructeurProject = $request->get('constructeurProject');
  912.         $constructeurEpcProject = $request->get('constructeurEpcProject');
  913.         $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  914.         $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  915.         $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  916.         $stadeConstruction = $request->get('stadeConstruction');
  917.         $statusFoncier1 = $request->get('statusFoncier1');
  918.         $statusFoncier2 = $request->get('statusFoncier2');
  919.         $statusFoncier3 = $request->get('statusFoncier3');
  920.         $statusUrbanisme = $request->get('statusUrbanisme');
  921.         $achatLocation = $request->get('achatLocation');
  922.         $filters = [
  923.             'query' => trim(@$search['value']),
  924.             'devProject' => $devProject,
  925.             'entrepriseProject' => $entrepriseProject,
  926.             'statusAdministratifProject' => $statusAdministratifProject,
  927.             'statusTrackerProject' => $statusTrackerProject,
  928.             'typologieProject' => $typologieProject,
  929.             'stadeConstruction' => $stadeConstruction,
  930.             'responsableProject' => $responsableProject,
  931.             'responsableFoncierProject' => $responsableFoncierProject,
  932.             'responsableDevProject' => $responsableDevProject,
  933.             'statusUrbanisme' => $statusUrbanisme,
  934.             'statusFoncier1' => $statusFoncier1,
  935.             'statusFoncier2' => $statusFoncier2,
  936.             'statusFoncier3' => $statusFoncier3,
  937.             'constructeurProject' => $constructeurProject,
  938.             'constructeurEpcProject' => $constructeurEpcProject,
  939.             'constructeurInstallateurProject' => $constructeurInstallateurProject,
  940.             'constructeurCharpentierProject' => $constructeurCharpentierProject,
  941.             'constructeurNotaireProject' => $constructeurNotaireProject,
  942.             'achatLocation' => $achatLocation,
  943.         ];
  944.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  945.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  946.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  947.         $output = array(
  948.             'data' => array(),
  949.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  950.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  951.         );
  952.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  953.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  954.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  955.         foreach ($projects as $project) {
  956.             $action =
  957.                 $this->twig->render(
  958.                     'gestionnaire-financier/project/default/bouton.html.twig', array(
  959.                     'project' => $project
  960.                 ));
  961.             $statut =
  962.                 $this->twig->render(
  963.                     'gestionnaire-financier/project/default/status.html.twig', array(
  964.                     'status' => $project->getStatus()
  965.                 ));
  966.             $statut2 =
  967.                 $this->twig->render(
  968.                     'admin/project/default/status2.html.twig', array(
  969.                     'status' => $this->getStatusCustom($project)
  970.                 ));
  971.             $statut3 =
  972.                 $this->twig->render(
  973.                     'admin/project/default/status3.html.twig', array(
  974.                     'status' => $project->getStatusAdministratif()
  975.                 ));
  976.             $completude =
  977.                 $this->twig->render(
  978.                     'user/project/default/completude-global.html.twig', array(
  979.                     'completude' => $this->etapsService->completudeValideDocumentEtapProject($project),
  980.                     'cats' => $cats,
  981.                     'project' => $project
  982.                 ));
  983.             $statutTracker =
  984.                 $this->twig->render(
  985.                     'admin/project/default/statusTracker.html.twig', array(
  986.                     'status' => $project->getStatusTrackerActuel()
  987.                 ));
  988.                         $commentaires = null;
  989.             if(count($project->getCommentProject2())>0) {
  990.                 foreach ($project->getCommentProject2() as $commentaire) {
  991.                     $commentaires .= $project->getCommentProject2()[0]->getComment();
  992.                 }
  993.             }
  994.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  995.             $datePdb = '-';
  996.             if($etap5 && $etap5->getDateExpirationPromesseBail()){
  997.                 $datePdb = $etap5->getDateExpirationPromesseBail()->format('d/m/Y');
  998.             }
  999.             $output['data'][] = [
  1000.                 'responsive_id' => '',
  1001.                 'id' => $project->getId(),
  1002.                 'capacite' => $this->espaceNumber($project->getCapacite()),
  1003.                 'name' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName(),'commentaires'=>$commentaires)),
  1004.                 'codeProject' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCodeProject())),
  1005.                 'spv' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getSpv() ? $project->getSpv()->getName() : '-')) ,
  1006.                 'developpeur' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getDeveloppeur() ? $project->getDeveloppeur()->getFirstname().' '.$project->getDeveloppeur()->getLastname() : '-' )),
  1007.                 '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() : '-'))) ,
  1008.                 'status' =>$this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=> $statut)),
  1009.                 'status2' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut2)),
  1010.                 'createdAt' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCreatedAt()?$project->getCreatedAt()->format('d/m/Y'):'-')) ,
  1011.                 'archiveAt' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getArchiveAt()?$project->getArchiveAt()->format('d/m/Y'):'-')) ,
  1012.                 'commentArchive' => $this->twig->render('gestionnaire-financier/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCommentArchive())) ,
  1013.                 'statusAdministratif' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut3)) ,
  1014.                  'statusTrackerActuel' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statutTracker)) ,
  1015.                 'completude' => $completude,
  1016.                 'datePdb' => $datePdb,
  1017.                 'typologieProject' => $project->getTypologieProject()?$project->getTypologieProject()->getName():'',
  1018.                 'achatLocation' => $project->getAchatLocation() == Project::ACHAT ? 'Achat' : 'Location',
  1019.                 'action' => $action
  1020.             ];
  1021.         }
  1022.         return $output;
  1023.     }
  1024.     public function getStatusCustom($project){
  1025.         if($this->em->getRepository(Project::class)->searchByCustomStatus($project,Project::STATUS_CUSTOM_EN_ATTENT)){
  1026.             return Project::STATUS_CUSTOM_EN_ATTENT;
  1027.         }elseif($this->em->getRepository(Project::class)->searchByCustomStatus($project,Project::STATUS_CUSTOM_EXPLOITATION)){
  1028.             return Project::STATUS_CUSTOM_EXPLOITATION;
  1029.         }elseif($this->em->getRepository(Project::class)->searchByCustomStatus($project,Project::STATUS_CUSTOM_CONSTRUCTION)){
  1030.             return Project::STATUS_CUSTOM_CONSTRUCTION;
  1031.         }elseif($this->em->getRepository(Project::class)->searchByCustomStatus($project,Project::STATUS_CUSTOM_DEVELOPPEMENT)){
  1032.             return Project::STATUS_CUSTOM_DEVELOPPEMENT;
  1033.         }else{
  1034.             return 0;
  1035.         }
  1036.     }
  1037.     public function getStatusCustomString($project){
  1038.         $status = $this->getStatusCustom($project);
  1039.         if($status == Project::STATUS_CUSTOM_EN_ATTENT){
  1040.             return 'En attente de validation';
  1041.         }elseif($status == Project::STATUS_CUSTOM_EXPLOITATION){
  1042.             return 'Exploitation';
  1043.         }elseif($status == Project::STATUS_CUSTOM_CONSTRUCTION){
  1044.             return 'Construction';
  1045.         }elseif($status == Project::STATUS_CUSTOM_DEVELOPPEMENT){
  1046.             return 'Développement';
  1047.         }else{
  1048.             return '';
  1049.         }
  1050.     }
  1051.     public function getStatusAdministratifString($project){
  1052.         $status = $project->getStatusAdministratif();
  1053.         if($status == Project::STATUS_CUSTOM_EN_ATTENT){
  1054.             return 'En attente de validation';
  1055.         }elseif($status == Project::STATUS_CUSTOM_EXPLOITATION){
  1056.             return 'Exploitation';
  1057.         }elseif($status == Project::STATUS_CUSTOM_CONSTRUCTION){
  1058.             return 'Construction';
  1059.         }elseif($status == Project::STATUS_CUSTOM_DEVELOPPEMENT){
  1060.             return 'Développement';
  1061.         }else{
  1062.             return '';
  1063.         }
  1064.     }
  1065.     public function paginateHistory($request,$project){
  1066.         $length = $request->get('length');
  1067.         $length = $length && ($length!=-1)?$length:0;
  1068.         $start = $request->get('start');
  1069.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1070.         $column =  $search = $request->get('columns');
  1071.         $order = $request->get('order')[0];
  1072.         $columnOrder = $order['column'];
  1073.         $dirOrder = $order['dir'];
  1074.         $columNameOrder = $column[$columnOrder]['data'];
  1075.         $search = $request->get('search');
  1076.         $role = $request->get('role');
  1077.         $date = $request->get('projectDate');
  1078.         $filters = [
  1079.             'query' => trim(@$search['value'])
  1080.         ];
  1081.         $historys= $this->em->getRepository(\App\Entity\HistoryProject::class)->search($role,$date,$project,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  1082.         $recordsFiltered= $this->em->getRepository(\App\Entity\HistoryProject::class)->search($role,$date,$project,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1083.         $recordsTotal= $this->em->getRepository(\App\Entity\HistoryProject::class)->search($role,$date,$project,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1084.         $output = array(
  1085.             'data' => array(),
  1086.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1087.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1088.         );
  1089.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1090.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  1091.         foreach ($historys as $history) {
  1092.             $output['data'][] = [
  1093.                 'responsive_id' => '',
  1094.                 'id' => $history->getId(),
  1095.                 'action' => $history->getAction(),
  1096.                 'user' => $history->getUser()?$history->getUser()->getFirstname().' '.$history->getUser()->getLastname() .' ('.$history->getUser()->getRoleString().')' : '-',
  1097.                 'createdAt' => $history->getCreatedAt() ? $intl->format($history->getCreatedAt()).' '.$history->getCreatedAt()->format('H:i:s') :' - '
  1098.             ];
  1099.         }
  1100.         return $output;
  1101.     }
  1102.     public function kpiSvpProjectAdmin($request){
  1103.        $spvTabKpi = $request->get('spvTabKpi');
  1104.        $projectsStat =  $this->em->getRepository(Project::class)->kpiProjectBySpv($spvTabKpi);
  1105.        $projectsStatTotal =  $this->em->getRepository(Project::class)->kpiProjectBySpvTotal($spvTabKpi);
  1106.        $array =[];
  1107.        $arrayTotal = [];
  1108.        $i = 0;
  1109.         $nbrProjectTotal = 0;
  1110.         $sommeCapaciteTotal = 0;
  1111.         $nbrProjectDeveloppementTotal = 0;
  1112.         $sommeCapaciteDeveloppementTotal = 0;
  1113.         $nbrProjectConstructionTotal = 0;
  1114.         $sommeCapaciteConstructionTotal = 0;
  1115.         $nbrProjectExploitationTotal = 0;
  1116.         $sommeCapaciteExploitationTotal = 0;
  1117.        foreach ($projectsStat as $projectStat){
  1118.            $array[$i]['name'] = $projectStat['name'];
  1119.            $array[$i]['nbrProject'] = (int)$projectStat['nbrProject'];
  1120.            $array[$i]['moyenTarif'] = (float)$projectStat['moyenTarif'];
  1121.            $array[$i]['sommeCapacite'] = (float)$projectStat['sommeCapacite'];
  1122.            $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStat['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1123.            if($projectDeveloppement){
  1124.                $array[$i]['nbrProjectDeveloppement'] = (int)$projectDeveloppement['nbrProjectBySpv'];
  1125.                $array[$i]['sommeCapaciteDeveloppement'] = (float)$projectDeveloppement['sommeCapaciteBySpv'];
  1126.                $array[$i]['valeurDeveloppement'] = ((float)$projectDeveloppement['nbrProjectBySpv'] / (float) $projectStat['nbrProject'] )* 100  ;
  1127.            }
  1128.            $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStat['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1129.            if($projectConstruction){
  1130.                $array[$i]['nbrProjectConstruction'] = (int)$projectConstruction['nbrProjectBySpv'];
  1131.                $array[$i]['sommeCapaciteConstruction'] = (float)$projectConstruction['sommeCapaciteBySpv'];
  1132.                $array[$i]['valeurConstruction'] = ((float)$projectConstruction['nbrProjectBySpv'] / (float) $projectStat['nbrProject'] )* 100  ;
  1133.            }
  1134.            $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStat['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1135.            if($projectExploitation){
  1136.                $array[$i]['nbrProjectExploitation'] = (int)$projectExploitation['nbrProjectBySpv'];
  1137.                $array[$i]['sommeCapaciteExploitation'] = (float)$projectExploitation['sommeCapaciteBySpv'];
  1138.                $array[$i]['valeurExploitation'] = ((float)$projectExploitation['nbrProjectBySpv'] / (float) $projectStat['nbrProject'] )* 100  ;
  1139.            }
  1140.            $i++;
  1141.        }
  1142.         foreach ($projectsStatTotal as $projectStatTotal){
  1143.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1144.             if($projectDeveloppement){
  1145.                 $nbrProjectDeveloppementTotal +=  (int)$projectDeveloppement['nbrProjectBySpv'];
  1146.                 $sommeCapaciteDeveloppementTotal +=  (float)$projectDeveloppement['sommeCapaciteBySpv'];
  1147.             }
  1148.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1149.             if($projectConstruction){
  1150.                 $nbrProjectConstructionTotal +=  (int)$projectConstruction['nbrProjectBySpv'];
  1151.                 $sommeCapaciteConstructionTotal +=  (float)$projectConstruction['sommeCapaciteBySpv'];
  1152.             }
  1153.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectBySpvAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1154.             if($projectExploitation){
  1155.                 $nbrProjectExploitationTotal +=  (int)$projectExploitation['nbrProjectBySpv'];
  1156.                 $sommeCapaciteExploitationTotal +=  (float)$projectExploitation['sommeCapaciteBySpv'];
  1157.             }
  1158.             $nbrProjectTotal +=  (int)$projectStatTotal['nbrProject'];
  1159.             $sommeCapaciteTotal +=  (float)$projectStatTotal['sommeCapacite'];
  1160.         }
  1161.        $arrayTotal['nbrProjectTotal'] = $nbrProjectTotal;
  1162.        $arrayTotal['sommeCapaciteTotal'] = $sommeCapaciteTotal;
  1163.        $arrayTotal['nbrProjectDeveloppementTotal'] = $nbrProjectDeveloppementTotal;
  1164.        $arrayTotal['sommeCapaciteDeveloppementTotal'] = $sommeCapaciteDeveloppementTotal;
  1165.        $arrayTotal['valeurDeveloppementTotal'] = $nbrProjectTotal ? ($nbrProjectDeveloppementTotal / $nbrProjectTotal) *100 : 0;
  1166.        $arrayTotal['nbrProjectConstructionTotal'] = $nbrProjectConstructionTotal;
  1167.        $arrayTotal['sommeCapaciteConstructionTotal'] = $sommeCapaciteConstructionTotal;
  1168.        $arrayTotal['valeurConstructionTotal'] = $nbrProjectTotal ? ($nbrProjectConstructionTotal / $nbrProjectTotal) *100 : 0;
  1169.        $arrayTotal['nbrProjectExploitationTotal'] = $nbrProjectExploitationTotal;
  1170.        $arrayTotal['sommeCapaciteExploitationTotal'] = $sommeCapaciteExploitationTotal;
  1171.        $arrayTotal['valeurExploitationTotal'] = $nbrProjectTotal ? ($nbrProjectExploitationTotal / $nbrProjectTotal) *100 : 0;
  1172.         $spvs = $this->em->getRepository(Spv::class)->getSpvEnabled();
  1173.        return ['arrays'=>$array,'arrayTotal'=>$arrayTotal,'spvs'=>$spvs,'name'=>'Données par SPV','name2'=>'SPV'];
  1174.     }
  1175.     public function kpiDevProjectAdmin($request){
  1176.         $devTabKpi = $request->get('devTabKpi');
  1177.         $projectsStat =  $this->em->getRepository(Project::class)->kpiProjectByDev($devTabKpi);
  1178.         $projectsStatTotal =  $this->em->getRepository(Project::class)->kpiProjectByDevTotal();
  1179.         $array =[];
  1180.         $arrayTotal = [];
  1181.         $i = 0;
  1182.         $nbrProjectTotal = 0;
  1183.         $sommeCapaciteTotal = 0;
  1184.         $nbrProjectDeveloppementTotal = 0;
  1185.         $sommeCapaciteDeveloppementTotal = 0;
  1186.         $nbrProjectConstructionTotal = 0;
  1187.         $sommeCapaciteConstructionTotal = 0;
  1188.         $nbrProjectExploitationTotal = 0;
  1189.         $sommeCapaciteExploitationTotal = 0;
  1190.         foreach ($projectsStat as $projectStat){
  1191.             $array[$i]['name'] = $projectStat['name'];
  1192.             $array[$i]['nbrProject'] = (int)$projectStat['nbrProject'];
  1193.             $array[$i]['moyenTarif'] = (float)$projectStat['moyenTarif'];
  1194.             $array[$i]['sommeCapacite'] = (float)$projectStat['sommeCapacite'];
  1195.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStat['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1196.             if($projectDeveloppement){
  1197.                 $array[$i]['nbrProjectDeveloppement'] = (int)$projectDeveloppement['nbrProjectByDev'];
  1198.                 $array[$i]['sommeCapaciteDeveloppement'] = (float)$projectDeveloppement['sommeCapaciteByDev'];
  1199.                 $array[$i]['valeurDeveloppement'] = ((float)$projectDeveloppement['nbrProjectByDev'] / (float) $projectStat['nbrProject'] )* 100  ;
  1200.             }
  1201.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStat['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1202.             if($projectConstruction){
  1203.                 $array[$i]['nbrProjectConstruction'] = (int)$projectConstruction['nbrProjectByDev'];
  1204.                 $array[$i]['sommeCapaciteConstruction'] = (float)$projectConstruction['sommeCapaciteByDev'];
  1205.                 $array[$i]['valeurConstruction'] = ((float)$projectConstruction['nbrProjectByDev'] / (float) $projectStat['nbrProject'] )* 100  ;
  1206.             }
  1207.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStat['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1208.             if($projectExploitation){
  1209.                 $array[$i]['nbrProjectExploitation'] = (int)$projectExploitation['nbrProjectByDev'];
  1210.                 $array[$i]['sommeCapaciteExploitation'] = (float)$projectExploitation['sommeCapaciteByDev'];
  1211.                 $array[$i]['valeurExploitation'] = ((float)$projectExploitation['nbrProjectByDev'] / (float) $projectStat['nbrProject'] )* 100  ;
  1212.             }
  1213.             $i++;
  1214.         }
  1215.         foreach ($projectsStatTotal as $projectStatTotal){
  1216.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1217.             if($projectDeveloppement){
  1218.                 $nbrProjectDeveloppementTotal +=  (int)$projectDeveloppement['nbrProjectByDev'];
  1219.                 $sommeCapaciteDeveloppementTotal +=  (float)$projectDeveloppement['sommeCapaciteByDev'];
  1220.             }
  1221.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1222.             if($projectConstruction){
  1223.                 $nbrProjectConstructionTotal +=  (int)$projectConstruction['nbrProjectByDev'];
  1224.                 $sommeCapaciteConstructionTotal +=  (float)$projectConstruction['sommeCapaciteByDev'];
  1225.             }
  1226.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByDevAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1227.             if($projectExploitation){
  1228.                 $nbrProjectExploitationTotal +=  (int)$projectExploitation['nbrProjectByDev'];
  1229.                 $sommeCapaciteExploitationTotal +=  (float)$projectExploitation['sommeCapaciteByDev'];
  1230.             }
  1231.             $nbrProjectTotal +=  (int)$projectStatTotal['nbrProject'];
  1232.             $sommeCapaciteTotal +=  (float)$projectStatTotal['sommeCapacite'];
  1233.         }
  1234.         $arrayTotal['nbrProjectTotal'] = $nbrProjectTotal;
  1235.         $arrayTotal['sommeCapaciteTotal'] = $sommeCapaciteTotal;
  1236.         $arrayTotal['nbrProjectDeveloppementTotal'] = $nbrProjectDeveloppementTotal;
  1237.         $arrayTotal['sommeCapaciteDeveloppementTotal'] = $sommeCapaciteDeveloppementTotal;
  1238.         $arrayTotal['valeurDeveloppementTotal'] = $nbrProjectTotal ? ($nbrProjectDeveloppementTotal / $nbrProjectTotal) *100 : 0;
  1239.         $arrayTotal['nbrProjectConstructionTotal'] = $nbrProjectConstructionTotal;
  1240.         $arrayTotal['sommeCapaciteConstructionTotal'] = $sommeCapaciteConstructionTotal;
  1241.         $arrayTotal['valeurConstructionTotal'] = $nbrProjectTotal ? ($nbrProjectConstructionTotal / $nbrProjectTotal) *100 : 0;
  1242.         $arrayTotal['nbrProjectExploitationTotal'] = $nbrProjectExploitationTotal;
  1243.         $arrayTotal['sommeCapaciteExploitationTotal'] = $sommeCapaciteExploitationTotal;
  1244.         $arrayTotal['valeurExploitationTotal'] = $nbrProjectTotal ? ($nbrProjectExploitationTotal / $nbrProjectTotal) *100 : 0;
  1245.         $devs = $this->em->getRepository(User::class)->getUserByRole('ROLE_DEV');
  1246.         return ['arrays'=>$array,'arrayTotal'=>$arrayTotal,'devs'=>$devs,'name'=>'Données par développeur','name2'=>'Développeur'];
  1247.     }
  1248.     public function kpiTypologieProjectProjectAdmin($request){
  1249.         $typologieProjectTabKpi = $request->get('typologieProjectTabKpi');
  1250.         $projectsStat =  $this->em->getRepository(Project::class)->kpiProjectByTypologieProject($typologieProjectTabKpi);
  1251.         $projectsStatTotal =  $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectTotal();
  1252.         $array =[];
  1253.         $arrayTotal = [];
  1254.         $i = 0;
  1255.         $nbrProjectTotal = 0;
  1256.         $sommeCapaciteTotal = 0;
  1257.         $nbrProjectDeveloppementTotal = 0;
  1258.         $sommeCapaciteDeveloppementTotal = 0;
  1259.         $nbrProjectConstructionTotal = 0;
  1260.         $sommeCapaciteConstructionTotal = 0;
  1261.         $nbrProjectExploitationTotal = 0;
  1262.         $sommeCapaciteExploitationTotal = 0;
  1263.         foreach ($projectsStat as $projectStat){
  1264.             $array[$i]['name'] = $projectStat['name'];
  1265.             $array[$i]['nbrProject'] = (int)$projectStat['nbrProject'];
  1266.             $array[$i]['moyenTarif'] = (float)$projectStat['moyenTarif'];
  1267.             $array[$i]['sommeCapacite'] = (float)$projectStat['sommeCapacite'];
  1268.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1269.             if($projectDeveloppement){
  1270.                 $array[$i]['nbrProjectDeveloppement'] = (int)$projectDeveloppement['nbrProjectByTypologieProject'];
  1271.                 $array[$i]['sommeCapaciteDeveloppement'] = (float)$projectDeveloppement['sommeCapaciteByTypologieProject'];
  1272.                 $array[$i]['valeurDeveloppement'] = ((float)$projectDeveloppement['nbrProjectByTypologieProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1273.             }
  1274.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1275.             if($projectConstruction){
  1276.                 $array[$i]['nbrProjectConstruction'] = (int)$projectConstruction['nbrProjectByTypologieProject'];
  1277.                 $array[$i]['sommeCapaciteConstruction'] = (float)$projectConstruction['sommeCapaciteByTypologieProject'];
  1278.                 $array[$i]['valeurConstruction'] = ((float)$projectConstruction['nbrProjectByTypologieProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1279.             }
  1280.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1281.             if($projectExploitation){
  1282.                 $array[$i]['nbrProjectExploitation'] = (int)$projectExploitation['nbrProjectByTypologieProject'];
  1283.                 $array[$i]['sommeCapaciteExploitation'] = (float)$projectExploitation['sommeCapaciteByTypologieProject'];
  1284.                 $array[$i]['valeurExploitation'] = ((float)$projectExploitation['nbrProjectByTypologieProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1285.             }
  1286.             $i++;
  1287.         }
  1288.         foreach ($projectsStatTotal as $projectStatTotal){
  1289.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1290.             if($projectDeveloppement){
  1291.                 $nbrProjectDeveloppementTotal +=  (int)$projectDeveloppement['nbrProjectByTypologieProject'];
  1292.                 $sommeCapaciteDeveloppementTotal +=  (float)$projectDeveloppement['sommeCapaciteByTypologieProject'];
  1293.             }
  1294.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1295.             if($projectConstruction){
  1296.                 $nbrProjectConstructionTotal +=  (int)$projectConstruction['nbrProjectByTypologieProject'];
  1297.                 $sommeCapaciteConstructionTotal +=  (float)$projectConstruction['sommeCapaciteByTypologieProject'];
  1298.             }
  1299.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByTypologieProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1300.             if($projectExploitation){
  1301.                 $nbrProjectExploitationTotal +=  (int)$projectExploitation['nbrProjectByTypologieProject'];
  1302.                 $sommeCapaciteExploitationTotal +=  (float)$projectExploitation['sommeCapaciteByTypologieProject'];
  1303.             }
  1304.             $nbrProjectTotal +=  (int)$projectStatTotal['nbrProject'];
  1305.             $sommeCapaciteTotal +=  (float)$projectStatTotal['sommeCapacite'];
  1306.         }
  1307.         $arrayTotal['nbrProjectTotal'] = $nbrProjectTotal;
  1308.         $arrayTotal['sommeCapaciteTotal'] = $sommeCapaciteTotal;
  1309.         $arrayTotal['nbrProjectDeveloppementTotal'] = $nbrProjectDeveloppementTotal;
  1310.         $arrayTotal['sommeCapaciteDeveloppementTotal'] = $sommeCapaciteDeveloppementTotal;
  1311.         $arrayTotal['valeurDeveloppementTotal'] = $nbrProjectTotal ? ($nbrProjectDeveloppementTotal / $nbrProjectTotal) *100 : 0;
  1312.         $arrayTotal['nbrProjectConstructionTotal'] = $nbrProjectConstructionTotal;
  1313.         $arrayTotal['sommeCapaciteConstructionTotal'] = $sommeCapaciteConstructionTotal;
  1314.         $arrayTotal['valeurConstructionTotal'] = $nbrProjectTotal ? ($nbrProjectConstructionTotal / $nbrProjectTotal) *100 : 0;
  1315.         $arrayTotal['nbrProjectExploitationTotal'] = $nbrProjectExploitationTotal;
  1316.         $arrayTotal['sommeCapaciteExploitationTotal'] = $sommeCapaciteExploitationTotal;
  1317.         $arrayTotal['valeurExploitationTotal'] = $nbrProjectTotal ? ($nbrProjectExploitationTotal / $nbrProjectTotal) *100 : 0;
  1318.         $typologieProjects = $this->em->getRepository(TypologieProject::class)->findAll();
  1319.         return ['arrays'=>$array,'arrayTotal'=>$arrayTotal,'typologieProjects'=>$typologieProjects,'name'=>'Données par type de projet','name2'=>'Type'];
  1320.     }
  1321.     public function kpiFamilleProjectProjectAdmin($request){
  1322.         $familleProjectTabKpi = $request->get('familleProjectTabKpi');
  1323.         $projectsStat =  $this->em->getRepository(Project::class)->kpiProjectByFamilleProject($familleProjectTabKpi);
  1324.         $projectsStatTotal =  $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectTotal();
  1325.         $array =[];
  1326.         $arrayTotal = [];
  1327.         $i = 0;
  1328.         $nbrProjectTotal = 0;
  1329.         $sommeCapaciteTotal = 0;
  1330.         $nbrProjectDeveloppementTotal = 0;
  1331.         $sommeCapaciteDeveloppementTotal = 0;
  1332.         $nbrProjectConstructionTotal = 0;
  1333.         $sommeCapaciteConstructionTotal = 0;
  1334.         $nbrProjectExploitationTotal = 0;
  1335.         $sommeCapaciteExploitationTotal = 0;
  1336.         foreach ($projectsStat as $projectStat){
  1337.             $array[$i]['name'] = $projectStat['name'];
  1338.             $array[$i]['nbrProject'] = (int)$projectStat['nbrProject'];
  1339.             $array[$i]['moyenTarif'] = (float)$projectStat['moyenTarif'];
  1340.             $array[$i]['sommeCapacite'] = (float)$projectStat['sommeCapacite'];
  1341.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1342.             if($projectDeveloppement){
  1343.                 $array[$i]['nbrProjectDeveloppement'] = (int)$projectDeveloppement['nbrProjectByFamilleProject'];
  1344.                 $array[$i]['sommeCapaciteDeveloppement'] = (float)$projectDeveloppement['sommeCapaciteByFamilleProject'];
  1345.                 $array[$i]['valeurDeveloppement'] = ((float)$projectDeveloppement['nbrProjectByFamilleProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1346.             }
  1347.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1348.             if($projectConstruction){
  1349.                 $array[$i]['nbrProjectConstruction'] = (int)$projectConstruction['nbrProjectByFamilleProject'];
  1350.                 $array[$i]['sommeCapaciteConstruction'] = (float)$projectConstruction['sommeCapaciteByFamilleProject'];
  1351.                 $array[$i]['valeurConstruction'] = ((float)$projectConstruction['nbrProjectByFamilleProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1352.             }
  1353.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStat['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1354.             if($projectExploitation){
  1355.                 $array[$i]['nbrProjectExploitation'] = (int)$projectExploitation['nbrProjectByFamilleProject'];
  1356.                 $array[$i]['sommeCapaciteExploitation'] = (float)$projectExploitation['sommeCapaciteByFamilleProject'];
  1357.                 $array[$i]['valeurExploitation'] = ((float)$projectExploitation['nbrProjectByFamilleProject'] / (float) $projectStat['nbrProject'] )* 100  ;
  1358.             }
  1359.             $i++;
  1360.         }
  1361.         foreach ($projectsStatTotal as $projectStatTotal){
  1362.             $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1363.             if($projectDeveloppement){
  1364.                 $nbrProjectDeveloppementTotal +=  (int)$projectDeveloppement['nbrProjectByFamilleProject'];
  1365.                 $sommeCapaciteDeveloppementTotal +=  (float)$projectDeveloppement['sommeCapaciteByFamilleProject'];
  1366.             }
  1367.             $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_CONSTRUCTION);
  1368.             if($projectConstruction){
  1369.                 $nbrProjectConstructionTotal +=  (int)$projectConstruction['nbrProjectByFamilleProject'];
  1370.                 $sommeCapaciteConstructionTotal +=  (float)$projectConstruction['sommeCapaciteByFamilleProject'];
  1371.             }
  1372.             $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByFamilleProjectAndStatus($projectStatTotal['id'],Project::STATUS_CUSTOM_EXPLOITATION);
  1373.             if($projectExploitation){
  1374.                 $nbrProjectExploitationTotal +=  (int)$projectExploitation['nbrProjectByFamilleProject'];
  1375.                 $sommeCapaciteExploitationTotal +=  (float)$projectExploitation['sommeCapaciteByFamilleProject'];
  1376.             }
  1377.             $nbrProjectTotal +=  (int)$projectStatTotal['nbrProject'];
  1378.             $sommeCapaciteTotal +=  (float)$projectStatTotal['sommeCapacite'];
  1379.             $i++;
  1380.         }
  1381.         $arrayTotal['nbrProjectTotal'] = $nbrProjectTotal;
  1382.         $arrayTotal['sommeCapaciteTotal'] = $sommeCapaciteTotal;
  1383.         $arrayTotal['nbrProjectDeveloppementTotal'] = $nbrProjectDeveloppementTotal;
  1384.         $arrayTotal['sommeCapaciteDeveloppementTotal'] = $sommeCapaciteDeveloppementTotal;
  1385.         $arrayTotal['valeurDeveloppementTotal'] = $nbrProjectTotal ? ($nbrProjectDeveloppementTotal / $nbrProjectTotal) *100 : 0;
  1386.         $arrayTotal['nbrProjectConstructionTotal'] = $nbrProjectConstructionTotal;
  1387.         $arrayTotal['sommeCapaciteConstructionTotal'] = $sommeCapaciteConstructionTotal;
  1388.         $arrayTotal['valeurConstructionTotal'] = $nbrProjectTotal ? ($nbrProjectConstructionTotal / $nbrProjectTotal) *100 : 0;
  1389.         $arrayTotal['nbrProjectExploitationTotal'] = $nbrProjectExploitationTotal;
  1390.         $arrayTotal['sommeCapaciteExploitationTotal'] = $sommeCapaciteExploitationTotal;
  1391.         $arrayTotal['valeurExploitationTotal'] = $nbrProjectTotal ? ($nbrProjectExploitationTotal / $nbrProjectTotal) *100 : 0;
  1392.         $familleProjects = $this->em->getRepository(FamilleProject::class)->findAll();
  1393.         return ['arrays'=>$array,'arrayTotal'=>$arrayTotal,'familleProjects'=>$familleProjects,'name'=>'Données par famille de projet','name2'=>'Famille du projet'];
  1394.     }
  1395.     public function kpiStatusProjectAdmin($request){
  1396.         $array =[];
  1397.         $totalNbr = 0;
  1398.         $totalCapacite = 0;
  1399.         $projectDeveloppement = $this->em->getRepository(Project::class)->kpiProjectByStatus(Project::STATUS_CUSTOM_DEVELOPPEMENT);
  1400.         if($projectDeveloppement){
  1401.             $array['nbrProjectDeveloppement'] = (int)$projectDeveloppement['nbrProjectByStatus'];
  1402.             $array['sommeCapaciteDeveloppement'] = (float)$projectDeveloppement['sommeCapaciteByStatus'];
  1403.             $totalNbr += (int)$projectDeveloppement['nbrProjectByStatus'];
  1404.             $totalCapacite += (float)$projectDeveloppement['sommeCapaciteByStatus'];
  1405.         }
  1406.         $projectConstruction = $this->em->getRepository(Project::class)->kpiProjectByStatus(Project::STATUS_CUSTOM_CONSTRUCTION);
  1407.         if($projectConstruction){
  1408.             $array['nbrProjectConstruction'] = (int)$projectConstruction['nbrProjectByStatus'];
  1409.             $array['sommeCapaciteConstruction'] = (float)$projectConstruction['sommeCapaciteByStatus'];
  1410.             $totalNbr += (int)$projectConstruction['nbrProjectByStatus'];
  1411.             $totalCapacite += (float)$projectConstruction['sommeCapaciteByStatus'];
  1412.         }
  1413.         $projectExploitation = $this->em->getRepository(Project::class)->kpiProjectByStatus(Project::STATUS_CUSTOM_EXPLOITATION);
  1414.         if($projectExploitation){
  1415.             $array['nbrProjectExploitation'] = (int)$projectExploitation['nbrProjectByStatus'];
  1416.             $array['sommeCapaciteExploitation'] = (float)$projectExploitation['sommeCapaciteByStatus'];
  1417.             $totalNbr += (int)$projectExploitation['nbrProjectByStatus'];
  1418.             $totalCapacite += (float)$projectExploitation['sommeCapaciteByStatus'];
  1419.         }
  1420.         $array['totalNbr'] = $totalNbr;
  1421.         $array['totalCapacite'] = $totalCapacite;
  1422.         return $array;
  1423.     }
  1424.     public function getProjectByRequest($request,$isArchive = false){
  1425.         $spvProject = $request->get('spvProject');
  1426.         $search = $request->get('search');
  1427.         $status = $request->get('btnStatusTab');
  1428.         $user = $this->security->getUser();
  1429.         $dev = null;
  1430.         $epc = null;
  1431.         if(in_array('ROLE_DEV',$user->getRoles())){
  1432.             $dev = $user;
  1433.         }
  1434.         if(in_array('ROLE_EPC',$user->getRoles())){
  1435.             $epc = $user;
  1436.         }
  1437.         $user = $this->security->getUser();
  1438.         $projects= $this->em->getRepository(\App\Entity\Project::class)->getProjectsGlobal($isArchive,$spvProject,$search,$dev,$epc,$status,$user);
  1439.         return $projects;
  1440.     }
  1441.     public function getProjectByRequestSelectAll($request,$isArchive = false){
  1442.         $user = $this->security->getUser();
  1443.         $roles = $user->getRoles();
  1444.         if (in_array("ROLE_DEV", $roles) or in_array("ROLE_EPC", $roles) or in_array("ROLE_RESPONSABLE", $roles)) {
  1445.             $search = $request->get('search');
  1446.             $status = $request->get('statusProject');
  1447.             $statusAdministratifProject = $request->get('statusAdministratifProject');
  1448.             $statusTrackerProject = $request->get('statusTrackerProject');
  1449.             $typologieProject = $request->get('typologieProject');
  1450.             $responsableProject = $request->get('responsableProject');
  1451.             $responsableFoncierProject = $request->get('responsableFoncierProject');
  1452.             $responsableDevProject = $request->get('responsableDevProject');
  1453.             $constructeurProject = $request->get('constructeurProject');
  1454.             $constructeurEpcProject = $request->get('constructeurEpcProject');
  1455.             $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  1456.             $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  1457.             $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  1458.             $stadeConstruction = $request->get('stadeConstruction');
  1459.             $statusUrbanisme = $request->get('statusUrbanisme');
  1460.             $statusFoncier1 = $request->get('statusFoncier1');
  1461.             $statusFoncier2 = $request->get('statusFoncier2');
  1462.             $statusFoncier3 = $request->get('statusFoncier3');
  1463.             $entrepriseProject = $request->get('entrepriseProject');
  1464.             $achatLocation = $request->get('achatLocation');
  1465.             $filters = [
  1466.                 'query' => trim(@$search['value']),
  1467.                 'spvProject' =>  $request->get('spvProject'),
  1468.                 'statusAdministratifProject' =>  $statusAdministratifProject,
  1469.                 'statusTrackerProject' => $statusTrackerProject,
  1470.                 'typologieProject' => $typologieProject,
  1471.                 'responsableProject' => $responsableProject,
  1472.                 'responsableFoncierProject' => $responsableFoncierProject,
  1473.                 'responsableDevProject' => $responsableDevProject,
  1474.                 'constructeurProject' => $constructeurProject,
  1475.                 'constructeurEpcProject' => $constructeurEpcProject,
  1476.                 'constructeurInstallateurProject' => $constructeurInstallateurProject,
  1477.                 'constructeurCharpentierProject' => $constructeurCharpentierProject,
  1478.                 'constructeurNotaireProject' => $constructeurNotaireProject,
  1479.                 'stadeConstruction' => $stadeConstruction,
  1480.                 'statusUrbanisme' => $statusUrbanisme,
  1481.                 'statusFoncier1' => $statusFoncier1,
  1482.                 'statusFoncier2' => $statusFoncier2,
  1483.                 'statusFoncier3' => $statusFoncier3,
  1484.                 'entrepriseProject' => $entrepriseProject,
  1485.                 'achatLocation' => $achatLocation,
  1486.             ];
  1487.             $projects= $this->em->getRepository(\App\Entity\Project::class)->search($isArchive,$status,$user,$filters);
  1488.         }else{
  1489.             $search = $request->get('search');
  1490.             $status = $request->get('statusProject');
  1491.             $status2 = $request->get('status2Project');
  1492.             $statusAdministratifProject = $request->get('statusAdministratifProject');
  1493.             $spvProject = $request->get('spvProject');
  1494.             $devProject = $request->get('devProject');
  1495.             $responsableProject = $request->get('responsableProject');
  1496.             $responsableFoncierProject = $request->get('responsableFoncierProject');
  1497.             $responsableDevProject = $request->get('responsableDevProject');
  1498.             $constructeurProject = $request->get('constructeurProject');
  1499.             $statusTrackerProject = $request->get('statusTrackerProject');
  1500.             $typologieProject = $request->get('typologieProject');
  1501.             $constructeurEpcProject = $request->get('constructeurEpcProject');
  1502.             $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  1503.             $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  1504.             $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  1505.             $stadeConstruction = $request->get('stadeConstruction');
  1506.             $statusUrbanisme = $request->get('statusUrbanisme');
  1507.             $statusFoncier1 = $request->get('statusFoncier1');
  1508.             $statusFoncier2 = $request->get('statusFoncier2');
  1509.             $statusFoncier3 = $request->get('statusFoncier3');
  1510.             $entrepriseProject = $request->get('entrepriseProject');
  1511.             $achatLocation = $request->get('achatLocation');
  1512.             $spvsTab = [];
  1513.             if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  1514.                 $spvs = $user->getSpv();
  1515.                 foreach($spvs as $item){
  1516.                     $spvsTab[] = $item->getId();
  1517.                 }
  1518.             }
  1519.             $filters = [
  1520.                 'query' => trim(@$search['value']),
  1521.                 'devProject' => $devProject,
  1522.                 'responsableProject' => $responsableProject,
  1523.                 'responsableFoncierProject' => $responsableFoncierProject,
  1524.                 'responsableDevProject' => $responsableDevProject,
  1525.                 'constructeurProject' => $constructeurProject,
  1526.                 'spvsTab' => $spvsTab,
  1527.                 'user' => $user,
  1528.                 'statusAdministratifProject' => $statusAdministratifProject,
  1529.                 'statusTrackerProject' => $statusTrackerProject,
  1530.                 'typologieProject' => $typologieProject,
  1531.                 'constructeurEpcProject' => $constructeurEpcProject,
  1532.                 'constructeurInstallateurProject' => $constructeurInstallateurProject,
  1533.                 'constructeurCharpentierProject' => $constructeurCharpentierProject,
  1534.                 'constructeurNotaireProject' => $constructeurNotaireProject,
  1535.                 'stadeConstruction' => $stadeConstruction,
  1536.                 'statusUrbanisme' => $statusUrbanisme,
  1537.                 'statusFoncier1' => $statusFoncier1,
  1538.                 'statusFoncier2' => $statusFoncier2,
  1539.                 'statusFoncier3' => $statusFoncier3,
  1540.                 'entrepriseProject' => $entrepriseProject,
  1541.                 'achatLocation' => $achatLocation,
  1542.             ];
  1543.             $projects= $this->em->getRepository(\App\Entity\Project::class)->searchAdmin($isArchive,$status,$status2,$spvProject,$filters);
  1544.         }
  1545.         return $projects;
  1546.     }
  1547.     public function duplicateProject($project,$name)
  1548.     {
  1549.         $projectExist = $this->em->getRepository(Project::class)->findOneBy(['name'=>$name]);
  1550.         if($projectExist){
  1551.             return array(
  1552.                 'erreur' => 'Il existe déjà un projet avec ce nom',
  1553.                 'success' => false
  1554.             );
  1555.         }
  1556.         $newProject = clone $project;
  1557.         $newProject->setName($name);
  1558.         $newProject->setCreatedAt( new \DateTime());
  1559.         $newProject->setToken( md5(uniqid()));
  1560.         $newProject->setUserCreated( $this->security->getUser());
  1561.         $this->em->persist($newProject);
  1562.         $this->em->flush();
  1563.         $commentsEtaps = $this->em->getRepository(CommentEtap::class)->findBy(['project'=>$project->getId()]);
  1564.         foreach ($commentsEtaps as $commentsEtap){
  1565.             $commentsEtapNew = clone $commentsEtap;
  1566.             $commentsEtapNew->setProject($newProject);
  1567.             $this->em->persist($commentsEtapNew);
  1568.             $this->em->flush();
  1569.         }
  1570.         $etap0 = $this->em->getRepository(Etap0::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap0,$newProject);
  1571.         $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap1,$newProject);
  1572.         $etap2 = $this->em->getRepository(Etap2::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap2,$newProject);
  1573.         $etap3 = $this->em->getRepository(Etap3::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap3,$newProject);
  1574.         $etap4 = $this->em->getRepository(Etap4::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap4,$newProject);
  1575.         $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap5,$newProject);
  1576.         $etap6 = $this->em->getRepository(Etap6::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap6,$newProject);
  1577.         $etap601 = $this->em->getRepository(Etap601::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap601,$newProject);
  1578.         $etap602 = $this->em->getRepository(Etap602::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap602,$newProject);
  1579.         $etap7 = $this->em->getRepository(Etap7::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap7,$newProject);
  1580.         $etap71 = $this->em->getRepository(Etap71::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap71,$newProject);
  1581.         $etap8 = $this->em->getRepository(Etap8::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap8,$newProject);
  1582.         $etap80 = $this->em->getRepository(Etap80::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap80,$newProject);
  1583.         $etap9 = $this->em->getRepository(Etap9::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap9,$newProject);
  1584.         $etap10 = $this->em->getRepository(Etap10::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap10,$newProject);
  1585.         $etap11 = $this->em->getRepository(Etap11::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap11,$newProject);
  1586.         $etap12 = $this->em->getRepository(Etap12::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap12,$newProject);
  1587.         $etap121 = $this->em->getRepository(Etap121::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap121,$newProject);
  1588.         $etap13 = $this->em->getRepository(Etap13::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap13,$newProject);
  1589.         $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap14,$newProject);
  1590.         $etap15 = $this->em->getRepository(Etap15::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap15,$newProject);
  1591.         $etap159 = $this->em->getRepository(Etap159::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap159,$newProject);
  1592.         $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap160,$newProject);
  1593.         $etap161 = $this->em->getRepository(Etap161::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap161,$newProject);
  1594.         $etap16 = $this->em->getRepository(Etap16::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap16,$newProject);
  1595.         $etap17 = $this->em->getRepository(Etap17::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap17,$newProject);
  1596.         $etap171 = $this->em->getRepository(Etap171::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap171,$newProject);
  1597.         $etap172 = $this->em->getRepository(Etap172::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap172,$newProject);
  1598.         $etap173 = $this->em->getRepository(Etap173::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap173,$newProject);
  1599.         $etap174 = $this->em->getRepository(Etap174::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap174,$newProject);
  1600.         $etap175 = $this->em->getRepository(Etap175::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap175,$newProject);
  1601.         $etap18 = $this->em->getRepository(Etap18::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap18,$newProject);
  1602.         $etap19 = $this->em->getRepository(Etap19::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap19,$newProject);
  1603.         $etap20 = $this->em->getRepository(Etap20::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap20,$newProject);
  1604.         $etap201 = $this->em->getRepository(Etap201::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap201,$newProject);
  1605.         $etap21 = $this->em->getRepository(Etap21::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap21,$newProject);
  1606.         $etap22 = $this->em->getRepository(Etap22::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap22,$newProject);
  1607.         $etap23 = $this->em->getRepository(Etap23::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap23,$newProject);
  1608.         $etap24 = $this->em->getRepository(Etap24::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap24,$newProject);
  1609.         $etap25 = $this->em->getRepository(Etap25::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap25,$newProject);
  1610.         $etap26 = $this->em->getRepository(Etap26::class)->findOneBy(['project' => $project->getId()]); $this->cloneEtap($etap26,$newProject);
  1611.         return [
  1612.             'success' => true
  1613.         ];
  1614.     }
  1615.     private function cloneEtap($etap,$newProject){
  1616.         if($etap){
  1617.             $newEtap = clone $etap;
  1618.             $newEtap->setProject($newProject);
  1619.             $this->em->persist($newEtap);
  1620.             $this->em->flush();
  1621.         }
  1622.     }
  1623.     public function paginateDocListProject($request,$isArchive=false){
  1624.         $length = $request->get('length');
  1625.         $length = $length && ($length!=-1)?$length:0;
  1626.         $start = $request->get('start');
  1627.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1628.         $column =  $search = $request->get('columns');
  1629.         $order = $request->get('order')[0];
  1630.         $columnOrder = $order['column'];
  1631.         $dirOrder = $order['dir'];
  1632.         $columNameOrder = $column[$columnOrder]['data'];
  1633.         $search = $request->get('search');
  1634.         $spvProject = $request->get('spvProject');
  1635.         $devProject = $request->get('devProject');
  1636.         $docsProject = $request->get('docsProject');
  1637.         $responsableProject = $request->get('responsableProject');
  1638.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  1639.         $responsableDevProject = $request->get('responsableDevProject');
  1640.         $constructeurProject = $request->get('constructeurProject');
  1641.         $user = $this->security->getUser();
  1642.         $roles = $user->getRoles();
  1643.         $spvsTab = [];
  1644.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  1645.             $spvs = $user->getSpv();
  1646.             foreach($spvs as $item){
  1647.                 $spvsTab[] = $item->getId();
  1648.             }
  1649.         }
  1650.         $filters = [
  1651.             'query' => trim(@$search['value']),
  1652.             'devProject' => $devProject,
  1653.             'responsableProject' => $responsableProject,
  1654.             'responsableFoncierProject' => $responsableFoncierProject,
  1655.             'responsableDevProject' => $responsableDevProject,
  1656.             'constructeurProject' => $constructeurProject,
  1657.             'spvsTab' => $spvsTab,
  1658.             'user' => $user
  1659.         ];
  1660.         $projectsPreFilter = $this->em->getRepository(\App\Entity\Project::class)->searchByDocPreFilter($spvProject,$filters);
  1661.         $array = [];
  1662.         if($projectsPreFilter){
  1663.             $array = [];
  1664.             foreach ($projectsPreFilter as $projectPreFilter){
  1665.                 if($docsProject){
  1666.                     foreach ($docsProject as $docs){
  1667.                         $str = explode("__", $docs);
  1668.                         $etapNum = $str[0];
  1669.                         $fileName = $str[1];
  1670.                         $nameChampManyToMany = isset($str[2])?$str[2]:null;
  1671.                         $nameChampManyToMany2 = isset($str[3])?$str[3]:null;
  1672.                         $etapClass = 'App\\Entity\\Etap'.$etapNum;
  1673.                         $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$projectPreFilter->getId()]);
  1674.                         if($etap){
  1675.                             $classMetadata = $this->em->getClassMetadata($etapClass);
  1676.                             if($nameChampManyToMany){
  1677.                                 $associationMappings = $classMetadata->getAssociationMapping($nameChampManyToMany);
  1678.                                 if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  1679.                                     $nameGeteurFiled = 'get'.ucfirst($nameChampManyToMany);
  1680.                                     $filedValue = $etap->{$nameGeteurFiled}();
  1681.                                     if(!$filedValue->isEmpty()){
  1682.                                         foreach ($filedValue as $item){
  1683.                                             if($nameChampManyToMany2){
  1684.                                                 $nameGeteurFiledLevel2 = 'get'.ucfirst($nameChampManyToMany2);
  1685.                                                 $filedValueLevel2 = $item->{$nameGeteurFiledLevel2}();
  1686.                                                 if(!$filedValueLevel2->isEmpty()){
  1687.                                                     foreach ($filedValueLevel2 as $itemLevel2){
  1688.                                                         $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  1689.                                                         $filedValue2 = $itemLevel2->{$nameGeteurFiled2}();
  1690.                                                         if(!$filedValue2->isEmpty()) {
  1691.                                                             foreach ($filedValue2 as $item2) {
  1692.                                                                 if (!$item2->getIsArchived()) {
  1693.                                                                     $array[$projectPreFilter->getId()] = $projectPreFilter;
  1694.                                                                 }
  1695.                                                             }
  1696.                                                         }
  1697.                                                     }
  1698.                                                 }
  1699.                                             }else{
  1700.                                                 $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  1701.                                                 $filedValue2 = $item->{$nameGeteurFiled2}();
  1702.                                                 if(!$filedValue2->isEmpty()) {
  1703.                                                     foreach ($filedValue2 as $item2) {
  1704.                                                         if ($item2->getIsArchived()) {
  1705.                                                         } else {
  1706.                                                             $array[$projectPreFilter->getId()] = $projectPreFilter;
  1707.                                                         }
  1708.                                                     }
  1709.                                                 }
  1710.                                             }
  1711.                                         }
  1712.                                     }
  1713.                                 }
  1714.                             }else{
  1715.                                 $associationMappings = $classMetadata->getAssociationMapping($fileName);
  1716.                                 if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  1717.                                     $nameGeteurFiled = 'get'.ucfirst($fileName);
  1718.                                     $filedValue = $etap->{$nameGeteurFiled}();
  1719.                                     if(!$filedValue->isEmpty()){
  1720.                                         foreach ($filedValue as $item){
  1721.                                             if($item->getIsArchived()){
  1722.                                                 // condition is promesse de bail
  1723.                                                 if($fileName == 'filePromessebailMultiple'){
  1724.                                                     if($projectPreFilter->getFilePromessebail() and !$projectPreFilter->getFilePromessebail()->getIsArchived()){
  1725.                                                         $array[$projectPreFilter->getId()] = $projectPreFilter;
  1726.                                                     }
  1727.                                                 }
  1728.                                             }else{
  1729.                                                 $array[$projectPreFilter->getId()] = $projectPreFilter;
  1730.                                             }
  1731.                                         }
  1732.                                     }
  1733.                                 }else{
  1734.                                     $nameGeteurFiled = 'get'.ucfirst($fileName);
  1735.                                     $filedValue = $etap->{$nameGeteurFiled}();
  1736.                                     if($filedValue && !$filedValue->getIsArchived()){
  1737.                                         $array[$projectPreFilter->getId()] = $projectPreFilter;
  1738.                                     }
  1739.                                 }
  1740.                             }
  1741.                         }
  1742.                     }
  1743.                 }
  1744.             }
  1745.         }
  1746.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchByIds($array, $start, $length, true,$columNameOrder, $dirOrder);
  1747.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->searchByIds($array, $start, $length, true,$columNameOrder, $dirOrder,true);
  1748.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->searchByIds($array, $start, $length, true,$columNameOrder, $dirOrder,true);
  1749.         $output = array(
  1750.             'data' => array(),
  1751.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1752.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1753.         );
  1754.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1755.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  1756.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  1757.         foreach ($projects as $project) {
  1758.             $statut3 =
  1759.                 $this->twig->render(
  1760.                     'admin/project/default/status3.html.twig', array(
  1761.                     'status' => $project->getStatusAdministratif()
  1762.                 ));
  1763.             $action = '<div class="btn-group"><input type="checkbox" class="selectProjectDocsExportation  ml-2" value="'.$project->getToken().'" name="selectProjectDocsExportation[]"></div>';
  1764.             $output['data'][] = [
  1765.                 'responsive_id' => '',
  1766.                 'id' => $project->getId(),
  1767.                 'capacite' => $this->espaceNumber($project->getCapacite()),
  1768.                 'name' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName())),
  1769.                 'spv' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getSpv() ? $project->getSpv()->getName() : '-')) ,
  1770.                 'developpeur' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getDeveloppeur() ? $project->getDeveloppeur()->getFirstname().' '.$project->getDeveloppeur()->getLastname() : '-')) ,
  1771.                 '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() : '-'))) ,
  1772.                 'createdAt' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getCreatedAt()?$project->getCreatedAt()->format('d/m/Y'):'-' )),
  1773.                 'statusAdministratif' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$statut3)) ,
  1774.                 'action' => $action ,
  1775.             ];
  1776.         }
  1777.         return $output;
  1778.     }
  1779.     public function docsListProject($request){
  1780.         $spvProject = $request->get('spvProject');
  1781.         $docsProject = $request->get('docsProject');
  1782.         $projectIds = $request->get('projectIds');
  1783.         $devProject = $request->get('devProject');
  1784.         $projects= $this->em->getRepository(\App\Entity\Project::class)->getProjectDocs($docsProject,$spvProject,$projectIds,$devProject);
  1785.         if($projects){
  1786.             $array = [];
  1787.             foreach ($projects as $project){
  1788.                 if($docsProject){
  1789.                     $zip = new \ZipArchive();
  1790.                     $zipfile = $this->params->get('zips_directory') . '/project-' . $project->getName() .'.zip';
  1791.                     if (file_exists($zipfile)) unlink($zipfile);
  1792.                     if ($zip->open($zipfile, \ZipArchive::CREATE) === TRUE) {
  1793.                         foreach ($docsProject as $docs){
  1794.                             $str = explode("__", $docs);
  1795.                             $etapNum = $str[0];
  1796.                             $fileName = $str[1];
  1797.                             $nameChampManyToMany = isset($str[2])?$str[2]:null;
  1798.                             $nameChampManyToMany2 = isset($str[3])?$str[3]:null;
  1799.                             $etapClass = 'App\\Entity\\Etap'.$etapNum;
  1800.                             $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  1801.                             if($etap){
  1802.                                 $classMetadata = $this->em->getClassMetadata($etapClass);
  1803.                                 if($nameChampManyToMany){
  1804.                                     $associationMappings = $classMetadata->getAssociationMapping($nameChampManyToMany);
  1805.                                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  1806.                                         $nameGeteurFiled = 'get'.ucfirst($nameChampManyToMany);
  1807.                                         $filedValue = $etap->{$nameGeteurFiled}();
  1808.                                         if(!$filedValue->isEmpty()){
  1809.                                             foreach ($filedValue as $item){
  1810.                                                 if($nameChampManyToMany2){
  1811.                                                     $nameGeteurFiledLevel2 = 'get'.ucfirst($nameChampManyToMany2);
  1812.                                                     $filedValueLevel2 = $item->{$nameGeteurFiledLevel2}();
  1813.                                                     if(!$filedValueLevel2->isEmpty()){
  1814.                                                         foreach ($filedValueLevel2 as $itemLevel2){
  1815.                                                             $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  1816.                                                             $filedValue2 = $itemLevel2->{$nameGeteurFiled2}();
  1817.                                                             if(!$filedValue2->isEmpty()) {
  1818.                                                                 foreach ($filedValue2 as $item2) {
  1819.                                                                     if (!$item2->getIsArchived()) {
  1820.                                                                         $fileNameInZip = $item2->getNomenclature() ? $item2->getNomenclature() : $item2->getPath();
  1821.                                                                         $filePath = $this->params->get('uploads_directory') . '/' . $item2->getPath();
  1822.                                                                         // éviter l'écrasement quand plusieurs items etap26Champs ont un fichier de même nom
  1823.                                                                         if($zip->locateName($fileNameInZip) !== false){
  1824.                                                                             $ext = pathinfo($fileNameInZip, PATHINFO_EXTENSION);
  1825.                                                                             $base = $ext ? substr($fileNameInZip, 0, -(strlen($ext)+1)) : $fileNameInZip;
  1826.                                                                             $suffix = 1;
  1827.                                                                             do {
  1828.                                                                                 $fileNameInZip = $base.'_'.$suffix.($ext ? '.'.$ext : '');
  1829.                                                                                 $suffix++;
  1830.                                                                             } while($zip->locateName($fileNameInZip) !== false);
  1831.                                                                         }
  1832.                                                                         $zip->addFile($filePath, $fileNameInZip);
  1833.                                                                     }
  1834.                                                                 }
  1835.                                                             }
  1836.                                                         }
  1837.                                                     }
  1838.                                                 }else{
  1839.                                                     $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  1840.                                                     $filedValue2 = $item->{$nameGeteurFiled2}();
  1841.                                                     if(!$filedValue2->isEmpty()) {
  1842.                                                         foreach ($filedValue2 as $item2) {
  1843.                                                             if ($item2->getIsArchived()) {
  1844.                                                             } else {
  1845.                                                                 $fileNameInZip = $item2->getNomenclature() ? $item2->getNomenclature() : $item2->getPath();
  1846.                                                                 $filePath = $this->params->get('uploads_directory') . '/' . $item2->getPath();
  1847.                                                                 $zip->addFile($filePath, $fileNameInZip);
  1848.                                                             }
  1849.                                                         }
  1850.                                                     }
  1851.                                                 }
  1852.                                             }
  1853.                                         }
  1854.                                     }
  1855.                                 }else{
  1856.                                     $associationMappings = $classMetadata->getAssociationMapping($fileName);
  1857.                                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  1858.                                         $nameGeteurFiled = 'get'.ucfirst($fileName);
  1859.                                         $filedValue = $etap->{$nameGeteurFiled}();
  1860.                                         if(!$filedValue->isEmpty()){
  1861.                                             foreach ($filedValue as $item){
  1862.                                                 if($item->getIsArchived()){
  1863.                                                     // condition is promesse de bail
  1864.                                                     if($fileName == 'filePromessebailMultiple'){
  1865.                                                         if($project->getFilePromessebail() and !$project->getFilePromessebail()->getIsArchived()){
  1866.                                                             $fileNameInZip =  $project->getFilePromessebail()->getNomenclature()? $project->getFilePromessebail()->getNomenclature(): $project->getFilePromessebail()->getPath();
  1867.                                                             $filePath = $this->params->get('uploads_directory').'/'.$project->getFilePromessebail()->getPath();
  1868.                                                             $zip->addFile($filePath,$fileNameInZip);
  1869.                                                         }
  1870.                                                     }
  1871.                                                 }else{
  1872.                                                     $fileNameInZip =  $item->getNomenclature()? $item->getNomenclature(): $item->getPath();
  1873.                                                     $filePath = $this->params->get('uploads_directory').'/'.$item->getPath();
  1874.                                                     $zip->addFile($filePath,$fileNameInZip);
  1875.                                                 }
  1876.                                             }
  1877.                                         }
  1878.                                     }else{
  1879.                                         $nameGeteurFiled = 'get'.ucfirst($fileName);
  1880.                                         $filedValue = $etap->{$nameGeteurFiled}();
  1881.                                         if($filedValue && !$filedValue->getIsArchived()){
  1882.                                             $fileNameInZip =  $filedValue->getNomenclature()? $filedValue->getNomenclature(): $filedValue->getPath();
  1883.                                             $filePath = $this->params->get('uploads_directory').'/'.$filedValue->getPath();
  1884.                                             $zip->addFile($filePath,$fileNameInZip);
  1885.                                         }
  1886.                                     }
  1887.                                 }
  1888.                             }
  1889.                         }
  1890.                         $zip->close();
  1891.                     }
  1892.                     $array[$project->getName()]['path'] = $zipfile;
  1893.                     $array[$project->getName()]['name'] =  $project->getName();
  1894.                 }
  1895.             }
  1896.             return $array ;
  1897.         }
  1898.         return 0 ;
  1899.     }
  1900.     public function docsListProjectAll($request){
  1901.         $search = $request->get('search');
  1902.         $spvProject = $request->get('spvProject');
  1903.         $devProject = $request->get('devProject');
  1904.         $docsProject = $request->get('docsProject');
  1905.         $responsableProject = $request->get('responsableProject');
  1906.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  1907.         $responsableDevProject = $request->get('responsableDevProject');
  1908.         $constructeurProject = $request->get('constructeurProject');
  1909.         $user = $this->security->getUser();
  1910.         $roles = $user->getRoles();
  1911.         $spvsTab = [];
  1912.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  1913.             $spvs = $user->getSpv();
  1914.             foreach($spvs as $item){
  1915.                 $spvsTab[] = $item->getId();
  1916.             }
  1917.         }
  1918.         $filters = [
  1919.             'query' => trim(@$search['value']),
  1920.             'devProject' => $devProject,
  1921.             'responsableProject' => $responsableProject,
  1922.             'responsableFoncierProject' => $responsableFoncierProject,
  1923.             'responsableDevProject' => $responsableDevProject,
  1924.             'constructeurProject' => $constructeurProject,
  1925.             'spvsTab' => $spvsTab,
  1926.             'user' => $user
  1927.         ];
  1928.         $projects = $this->em->getRepository(\App\Entity\Project::class)->searchByDocPreFilter($spvProject,$filters);
  1929.         if($projects){
  1930.             $array = [];
  1931.             foreach ($projects as $project){
  1932.                 if($docsProject){
  1933.                     $zip = new \ZipArchive();
  1934.                     $zipfile = $this->params->get('zips_directory') . '/project-' . $project->getName() .'.zip';
  1935.                     if (file_exists($zipfile)) unlink($zipfile);
  1936.                     if ($zip->open($zipfile, \ZipArchive::CREATE) === TRUE) {
  1937.                         foreach ($docsProject as $docs){
  1938.                             $str = explode("__", $docs);
  1939.                             $etapNum = $str[0];
  1940.                             $fileName = $str[1];
  1941.                             $nameChampManyToMany = isset($str[2])?$str[2]:null;
  1942.                             $nameChampManyToMany2 = isset($str[3])?$str[3]:null;
  1943.                             $etapClass = 'App\\Entity\\Etap'.$etapNum;
  1944.                             $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  1945.                             if($etap){
  1946.                                 $classMetadata = $this->em->getClassMetadata($etapClass);
  1947.                                 if($nameChampManyToMany){
  1948.                                     $associationMappings = $classMetadata->getAssociationMapping($nameChampManyToMany);
  1949.                                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  1950.                                         $nameGeteurFiled = 'get'.ucfirst($nameChampManyToMany);
  1951.                                         $filedValue = $etap->{$nameGeteurFiled}();
  1952.                                         if(!$filedValue->isEmpty()){
  1953.                                             foreach ($filedValue as $item){
  1954.                                                 if($nameChampManyToMany2){
  1955.                                                     $nameGeteurFiledLevel2 = 'get'.ucfirst($nameChampManyToMany2);
  1956.                                                     $filedValueLevel2 = $item->{$nameGeteurFiledLevel2}();
  1957.                                                     if(!$filedValueLevel2->isEmpty()){
  1958.                                                         foreach ($filedValueLevel2 as $itemLevel2){
  1959.                                                             $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  1960.                                                             $filedValue2 = $itemLevel2->{$nameGeteurFiled2}();
  1961.                                                             if(!$filedValue2->isEmpty()) {
  1962.                                                                 foreach ($filedValue2 as $item2) {
  1963.                                                                     if (!$item2->getIsArchived()) {
  1964.                                                                         $fileNameInZip = $item2->getNomenclature() ? $item2->getNomenclature() : $item2->getPath();
  1965.                                                                         $filePath = $this->params->get('uploads_directory') . '/' . $item2->getPath();
  1966.                                                                         // éviter l'écrasement quand plusieurs items etap26Champs ont un fichier de même nom
  1967.                                                                         if($zip->locateName($fileNameInZip) !== false){
  1968.                                                                             $ext = pathinfo($fileNameInZip, PATHINFO_EXTENSION);
  1969.                                                                             $base = $ext ? substr($fileNameInZip, 0, -(strlen($ext)+1)) : $fileNameInZip;
  1970.                                                                             $suffix = 1;
  1971.                                                                             do {
  1972.                                                                                 $fileNameInZip = $base.'_'.$suffix.($ext ? '.'.$ext : '');
  1973.                                                                                 $suffix++;
  1974.                                                                             } while($zip->locateName($fileNameInZip) !== false);
  1975.                                                                         }
  1976.                                                                         $zip->addFile($filePath, $fileNameInZip);
  1977.                                                                     }
  1978.                                                                 }
  1979.                                                             }
  1980.                                                         }
  1981.                                                     }
  1982.                                                 }else{
  1983.                                                     $nameGeteurFiled2 = 'get'.ucfirst($fileName);
  1984.                                                     $filedValue2 = $item->{$nameGeteurFiled2}();
  1985.                                                     if(!$filedValue2->isEmpty()) {
  1986.                                                         foreach ($filedValue2 as $item2) {
  1987.                                                             if ($item2->getIsArchived()) {
  1988.                                                             } else {
  1989.                                                                 $fileNameInZip = $item2->getNomenclature() ? $item2->getNomenclature() : $item2->getPath();
  1990.                                                                 $filePath = $this->params->get('uploads_directory') . '/' . $item2->getPath();
  1991.                                                                 $zip->addFile($filePath, $fileNameInZip);
  1992.                                                             }
  1993.                                                         }
  1994.                                                     }
  1995.                                                 }
  1996.                                             }
  1997.                                         }
  1998.                                     }
  1999.                                 }else{
  2000.                                     $associationMappings = $classMetadata->getAssociationMapping($fileName);
  2001.                                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  2002.                                         $nameGeteurFiled = 'get'.ucfirst($fileName);
  2003.                                         $filedValue = $etap->{$nameGeteurFiled}();
  2004.                                         if(!$filedValue->isEmpty()){
  2005.                                             foreach ($filedValue as $item){
  2006.                                                 if($item->getIsArchived()){
  2007.                                                     // condition is promesse de bail
  2008.                                                     if($fileName == 'filePromessebailMultiple'){
  2009.                                                         if($project->getFilePromessebail() and !$project->getFilePromessebail()->getIsArchived()){
  2010.                                                             $fileNameInZip =  $project->getFilePromessebail()->getNomenclature()? $project->getFilePromessebail()->getNomenclature(): $project->getFilePromessebail()->getPath();
  2011.                                                             $filePath = $this->params->get('uploads_directory').'/'.$project->getFilePromessebail()->getPath();
  2012.                                                             $zip->addFile($filePath,$fileNameInZip);
  2013.                                                         }
  2014.                                                     }
  2015.                                                 }else{
  2016.                                                     $fileNameInZip =  $item->getNomenclature()? $item->getNomenclature(): $item->getPath();
  2017.                                                     $filePath = $this->params->get('uploads_directory').'/'.$item->getPath();
  2018.                                                     $zip->addFile($filePath,$fileNameInZip);
  2019.                                                 }
  2020.                                             }
  2021.                                         }
  2022.                                     }else{
  2023.                                         $nameGeteurFiled = 'get'.ucfirst($fileName);
  2024.                                         $filedValue = $etap->{$nameGeteurFiled}();
  2025.                                         if($filedValue && !$filedValue->getIsArchived()){
  2026.                                             $fileNameInZip =  $filedValue->getNomenclature()? $filedValue->getNomenclature(): $filedValue->getPath();
  2027.                                             $filePath = $this->params->get('uploads_directory').'/'.$filedValue->getPath();
  2028.                                             $zip->addFile($filePath,$fileNameInZip);
  2029.                                         }
  2030.                                     }
  2031.                                 }
  2032.                             }
  2033.                         }
  2034.                         $zip->close();
  2035.                     }
  2036.                     $array[$project->getName()]['path'] = $zipfile;
  2037.                     $array[$project->getName()]['name'] =  $project->getName();
  2038.                 }
  2039.             }
  2040.             return $array ;
  2041.         }
  2042.         return 0 ;
  2043.     }
  2044.     public function addDocsInEtaps($array){
  2045.         if($array){
  2046.             foreach ($array as $item){
  2047.                 $tokenProject = $item['tokenproject'];
  2048.                 $tokenFile = $item['tokenFile'];
  2049.                 $etapData = $item['etapData'];
  2050.                 $isProjectFile = $item['isProjectFile'];
  2051.                 $etapsFilesManyToManyName = isset($item['etapsFilesManyToManyName'])?$item['etapsFilesManyToManyName']:0;
  2052.                 if($etapData){
  2053.                     if($isProjectFile == 1){
  2054.                         $project = $this->em->getRepository(Project::class)->findOneBy(['token' => $tokenProject]);
  2055.                         $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  2056.                         if ($project && $docUpload) {
  2057.                             $etapClass = 'App\\Entity\\Project';
  2058.                             $classMetadata = $this->em->getClassMetadata($etapClass);
  2059.                             $associationMappings = $classMetadata->getAssociationMapping($etapData);
  2060.                             if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
  2061.                                 $nameGeteurFiled = 'add' . ucfirst($etapData);
  2062.                                 $project->{$nameGeteurFiled}($docUpload);
  2063.                             } else {
  2064.                                 $nameGeteurFiled = 'set' . ucfirst($etapData);
  2065.                                 $project->{$nameGeteurFiled}($docUpload);
  2066.                             }
  2067.                             $this->em->persist($project);
  2068.                             $this->em->flush();
  2069.                             $this->etapsService->updateStatusTracker($project); // set status tracker
  2070.                         }
  2071.                     }else {
  2072.                         $str = explode("__", $etapData);
  2073.                         if (isset($str[1])) {
  2074.                             $project = $this->em->getRepository(Project::class)->findOneBy(['token' => $tokenProject]);
  2075.                             $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  2076.                             if ($project && $docUpload) {
  2077.                                 $etapNum = $str[0];
  2078.                                 $fileName = $str[1];
  2079.                                 $fileNameStr = $str[2];
  2080.                                 $etapClass = 'App\\Entity\\Etap' . $etapNum;
  2081.                                 $etap = $this->em->getRepository($etapClass)->findOneBy(['project' => $project->getId()]);
  2082.                                 if ($etap) {
  2083.                                     if(is_string($etapsFilesManyToManyName)){
  2084.                                         $etapsFilesManyToManyName = ucfirst($etapsFilesManyToManyName);
  2085.                                         $getEntityManyToMany = 'get'.$etapsFilesManyToManyName;
  2086.                                         if(count($etap->{$getEntityManyToMany}()) > 0 ){
  2087.                                             $valManyToMany = $etap->{$getEntityManyToMany}()[0];
  2088.                                         }else{
  2089.                                             $classNew = "App\\Entity\\$etapsFilesManyToManyName";
  2090.                                             $valManyToMany = new $classNew();
  2091.                                         }
  2092.                                         $classMetadata = $this->em->getClassMetadata("App\\Entity\\$etapsFilesManyToManyName");
  2093.                                         $associationMappings = $classMetadata->getAssociationMapping($fileName);
  2094.                                         if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
  2095.                                             $nameGeteurFiled = 'add' . ucfirst($fileName);
  2096.                                         } else {
  2097.                                             $nameGeteurFiled = 'set' . ucfirst($fileName);
  2098.                                         }
  2099.                                         $valManyToMany->{$nameGeteurFiled}($docUpload);
  2100.                                         $nameGeteurFiledClass = 'add' . ucfirst($etapsFilesManyToManyName);
  2101.                                         $etap->{$nameGeteurFiledClass}($valManyToMany);
  2102.                                         $this->em->persist($etap);
  2103.                                         $this->em->flush();
  2104.                                         $this->etapsService->getNomenclature($etap, $docUpload, $fileNameStr);
  2105.                                     }else{
  2106.                                         $classMetadata = $this->em->getClassMetadata($etapClass);
  2107.                                         $associationMappings = $classMetadata->getAssociationMapping($fileName);
  2108.                                         if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
  2109.                                             if($fileName == 'fileDiagnostiqueCharpente159Multiple'){
  2110.                                                 $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  2111.                                                 $etap160->addFileDiagnostiqueCharpenteMultiple($docUpload);
  2112.                                                 $this->em->persist($etap160);
  2113.                                                 $this->em->flush();
  2114.                                             }elseif ($fileName == 'fileDiagnostiqueCharpenteMultiple'){
  2115.                                                 $etap159 = $this->em->getRepository(Etap159::class)->findOneBy(['project'=>$project->getId()]);
  2116.                                                 $etap159->addFileDiagnostiqueCharpente159Multiple($docUpload);
  2117.                                                 $this->em->persist($etap159);
  2118.                                                 $this->em->flush();
  2119.                                             }
  2120.                                             $nameGeteurFiled = 'add' . ucfirst($fileName);
  2121.                                             $etap->{$nameGeteurFiled}($docUpload);
  2122.                                         } else {
  2123.                                             $nameGeteurFiled = 'set' . ucfirst($fileName);
  2124.                                             $etap->{$nameGeteurFiled}($docUpload);
  2125.                                         }
  2126.                                         if ($etap->getStatus() == Etaps::STATUS_FERMEE) {
  2127.                                             $etap->setStatus(Etaps::STATUS_EN_COURS);
  2128.                                         }
  2129.                                         $this->em->persist($etap);
  2130.                                         $this->em->flush();
  2131.                                         $this->etapsService->getNomenclature($etap, $docUpload, $fileNameStr);
  2132.                                     }
  2133.                                 }
  2134.                                 $this->etapsService->updateStatusTracker($project); // set status tracker
  2135.                             }
  2136.                         }
  2137.                     }
  2138.                 }
  2139.             }
  2140.         }
  2141.     }
  2142.     public function addPhotoInEtaps($array){
  2143.         if($array){
  2144.             foreach ($array as $item){
  2145.                 $tokenProject = $item['tokenproject'];
  2146.                 $tokenFile = $item['tokenFile'];
  2147.                 $tokenEtap = $item['tokenEtap'];
  2148.                 $numEtap = $item['numEtap'];
  2149.                 if($tokenEtap  && $tokenProject){
  2150.                     $etapClass = 'App\\Entity\\Etap' . $numEtap;
  2151.                     $etap = $this->em->getRepository($etapClass)->findOneBy(['token'=>$tokenEtap]);
  2152.                     $project = $this->em->getRepository(Project::class)->findOneBy(['token' => $tokenProject]);
  2153.                     $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  2154.                     if($etap){
  2155.                         $etap->addFilePhotosMultiple($docUpload);
  2156.                         $this->em->persist($etap);
  2157.                     }
  2158.                 }
  2159.             }
  2160.             $this->em->flush();
  2161.         }
  2162.     }
  2163.     public function getDocsName($project = null){
  2164.         $array = [];
  2165.         $array[1]['name_category'] = 'Urbanisme';
  2166.         $array[2]['name_category'] = 'Foncier';
  2167.         $array[3]['name_category'] = 'Raccordement';
  2168.         $array[4]['name_category'] = 'Construction';
  2169.         $array[5]['name_category'] = 'Valorisation';
  2170.         $etapsCat1 = [];
  2171.         $etapsCat1[1]['etapNum'] = '0';
  2172.         $etapsCat1[1]['name'] = 'Préparation dossier PC';
  2173.         $etapsCat1Files = [];
  2174.         $etapsCat1Files[1]['nameFile'] = 'Infos pour archi';
  2175.         $etapsCat1Files[1]['nameFileDB'] = 'fileInfoArchiMultiple';
  2176.         $etapsCat1Files[2]['nameFile'] = 'MSA Attestation';
  2177.         $etapsCat1Files[2]['nameFileDB'] = 'fileMsaAttestationMultiple';
  2178.         $etapsCat1Files[3]['nameFile'] = 'MSA Relevé d’exploitation';
  2179.         $etapsCat1Files[3]['nameFileDB'] = 'fileMsaReleveExploitationMultiple';
  2180.         $etapsCat1Files[4]['nameFile'] = 'Fiche de besoins agricoles';
  2181.         $etapsCat1Files[4]['nameFileDB'] = 'fileFicheBesoinAgricoleMultiple';
  2182.         $etapsCat1Files[5]['nameFile'] = 'Lettre de motivation';
  2183.         $etapsCat1Files[5]['nameFileDB'] = 'fileLettreMotivationMultiple';
  2184.         $etapsCat1Files[6]['nameFile'] = 'ICPE';
  2185.         $etapsCat1Files[6]['nameFileDB'] = 'fileICPEMultiple';
  2186.         $etapsCat1Files[7]['nameFile'] = 'Règlement d’urbanisme';
  2187.         $etapsCat1Files[7]['nameFileDB'] = 'fileReglementUrbanismeMultiple';
  2188.         $etapsCat1Files[8]['nameFile'] = 'Autre (CDPENAF, Natura 2000…)';
  2189.         $etapsCat1Files[8]['nameFileDB'] = 'fileAutreEtap0Multiple';
  2190.         $etapsCat1[1]['etapsFiles'] = $etapsCat1Files;
  2191.         $etapsCat1[2]['etapNum'] = '1';
  2192.         $etapsCat1[2]['name'] = 'Dossier PC/DP et Arrêté PC/DP';
  2193.         $etapsCat1Files = [];
  2194.         $etapsCat1Files[1]['nameFile'] = 'Dossier PC/DP';
  2195.         $etapsCat1Files[1]['nameFileDB'] = 'fileDossierPcDpMultiple';
  2196.         $etapsCat1Files[2]['nameFile'] = 'arrêté PC/DP';
  2197.         $etapsCat1Files[2]['nameFileDB'] = 'fileArretePcDpMultiple';
  2198.         $etapsCat1Files[3]['nameFile'] = 'Récépissé dépôt PC';
  2199.         $etapsCat1Files[3]['nameFileDB'] = 'fileRecepisseDepotPcMultiple';
  2200.         $etapsCat1Files[4]['nameFile'] = 'Demande compléments pc';
  2201.         $etapsCat1Files[4]['nameFileDB'] = 'fileDemandeComplementPcMultiple';
  2202.         $etapsCat1Files[5]['nameFile'] = 'Récépissé compléments pc';
  2203.         $etapsCat1Files[5]['nameFileDB'] = 'fileRecepisseComplementPcMultiple';
  2204.         $etapsCat1Files[6]['nameFile'] = 'Autre (prolongation délai d’instruction)';
  2205.         $etapsCat1Files[6]['nameFileDB'] = 'fileAutreDocPcMultiple';
  2206.         $etapsCat1Files[7]['nameFile'] = 'Certificat de non-opposition';
  2207.         $etapsCat1Files[7]['nameFileDB'] = 'fileCertificatNonOppositionEtap1Multiple';
  2208.         $etapsCat1[2]['etapsFiles'] = $etapsCat1Files;
  2209.         $etapsCat1[2]['class'] = 'Etap1Pcm';
  2210.         $etapsCat1[2]['etapsFilesManyToManyName'] = 'etap1Pcm';
  2211.         $etapsCat1FilesManyToMany = [];
  2212.         $etapsCat1FilesManyToMany[1]['nameFile'] = 'Dossier PCM';
  2213.         $etapsCat1FilesManyToMany[1]['nameFileDB'] = 'fileDossierPcmpMultiple';
  2214.         $etapsCat1FilesManyToMany[2]['nameFile'] = 'Arrêté PCM';
  2215.         $etapsCat1FilesManyToMany[2]['nameFileDB'] = 'fileArretePcmMultiple';
  2216.         $etapsCat1FilesManyToMany[3]['nameFile'] = 'Récépissé dépôt PCM';
  2217.         $etapsCat1FilesManyToMany[3]['nameFileDB'] = 'fileRecepisseDepotPcmMultiple';
  2218.         $etapsCat1FilesManyToMany[4]['nameFile'] = 'Demande compléments PCM';
  2219.         $etapsCat1FilesManyToMany[4]['nameFileDB'] = 'fileDemandeComplementPcmMultiple';
  2220.         $etapsCat1FilesManyToMany[5]['nameFile'] = 'Récépissé compléments PCM';
  2221.         $etapsCat1FilesManyToMany[5]['nameFileDB'] = 'fileRecepisseComplementPcmMultiple';
  2222.         $etapsCat1FilesManyToMany[6]['nameFile'] = 'Autre (prolongation délai d’instruction) PCM';
  2223.         $etapsCat1FilesManyToMany[6]['nameFileDB'] = 'fileAutreDocPcmMultiple';
  2224.         $etapsCat1[2]['etapsFilesManyToMany'] = $etapsCat1FilesManyToMany;
  2225.         $etapsCat1[3]['etapNum'] = '2';
  2226.         $etapsCat1[3]['name'] = 'PC/DP purgé';
  2227.         $etapsCat1Files = [];
  2228.         $etapsCat1Files[1]['nameFile'] = 'PV passage huissier';
  2229.         $etapsCat1Files[1]['nameFileDB'] = 'filePVPassageHuissierMultiple';
  2230.         $etapsCat1Files[2]['nameFile'] = 'Certificat de non-recours (Tribunal Administratif)';
  2231.         $etapsCat1Files[2]['nameFileDB'] = 'fileCertificatNonRecoursMultiple';
  2232.         $etapsCat1Files[3]['nameFile'] = 'Certificat de non-retrait (Mairie)';
  2233.         $etapsCat1Files[3]['nameFileDB'] = 'fileCertificatNonRetraitMultiple';
  2234.         $etapsCat1Files[4]['nameFile'] = 'Demande d’ANR Mairie';
  2235.         $etapsCat1Files[4]['nameFileDB'] = 'fileDemandeAnrMarieMultiple';
  2236.         $etapsCat1Files[5]['nameFile'] = 'Demande d’ANR TA';
  2237.         $etapsCat1Files[5]['nameFileDB'] = 'fileDemandeAnrTaMultiple';
  2238.         $etapsCat1Files[6]['nameFile'] = 'Attestation sur l’honneur ANR Mairie / TA';
  2239.         $etapsCat1Files[6]['nameFileDB'] = 'fileAttestationHonneurAnrMairieTaMultiple';
  2240.         $etapsCat1[3]['etapsFiles'] = $etapsCat1Files;
  2241.         $etapsCat1[3]['class'] = 'Etap2Pcm';
  2242.         $etapsCat1[3]['etapsFilesManyToManyName'] = 'etap2Pcm';
  2243.         $etapsCat1FilesManyToMany = [];
  2244.         $etapsCat1FilesManyToMany[1]['nameFile'] = 'PV passage huissier Pcm ';
  2245.         $etapsCat1FilesManyToMany[1]['nameFileDB'] = 'filePVPassageHuissierPcmMultiple';
  2246.         $etapsCat1FilesManyToMany[2]['nameFile'] = 'Certificat de non-recours (Tribunal Administratif) Pcm ';
  2247.         $etapsCat1FilesManyToMany[2]['nameFileDB'] = 'fileCertificatNonRecoursPcmMultiple';
  2248.         $etapsCat1FilesManyToMany[3]['nameFile'] = 'Certificat de non-retrait (Mairie) Pcm ';
  2249.         $etapsCat1FilesManyToMany[3]['nameFileDB'] = 'fileCertificatNonRetraitPcmMultiple';
  2250.         $etapsCat1FilesManyToMany[4]['nameFile'] = 'Demande d’ANR Mairie Pcm ';
  2251.         $etapsCat1FilesManyToMany[4]['nameFileDB'] = 'fileDemandeAnrMariePcmMultiple';
  2252.         $etapsCat1FilesManyToMany[5]['nameFile'] = 'Demande d’ANR TA Pcm ';
  2253.         $etapsCat1FilesManyToMany[5]['nameFileDB'] = 'fileDemandeAnrTaPcmMultiple';
  2254.         $etapsCat1FilesManyToMany[6]['nameFile'] = 'Attestation sur l’honneur ANR Mairie / TA Pcm ';
  2255.         $etapsCat1FilesManyToMany[6]['nameFileDB'] = 'fileAttestationHonneurAnrMairieTaPcmMultiple';
  2256.         $etapsCat1[3]['etapsFilesManyToMany'] = $etapsCat1FilesManyToMany;
  2257.         $etapsCat1[4]['etapNum'] = '3';
  2258.         $etapsCat1[4]['name'] = 'DOC / DROC';
  2259.         $etapsCat1Files = [];
  2260.         $etapsCat1Files[1]['nameFile'] = 'DOC | DROC';
  2261.         $etapsCat1Files[1]['nameFileDB'] = 'fileDocDrocMultiple';
  2262.         $etapsCat1[4]['etapsFiles'] = $etapsCat1Files;
  2263.         $etapsCat1[5]['etapNum'] = '4';
  2264.         $etapsCat1[5]['name'] = 'DAACT';
  2265.         $etapsCat1Files = [];
  2266.         $etapsCat1Files[1]['nameFile'] = 'DAACT';
  2267.         $etapsCat1Files[1]['nameFileDB'] = 'fileDaactMultiple';
  2268.         $etapsCat1[5]['etapsFiles'] = $etapsCat1Files;
  2269.         $array[1]['etaps'] = $etapsCat1;
  2270.         $etapsCat2 = [];
  2271.         $etapsCat2[1]['etapNum'] = '5';
  2272.         $etapsCat2[1]['name'] = 'Promesse de bail';
  2273.         $etapsCat2Files = [];
  2274.         $etapsCat2Files[1]['nameFile'] = 'Promesse de bail';
  2275.         $etapsCat2Files[1]['nameFileDB'] = 'filePromessebailMultiple';
  2276.         $etapsCat2Files[2]['nameFile'] = 'Levée d’option';
  2277.         $etapsCat2Files[2]['nameFileDB'] = 'fileLeveeOptionMultiple';
  2278.         $etapsCat2Files[3]['nameFile'] = 'Acte de substitution';
  2279.         $etapsCat2Files[3]['nameFileDB'] = 'fileActeSubstitutionMultiple';
  2280.         $etapsCat2Files[4]['nameFile'] = 'LOI';
  2281.         $etapsCat2Files[4]['nameFileDB'] = 'fileLoiMultiple';
  2282.         $etapsCat2Files[5]['nameFile'] = 'Promesse d\'achat';
  2283.         $etapsCat2Files[5]['nameFileDB'] = 'filePromesseAchatMultiple';
  2284.         $etapsCat2[1]['etapsFiles'] = $etapsCat2Files;
  2285.         $etapsCat2[2]['etapNum'] = '6';
  2286.         $etapsCat2[2]['name'] = 'Documents pour annexes de bail';
  2287.         $etapsCat2Files = [];
  2288.         $etapsCat2Files[2]['nameFile'] = 'Etat hypothécaire';
  2289.         $etapsCat2Files[2]['nameFileDB'] = 'fileEtatHypothecaireMultiple';
  2290.         $etapsCat2Files[4]['nameFile'] = 'Titre de propriété';
  2291.         $etapsCat2Files[4]['nameFileDB'] = 'fileTitreProprieteMultiple';
  2292.         $etapsCat2Files[5]['nameFile'] = 'Autres (Cession de bail, projet de bail…) ';
  2293.         $etapsCat2Files[5]['nameFileDB'] = 'fileAutreEtap6';
  2294.         $etapsCat2Files[6]['nameFile'] = 'Statuts';
  2295.         $etapsCat2Files[6]['nameFileDB'] = 'fileStatuts';
  2296.         $etapsCat2Files[7]['nameFile'] = 'Kbis';
  2297.         $etapsCat2Files[7]['nameFileDB'] = 'fileKbis';
  2298.         $etapsCat2Files[8]['nameFile'] = 'Accord ML ';
  2299.         $etapsCat2Files[8]['nameFileDB'] = 'fileAccordMl';
  2300.         $etapsCat2Files[9]['nameFile'] = 'Livret de famille ';
  2301.         $etapsCat2Files[9]['nameFileDB'] = 'fileLivretFamille';
  2302.         $etapsCat2Files[10]['nameFile'] = 'Carte d’identité ';
  2303.         $etapsCat2Files[10]['nameFileDB'] = 'fileCarteIdentite';
  2304.         $etapsCat2Files[11]['nameFile'] = 'Extrait de matrice cadastrale ';
  2305.         $etapsCat2Files[11]['nameFileDB'] = 'fileExtraitMatriceCadastrale';
  2306.         $etapsCat2[2]['etapsFiles'] = $etapsCat2Files;
  2307.         $etapsCat2[3]['etapNum'] = '7';
  2308.         $etapsCat2[3]['name'] = 'Bail signé';
  2309.         $etapsCat2Files = [];
  2310.         $etapsCat2Files[1]['nameFile'] = 'Bail signé (avec l’ensemble des annexes)';
  2311.         $etapsCat2Files[1]['nameFileDB'] = 'fileBailSigneMultiple';
  2312.         $etapsCat2Files[2]['nameFile'] = 'Avenant au Bail';
  2313.         $etapsCat2Files[2]['nameFileDB'] = 'fileAvenantBailMultiple';
  2314.         $etapsCat2Files[3]['nameFile'] = 'Preuve de publications SPF';
  2315.         $etapsCat2Files[3]['nameFileDB'] = 'filePreuvePublicationsSPFMultiple';
  2316.         $etapsCat2[3]['etapsFiles'] = $etapsCat2Files;
  2317.         $etapsCat2[4]['etapNum'] = '601';
  2318.         $etapsCat2[4]['name'] = 'Géomètre ';
  2319.         $etapsCat2Files = [];
  2320.         $etapsCat2Files[1]['nameFile'] = 'DA / EDDV';
  2321.         $etapsCat2Files[1]['nameFileDB'] = 'fileEtatDecriptifMultiple';
  2322.         $etapsCat2Files[2]['nameFile'] = 'Plan de servitudes';
  2323.         $etapsCat2Files[2]['nameFileDB'] = 'filePlanServitudesMultiple';
  2324.         $etapsCat2[4]['etapsFiles'] = $etapsCat2Files;
  2325.         $etapsCat2[5]['etapNum'] = '602';
  2326.         $etapsCat2[5]['name'] = 'Avancement du bail ';
  2327.         $etapsCat2Files = [];
  2328.         $etapsCat2Files[1]['nameFile'] = 'Procuration Bailleur';
  2329.         $etapsCat2Files[1]['nameFileDB'] = 'fileProcurationBailleur';
  2330.         $etapsCat2[5]['etapsFiles'] = $etapsCat2Files;
  2331.         $array[2]['etaps'] = $etapsCat2;
  2332.         $etapsCat3 = [];
  2333.         $etapsCat3[0]['etapNum'] = '80';
  2334.         $etapsCat3[0]['name'] = 'Faisabilité du raccordement';
  2335.         $etapsCat3Files = [];
  2336.         $etapsCat3Files[1]['nameFile'] = 'IPR';
  2337.         $etapsCat3Files[1]['nameFileDB'] = 'fileIPR';
  2338.         $etapsCat3Files[2]['nameFile'] = 'PRAC';
  2339.         $etapsCat3Files[2]['nameFileDB'] = 'filePRAC';
  2340.         $etapsCat3[0]['etapsFiles'] = $etapsCat3Files;
  2341.         $etapsCat3[1]['etapNum'] = '8';
  2342.         $etapsCat3[1]['name'] = 'Création Etablissement secondaire';
  2343.         $etapsCat3Files = [];
  2344.         $etapsCat3Files[1]['nameFile'] = 'Kbis de l’ETS';
  2345.         $etapsCat3Files[1]['nameFileDB'] = 'fileKbisEtsMultiple';
  2346.         $etapsCat3[1]['etapsFiles'] = $etapsCat3Files;
  2347.         $etapsCat3[2]['etapNum'] = '9';
  2348.         $etapsCat3[2]['name'] = 'Date T0';
  2349.         $etapsCat3Files = [];
  2350.         $etapsCat3Files[1]['nameFile'] = 'Mail d’ENEDIS de confirmation';
  2351.         $etapsCat3Files[1]['nameFileDB'] = 'fileMailEnedisConfirmationMultiple';
  2352.         $etapsCat3Files[2]['nameFile'] = 'Demande de raccordement';
  2353.         $etapsCat3Files[2]['nameFileDB'] = 'fileDemandeRaccordementMultiple';
  2354. //        $etapsCat3Files[3]['nameFile'] = 'Garantie bancaire';
  2355. //        $etapsCat3Files[3]['nameFileDB'] = 'fileGarantieBancaireMultiple';
  2356.         $etapsCat3[2]['etapsFiles'] = $etapsCat3Files;
  2357.         $etapsCat3[3]['etapNum'] = '10';
  2358.         $etapsCat3[3]['name'] = 'PTF / CRD';
  2359.         $etapsCat3Files = [];
  2360.         $etapsCat3Files[1]['nameFile'] = 'PTF';
  2361.         $etapsCat3Files[1]['nameFileDB'] = 'filePtfMultiple';
  2362.         $etapsCat3Files[2]['nameFile'] = 'CRD signée';
  2363.         $etapsCat3Files[2]['nameFileDB'] = 'fileCrdSigneeMultiple';
  2364.         $etapsCat3Files[3]['nameFile'] = 'Preuve de virement';
  2365.         $etapsCat3Files[3]['nameFileDB'] = 'filePreuveVirementMultiple';
  2366.         $etapsCat3Files[4]['nameFile'] = 'Avenant CRD';
  2367.         $etapsCat3Files[4]['nameFileDB'] = 'fileAvenantCrdMultiple';
  2368.         $etapsCat3Files[5]['nameFile'] = 'Avenant CRD pour MES ';
  2369.         $etapsCat3Files[5]['nameFileDB'] = 'fileAvenantCrdMesMultiple';
  2370. //        $etapsCat3Files[4]['nameFile'] = 'CRD signée';
  2371. //        $etapsCat3Files[4]['nameFileDB'] = 'fileCrdSigneeSansPtfMultiple';
  2372. //        $etapsCat3Files[5]['nameFile'] = 'Preuve de virement';
  2373. //        $etapsCat3Files[5]['nameFileDB'] = 'filePreuveVirementSansPtfMultiple';
  2374.         $etapsCat3[3]['etapsFiles'] = $etapsCat3Files;
  2375.         $etapsCat3[4]['etapNum'] = '12';
  2376.         $etapsCat3[4]['name'] = 'CEX + CARDi';
  2377.         $etapsCat3Files = [];
  2378.         $etapsCat3Files[1]['nameFile'] = 'CEX signé';
  2379.         $etapsCat3Files[1]['nameFileDB'] = 'fileCexSigneMultiple';
  2380.         $etapsCat3Files[2]['nameFile'] = 'CARDi signé';
  2381.         $etapsCat3Files[2]['nameFileDB'] = 'fileCardiSigneMultiple';
  2382.         $etapsCat3Files[3]['nameFile'] = 'Avenant CARDi';
  2383.         $etapsCat3Files[3]['nameFileDB'] = 'fileAvenantCardiMultiple';
  2384.         $etapsCat3[4]['etapsFiles'] = $etapsCat3Files;
  2385.         $etapsCat3[5]['etapNum'] = '13';
  2386.         $etapsCat3[5]['name'] = 'Consuel';
  2387.         $etapsCat3Files = [];
  2388.         $etapsCat3Files[1]['nameFile'] = 'Consuel';
  2389.         $etapsCat3Files[1]['nameFileDB'] = 'fileConsuelMultiple';
  2390.         $etapsCat3Files[2]['nameFile'] = 'Attestation bureau de contrôle S21';
  2391.         $etapsCat3Files[2]['nameFileDB'] = 'fileAttestationBureauControleMultiple';
  2392.         $etapsCat3Files[3]['nameFile'] = 'DRE';
  2393.         $etapsCat3Files[3]['nameFileDB'] = 'fileDREMultiple';
  2394.         $etapsCat3[5]['etapsFiles'] = $etapsCat3Files;
  2395.         $etapsCat3[6]['etapNum'] = '14';
  2396.         $etapsCat3[6]['name'] = 'Mise en service';
  2397.         $etapsCat3Files = [];
  2398.         $etapsCat3Files[1]['nameFile'] = 'Attestation de mise en service';
  2399.         $etapsCat3Files[1]['nameFileDB'] = 'fileDoeMultiple';
  2400.         $etapsCat3Files[2]['nameFile'] = 'ARPE';
  2401.         $etapsCat3Files[2]['nameFileDB'] = 'fileARPE';
  2402.         $etapsCat3Files[3]['nameFile'] = 'DEIE';
  2403.         $etapsCat3Files[3]['nameFileDB'] = 'fileDEIE';
  2404.         $etapsCat3Files[4]['nameFile'] = 'Attestation S21 (attestation de conformité)';
  2405.         $etapsCat3Files[4]['nameFileDB'] = 'fileAttestationS21Multiple';
  2406.         $etapsCat3[6]['etapsFiles'] = $etapsCat3Files;
  2407. //        $etapsCat3[7]['etapNum'] = '15';
  2408. //        $etapsCat3[7]['name'] = 'Contrat d’achat';
  2409. //        $etapsCat3Files = [];
  2410. //        $etapsCat3Files[1]['nameFile'] = 'Contrat d’achat signé';
  2411. //        $etapsCat3Files[1]['nameFileDB'] = 'fileContratAchatSigneMultiple';
  2412. //        $etapsCat3Files[2]['nameFile'] = 'Attestation de producteur';
  2413. //        $etapsCat3Files[2]['nameFileDB'] = 'fileAttestionProducteurMultiple';
  2414. //        $etapsCat3Files[3]['nameFile'] = 'Attestation de l’installateur';
  2415. //        $etapsCat3Files[3]['nameFileDB'] = 'fileAttestionInstallateurMultiple';
  2416. //        $etapsCat3Files[4]['nameFile'] = 'AR Contrat d’achat';
  2417. //        $etapsCat3Files[4]['nameFileDB'] = 'fileArContratAchatMultiple';
  2418. //        $etapsCat3[7]['etapsFiles'] = $etapsCat3Files;
  2419.         $etapsCat3[8]['etapNum'] = '121';
  2420.         $etapsCat3[8]['name'] = 'Installation PDL';
  2421.         $etapsCat3Files = [];
  2422.         $etapsCat3Files[1]['nameFile'] = 'Installation PDL';
  2423.         $etapsCat3Files[1]['nameFileDB'] = 'fileDocument121Multiple';
  2424.         $etapsCat3[8]['etapsFiles'] = $etapsCat3Files;
  2425.         $array[3]['etaps'] = $etapsCat3;
  2426.         $etapsCat4[0]['etapNum'] = '159';
  2427.         $etapsCat4[0]['name'] = 'Dossier de Consultation';
  2428.         $etapsCat4Files = [];
  2429.         $etapsCat4Files[1]['nameFile'] = 'Visite technique';
  2430.         $etapsCat4Files[1]['nameFileDB'] = 'fileVisiteTechnique159Multiple';
  2431.         $etapsCat4Files[2]['nameFile'] = 'Etude de productible';
  2432.         $etapsCat4Files[2]['nameFileDB'] = 'fileEtudeProductible159Multiple';
  2433.         $etapsCat4Files[3]['nameFile'] = 'Etude de sol';
  2434.         $etapsCat4Files[3]['nameFileDB'] = 'fileGeotechnique159Multiple';
  2435.         $etapsCat4Files[4]['nameFile'] = 'Diagnostic charpente';
  2436.         $etapsCat4Files[4]['nameFileDB'] = 'fileDiagnostiqueCharpente159Multiple';
  2437.         $etapsCat4Files[5]['nameFile'] = 'Design pré-CRD';
  2438.         $etapsCat4Files[5]['nameFileDB'] = 'fileDesignPreCRD159Multiple';
  2439.         $etapsCat4Files[6]['nameFile'] = 'Design post-CRD';
  2440.         $etapsCat4Files[6]['nameFileDB'] = 'fileDesignPostCRD159Multiple';
  2441.         $etapsCat4Files[7]['nameFile'] = 'Plan de masse et de situation avec tranchée';
  2442.         $etapsCat4Files[7]['nameFileDB'] = 'filePlanMasseSituationTranchee159Multiple';
  2443.         $etapsCat4Files[8]['nameFile'] = 'Plan de calepinage';
  2444.         $etapsCat4Files[8]['nameFileDB'] = 'filePlanCalepinage159Multiple';
  2445.         $etapsCat4Files[9]['nameFile'] = 'Schéma unifilaire';
  2446.         $etapsCat4Files[9]['nameFileDB'] = 'fileSchemaUnifilaire159Multiple';
  2447.         $etapsCat4Files[10]['nameFile'] = 'Plans Autocad';
  2448.         $etapsCat4Files[10]['nameFileDB'] = 'filePlansAutocadMultiple';
  2449.         $etapsCat4Files[10]['nameFile'] = 'Plans dwg';
  2450.         $etapsCat4Files[10]['nameFileDB'] = 'filePlansDwgMultiple';
  2451.         $etapsCat4[0]['etapsFiles'] = $etapsCat4Files;
  2452.         $etapsCat4[1]['etapNum'] = '160';
  2453.         $etapsCat4[1]['name'] = 'Informations Techniques';
  2454.         $etapsCat4Files = [];
  2455.         $etapsCat4Files[1]['nameFile'] = 'Diagnostic charpente';
  2456.         $etapsCat4Files[1]['nameFileDB'] = 'fileDiagnostiqueCharpenteMultiple';
  2457.         $etapsCat4Files[2]['nameFile'] = 'Étude de sol';
  2458.         $etapsCat4Files[2]['nameFileDB'] = 'fileEtudeSoleMultiple';
  2459.         $etapsCat4Files[3]['nameFile'] = 'Notices hydrauliques ou études gestion eaux pluviales';
  2460.         $etapsCat4Files[3]['nameFileDB'] = 'fileNoticesHydrauliquesMultiple';
  2461.         $etapsCat4Files[4]['nameFile'] = 'Evaluation carbone des modules';
  2462.         $etapsCat4Files[4]['nameFileDB'] = 'fileEvaluationCarboneModuleMultiple';
  2463.         $etapsCat4Files[5]['nameFile'] = 'Fiche technique modules';
  2464.         $etapsCat4Files[5]['nameFileDB'] = 'fileFicheTechniqueModuleMultiple';
  2465.         $etapsCat4Files[6]['nameFile'] = 'Fiche technique onduleurs';
  2466.         $etapsCat4Files[6]['nameFileDB'] = 'fileFicheTechniqueOnduleurMultiple';
  2467.         $etapsCat4Files[7]['nameFile'] = 'Attestation de bridage';
  2468.         $etapsCat4Files[7]['nameFileDB'] = 'fileAttestationBrigageOnduleurMultiple';
  2469.         $etapsCat4Files[8]['nameFile'] = 'Fiches de garantie onduleur';
  2470.         $etapsCat4Files[8]['nameFileDB'] = 'fileFicheGarantiOnduleurMultiple';
  2471.         $etapsCat4Files[9]['nameFile'] = 'Fiche technique système d’intégration ';
  2472.         $etapsCat4Files[9]['nameFileDB'] = 'fileFicheSystemeIntegrationMultiple';
  2473.         $etapsCat4[1]['etapsFiles'] = $etapsCat4Files;
  2474.         $user = $this->security->getUser();
  2475.         if($user and (!in_array('ROLE_DEV',$user->getRoles()) or !in_array('ROLE_EPC',$user->getRoles()))){
  2476.             $etapsCat4[2]['etapNum'] = '161';
  2477.             $etapsCat4[2]['name'] = 'Devis fournisseurs et sous-traitants';
  2478.             $etapsCat4[3]['etapNum'] = '16';
  2479.             $etapsCat4[3]['name'] = 'Contrat de construction';
  2480.             $etapsCat4[3]['class'] = 'ContratConstruction';
  2481.             $etapsCat4[3]['etapsFilesManyToManyName'] = 'contratConstruction';
  2482.             $etapsCat4FilesManyToMany = [];
  2483.             $etapsCat4FilesManyToMany[1]['nameFile'] = 'Contrat de construction';
  2484.             $etapsCat4FilesManyToMany[1]['nameFileDB'] = 'fileContratEpcMultiple';
  2485.             $etapsCat4FilesManyToMany[2]['nameFile'] = 'Annexes (fiches techniques…)';
  2486.             $etapsCat4FilesManyToMany[2]['nameFileDB'] = 'fileAnnexesMultiple';
  2487.             $etapsCat4FilesManyToMany[3]['nameFile'] = 'Demande d’agrément';
  2488.             $etapsCat4FilesManyToMany[3]['nameFileDB'] = 'fileDemandeAgrementMultiple';
  2489.             $etapsCat4[3]['etapsFilesManyToMany'] = $etapsCat4FilesManyToMany;
  2490. //            $etapsCat4Files = [];
  2491. //            $etapsCat4Files[1]['nameFile'] = 'Contrat EPC';
  2492. //            $etapsCat4Files[1]['nameFileDB'] = 'fileContratEpcMultiple';
  2493. //            $etapsCat4Files[2]['nameFile'] = 'Annexes (fiches techniques…)';
  2494. //            $etapsCat4Files[2]['nameFileDB'] = 'fileAnnexesMultiple';
  2495. //            $etapsCat4[3]['etapsFiles'] = $etapsCat4Files;
  2496.             $etapsCat4[4]['etapNum'] = '171';
  2497.             $etapsCat4[4]['name'] = 'Pré-requis avant démarage de la construction';
  2498.             $etapsCat4Files = [];
  2499.             $etapsCat4Files[1]['nameFile'] = 'PV de démarrage';
  2500.             $etapsCat4Files[1]['nameFileDB'] = 'filePVDemarrageMultiple';
  2501.             $etapsCat4Files[2]['nameFile'] = 'DOC';
  2502.             $etapsCat4Files[2]['nameFileDB'] = 'fileDocEtap171Multiple';
  2503.             $etapsCat4Files[3]['nameFile'] = 'Ordre de service';
  2504.             $etapsCat4Files[3]['nameFileDB'] = 'fileOrderServiceMultiple';
  2505.             $etapsCat4Files[4]['nameFile'] = 'Planning prévisionnel ';
  2506.             $etapsCat4Files[4]['nameFileDB'] = 'filePlanningPrevisionnelMultiple';
  2507.             $etapsCat4Files[5]['nameFile'] = 'PGC';
  2508.             $etapsCat4Files[5]['nameFileDB'] = 'filePGCMultiple';
  2509.             $etapsCat4Files[6]['nameFile'] = 'Rapport de visite SPS';
  2510.             $etapsCat4Files[6]['nameFileDB'] = 'fileRapportVisiteSpsMultiple';
  2511.             $etapsCat4Files[7]['nameFile'] = 'DIUO';
  2512.             $etapsCat4Files[7]['nameFileDB'] = 'fileDIUOMultiple';
  2513.             $etapsCat4Files[8]['nameFile'] = 'Rapport de mission L/LE';
  2514.             $etapsCat4Files[8]['nameFileDB'] = 'fileMissionLLEMultiple';
  2515.             $etapsCat4Files[9]['nameFile'] = 'Harmonisation';
  2516.             $etapsCat4Files[9]['nameFileDB'] = 'fileHarmonisationMultiple';
  2517.             $etapsCat4Files[10]['nameFile'] = 'PPSPS';
  2518.             $etapsCat4Files[10]['nameFileDB'] = 'filePPSPSMultiple';
  2519.             $etapsCat4Files[11]['nameFile'] = 'Photos de la plateforme';
  2520.             $etapsCat4Files[11]['nameFileDB'] = 'filePhotosPlateformeMultiple';
  2521.             $etapsCat4[4]['etapsFiles'] = $etapsCat4Files;
  2522.             $etapsCat4[5]['etapNum'] = '172';
  2523.             $etapsCat4[5]['name'] = 'LOT Génie civil et fondations';
  2524.             $etapsCat4Files = [];
  2525.             $etapsCat4Files[1]['nameFile'] = 'Note de calcul béton et féraillage';
  2526.             $etapsCat4Files[1]['nameFileDB'] = 'fileNoteCalculBetonFeraillageMultiple';
  2527.             $etapsCat4Files[2]['nameFile'] = 'Plan implantation bâtiment avec dalle béton du local onduleur';
  2528.             $etapsCat4Files[2]['nameFileDB'] = 'filePlanImplantationBatimentAvecDalleBetonMultiple';
  2529.             $etapsCat4Files[3]['nameFile'] = 'PV de réception ';
  2530.             $etapsCat4Files[3]['nameFileDB'] = 'filePVReceptionMultiple';
  2531.             $etapsCat4Files[4]['nameFile'] = 'Fondations terminées';
  2532.             $etapsCat4Files[4]['nameFileDB'] = 'fileFondationTermineesMultiple';
  2533.             $etapsCat4Files[5]['nameFile'] = 'Dalle béton shelter';
  2534.             $etapsCat4Files[5]['nameFileDB'] = 'fileDalleBetonShelterMultiple';
  2535.             $etapsCat4Files[6]['nameFile'] = 'Chemin d’accès';
  2536.             $etapsCat4Files[6]['nameFileDB'] = 'fileCheminAccesMultiple';
  2537.             $etapsCat4Files[7]['nameFile'] = 'Photos de la plateforme';
  2538.             $etapsCat4Files[7]['nameFileDB'] = 'filePhotosPlateformeMultiple';
  2539.             $etapsCat4[5]['etapsFiles'] = $etapsCat4Files;
  2540.             $etapsCat4[6]['etapNum'] = '173';
  2541.             $etapsCat4[6]['name'] = 'LOT Charpente et couverture / bardage';
  2542.             $etapsCat4Files = [];
  2543.             $etapsCat4Files[1]['nameFile'] = 'Notes de calcul charpente';
  2544.             $etapsCat4Files[1]['nameFileDB'] = 'fileNoteCalculCharpente173Multiple';
  2545. //            $etapsCat4Files[2]['nameFile'] = 'Photos de renforcement charpente';
  2546. //            $etapsCat4Files[2]['nameFileDB'] = 'filePhotoRenforcementcharpente173Multiple';
  2547.             $etapsCat4Files[3]['nameFile'] = 'Plan de bardage';
  2548.             $etapsCat4Files[3]['nameFileDB'] = 'fileOssatureSecondaireBardage173Multiple';
  2549. //            $etapsCat4Files[4]['nameFile'] = 'Photos de renforcement des bardages';
  2550. //            $etapsCat4Files[4]['nameFileDB'] = 'filePhotoRenforcementBardage173Multiple';
  2551.             $etapsCat4Files[5]['nameFile'] = 'PV réception lot charpente / couverture / bardage';
  2552.             $etapsCat4Files[5]['nameFileDB'] = 'filePVreception173Multiple';
  2553. //            $etapsCat4Files[6]['nameFile'] = 'Photos de renforcement de la couverture terminée';
  2554. //            $etapsCat4Files[6]['nameFileDB'] = 'filePhotoRenforcementCouvertureTermine173Multiple';
  2555.             $etapsCat4Files[6]['nameFile'] = 'Plans de charpente';
  2556.             $etapsCat4Files[6]['nameFileDB'] = 'filePlansCharpente173Multiple';
  2557.             $etapsCat4Files[7]['nameFile'] = 'Plans de charpente signé par le bailleur';
  2558.             $etapsCat4Files[7]['nameFileDB'] = 'filePlansCharpente173SigneMultiple';
  2559. //            $etapsCat4Files[8]['nameFile'] = 'Vues 3D';
  2560. //            $etapsCat4Files[8]['nameFileDB'] = 'fileVues3d173Multiple';
  2561. //            $etapsCat4Files[9]['nameFile'] = 'Plan de couverture';
  2562. //            $etapsCat4Files[9]['nameFileDB'] = 'filePlanCouverture173Multiple';
  2563. //            $etapsCat4Files[10]['nameFile'] = 'Plan et descriptifs des travaux de renforcement de charpente';
  2564. //            $etapsCat4Files[10]['nameFileDB'] = 'filePlanDescriptionTravauxRenforcementCharpente173Multiple';
  2565. //            $etapsCat4Files[11]['nameFile'] = 'Plan et descriptifs des travaux de dépose/ repose de couverture';
  2566. //            $etapsCat4Files[11]['nameFileDB'] = 'filePlanDescriptionTravauxDeposeCouverture173Multiple';
  2567.             $etapsCat4[6]['etapsFiles'] = $etapsCat4Files;
  2568.             $etapsCat4[7]['etapNum'] = '174';
  2569.             $etapsCat4[7]['name'] = 'LOT photovoltaïque et élec';
  2570.             $etapsCat4Files = [];
  2571.             $etapsCat4Files[1]['nameFile'] = 'Plan de calepinage / câblage';
  2572.             $etapsCat4Files[1]['nameFileDB'] = 'filePlanCalepinageModule174Multiple';
  2573. //            $etapsCat4Files[2]['nameFile'] = 'Plan de câblage des strings';
  2574. //            $etapsCat4Files[2]['nameFileDB'] = 'filePlanCaplageStrings174Multiple';
  2575.             $etapsCat4Files[3]['nameFile'] = 'Note de calcul sous Lise PV ';
  2576.             $etapsCat4Files[3]['nameFileDB'] = 'fileNoteCalculSousLisePV174Multiple';
  2577.             $etapsCat4Files[4]['nameFile'] = 'Schéma Unifilaire de l’installation';
  2578.             $etapsCat4Files[4]['nameFileDB'] = 'fileSchemaUnifilaireInstallation174Multiple';
  2579.             $etapsCat4Files[5]['nameFile'] = 'Schéma d’agencement du shelter ou photos';
  2580.             $etapsCat4Files[5]['nameFileDB'] = 'fileShemaAgencementShelterPhotos174Multiple';
  2581. //            $etapsCat4Files[6]['nameFile'] = 'Test de PR à la mise en service';
  2582. //            $etapsCat4Files[6]['nameFileDB'] = 'fileTestPrMiseService174Multiple';
  2583.             $etapsCat4Files[7]['nameFile'] = 'Schéma unifilaire du système de monitoring';
  2584.             $etapsCat4Files[7]['nameFileDB'] = 'fileShemaUnifilaireSystemeMonitoring174Multiple';
  2585.             $etapsCat4Files[8]['nameFile'] = 'Tests et vérifications des travaux électriques, fiche d’auto-contrôle de l’installateur';
  2586.             $etapsCat4Files[8]['nameFileDB'] = 'fileTestVerificationTravauxElectriqueFiche174Multiple';
  2587.             $etapsCat4Files[9]['nameFile'] = 'PV de réception lot photovoltaïque/ élec / AMO';
  2588.             $etapsCat4Files[9]['nameFileDB'] = 'filePVReception174Multiple';
  2589.             $etapsCat4Files[10]['nameFile'] = 'Photos de la centrale solaire';
  2590.             $etapsCat4Files[10]['nameFileDB'] = 'filePhotosGenerateur174Multiple';
  2591.             $etapsCat4Files[11]['nameFile'] = 'Pv terminées';
  2592.             $etapsCat4Files[11]['nameFileDB'] = 'filePvTerminees174Multiple';
  2593.             $etapsCat4Files[12]['nameFile'] = 'Descentes de câbles';
  2594.             $etapsCat4Files[12]['nameFileDB'] = 'fileDescentesCables174Multiple';
  2595.             $etapsCat4Files[13]['nameFile'] = 'Raccordement du local onduleur';
  2596.             $etapsCat4Files[13]['nameFileDB'] = 'fileRaccordementLocalOnduleur174Multiple';
  2597.             $etapsCat4[7]['etapsFiles'] = $etapsCat4Files;
  2598.             $etapsCat4[8]['etapNum'] = '175';
  2599.             $etapsCat4[8]['name'] = 'LOT Raccordement, liaison PDL';
  2600.             $etapsCat4Files = [];
  2601.             $etapsCat4Files[1]['nameFile'] = 'Notes de calcul des câbles AC de la liaison';
  2602.             $etapsCat4Files[1]['nameFileDB'] = 'fileNoteCalculCableAcLiaison175Multiple';
  2603.             $etapsCat4Files[2]['nameFile'] = 'Plans de la tranchée (coupe et plan de localisation)';
  2604.             $etapsCat4Files[2]['nameFileDB'] = 'filePlanTranchee175Multiple';
  2605. //            $etapsCat4Files[3]['nameFile'] = 'DAACT : cerfa signé tamponné mairie';
  2606. //            $etapsCat4Files[3]['nameFileDB'] = 'fileDaact175Multiple';
  2607. //            $etapsCat4Files[4]['nameFile'] = 'PV de réception';
  2608. //            $etapsCat4Files[4]['nameFileDB'] = 'filePVReception175Multiple';
  2609. //            $etapsCat4Files[5]['nameFile'] = 'Photos de la liaison terminée';
  2610. //            $etapsCat4Files[5]['nameFileDB'] = 'filePhotosLiaisonTerminee175Multiple';
  2611.             $etapsCat4[8]['etapsFiles'] = $etapsCat4Files;
  2612.         }
  2613.         $etapsCat4[9]['etapNum'] = '20';
  2614.         $etapsCat4[9]['name'] =  'Consuel';
  2615.         $etapsCat4Files = [];
  2616.         $etapsCat4Files[1]['nameFile'] = 'Consuel';
  2617.         $etapsCat4Files[1]['nameFileDB'] = 'fileConsuelEtap20Multiple';
  2618.         $etapsCat4[9]['etapsFiles'] = $etapsCat4Files;
  2619.         $etapsCat4[10]['etapNum'] = '21';
  2620.         $etapsCat4[10]['name'] =  'Raccordement et tests de réception';
  2621.         $etapsCat4Files = [];
  2622.         $etapsCat4Files[1]['nameFile'] = 'Tests de réception';
  2623.         $etapsCat4Files[1]['nameFileDB'] = 'fileTestReceptionMultiple';
  2624.         $etapsCat4[10]['etapsFiles'] = $etapsCat4Files;
  2625.         $etapsCat4[11]['etapNum'] = '22';
  2626.         $etapsCat4[11]['name'] =  'Tests de PR à 2 ans';
  2627.         $etapsCat4Files = [];
  2628.         $etapsCat4Files[1]['nameFile'] = 'Tests de PR';
  2629.         $etapsCat4Files[1]['nameFileDB'] = 'fileTestPrMultiple';
  2630.         $etapsCat4[11]['etapsFiles'] = $etapsCat4Files;
  2631.         $etapsCat4[12]['etapNum'] = '201';
  2632.         $etapsCat4[12]['name'] =  'Dossier des Ouvrages Exécutés (DOE)';
  2633.         $etapsCat4Files = [];
  2634.         $etapsCat4Files[1]['nameFile'] = 'DOE';
  2635.         $etapsCat4Files[1]['nameFileDB'] = 'fileDoeEtap201Multiple';
  2636.         $etapsCat4[12]['etapsFiles'] = $etapsCat4Files;
  2637. //        $etapsCat4[13]['etapNum'] = '23';
  2638. //        $etapsCat4[13]['name'] = 'Compte-rendus';
  2639. //        $etapsCat4[13]['class'] = 'VisiteTerrain';
  2640. //        $etapsCat4[13]['etapsFilesManyToManyName'] = 'visiteTerrain';
  2641. //        $etapsCat4FilesManyToMany = [];
  2642. //        $etapsCat4FilesManyToMany[1]['nameFile'] = 'compte-rendus';
  2643. //        $etapsCat4FilesManyToMany[1]['nameFileDB'] = 'fileCompteRendusMultiple';
  2644. //        $etapsCat4FilesManyToMany[2]['nameFile'] = 'pré-visites';
  2645. //        $etapsCat4FilesManyToMany[2]['nameFileDB'] = 'filePreVisiteMultiple';
  2646. //        $etapsCat4FilesManyToMany[3]['nameFile'] = 'photos visite terrain';
  2647. //        $etapsCat4FilesManyToMany[3]['nameFileDB'] = 'filePhotosVisiteTerainMultiple';
  2648. //        $etapsCat4[13]['etapsFilesManyToMany'] = $etapsCat4FilesManyToMany;
  2649.         $array[4]['etaps'] = $etapsCat4;
  2650.         $etapsCat5 = [];
  2651.         $etapsCat5[1]['etapNum'] = '5';
  2652.         $etapsCat5[1]['name'] = 'Promesse de bail';
  2653.         $etapsCat2Files = [];
  2654.         $etapsCat2Files[1]['nameFile'] = 'Promesse de bail';
  2655.         $etapsCat2Files[1]['nameFileDB'] = 'filePromessebailMultiple';
  2656.         $etapsCat2Files[2]['nameFile'] = 'Levée d’option';
  2657.         $etapsCat2Files[2]['nameFileDB'] = 'fileLeveeOptionMultiple';
  2658.         $etapsCat2Files[3]['nameFile'] = 'Acte de substitution';
  2659.         $etapsCat2Files[3]['nameFileDB'] = 'fileActeSubstitutionMultiple';
  2660.         $etapsCat2Files[4]['nameFile'] = 'LOI';
  2661.         $etapsCat2Files[4]['nameFileDB'] = 'fileLoiMultiple';
  2662.         $etapsCat2Files[5]['nameFile'] = 'Promesse d\'achat';
  2663.         $etapsCat2Files[5]['nameFileDB'] = 'filePromesseAchatMultiple';
  2664.         $etapsCat2[1]['etapsFiles'] = $etapsCat2Files;
  2665.         $etapsCat5 = [];
  2666.         $etapsCat5[1]['etapNum'] = '25';
  2667.         $etapsCat5[1]['name'] = 'Avancée de la valorisation';
  2668.         $etapsCat5Files = [];
  2669.         $etapsCat5[1]['class'] = 'Etap24Champs';
  2670.         $etapsCat5[1]['etapsFilesManyToManyName'] = 'etap24Champs';
  2671.         $etapsCat5FilesManyToMany = [];
  2672.         $etapsCat5FilesManyToMany[1]['nameFile'] = 'Demande de raccordement ';
  2673.         $etapsCat5FilesManyToMany[1]['nameFileDB'] = 'fileDemandeRaccordementEtap25Multiple';
  2674.         $etapsCat5FilesManyToMany[2]['nameFile'] = 'Mail d’ENEDIS de confirmation';
  2675.         $etapsCat5FilesManyToMany[2]['nameFileDB'] = 'fileMailEnedisConfirmationEtap25Multiple';
  2676.         $etapsCat5FilesManyToMany[3]['nameFile'] = 'Garantie bancaire';
  2677.         $etapsCat5FilesManyToMany[3]['nameFileDB'] = 'fileGarantieBancaireEtap25Multiple';
  2678.         $etapsCat5FilesManyToMany[4]['nameFile'] = 'Récépissé demande AO';
  2679.         $etapsCat5FilesManyToMany[4]['nameFileDB'] = 'fileRecepisseDemandeAoMultiple';
  2680.         $etapsCat5FilesManyToMany[5]['nameFile'] = 'Lettre de lauréat';
  2681.         $etapsCat5FilesManyToMany[5]['nameFileDB'] = 'fileLettreLaureaMultiple';
  2682.         $etapsCat5[1]['etapsFiles'] = $etapsCat5Files;
  2683.         $etapsCat5[1]['etapsFilesManyToMany'] = $etapsCat5FilesManyToMany;
  2684.         $etapsCat5[2]['etapNum'] = '26';
  2685.         $etapsCat5[2]['name'] = 'Contrat d’achat';
  2686.         $etapsCat5Files = [];
  2687.         $etapsCat5[2]['class'] = 'Etap24Champs';
  2688.         $etapsCat5[2]['etapsFilesManyToManyName'] = 'etap24Champs';
  2689.         $etapsCat5[2]['class2'] = 'Etap26Champs';
  2690.         $etapsCat5[2]['etapsFilesManyToManyName2'] = 'etap26Champs';
  2691.         $etapsCat5FilesManyToMany = [];
  2692.         $etapsCat5FilesManyToMany[1]['nameFile'] = 'Contrat d’achat signé';
  2693.         $etapsCat5FilesManyToMany[1]['nameFileDB'] = 'fileContratAchatSigneEtap25Multiple';
  2694.         $etapsCat5FilesManyToMany[2]['nameFile'] = 'Attestation de producteur';
  2695.         $etapsCat5FilesManyToMany[2]['nameFileDB'] = 'fileAttestionProducteurEtap25Multiple';
  2696.         $etapsCat5FilesManyToMany[3]['nameFile'] = 'Attestation de l’installateur';
  2697.         $etapsCat5FilesManyToMany[3]['nameFileDB'] = 'fileAttestionInstallateurEtap25Multiple';
  2698.         $etapsCat5FilesManyToMany[4]['nameFile'] = 'AR Contrat d’achat';
  2699.         $etapsCat5FilesManyToMany[4]['nameFileDB'] = 'fileArContratAchatEtap25Multiple';
  2700.         $etapsCat5[2]['etapsFiles'] = $etapsCat5Files;
  2701.         $etapsCat5[2]['etapsFilesManyToMany'] = [];
  2702.         $etapsCat5[2]['etapsFilesManyToMany2'] = $etapsCat5FilesManyToMany;
  2703.         $array[5]['etaps'] = $etapsCat5;
  2704.         return $array;
  2705.     }
  2706.     public function paginateAlert($request,$isArchive=false){
  2707.         $length = $request->get('length');
  2708.         $length = $length && ($length!=-1)?$length:0;
  2709.         $start = $request->get('start');
  2710.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  2711.         $column =  $search = $request->get('columns');
  2712.         $order = $request->get('order')[0];
  2713.         $columnOrder = $order['column'];
  2714.         $dirOrder = $order['dir'];
  2715.         $columNameOrder = $column[$columnOrder]['data'];
  2716.         $search = $request->get('search');
  2717.         $typeAlert = $request->get('typeAlert');
  2718.         $devProject = $request->get('devProject');
  2719.         $searchDate = $request->get('searchDate');
  2720.         $user = $this->security->getUser();
  2721.         $roles = $user->getRoles();
  2722.         $spvsTab = [];
  2723.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  2724.             $spvs = $user->getSpv();
  2725.             foreach($spvs as $item){
  2726.                 $spvsTab[] = $item->getId();
  2727.             }
  2728.         }
  2729.         $filters = [
  2730.             'query' => trim(@$search['value']),
  2731.             'spvsTab' => $spvsTab,
  2732.             'devProject' => $devProject,
  2733.             'typeAlert' => $typeAlert,
  2734.             'searchDate' => $searchDate,
  2735.             'user' => $user
  2736.         ];
  2737.         $alerts= $this->em->getRepository(\App\Entity\Alert::class)->search($isArchive,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  2738.         $recordsFiltered= $this->em->getRepository(\App\Entity\Alert::class)->search($isArchive,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  2739.         $recordsTotal= $this->em->getRepository(\App\Entity\Alert::class)->search($isArchive,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  2740.         $output = array(
  2741.             'data' => array(),
  2742.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  2743.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  2744.         );
  2745.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  2746.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  2747.         foreach ($alerts as $alert) {
  2748.             $etapCat2 = null;
  2749.             if($alert->getTypeAlert() == Alert::ALERT_BAIL){
  2750.                 $typeAlert = 'Promesse de bail' ;
  2751.                 $etapCat2 = $this->getEtapByNumAndProject(Etaps::ETAP_5, $alert->getProject());
  2752.             }elseif ($alert->getTypeAlert() == Alert::ALERT_PC_CONSUEL){
  2753.                 $typeAlert = 'PC/DP' ;
  2754.                 $etapCat2 = $this->getEtapByNumAndProject(Etaps::ETAP_13, $alert->getProject());
  2755.             }elseif ($alert->getTypeAlert() == Alert::ALERT_T0){
  2756.                 $typeAlert = 'Date de T0 - Date limite d’achèvement' ;
  2757.                 $etapCat2 = $this->getEtapByNumAndProject(Etaps::ETAP_13, $alert->getProject());
  2758.             }elseif ($alert->getTypeAlert() == Alert::ALERT_Etap1And2){
  2759.                 $typeAlert = 'Avancement étape 1 et étape 2 timeline urbanisme' ;
  2760.                 $etapCat2 = $this->getEtapByNumAndProject(Etaps::ETAP_1, $alert->getProject());
  2761.             }else{
  2762.                 $typeAlert = '';
  2763.             }
  2764.             $action =
  2765.                 $this->twig->render(
  2766.                     'admin/alert/default/bouton.html.twig', array(
  2767.                     'alert' => $alert,
  2768.                     'user' => $user
  2769.                 ));
  2770.             $btnSelect =
  2771.                 $this->twig->render(
  2772.                     'admin/alert/default/btnSelect.html.twig', array(
  2773.                     'alert' => $alert
  2774.                 ));
  2775.             $status =
  2776.                 $this->twig->render(
  2777.                     'admin/alert/default/status.html.twig', array(
  2778.                     'alert' => $alert
  2779.                 ));
  2780.             $urlShow = null;
  2781.             if ($etapCat2) {
  2782.                 $params = [
  2783.                     'token'    => $alert->getProject()->getToken(),
  2784.                     'tokenEtap'=> $etapCat2->getToken(),
  2785.                     'etapNum'  => $etapCat2->getEtap()->getNum(),
  2786.                 ];
  2787.                 if ($this->security->isGranted('ROLE_SUPER_ADMINISTRATOR', $user) || $this->security->isGranted('ROLE_ADMIN', $user)) {
  2788.                     $urlShow = $this->router->generate('admin_project_etaps_view', $params);
  2789.                 } elseif ($this->security->isGranted('ROLE_EPC', $user) || $this->security->isGranted('ROLE_DEV', $user)) {
  2790.                     $urlShow = $this->router->generate('user_project_etaps_view', $params);
  2791.                 } elseif ($this->security->isGranted('ROLE_GESTION_FINANCIER', $user)) {
  2792.                     $urlShow = $this->router->generate('gestionnaire_financier_project_etaps_view', $params);
  2793.                 } elseif ($this->security->isGranted('ROLE_ADMINISTRATEUR_FINANCIER', $user) || $this->security->isGranted('ROLE_OPERATEUR_FINANCIER', $user)) {
  2794.                     $urlShow = $this->router->generate('gestionnaire_financier_project_etaps_view', $params);
  2795.                 }
  2796.             }
  2797.             $output['data'][] = [
  2798.                 'responsive_id' => '',
  2799.                 'id' => $alert->getId(),
  2800.                 'project' => "<a style='color: #4A4A68 !important; href='".$urlShow."'>".$alert->getProject()->getName()."</a>",
  2801.                 'spv' => $alert->getProject()->getSpv()?$alert->getProject()->getSpv()->getName():'',
  2802.                 'status' => $status,
  2803.                 'typeAlert' => $typeAlert,
  2804.                 'dateLimit' => $alert->getDateLimit()  ? $alert->getDateLimit()->format('d/m/Y') : '',
  2805.                 'delaiRestant' => $this->delaiRestantDateExpirationPromesseBail($alert),
  2806.                 'btnSelect' => $btnSelect,
  2807.                 'action' => $action,
  2808.                 'urlShow' => $urlShow
  2809.             ];
  2810.         }
  2811.         return $output;
  2812.     }
  2813.     public function addStyleToCellDate($cell,$row,$string,$spreadsheet){
  2814.         if($string){
  2815.             $spreadsheet->getActiveSheet()->setCellValue($cell.$row,Date::PHPToExcel($string->format('d/m/Y')) );
  2816.             $spreadsheet->getActiveSheet()->getStyle($cell.$row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);
  2817.         }else{
  2818.             $spreadsheet->getActiveSheet()->setCellValue($cell.$row,'-' );
  2819.         }
  2820.         return $spreadsheet;
  2821.     }
  2822.     public function extractAlerts($alerts,$request){
  2823.         $file= $this->params->get('zips_directory')."/extraire_alert.xlsx";
  2824.         $spreadsheet = new Spreadsheet();
  2825.         $sheet = $spreadsheet->getActiveSheet();
  2826.         // Head 2
  2827.         $tableHead2 = [
  2828.             'font'=>[
  2829.                 'color'=>[
  2830.                     'rgb'=>'0071c1'
  2831.                 ],
  2832.                 'bold'=>true,
  2833.                 'size'=>12
  2834.             ],
  2835.             'fill'=>[
  2836.                 'fillType' => Fill::FILL_SOLID,
  2837.                 'startColor' => [
  2838.                     'rgb' => 'dcebf4'
  2839.                 ]
  2840.             ],
  2841.         ];
  2842.         $sheet->setCellValue('A1',"Projet")
  2843.             ->setCellValue('B1',"SPV")
  2844.             ->setCellValue('C1',"Développeur")
  2845.             ->setCellValue('D1',"Capacité")
  2846.             ->setCellValue('E1',"Typologie")
  2847.             ->setCellValue('F1',"Type d'alerte")
  2848.             ->setCellValue('G1',"Délai restant")
  2849.             ->setCellValue('H1',"Date limite")
  2850.             ->setCellValue('I1',"Date PDB")
  2851.             ->setCellValue('J1',"Délai PDB")
  2852.             ->setCellValue('K1',"Date T0")
  2853.             ->setCellValue('L1',"Date arrêté PC/Dp")
  2854.             ->setCellValue('M1',"Statut administratif")
  2855.             ->setCellValue('N1',"Statut tracker");
  2856.         // Borders a2 z2
  2857.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2858.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2859.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2860.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2861.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2862.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2863.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2864.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2865.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2866.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2867.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2868.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2869.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2870.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2871.         //width
  2872.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
  2873.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  2874.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  2875.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  2876.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  2877.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  2878.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(30);
  2879.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(16);
  2880.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(20);
  2881.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  2882.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(20);
  2883.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(30);
  2884.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(30);
  2885.         $spreadsheet->getActiveSheet()->getStyle('A1:N1')->applyFromArray($tableHead2);
  2886.         //loop through the data
  2887.         //current row
  2888.         $row=2;
  2889.         foreach($alerts as $item){
  2890.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$item->getProject()->getId()]);
  2891.             $etap9 = $this->em->getRepository(Etap9::class)->findOneBy(['project'=>$item->getProject()->getId()]);
  2892.             $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project'=>$item->getProject()->getId()]);
  2893.             $spreadsheet->getActiveSheet()
  2894.                 ->setCellValue('A'.$row , $item->getProject()->getName())
  2895.                 ->setCellValue('B'.$row , $item->getProject()->getSpv()?$item->getProject()->getSpv()->getName():'')
  2896.                 ->setCellValue('C'.$row , $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().''.$item->getProject()->getDeveloppeur()->getLastname():'')
  2897.                 ->setCellValue('D'.$row , $item->getProject()->getCapacite())
  2898.                 ->setCellValue('E'.$row , $item->getProject()->getTypologieProject()?$item->getProject()->getTypologieProject()->getName():'')
  2899.                 ->setCellValue('F'.$row , $item->getTypeAlertStr())
  2900.                 ->setCellValue('G'.$row , $this->delaiRestantDateExpirationPromesseBail($item))
  2901.                 ->setCellValue('M'.$row , $item->getProject()->getStatusAdministratifNum())
  2902.                 ->setCellValue('N'.$row ,  $item->getProject()->getStatusTrackerStr())
  2903.             ;
  2904.             $spreadsheet = $this->addStyleToCellDate('H',$row,$item->getDateLimit(),$spreadsheet);
  2905.             $dateExpirationPromesseBail = $etap5->getDateExpirationPromesseBail();
  2906.             $nbr = (int)$etap5->getD1() + (int)$etap5->getD2() ;
  2907.             if($nbr == 0){
  2908.                 $nbr = 24;
  2909.             }
  2910.             $spreadsheet = $this->addStyleToCellDate('I',$row,$dateExpirationPromesseBail,$spreadsheet);
  2911.             $spreadsheet->getActiveSheet()->setCellValue('J'.$row , $nbr.' mois');
  2912.             $spreadsheet = $this->addStyleToCellDate('K',$row,$etap9->getDateT0(),$spreadsheet);
  2913.             $spreadsheet = $this->addStyleToCellDate('L',$row,$etap1->getDateArretePcDp(),$spreadsheet);
  2914.             //increment row
  2915.             $row++;
  2916.         }
  2917.         $firstRow=1;
  2918.         $lastRow=$row-1;
  2919.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":N".$lastRow);
  2920.         $writer = new Xlsx($spreadsheet);
  2921.         $writer->save($file);
  2922.         return $file;
  2923.     }
  2924.     public function delaiRestantDateExpirationPromesseBail($alert){
  2925.         $str = '-';
  2926.         if(is_object($alert)){
  2927.             $dateLimit = $alert->getDateLimit();
  2928.             $dateTime = new \DateTime('now');
  2929.             if($dateLimit >= $dateTime){
  2930.                 $interval = $dateTime->diff($dateLimit);
  2931.                 $str = $this->formatInterval($interval);
  2932.             }else{
  2933.                 $str = '-';
  2934.             }
  2935.         }
  2936.         return $str;
  2937.     }
  2938.     public function formatInterval($interval){
  2939.         $str = '';
  2940.         if(is_object($interval)){
  2941.             $days = $interval->d;
  2942.             $mounths = $interval->m;
  2943.             $years = $interval->y;
  2944.             $hours = $interval->h;
  2945.             $strDay = '' ;
  2946.             $strMounth = '' ;
  2947.             $strYear = '' ;
  2948.             $strh = '' ;
  2949.             if($days && $days > 0){
  2950.                 $strDay = ' '.$days." jours";
  2951.             }
  2952.             if($mounths && $mounths > 0){
  2953.                 $strMounth = ' '.$mounths." mois";
  2954.             }
  2955.             if($years && $years > 0){
  2956.                 $strYear = ' '.$years." an";
  2957.             }
  2958.             if($hours && $hours > 0){
  2959.                 $strh = ' '." 1 jour";
  2960.             }
  2961.             $str = $strYear.$strMounth.$strDay;
  2962.             if(empty($str)){
  2963.                 $str = $strh;
  2964.             }
  2965.         }
  2966.         return $str;
  2967.     }
  2968.     public function importProjects($filename)
  2969.     {
  2970.         $file = $this->params->get('uploads_directory')."/".$filename;
  2971.         $array = [];
  2972.         $f = fopen($file, "r");
  2973.         $flag = true;
  2974.         $i = 0;
  2975.         $header = [];
  2976.         while (($line = fgetcsv($f,0,";")) !== false) {
  2977.             if($flag) {
  2978.                 $header = [];
  2979.                 foreach ($line as $key1 => $cell) {
  2980.                     $header[] =  mb_convert_encoding(trim($cell), 'UTF-8', 'ISO-8859-1');
  2981.                 }
  2982.                 $flag = false;
  2983.                 continue;
  2984.             }
  2985.             foreach ($line as $key => $cell) {
  2986.                 $array[$i][$header[$key]]=  mb_convert_encoding(trim($cell), 'UTF-8', 'ISO-8859-1');
  2987.             }
  2988.             $i++ ;
  2989.         }
  2990.         fclose($f);
  2991.         foreach ($array as &$item){
  2992.             $item['project'] = 0;
  2993.             if(isset($item['Nom du projet'])){
  2994.                 $name = $item['Nom du projet'];
  2995.                 $project = $this->em->getRepository(Project::class)->findOneBy(['name'=>$name]);
  2996.                 if($project){
  2997.                     $item['project'] = $project->getId();
  2998.                     $item['action'] = 1;
  2999.                 }
  3000.                 else{
  3001.                     $item['action'] = 0;
  3002.                 }
  3003.             }else{
  3004.                 $item['action'] = 0;
  3005.             }
  3006.         }
  3007.         return ['headerTab' => $header,'bodyTab'=>$array];
  3008.     }
  3009.     public function importProjectsSubmit($object)
  3010.     {
  3011.         foreach (json_decode($object) as $item){
  3012.             if($item->project->id != 0){
  3013.                 $project = $this->em->getRepository(Project::class)->find($item->project->id);
  3014.                 if($project){
  3015.                     $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project' => $project->getId()]);
  3016.                     $etap2 = $this->em->getRepository(Etap2::class)->findOneBy(['project' => $project->getId()]);
  3017.                     $etap3 = $this->em->getRepository(Etap3::class)->findOneBy(['project' => $project->getId()]);
  3018.                     $etap4 = $this->em->getRepository(Etap4::class)->findOneBy(['project' => $project->getId()]);
  3019.                     $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project' => $project->getId()]);
  3020.                     $etap6 = $this->em->getRepository(Etap6::class)->findOneBy(['project' => $project->getId()]);
  3021.                     $etap7 = $this->em->getRepository(Etap7::class)->findOneBy(['project' => $project->getId()]);
  3022.                     $etap8 = $this->em->getRepository(Etap8::class)->findOneBy(['project' => $project->getId()]);
  3023.                     $etap9 = $this->em->getRepository(Etap9::class)->findOneBy(['project' => $project->getId()]);
  3024.                     $etap10 = $this->em->getRepository(Etap10::class)->findOneBy(['project' => $project->getId()]);
  3025.                     $etap11 = $this->em->getRepository(Etap11::class)->findOneBy(['project' => $project->getId()]);
  3026.                     $etap12 = $this->em->getRepository(Etap12::class)->findOneBy(['project' => $project->getId()]);
  3027.                     $etap13 = $this->em->getRepository(Etap13::class)->findOneBy(['project' => $project->getId()]);
  3028.                     $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  3029.                     $etap15 = $this->em->getRepository(Etap15::class)->findOneBy(['project' => $project->getId()]);
  3030.                     $etap16 = $this->em->getRepository(Etap16::class)->findOneBy(['project' => $project->getId()]);
  3031.                     $etap17 = $this->em->getRepository(Etap17::class)->findOneBy(['project' => $project->getId()]);
  3032.                     $etap18 = $this->em->getRepository(Etap18::class)->findOneBy(['project' => $project->getId()]);
  3033.                     $etap19 = $this->em->getRepository(Etap19::class)->findOneBy(['project' => $project->getId()]);
  3034.                     $etap20 = $this->em->getRepository(Etap20::class)->findOneBy(['project' => $project->getId()]);
  3035.                     $etap21 = $this->em->getRepository(Etap21::class)->findOneBy(['project' => $project->getId()]);
  3036.                     $etap22 = $this->em->getRepository(Etap22::class)->findOneBy(['project' => $project->getId()]);
  3037.                     $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project' => $project->getId()]);
  3038.                     $etap161 = $this->em->getRepository(Etap161::class)->findOneBy(['project' => $project->getId()]);
  3039.                     $etap171 = $this->em->getRepository(Etap171::class)->findOneBy(['project' => $project->getId()]);
  3040.                     $etap172 = $this->em->getRepository(Etap172::class)->findOneBy(['project' => $project->getId()]);
  3041.                     $etap173 = $this->em->getRepository(Etap173::class)->findOneBy(['project' => $project->getId()]);
  3042.                     $etap174 = $this->em->getRepository(Etap174::class)->findOneBy(['project' => $project->getId()]);
  3043.                     $etap175 = $this->em->getRepository(Etap175::class)->findOneBy(['project' => $project->getId()]);
  3044.                     $etap201 = $this->em->getRepository(Etap201::class)->findOneBy(['project' => $project->getId()]);
  3045.                     $etap159 = $this->em->getRepository(Etap159::class)->findOneBy(['project' => $project->getId()]);
  3046.                     $etap0 = $this->em->getRepository(Etap0::class)->findOneBy(['project' => $project->getId()]);
  3047.                     $etap23 = $this->em->getRepository(Etap23::class)->findOneBy(['project' => $project->getId()]);
  3048.                     $etap80 = $this->em->getRepository(Etap80::class)->findOneBy(['project' => $project->getId()]);
  3049.                     $etap121 = $this->em->getRepository(Etap121::class)->findOneBy(['project' => $project->getId()]);
  3050.                     $etap601 = $this->em->getRepository(Etap601::class)->findOneBy(['project' => $project->getId()]);
  3051.                     $etap602 = $this->em->getRepository(Etap602::class)->findOneBy(['project' => $project->getId()]);
  3052.                     foreach ($item->project->value as $value){
  3053.                         $arrayOneToManyString = [];
  3054.                         $champsEntity = $value->champ;
  3055.                         $champsValue = $value->value;
  3056.                         $champsEntityTab = explode("-", $champsEntity);
  3057.                         if(isset($champsEntityTab[3]) && $champsEntityTab[1] == 0){
  3058.                             $nameSeteurFiled = 'set'.ucfirst($champsEntityTab[4]);
  3059.                             if(${'etap'.$champsEntityTab[3]}){
  3060.                                 $etapEntityClass = 'App\\Entity\\Etap' . $champsEntityTab[3];
  3061.                                 $classMetadata = $this->em->getClassMetadata($etapEntityClass);
  3062.                                 if($classMetadata->hasAssociation($champsEntityTab[4])){
  3063.                                     $associationMappings = $classMetadata->getAssociationMapping($champsEntityTab[4]);
  3064.                                     if($associationMappings && $associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_ONE){
  3065.                                         $target = $this->em->getRepository($associationMappings['targetEntity'])->findOneBy(['name'=>$champsValue]);
  3066.                                         if($target){
  3067.                                             ${'etap'.$champsEntityTab[3]}->{$nameSeteurFiled}($target);
  3068.                                         }
  3069.                                     }elseif ($associationMappings && $associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  3070.                                         if(isset($champsEntityTab[6])and isset($champsEntityTab[7])){
  3071.                                             $nameGeteurFiled = 'get'.ucfirst($champsEntityTab[4]);
  3072.                                             $nameSeteurFiledChild = 'set'.ucfirst($champsEntityTab[6]);
  3073.                                             $nameSeteurFiledEtap = 'setEtap'.$champsEntityTab[3];
  3074.                                             $nameSeteurFiledClass = ucfirst($champsEntityTab[7]);
  3075.                                             $this->em->refresh(${'etap'.$champsEntityTab[3]});
  3076.                                             if(count(${'etap'.$champsEntityTab[3]}->{$nameGeteurFiled}())> 0){
  3077.                                                 $value0 = ${'etap'.$champsEntityTab[3]}->{$nameGeteurFiled}()[0];
  3078.                                                 $value0->{$nameSeteurFiledChild}($champsValue);
  3079.                                                 $this->em->persist($value0);
  3080.                                                 $this->em->flush();
  3081. //
  3082.                                             }
  3083.                                             else{
  3084.                                                 $classEntity = 'App\\Entity\\' .$nameSeteurFiledClass;
  3085.                                                 $value0 = new $classEntity();
  3086.                                                 $value0->{$nameSeteurFiledChild}($champsValue);
  3087.                                                 $value0->{$nameSeteurFiledEtap}(${'etap'.$champsEntityTab[3]});
  3088.                                                 $this->em->persist($value0);
  3089.                                                 $this->em->flush();
  3090.                                             }
  3091.                                         }else{
  3092.                                             if($nameSeteurFiled == "setNumeroCardiMultiple"){
  3093.                                                 $numeroCardiEntity = ${'etap'.$champsEntityTab[3]}->getNumeroCardiMultiple();
  3094.                                                 if(isset($champsEntityTab[6])){
  3095.                                                     if($champsEntityTab[6] == 'numeroCardi'){
  3096.                                                         if(count($numeroCardiEntity)> 0){
  3097.                                                             $numeroCardi = $numeroCardiEntity[0];
  3098.                                                         }else{
  3099.                                                             $numeroCardi = new NumeroCardi();
  3100.                                                         }
  3101.                                                         $numeroCardi->setNumeroCardi($champsValue);
  3102.                                                         $numeroCardi->setEtap12(${'etap'.$champsEntityTab[3]});
  3103.                                                         $this->em->persist($numeroCardi);
  3104.                                                     }else if($champsEntityTab[6] == 'identifiantEnedis'){
  3105.                                                         if(count($numeroCardiEntity)> 0){
  3106.                                                             $numeroCardi = $numeroCardiEntity[0];
  3107.                                                         }else{
  3108.                                                             $numeroCardi = new NumeroCardi();
  3109.                                                         }
  3110.                                                         $numeroCardi->setIdentifiantEnedis($champsValue);
  3111.                                                         $numeroCardi->setEtap12(${'etap'.$champsEntityTab[3]});
  3112.                                                         $this->em->persist($numeroCardi);
  3113.                                                     }
  3114.                                                 }
  3115.                                             }
  3116.                                             if($nameSeteurFiled == "setInformationMultiple"){
  3117.                                                 if(isset($champsEntityTab[6])){
  3118.                                                     if($champsEntityTab[6] == 'numeroContratAchat'){
  3119.                                                         if($etap15){
  3120.                                                             if(count($etap15->getInformationMultiple())> 0){
  3121.                                                                 $value0 = $etap15->getInformationMultiple()[0];
  3122.                                                                 $value0->setNumeroContratAchat($champsValue);
  3123.                                                                 $this->em->persist($value0);
  3124.                                                             }
  3125.                                                             else{
  3126.                                                                 $value0 = new ImfomationContratAchat();
  3127.                                                                 $value0->setNumeroContratAchat($champsValue);
  3128.                                                                 $value0->setEtap15($etap15);
  3129.                                                                 $this->em->persist($value0);
  3130.                                                             }
  3131.                                                         }
  3132.                                                     }
  3133.                                                     if($champsEntityTab[6] == 'typeContrat'){
  3134.                                                         if($etap15){
  3135.                                                             if(count($etap15->getInformationMultiple())> 0){
  3136.                                                                 $value0 = $etap15->getInformationMultiple()[0];
  3137.                                                                 $value0->setTypeContrat($champsValue);
  3138.                                                                 $this->em->persist($value0);
  3139.                                                             }
  3140.                                                             else{
  3141.                                                                 $value0 = new ImfomationContratAchat();
  3142.                                                                 $value0->setTypeContrat($champsValue);
  3143.                                                                 $value0->setEtap15($etap15);
  3144.                                                                 $this->em->persist($value0);
  3145.                                                             }
  3146.                                                         }
  3147.                                                     }
  3148.                                                 }
  3149.                                             }
  3150.                                             if($nameSeteurFiled == "setVisiteTerrainV2"){
  3151.                                                 if(isset($champsEntityTab[6]) && $champsEntityTab[6] == 'dateVisiteTerrain' && $etap23){
  3152.                                                     $dateStrTab = explode("/", $champsValue);
  3153.                                                     if(isset($dateStrTab[2]) && strlen($dateStrTab[2]) == 2){
  3154.                                                         $dateVisite = \DateTime::createFromFormat('d/m/y', $champsValue );
  3155.                                                     }else{
  3156.                                                         $dateVisite = \DateTime::createFromFormat('d/m/Y', $champsValue );
  3157.                                                     }
  3158.                                                     if($dateVisite && count($etap23->getVisiteTerrainV2()) > 0){
  3159.                                                         $visiteTerrainV2 = $etap23->getVisiteTerrainV2()[0];
  3160.                                                         $visiteTerrainV2->setDateVisiteTerrain($dateVisite);
  3161.                                                         $this->em->persist($visiteTerrainV2);
  3162.                                                     }
  3163.                                                 }
  3164.                                             }
  3165.                                         }
  3166.                                     }
  3167.                                 }else{
  3168.                                     if(isset($champsEntityTab[5]) && $champsEntityTab[5] == 1){
  3169.                                         $dateStrTab = explode("/", $champsValue);
  3170.                                         if(isset($dateStrTab[2]) && strlen($dateStrTab[2]) == 2){
  3171.                                             $date = \DateTime::createFromFormat('d/m/y', $champsValue );
  3172.                                         }else{
  3173.                                             $date = \DateTime::createFromFormat('d/m/Y', $champsValue );
  3174.                                         }
  3175.                                         if($date){
  3176.                                             if(method_exists( ${'etap'.$champsEntityTab[3]},$nameSeteurFiled)){
  3177.                                                 ${'etap'.$champsEntityTab[3]}->{$nameSeteurFiled}($date);
  3178.                                             }
  3179.                                             if($nameSeteurFiled == "setDateT0"){
  3180.                                                 $project->setDateT0Date($date);
  3181.                                             }
  3182.                                             if($nameSeteurFiled == "setDateArretePcDp"){
  3183.                                                 $project->setDateArretePc($date);
  3184.                                             }
  3185.                                             if($nameSeteurFiled == "setDateMiseEnService"){
  3186.                                                 $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project'=>$project->getId()]);
  3187.                                                 $etap21 = $this->em->getRepository(Etap21::class)->findOneBy(['project'=>$project->getId()]);
  3188.                                                 $project->setDateMiseEnService($date);
  3189.                                                 $etap14->setDateMiseEnService($date);
  3190.                                                 $etap21->setDateMiseEnService($date);
  3191.                                             }
  3192.                                             if($nameSeteurFiled == "setDateConsuel"){
  3193.                                                 $etap20->setDateConsuelEtap20($date);
  3194.                                             }
  3195.                                             if($nameSeteurFiled == "setDateConsuelEtap20"){
  3196.                                                 $etap20->setDateConsuel($date);
  3197.                                             }
  3198.                                         }
  3199.                                     }else{
  3200.                                         if(method_exists( ${'etap'.$champsEntityTab[3]},$nameSeteurFiled)){
  3201.                                             ${'etap'.$champsEntityTab[3]}->{$nameSeteurFiled}($champsValue);
  3202.                                         }
  3203.                                     }
  3204.                                     if($nameSeteurFiled == "setNumParcelleEtablissement"){
  3205.                                         $project->setNumParcelle($champsValue);
  3206.                                     }
  3207.                                     if($nameSeteurFiled == "setTarifFit"){
  3208.                                         $project->setTarifRevente($champsValue);
  3209.                                     }
  3210.                                     if($nameSeteurFiled == "setLoyerConfirme"){
  3211.                                         $project->setLoyerVise($champsValue);
  3212.                                     }
  3213.                                     if($nameSeteurFiled == "setSoulteConfirme"){
  3214.                                         $project->setSoulteVise($champsValue);
  3215.                                     }
  3216.                                 }
  3217.                             }
  3218.                         }
  3219.                         if(isset($champsEntityTab[1]) && $champsEntityTab[1] != 0){
  3220.                             $nameSeteurFiled = 'set'.ucfirst($champsEntityTab[4]);
  3221.                             $etapEntityClass = 'App\\Entity\\Project';
  3222.                             $classMetadata = $this->em->getClassMetadata($etapEntityClass);
  3223.                             if($classMetadata->hasAssociation($champsEntityTab[4])){
  3224.                                 $associationMappings = $classMetadata->getAssociationMapping($champsEntityTab[4]);
  3225.                                 if($associationMappings && $associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_ONE){
  3226.                                     if($nameSeteurFiled == "setFournisseur"){
  3227.                                         if($project->getSchemaConstruction() == 'EPC'){
  3228.                                             $fournisseur = $this->em->getRepository(Fournisseur::class)->findOneBy(['email'=>$champsValue]);
  3229.                                             if($fournisseur){
  3230.                                                 $this->addEpcFournisseur($project,$fournisseur);
  3231.                                             }
  3232.                                         }
  3233.                                     }else {
  3234.                                         $target = $this->em->getRepository($associationMappings['targetEntity'])->findOneBy(['name' => $champsValue]);
  3235.                                         if ($target) {
  3236.                                             $project->{$nameSeteurFiled}($target);
  3237.                                         }
  3238.                                     }
  3239.                                 }elseif ($associationMappings && $associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  3240.                                     if($nameSeteurFiled == "setCommentProject2"){
  3241.                                         if(isset($champsEntityTab[6])){
  3242.                                             if($champsEntityTab[6] == 'comment'){
  3243.                                                 $entityComment = new CommentProject2();
  3244.                                                 $entityComment->setComment($champsValue);
  3245.                                                 $entityComment->setProject($project);
  3246.                                                 $entityComment->setUser($this->security->getUser());
  3247.                                                 $this->em->persist($entityComment);
  3248.                                             }
  3249.                                         }
  3250.                                     }
  3251.                                     if($nameSeteurFiled == "setResponsableUser"){
  3252.                                         $user = $this->em->getRepository(User::class)->findOneBy(['email'=>$champsValue]);
  3253.                                         if($user){
  3254.                                             $checkResponcableConstructeur = $this->em->getRepository(ResponcablePorject::class)->findOneBy(['responsable'=>$user->getId(),'project'=>$project->getId()]);
  3255.                                            if(!$checkResponcableConstructeur){
  3256.                                                $projectResponsable = new ResponcablePorject();
  3257.                                                $projectResponsable->setResponsable($user);
  3258.                                                $projectResponsable->setProject($project);
  3259.                                                $this->em->persist($projectResponsable);
  3260.                                                $this->em->flush();
  3261.                                            }
  3262.                                         }
  3263.                                     }
  3264.                                     if($nameSeteurFiled == "setFournisseurProject"){
  3265.                                         if(isset($champsEntityTab[5]) && $champsEntityTab[5] == 'Installateur'){
  3266.                                             $fournisseurInstallateur = $this->em->getRepository(Fournisseur::class)->findOneBy(['name'=>$champsValue]);
  3267.                                             if($fournisseurInstallateur){
  3268.                                                 if($project->getSchemaConstruction() == 'Lots séparés') {
  3269.                                                     $fournisseurProjectInstallateur = $this->em->getRepository(FournisseurProject::class)->findOneBy(['fournisseur' => $fournisseurInstallateur->getId(), 'titre' => 'Installateur','project'=>$project->getId()]);
  3270.                                                     if (!$fournisseurProjectInstallateur) {
  3271.                                                         $projectFournisseurInstallateur = new FournisseurProject();
  3272.                                                         $projectFournisseurInstallateur->setFournisseur($fournisseurInstallateur);
  3273.                                                         $projectFournisseurInstallateur->setTitre('Installateur');
  3274.                                                         $projectFournisseurInstallateur->setProject($project);
  3275.                                                         $this->em->persist($projectFournisseurInstallateur);
  3276.                                                         $this->em->flush();
  3277.                                                         $this->addInstalateurCharpentier('Installateur', $project);
  3278.                                                     }
  3279.                                                 }
  3280.                                             }
  3281.                                         }
  3282.                                         if(isset($champsEntityTab[5]) && $champsEntityTab[5] == 'Charpentier'){
  3283.                                             $fournisseurCharpentier = $this->em->getRepository(Fournisseur::class)->findOneBy(['name'=>$champsValue]);
  3284.                                             if($fournisseurCharpentier){
  3285.                                                 if($project->getSchemaConstruction() == 'Lots séparés') {
  3286.                                                     $fournisseurProjectCharpentier = $this->em->getRepository(FournisseurProject::class)->findOneBy(['fournisseur' => $fournisseurCharpentier->getId(), 'titre' => 'Charpentier','project'=>$project->getId()]);
  3287.                                                     if (!$fournisseurProjectCharpentier) {
  3288.                                                         $projectFournisseurCharpentier = new FournisseurProject();
  3289.                                                         $projectFournisseurCharpentier->setFournisseur($fournisseurCharpentier);
  3290.                                                         $projectFournisseurCharpentier->setTitre('Charpentier');
  3291.                                                         $projectFournisseurCharpentier->setProject($project);
  3292.                                                         $this->em->persist($projectFournisseurCharpentier);
  3293.                                                         $this->em->flush();
  3294.                                                         $this->addInstalateurCharpentier('Charpentier', $project);
  3295.                                                     }
  3296.                                                 }
  3297.                                             }
  3298.                                         }
  3299.                                         if(isset($champsEntityTab[5]) && $champsEntityTab[5] == 'Mainteneur'){
  3300.                                             $fournisseurMainteneur = $this->em->getRepository(Fournisseur::class)->findOneBy(['name'=>$champsValue]);
  3301.                                             if($fournisseurMainteneur){
  3302.                                                 $fournisseurProjectMainteneur = $this->em->getRepository(FournisseurProject::class)->findOneBy(['fournisseur' => $fournisseurMainteneur->getId(), 'titre' => 'Mainteneur','project'=>$project->getId()]);
  3303.                                                 if (!$fournisseurProjectMainteneur) {
  3304.                                                     $projectFournisseurMainteneur = new FournisseurProject();
  3305.                                                     $projectFournisseurMainteneur->setFournisseur($fournisseurMainteneur);
  3306.                                                     $projectFournisseurMainteneur->setTitre('Mainteneur');
  3307.                                                     $projectFournisseurMainteneur->setProject($project);
  3308.                                                     $this->em->persist($projectFournisseurMainteneur);
  3309.                                                     $this->em->flush();
  3310.                                                 }
  3311.                                             }
  3312.                                         }
  3313.                                     }
  3314.                                 }elseif ($associationMappings && $associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  3315.                                     $targetManyToMany = $this->em->getRepository($associationMappings['targetEntity'])->findOneBy(['name' => trim($champsValue)]);
  3316.                                     $adderManyToMany = 'add'.ucfirst($champsEntityTab[4]);
  3317.                                     if($targetManyToMany && method_exists($project, $adderManyToMany)){
  3318.                                         $project->{$adderManyToMany}($targetManyToMany);
  3319.                                     }
  3320.                                 }
  3321.                             }else{
  3322.                                 if(isset($champsEntityTab[5]) && $champsEntityTab[5] == 1){
  3323.                                     $dateStrTab = explode("/", $champsValue);
  3324.                                     if(isset($dateStrTab[2]) && strlen($dateStrTab[2]) == 2){
  3325.                                         $date = \DateTime::createFromFormat('d/m/y', $champsValue );
  3326.                                     }else{
  3327.                                         $date = \DateTime::createFromFormat('d/m/Y', $champsValue );
  3328.                                     }
  3329.                                     if($date){
  3330.                                         if(method_exists($project,$nameSeteurFiled)){
  3331.                                             $project->{$nameSeteurFiled}($date);
  3332.                                         }
  3333.                                         if($nameSeteurFiled == "setDateT0Date"){
  3334.                                             $etap9->setDateT0($date);
  3335.                                         }
  3336.                                         if($nameSeteurFiled == "setDateMiseEnService"){
  3337.                                             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project'=>$project->getId()]);
  3338.                                             $etap21 = $this->em->getRepository(Etap21::class)->findOneBy(['project'=>$project->getId()]);
  3339.                                             $project->setDateMiseEnService($date);
  3340.                                             $etap14->setDateMiseEnService($date);
  3341.                                             $etap21->setDateMiseEnService($date);
  3342.                                         }
  3343.                                     }
  3344.                                 }else{
  3345.                                     if($nameSeteurFiled == "setAchatLocation"){
  3346.                                         $achatLocationValue = mb_strtolower(trim($champsValue));
  3347.                                         if($achatLocationValue == 'achat'){
  3348.                                             $project->setAchatLocation(Project::ACHAT);
  3349.                                         }elseif($achatLocationValue == 'location'){
  3350.                                             $project->setAchatLocation(Project::LOCATION);
  3351.                                         }elseif(in_array($achatLocationValue, ['1','2'])){
  3352.                                             $project->setAchatLocation((int)$achatLocationValue);
  3353.                                         }
  3354.                                     }elseif(method_exists($project,$nameSeteurFiled)){
  3355.                                         if(trim($champsValue)){
  3356.                                             $project->{$nameSeteurFiled}(trim($champsValue));
  3357.                                             if($nameSeteurFiled == "setNumParcelle"){
  3358.                                                 $etap8->setNumParcelleEtablissement($champsValue);
  3359.                                             }
  3360.                                         }
  3361.                                         if($nameSeteurFiled == "setStadeConstruction"){
  3362.                                             $project->{$nameSeteurFiled}(trim($champsValue));
  3363.                                             $project->setStadeConstructionDate(new \DateTime());
  3364.                                         }
  3365.                                     }
  3366.                                 }
  3367.                             }
  3368.                         }
  3369.                         $this->em->persist($etap1);
  3370.                         $this->em->persist($etap2);
  3371.                         $this->em->persist($etap3);
  3372.                         $this->em->persist($etap4);
  3373.                         $this->em->persist($etap5);
  3374.                         $this->em->persist($etap6);
  3375.                         $this->em->persist($etap7);
  3376.                         $this->em->persist($etap8);
  3377.                         $this->em->persist($etap9);
  3378.                         $this->em->persist($etap10);
  3379.                         $this->em->persist($etap11);
  3380.                         $this->em->persist($etap12);
  3381.                         $this->em->persist($etap13);
  3382.                         $this->em->persist($etap14);
  3383.                         $this->em->persist($etap15);
  3384.                         $this->em->persist($etap16);
  3385.                         $this->em->persist($etap17);
  3386.                         $this->em->persist($etap18);
  3387.                         $this->em->persist($etap19);
  3388.                         $this->em->persist($etap20);
  3389.                         $this->em->persist($etap21);
  3390.                         $this->em->persist($etap22);
  3391.                         $this->em->persist($etap160);
  3392.                         $this->em->persist($etap161);
  3393.                         $this->em->persist($etap171);
  3394.                         $this->em->persist($etap172);
  3395.                         $this->em->persist($etap173);
  3396.                         $this->em->persist($etap174);
  3397.                         $this->em->persist($etap175);
  3398.                         $this->em->persist($etap159);
  3399.                         if($etap0){
  3400.                             $this->em->persist($etap0);
  3401.                         }
  3402.                         if($etap23){
  3403.                             $this->em->persist($etap23);
  3404.                         }
  3405.                         if($etap80){
  3406.                             $this->em->persist($etap80);
  3407.                         }
  3408.                         if($etap121){
  3409.                             $this->em->persist($etap121);
  3410.                         }
  3411.                         if($etap601){
  3412.                             $this->em->persist($etap601);
  3413.                         }
  3414.                         if($etap602){
  3415.                             $this->em->persist($etap602);
  3416.                         }
  3417.                         $this->em->persist($project);
  3418.                         $this->em->flush();
  3419.                         $this->etapsService->updateStatusTracker($project); // set status tracker
  3420.                     }
  3421.                 }
  3422.             }
  3423.         }
  3424.     }
  3425.     public function importProjectsDev5($filename)
  3426.     {
  3427.         $file = $this->params->get('uploads_directory')."/".$filename;
  3428.         $array = [];
  3429.         $f = fopen($file, "r");
  3430.         $flag = true;
  3431.         $i = 0;
  3432.         $header = [];
  3433.         while (($line = fgetcsv($f,0,";")) !== false) {
  3434.             if($flag) {
  3435.                 $header = [];
  3436.                 foreach ($line as $cell) {
  3437.                     $header[] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  3438.                 }
  3439.                 $flag = false;
  3440.                 continue;
  3441.             }
  3442.             foreach ($line as $key => $cell) {
  3443.                 $array[$i][$header[$key]] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  3444.             }
  3445.             $i++ ;
  3446.         }
  3447.         fclose($f);
  3448.         foreach ($array as &$item){
  3449.             if(isset($item['Nom du projet'])){
  3450.                 $name = $item['Nom du projet'];
  3451.                 $project = $this->em->getRepository(Project::class)->findOneBy(['name'=>$name]);
  3452.                 if($project){
  3453.                     $this->etapsService->updateStatusTracker($project,true); // set status tracker
  3454.                     $item['action'] = 1;
  3455.                 }else{
  3456.                     $item['action'] = 0;
  3457.                 }
  3458.             }else{
  3459.                 $item['action'] = 0;
  3460.             }
  3461.         }
  3462.         return ['headerTab' => $header,'bodyTab'=>$array];
  3463.     }
  3464.     public function getRapportData($date1,$date2,$developpeur=null){
  3465.         $dev0 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_0,$developpeur);
  3466.         $dev1 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_1,$developpeur);
  3467.         $dev2 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_2,$developpeur);
  3468.         $dev3 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_3,$developpeur);
  3469.         $dev4 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_4,$developpeur);
  3470.         $dev5 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_5,$developpeur);
  3471.         $dev6 = $this->getDataRapportByStatusAndDate($date1,$date2,StatusTracker::STATUS_dev_6,$developpeur);
  3472.         $miseEnserviceProjects = $this->em->getRepository(Project::class)->findAllProjectActiveMiseEnService($date1,$date2,$developpeur);
  3473.         $stadeConstructionProjects = $this->em->getRepository(Project::class)->findAllProjectByStadeConstruction('Go consultation',$date1,$date2,$developpeur);
  3474.         $bailSignesProjects = $this->em->getRepository(Project::class)->findAllProjectActiveBailSigne($date1,$date2,$developpeur);
  3475.         $archivesProjects = $this->em->getRepository(Project::class)->findAllArchives($date1,$date2,$developpeur);
  3476.         $annulesProjects = $this->em->getRepository(Project::class)->findAllAnnules($date1,$date2,$developpeur);
  3477.         $newProjects = $this->em->getRepository(Project::class)->findAllProjectActiveNew($date1,$date2,$developpeur);
  3478.         $statuDev0CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev0['date1Result']);
  3479.         $statuDev0CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev0['date2Result']);
  3480.         $statuDev1CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev1['date1Result']);
  3481.         $statuDev1CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev1['date2Result']);
  3482.         $statuDev2CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev2['date1Result']);
  3483.         $statuDev2CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev2['date2Result']);
  3484.         $statuDev3CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev3['date1Result']);
  3485.         $statuDev3CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev3['date2Result']);
  3486.         $statuDev4CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev4['date1Result']);
  3487.         $statuDev4CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev4['date2Result']);
  3488.         $statuDev5CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev5['date1Result']);
  3489.         $statuDev5CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev5['date2Result']);
  3490.         $statuDev6CapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($dev6['date1Result']);
  3491.         $statuDev6CapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($dev6['date2Result']);
  3492.         $arrayCapacite = [
  3493.             'statusDev0' => [
  3494.                 'date1' => $statuDev0CapaciteDate1,
  3495.                 'date2' => $statuDev0CapaciteDate2
  3496.             ],
  3497.             'statusDev1' => [
  3498.                 'date1' => $statuDev1CapaciteDate1,
  3499.                 'date2' => $statuDev1CapaciteDate2
  3500.             ],
  3501.             'statusDev2' => [
  3502.                 'date1' => $statuDev2CapaciteDate1,
  3503.                 'date2' => $statuDev2CapaciteDate2
  3504.             ],
  3505.             'statusDev3' => [
  3506.                 'date1' => $statuDev3CapaciteDate1,
  3507.                 'date2' => $statuDev3CapaciteDate2
  3508.             ],
  3509.             'statusDev4' => [
  3510.                 'date1' => $statuDev4CapaciteDate1,
  3511.                 'date2' => $statuDev4CapaciteDate2
  3512.             ],
  3513.             'statusDev5' => [
  3514.                 'date1' => $statuDev5CapaciteDate1,
  3515.                 'date2' => $statuDev5CapaciteDate2
  3516.             ],
  3517.             'statusDev6' => [
  3518.                 'date1' => $statuDev6CapaciteDate1,
  3519.                 'date2' => $statuDev6CapaciteDate2
  3520.             ]
  3521.         ] ;
  3522.         return [
  3523.             'rapportDev0' => $dev0,
  3524.             'rapportDev1' => $dev1,
  3525.             'rapportDev2' => $dev2,
  3526.             'rapportDev3' => $dev3,
  3527.             'rapportDev4' => $dev4,
  3528.             'rapportDev5' => $dev5,
  3529.             'rapportDev6' => $dev6,
  3530.             'arrayCapacite' => $arrayCapacite,
  3531.             'totalCapaciteDate1' =>  floatval($statuDev0CapaciteDate1) + floatval($statuDev1CapaciteDate1) + floatval($statuDev2CapaciteDate1) +floatval($statuDev3CapaciteDate1) +floatval($statuDev4CapaciteDate1) +floatval($statuDev5CapaciteDate1) + floatval($statuDev6CapaciteDate1),
  3532.             'totalCapaciteDate2' =>  floatval($statuDev0CapaciteDate2) + floatval($statuDev1CapaciteDate2) + floatval($statuDev2CapaciteDate2) +floatval($statuDev3CapaciteDate2) +floatval($statuDev4CapaciteDate2) +floatval($statuDev5CapaciteDate2) + floatval($statuDev6CapaciteDate2),
  3533.             'totalDate1' => count($dev0['date1Result']) + count($dev1['date1Result']) + count($dev2['date1Result']) + count($dev3['date1Result']) + count($dev4['date1Result']) + count($dev5['date1Result']) + count($dev6['date1Result']) ,
  3534.             'totalDate2' =>  count($dev0['date2Result']) + count($dev1['date2Result']) + count($dev2['date2Result']) + count($dev3['date2Result']) + count($dev4['date2Result']) +count($dev5['date2Result']) + count($dev6['date2Result']) ,
  3535.             'date' => $date1,
  3536.             'date2' => $date2,
  3537.             'alertRapportTab' => $this->getAlertRapportTab($developpeur),
  3538.             'alertRapportTabAnnexe' => $this->getAlertRapportTabAnnexe($developpeur),
  3539.             'alertRapportTabDevs' => $this->getAlertRapportTabDevs($developpeur),
  3540.             'miseEnserviceProjects' => $miseEnserviceProjects,
  3541.             'bailSignesProjects' => $bailSignesProjects,
  3542.             'archivesProjects' => $archivesProjects,
  3543.             'annulesProjects' => $annulesProjects,
  3544.             'stadeConstructionProjects' => $stadeConstructionProjects,
  3545.             'developpeur' => $developpeur,
  3546.             'newProjects' => $newProjects,
  3547.         ];
  3548.     }
  3549.     public function getAlertRapportTab($developpeur = null,$responsableConstruction=null,$spv=null,$schemaConstruction=null){
  3550.         $alertT0Noires = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3551.         $alertPDBNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3552.         $alertPCDPNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3553.         $alertT0Rouges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3554.         $alertPDBRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3555.         $alertPCDPRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3556.         $alertT0Oranges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3557.         $alertPDBOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3558.         $alertPCDPOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3559.         $arrays = [];
  3560.         foreach ($alertT0Noires as $item){
  3561.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3562.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['T0']['project'][] = $item->getProject();
  3563.         }
  3564.         foreach ($alertPDBNoires as $item){
  3565.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3566.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PDB']['project'][] = $item->getProject();
  3567.         }
  3568.         foreach ($alertPCDPNoires as $item){
  3569.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3570.             $arrays['alertNoire'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PCDP']['project'][] = $item->getProject();
  3571.         }
  3572.         foreach ($alertT0Rouges as $item){
  3573.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3574.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['T0']['project'][] = $item->getProject();
  3575.         }
  3576.         foreach ($alertPDBRouges as $item){
  3577.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3578.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PDB']['project'][] = $item->getProject();
  3579.         }
  3580.         foreach ($alertPCDPRouges as $item){
  3581.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3582.             $arrays['alertRouge'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PCDP']['project'][] = $item->getProject();
  3583.         }
  3584.         foreach ($alertT0Oranges as $item){
  3585.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3586.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['T0']['project'][] = $item->getProject();
  3587.         }
  3588.         foreach ($alertPDBOranges as $item){
  3589.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3590.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PDB']['project'][] = $item->getProject();
  3591.         }
  3592.         foreach ($alertPCDPOranges as $item){
  3593.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3594.             $arrays['alertOrange'][$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['PCDP']['project'][] = $item->getProject();
  3595.         }
  3596.         if(isset($arrays['alertNoire'])){
  3597.             foreach ($arrays['alertNoire'] as &$item){
  3598.                 $item = $this->getMaxValueTabAlert($item);
  3599.             }
  3600.         }
  3601.         if(isset($arrays['alertRouge'])){
  3602.             foreach ($arrays['alertRouge'] as &$item){
  3603.                 $item =$this->getMaxValueTabAlert($item);
  3604.             }
  3605.         }
  3606.         if(isset($arrays['alertOrange'])){
  3607.             foreach ($arrays['alertOrange'] as &$item){
  3608.                 $item = $this->getMaxValueTabAlert($item);
  3609.             }
  3610.         }
  3611.         return $arrays;
  3612.     }
  3613.     private function getMaxValueTabAlert(&$item){
  3614.         $tab = [];
  3615.         if(isset($item['T0'])){
  3616.             $tab[] = count($item['T0']['project']);
  3617.         }
  3618.         if(isset($item['PDB'])){
  3619.             $tab[] = count($item['PDB']['project']);
  3620.         }
  3621.         if(isset($item['PCDP'])){
  3622.             $tab[] = count($item['PCDP']['project']);
  3623.         }
  3624.         if($tab){
  3625.             $heightGlobal = 189;
  3626.             $max = max($tab);
  3627.             $item['max'] = $max;
  3628.             if(isset($item['T0'])){
  3629.                 $item['T0']['count'] = count($item['T0']['project']);
  3630.                 $item['T0']['pourcentage'] = (count($item['T0']['project']) / $max) *100;
  3631.                 $item['T0']['height'] = (((count($item['T0']['project']) / $max) *100) / 100) *$heightGlobal;
  3632.             }
  3633.             if(isset($item['PDB'])){
  3634.                 $item['PDB']['count'] = count($item['PDB']['project']);
  3635.                 $item['PDB']['pourcentage'] = (count($item['PDB']['project']) / $max) *100;
  3636.                 $item['PDB']['height'] = (((count($item['PDB']['project']) / $max) *100) / 100) *$heightGlobal;
  3637.             }
  3638.             if(isset($item['PCDP'])){
  3639.                 $item['PCDP']['count'] = count($item['PCDP']['project']);
  3640.                 $item['PCDP']['pourcentage'] = (count($item['PCDP']['project']) / $max) *100;
  3641.                 $item['PCDP']['height'] = (((count($item['PCDP']['project']) / $max) *100) / 100) *$heightGlobal;
  3642.             }
  3643.         }
  3644.         return $item;
  3645.     }
  3646.     public function getAlertRapportTabDevs($developpeur = null,$responsableConstruction=null,$spv=null,$schemaConstruction=null)
  3647.     {
  3648.         $alertT0Noires = $this->em->getRepository(AlertRapport::class)->findByStatut('T0', AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3649.         $alertPDBNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB', AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3650.         $alertPCDPNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP', AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3651.         $alertT0Rouges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0', AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3652.         $alertPDBRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB', AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3653.         $alertPCDPRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP', AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3654.         $alertT0Oranges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0', AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3655.         $alertPDBOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB', AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3656.         $alertPCDPOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP', AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3657.         $arrays = [];
  3658.         foreach ($alertT0Noires as $item){
  3659.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3660.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3661.         }
  3662.         foreach ($alertPDBNoires as $item){
  3663.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3664.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3665.         }
  3666.         foreach ($alertPCDPNoires as $item){
  3667.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3668.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3669.         }
  3670.         foreach ($alertT0Rouges as $item){
  3671.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3672.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3673.         }
  3674.         foreach ($alertPDBRouges as $item){
  3675.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3676.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3677.         }
  3678.         foreach ($alertPCDPRouges as $item){
  3679.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3680.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3681.         }
  3682.         foreach ($alertT0Oranges as $item){
  3683.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3684.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3685.         }
  3686.         foreach ($alertPDBOranges as $item){
  3687.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3688.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3689.         }
  3690.         foreach ($alertPCDPOranges as $item){
  3691.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3692.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['id']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0 ;
  3693.         }
  3694.         return $arrays;
  3695.     }
  3696.      public function getAlertRapportTabAnnexe($developpeur = null,$responsableConstruction=null,$spv=null,$schemaConstruction=null){
  3697.         $alertT0Noires = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3698.         $alertPDBNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3699.         $alertPCDPNoires = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_noire,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3700.         $alertT0Rouges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3701.         $alertPDBRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3702.         $alertPCDPRouges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_rouge,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3703.         $alertT0Oranges = $this->em->getRepository(AlertRapport::class)->findByStatut('T0',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3704.         $alertPDBOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PDB',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3705.         $alertPCDPOranges = $this->em->getRepository(AlertRapport::class)->findByStatut('PCDP',AlertRapport::statut_orange,$developpeur,$responsableConstruction,$spv,$schemaConstruction);
  3706.         $arrays = [];
  3707.         foreach ($alertT0Noires as $item){
  3708.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3709.             $tab = [];
  3710.             $tab['statusCustom'] = 'Alerte T0';
  3711.             $tab['project'] = $item->getProject();
  3712.             $tab['dateFin'] = $item->getDateFinT0();
  3713.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertNoire'][] = $tab;
  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.             $tab = [];
  3718.             $tab['statusCustom'] = 'Alerte PDB';
  3719.             $tab['project'] = $item->getProject();
  3720.             $tab['dateFin'] = $item->getDateFinPDB();
  3721.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertNoire'][] = $tab;
  3722.         }
  3723.         foreach ($alertPCDPNoires 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.             $tab = [];
  3726.             $tab['statusCustom'] = 'Alerte PC/DP';
  3727.             $tab['project'] = $item->getProject();
  3728.             $tab['dateFin'] = $item->getDateFinPCDP();
  3729.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertNoire'][] =$tab;
  3730.         }
  3731.         foreach ($alertT0Rouges 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.             $tab = [];
  3734.             $tab['statusCustom'] = 'Alerte T0';
  3735.             $tab['project'] = $item->getProject();
  3736.             $tab['dateFin'] = $item->getDateFinT0();
  3737.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertRouge'][] = $tab;
  3738.         }
  3739.         foreach ($alertPDBRouges 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.             $tab = [];
  3742.             $tab['statusCustom'] = 'Alerte PDB';
  3743.             $tab['project'] = $item->getProject();
  3744.             $tab['dateFin'] = $item->getDateFinPDB();
  3745.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertRouge'] = $tab;
  3746.         }
  3747.         foreach ($alertPCDPRouges as $item){
  3748.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3749.             $tab = [];
  3750.             $tab['statusCustom'] = 'Alerte PC/DP';
  3751.             $tab['project'] = $item->getProject();
  3752.             $tab['dateFin'] = $item->getDateFinPCDP();
  3753.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertRouge'][] = $tab;
  3754.         }
  3755.         foreach ($alertT0Oranges as $item){
  3756.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3757.             $tab = [];
  3758.             $tab['statusCustom'] = 'Alerte T0';
  3759.             $tab['project'] = $item->getProject();
  3760.             $tab['dateFin'] = $item->getDateFinT0();
  3761.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertOrange'][] = $tab;
  3762.         }
  3763.         foreach ($alertPDBOranges as $item){
  3764.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3765.             $tab = [];
  3766.             $tab['statusCustom'] = 'Alerte PDB';
  3767.             $tab['project'] = $item->getProject();
  3768.             $tab['dateFin'] = $item->getDateFinPDB();
  3769.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertOrange'][] = $tab;
  3770.         }
  3771.         foreach ($alertPCDPOranges as $item){
  3772.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['dev']= $item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getFirstname().' '.$item->getProject()->getDeveloppeur()->getLastname(): ' -- ' ;
  3773.             $tab = [];
  3774.             $tab['statusCustom'] = 'Alerte PC/DP';
  3775.             $tab['project'] = $item->getProject();
  3776.             $tab['dateFin'] = $item->getDateFinPCDP();
  3777.             $arrays[$item->getProject()->getDeveloppeur()?$item->getProject()->getDeveloppeur()->getId():0]['alertOrange'][] = $tab;
  3778.         }
  3779.         return $arrays;
  3780.     }
  3781.     public function getRapportConstructionData($date1,$date2,$responsableConstruction=null,$spv=null,$schemaConstruction=null,$constructeurRapport =null){
  3782.         $statusGo_Consultation = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Go_Consultation,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3783.         $statusAttente_Devis = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Attente_Devis,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3784.         $statusBudget_Capex = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Budget_Capex,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3785.         $statusContrat_Construction = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Contrat_Construction,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3786.         $statusOrder_demarrage_envoye = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Order_demarrage_envoye,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3787.         $statusConstruction_Demarree = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Construction_Demarree,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3788.         $statusConstruction_Achevee_Non_Raccordable = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Construction_Achevee_Non_Raccordable,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3789.         $statusConstruction_Achevee_A_Raccorder = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Construction_Achevee_A_Raccorder,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3790.         $statusConstruction_Achevee_Raccordee = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Construction_Achevee_Raccordee,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3791.         $statusPassage_dre = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Passage_dre,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3792.         $statusConsuel_obtenu = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Consuel_obtenu,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3793.         $statusOperating = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Operating,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3794.         $statusBillable = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Billable,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3795.         $statusInvoiced = $this->getDataRapportConstructionByStatusAndDate($date1,$date2,StatusTrackerConstruction::Invoiced,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3796.         $statusGo_ConsultationCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusGo_Consultation['date1Result']);
  3797.         $statusGo_ConsultationCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusGo_Consultation['date2Result']);
  3798.         $statusAttente_DevisCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusAttente_Devis['date1Result']);
  3799.         $statusAttente_DevisCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusAttente_Devis['date2Result']);
  3800.         $statusBudget_CapexCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusBudget_Capex['date1Result']);
  3801.         $statusBudget_CapexCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusBudget_Capex['date2Result']);
  3802.         $statusContrat_ConstructionCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusContrat_Construction['date1Result']);
  3803.         $statusContrat_ConstructionCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusContrat_Construction['date2Result']);
  3804.         $statusOrder_demarrage_envoyeCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusOrder_demarrage_envoye['date1Result']);
  3805.         $statusOrder_demarrage_envoyeCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusOrder_demarrage_envoye['date2Result']);
  3806.         $statusConstruction_DemarreeCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Demarree['date1Result']);
  3807.         $statusConstruction_DemarreeCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Demarree['date2Result']);
  3808.         $statusConstruction_Achevee_Non_RaccordableCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_Non_Raccordable['date1Result']);
  3809.         $statusConstruction_Achevee_Non_RaccordableCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_Non_Raccordable['date2Result']);
  3810.         $statusConstruction_Achevee_A_RaccorderCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_A_Raccorder['date1Result']);
  3811.         $statusConstruction_Achevee_A_RaccorderCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_A_Raccorder['date2Result']);
  3812.         $statusConstruction_Achevee_RaccordeeCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_Raccordee['date1Result']);
  3813.         $statusConstruction_Achevee_RaccordeeCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusConstruction_Achevee_Raccordee['date2Result']);
  3814.         $statusPassage_dreCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusPassage_dre['date1Result']);
  3815.         $statusPassage_dreCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusPassage_dre['date2Result']);
  3816.         $statusConsuel_obtenuCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusConsuel_obtenu['date1Result']);
  3817.         $statusConsuel_obtenuCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusConsuel_obtenu['date2Result']);
  3818.         $statusOperatingCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusOperating['date1Result']);
  3819.         $statusOperatingCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusOperating['date2Result']);
  3820.         $statusBillableCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusBillable['date1Result']);
  3821.         $statusBillableCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusBillable['date2Result']);
  3822.         $statusInvoicedCapaciteDate1 = $this->getCapaciteByStatusTrackerConstruction($statusInvoiced['date1Result']);
  3823.         $statusInvoicedCapaciteDate2 = $this->getCapaciteByStatusTrackerConstruction($statusInvoiced['date2Result']);
  3824.         $arrayCapacite = [
  3825.             'statusGo_Consultation' => [
  3826.                 'date1' => $statusGo_ConsultationCapaciteDate1,
  3827.                 'date2' => $statusGo_ConsultationCapaciteDate2
  3828.             ],
  3829.             'statusAttente_Devis' => [
  3830.                 'date1' => $statusAttente_DevisCapaciteDate1,
  3831.                 'date2' => $statusAttente_DevisCapaciteDate2
  3832.             ],
  3833.             'statusBudget_Capex' => [
  3834.                 'date1' => $statusBudget_CapexCapaciteDate1,
  3835.                 'date2' => $statusBudget_CapexCapaciteDate2
  3836.             ],
  3837.             'statusContrat_Construction' => [
  3838.                 'date1' => $statusContrat_ConstructionCapaciteDate1,
  3839.                 'date2' => $statusContrat_ConstructionCapaciteDate2
  3840.             ],
  3841.             'statusOrder_demarrage_envoye' => [
  3842.                 'date1' => $statusOrder_demarrage_envoyeCapaciteDate1,
  3843.                 'date2' => $statusOrder_demarrage_envoyeCapaciteDate2
  3844.             ],
  3845.             'statusConstruction_Demarree' => [
  3846.                 'date1' => $statusConstruction_DemarreeCapaciteDate1,
  3847.                 'date2' => $statusConstruction_DemarreeCapaciteDate2
  3848.             ],
  3849.             'statusConstruction_Achevee_Non_Raccordable' => [
  3850.                 'date1' => $statusConstruction_Achevee_Non_RaccordableCapaciteDate1,
  3851.                 'date2' => $statusConstruction_Achevee_Non_RaccordableCapaciteDate2
  3852.             ],
  3853.             'statusConstruction_Achevee_A_Raccorder' => [
  3854.                 'date1' => $statusConstruction_Achevee_A_RaccorderCapaciteDate1,
  3855.                 'date2' => $statusConstruction_Achevee_A_RaccorderCapaciteDate2
  3856.             ],
  3857.             'statusConstruction_Achevee_Raccordee' => [
  3858.                 'date1' => $statusConstruction_Achevee_RaccordeeCapaciteDate1,
  3859.                 'date2' => $statusConstruction_Achevee_RaccordeeCapaciteDate2
  3860.             ],
  3861.             'statusPassage_dre' => [
  3862.                 'date1' => $statusPassage_dreCapaciteDate1,
  3863.                 'date2' => $statusPassage_dreCapaciteDate2
  3864.             ],
  3865.             'statusConsuel_obtenu' => [
  3866.                 'date1' => $statusConsuel_obtenuCapaciteDate1,
  3867.                 'date2' => $statusConsuel_obtenuCapaciteDate2
  3868.             ],
  3869.             'statusOperating' => [
  3870.                 'date1' => $statusOperatingCapaciteDate1,
  3871.                 'date2' => $statusOperatingCapaciteDate2
  3872.             ],
  3873.             'statusBillable' => [
  3874.                 'date1' => $statusBillableCapaciteDate1,
  3875.                 'date2' => $statusBillableCapaciteDate2
  3876.             ]
  3877.             ,
  3878.             'statusInvoiced' => [
  3879.                 'date1' => $statusInvoicedCapaciteDate1,
  3880.                 'date2' => $statusInvoicedCapaciteDate2
  3881.             ]
  3882.         ] ;
  3883.         $totalDeveloppement = [
  3884.             'date1' => [
  3885.                 'project'=> count($statusGo_Consultation['date1Result']) + count($statusAttente_Devis['date1Result']) + count($statusBudget_Capex['date1Result']) + count($statusContrat_Construction['date1Result']) + count($statusOrder_demarrage_envoye['date1Result']) ,
  3886.                 'capacite'=> floatval($statusGo_ConsultationCapaciteDate1) + floatval($statusAttente_DevisCapaciteDate1) + floatval($statusBudget_CapexCapaciteDate1) +floatval($statusContrat_ConstructionCapaciteDate1) +floatval($statusOrder_demarrage_envoyeCapaciteDate1)
  3887.             ],
  3888.             'date2' => [
  3889.                 'project'=> count($statusGo_Consultation['date2Result']) + count($statusAttente_Devis['date2Result']) + count($statusBudget_Capex['date2Result']) + count($statusContrat_Construction['date2Result']) + count($statusOrder_demarrage_envoye['date2Result']) ,
  3890.                 'capacite'=> floatval($statusGo_ConsultationCapaciteDate2) + floatval($statusAttente_DevisCapaciteDate2) + floatval($statusBudget_CapexCapaciteDate2) +floatval($statusContrat_ConstructionCapaciteDate2) +floatval($statusOrder_demarrage_envoyeCapaciteDate2)
  3891.             ]
  3892.         ];
  3893.         $totalConstruction = [
  3894.             'date1' => [
  3895.                 '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']) ,
  3896.                 'capacite'=> floatval($statusConstruction_DemarreeCapaciteDate1) + floatval($statusConstruction_Achevee_Non_RaccordableCapaciteDate1) + floatval($statusConstruction_Achevee_A_RaccorderCapaciteDate1) +floatval($statusConstruction_Achevee_RaccordeeCapaciteDate1) +floatval($statusPassage_dreCapaciteDate1) +floatval($statusConsuel_obtenuCapaciteDate1)
  3897.             ],
  3898.             'date2' => [
  3899.                 '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']) ,
  3900.                 'capacite'=> floatval($statusConstruction_DemarreeCapaciteDate2) + floatval($statusConstruction_Achevee_Non_RaccordableCapaciteDate2) + floatval($statusConstruction_Achevee_A_RaccorderCapaciteDate2) +floatval($statusConstruction_Achevee_RaccordeeCapaciteDate2) +floatval($statusPassage_dreCapaciteDate2) +floatval($statusConsuel_obtenuCapaciteDate2)
  3901.             ]
  3902.         ];
  3903.         $totalOperation = [
  3904.             'date1' => [
  3905.                 'project'=> count($statusOperating['date1Result']) + count($statusBillable['date1Result']) + count($statusInvoiced['date1Result']) ,
  3906.                 'capacite'=> floatval($statusOperatingCapaciteDate1) + floatval($statusBillableCapaciteDate1) + floatval($statusInvoicedCapaciteDate1)
  3907.             ],
  3908.             'date2' => [
  3909.                 'project'=> count($statusOperating['date2Result']) + count($statusBillable['date2Result']) + count($statusInvoiced['date2Result']) ,
  3910.                 'capacite'=> floatval($statusOperatingCapaciteDate2) + floatval($statusBillableCapaciteDate2) + floatval($statusInvoicedCapaciteDate2)
  3911.             ]
  3912.         ];
  3913.         $miseEnserviceProjects = $this->em->getRepository(Project::class)->findAllProjectActiveMiseEnService($date1,$date2,null,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3914.         $stadeConstructionProjects = $this->em->getRepository(Project::class)->findAllProjectByStadeConstruction('Go consultation',$date1,$date2,null);
  3915.         $bailSignesProjects = $this->em->getRepository(Project::class)->findAllProjectActiveBailSigne($date1,$date2,null,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3916.         $archivesProjects = $this->em->getRepository(Project::class)->findAllArchives($date1,$date2,null,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3917.         $annulesProjects = $this->em->getRepository(Project::class)->findAllAnnules($date1,$date2,null,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3918.         $newProjects = $this->em->getRepository(Project::class)->findAllProjectActiveNew($date1,$date2,null,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  3919.         return [
  3920.             'rapportGo_Consultation' => $statusGo_Consultation,
  3921.             'rapportAttente_Devis' => $statusAttente_Devis,
  3922.             'rapportBudget_Capex' => $statusBudget_Capex,
  3923.             'rapportContrat_Construction' => $statusContrat_Construction,
  3924.             'rapportOrder_demarrage_envoye' => $statusOrder_demarrage_envoye,
  3925.             'rapportConstruction_Demarree' => $statusConstruction_Demarree,
  3926.             'rapportConstruction_Achevee_Non_Raccordable' => $statusConstruction_Achevee_Non_Raccordable,
  3927.             'rapportConstruction_Achevee_A_Raccorder' => $statusConstruction_Achevee_A_Raccorder,
  3928.             'rapportConstruction_Achevee_Raccordee' => $statusConstruction_Achevee_Raccordee,
  3929.             'rapportPassage_dre' => $statusPassage_dre,
  3930.             'rapportConsuel_obtenu' => $statusConsuel_obtenu,
  3931.             'rapportOperating' => $statusOperating,
  3932.             'rapportBillable' => $statusBillable,
  3933.             'rapportInvoiced' => $statusInvoiced,
  3934.             'arrayCapacite' => $arrayCapacite,
  3935.             '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'])  ,
  3936.             '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']),
  3937.             '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),
  3938.             '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),
  3939.             'date' => $date1,
  3940.             'date2' => $date2,
  3941.             'totalDeveloppement' => $totalDeveloppement,
  3942.             'totalConstruction' => $totalConstruction,
  3943.             'totalOperation' => $totalOperation,
  3944.             'alertRapportTab' => $this->getAlertRapportTab(null,$responsableConstruction,$spv,$schemaConstruction),
  3945.             'alertRapportTabAnnexe' => $this->getAlertRapportTabAnnexe(null,$responsableConstruction,$spv,$schemaConstruction),
  3946.             'alertRapportTabDevs' => $this->getAlertRapportTabDevs(null,$responsableConstruction,$spv,$schemaConstruction),
  3947.             'miseEnserviceProjects' => $miseEnserviceProjects,
  3948.             'bailSignesProjects' => $bailSignesProjects,
  3949.             'archivesProjects' => $archivesProjects,
  3950.             'annulesProjects' => $annulesProjects,
  3951.             'stadeConstructionProjects' => $stadeConstructionProjects,
  3952.             'developpeur' => null,
  3953.             'responsable' => $responsableConstruction ? $this->em->getRepository(User::class)->find($responsableConstruction):null,
  3954.             'newProjects' => $newProjects,
  3955.         ];
  3956.     }
  3957.     public function  getStatusTrackerStr($status){
  3958.         if($status == StatusTracker::STATUS_dev_0){
  3959.             return 'Dev. 0 (Under instruction)' ;
  3960.         }elseif($status == StatusTracker::STATUS_dev_1){
  3961.             return 'Dev. 1 (PC accepted)' ;
  3962.         }elseif ($status == StatusTracker::STATUS_dev_2){
  3963.             return 'Dev. 2 (Grid connection agreement received)' ;
  3964.         }elseif ($status == StatusTracker::STATUS_dev_3){
  3965.             return 'Dev. 3 (full permissions RtB)' ;
  3966.         }elseif ($status == StatusTracker::STATUS_dev_4){
  3967.             return 'Dev. 4 (Erection EPC lauched)' ;
  3968.         }elseif ($status == StatusTracker::STATUS_dev_5){
  3969.             return 'Dev. 5 (Construction complete)' ;
  3970.         }elseif ($status == StatusTracker::STATUS_dev_6){
  3971.             return 'Dev. 6 (Commissioned)' ;
  3972.         }elseif ($status == StatusTracker::STATUS_operating){
  3973.             return 'Operating' ;
  3974.         }else {
  3975.             return '-';
  3976.         }
  3977.     }
  3978.     public function getStatusTrackerConstructionStr($status){
  3979.             if($status == StatusTrackerConstruction::Go_Consultation){
  3980.                 return 'Go consultation' ;
  3981.             }elseif($status == StatusTrackerConstruction::Attente_Devis){
  3982.                 return 'Attente devis' ;
  3983.             }elseif ($status == StatusTrackerConstruction::Budget_Capex){
  3984.                 return 'Budget / Capex validé' ;
  3985.             }elseif ($status == StatusTrackerConstruction::Contrat_Construction){
  3986.                 return 'Contrat de construction signé' ;
  3987.             }elseif ($status == StatusTrackerConstruction::Order_demarrage_envoye){
  3988.                 return 'Ordre de démarrage envoyé' ;
  3989.             }elseif ($status == StatusTrackerConstruction::Construction_Demarree){
  3990.                 return 'Construction Démarrée' ;
  3991.             }elseif ($status == StatusTrackerConstruction::Construction_Achevee_Non_Raccordable){
  3992.                 return 'Construction Achevée Non Raccordable' ;
  3993.             }elseif ($status == StatusTrackerConstruction::Construction_Achevee_A_Raccorder){
  3994.                 return 'Construction Achevée à Raccorder' ;
  3995.             }elseif ($status == StatusTrackerConstruction::Construction_Achevee_Raccordee){
  3996.                 return 'Construction Achevée Raccordée' ;
  3997.             }elseif ($status == StatusTrackerConstruction::Passage_dre){
  3998.                 return 'DRE Obtenu' ;
  3999.             }elseif ($status == StatusTrackerConstruction::Consuel_obtenu){
  4000.                 return 'Consuel obtenu' ;
  4001.             }elseif ($status == StatusTrackerConstruction::Operating){
  4002.                 return 'Operation' ;
  4003.             }elseif ($status == StatusTrackerConstruction::Billable){
  4004.                 return 'Billable' ;
  4005.             }elseif ($status == StatusTrackerConstruction::Invoiced){
  4006.                 return 'Invoiced' ;
  4007.             }else {
  4008.                 return '';
  4009.             }
  4010.     }
  4011.     private function getDataRapportByStatusAndDate($date1,$date2,$status,$developpeur=null){
  4012.         $devDate1 = $this->em->getRepository(StatusTracker::class)->getRapportByStatusTrackerAndDate($date1,$status,$developpeur);
  4013.         $devDate2 = $this->em->getRepository(StatusTracker::class)->getRapportByStatusTrackerAndDate($date2,$status,$developpeur);
  4014.         $resultMoins = array_diff($this->formatArrayIdsProjects($devDate1), $this->formatArrayIdsProjects($devDate2));
  4015.         $resultPlus = array_diff($this->formatArrayIdsProjects($devDate2), $this->formatArrayIdsProjects($devDate1));
  4016.         $resultMoinsPlusMoins = $resultMoins ? $this->em->getRepository(StatusTracker::class)->getRapportByDate($date2,$resultMoins,$developpeur) : [];
  4017.         $date1Result = $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate1)) ? $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate1)) : array();
  4018.         $date2Result = $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate2)) ? $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate2)) : array();
  4019.         $resultMoins = $this->formatObjectsProjectByIds($resultMoins) ? $this->formatObjectsProjectByIds($resultMoins) : array();
  4020.         $resultPlus = $this->formatObjectsProjectByIds($resultPlus) ? $this->formatObjectsProjectByIds($resultPlus) : array();
  4021. //        $resultMoinsPlusMoins = array_diff($this->formatObjectsStatusTracker($devDate1), $this->formatObjectsStatusTracker($devDate2));
  4022. //        $resultMoinsPlusMoins =  $this->formatObjectsStatusTrackerByIds($resultMoinsPlusMoins) ? $this->formatObjectsStatusTrackerByIds($resultMoinsPlusMoins) : array();
  4023.         $countGloble = count($date1Result) + count($resultPlus);
  4024.         $pourcentageDate1 = $countGloble ? (count($date1Result)/$countGloble *100) : 0;
  4025.         $pourcentageDate2 = $countGloble ?  (count($date2Result)/$countGloble *100) : 0;
  4026.         $pourcentageResultMoins = $countGloble ?  (($countGloble - count($resultMoins))/$countGloble *100) : 0;
  4027.         $pourcentageResultPlus = $pourcentageDate1;
  4028.         return [
  4029.             'date1Result' => $date1Result,
  4030.             'date2Result' => $date2Result,
  4031.             'resultMoins' => $resultMoins,
  4032.             'resultMoinsPlusMoins' => $resultMoinsPlusMoins,
  4033.             'resultPlus' => $resultPlus,
  4034.             'pourcentageDate1' => $pourcentageDate1,
  4035.             'pourcentageDate2' => $pourcentageDate2,
  4036.             'pourcentageResultMoins' => $pourcentageResultMoins,
  4037.             'pourcentageResultPlus' => $pourcentageResultPlus,
  4038.         ];
  4039.     }
  4040.     private function getCapaciteByStatusTrackerConstruction($tabStatus){
  4041.         $capacite = 0 ;
  4042.         if($tabStatus){
  4043.             foreach ($tabStatus as $project){
  4044.                 $capacite +=  (float)(str_replace(',','.',$project->getCapacite()));
  4045.             }
  4046.         }
  4047.         return $capacite;
  4048.     }
  4049.     private function getDataRapportConstructionByStatusAndDate($date1,$date2,$status,$responsableConstruction=null,$spv=null,$schemaConstruction=null,$constructeurRapport=null){
  4050.         $devDate1 = $this->em->getRepository(StatusTrackerConstruction::class)->getRapportByStatusTrackerAndDate($date1,$status,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  4051.         $devDate2 = $this->em->getRepository(StatusTrackerConstruction::class)->getRapportByStatusTrackerAndDate($date2,$status,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport);
  4052.         $resultMoins = array_diff($this->formatArrayIdsProjects($devDate1), $this->formatArrayIdsProjects($devDate2));
  4053.         $resultPlus = array_diff($this->formatArrayIdsProjects($devDate2), $this->formatArrayIdsProjects($devDate1));
  4054.         $resultMoinsPlusMoins = $resultMoins ? $this->em->getRepository(StatusTrackerConstruction::class)->getRapportByDate($date2,$resultMoins,$responsableConstruction,$spv,$schemaConstruction,$constructeurRapport) : [];
  4055.         $date1Result = $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate1)) ? $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate1)) : array();
  4056.         $date2Result = $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate2)) ? $this->formatObjectsProjectByIds($this->formatArrayIdsProjects($devDate2)) : array();
  4057.         $resultMoins = $this->formatObjectsProjectByIds($resultMoins) ? $this->formatObjectsProjectByIds($resultMoins) : array();
  4058.         $resultPlus = $this->formatObjectsProjectByIds($resultPlus) ? $this->formatObjectsProjectByIds($resultPlus) : array();
  4059.         $countGloble = count($date1Result) + count($resultPlus);
  4060.         $pourcentageDate1 = $countGloble ? (count($date1Result)/$countGloble *100) : 0;
  4061.         $pourcentageDate2 = $countGloble ?  (count($date2Result)/$countGloble *100) : 0;
  4062.         $pourcentageResultMoins = $countGloble ?  (($countGloble - count($resultMoins))/$countGloble *100) : 0;
  4063.         $pourcentageResultPlus = $pourcentageDate1;
  4064.         return [
  4065.             'date1Result' => $date1Result,
  4066.             'date2Result' => $date2Result,
  4067.             'resultMoins' => $resultMoins,
  4068.             'resultMoinsPlusMoins' => $resultMoinsPlusMoins,
  4069.             'resultPlus' => $resultPlus,
  4070.             'pourcentageDate1' => $pourcentageDate1,
  4071.             'pourcentageDate2' => $pourcentageDate2,
  4072.             'pourcentageResultMoins' => $pourcentageResultMoins,
  4073.             'pourcentageResultPlus' => $pourcentageResultPlus,
  4074.         ];
  4075.     }
  4076.     private function formatArrayIdsProjects($arrays){
  4077.         $arrayIds = [];
  4078.         foreach ( $arrays as $item){
  4079.             $arrayIds[] = $item->getProject()->getId();
  4080.         }
  4081.         return $arrayIds;
  4082.     }
  4083.     private function formatObjectsProjectByIds($ids){
  4084.         if($ids){
  4085.             $projects = $this->em->getRepository(Project::class)->findBy(['id'=>$ids]);
  4086.             return $projects;
  4087.         }
  4088.         return null;
  4089.     }
  4090.     private function formatObjectsStatusTrackerByIds($ids){
  4091.         if($ids){
  4092.             $projects = $this->em->getRepository(StatusTracker::class)->findBy(['id'=>$ids]);
  4093.             return $projects;
  4094.         }
  4095.         return null;
  4096.     }
  4097.     private function formatObjectsStatusTracker($arrays){
  4098.         $arrayIds = [];
  4099.         foreach ( $arrays as $item){
  4100.             $arrayIds[] = $item->getId();
  4101.         }
  4102.         return $arrayIds;
  4103.     }
  4104.     public function addPdfRapport($date1Rapport,$date2Rapport,$developpeur = null){
  4105.         if($date1Rapport && $date2Rapport){
  4106.             $data = $this->getRapportData($date1Rapport,$date2Rapport,$developpeur);
  4107.             $html = $this->twig->render('admin/project/rapport.html.twig',array('data'=>$data));
  4108.             $html2pdf = new Html2Pdf('L', array(502 , 286), 'fr', true, 'UTF-8', array('0','0','0','0'));
  4109.             $html2pdf->getSecurityService()->disableCheckAllowedHosts();
  4110.             $html2pdf->pdf->SetAuthor('prejeance');
  4111.             $html2pdf->pdf->SetTitle('Rapport');
  4112.             $html2pdf->pdf->SetSubject('Rapport');
  4113.             $html2pdf->pdf->SetKeywords('Rapport');
  4114.             $html2pdf->pdf->SetDisplayMode('real');
  4115.             $html2pdf->WriteHTML($html);
  4116.             $nameFichier = 'rapport'.time().'.pdf';
  4117.             $path_pdf = $this->params->get('images_directory').'/rapport/'.$nameFichier;
  4118.             $html2pdf->Output($path_pdf,'F');
  4119.             return $nameFichier ;
  4120.         }
  4121.         return false;
  4122.     }
  4123.     public function addCommentProject($project,$commentText,$user){
  4124.         $comment = new CommentProject();
  4125.         $comment->setProject($project);
  4126.         $comment->setComment($commentText);
  4127.         $comment->setUser($user);
  4128.         $this->em->persist($comment);
  4129.         $this->em->flush();
  4130.         $this->notification->notifChatProjectAllUser($project,$user,$comment); // notif
  4131.         return $comment ;
  4132.     }
  4133.     public function getTimeComment($datetime){
  4134.         $dateNow = new \DateTime();
  4135.         if($dateNow->format('d/m/Y') == $datetime->format('d/m/Y')){
  4136.             return $datetime->format('H:i');
  4137.         }else{
  4138.             return $datetime->format('d/m/Y H:i');
  4139.         }
  4140.     }
  4141.     public function getCommentsProject($project){
  4142.        $comments =  $this->em->getRepository(CommentProject::class)->getCommentsProject($project);
  4143.        return $comments;
  4144.     }
  4145.     public function getLastComment($project,$idLastComment){
  4146.         $comments =  $this->em->getRepository(CommentProject::class)->getLastCommentsProject($project,$idLastComment);
  4147.         return $comments;
  4148.     }
  4149.     public function paginateCentrale($request){
  4150.         $length = $request->get('length');
  4151.         $length = $length && ($length!=-1)?$length:0;
  4152.         $start = $request->get('start');
  4153.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  4154.         $column =  $search = $request->get('columns');
  4155.         $order = $request->get('order')[0];
  4156.         $columnOrder = $order['column'];
  4157.         $dirOrder = $order['dir'];
  4158.         $columNameOrder = $column[$columnOrder]['data'];
  4159.         $search = $request->get('search');
  4160.         $user = $this->security->getUser();
  4161.         $roles = $user->getRoles();
  4162.         $spvsTab = $request->get('spvsTab');
  4163.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  4164.             $spvs = $user->getSpv();
  4165.             foreach($spvs as $item){
  4166.                 $spvsTab[] = $item->getId();
  4167.             }
  4168.         }
  4169.         $isParametrer = $request->get('isParametrer');
  4170.         $filters = [
  4171.             'query' => trim(@$search['value']),
  4172.             'spvsTab' =>  $spvsTab,
  4173.             'dateTab' =>  $request->get('dateTab'),
  4174.             'user' =>  $user,
  4175.             'isParametrer' =>  $isParametrer
  4176.         ];
  4177.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchCentrale($filters, $start, $length, true,$columNameOrder, $dirOrder);
  4178.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->searchCentrale($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  4179.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->searchCentrale(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  4180.         $output = array(
  4181.             'data' => array(),
  4182.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  4183.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  4184.         );
  4185.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  4186.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  4187.         foreach ($projects as $project) {
  4188.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  4189.             if( $project && $project->getDateMiseEnService()){
  4190.                 $strDate = $project->getDateMiseEnService()->format('d/m/Y');
  4191.             }else{
  4192.                 if( $etap14 && $etap14->getDateMiseEnService()){
  4193.                     $strDate = $etap14->getDateMiseEnService()->format('d/m/Y');
  4194.                 }else{
  4195.                     $strDate = '';
  4196.                 }
  4197.             }
  4198.             $parametrageLoyer = $this->em->getRepository(ParametrageLoyer::class)->findOneBy(['centrale'=>$project->getId()]);
  4199.             if($parametrageLoyer){
  4200.                 if($parametrageLoyer->getIsLoyer()){
  4201.                     $isLoyer = "<span style='color:green'>Oui</span>" ;
  4202.                 }else{
  4203.                     $isLoyer = "<span style='color:red'>Non</span>" ;
  4204.                 }
  4205.                 $isAlert = false;
  4206.             }else{
  4207.                 $isLoyer = '';
  4208.                 $isAlert = true;
  4209.             }
  4210.             $action =
  4211.                 $this->twig->render(
  4212.                     'admin/exploitation/default/bouton.html.twig', array(
  4213.                     'project' => $project,
  4214.                     'isAlert' => $isAlert
  4215.                 ));
  4216.             $output['data'][] = [
  4217.                 'responsive_id' => '',
  4218.                 'id' => $project->getId(),
  4219.                 'capacite' => $this->espaceNumber($project->getCapacite()),
  4220.                 'name' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName())),
  4221.                 'spv' => $this->twig->render('admin/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getSpv() ? $project->getSpv()->getName() : '-')) ,
  4222.                 'dateMiseEnService' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$strDate)) ,
  4223.                 'isLoyer' =>  $isLoyer  ,
  4224.                 'action' => $action
  4225.             ];
  4226.         }
  4227.         return $output;
  4228.     }
  4229.     public function paginateRapport($request){
  4230.         $length = $request->get('length');
  4231.         $length = $length && ($length!=-1)?$length:0;
  4232.         $start = $request->get('start');
  4233.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  4234.         $column =  $search = $request->get('columns');
  4235.         $order = $request->get('order')[0];
  4236.         $columnOrder = $order['column'];
  4237.         $dirOrder = $order['dir'];
  4238.         $columNameOrder = $column[$columnOrder]['data'];
  4239.         $search = $request->get('search');
  4240.         $centrale = $request->get('centrale');
  4241.         $suivi = $request->get('suivi');
  4242.         $isPerteProduction = $request->get('isPerteProduction');
  4243.         $interventionObject = $request->get('interventionObject');
  4244.         $centraleToken = $request->get('centraleToken');
  4245.         $centraleEntiry = null;
  4246.         if($centraleToken && $centraleToken != 0){
  4247.             $centraleEntiry = $this->em->getRepository(Project::class)->findOneBy(['token' => $centraleToken]);
  4248.         }
  4249.         $user = $this->security->getUser();
  4250.         $roles = $user->getRoles();
  4251.         $spvsTab = [];
  4252.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  4253.             $spvs = $user->getSpv();
  4254.             foreach($spvs as $item){
  4255.                 $spvsTab[] = $item->getId();
  4256.             }
  4257.         }
  4258.         $filters = [
  4259.             'query' => trim(@$search['value']),
  4260.             'spvsTab' =>  $spvsTab,
  4261.             'centraleToken' =>  $centraleToken,
  4262.             'user' =>  $user
  4263.         ];
  4264.         $rapports= $this->em->getRepository(\App\Entity\RapportCentrale::class)->search($isPerteProduction,$centrale,$suivi,$interventionObject,$filters, $start, $length, true,$columNameOrder, $dirOrder);
  4265.         $recordsFiltered= $this->em->getRepository(\App\Entity\RapportCentrale::class)->search($isPerteProduction,$centrale,$suivi,$interventionObject,$filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  4266.         $recordsTotal= $this->em->getRepository(\App\Entity\RapportCentrale::class)->search($isPerteProduction,$centrale,$suivi,$interventionObject,array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  4267.         $output = array(
  4268.             'data' => array(),
  4269.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  4270.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  4271.         );
  4272.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  4273.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  4274.         foreach ($rapports as $rapport) {
  4275.             $action =
  4276.                 $this->twig->render(
  4277.                     'admin/exploitation/default/bouton2.html.twig', array(
  4278.                     'rapport' => $rapport,
  4279.                     'centraleEntiry'=>$centraleEntiry
  4280.                 ));
  4281.             $suivi =
  4282.                 $this->twig->render(
  4283.                     'admin/exploitation/default/suivi.html.twig', array(
  4284.                     'rapport' => $rapport,
  4285.                     'centraleEntiry'=>$centraleEntiry
  4286.                 ));
  4287.             $select =
  4288.                 $this->twig->render(
  4289.                     'admin/exploitation/default/selectAll.html.twig', array(
  4290.                     'rapport' => $rapport,
  4291.                     'centraleEntiry'=>$centraleEntiry
  4292.                 ));
  4293.             $perteProduction =
  4294.                 $this->twig->render(
  4295.                     'admin/exploitation/default/perte-production.html.twig', array(
  4296.                     'rapport' => $rapport,
  4297.                     'centraleEntiry'=>$centraleEntiry
  4298.                 ));
  4299.             $output['data'][] = [
  4300.                 'responsive_id' => '',
  4301.                 'name' => $rapport->getName(),
  4302.                 'project' => $rapport->getProject()->getName(),
  4303.                 'objectIntervention' => $rapport->getObjectInterventionSrc(),
  4304.                 'dateIntervention' => $rapport->getDateIntervention()?$rapport->getDateIntervention()->format('d/m/Y') : '-',
  4305.                 'isSuiviNecessaire' => $suivi ,
  4306.                 'isPerteProduction' => $perteProduction ,
  4307.                 'coutIntervention' => $rapport->getObjectIntervention() == RapportCentrale::INTERVENTION_CURATIVE ? $rapport->getCoutIntervention() ? $rapport->getCoutIntervention() .'€' : '' : '' ,
  4308.                 'action' => $action,
  4309.                 'selectRapport' => $select
  4310.             ];
  4311.         }
  4312.         return $output;
  4313.     }
  4314.     public function addRapportCentrale($request,$token =null)
  4315.     {
  4316.         $rapport = new RapportCentrale();
  4317.         $form = $this->form->create(RapportCentraleType::class, $rapport);
  4318.         $centrale = null;
  4319.         if($token){
  4320.             $centrale = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  4321.             $form->remove('project');
  4322.         }
  4323.         $form->handleRequest($request);
  4324.         if ($form->isSubmitted() && $form->isValid()) {
  4325.             $rapportToken = $request->get('fileRapport');
  4326.             if($rapportToken) {
  4327.                 $fileRapport = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $rapportToken]);
  4328.                 $rapport->setRapport($fileRapport);
  4329.             }
  4330.             if($centrale){
  4331.                 $rapport->setProject($centrale);
  4332.             }
  4333.             $constructeurId = $request->get('rapport_centrale_constructeur');
  4334.             if($constructeurId != 0){
  4335.                 $constructeur = $this->em->getRepository(Fournisseur::class)->find($constructeurId);
  4336.                 if($constructeur){
  4337.                     $rapport->setConstructeur($constructeur);
  4338.                 }
  4339.             }else{
  4340.                 $rapport->setConstructeur(null);
  4341.             }
  4342.             $this->em->persist($rapport);
  4343.             $this->em->flush();
  4344.             return [
  4345.                 'form' => $form->createView(),
  4346.                 'rapport' => $rapport,
  4347.                 'success' => true,
  4348.                 'centrale' => $centrale
  4349.             ];
  4350.         }
  4351.         return [
  4352.             'form' => $form->createView(),
  4353.             'centrale' => $centrale,
  4354.             'success' => false,
  4355.         ];
  4356.     }
  4357.     public function editRapportCentrale($request,$token)
  4358.     {
  4359.         $rapport = $this->em->getRepository(RapportCentrale::class)->findOneBy(['token'=> $token]);
  4360.         $form = $this->form->create(RapportCentraleType::class, $rapport);
  4361.         $form->handleRequest($request);
  4362.         if ($form->isSubmitted() && $form->isValid()) {
  4363.             $rapportToken = $request->get('fileRapport');
  4364.             if($rapportToken) {
  4365.                 $fileRapport = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $rapportToken]);
  4366.                 $rapport->setRapport($fileRapport);
  4367.             }
  4368.             $constructeurId = $request->get('rapport_centrale_constructeur');
  4369.             if($constructeurId != 0){
  4370.                 $constructeur = $this->em->getRepository(Fournisseur::class)->find($constructeurId);
  4371.                 if($constructeur){
  4372.                     $rapport->setConstructeur($constructeur);
  4373.                 }
  4374.             }else{
  4375.                 $rapport->setConstructeur(null);
  4376.             }
  4377.             $this->em->persist($rapport);
  4378.             $this->em->flush();
  4379.             return [
  4380.                 'form' => $form->createView(),
  4381.                 'rapport' => $rapport,
  4382.                 'success' => true
  4383.             ];
  4384.         }
  4385.         return [
  4386.             'form' => $form->createView(),
  4387.             'rapport' => $rapport,
  4388.             'success' => false,
  4389.         ];
  4390.     }
  4391.     public function tabOfMeltdClavus(){
  4392.         $array = [];
  4393.         $array['date.decision.urbanisme'] = 'project-0-etap-1-'.MeltdChamps::TYPE_DATE.'-dateArretePcDp' ;
  4394.         $array['date.decision.urbanisme'] = 'project-0-etap-1-'.MeltdChamps::TYPE_DATE.'-dateArretePcDp' ;
  4395.         $array['notary.office'] = 'project-0-etap-6-'.MeltdChamps::TYPE_STRING.'-nomNotaire' ;
  4396.         $array['etablissement.secondaire.siret'] = 'project-0-etap-8-'.MeltdChamps::TYPE_STRING.'-siretEts' ;
  4397.         $array['cp.postal.address'] = 'project-0-etap-14-'.MeltdChamps::TYPE_STRING.'-codePostalMiseEnService' ;
  4398.         $array['adresses.identiques'] = 'project-0-etap-14-'.MeltdChamps::TYPE_STRING.'-cityMiseEnService' ;
  4399.         $array['bta.raccordement'] = 'project-0-etap-15-'.MeltdChamps::TYPE_STRING_MANYTOMANY.'-informationMultiple-numeroContratAchat' ;
  4400.         $array['floor-width'] = 'project-0-etap-160-'.MeltdChamps::TYPE_STRING_MANYTOMANY.'-dimension-largeur' ;
  4401.         $array['floor-length'] = 'project-0-etap-160-'.MeltdChamps::TYPE_STRING_MANYTOMANY.'-dimension-langueur' ;
  4402.         $array['docs']['Accord Mairie (PC ou CNO)'] = 'project-0-etap-1-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDossierPcDpMultiple' ;
  4403.         $array['docs']['accord.mairie'] = 'project-0-etap-1-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDossierPcDpMultiple' ;
  4404.         $array['docs']['Acte de passage huissier'] = 'project-0-etap-2-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVPassageHuissierMultiple' ;
  4405.         $array['docs']['acte.passage.huissier'] = 'project-0-etap-2-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVPassageHuissierMultiple' ;
  4406.         $array['docs']['acte.passage.huissier'] = 'project-0-etap-2-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVPassageHuissierMultiple' ;
  4407.         $array['docs']['attestation.conformite.chantier'] = 'project-0-etap-14-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileAttestationS21Multiple' ;
  4408.         $array['docs']['attestation.s21'] = 'project-0-etap-14-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileAttestationS21Multiple' ;
  4409.         $array['docs']['attestation.de.non.recours'] = 'project-0-etap-2-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileCertificatNonRecoursMultiple' ;
  4410.         $array['docs']['attestation.non.retrait.juridique'] = 'project-0-etap-2-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileCertificatNonRetraitMultiple' ;
  4411.         $array['docs']['bail.et.pdb'] = 'project-0-etap-7-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileBailSigneMultiple' ;
  4412.         $array['docs']['consuel'] = 'project-0-etap-20-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileConsuelEtap20Multiple' ;
  4413.         $array['docs']['consuel.dossier.technique.chantier'] = 'project-0-etap-20-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileConsuelEtap20Multiple' ;
  4414.         $array['docs']['crd.final.raccordement'] = 'project-0-etap-10-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileCrdSigneeMultiple' ;
  4415.         $array['docs']['crd.provisoire.raccordement'] = 'project-0-etap-10-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePtfMultiple' ;
  4416.         $array['docs']['DOC'] = 'project-0-etap-3-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocDrocMultiple' ;
  4417.         $array['docs']['doc'] = 'project-0-etap-3-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocDrocMultiple' ;
  4418.         $array['docs']['dact'] = 'project-0-etap-4-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDaactMultiple' ;
  4419.         $array['docs']['DACT'] = 'project-0-etap-4-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDaactMultiple' ;
  4420.         $array['docs']['doe'] = 'project-0-etap-201-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDoeEtap201Multiple' ;
  4421.         $array['docs']['DOE'] = 'project-0-etap-201-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDoeEtap201Multiple' ;
  4422.         $array['docs']['etude.sol./.etude.structure'] = 'project-0-etap-160-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileEtudeSoleMultiple' ;
  4423.         $array['docs']['ICPE'] = 'project-0-etap-0-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileICPEMultiple' ;
  4424.         $array['docs']['PV réception fin de chantier'] = 'project-0-etap-21-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileTestReceptionMultiple' ;
  4425.         $array['docs']['Justificatif agricole'] = 'project-0-etap-0-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileFicheBesoinAgricoleMultiple' ;
  4426.         $array['docs']['justify.agri'] = 'project-0-etap-0-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileFicheBesoinAgricoleMultiple' ;
  4427.         $array['docs']['kbis'] = 'project-0-etap-8-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileKbisEtsMultiple' ;
  4428.         $array['docs']['KBIS'] = 'project-0-etap-8-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileKbisEtsMultiple' ;
  4429.         $array['docs']['pc.doc'] = 'project-0-etap-1-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileArretePcDpMultiple' ;
  4430.         $array['docs']['pdb.signee'] = 'project-0-etap-5-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePromessebailMultiple' ;
  4431.         $array['docs']['promesse_bail'] = 'project-0-etap-5-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePromessebailMultiple' ;
  4432.         $array['docs']['plan.masse.commercial'] = 'project-0-etap-159-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePlanMasseSituationTranchee159MultipleBtn' ;
  4433.         $array['docs']['productible.rapport'] = 'project-0-etap-159-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileEtudeProductible159Multiple' ;
  4434.         $array['docs']['pv.fin.chantier'] = 'project-0-etap-172-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVReceptionMultiple' ;
  4435.         $array['docs']['pv.suivi.installation.pdl'] = 'project-0-etap-121-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocument121Multiple' ;
  4436.         $array['docs']['rapport.final.geometre.juridique'] = 'project-0-etap-17-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocumentGeometre' ;
  4437.         $array['docs']['rapport.rapport.geometre'] = 'project-0-etap-17-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocumentGeometre' ;
  4438.         $array['docs']['rapport.rapport.geometre'] = 'project-0-etap-17-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocumentGeometre' ;
  4439.         $array['docs']['rapport.provisoire.geometre.juridique'] = 'project-0-etap-17-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDocumentGeometre' ;
  4440.         $array['docs']['Relevé d’exploitation'] = 'project-0-etap-0-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileMsaReleveExploitationMultiple' ;
  4441.         $array['docs']['titre.propriete'] = 'project-0-etap-6-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileTitreProprieteMultiple' ;
  4442.         $array['docs']['pv.mise.en.service'] = 'project-0-etap-14-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileDoeMultiple' ;
  4443.         $array['docs']['Rapport de VT'] = 'project-0-etap-159-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-fileVisiteTechnique159Multiple' ;
  4444.         $array['docs']['rapport.reception.electrique'] = 'project-0-etap-174-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVReception174Multiple' ;
  4445.         $array['docs']['rapport.reception.mecanique'] = 'project-0-etap-173-'.MeltdChamps::TYPE_FILE_MANYTOMANY.'-filePVreception173Multiple' ;
  4446.         $array['acompte'] = 'project-0-etap-10-'.MeltdChamps::TYPE_STRING.'-montantAcompte' ;
  4447.         $array['acompte'] = 'project-0-etap-10-'.MeltdChamps::TYPE_STRING.'-montantAcompteSansPtf' ;
  4448.         $array['crd.raccordement'] = 'project-0-etap-10-'.MeltdChamps::TYPE_STRING.'-montantCrdSansPtf' ;
  4449.         $array['date.envoi.dact'] = 'project-0-etap-4-'.MeltdChamps::TYPE_DATE.'-dateDaact' ;
  4450.         return $array ;
  4451.     }
  4452.     public function getFileJson(){
  4453.         $local_file = 'erpi.json';
  4454.         $server_file = 'erpi.json';
  4455.         $path = '/httpdocs/prejeance-industrial/public/clavus';
  4456.         $ftp_server="87.98.140.172";
  4457.         $ftp_user_name="erpi.prejeanceindust_20gzzzf6in4";
  4458.         $ftp_user_pass="VLmyuR#706";
  4459.         $conn_id = ftp_ssl_connect($ftp_server);
  4460.         $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
  4461.         ftp_pasv($conn_id, true) or die("Cannot switch to passive mode");
  4462.         if (ftp_get($conn_id,  $this->params->get('images_directory') . "/".$local_file, $path.'/'.$server_file, FTP_BINARY)) {
  4463.             $file = $this->params->get('images_directory') . "/".$local_file;
  4464.             $array = [];
  4465.             $f = file_get_contents($file);
  4466.             return json_decode($f);
  4467.         }
  4468.         else {
  4469.             return false;
  4470.         }
  4471.         ftp_close($conn_id);
  4472.     }
  4473.     public function updateProjectViaJson($data){
  4474.         $tabOfMeltdClavus = $this->tabOfMeltdClavus();
  4475.         if($data){
  4476.             foreach ($data as $item){
  4477.                 $arrayObject = (array)$item ;
  4478.                 $project = $this->em->getRepository(Project::class)->findOneBy(['name'=>$arrayObject['script.folderIdDynamic']]);
  4479.                 if($project){
  4480.                     $updateAt = new \DateTime($arrayObject['updatedAt']);
  4481.                     if($updateAt){
  4482.                         $updateAtFormat = $updateAt->format('y-m-d H:i:s');
  4483.                         $updateAtProjectFormat = $project->getUpdateAtClavus() ? $project->getUpdateAtClavus()->format('y-m-d H:i:s'): null;
  4484.                         if($updateAtFormat != $updateAtProjectFormat){
  4485.                             $isNotif = false;
  4486.                             $isNotifVide = true;
  4487.                             $project->setUpdateAtClavus($updateAt);
  4488.                             $this->em->persist($project);
  4489.                             $this->em->flush();
  4490.                             foreach ($arrayObject as $key => $value){
  4491.                                 if(isset($tabOfMeltdClavus[$key])){
  4492.                                     if($value != '') {
  4493.                                         $strProjectEtap = $tabOfMeltdClavus[$key];
  4494.                                         if($key == 'docs'){
  4495.                                             $arrayObjectDocs = (array)$value ;
  4496.                                             foreach ($arrayObjectDocs as $key2 => $value2) {
  4497.                                                 if (isset($tabOfMeltdClavus[$key][$key2])) {
  4498.                                                     if ($value2 != '') {
  4499.                                                         $strProjectEtap2 = $tabOfMeltdClavus[$key][$key2];
  4500.                                                         $tab = explode("-", $strProjectEtap2);
  4501.                                                         if ($tab[1] == 1) {
  4502.                                                             $nameChamp = $tab[5];
  4503.                                                             $typeChamp = $tab[4];
  4504.                                                             $meltd = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project' => $project->getId(), 'champName' => $nameChamp, 'isProject' => true]);
  4505.                                                             $persist = true;
  4506.                                                             if ($meltd) {
  4507.                                                                 if ($meltd->getChampValue() == $value2) {
  4508.                                                                     $persist = false;
  4509.                                                                 }
  4510.                                                             } else {
  4511.                                                                 $meltd = new MeltdChamps();
  4512.                                                             }
  4513.                                                             $checkExistValue = $this->getProjectViaJsonInput($nameChamp,$value2,$typeChamp,true,$project,0,null);
  4514.                                                             if ($persist && $checkExistValue) {
  4515.                                                                 $isNotifVide =false;
  4516.                                                                 $meltd->setProject($project);
  4517.                                                                 $meltd->setChampName($nameChamp);
  4518.                                                                 $meltd->setChampType($typeChamp);
  4519.                                                                 $meltd->setChampValue($value2);
  4520.                                                                 if (isset($arrayObject['createdAt'])) {
  4521.                                                                     $meltd->setCreatedAt(new \DateTime($arrayObject['createdAt']));
  4522.                                                                 }
  4523.                                                                 if (isset($arrayObject['updatedAt'])) {
  4524.                                                                     $meltd->setUpdateAt(new \DateTime($arrayObject['updatedAt']));
  4525.                                                                 }
  4526.                                                                 $meltd->setIsProject(true);
  4527.                                                                 $meltd->setIsValid(false);
  4528.                                                                 $meltd->setIsEmpty(true);
  4529.                                                                 $this->em->persist($meltd);
  4530.                                                                 $this->em->flush();
  4531.                                                                 $isNotif = true;
  4532.                                                             }
  4533.                                                         } else {
  4534.                                                             $numEtap = $tab[3];
  4535.                                                             $nameChamp = $tab[5];
  4536.                                                             $typeChamp = $tab[4];
  4537.                                                             $meltd = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project' => $project->getId(), 'numEtap' => $numEtap, 'champName' => $nameChamp]);
  4538.                                                             $persist = true;
  4539.                                                             if ($meltd) {
  4540.                                                                 if ($meltd->getChampValue() == $value2) {
  4541.                                                                     $persist = false;
  4542.                                                                 }
  4543.                                                             } else {
  4544.                                                                 $meltd = new MeltdChamps();
  4545.                                                             }
  4546.                                                             $checkExistValue = $this->getProjectViaJsonInput($nameChamp,$value2,$typeChamp,false,$project,$numEtap,null);
  4547.                                                             if ($persist && $checkExistValue) {
  4548.                                                                 $isNotifVide =false;
  4549.                                                                 $meltd->setProject($project);
  4550.                                                                 $meltd->setNumEtap($numEtap);
  4551.                                                                 $meltd->setChampName($nameChamp);
  4552.                                                                 $meltd->setChampType($typeChamp);
  4553.                                                                 $meltd->setChampValue($value2);
  4554.                                                                 if (isset($arrayObject['createdAt'])) {
  4555.                                                                     $meltd->setCreatedAt(new \DateTime($arrayObject['createdAt']));
  4556.                                                                 }
  4557.                                                                 if (isset($arrayObject['updatedAt'])) {
  4558.                                                                     $meltd->setUpdateAt(new \DateTime($arrayObject['updatedAt']));
  4559.                                                                 }
  4560.                                                                 $meltd->setIsProject(false);
  4561.                                                                 $meltd->setIsValid(false);
  4562.                                                                 $meltd->setIsEmpty(true);
  4563.                                                                 $this->em->persist($meltd);
  4564.                                                                 $this->em->flush();
  4565.                                                                 $isNotif = true;
  4566.                                                             }
  4567.                                                         }
  4568.                                                     }
  4569.                                                 }
  4570.                                             }
  4571.                                         }else{
  4572.                                             $tab = explode("-", $strProjectEtap);
  4573.                                             if ($tab[1] == 1) {
  4574.                                                 if(isset($tab[6])){
  4575.                                                     $nameChampRelation = $tab[5];
  4576.                                                     $nameChamp = $tab[6];
  4577.                                                     $typeChamp = $tab[4];
  4578.                                                 }else{
  4579.                                                     $nameChampRelation = '';
  4580.                                                     $nameChamp = $tab[5];
  4581.                                                     $typeChamp = $tab[4];
  4582.                                                 }
  4583.                                                 $meltd = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project' => $project->getId(), 'champName' => $nameChamp, 'isProject' => true]);
  4584.                                                 $persist = true;
  4585.                                                 if ($meltd) {
  4586.                                                     if ($meltd->getChampValue() == $value) {
  4587.                                                         $persist = false;
  4588.                                                     }
  4589.                                                 } else {
  4590.                                                     $meltd = new MeltdChamps();
  4591.                                                 }
  4592.                                                 $checkExistValue = $this->getProjectViaJsonInput($nameChamp,$value,$typeChamp,true,$project,null,$nameChampRelation);
  4593.                                                 if ($persist && $checkExistValue) {
  4594.                                                     $isNotifVide =false;
  4595.                                                     $meltd->setProject($project);
  4596.                                                     $meltd->setNameChampRelation($nameChampRelation);
  4597.                                                     $meltd->setChampName($nameChamp);
  4598.                                                     $meltd->setChampType($typeChamp);
  4599.                                                     $meltd->setChampValue($value);
  4600.                                                     if (isset($arrayObject['createdAt'])) {
  4601.                                                         $meltd->setCreatedAt(new \DateTime($arrayObject['createdAt']));
  4602.                                                     }
  4603.                                                     if (isset($arrayObject['updatedAt'])) {
  4604.                                                         $meltd->setUpdateAt(new \DateTime($arrayObject['updatedAt']));
  4605.                                                     }
  4606.                                                     $meltd->setIsProject(true);
  4607.                                                     $meltd->setIsValid(false);
  4608.                                                     $checkEmptyValue = $this->getProjectViaJsonInputNotEmpty($nameChamp,$value,$typeChamp,true,$project,null,$nameChampRelation);
  4609.                                                     $meltd->setIsEmpty($checkEmptyValue);
  4610.                                                     $this->em->persist($meltd);
  4611.                                                     $this->em->flush();
  4612.                                                     $isNotif = true;
  4613.                                                 }
  4614.                                             } else {
  4615.                                                 if(isset($tab[6])){
  4616.                                                     $nameChampRelation = $tab[5];
  4617.                                                     $nameChamp = $tab[6];
  4618.                                                     $typeChamp = $tab[4];
  4619.                                                 }else{
  4620.                                                     $nameChampRelation = '';
  4621.                                                     $nameChamp = $tab[5];
  4622.                                                     $typeChamp = $tab[4];
  4623.                                                 }
  4624.                                                 $numEtap = $tab[3];
  4625.                                                 $meltd = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project' => $project->getId(), 'numEtap' => $numEtap, 'champName' => $nameChamp]);
  4626.                                                 $persist = true;
  4627.                                                 if ($meltd) {
  4628.                                                     if ($meltd->getChampValue() == $value) {
  4629.                                                         $persist = false;
  4630.                                                     }
  4631.                                                 } else {
  4632.                                                     $meltd = new MeltdChamps();
  4633.                                                 }
  4634.                                                 $checkExistValue = $this->getProjectViaJsonInput($nameChamp,$value,$typeChamp,false,$project,$numEtap,$nameChampRelation);
  4635.                                                 if ($persist && $checkExistValue) {
  4636.                                                     $isNotifVide =false;
  4637.                                                     $meltd->setProject($project);
  4638.                                                     $meltd->setNameChampRelation($nameChampRelation);
  4639.                                                     $meltd->setNumEtap($numEtap);
  4640.                                                     $meltd->setChampName($nameChamp);
  4641.                                                     $meltd->setChampType($typeChamp);
  4642.                                                     $meltd->setChampValue($value);
  4643.                                                     if (isset($arrayObject['createdAt'])) {
  4644.                                                         $meltd->setCreatedAt(new \DateTime($arrayObject['createdAt']));
  4645.                                                     }
  4646.                                                     if (isset($arrayObject['updatedAt'])) {
  4647.                                                         $meltd->setUpdateAt(new \DateTime($arrayObject['updatedAt']));
  4648.                                                     }
  4649.                                                     $meltd->setIsProject(false);
  4650.                                                     $meltd->setIsValid(false);
  4651.                                                     $checkEmptyValue = $this->getProjectViaJsonInputNotEmpty($nameChamp,$value,$typeChamp,false,$project,$numEtap,$nameChampRelation);
  4652.                                                     $meltd->setIsEmpty($checkEmptyValue);
  4653.                                                     $this->em->persist($meltd);
  4654.                                                     $this->em->flush();
  4655.                                                     $isNotif = true;
  4656.                                                 }
  4657.                                             }
  4658.                                         }
  4659.                                     }
  4660.                                 }
  4661.                             }
  4662.                             if($isNotif){
  4663.                                 $admin = $this->em->getRepository(User::class)->findOneBy(['email' => $this->params->get('admin_login')]);
  4664.                                 $string = '<span class="spanNotif" >le projet ' . $project->getName() . '</span> vient d’être mise à jour à partir de CLAVIUS - MELTD';
  4665.                                 $usersAdmin = $this->em->getRepository(User::class)->getUserByNotRoleAndIsNotif(['ROLE_DEV', 'ROLE_EPC'], 'isNotifClavus');
  4666.                                 foreach ($usersAdmin as $item) {
  4667.                                     $this->notification->addNotification($item, $admin, $string, $project,false,false,false,false,false,null,Notification::STATUS_PROJECT_COMPLETED);
  4668.                                 }
  4669.                             }
  4670.                             if($isNotifVide){
  4671.                                 $admin = $this->em->getRepository(User::class)->findOneBy(['email' => $this->params->get('admin_login')]);
  4672.                                 $string = '<span class="spanNotif" >le projet ' . $project->getName() . '</span> vient d’être mise à jour à partir de CLAVIUS - MELTD sans changement';
  4673.                                 $usersAdmin = $this->em->getRepository(User::class)->getUserByNotRoleAndIsNotif(['ROLE_DEV', 'ROLE_EPC'], 'isNotifClavus');
  4674.                                 foreach ($usersAdmin as $item) {
  4675.                                     $this->notification->addNotification($item, $admin, $string, $project,false,false,false,false,false,null,Notification::STATUS_PROJECT_COMPLETED);
  4676.                                 }
  4677.                             }
  4678.                         }
  4679.                     }
  4680.                 }
  4681.             }
  4682.         }
  4683.     }
  4684.     public function deleteProjectViaJsonInput($melted){
  4685.         if($melted){
  4686.             $this->em->remove($melted);
  4687.             $this->em->flush();
  4688.         }
  4689.     }
  4690.     public function getProjectViaJsonInput($champName,$champValue,$champType,$isProject,$project,$numEtap,$nameChampRelation){
  4691.         $return = true ;
  4692.         if($project){
  4693.             $nameGeteurFiled = 'get'.ucfirst($champName);
  4694.             if($isProject){
  4695.                 if($champType == MeltdChamps::TYPE_STRING){
  4696.                     if($project->{$nameGeteurFiled}() == $champValue){
  4697.                         $return = false ;
  4698.                     }
  4699.                 }else if ($champType == MeltdChamps::TYPE_DATE){
  4700.                     if($project->{$nameGeteurFiled}()){
  4701.                         $dateValue = new \DateTime( $champValue);
  4702.                         if($project->{$nameGeteurFiled}()->format('y-m-d') == $dateValue->format('y-m-d')){
  4703.                             $return = false ;
  4704.                         }
  4705.                     }
  4706.                 }else if ($champType == MeltdChamps::TYPE_FILE_MANYTOMANY){
  4707.                     if(count($project->{$nameGeteurFiled}()) > 0){
  4708.                         $isNotefileArchive = false;
  4709.                         foreach ($project->{$nameGeteurFiled}() as $value){
  4710.                             if(!$value->getIsArchived()){
  4711.                                 $isNotefileArchive = true;
  4712.                             }
  4713.                         }
  4714.                         if($isNotefileArchive){
  4715.                             $return = false ;
  4716.                         }
  4717.                     }
  4718.                 }
  4719.             }else{
  4720.                 $etapClass = 'App\\Entity\\Etap'.$numEtap;
  4721.                 $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  4722.                 if($champType == MeltdChamps::TYPE_STRING){
  4723.                     if($etap->{$nameGeteurFiled}() == $champValue){
  4724.                         $return = false ;
  4725.                     }
  4726.                 }else if ($champType == MeltdChamps::TYPE_DATE){
  4727.                     if($etap->{$nameGeteurFiled}()){
  4728.                         $dateValue = new \DateTime( $champValue);
  4729.                         if($etap->{$nameGeteurFiled}()->format('y-m-d') == $dateValue->format('y-m-d')){
  4730.                             $return = false ;
  4731.                         }
  4732.                     }
  4733.                 }else if($champType == MeltdChamps::TYPE_STRING_MANYTOMANY){
  4734.                     $nameGeteurFiled = 'get'.ucfirst($nameChampRelation);
  4735.                     if($etap->$nameGeteurFiled()){
  4736.                         if(count($etap->$nameGeteurFiled()) > 0  && $etap->$nameGeteurFiled()[0]){
  4737.                             $entity = $etap->$nameGeteurFiled()[0];
  4738.                             $nameGeteurFiled2 = 'get'.ucfirst($champName);
  4739.                             if($entity->{$nameGeteurFiled2}() == $champValue){
  4740.                                 $return = false ;
  4741.                             }
  4742.                         }
  4743.                     }
  4744.                 }else if ($champType == MeltdChamps::TYPE_FILE_MANYTOMANY){
  4745.                     if(count($etap->{$nameGeteurFiled}()) > 0){
  4746.                         $isNotefileArchive = false;
  4747.                         foreach ($etap->{$nameGeteurFiled}() as $value){
  4748.                             if(!$value->getIsArchived()){
  4749.                                 $isNotefileArchive = true;
  4750.                             }
  4751.                         }
  4752.                         if($isNotefileArchive){
  4753.                             $return = false ;
  4754.                         }
  4755.                     }
  4756.                 }
  4757.             }
  4758.             return  $return;
  4759.         }
  4760.     }
  4761.     public function getProjectViaJsonInputNotEmpty($champName,$champValue,$champType,$isProject,$project,$numEtap,$nameChampRelation){
  4762.         $return = false ;
  4763.         if($project){
  4764.             $nameGeteurFiled = 'get'.ucfirst($champName);
  4765.             if($isProject){
  4766.                 if($champType == MeltdChamps::TYPE_STRING){
  4767.                     if(!$project->{$nameGeteurFiled}() || $project->{$nameGeteurFiled}() == '' ){
  4768.                         $return = true ;
  4769.                     }
  4770.                 }else if ($champType == MeltdChamps::TYPE_DATE){
  4771.                     if(!$project->{$nameGeteurFiled}()){
  4772.                         $return = true ;
  4773.                     }
  4774.                 }
  4775.             }else{
  4776.                 $etapClass = 'App\\Entity\\Etap'.$numEtap;
  4777.                 $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  4778.                 if($champType == MeltdChamps::TYPE_STRING){
  4779.                     if(!$etap->{$nameGeteurFiled}() || $etap->{$nameGeteurFiled}() == ''){
  4780.                         $return = true ;
  4781.                     }
  4782.                 }else if ($champType == MeltdChamps::TYPE_DATE){
  4783.                     if(!$etap->{$nameGeteurFiled}()){
  4784.                         $return = true ;
  4785.                     }
  4786.                 }else if($champType == MeltdChamps::TYPE_STRING_MANYTOMANY){
  4787.                     $nameGeteurFiled = 'get'.ucfirst($nameChampRelation);
  4788.                     if($etap->$nameGeteurFiled()){
  4789.                         if(count($etap->$nameGeteurFiled()) > 0  && $etap->$nameGeteurFiled()[0]){
  4790.                             $entity = $etap->$nameGeteurFiled()[0];
  4791.                             $nameGeteurFiled2 = 'get'.ucfirst($champName);
  4792.                             if(!$entity->{$nameGeteurFiled2}()){
  4793.                                 $return = true ;
  4794.                             }
  4795.                         }
  4796.                     }
  4797.                 }
  4798.             }
  4799.             return  $return;
  4800.         }
  4801.     }
  4802.     public function updateProjectViaJsonInputEmpty(){
  4803.         $melteds = $this->em->getRepository(MeltdChamps::class)->findBy(['isEmpty'=>true]);
  4804.         if($melteds){
  4805.             foreach ($melteds as $melted){
  4806.                 $this->updateProjectViaJsonInput($melted);
  4807.             }
  4808.         }
  4809.     }
  4810.     public function updateProjectViaJsonInput($melted){
  4811.         if($melted){
  4812.             $nameGeteurFiled = 'set'.ucfirst($melted->getChampName());
  4813.             if($melted->getIsProject()){
  4814.                 if($melted->getChampType() == MeltdChamps::TYPE_STRING){
  4815.                     $melted->getProject()->{$nameGeteurFiled}($melted->getChampValue());
  4816.                     $melted->setIsValid(true);
  4817.                     $melted->setIsEmpty(false);
  4818.                 }else if ($melted->getChampType() == MeltdChamps::TYPE_DATE){
  4819.                     $melted->getProject()->{$nameGeteurFiled}(new \DateTime( $melted->getChampValue()));
  4820.                     $melted->setIsValid(true);
  4821.                     $melted->setIsEmpty(false);
  4822.                 }
  4823.                 $this->em->persist($melted->getProject());
  4824.             }else{
  4825.                 $etapClass = 'App\\Entity\\Etap'.$melted->getNumEtap();
  4826.                 $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$melted->getProject()->getId()]);
  4827.                 if($melted->getChampType() == MeltdChamps::TYPE_STRING){
  4828.                     $etap->{$nameGeteurFiled}($melted->getChampValue());
  4829.                     $melted->setIsValid(true);
  4830.                     $melted->setIsEmpty(false);
  4831.                 }else if ($melted->getChampType() == MeltdChamps::TYPE_DATE){
  4832.                     $etap->{$nameGeteurFiled}(new \DateTime( $melted->getChampValue()));
  4833.                     $melted->setIsValid(true);
  4834.                     $melted->setIsEmpty(false);
  4835.                 }else if ($melted->getChampType() == MeltdChamps::TYPE_FILE_MANYTOMANY){
  4836.                     $fileEntity = $this->getFileViaMeltdApi($melted->getChampValue(),$melted);
  4837.                     $nameGeteurFiled = 'add'.ucfirst($melted->getChampName());
  4838.                     $etap->{$nameGeteurFiled}($fileEntity);
  4839.                     $melted->setIsValid(true);
  4840.                     $melted->setIsEmpty(false);
  4841.                 }
  4842.                 else if ($melted->getChampType() == MeltdChamps::TYPE_FILE_MANYTOONE){
  4843.                     $fileEntity = $this->getFileViaMeltdApi($melted->getChampValue(),$melted);
  4844.                     $nameGeteurFiled = 'set'.ucfirst($melted->getChampName());
  4845.                     $etap->{$nameGeteurFiled}($fileEntity);
  4846.                     $melted->setIsValid(true);
  4847.                     $melted->setIsEmpty(false);
  4848.                 }else if($melted->getChampType() == MeltdChamps::TYPE_STRING_MANYTOMANY){
  4849.                     $nameGeteurFiled = 'get'.ucfirst($melted->getNameChampRelation());
  4850.                     $nameSeteurFiled = 'set'.ucfirst($melted->getChampName());
  4851.                     if($etap->$nameGeteurFiled()){
  4852.                         if(count($etap->$nameGeteurFiled()) > 0  && $etap->$nameGeteurFiled()[0]){
  4853.                             $entity = $etap->$nameGeteurFiled()[0];
  4854.                             $entity->{$nameSeteurFiled}($melted->getChampValue());
  4855.                             $melted->setIsValid(true);
  4856.                             $melted->setIsEmpty(false);
  4857.                             $this->em->persist($entity);
  4858.                         }
  4859.                     }
  4860.                 }
  4861.                 $this->em->persist($etap);
  4862.             }
  4863.             $this->em->persist($melted);
  4864.             $this->em->flush();
  4865.         }
  4866.     }
  4867.     private function getAnnotationOptions($entity,$champ, $annotationName)
  4868.     {
  4869.         $reflector = new \ReflectionClass($entity);
  4870.         $property = $reflector->getProperty($champ);
  4871.         $annotations = $property->getDocComment();
  4872.         $pattern = '/@' . preg_quote($annotationName) . '\((.*?)\)/';
  4873.         preg_match($pattern, $annotations, $matches);
  4874.         if (isset($matches[1])) {
  4875.             return trim($matches[1], '"');
  4876.         }
  4877.         return null;
  4878.     }
  4879.     public function getFileViaMeltdApi($id,$melted){
  4880.         $curl = curl_init();
  4881.         curl_setopt_array($curl, array(
  4882.             CURLOPT_URL => 'https://api-v2.clavus.io/api/downloadFile',
  4883.             CURLOPT_RETURNTRANSFER => true,
  4884.             CURLOPT_ENCODING => '',
  4885.             CURLOPT_MAXREDIRS => 10,
  4886.             CURLOPT_TIMEOUT => 0,
  4887.             CURLOPT_FOLLOWLOCATION => true,
  4888.             CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  4889.             CURLOPT_CUSTOMREQUEST => 'POST',
  4890.             CURLOPT_POSTFIELDS =>'{
  4891.         "fileId": "'.$id.'"
  4892.       }',
  4893.             CURLOPT_HTTPHEADER => array(
  4894.                 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3bUlkIjoiY2t5aG4yenFyMTYwMTY1MWZxbGVveGk0b2p0IiwidWlkIjoiNDVhYzgxYTctYzY3ZC00MDY4LWJmYjktN2U4ODljMDFjMTEwIiwiaWF0IjoxNjg4NTQ3NTEzfQ.2Hq-Kkf9zOgzFx3CktIubDa39hqAlIMC9v6jLK-ZJOs',
  4895.                 'Content-Type: application/json'
  4896.             ),
  4897.         ));
  4898.         $response = curl_exec($curl);
  4899.         curl_close($curl);
  4900.         $res = json_decode($response);
  4901.         if($res->status == 'success'){
  4902.             $urlFile = $res->data->s3Url ;
  4903.             $curl = curl_init();
  4904.             curl_setopt($curl, CURLOPT_URL, $urlFile);
  4905.             curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  4906.             curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
  4907.             $filename = md5(uniqid()).'.pdf';
  4908.             $localFilename = $this->params->get('uploads_directory') . '/'.$filename;
  4909.             $fh = fopen($localFilename, "wb");
  4910.             curl_setopt($curl, CURLOPT_FILE, $fh);
  4911.             curl_exec($curl);
  4912.             curl_close($curl);
  4913.             if($melted->getIsProject()){
  4914.                 $entity = $melted->getProject();
  4915.             }else{
  4916.                 $etapClass = 'App\\Entity\\Etap'.$melted->getNumEtap();
  4917.                 $entity = $this->em->getRepository($etapClass)->findOneBy(['project'=>$melted->getProject()->getId()]);
  4918.             }
  4919.             $docUpload = new DocUpload();
  4920.             $champsName = $this->getAnnotationOptions($entity,$melted->getChampName(),'CustomAnnotation');
  4921.             $docUpload->setName($champsName.'.pdf');
  4922.             $docUpload->setPath($filename);
  4923.             $docUpload->setUserCreated($this->security->getUser());
  4924.             $this->em->persist($docUpload);
  4925.             $this->em->flush();
  4926.             if($melted->getIsProject()){
  4927.             }else{
  4928.                 $this->etapsService->getNomenclature($entity,$docUpload,$champsName);
  4929.             }
  4930.             return $docUpload;
  4931.         }
  4932.         curl_close($curl);
  4933.         return false;
  4934.     }
  4935.     public function getFileViaMeltdApiUrl($id){
  4936.         $curl = curl_init();
  4937.         curl_setopt_array($curl, array(
  4938.             CURLOPT_URL => 'https://api-v2.clavus.io/api/downloadFile',
  4939.             CURLOPT_RETURNTRANSFER => true,
  4940.             CURLOPT_ENCODING => '',
  4941.             CURLOPT_MAXREDIRS => 10,
  4942.             CURLOPT_TIMEOUT => 0,
  4943.             CURLOPT_FOLLOWLOCATION => true,
  4944.             CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  4945.             CURLOPT_CUSTOMREQUEST => 'POST',
  4946.             CURLOPT_POSTFIELDS =>'{
  4947.         "fileId": "'.$id.'"
  4948.       }',
  4949.             CURLOPT_HTTPHEADER => array(
  4950.                 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3bUlkIjoiY2t5aG4yenFyMTYwMTY1MWZxbGVveGk0b2p0IiwidWlkIjoiNDVhYzgxYTctYzY3ZC00MDY4LWJmYjktN2U4ODljMDFjMTEwIiwiaWF0IjoxNjg4NTQ3NTEzfQ.2Hq-Kkf9zOgzFx3CktIubDa39hqAlIMC9v6jLK-ZJOs',
  4951.                 'Content-Type: application/json'
  4952.             ),
  4953.         ));
  4954.         $response = curl_exec($curl);
  4955.         curl_close($curl);
  4956.         $res = json_decode($response);
  4957.         if($res->status == 'success'){
  4958.             $urlFile = $res->data->s3Url ;
  4959.             return $urlFile;
  4960.         }
  4961.         curl_close($curl);
  4962.         return false;
  4963.     }
  4964.     public function getNameChampGlobale($meltedId){
  4965.         $melted = $this->em->getRepository(MeltdChamps::class)->find($meltedId);
  4966.         if($melted->getIsProject()){
  4967.             $entity = $melted->getProject();
  4968.             $champsName = $this->getAnnotationOptions($entity,$melted->getChampName(),'CustomAnnotation') ;
  4969.         }else{
  4970.             $etapClass = 'App\\Entity\\Etap'.$melted->getNumEtap();
  4971.             $entity = $this->em->getRepository($etapClass)->findOneBy(['project'=>$melted->getProject()->getId()]);
  4972.             $description = 'Étap '.$entity->getEtap()->getName().' Timeline '.$entity->getEtap()->getCategory()->getName();
  4973.             $champsName = $this->getAnnotationOptions($entity,$melted->getChampName(),'CustomAnnotation').' ('.$description.')' ;
  4974.         }
  4975.         return $champsName;
  4976.     }
  4977.     public function getTabFacturationParProject($project){
  4978.         $developpementFactures = $this->em->getRepository(ProjectFactureFinance::class)->findSuiviByProject($project,'DEVEX');
  4979.         $constructionFactures = $this->em->getRepository(ProjectFactureFinance::class)->findSuiviByProject($project,'CAPEX');
  4980.         $exploitationFactures = $this->em->getRepository(ProjectFactureFinance::class)->findSuiviByProject($project,'OPEX');
  4981.         $developpementAvoirs = $this->em->getRepository(ProjectAvoir::class)->findSuiviByProject($project,'DEVEX');
  4982.         $constructionAvoirs = $this->em->getRepository(ProjectAvoir::class)->findSuiviByProject($project,'CAPEX');
  4983.         $exploitationAvoirs = $this->em->getRepository(ProjectAvoir::class)->findSuiviByProject($project,'OPEX');
  4984.         $mantantHtDeveloppement = 0;
  4985.         $mantantHtConstruction = 0;
  4986.         $mantantHtExploitation = 0;
  4987.         $mantantHtTotal = 0;
  4988.         $mantantHtBudgetDeveloppement = $project->getBudgetDeveloppement();
  4989.         $mantantHtBudgetConstruction = $project->getBudgetConstruction();
  4990.         $mantantHtBudgetExploitation = $project->getBudgetExploitation();
  4991.         $isDepasseDeveloppement = false;
  4992.         $isDepasseConstruction = false;
  4993.         $isDepasseExploitation = false;
  4994.         $isDepasseTotal = false;
  4995.         $pourcentageDeveloppement = 0;
  4996.         $pourcentageConstruction = 0;
  4997.         $pourcentageExploitation = 0;
  4998.         $pourcentageTotal = 0;
  4999.         foreach ($developpementFactures as $facture){
  5000.             $mantantHtDeveloppement += (float)$facture->getMontantHt();
  5001.         }
  5002.         foreach ($constructionFactures as $facture){
  5003.             $mantantHtConstruction += (float)$facture->getMontantHt();
  5004.         }
  5005.         foreach ($exploitationFactures as $facture){
  5006.             $mantantHtExploitation += (float)$facture->getMontantHt();
  5007.         }
  5008.         foreach ($developpementAvoirs as $facture){
  5009.             $mtHt = $facture->getMontantHt()?$facture->getMontantHt():$facture->getAvoir()->getMonatantHt();
  5010.             $mantantHtDeveloppement -= (float)$mtHt;
  5011.         }
  5012.         foreach ($constructionAvoirs as $facture){
  5013.             $mtHt = $facture->getMontantHt()?$facture->getMontantHt():$facture->getAvoir()->getMonatantHt();
  5014.             $mantantHtConstruction -= (float)$mtHt;
  5015.         }
  5016.         foreach ($exploitationAvoirs as $facture){
  5017.             $mtHt = $facture->getMontantHt()?$facture->getMontantHt():$facture->getAvoir()->getMonatantHt();
  5018.             $mantantHtExploitation -= (float)$mtHt;
  5019.         }
  5020.         if((float)$mantantHtBudgetDeveloppement > 0 ){
  5021.             if((float)$mantantHtBudgetDeveloppement < $mantantHtDeveloppement){
  5022.                 $isDepasseDeveloppement = true;
  5023.             }
  5024.         }else{
  5025.             $mantantHtBudgetDeveloppement = 0;
  5026.         }
  5027.         if($isDepasseDeveloppement){
  5028.             $pourcentageDeveloppement = $mantantHtDeveloppement ? ($mantantHtBudgetDeveloppement / $mantantHtDeveloppement * 100) : 0;
  5029.         }else{
  5030.             $pourcentageDeveloppement = $mantantHtBudgetDeveloppement ? ($mantantHtDeveloppement / $mantantHtBudgetDeveloppement * 100) : 0;
  5031.         }
  5032.         if((float)$mantantHtBudgetConstruction > 0 ){
  5033.             if((float)$mantantHtBudgetConstruction < $mantantHtConstruction){
  5034.                 $isDepasseConstruction = true;
  5035.             }
  5036.         }else{
  5037.             $mantantHtBudgetConstruction = 0;
  5038.         }
  5039.         if($isDepasseConstruction){
  5040.             $pourcentageConstruction = $mantantHtConstruction ? ($mantantHtBudgetConstruction / $mantantHtConstruction * 100) : 0;
  5041.         }else{
  5042.             $pourcentageConstruction = $mantantHtBudgetConstruction ? ($mantantHtConstruction / $mantantHtBudgetConstruction * 100) : 0;
  5043.         }
  5044.         $mantantHtBudgetTotal = $mantantHtBudgetConstruction + $mantantHtBudgetDeveloppement;
  5045.         $mantantHtTotal = $mantantHtDeveloppement + $mantantHtConstruction;
  5046.         if((float)$mantantHtBudgetTotal > 0 ){
  5047.             if((float)$mantantHtBudgetTotal < $mantantHtTotal){
  5048.                 $isDepasseTotal = true;
  5049.             }
  5050.         }else{
  5051.             $mantantHtBudgetTotal = 0;
  5052.         }
  5053.         if($isDepasseTotal){
  5054.             $pourcentageTotal = $mantantHtTotal ? ($mantantHtBudgetTotal / $mantantHtTotal * 100) : 0;
  5055.         }else{
  5056.             $pourcentageTotal = $mantantHtBudgetTotal ? ($mantantHtTotal / $mantantHtBudgetTotal * 100) : 0;
  5057.         }
  5058.         if((float)$mantantHtBudgetExploitation > 0 ){
  5059.             if((float)$mantantHtBudgetExploitation < $mantantHtExploitation){
  5060.                 $isDepasseExploitation = true;
  5061.             }
  5062.         }else{
  5063.             $mantantHtBudgetExploitation = 0;
  5064.         }
  5065.         if($isDepasseExploitation){
  5066.             $pourcentageExploitation = $mantantHtExploitation ? ($mantantHtBudgetExploitation / $mantantHtExploitation * 100) : 0;
  5067.         }else{
  5068.             $pourcentageExploitation = $mantantHtBudgetExploitation ? ($mantantHtExploitation / $mantantHtBudgetExploitation * 100) : 0;
  5069.         }
  5070.         return [
  5071.           'developpement' => ['factures'=>$developpementFactures,'avoirs'=>$developpementAvoirs,'montant'=>$mantantHtDeveloppement,'budget'=>$mantantHtBudgetDeveloppement,'pourcentage'=>$pourcentageDeveloppement,'isDepasse'=>$isDepasseDeveloppement] ,
  5072.           'construction' => ['factures'=>$constructionFactures,'avoirs'=>$constructionAvoirs,'montant'=>$mantantHtConstruction,'budget'=>$mantantHtBudgetConstruction,'pourcentage'=>$pourcentageConstruction,'isDepasse'=>$isDepasseConstruction] ,
  5073.           'exploitation' => ['factures'=>$exploitationFactures,'avoirs'=>$exploitationAvoirs,'montant'=>$mantantHtExploitation,'budget'=>$mantantHtBudgetExploitation,'pourcentage'=>$pourcentageExploitation,'isDepasse'=>$isDepasseExploitation],
  5074.           'total' => ['factures'=>[],'montant'=>$mantantHtTotal,'budget'=>$mantantHtBudgetTotal,'pourcentage'=>$pourcentageTotal,'isDepasse'=>$isDepasseTotal],
  5075.           'projet' => ['name'=>$project->getName()]
  5076.         ];
  5077.     }
  5078.     public function getPdfDoe($project){
  5079.         $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project'=>$project->getId()]);
  5080.         $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  5081.         $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project'=>$project->getId()]);
  5082.         $etap174 = $this->em->getRepository(Etap174::class)->findOneBy(['project'=>$project->getId()]);
  5083.         $etap161 = $this->em->getRepository(Etap161::class)->findOneBy(['project'=>$project->getId()]);
  5084.         $etap20 = $this->em->getRepository(Etap20::class)->findOneBy(['project'=>$project->getId()]);
  5085.         $html = $this->twig->render('admin/project/first-pdf-doe.html.twig',['project'=>$project,'etap14'=>$etap14,'etap160'=>$etap160]);
  5086.         $html2pdf = new Html2Pdf('P', 'A4', 'fr', true, 'UTF-8', array('5','5','5','5'));
  5087.         $html2pdf->getSecurityService()->disableCheckAllowedHosts();
  5088.         $html2pdf->pdf->SetAuthor('Prejeace-Industrial');
  5089.         $html2pdf->pdf->SetTitle('DOE');
  5090.         $html2pdf->pdf->SetSubject('DOE');
  5091.         $html2pdf->pdf->SetKeywords('DOE');
  5092.         $html2pdf->pdf->SetDisplayMode('real');
  5093.         $html2pdf->WriteHTML($html);
  5094.         $nameFichier = 'DOE-info'.time().'.pdf';
  5095.         $path_pdf = $this->params->get('uploads_directory').'/'.$nameFichier;
  5096.         $html2pdf->Output($path_pdf,'F');
  5097.         $filesDossierPcDpMultiple = [];
  5098.         $filesPlanDeCalepinageCablage = [];
  5099.         $filesModulePhotvoltaiques = [];
  5100.         $filesOnduleurs = [];
  5101.         $filesStructureIntegration = [];
  5102.         $filesGarantie = [];
  5103.         $filesCertificats = [];
  5104.         $filesConsuel = [];
  5105.         $filesPhotos = [];
  5106.         if($etap1){
  5107.             if(count($etap1->getFileDossierPcDpMultiple())>0){
  5108.                 foreach ($etap1->getFileDossierPcDpMultiple() as $item){
  5109.                     if($item->getIsArchived()){}
  5110.                     else{
  5111.                         $filesDossierPcDpMultiple[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5112.                     }
  5113.                 }
  5114.             }
  5115.         }
  5116.         if($etap174){
  5117.             if(count($etap174->getFilePlanCaplageStrings174Multiple())>0){
  5118.                 foreach ($etap174->getFilePlanCaplageStrings174Multiple() as $item){
  5119.                     if($item->getIsArchived()){}
  5120.                     else{
  5121.                         $filesPlanDeCalepinageCablage[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5122.                     }
  5123.                 }
  5124.             }
  5125.             if(count($etap174->getFilePlanCalepinageModule174Multiple())>0){
  5126.                 foreach ($etap174->getFilePlanCalepinageModule174Multiple() as $item){
  5127.                     if($item->getIsArchived()){}
  5128.                     else{
  5129.                         $filesPlanDeCalepinageCablage[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5130.                     }
  5131.                 }
  5132.             }
  5133.             if(count($etap174->getFileSchemaUnifilaireInstallation174Multiple())>0){
  5134.                 foreach ($etap174->getFileSchemaUnifilaireInstallation174Multiple() as $item){
  5135.                     if($item->getIsArchived()){}
  5136.                     else{
  5137.                         $filesPlanDeCalepinageCablage[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5138.                     }
  5139.                 }
  5140.             }
  5141.         }
  5142.         if($etap160){
  5143.             if(count($etap160->getFileEvaluationCarboneModuleMultiple())>0){
  5144.                 foreach ($etap160->getFileEvaluationCarboneModuleMultiple() as $item){
  5145.                     if($item->getIsArchived()){}
  5146.                     else{
  5147.                         $filesModulePhotvoltaiques[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5148.                     }
  5149.                 }
  5150.             }
  5151.             if(count($etap160->getFileFicheTechniqueModuleMultiple())>0){
  5152.                 foreach ($etap160->getFileFicheTechniqueModuleMultiple() as $item){
  5153.                     if($item->getIsArchived()){}
  5154.                     else{
  5155.                         $filesModulePhotvoltaiques[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5156.                     }
  5157.                 }
  5158.             }
  5159.             if(count($etap160->getFileFicheTechniqueOnduleurMultiple())>0){
  5160.                 foreach ($etap160->getFileFicheTechniqueOnduleurMultiple() as $item){
  5161.                     if($item->getIsArchived()){}
  5162.                     else{
  5163.                         $filesOnduleurs[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5164.                     }
  5165.                 }
  5166.             }
  5167.             if(count($etap160->getFileAttestationBrigageOnduleurMultiple())>0){
  5168.                 foreach ($etap160->getFileAttestationBrigageOnduleurMultiple() as $item){
  5169.                     if($item->getIsArchived()){}
  5170.                     else{
  5171.                         $filesOnduleurs[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5172.                     }
  5173.                 }
  5174.             }
  5175.             if(count($etap160->getFileFicheSystemeIntegrationMultiple())>0){
  5176.                 foreach ($etap160->getFileFicheSystemeIntegrationMultiple() as $item){
  5177.                     if($item->getIsArchived()){}
  5178.                     else{
  5179.                         $filesStructureIntegration[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5180.                     }
  5181.                 }
  5182.             }
  5183.             if(count($etap160->getFileFicheGarantiOnduleurMultiple())>0){
  5184.                 foreach ($etap160->getFileFicheGarantiOnduleurMultiple() as $item){
  5185.                     if($item->getIsArchived()){}
  5186.                     else{
  5187.                         $filesGarantie[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5188.                     }
  5189.                 }
  5190.             }
  5191.         }
  5192.         if($etap14) {
  5193.             if (count($etap14->getFileAttestationS21Multiple()) > 0) {
  5194.                 foreach ($etap14->getFileAttestationS21Multiple() as $item) {
  5195.                     if ($item->getIsArchived()) {
  5196.                     } else {
  5197.                         $filesCertificats[] = $this->params->get('uploads_directory') . '/' . $item->getPath();
  5198.                     }
  5199.                 }
  5200.             }
  5201.         }
  5202.         if($etap161) {
  5203.             if (count($etap161->getFileQualiPVInstallateurMultiple()) > 0) {
  5204.                 foreach ($etap161->getFileQualiPVInstallateurMultiple() as $item) {
  5205.                     if ($item->getIsArchived()) {
  5206.                     } else {
  5207.                         $filesCertificats[] = $this->params->get('uploads_directory') . '/' . $item->getPath();
  5208.                     }
  5209.                 }
  5210.             }
  5211.         }
  5212.         if($etap20) {
  5213.             if (count($etap20->getFileConsuelEtap20Multiple()) > 0) {
  5214.                 foreach ($etap20->getFileConsuelEtap20Multiple() as $item) {
  5215.                     if ($item->getIsArchived()) {
  5216.                     } else {
  5217.                         $filesConsuel[] = $this->params->get('uploads_directory') . '/' . $item->getPath();
  5218.                     }
  5219.                 }
  5220.             }
  5221.         }
  5222.         if($etap174){
  5223.             if(count($etap174->getFilePhotosGenerateur174Multiple())>0){
  5224.                 foreach ($etap174->getFilePhotosGenerateur174Multiple() as $item){
  5225.                     if($item->getIsArchived()){}
  5226.                     else{
  5227.                         $filesPhotos[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5228.                     }
  5229.                 }
  5230.             }
  5231.             if(count($etap174->getFileShemaAgencementShelterPhotos174Multiple())>0){
  5232.                 foreach ($etap174->getFileShemaAgencementShelterPhotos174Multiple() as $item){
  5233.                     if($item->getIsArchived()){}
  5234.                     else{
  5235.                         $filesPhotos[] = $this->params->get('uploads_directory') . '/'.$item->getPath();
  5236.                     }
  5237.                 }
  5238.             }
  5239.         }
  5240.         $pdf = new Fpdi();
  5241.         $fileContent = file_get_contents($path_pdf);
  5242.         $pageCount = $pdf->setSourceFile(StreamReader::createByString($fileContent));
  5243.         for ($i = 0; $i < $pageCount; $i++) {
  5244.             $pdf->setPrintHeader(false);
  5245.             $tpl = $pdf->importPage($i + 1, '/MediaBox');
  5246.             $pdf->addPage();
  5247.             $pdf->useTemplate($tpl,0,0,null,null,true);
  5248.         }
  5249.         $pdfFile = $this->addPagePdfStr('Le dossier PC/DP du projet ',$filesDossierPcDpMultiple); $pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5250.         foreach ($filesDossierPcDpMultiple as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5251.         $pdfFile = $this->addPagePdfStr('Plan de calepinage et de câblage ',$filesPlanDeCalepinageCablage); $pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5252.         foreach ($filesPlanDeCalepinageCablage as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5253.         $pdfFile = $this->addPagePdfStr('Documentation technique modules photovoltaiques',$filesModulePhotvoltaiques);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5254.         foreach ($filesModulePhotvoltaiques as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5255.         $pdfFile = $this->addPagePdfStr('Documentation technique onduleurs',$filesOnduleurs);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5256.         foreach ($filesOnduleurs as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5257.         $pdfFile = $this->addPagePdfStr('Documentation technique structure d’intégration',$filesStructureIntegration);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5258.         foreach ($filesStructureIntegration as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5259.         $pdfFile = $this->addPagePdfStr('Documentation de garantie',$filesGarantie);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5260.         foreach ($filesGarantie as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5261.         $pdfFile = $this->addPagePdfStr('Certificats',$filesCertificats);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5262.         foreach ($filesCertificats as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5263.         $pdfFile = $this->addPagePdfStr('Consuel',$filesConsuel);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5264.         foreach ($filesConsuel as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5265.         $pdfFile = $this->addPagePdfStr('Photos',$filesPhotos);$pdf = $this->addPdfFpdi($pdf,$pdfFile);
  5266.         foreach ($filesPhotos as $file) {$pdf = $this->addPdfFpdi($pdf,$file);}
  5267.         if(file_exists($path_pdf)){
  5268.             unlink($path_pdf);
  5269.         }
  5270.         return $pdf;
  5271.     }
  5272.     public function addZipArray($zip,$namePath,$array){
  5273.         $name = $namePath;
  5274.         if(count($array)>0){
  5275.             foreach ($array as $item){
  5276.                 $name = $namePath.($item->getNomenclature()?  $item->getCreatedAt()->format('d-m-Y H:i:s').' - '.$item->getNomenclature(): $item->getPath());
  5277.                 $path = $this->params->get('uploads_directory').'/'.$item->getPath();
  5278.                 $zip->addFile($path,$name);
  5279.             }
  5280.         }else{
  5281.             $zip->addEmptyDir($name);
  5282.         }
  5283.         return $zip;
  5284.     }
  5285.     public function getZipBail($project){
  5286.         $data = $this->getBailListFile($project);
  5287.         $zip = new \ZipArchive();
  5288.         $zipfile = $this->params->get('zips_directory') . '/bail-' . $project->getName() .'.zip';
  5289.         if (file_exists($zipfile)) unlink($zipfile);
  5290.         if ($zip->open($zipfile, \ZipArchive::CREATE) === TRUE) {
  5291.             foreach ($data as $key => $datum){
  5292.                 if($key == 'filesDossierPcDpMultiple'){
  5293.                     $name = 'Urbanisme/Dossier PC - DP/'; $zip = $this->addZipArray($zip,$name,$datum);
  5294.                 }
  5295.                 if($key == 'filesArretePcDpMultiple'){
  5296.                     $name = 'Urbanisme/Arrêté PC/DP/'; $zip = $this->addZipArray($zip,$name,$datum);
  5297.                 }
  5298.                 if($key == 'filesPVPassageHuissierMultiple'){
  5299.                     $name = 'Urbanisme/PV passage huissier/'; $zip = $this->addZipArray($zip,$name,$datum);
  5300.                 }
  5301.                 if($key == 'filesCertificatNonRecoursMultiple'){
  5302.                     $name = 'Urbanisme/Certificat de non-recours/'; $zip = $this->addZipArray($zip,$name,$datum);
  5303.                 }
  5304.                 if($key == 'filesCertificatNonRetraitMultiple'){
  5305.                     $name = 'Urbanisme/Certificat de non-retrait/'; $zip = $this->addZipArray($zip,$name,$datum);
  5306.                 }
  5307.                 if($key == 'filesPromessebailMultiple'){
  5308.                     $name = 'Foncier/Promesse de bail/'; $zip = $this->addZipArray($zip,$name,$datum);
  5309.                 }
  5310.                 if($key == 'filesEtatHypothecaireMultiple'){
  5311.                     $name = 'Foncier/Etat hypothécaire/'; $zip = $this->addZipArray($zip,$name,$datum);
  5312.                 }
  5313.                 if($key == 'filesTitreProprieteMultiple'){
  5314.                     $name = 'Foncier/Titre de propriété/'; $zip = $this->addZipArray($zip,$name,$datum);
  5315.                 }
  5316.                 if($key == 'filesAutreEtap6'){
  5317.                     $name = 'Foncier/Autres (Cession de bail, projet de bail…)/'; $zip = $this->addZipArray($zip,$name,$datum);
  5318.                 }
  5319.                 if($key == 'filesExtraitMatriceCadastrale'){
  5320.                     $name = 'Foncier/Extrait de matrice cadastrale/'; $zip = $this->addZipArray($zip,$name,$datum);
  5321.                 }
  5322.                 if($key == 'filesCarteIdentite'){
  5323.                     $name = 'Foncier/Carte d’identité/'; $zip = $this->addZipArray($zip,$name,$datum);
  5324.                 }
  5325.                 if($key == 'filesLivretFamille'){
  5326.                     $name = 'Foncier/Livret de famille/'; $zip = $this->addZipArray($zip,$name,$datum);
  5327.                 }
  5328.                 if($key == 'filesAccordMl'){
  5329.                     $name = 'Foncier/Accord ML/'; $zip = $this->addZipArray($zip,$name,$datum);
  5330.                 }
  5331.                 if($key == 'filesKbis'){
  5332.                     $name = 'Foncier/Kbis/'; $zip = $this->addZipArray($zip,$name,$datum);
  5333.                 }
  5334.                 if($key == 'filesStatuts'){
  5335.                     $name = 'Foncier/Statuts/'; $zip = $this->addZipArray($zip,$name,$datum);
  5336.                 }
  5337.                 if($key == 'filesEtatDecriptifMultiple'){
  5338.                     $name = 'Foncier/DA - EDDV/'; $zip = $this->addZipArray($zip,$name,$datum);
  5339.                 }
  5340.                 if($key == 'filesPlanServitudesMultiple'){
  5341.                     $name = 'Foncier/Plan de servitudes/'; $zip = $this->addZipArray($zip,$name,$datum);
  5342.                 }
  5343.             }
  5344.         }
  5345.         return $zipfile;
  5346.     }
  5347.     private function addPdfFpdi($pdf,$file){
  5348.         $fileContent = file_get_contents($file);
  5349.         if(strpos(mime_content_type($file),'image/') === 0){
  5350.             $pdf->addPage();
  5351.             $pdf->Image($file);
  5352.         }else if(strpos(mime_content_type($file),'application/pdf') === 0){
  5353.             $pageCount = $pdf->setSourceFile(StreamReader::createByString($fileContent));
  5354.             for ($i = 0; $i < $pageCount; $i++) {
  5355.                 $tpl = $pdf->importPage($i + 1, '/MediaBox');
  5356.                 $pdf->addPage();
  5357.                 $pdf->useTemplate($tpl,0,0,null,null,true);
  5358.             }
  5359.         }
  5360.         return $pdf;
  5361.     }
  5362.     private function addPagePdfStr($str,$array){
  5363.         $html = $this->twig->render('admin/project/page-pdf-str.html.twig',['str'=>$str,'array'=>$array]);
  5364.         $html2pdf = new Html2Pdf('P', 'A4', 'fr', true, 'UTF-8', array('5','5','5','5'));
  5365.         $html2pdf->getSecurityService()->disableCheckAllowedHosts();
  5366.         $html2pdf->pdf->SetAuthor('Prejeace-Industrial');
  5367.         $html2pdf->pdf->SetTitle('DOE');
  5368.         $html2pdf->pdf->SetSubject('DOE');
  5369.         $html2pdf->pdf->SetKeywords('DOE');
  5370.         $html2pdf->pdf->SetDisplayMode('real');
  5371.         $html2pdf->WriteHTML($html);
  5372.         $nameFichier = 'page-pdf-str.pdf';
  5373.         $path_pdf = $this->params->get('uploads_directory').'/'.$nameFichier;
  5374.         $html2pdf->Output($path_pdf,'F');
  5375.         return $path_pdf ;
  5376.     }
  5377.     public function addComment2($request,$user,$idComment=null)
  5378.     {
  5379.         $comment = $request->get('comment');
  5380.         $token = $request->get('token');
  5381.         if($comment and $token){
  5382.             $project = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  5383.             if($project && $user){
  5384.                 if($idComment){
  5385.                     $commentEntity = $this->em->getRepository(CommentProject2::class)->find($idComment);
  5386.                     $commentEntity->setUpdateAt(new \DateTime());
  5387.                     $commentChild = $commentEntity->getComment();
  5388.                     $userChild = $commentEntity->getUser();
  5389.                     $createdAt = $commentEntity->getCreatedAt();
  5390.                     $commentEntityChild = new CommentProject2Child();
  5391.                     $commentEntityChild->setUser($userChild);
  5392.                     $commentEntityChild->setComment($commentChild);
  5393.                     $commentEntityChild->setCommentProject2($commentEntity);
  5394.                     $commentEntityChild->setCreatedAt($createdAt);
  5395.                     $this->em->persist($commentEntityChild);
  5396.                     $this->em->flush();
  5397.                 }else{
  5398.                     $commentEntity = new CommentProject2();
  5399.                 }
  5400.                 $commentEntity->setProject($project);
  5401.                 $commentEntity->setUser($user);
  5402.                 $commentEntity->setComment($comment);
  5403.                 $this->em->persist($commentEntity);
  5404.                 $this->em->flush();
  5405.                 $this->notification->notifCommentProjectAllUser($project,$user);
  5406.                 return [
  5407.                     'commentEntity' => $commentEntity,
  5408.                     'project' => $project,
  5409.                     'success' => true
  5410.                 ];
  5411.             }
  5412.         }
  5413.         return [
  5414.             'success' => false
  5415.         ];
  5416.     }
  5417.     public function deleteComment2($idComment)
  5418.     {
  5419.         if($idComment){
  5420.             $commentEntity = $this->em->getRepository(CommentProject2::class)->find($idComment);
  5421.             if($commentEntity) {
  5422.                 $this->em->remove($commentEntity);
  5423.                 $this->em->flush();
  5424.             }
  5425.             return [
  5426.                 'success' => true
  5427.             ];
  5428.         }
  5429.         return [
  5430.             'success' => false
  5431.         ];
  5432.     }
  5433.     public function getDoeListFile($project){
  5434.         $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project'=>$project->getId()]);
  5435.         $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  5436.         $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project'=>$project->getId()]);
  5437.         $etap174 = $this->em->getRepository(Etap174::class)->findOneBy(['project'=>$project->getId()]);
  5438.         $etap161 = $this->em->getRepository(Etap161::class)->findOneBy(['project'=>$project->getId()]);
  5439.         $etap20 = $this->em->getRepository(Etap20::class)->findOneBy(['project'=>$project->getId()]);
  5440.         $filesDossierPcDpMultiple = [];
  5441.         $filesPlanDeCalepinageCablage = [];
  5442.         $filesModulePhotvoltaiques = [];
  5443.         $filesOnduleurs = [];
  5444.         $filesStructureIntegration = [];
  5445.         $filesGarantie = [];
  5446.         $filesCertificats = [];
  5447.         $filesConsuel = [];
  5448.         $filesPhotos = [];
  5449.         if($etap1){
  5450.             if(count($etap1->getFileDossierPcDpMultiple())>0){
  5451.                 foreach ($etap1->getFileDossierPcDpMultiple() as $item){
  5452.                     $filesDossierPcDpMultiple[] = $item;
  5453.                 }
  5454.             }
  5455.         }
  5456.         if($etap174){
  5457.             if(count($etap174->getFilePlanCaplageStrings174Multiple())>0){
  5458.                 foreach ($etap174->getFilePlanCaplageStrings174Multiple() as $item){
  5459.                         $filesPlanDeCalepinageCablage[] = $item ;
  5460.                 }
  5461.             }
  5462.             if(count($etap174->getFilePlanCalepinageModule174Multiple())>0){
  5463.                 foreach ($etap174->getFilePlanCalepinageModule174Multiple() as $item){
  5464.                         $filesPlanDeCalepinageCablage[] = $item ;
  5465.                 }
  5466.             }
  5467.             if(count($etap174->getFileSchemaUnifilaireInstallation174Multiple())>0){
  5468.                 foreach ($etap174->getFileSchemaUnifilaireInstallation174Multiple() as $item){
  5469.                     $filesPlanDeCalepinageCablage[] =  $item ;
  5470.                 }
  5471.             }
  5472.         }
  5473.         if($etap160){
  5474.             if(count($etap160->getFileEvaluationCarboneModuleMultiple())>0){
  5475.                 foreach ($etap160->getFileEvaluationCarboneModuleMultiple() as $item){
  5476.                     $filesModulePhotvoltaiques[] = $item ;
  5477.                 }
  5478.             }
  5479.             if(count($etap160->getFileFicheTechniqueModuleMultiple())>0){
  5480.                 foreach ($etap160->getFileFicheTechniqueModuleMultiple() as $item){
  5481.                     $filesModulePhotvoltaiques[] = $item ;
  5482.                 }
  5483.             }
  5484.             if(count($etap160->getFileFicheTechniqueOnduleurMultiple())>0){
  5485.                 foreach ($etap160->getFileFicheTechniqueOnduleurMultiple() as $item){
  5486.                     $filesOnduleurs[] = $item ;
  5487.                 }
  5488.             }
  5489.             if(count($etap160->getFileAttestationBrigageOnduleurMultiple())>0){
  5490.                 foreach ($etap160->getFileAttestationBrigageOnduleurMultiple() as $item){
  5491.                     $filesOnduleurs[] = $item ;
  5492.                 }
  5493.             }
  5494.             if(count($etap160->getFileFicheSystemeIntegrationMultiple())>0){
  5495.                 foreach ($etap160->getFileFicheSystemeIntegrationMultiple() as $item){
  5496.                     $filesStructureIntegration[] = $item ;
  5497.                 }
  5498.             }
  5499.             if(count($etap160->getFileFicheGarantiOnduleurMultiple())>0){
  5500.                 foreach ($etap160->getFileFicheGarantiOnduleurMultiple() as $item){
  5501.                     $filesGarantie[] = $item ;
  5502.                 }
  5503.             }
  5504.         }
  5505.         if($etap14) {
  5506.             if (count($etap14->getFileAttestationS21Multiple()) > 0) {
  5507.                 foreach ($etap14->getFileAttestationS21Multiple() as $item) {
  5508.                     $filesCertificats[] = $item ;
  5509.                 }
  5510.             }
  5511.         }
  5512.         if($etap161) {
  5513.             if (count($etap161->getFileQualiPVInstallateurMultiple()) > 0) {
  5514.                 foreach ($etap161->getFileQualiPVInstallateurMultiple() as $item) {
  5515.                     $filesCertificats[] = $item ;
  5516.                 }
  5517.             }
  5518.         }
  5519.         if($etap20) {
  5520.             if (count($etap20->getFileConsuelEtap20Multiple()) > 0) {
  5521.                 foreach ($etap20->getFileConsuelEtap20Multiple() as $item) {
  5522.                     $filesConsuel[] = $item ;
  5523.                 }
  5524.             }
  5525.         }
  5526.         if($etap174){
  5527.             if(count($etap174->getFilePhotosGenerateur174Multiple())>0){
  5528.                 foreach ($etap174->getFilePhotosGenerateur174Multiple() as $item){
  5529.                     $filesPhotos[] = $item ;
  5530.                 }
  5531.             }
  5532.             if(count($etap174->getFileShemaAgencementShelterPhotos174Multiple())>0){
  5533.                 foreach ($etap174->getFileShemaAgencementShelterPhotos174Multiple() as $item){
  5534.                     $filesPhotos[] = $item ;
  5535.                 }
  5536.             }
  5537.         }
  5538.         return [
  5539.             'filesDossierPcDpMultiple' => $filesDossierPcDpMultiple,
  5540.             'filesPlanDeCalepinageCablage' => $filesPlanDeCalepinageCablage,
  5541.             'filesModulePhotvoltaiques' => $filesModulePhotvoltaiques,
  5542.             'filesOnduleurs' => $filesOnduleurs,
  5543.             'filesStructureIntegration' => $filesStructureIntegration,
  5544.             'filesGarantie' => $filesGarantie,
  5545.             'filesCertificats' => $filesCertificats,
  5546.             'filesConsuel' => $filesConsuel,
  5547.             'filesPhotos' => $filesPhotos
  5548.         ];
  5549.     }
  5550.     public function getBailListFile($project){
  5551.         $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  5552.         $etap6 = $this->em->getRepository(Etap6::class)->findOneBy(['project'=>$project->getId()]);
  5553.         $etap601 = $this->em->getRepository(Etap601::class)->findOneBy(['project'=>$project->getId()]);
  5554.         $etap1 = $this->em->getRepository(Etap1::class)->findOneBy(['project'=>$project->getId()]);
  5555.         $etap2 = $this->em->getRepository(Etap2::class)->findOneBy(['project'=>$project->getId()]);
  5556.         $filesDossierPcDpMultiple = [];
  5557.         $filesArretePcDpMultiple = [];
  5558.         $filesPVPassageHuissierMultiple = [];
  5559.         $filesCertificatNonRecoursMultiple = [];
  5560.         $filesCertificatNonRetraitMultiple= [];
  5561.         $filesPromessebailMultiple = [];
  5562.         $filesEtatHypothecaireMultiple = [];
  5563.         $filesTitreProprieteMultiple = [];
  5564.         $filesAutreEtap6 = [];
  5565.         $filesExtraitMatriceCadastrale = [];
  5566.         $filesCarteIdentite = [];
  5567.         $filesLivretFamille = [];
  5568.         $filesAccordMl = [];
  5569.         $filesKbis = [];
  5570.         $filesStatuts = [];
  5571.         $filesEtatDecriptifMultiple = [];
  5572.         $filesPlanServitudesMultiple = [];
  5573.         if($etap1){
  5574.             if(count($etap1->getFileDossierPcDpMultiple())>0){
  5575.                 foreach ($etap1->getFileDossierPcDpMultiple() as $item){
  5576.                     $filesDossierPcDpMultiple[] = $item;
  5577.                 }
  5578.             }
  5579.             if(count($etap1->getFileArretePcDpMultiple())>0){
  5580.                 foreach ($etap1->getFileArretePcDpMultiple() as $item){
  5581.                     $filesArretePcDpMultiple[] = $item;
  5582.                 }
  5583.             }
  5584.         }
  5585.         if($etap2){
  5586.             if(count($etap2->getFilePVPassageHuissierMultiple())>0){
  5587.                 foreach ($etap2->getFilePVPassageHuissierMultiple() as $item){
  5588.                     $filesPVPassageHuissierMultiple[] = $item;
  5589.                 }
  5590.             }
  5591.             if(count($etap2->getFileCertificatNonRecoursMultiple())>0){
  5592.                 foreach ($etap2->getFileCertificatNonRecoursMultiple() as $item){
  5593.                     $filesCertificatNonRecoursMultiple[] = $item;
  5594.                 }
  5595.             }
  5596.             if(count($etap2->getFileCertificatNonRetraitMultiple())>0){
  5597.                 foreach ($etap2->getFileCertificatNonRetraitMultiple() as $item){
  5598.                     $filesCertificatNonRetraitMultiple[] = $item;
  5599.                 }
  5600.             }
  5601.         }
  5602.         if($etap5){
  5603.             if(count($etap5->getFilePromessebailMultiple())>0){
  5604.                 foreach ($etap5->getFilePromessebailMultiple() as $item){
  5605.                     $filesPromessebailMultiple[] = $item;
  5606.                 }
  5607.             }
  5608.         }
  5609.         if($etap6){
  5610.             if(count($etap6->getFileEtatHypothecaireMultiple())>0){
  5611.                 foreach ($etap6->getFileEtatHypothecaireMultiple() as $item){
  5612.                     $filesEtatHypothecaireMultiple[] = $item;
  5613.                 }
  5614.             }
  5615.             if(count($etap6->getFileTitreProprieteMultiple())>0){
  5616.                 foreach ($etap6->getFileTitreProprieteMultiple() as $item){
  5617.                     $filesTitreProprieteMultiple[] = $item;
  5618.                 }
  5619.             }
  5620.             if(count($etap6->getFileAutreEtap6())>0){
  5621.                 foreach ($etap6->getFileAutreEtap6() as $item){
  5622.                     $filesAutreEtap6[] = $item;
  5623.                 }
  5624.             }
  5625.             if(count($etap6->getFileExtraitMatriceCadastrale())>0){
  5626.                 foreach ($etap6->getFileExtraitMatriceCadastrale() as $item){
  5627.                     $filesExtraitMatriceCadastrale[] = $item;
  5628.                 }
  5629.             }
  5630.             if(count($etap6->getFileCarteIdentite())>0){
  5631.                 foreach ($etap6->getFileCarteIdentite() as $item){
  5632.                     $filesCarteIdentite[] = $item;
  5633.                 }
  5634.             }
  5635.             if(count($etap6->getFileLivretFamille())>0){
  5636.                 foreach ($etap6->getFileLivretFamille() as $item){
  5637.                     $filesLivretFamille[] = $item;
  5638.                 }
  5639.             }
  5640.             if(count($etap6->getFileAccordMl())>0){
  5641.                 foreach ($etap6->getFileAccordMl() as $item){
  5642.                     $filesAccordMl[] = $item;
  5643.                 }
  5644.             }
  5645.             if(count($etap6->getFileKbis())>0){
  5646.                 foreach ($etap6->getFileKbis() as $item){
  5647.                     $filesKbis[] = $item;
  5648.                 }
  5649.             }
  5650.             if(count($etap6->getFileStatuts())>0){
  5651.                 foreach ($etap6->getFileStatuts() as $item){
  5652.                     $filesStatuts[] = $item;
  5653.                 }
  5654.             }
  5655.         }
  5656.         if($etap601){
  5657.             if(count($etap601->getFileEtatDecriptifMultiple())>0){
  5658.                 foreach ($etap601->getFileEtatDecriptifMultiple() as $item){
  5659.                     $filesEtatDecriptifMultiple[] = $item;
  5660.                 }
  5661.             }
  5662.             if(count($etap601->getFilePlanServitudesMultiple())>0){
  5663.                 foreach ($etap601->getFilePlanServitudesMultiple() as $item){
  5664.                     $filesPlanServitudesMultiple[] = $item;
  5665.                 }
  5666.             }
  5667.         }
  5668.         return [
  5669.             'filesDossierPcDpMultiple' => $filesDossierPcDpMultiple,
  5670.             'filesArretePcDpMultiple' => $filesArretePcDpMultiple,
  5671.             'filesPVPassageHuissierMultiple' => $filesPVPassageHuissierMultiple,
  5672.             'filesCertificatNonRecoursMultiple' => $filesCertificatNonRecoursMultiple,
  5673.             'filesCertificatNonRetraitMultiple' => $filesCertificatNonRetraitMultiple,
  5674.             'filesPromessebailMultiple' => $filesPromessebailMultiple,
  5675.             'filesEtatHypothecaireMultiple' => $filesEtatHypothecaireMultiple,
  5676.             'filesTitreProprieteMultiple' => $filesTitreProprieteMultiple,
  5677.             'filesAutreEtap6' => $filesAutreEtap6,
  5678.             'filesExtraitMatriceCadastrale' => $filesExtraitMatriceCadastrale,
  5679.             'filesCarteIdentite' => $filesCarteIdentite,
  5680.             'filesLivretFamille' => $filesLivretFamille,
  5681.             'filesAccordMl' => $filesAccordMl,
  5682.             'filesKbis' => $filesKbis,
  5683.             'filesStatuts' => $filesStatuts,
  5684.             'filesEtatDecriptifMultiple' => $filesEtatDecriptifMultiple,
  5685.             'filesEtatDecriptifMultiple' => $filesEtatDecriptifMultiple,
  5686.             'filesPlanServitudesMultiple' => $filesPlanServitudesMultiple,
  5687.         ];
  5688.     }
  5689.     public function extractBudget($projects,$request){
  5690.         $file= $this->params->get('zips_directory')."/extraire_budgets.xlsx";
  5691.         $spreadsheet = new Spreadsheet();
  5692.         $sheet = $spreadsheet->getActiveSheet();
  5693.         // Head 2
  5694.         $tableHead2 = [
  5695.             'font'=>[
  5696.                 'color'=>[
  5697.                     'rgb'=>'0071c1'
  5698.                 ],
  5699.                 'bold'=>true,
  5700.                 'size'=>12
  5701.             ],
  5702.             'fill'=>[
  5703.                 'fillType' => Fill::FILL_SOLID,
  5704.                 'startColor' => [
  5705.                     'rgb' => 'dcebf4'
  5706.                 ]
  5707.             ],
  5708.         ];
  5709.         $sheet->setCellValue('A1',"Nom du projet")
  5710.             ->setCellValue('B1',"Budget développement")
  5711.             ->setCellValue('C1',"Montant dépenses développement")
  5712.             ->setCellValue('D1',"Budget Construction")
  5713.             ->setCellValue('E1',"Montant factures Construction")
  5714.             ->setCellValue('F1',"Total DEVEX - CAPEX")
  5715.             ->setCellValue('G1',"Montant dépenses DEVEX - CAPEX")
  5716.             ->setCellValue('H1',"Exploitation");
  5717.         // Borders a2 z2
  5718.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5719.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5720.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5721.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5722.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5723.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5724.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5725.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5726.         //width
  5727.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(35);
  5728.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  5729.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(35);
  5730.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  5731.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(35);
  5732.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  5733.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(35);
  5734.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(16);
  5735.         $spreadsheet->getActiveSheet()->getStyle('A1:H1')->applyFromArray($tableHead2);
  5736.         //loop through the data
  5737.         //current row
  5738.         $row=2;
  5739.         foreach($projects as $project){
  5740.             $tab = $this->getTabFacturationParProject($project);
  5741.             $spreadsheet->getActiveSheet()
  5742.                 ->setCellValue('A'.$row , $tab['projet']['name'])
  5743.                 ->setCellValue('B'.$row , $tab['developpement']['budget'])
  5744.                 ->setCellValue('C'.$row , $tab['developpement']['montant'])
  5745.                 ->setCellValue('D'.$row , $tab['construction']['budget'])
  5746.                 ->setCellValue('E'.$row , $tab['construction']['montant'])
  5747.                 ->setCellValue('F'.$row , $tab['total']['budget'])
  5748.                 ->setCellValue('G'.$row , $tab['total']['montant'])
  5749.                 ->setCellValue('H'.$row , $tab['exploitation']['montant'])
  5750.             ;
  5751.             //increment row
  5752.             $row++;
  5753.         }
  5754.         $firstRow=1;
  5755.         $lastRow=$row-1;
  5756.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":H".$lastRow);
  5757.         $writer = new Xlsx($spreadsheet);
  5758.         $writer->save($file);
  5759.         return $file;
  5760.     }
  5761.     public function extractRapports($rapports,$request){
  5762.         $file= $this->params->get('zips_directory')."/extraire_rapports.xlsx";
  5763.         $spreadsheet = new Spreadsheet();
  5764.         $sheet = $spreadsheet->getActiveSheet();
  5765.         // Head 2
  5766.         $tableHead2 = [
  5767.             'font'=>[
  5768.                 'color'=>[
  5769.                     'rgb'=>'0071c1'
  5770.                 ],
  5771.                 'bold'=>true,
  5772.                 'size'=>12
  5773.             ],
  5774.             'fill'=>[
  5775.                 'fillType' => Fill::FILL_SOLID,
  5776.                 'startColor' => [
  5777.                     'rgb' => 'dcebf4'
  5778.                 ]
  5779.             ],
  5780.         ];
  5781.         $sheet->setCellValue('A1',"Centrale")
  5782.             ->setCellValue('B1',"Objet d’intervention")
  5783.             ->setCellValue('C1',"Nom du rapport")
  5784.             ->setCellValue('D1',"Date de l’intervention")
  5785.             ->setCellValue('E1',"Description de l’intervention")
  5786.             ->setCellValue('F1',"Suivi nécessaire")
  5787.             ->setCellValue('G1',"Commentaire Suivi")
  5788.             ->setCellValue('H1',"Chargé intervention corrective")
  5789.             ->setCellValue('I1',"Devis à recevoir")
  5790.             ->setCellValue('J1',"Constructeur")
  5791.             ->setCellValue('K1',"Pertes de production")
  5792.             ->setCellValue('L1',"Date de début de perte")
  5793.             ->setCellValue('M1',"Date de fin de perte")
  5794.             ->setCellValue('N1',"Coût de l’intervention")
  5795.             ->setCellValue('O1',"Numero facture")
  5796.             ->setCellValue('P1',"Document url")
  5797.         ;
  5798.         // Borders a2 z2
  5799.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5800.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5801.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5802.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5803.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5804.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5805.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5806.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5807.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5808.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5809.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5810.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5811.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5812.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5813.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5814.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5815.         //width
  5816.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
  5817.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  5818.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  5819.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  5820.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  5821.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  5822.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(30);
  5823.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(30);
  5824.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(30);
  5825.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(30);
  5826.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(30);
  5827.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(30);
  5828.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(30);
  5829.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(30);
  5830.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(30);
  5831.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(30);
  5832.         $spreadsheet->getActiveSheet()->getStyle('A1:P1')->applyFromArray($tableHead2);
  5833.         //loop through the data
  5834.         //current row
  5835.         $row=2;
  5836.         foreach($rapports as $rapport){
  5837.             $urlDocumment = $rapport->getRapport()?$rapport->getRapport()->getPath() : null;
  5838.             $nameDocumment = $rapport->getRapport()?$rapport->getRapport()->getNomenclature()?$rapport->getRapport()->getNomenclature():$rapport->getRapport()->getName():null;
  5839.            $factureNum = '';
  5840.             $j = 1;
  5841.             $jCount = count($rapport->getFinanceFacture());
  5842.             if($jCount>0){
  5843.                 foreach ($rapport->getFinanceFacture() as $item){
  5844.                     $trait = $jCount == $j  ? ' ' : "\n";
  5845.                     $factureNum .= $item->getNumeroFacture().$trait;
  5846.                     $j++;
  5847.                 }
  5848.                 $spreadsheet->getActiveSheet()->setCellValue('O'.$row , $factureNum );
  5849.             }
  5850.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getAlignment()->setWrapText(true);
  5851.             $spreadsheet->getActiveSheet()
  5852.                 ->setCellValue('A'.$row , $rapport->getProject()?$rapport->getProject()->getName():'')
  5853.                 ->setCellValue('B'.$row , $rapport->getObjectInterventionSrc())
  5854.                 ->setCellValue('C'.$row , $rapport->getName())
  5855.                 ->setCellValue('E'.$row , $rapport->getDescriptionIntervention())
  5856.                 ->setCellValue('F'.$row , $rapport->getIsSuiviNecessaire()? 'Oui': 'Non')
  5857.                 ->setCellValue('G'.$row , $rapport->getCommentaireSuivi())
  5858.                 ->setCellValue('H'.$row , $rapport->getChargeInterventionCorrectiveStrAll())
  5859.                 ->setCellValue('I'.$row , $rapport->getDevisARecevoir()? 'Oui': 'Non')
  5860.                 ->setCellValue('J'.$row , $rapport->getConstructeur()? $rapport->getConstructeur()->getName() : '-')
  5861.                 ->setCellValue('K'.$row , $rapport->getIsPerteProduction()? 'Oui': 'Non')
  5862.                 ->setCellValue('N'.$row , $rapport->getCoutIntervention() ? $rapport->getCoutIntervention().'€' : '0€')
  5863.             ;
  5864.             $spreadsheet = $this->addStyleToCellDate('D',$row,$rapport->getDateIntervention(),$spreadsheet);
  5865.             $spreadsheet = $this->addStyleToCellDate('L',$row,$rapport->getIsPerteProduction()?$rapport->getDateDebutPerteProduction():null,$spreadsheet);
  5866.             $spreadsheet = $this->addStyleToCellDate('M',$row,$rapport->getIsPerteProduction()?$rapport->getDateFinDebutPerteProduction():null,$spreadsheet);
  5867.                 ;
  5868.             if($urlDocumment){
  5869.                 $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  5870.                 $spreadsheet->getActiveSheet()->setCellValue('P'.$row ,$nameDocumment);
  5871.                 $spreadsheet->getActiveSheet()->getCell('P'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlDocumment);
  5872.             }
  5873.             //increment row
  5874.             $row++;
  5875.         }
  5876.         $firstRow=1;
  5877.         $lastRow=$row-1;
  5878.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":L".$lastRow);
  5879.         $writer = new Xlsx($spreadsheet);
  5880.         $writer->save($file);
  5881.         return $file;
  5882.     }
  5883.     public function getRapportByRequestSelectAll($request){
  5884.         $search = $request->get('search');
  5885.         $centrale = $request->get('centrale');
  5886.         $suivi = $request->get('suivi');
  5887.         $isPerteProduction = $request->get('isPerteProduction');
  5888.         $interventionObject = $request->get('interventionObject');
  5889.         $centraleToken = $request->get('centraleToken');
  5890.         $user = $this->security->getUser();
  5891.         $roles = $user->getRoles();
  5892.         $spvsTab = [];
  5893.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  5894.             $spvs = $user->getSpv();
  5895.             foreach($spvs as $item){
  5896.                 $spvsTab[] = $item->getId();
  5897.             }
  5898.         }
  5899.         $filters = [
  5900.             'query' => trim(@$search['value']),
  5901.             'spvsTab' =>  $spvsTab,
  5902.             'centraleToken' =>  $centraleToken,
  5903.             'user' =>  $user
  5904.         ];
  5905.         $rapports= $this->em->getRepository(\App\Entity\RapportCentrale::class)->search($isPerteProduction,$centrale,$suivi,$interventionObject,$filters);
  5906.         return $rapports;
  5907.     }
  5908.     public function updateNomenclatureDocProject($token){
  5909.         $project = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  5910.         $nameDocEtaps = $this->getDocsName();
  5911.         if($project){
  5912.             foreach ($nameDocEtaps as $value){
  5913.                 foreach ($value['etaps'] as $etap){
  5914.                     if(isset($etap['etapsFiles'])) {
  5915.                         $etapNum = $etap['etapNum'];
  5916.                         $class = 'App\Entity\Etap' . $etapNum;
  5917.                         $etapEntity = $this->em->getRepository($class)->findOneBy(['project' => $project->getId()]);
  5918.                         if ($etapEntity) {
  5919.                             foreach ($etap['etapsFiles'] as $docName) {
  5920.                                 $nameFileDB = $docName['nameFileDB'];
  5921.                                 $nameFile = $docName['nameFile'];
  5922.                                 $classMetadata = $this->em->getClassMetadata($class);
  5923.                                 $associationMappings = $classMetadata->getAssociationMapping($nameFileDB);
  5924.                                 if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
  5925.                                     $nameGeteurFiled = 'get' . ucfirst($nameFileDB);
  5926.                                     $filedValue = $etapEntity->{$nameGeteurFiled}();
  5927.                                     if (!$filedValue->isEmpty()) {
  5928.                                         foreach ($filedValue as $item) {
  5929.                                             $this->etapsService->getNomenclature($etapEntity, $item, $nameFile);
  5930.                                         }
  5931.                                     }
  5932.                                 } else {
  5933.                                     $nameGeteurFiled = 'get' . ucfirst($nameFileDB);
  5934.                                     $filedValue = $etapEntity->{$nameGeteurFiled}();
  5935.                                     if ($filedValue) {
  5936.                                         $this->etapsService->getNomenclature($etapEntity, $filedValue, $nameFile);
  5937.                                     }
  5938.                                 }
  5939.                             }
  5940.                         }
  5941.                     }
  5942.                 }
  5943.             }
  5944.         }
  5945.     }
  5946.     public function getNomenclatureDocProjectDifferentSpv($project){
  5947.         $notPositon = false;
  5948.         $nameDocEtaps = $this->getDocsName();
  5949.         if($project){
  5950.             foreach ($nameDocEtaps as $value){
  5951.                 foreach ($value['etaps'] as $etap){
  5952.                     if(isset($etap['etapsFiles'])) {
  5953.                         $etapNum = $etap['etapNum'];
  5954.                         $class = 'App\Entity\Etap' . $etapNum;
  5955.                         $etapEntity = $this->em->getRepository($class)->findOneBy(['project' => $project->getId()]);
  5956.                         if ($etapEntity) {
  5957.                             foreach ($etap['etapsFiles'] as $docName) {
  5958.                                 $nameFileDB = $docName['nameFileDB'];
  5959.                                 $nameFile = $docName['nameFile'];
  5960.                                 $classMetadata = $this->em->getClassMetadata($class);
  5961.                                 $associationMappings = $classMetadata->getAssociationMapping($nameFileDB);
  5962.                                 if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
  5963.                                     $nameGeteurFiled = 'get' . ucfirst($nameFileDB);
  5964.                                     $filedValue = $etapEntity->{$nameGeteurFiled}();
  5965.                                     if (!$filedValue->isEmpty()) {
  5966.                                         foreach ($filedValue as $item) {
  5967.                                             if($project->getSpv() and (strpos($item->getNomenclature(),$project->getSpv()->getName()) === false)){
  5968.                                                 $notPositon = true;
  5969.                                             }
  5970.                                         }
  5971.                                     }
  5972.                                 } else {
  5973.                                     $nameGeteurFiled = 'get' . ucfirst($nameFileDB);
  5974.                                     $filedValue = $etapEntity->{$nameGeteurFiled}();
  5975.                                     if ($filedValue) {
  5976.                                         if($project->getSpv() and (strpos($filedValue->getNomenclature(),$project->getSpv()->getName()) === false)){
  5977.                                             $notPositon = true;
  5978.                                         }
  5979.                                     }
  5980.                                 }
  5981.                             }
  5982.                         }
  5983.                     }
  5984.                 }
  5985.             }
  5986.         }
  5987.         if($notPositon){
  5988.             return $project;
  5989.         }else{
  5990.             return false;
  5991.         }
  5992.     }
  5993.     public function checkParametrageLoyer($request,$token =null)
  5994.     {
  5995.         $centrale = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  5996.         $parametrageLoyer = $this->em->getRepository(ParametrageLoyer::class)->findOneBy(['centrale'=>$centrale->getId()]);
  5997.         if(!$parametrageLoyer){
  5998.             $parametrageLoyer = new ParametrageLoyer();
  5999.         }
  6000.         $originalTags = null;
  6001.         if($parametrageLoyer->getId()){
  6002.             $originalTags = new ArrayCollection();
  6003.             foreach ($parametrageLoyer->getParametrageLoyerPeriode() as $tag) {
  6004.                 $originalTags->add($tag);
  6005.             }
  6006.         }
  6007.         $form = $this->form->create(ParametrageLoyerType::class, $parametrageLoyer);
  6008.         $form->handleRequest($request);
  6009.         if ($form->isSubmitted() && $form->isValid()) {
  6010.             if($originalTags){
  6011.                 foreach ($originalTags as $tag) {
  6012.                     if (!$parametrageLoyer->getParametrageLoyerPeriode()->contains($tag)) {
  6013.                         if($this->checkLoyerFinance($tag)){
  6014.                             return true;
  6015.                         }else{
  6016.                         }
  6017.                     }
  6018.                 }
  6019.             }
  6020.         }
  6021.         return true;
  6022.     }
  6023.     public function checkLoyerFinance($parametrageLoyerPeriode){
  6024.         $isFactureAssocie = false;
  6025.         if($parametrageLoyerPeriode){
  6026.             $loyerPeriodes = $this->em->getRepository(LoyerFinance::class)->findBy(['parametrageLoyerPeriode'=>$parametrageLoyerPeriode->getId()]);
  6027.             if($loyerPeriodes){
  6028.                 return true;
  6029.             }
  6030.         }
  6031.         return false;
  6032.     }
  6033.     public function addParametrageLoyer($request,$token =null)
  6034.     {
  6035.         $centrale = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  6036.         $parametrageLoyer = $this->em->getRepository(ParametrageLoyer::class)->findOneBy(['centrale'=>$centrale->getId()]);
  6037.         if(!$parametrageLoyer){
  6038.             $parametrageLoyer = new ParametrageLoyer();
  6039.         }
  6040.         $originalTags = null;
  6041.         if($parametrageLoyer->getId()){
  6042.             $originalTags = new ArrayCollection();
  6043.             foreach ($parametrageLoyer->getParametrageLoyerPeriode() as $tag) {
  6044.                 $originalTags->add($tag);
  6045.             }
  6046.         }
  6047.         $form = $this->form->create(ParametrageLoyerType::class, $parametrageLoyer);
  6048.         $form->handleRequest($request);
  6049.         if ($form->isSubmitted() && $form->isValid()) {
  6050.             if($originalTags){
  6051.                 foreach ($originalTags as $tag) {
  6052.                     if (!$parametrageLoyer->getParametrageLoyerPeriode()->contains($tag)) {
  6053.                         if($this->deleteLoyerFinance($tag)){
  6054.                             $this->flashBag->add(
  6055.                                 'success',
  6056.                                 '⚠️ Nouveau paramétrage du loyer. Les anciennes données sont supprimées.'
  6057.                             );
  6058.                         }else{
  6059. //                            $this->flashBag->add(
  6060. //                                'danger',
  6061. //                                'Facture associé à certaines lignes de loyers !'
  6062. //                            );
  6063. //                            return [
  6064. //                                'form' => $form->createView(),
  6065. //                                'parametrageLoyer' => $parametrageLoyer,
  6066. //                                'loyersFinance' => $this->em->getRepository(LoyerFinance::class)->getByParametrageLoyer($parametrageLoyer),
  6067. //                                'centrale' => $centrale,
  6068. //                                'success' => false,
  6069. //                                'erreurMsg' => 'Facture associé à certaines lignes de loyers !',
  6070. //                                'action' => $this->router->generate('admin_exploitation_parametrage_layer_view',['token'=>$token]),
  6071. //                            ];
  6072.                         }
  6073.                     }
  6074.                 }
  6075.             }
  6076.             if($centrale){
  6077.                 $parametrageLoyer->setCentrale($centrale);
  6078.             }
  6079.             $this->em->persist($parametrageLoyer);
  6080.             $this->em->flush();
  6081.             $this->addLoyerPeride($parametrageLoyer);
  6082.             return [
  6083.                 'form' => $form->createView(),
  6084.                 'parametrageLoyer' => $parametrageLoyer,
  6085.                 'success' => true,
  6086.                 'centrale' => $centrale
  6087.             ];
  6088.         }
  6089.         return [
  6090.             'form' => $form->createView(),
  6091.             'parametrageLoyer' => $parametrageLoyer,
  6092.             'loyersFinance' => $this->em->getRepository(LoyerFinance::class)->getByParametrageLoyer($parametrageLoyer),
  6093.             'centrale' => $centrale,
  6094.             'success' => false,
  6095.             'action' => $this->router->generate('admin_exploitation_parametrage_layer_view',['token'=>$token]),
  6096.         ];
  6097.     }
  6098.     public function deleteLoyerFinance($parametrageLoyerPeriode){
  6099.         $isFactureAssocie = false;
  6100.         if($parametrageLoyerPeriode){
  6101.             $loyerPeriodes = $this->em->getRepository(LoyerFinance::class)->findBy(['parametrageLoyerPeriode'=>$parametrageLoyerPeriode->getId()]);
  6102.             if($loyerPeriodes){
  6103. //                foreach ($loyerPeriodes as $item){
  6104. //                    if($item->getFinanceFacture()){
  6105. //                        $isFactureAssocie = true;
  6106. //                    }
  6107. //                }
  6108. //                if($isFactureAssocie){
  6109. //                    return false;
  6110. //                }else{
  6111. //                    foreach ($loyerPeriodes as $item){
  6112. //                        $this->em->remove($item);
  6113. //                    }
  6114. //                    $this->em->flush();
  6115. //                    return true;
  6116. //                }
  6117.                 foreach ($loyerPeriodes as $item){
  6118.                     $this->em->remove($item);
  6119.                 }
  6120.                 $this->em->flush();
  6121.                 return true;
  6122.             }
  6123.         }
  6124.         return false;
  6125.     }
  6126.     public function addLoyerPeride($parametrageLoyer){
  6127.         $arrayLoyerIds = [];
  6128.         if($parametrageLoyer->getParametrageLoyerPeriode()){
  6129.             foreach ($parametrageLoyer->getParametrageLoyerPeriode() as $loyerPeriode){
  6130.                 $dateDebut = $loyerPeriode->getDateDebut();
  6131.                 $dateFin = $loyerPeriode->getDateFin();
  6132.                 $echeance = $loyerPeriode->getEcheance();
  6133.                 if($echeance == ParametrageLoyerPeriode::echeance_mensuelle){
  6134.                     $i=0;
  6135.                     $dateDebutLoyer = new \DateTime($dateDebut->format('Y-m-d'));
  6136.                     while ($dateDebutLoyer < $dateFin) {
  6137.                         $i += 1;
  6138.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6139.                         $dateFinLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6140.                         if($dateFinLoyer > $dateFin){
  6141.                             $dateFinLoyer = new \DateTime($dateFin->format('Y-m-d'));
  6142.                         }
  6143.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6144.                         $arrayLoyerIds[] = $this->addLoyerFinance($dateDebutLoyer,$dateFinLoyer,$loyerPeriode);
  6145.                         $dateDebutLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6146.                     }
  6147.                 }elseif ($echeance == ParametrageLoyerPeriode::echeance_semestrielle){
  6148.                     $i=0;
  6149.                     $dateDebutLoyer = new \DateTime($dateDebut->format('Y-m-d'));
  6150.                     while ($dateDebutLoyer < $dateFin) {
  6151.                         $i += 6;
  6152.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6153.                         $dateFinLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6154.                         if($dateFinLoyer > $dateFin){
  6155.                             $dateFinLoyer = new \DateTime($dateFin->format('Y-m-d'));
  6156.                         }
  6157.                         $arrayLoyerIds[] = $this->addLoyerFinance($dateDebutLoyer,$dateFinLoyer,$loyerPeriode);
  6158.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6159.                         $dateDebutLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6160.                     }
  6161.                 }elseif ($echeance == ParametrageLoyerPeriode::echeance_annuelle){
  6162.                     $i=0;
  6163.                     $dateDebutLoyer = new \DateTime($dateDebut->format('Y-m-d'));
  6164.                     while ($dateDebutLoyer < $dateFin) {
  6165.                         $i += 12;
  6166.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6167.                         $dateFinLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6168.                         if($dateFinLoyer > $dateFin){
  6169.                             $dateFinLoyer = new \DateTime($dateFin->format('Y-m-d'));
  6170.                         }
  6171.                         $date = new \DateTime($dateDebut->format('Y-m-d'));
  6172.                         $arrayLoyerIds[] = $this->addLoyerFinance($dateDebutLoyer,$dateFinLoyer,$loyerPeriode);
  6173.                         $dateDebutLoyer = new \DateTime($date->modify('+ '.$i.'month')->format('Y-m-d'));
  6174.                     }
  6175.                 }
  6176.             }
  6177.         }
  6178.         if($arrayLoyerIds){
  6179.             $loyerFinanceNotPeriode = $this->em->getRepository(LoyerFinance::class)->getLoyerFinanceNotIds($arrayLoyerIds,$parametrageLoyer->getId());
  6180.             if($loyerFinanceNotPeriode){
  6181.                 foreach ($loyerFinanceNotPeriode as $value){
  6182.                     $this->em->remove($value);
  6183.                     $this->em->flush();
  6184.                 }
  6185.             }
  6186.         }
  6187.         $this->displayLoyerPeriode();
  6188.     }
  6189.     private function addLoyerFinance($dateDebut,$dateFin,$loyerPeriode){
  6190.         if($loyerPeriode->getEcheance() == ParametrageLoyerPeriode::echeance_mensuelle){
  6191.             $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'MMMM');
  6192.             $echeanceStr = 'Loyer '.$dateFin->format('Y').' - '.$intl->format($dateFin);
  6193.         }elseif ($loyerPeriode->getEcheance() == ParametrageLoyerPeriode::echeance_semestrielle){
  6194.             if($dateFin->format('m') > 6){
  6195.                 if($dateFin->format('m') == 7 && $dateFin->format('d') < 10){
  6196.                     $echeanceStr = 'Loyer '.$dateFin->format('Y').' - S1';
  6197.                 }else{
  6198.                     $echeanceStr = 'Loyer '.$dateFin->format('Y').' - S2';
  6199.                 }
  6200.             }else{
  6201.                 $echeanceStr = 'Loyer '.$dateFin->format('Y').' - S1';
  6202.             }
  6203.         }elseif ($loyerPeriode->getEcheance() == ParametrageLoyerPeriode::echeance_annuelle){
  6204.             $echeanceStr = 'Loyer '.$dateFin->format('Y');
  6205.         }
  6206.         $loyerPeriodeOld = $this->em->getRepository(LoyerFinance::class)->getByDateAndPeriode($dateDebut,$dateFin,$loyerPeriode);
  6207.         if($loyerPeriodeOld) {
  6208.             $loyerFinance = $loyerPeriodeOld[0];
  6209.         }else {
  6210.             $loyerFinance = new LoyerFinance();
  6211.         }
  6212.         $loyerFinance->setDateDebut($dateDebut);
  6213.         $loyerFinance->setDateFin($dateFin);
  6214.         $loyerFinance->setEcheanceStr($echeanceStr);
  6215.         $loyerFinance->setMontantHt($loyerPeriode->getMontant());
  6216.         $loyerFinance->setParametrageLoyerPeriode($loyerPeriode);
  6217.         $loyerFinance->setParametrageLoyer($loyerPeriode->getParametrageLoyer());
  6218.         $loyerFinance->setIsDisplay(false);
  6219.         $this->em->persist($loyerFinance);
  6220.         $this->em->flush();
  6221. //        $namefile = $this->getHtmlLoyerFacture($loyerFinance->getToken());
  6222. //        $loyerFinance->setPdfFile($namefile);
  6223. //        $this->em->persist($loyerFinance);
  6224. //        $this->em->flush();
  6225.         return $loyerFinance->getId();
  6226.     }
  6227.     public function updateFinanceLoyer($request,$token =null)
  6228.     {
  6229.         $loyerFinance = $this->em->getRepository(LoyerFinance::class)->findOneBy(['token'=>$token]);
  6230.         $form = $this->form->create(LoyerFinanceType::class, $loyerFinance);
  6231.         $form->handleRequest($request);
  6232.         if ($form->isSubmitted() && $form->isValid()) {
  6233.             $this->em->persist($loyerFinance);
  6234.             $this->em->flush();
  6235.             if(count($loyerFinance->getLoyerFinanceItem()) > 0){
  6236.                 foreach ($loyerFinance->getLoyerFinanceItem() as $item){
  6237.                     $namefile = $this->getHtmlLoyerFacture($item);
  6238.                     $item->setPdfFile($namefile);
  6239.                     $fileLoyerToken = $item->getTokenFileLoyer();
  6240.                     if($fileLoyerToken){
  6241.                         $fileLoyer = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileLoyerToken]);
  6242.                         $item->setFileLoyer($fileLoyer);
  6243.                     }
  6244.                     $this->em->persist($item);
  6245.                     $this->em->flush();
  6246.                 }
  6247.             }
  6248.             return [
  6249.                 'form' => $form->createView(),
  6250.                 'loyerFinance' => $loyerFinance,
  6251.                 'success' => true,
  6252.             ];
  6253.         }
  6254.         return [
  6255.             'form' => $form->createView(),
  6256.             'loyerFinance' => $loyerFinance,
  6257.             'success' => false,
  6258.             'action' => $this->router->generate('admin_exploitation_finance_loyer_view',['token'=>$token]),
  6259.         ];
  6260.     }
  6261.     public function updateAllFinanceLoyer($request)
  6262.     {
  6263.         $loyerFinances = $this->em->getRepository(LoyerFinance::class)->findAll();
  6264.         foreach ($loyerFinances as $finance){
  6265.             $facture = $finance->getFinanceFacture();
  6266.             if($facture){
  6267.                 $itemFacture = $this->em->getRepository(LoyerFinanceItem::class)->findOneBy(['financeFacture'=>$facture->getId(),'loyerFinance'=>$finance->getId()]);
  6268.                 if($itemFacture){
  6269.                     $itemFacture->setFinanceFacture($facture);
  6270.                     $itemFacture->setLoyerFinance($finance);
  6271.                     $itemFacture->setDateReglement($facture->getDatePaiement());
  6272.                     $itemFacture->setNumeroLoyer($facture->getNumeroFacture());
  6273.                     $itemFacture->setMontant($facture->getMonatantTtc());
  6274.                     $itemFacture->setMontantHt($facture->getMonatantHt());
  6275.                     $itemFacture->setMontantTva($facture->getTva());
  6276.                     $this->em->persist($itemFacture);
  6277.                     $this->em->flush();
  6278.                     $namefile = $this->getHtmlLoyerFacture($itemFacture);
  6279.                     $itemFacture->setPdfFile($namefile);
  6280.                     $this->em->persist($itemFacture);
  6281.                     $this->em->flush();
  6282.                 }
  6283.             }
  6284.         }
  6285.     }
  6286.     public function paginateFinanceLoyer($request){
  6287.         $length = $request->get('length');
  6288.         $length = $length && ($length!=-1)?$length:0;
  6289.         $start = $request->get('start');
  6290.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  6291.         $column =  $search = $request->get('columns');
  6292.         $order = $request->get('order')[0];
  6293.         $columnOrder = $order['column'];
  6294.         $dirOrder = $order['dir'];
  6295.         $columNameOrder = $column[$columnOrder]['data'];
  6296.         $search = $request->get('search');
  6297.         $user = $this->security->getUser();
  6298.         $roles = $user->getRoles();
  6299.         $spvsTab = [];
  6300.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  6301.             $spvs = $user->getSpv();
  6302.             foreach($spvs as $item){
  6303.                 $spvsTab[] = $item->getId();
  6304.             }
  6305.         }
  6306.         $filters = [
  6307.             'query' => trim(@$search['value']),
  6308.             'spvsTab' =>  $spvsTab,
  6309.             'centrales' =>  $request->get('centraleToken'),
  6310.             'spvLoyers' =>  $request->get('spvToken'),
  6311.             'isFactureReglee' =>  $request->get('isFactureReglee'),
  6312.             'user' =>  $user
  6313.         ];
  6314.         $loyers= $this->em->getRepository(\App\Entity\LoyerFinance::class)->searchLoyerFinance($filters, $start, $length, true,$columNameOrder, $dirOrder);
  6315.         $recordsFiltered= $this->em->getRepository(\App\Entity\LoyerFinance::class)->searchLoyerFinance($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  6316.         $recordsTotal= $this->em->getRepository(\App\Entity\LoyerFinance::class)->searchLoyerFinance(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  6317.         $output = array(
  6318.             'data' => array(),
  6319.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  6320.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  6321.         );
  6322.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  6323.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  6324.         foreach ($loyers as $loyer) {
  6325.             $action = $this->twig->render(
  6326.                 'admin/exploitation/default/boutonLoyer.html.twig', array(
  6327.                 'loyer' => $loyer
  6328.             ));
  6329.             $select = $this->twig->render(
  6330.                     'admin/exploitation/default/checkboxLoyer.html.twig', array(
  6331.                     'loyer' => $loyer
  6332.                 ));
  6333.             $commentaires = $loyer->getCommentFinanceLoyer();
  6334.             $facturesFinance = '';
  6335.             $numeroLoyer = '';
  6336.             $montantHt = 0;
  6337.             $dateReglement = '';
  6338.             if(count($loyer->getLoyerFinanceItem())>0){
  6339.                 foreach ($loyer->getLoyerFinanceItem() as $item){
  6340.                     $facturesFinance =  $facturesFinance.' '. $item->getFinanceFacture()->getNumeroFacture()."<br>" ;
  6341.                     $numeroLoyer =   $numeroLoyer.' '.$item->getNumeroLoyer()."<br>";
  6342.                     if($item->getDateReglement()){
  6343.                         $dateReglement = $dateReglement .' '.$item->getDateReglement()->format('d/m/Y')."<br>";
  6344.                     }
  6345.                     $montantHt = $montantHt + $item->getMontantHt();
  6346.                 }
  6347.             }
  6348.             if($montantHt != 0){
  6349.                 $montantHtTotal =  $this->espaceNumber($montantHt);
  6350.             }else{
  6351.                 $montantHtTotal = $this->espaceNumber($loyer->getMontant());
  6352.             }
  6353.             if($facturesFinance == ''){
  6354.                 $facturesFinance = $loyer->getFinanceFacture() ?$loyer->getFinanceFacture()->getNumeroFacture():'';
  6355.             }
  6356.             $output['data'][] = [
  6357.                 'responsive_id' => '',
  6358.                 'id' => $loyer->getId(),
  6359.                 'centrale' => $this->twig->render('admin/exploitation/default/nameCentraleLoyer.html.twig', array( 'string'=>$loyer->getParametrageLoyer()->getCentrale()->getName(),'commentaires'=>$commentaires)),
  6360.                 'spv' => $loyer->getParametrageLoyer()->getCentrale()->getSpv()?$loyer->getParametrageLoyer()->getCentrale()->getSpv()->getName():'',
  6361.                 'echeanceStr' => $loyer->getEcheanceStr(),
  6362.                 'dateDebut' => $loyer->getDateDebut()->format('d/m/Y'),
  6363.                 'dateFin' => $loyer->getDateFin()->format('d/m/Y'),
  6364.                 'montant' => $montantHtTotal,
  6365.                 'financeFacture' => $facturesFinance,
  6366.                 'isFactureReglee' => $loyer->getIsFactureReglee() ?"<span style='color:green;'>Oui</span>":"<span style='color:red;'>Non</span>",
  6367.                 'action' => $action,
  6368.                 'selectLoyer' => $select
  6369.             ];
  6370.         }
  6371.         return $output;
  6372.     }
  6373.     public function extractFactureLoyer($loyers,$request){
  6374.         $file= $this->params->get('zips_directory')."/extraire_loyers.xlsx";
  6375.         $spreadsheet = new Spreadsheet();
  6376.         $sheet = $spreadsheet->getActiveSheet();
  6377.         // Head 2
  6378.         $tableHead2 = [
  6379.             'font'=>[
  6380.                 'color'=>[
  6381.                     'rgb'=>'0071c1'
  6382.                 ],
  6383.                 'bold'=>true,
  6384.                 'size'=>12
  6385.             ],
  6386.             'fill'=>[
  6387.                 'fillType' => Fill::FILL_SOLID,
  6388.                 'startColor' => [
  6389.                     'rgb' => 'dcebf4'
  6390.                 ]
  6391.             ],
  6392.         ];
  6393.         $sheet->setCellValue('A1',"Centrale")
  6394.             ->setCellValue('B1',"SPV")
  6395.             ->setCellValue('C1',"Échéance du loyer ")
  6396.             ->setCellValue('D1',"Date de début de période ")
  6397.             ->setCellValue('E1',"Date de fin de période ")
  6398.             ->setCellValue('F1',"Montant")
  6399.             ->setCellValue('G1',"Facture associée")
  6400.             ->setCellValue('H1',"numéro de facture ")
  6401.             ->setCellValue('I1',"Facture réglée ")
  6402.             ->setCellValue('J1',"Date de règlement");
  6403.         // Borders a2 z2
  6404.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6405.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6406.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6407.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6408.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6409.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6410.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6411.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6412.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6413.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6414.         //width
  6415.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(50);
  6416.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  6417.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  6418.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(25);
  6419.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  6420.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  6421.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  6422.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  6423.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(20);
  6424.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  6425.         $spreadsheet->getActiveSheet()->getStyle('A1:J1')->applyFromArray($tableHead2);
  6426.         //loop through the data
  6427.         //current row
  6428.         $row=2;
  6429.         foreach($loyers as $loyer){
  6430.             $facturesFinance = '';
  6431.             $numeroLoyer = '';
  6432.             $montantHt = 0;
  6433.             $dateReglement = '';
  6434.             if(count($loyer->getLoyerFinanceItem())>0){
  6435.                 foreach ($loyer->getLoyerFinanceItem() as $item){
  6436.                     $facturesFinance =  $facturesFinance.' '. $item->getFinanceFacture()->getNumeroFacture()."\n" ;
  6437.                     $numeroLoyer =   $numeroLoyer.' '.$item->getNumeroLoyer()."\n";
  6438.                     if($item->getDateReglement()){
  6439.                         $dateReglement = $dateReglement .' '.$item->getDateReglement()->format('d/m/Y')."\n";
  6440.                     }
  6441.                     $montantHt = $montantHt + $item->getMontantHt();
  6442.                 }
  6443.             }
  6444.             if($montantHt != 0){
  6445.                 $montantHtTotal =  $this->espaceNumber($montantHt);
  6446.             }else{
  6447.                 $montantHtTotal = $this->espaceNumber($loyer->getMontant());
  6448.             }
  6449.             if($facturesFinance == ''){
  6450.                 $facturesFinance = $loyer->getFinanceFacture() ?$loyer->getFinanceFacture()->getNumeroFacture():'';
  6451.             }else{
  6452.                 $facturesFinance = rtrim($facturesFinance, "\n");
  6453.             }
  6454.             if($numeroLoyer == ''){
  6455.                 $numeroLoyer = $loyer->getNumeroLoyer();
  6456.             }else{
  6457.                 $numeroLoyer = rtrim($numeroLoyer, "\n");
  6458.             }
  6459.             if($dateReglement == ''){
  6460.                 $dateReglement = $loyer->getDateReglement() ? $loyer->getDateReglement()->format('d/m/Y') : '';
  6461.             }else{
  6462.                 $dateReglement = rtrim($dateReglement, "\n");
  6463.             }
  6464.             $spreadsheet->getActiveSheet()
  6465.                 ->setCellValue('A'.$row , (string)$loyer->getParametrageLoyer()->getCentrale()->getName())
  6466.                 ->setCellValue('B'.$row , $loyer->getParametrageLoyer()->getCentrale()->getSpv()?$loyer->getParametrageLoyer()->getCentrale()->getSpv()->getName():'')
  6467.                 ->setCellValue('C'.$row , (string)$loyer->getEcheanceStr())
  6468.                 ->setCellValue('F'.$row , $montantHtTotal)
  6469.                 ->setCellValue('G'.$row , $facturesFinance)
  6470.                 ->setCellValue('H'.$row , $numeroLoyer)
  6471.                 ->setCellValue('I'.$row , $loyer->getIsFactureReglee() ?"Oui":"Non")
  6472.                 ->setCellValue('J'.$row , $dateReglement)
  6473.             ;
  6474.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getAlignment()->setWrapText(true);
  6475.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getAlignment()->setWrapText(true);
  6476.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getAlignment()->setWrapText(true);
  6477.             $spreadsheet = $this->addStyleToCellDate('D',$row,$loyer->getDateDebut(),$spreadsheet);
  6478.             $spreadsheet = $this->addStyleToCellDate('E',$row,$loyer->getDateFin(),$spreadsheet);
  6479.             //increment row
  6480.             $row++;
  6481.         }
  6482.         $firstRow=1;
  6483.         $lastRow=$row-1;
  6484.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":J".$lastRow);
  6485.         $writer = new Xlsx($spreadsheet);
  6486.         $writer->save($file);
  6487.         return $file;
  6488.     }
  6489.     public function getLoyersByRequestSelectAll($request){
  6490.         $user = $this->security->getUser();
  6491.         $roles = $user->getRoles();
  6492.         $search = $request->get('search');
  6493.         $spvsTab = [];
  6494.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  6495.             $spvs = $user->getSpv();
  6496.             foreach($spvs as $item){
  6497.                 $spvsTab[] = $item->getId();
  6498.             }
  6499.         }
  6500.         $filters = [
  6501.             'query' => trim(@$search['value']),
  6502.             'spvsTab' =>  $spvsTab,
  6503.             'isFactureReglee' =>  $request->get('isFactureReglee'),
  6504.             'centrales' =>  $request->get('centraleToken'),
  6505.             'spvLoyers' =>  $request->get('spvToken'),
  6506.             'user' =>  $user
  6507.         ];
  6508.         $loyers= $this->em->getRepository(\App\Entity\LoyerFinance::class)->searchLoyerFinance($filters);
  6509.         return $loyers;
  6510.     }
  6511.     public function getPdfLoyerFacture($token){
  6512.         $loyer = $this->em->getRepository(LoyerFinance::class)->findOneBy(['token'=>$token]);
  6513.         if($loyer){
  6514.             $html = $this->twig->render('admin/exploitation/pdf-loyer.html.twig',array('data'=>$loyer));
  6515.             $title = 'Loyer';
  6516.             $html2pdf = new Html2Pdf('P', 'A4', 'fr', true, 'UTF-8', array('5','5','5','5'));
  6517.             $html2pdf->getSecurityService()->disableCheckAllowedHosts();
  6518.             $html2pdf->pdf->SetAuthor('prejeance');
  6519.             $html2pdf->pdf->SetTitle($title);
  6520.             $html2pdf->pdf->SetSubject($title);
  6521.             $html2pdf->pdf->SetKeywords($title);
  6522.             $html2pdf->pdf->SetDisplayMode('real');
  6523.             $html2pdf->WriteHTML($html);
  6524.             $nameFichier = 'LOYER-FACTURE-'.time().$loyer->getId().'.pdf';
  6525.             $path_pdf = $this->params->get('justificatif_finance_directory').'/'.$nameFichier;
  6526.             $html2pdf->Output($path_pdf,'F');
  6527.             return $nameFichier;
  6528.         }
  6529.         return null;
  6530.     }
  6531.     public function getHtmlLoyerFacture($loyerItem){
  6532.         if($loyerItem){
  6533.             $html = $this->twig->render('admin/exploitation/word-loyer.html.twig',array('data'=>$loyerItem));
  6534.             $phpWord = new PhpWord();
  6535.             $section = $phpWord->addSection();
  6536.             \PhpOffice\PhpWord\Shared\Html::addHtml($section, $html, false, false);
  6537.             $nameFichier = 'LOYER-FACTURE-'.time().$loyerItem->getLoyerFinance()->getId().'-'.$loyerItem->getId().'.docx';
  6538.             $path_pdf = $this->params->get('justificatif_finance_directory').'/'.$nameFichier;
  6539.             $phpWord->save($path_pdf,'Word2007');
  6540.             return $nameFichier;
  6541.         }
  6542.         return null;
  6543.     }
  6544.     /**
  6545.      * GENERATE RANDOM PASSWORD ON CREATE USER
  6546.      * @return string
  6547.      */
  6548.     function randomPassword() {
  6549.         $alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
  6550.         $pass = array(); //remember to declare $pass as an array
  6551.         $alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
  6552.         for ($i = 0; $i < 8; $i++) {
  6553.             $n = rand(0, $alphaLength);
  6554.             $pass[] = $alphabet[$n];
  6555.         }
  6556.         return implode($pass); //turn the array into a string
  6557.     }
  6558.     public function addUserFournisseurInProject($fournisseur){
  6559.         $name = $fournisseur->getName();
  6560.         $email = $fournisseur->getEmail();
  6561.         if(!$fournisseur->getUser()){
  6562.                 if($email) {
  6563.                     $user = new User();
  6564.                     // encode the plain password
  6565.                     $password = $this->randomPassword();
  6566.                     $user->setPassword(
  6567.                         $this->passwordEncoder->encodePassword(
  6568.                             $user,
  6569.                             $password
  6570.                         )
  6571.                     );
  6572.                     $user->setRoles(array('ROLE_FOURNISSEUR'));
  6573.                     $user->setFirstname($name);
  6574.                     $user->setLastname($name);
  6575.                     $user->setEmail($email);
  6576.                     $user->setAcces(User::ACCES_ECRETURE);
  6577.                     if ($fournisseur->getId()) {
  6578.                         $user->setIsEnabled($fournisseur->getIsEnabled());
  6579.                     } else {
  6580.                         $user->setIsEnabled(true);
  6581.                     }
  6582.                     $errors = $this->validator->validate($user);
  6583.                     if (count($errors) > 0) {
  6584.                         foreach ($errors as $error) {
  6585.                             $erreurs[] = $error->getMessage();
  6586.                         }
  6587.                         return array(
  6588.                             'erreurs' => $erreurs,
  6589.                             'success' => false
  6590.                         );
  6591.                     }
  6592.                     $this->em->persist($user);
  6593.                     $this->em->flush();
  6594.                     $this->notification->createUser($user, $password);
  6595.                 }else{
  6596.                     return array(
  6597.                         'success' => false,
  6598.                         'erreurs' => 'Erreur email !',
  6599.                     );
  6600.                 }
  6601.         }
  6602.         return array(
  6603.             'success' => true,
  6604.             'user' => $user
  6605.         );
  6606.     }
  6607.     public function getLogsSpv($str){
  6608.         $logs = $this->em->getRepository(HistoryProject::class)->getLogByStr($str);
  6609.         return $logs;
  6610.     }
  6611.     public function getLogsSpvProject($str,$tokenProjects){
  6612.         $logs = $this->em->getRepository(HistoryProject::class)->getLogByStrProject($str,$tokenProjects);
  6613.         return $logs;
  6614.     }
  6615.     public function getLogSpvXlsx($logs,$request){
  6616.         $file= $this->params->get('zips_directory')."/extraire_log_spv.xlsx";
  6617.         $spreadsheet = new Spreadsheet();
  6618.         $sheet = $spreadsheet->getActiveSheet();
  6619.         // Head 2
  6620.         $tableHead2 = [
  6621.             'font'=>[
  6622.                 'color'=>[
  6623.                     'rgb'=>'0071c1'
  6624.                 ],
  6625.                 'bold'=>true,
  6626.                 'size'=>12
  6627.             ],
  6628.             'fill'=>[
  6629.                 'fillType' => Fill::FILL_SOLID,
  6630.                 'startColor' => [
  6631.                     'rgb' => 'dcebf4'
  6632.                 ]
  6633.             ],
  6634.         ];
  6635.         $sheet->setCellValue('A1',"Projet")
  6636.             ->setCellValue('B1',"Date de changement")
  6637.             ->setCellValue('C1',"Ancienne SPV")
  6638.             ->setCellValue('D1',"Nouvelle SPV")
  6639.             ->setCellValue('E1',"personne en charge")
  6640.             ;
  6641.         // Borders a2 z2
  6642.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6643.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6644.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6645.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6646.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6647.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(50);
  6648.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  6649.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  6650.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  6651.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  6652.         $spreadsheet->getActiveSheet()->getStyle('A1:E1')->applyFromArray($tableHead2);
  6653.         //loop through the data
  6654.         //current row
  6655.         $row=2;
  6656.         foreach($logs as $item){
  6657.             $matches = [];
  6658.             preg_match_all("/`([^`]+)`/", $item->getAction(), $matches);
  6659.             $spvOld = '';
  6660.             $spvNew = '';
  6661.             if(isset($matches[1])){
  6662.                 if(isset($matches[1][1])){
  6663.                     $spvOld = isset($matches[1][0])?$matches[1][0]:null;
  6664.                     $spvNew = isset($matches[1][1])?$matches[1][1]:null;
  6665.                 }else{
  6666.                     $spvOld = '';
  6667.                     $spvNew = isset($matches[1][0])?$matches[1][0]:null;
  6668.                 }
  6669.             }
  6670.             $spreadsheet->getActiveSheet()
  6671.                 ->setCellValue('A'.$row , $item->getProject()->getName())
  6672.                 ->setCellValue('C'.$row , $spvOld)
  6673.                 ->setCellValue('D'.$row , $spvNew)
  6674.                 ->setCellValue('E'.$row , $item->getUser() ? $item->getUser()->getFirstname() .' '.$item->getUser()->getLastname() : '')
  6675.             ;
  6676.             $spreadsheet = $this->addStyleToCellDate('B',$row,$item->getCreatedAt(),$spreadsheet);
  6677.             $row++;
  6678.         }
  6679.         $firstRow=1;
  6680.         $lastRow=$row-1;
  6681.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":E".$lastRow);
  6682.         $writer = new Xlsx($spreadsheet);
  6683.         $writer->save($file);
  6684.         return $file;
  6685.     }
  6686.     public function addInstalateurCharpentier($fournisseurTitre,$project){
  6687.         if($fournisseurTitre == 'Installateur'){
  6688.             $etap16 = $this->em->getRepository(Etap16::class)->findOneBy(['project'=>$project->getId()]);
  6689.             if($etap16 && count($etap16->getContratConstruction())>0){
  6690.                 $contratConstructeurs = $etap16->getContratConstruction();
  6691.                 $isContratLotPv = false;
  6692.                 $installateur = $this->em->getRepository(FournisseurProject::class)->findOneBy(['project'=>$project->getId(),'titre'=>'Installateur']);
  6693.                 foreach ($contratConstructeurs as $constructeur){
  6694.                     if($constructeur->getTitre() == 'Contrat lot PV'){
  6695.                         if($installateur){
  6696.                             $constructeur->setFournisseur($installateur->getFournisseur());
  6697.                             $this->em->persist($constructeur);
  6698.                             $this->em->flush();
  6699.                         }
  6700.                         $isContratLotPv == true;
  6701.                     }
  6702.                 }
  6703.                 if(!$isContratLotPv && $installateur){
  6704.                     if($contratConstructeurs[0]->getTitre()){
  6705.                         if(isset($contratConstructeurs[1])){
  6706.                             if($contratConstructeurs[1]->getTitre()){
  6707.                             }else{
  6708.                                 $contratConstructeurs[1]->setFournisseur($installateur->getFournisseur());
  6709.                                 $contratConstructeurs[1]->setTitre('Contrat lot PV');
  6710.                                 $this->em->persist($contratConstructeurs[0]);
  6711.                                 $this->em->flush();
  6712.                             }
  6713.                         }
  6714.                     }else {
  6715.                         $contratConstructeurs[0]->setFournisseur($installateur->getFournisseur());
  6716.                         $contratConstructeurs[0]->setTitre('Contrat lot PV');
  6717.                         $this->em->persist($contratConstructeurs[0]);
  6718.                         $this->em->flush();
  6719.                     }
  6720.                 }
  6721.             }
  6722.         }
  6723.         if($fournisseurTitre == 'Charpentier'){
  6724.             $etap16 = $this->em->getRepository(Etap16::class)->findOneBy(['project'=>$project->getId()]);
  6725.             if($etap16 && count($etap16->getContratConstruction())>0){
  6726.                 $contratConstructeurs = $etap16->getContratConstruction();
  6727.                 $isContratLotBatiment = false;
  6728.                 $charpentier = $this->em->getRepository(FournisseurProject::class)->findOneBy(['project'=>$project->getId(),'titre'=>'Charpentier']);
  6729.                 foreach ($contratConstructeurs as $constructeur){
  6730.                     if($constructeur->getTitre() == 'Contrat lot Bâtiment'){
  6731.                         if($charpentier){
  6732.                             $constructeur->setFournisseur($charpentier->getFournisseur());
  6733.                             $this->em->persist($constructeur);
  6734.                             $this->em->flush();
  6735.                             $isContratLotBatiment == true;
  6736.                         }
  6737.                     }
  6738.                 }
  6739.                 if(!$isContratLotBatiment && $charpentier){
  6740.                     if($contratConstructeurs[0]->getTitre()){
  6741.                         if(isset($contratConstructeurs[1])){
  6742.                             if($contratConstructeurs[1]->getTitre()){
  6743.                             }else{
  6744.                                 $contratConstructeurs[1]->setFournisseur($charpentier->getFournisseur());;
  6745.                                 $contratConstructeurs[1]->setTitre('Contrat lot Bâtiment');
  6746.                                 $this->em->persist($contratConstructeurs[1]);
  6747.                                 $this->em->flush();
  6748.                             }
  6749.                         }
  6750.                     }else {
  6751.                         $contratConstructeurs[0]->setFournisseur($charpentier->getFournisseur());
  6752.                         $contratConstructeurs[0]->setTitre('Contrat lot Bâtiment');
  6753.                         $this->em->persist($contratConstructeurs[0]);
  6754.                         $this->em->flush();
  6755.                     }
  6756.                 }
  6757.             }
  6758.         }
  6759.     }
  6760.     public function addEpcFournisseur($project,$epc){
  6761.         $etap16 = $this->em->getRepository(Etap16::class)->findOneBy(['project'=>$project->getId()]);
  6762.         $constructeurEntity = null;
  6763.         $isContratEpc= false;
  6764.         if($etap16 && count($etap16->getContratConstruction())>0){
  6765.             $contratConstructeurs = $etap16->getContratConstruction();
  6766.             foreach ($contratConstructeurs as $constructeur){
  6767.                 if($constructeur->getTitre() == 'Contrat EPC'){
  6768.                     $isContratEpc == true;
  6769.                     $constructeurEntity = $constructeur;
  6770.                 }
  6771.             }
  6772.             if(!$isContratEpc){
  6773.                 if($contratConstructeurs[0]){
  6774.                     $constructeurEntity = $contratConstructeurs[0];
  6775.                 }
  6776.             }
  6777.         }
  6778.         if($epc){
  6779.             $project->setFournisseur($epc);
  6780.             $this->em->persist($project);
  6781.             $this->em->flush();
  6782.             if($constructeurEntity) {
  6783.                 $constructeurEntity->setFournisseur($epc);
  6784.                 $constructeurEntity->setTitre('Contrat EPC');
  6785.                 $this->em->persist($constructeurEntity);
  6786.                 $this->em->flush();
  6787.             }
  6788.         }else{
  6789.             $project->setFournisseur(null);
  6790.             $this->em->persist($project);
  6791.             $this->em->flush();
  6792.             if($constructeurEntity) {
  6793.                 $constructeurEntity->setFournisseur(null);
  6794.                 $constructeurEntity->setTitre('Contrat EPC');
  6795.                 $this->em->persist($constructeurEntity);
  6796.                 $this->em->flush();
  6797.             }
  6798.         }
  6799.     }
  6800.     public function getRapportPreventiveCase($project,$annee,$anneeMiseEnService){
  6801.         $isDisabled = false;
  6802.         $statusRapport = 'KO';
  6803.         $rapport = null;
  6804.         if($anneeMiseEnService <= $annee){
  6805.             $rapports = $this->em->getRepository(\App\Entity\RapportCentrale::class)->getRapportPreventiveByAnnee($project,$annee);
  6806.             if($rapports){
  6807.                 $statusRapport = 'OK';
  6808.                 $rapport = $rapports[0];
  6809.             }
  6810.         }else{
  6811.             $isDisabled = true;
  6812.         }
  6813.       return  $this->twig->render('admin/exploitation/default/rapportPreventiveCase.html.twig',
  6814.             array(
  6815.                 'isDisabled'=>$isDisabled,
  6816.                 'statusRapport'=>$statusRapport,
  6817.                 'rapport'=>$rapport
  6818.             )
  6819.         );
  6820.     }
  6821.     public function paginateCentraleSuiviMaintenance($request){
  6822.         $length = $request->get('length');
  6823.         $length = $length && ($length!=-1)?$length:0;
  6824.         $start = $request->get('start');
  6825.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  6826.         $column =  $search = $request->get('columns');
  6827.         $order = $request->get('order')[0];
  6828.         $columnOrder = $order['column'];
  6829.         $dirOrder = $order['dir'];
  6830.         $columNameOrder = $column[$columnOrder]['data'];
  6831.         $search = $request->get('search');
  6832.         $user = $this->security->getUser();
  6833.         $roles = $user->getRoles();
  6834.         $spvsTab = [];
  6835.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  6836.             $spvs = $user->getSpv();
  6837.             foreach($spvs as $item){
  6838.                 $spvsTab[] = $item->getId();
  6839.             }
  6840.         }
  6841.         $centraleRapportSuivi= $request->get('centraleRapportSuivi');
  6842.         $filters = [
  6843.             'query' => trim(@$search['value']),
  6844.             'spvsTab' =>  $spvsTab,
  6845.             'user' =>  $user,
  6846.             'centraleRapportSuivi' =>  $centraleRapportSuivi,
  6847.         ];
  6848.         $centrales = $this->em->getRepository(\App\Entity\Project::class)->getCentrales($filters);
  6849.         $arrayIdCentrale = array();
  6850.         foreach ($centrales as $project) {
  6851.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  6852.             if ($project && $project->getDateMiseEnService()) {
  6853.                 $dateMiseEnservice = $project->getDateMiseEnService();
  6854.             } else {
  6855.                 if ($etap14 && $etap14->getDateMiseEnService()) {
  6856.                     $dateMiseEnservice = $etap14->getDateMiseEnService();
  6857.                 }
  6858.             }
  6859.             if($dateMiseEnservice){
  6860.                 $annee= $request->get('anneeRapport');
  6861.                 $status= $request->get('status');
  6862.                 if($status && $annee){
  6863.                     if($dateMiseEnservice->format('Y') <= $annee){
  6864.                         $rapport = $this->em->getRepository(\App\Entity\RapportCentrale::class)->getRapportPreventiveByAnnee($project,$annee);
  6865.                         if($status == 'OK' and $rapport){
  6866.                             $arrayIdCentrale[] = $project->getId();
  6867.                         }
  6868.                         if($status == 'KO' and !$rapport){
  6869.                             $arrayIdCentrale[] = $project->getId();
  6870.                         }
  6871.                     }
  6872.                 }else{
  6873.                     $arrayIdCentrale[] = $project->getId();
  6874.                 }
  6875.             }
  6876.         }
  6877.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchCentraleRapportById($arrayIdCentrale, $start, $length, true,$columNameOrder, $dirOrder);
  6878.         $recordsFiltered= $this->em->getRepository(\App\Entity\Project::class)->searchCentraleRapportById($arrayIdCentrale, $start, $length, true,$columNameOrder, $dirOrder,true);
  6879.         $recordsTotal= $this->em->getRepository(\App\Entity\Project::class)->searchCentraleRapportById($arrayIdCentrale, $start, $length, true,$columNameOrder, $dirOrder,true);
  6880.         $output = array(
  6881.             'data' => array(),
  6882.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  6883.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  6884.         );
  6885.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  6886.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  6887.         foreach ($projects as $project) {
  6888.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  6889.             if ($project && $project->getDateMiseEnService()) {
  6890.                 $dateMiseEnservice = $project->getDateMiseEnService();
  6891.             } else {
  6892.                 if ($etap14 && $etap14->getDateMiseEnService()) {
  6893.                     $dateMiseEnservice = $etap14->getDateMiseEnService();
  6894.                 }
  6895.             }
  6896.             $dataNow = new \DateTime();
  6897.             $anneRapport4 = (int)$dataNow->format('Y');
  6898.             $anneRapport3 = $anneRapport4 - 1;
  6899.             $anneRapport2 = $anneRapport4 - 2;
  6900.             $anneRapport1 = $anneRapport4 - 3;
  6901.             if($dateMiseEnservice){
  6902.                 $output['data'][] = [
  6903.                     'responsive_id' => '',
  6904.                     'id' => $project->getId(),
  6905.                     'name' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$project->getName())),
  6906.                     'dateMiseEnService' => $this->twig->render('user/project/default/link.html.twig', array( 'project'=>$project,'string'=>$dateMiseEnservice->format('d/m/Y'))) ,
  6907.                     'date1' => $this->getRapportPreventiveCase($project,$anneRapport1,$dateMiseEnservice->format('Y')),
  6908.                     'date2' => $this->getRapportPreventiveCase($project,$anneRapport2,$dateMiseEnservice->format('Y')),
  6909.                     'date3' => $this->getRapportPreventiveCase($project,$anneRapport3,$dateMiseEnservice->format('Y')),
  6910.                     'date4' => $this->getRapportPreventiveCase($project,$anneRapport4,$dateMiseEnservice->format('Y'))
  6911.                 ];
  6912.             }
  6913.         }
  6914.         return $output;
  6915.     }
  6916.     public function getRapportPreventiveCaseStr($project,$annee,$anneeMiseEnService){
  6917.         $isDisabled = false;
  6918.         $statusRapport = 'KO';
  6919.         $rapport = null;
  6920.         if($anneeMiseEnService <= $annee){
  6921.             $rapports = $this->em->getRepository(\App\Entity\RapportCentrale::class)->getRapportPreventiveByAnnee($project,$annee);
  6922.             if($rapports){
  6923.                 $statusRapport = 'OK';
  6924.                 $rapport = $rapports[0];
  6925.             }
  6926.         }else{
  6927.             $isDisabled = true;
  6928.         }
  6929.         return
  6930.             array(
  6931.                 'isDisabled'=>$isDisabled,
  6932.                 'statusRapport'=>$statusRapport,
  6933.                 'rapport'=>$rapport
  6934.             );
  6935.     }
  6936.     public function getCentraleSuiviMaintenanceBySelect($request){
  6937.         $search = $request->get('search');
  6938.         $user = $this->security->getUser();
  6939.         $roles = $user->getRoles();
  6940.         $spvsTab = [];
  6941.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  6942.             $spvs = $user->getSpv();
  6943.             foreach($spvs as $item){
  6944.                 $spvsTab[] = $item->getId();
  6945.             }
  6946.         }
  6947.         $filters = [
  6948.             'query' => trim(@$search['value']),
  6949.             'spvsTab' =>  $spvsTab,
  6950.             'user' =>  $user,
  6951.         ];
  6952.         $centrales = $this->em->getRepository(\App\Entity\Project::class)->getCentrales($filters);
  6953.         $arrayIdCentrale = array();
  6954.         foreach ($centrales as $project) {
  6955.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  6956.             if ($project && $project->getDateMiseEnService()) {
  6957.                 $dateMiseEnservice = $project->getDateMiseEnService();
  6958.             } else {
  6959.                 if ($etap14 && $etap14->getDateMiseEnService()) {
  6960.                     $dateMiseEnservice = $etap14->getDateMiseEnService();
  6961.                 }
  6962.             }
  6963.             if($dateMiseEnservice){
  6964.                 $annee= $request->get('anneeRapport');
  6965.                 $status= $request->get('status');
  6966.                 if($status && $annee){
  6967.                     if($dateMiseEnservice->format('Y') <= $annee){
  6968.                         $rapport = $this->em->getRepository(\App\Entity\RapportCentrale::class)->getRapportPreventiveByAnnee($project,$annee);
  6969.                         if($status == 'OK' and $rapport){
  6970.                             $arrayIdCentrale[] = $project->getId();
  6971.                         }
  6972.                         if($status == 'KO' and !$rapport){
  6973.                             $arrayIdCentrale[] = $project->getId();
  6974.                         }
  6975.                     }
  6976.                 }else{
  6977.                     $arrayIdCentrale[] = $project->getId();
  6978.                 }
  6979.             }
  6980.         }
  6981.         $output = [];
  6982.         $projects= $this->em->getRepository(\App\Entity\Project::class)->getCentraleRapportById($arrayIdCentrale);
  6983.         foreach ($projects as $project) {
  6984.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  6985.             if ($project && $project->getDateMiseEnService()) {
  6986.                 $dateMiseEnservice = $project->getDateMiseEnService();
  6987.             } else {
  6988.                 if ($etap14 && $etap14->getDateMiseEnService()) {
  6989.                     $dateMiseEnservice = $etap14->getDateMiseEnService();
  6990.                 }
  6991.             }
  6992.             $dataNow = new \DateTime();
  6993.             $anneRapport4 = (int)$dataNow->format('Y');
  6994.             $anneRapport3 = $anneRapport4 - 1;
  6995.             $anneRapport2 = $anneRapport4 - 2;
  6996.             $anneRapport1 = $anneRapport4 - 3;
  6997.             if($dateMiseEnservice){
  6998.                 $output[] = [
  6999.                     'responsive_id' => '',
  7000.                     'id' => $project->getId(),
  7001.                     'name' => $project->getName(),
  7002.                     'dateMiseEnService' => $dateMiseEnservice ,
  7003.                     'date1' => $this->getRapportPreventiveCaseStr($project,$anneRapport1,$dateMiseEnservice->format('Y')),
  7004.                     'date2' => $this->getRapportPreventiveCaseStr($project,$anneRapport2,$dateMiseEnservice->format('Y')),
  7005.                     'date3' => $this->getRapportPreventiveCaseStr($project,$anneRapport3,$dateMiseEnservice->format('Y')),
  7006.                     'date4' => $this->getRapportPreventiveCaseStr($project,$anneRapport4,$dateMiseEnservice->format('Y'))
  7007.                 ];
  7008.             }
  7009.         }
  7010.         return $output;
  7011.     }
  7012.     public function extractRapportsSuivPreventive($rapports,$request){
  7013.         $file= $this->params->get('zips_directory')."/extraire_rapports_preventive.xlsx";
  7014.         $spreadsheet = new Spreadsheet();
  7015.         $sheet = $spreadsheet->getActiveSheet();
  7016.         // Head 2
  7017.         $tableHead2 = [
  7018.             'font'=>[
  7019.                 'color'=>[
  7020.                     'rgb'=>'0071c1'
  7021.                 ],
  7022.                 'bold'=>true,
  7023.                 'size'=>12
  7024.             ],
  7025.             'fill'=>[
  7026.                 'fillType' => Fill::FILL_SOLID,
  7027.                 'startColor' => [
  7028.                     'rgb' => 'dcebf4'
  7029.                 ]
  7030.             ],
  7031.         ];
  7032.         $dataNow = new \DateTime();
  7033.         $anneRapport4 = (int)$dataNow->format('Y');
  7034.         $anneRapport3 = $anneRapport4 - 1;
  7035.         $anneRapport2 = $anneRapport4 - 2;
  7036.         $anneRapport1 = $anneRapport4 - 3;
  7037.         $sheet->setCellValue('A1',"Centrale")
  7038.             ->setCellValue('B1',"Date de mise en service")
  7039.             ->setCellValue('C1',"Rapport ".$anneRapport1)
  7040.             ->setCellValue('D1',"Rapport ".$anneRapport2)
  7041.             ->setCellValue('E1',"Rapport ".$anneRapport3)
  7042.             ->setCellValue('F1',"Rapport ".$anneRapport4)
  7043.         ;
  7044.         // Borders a2 z2
  7045.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7046.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7047.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7048.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7049.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7050.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7051.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7052.         //width
  7053.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
  7054.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  7055.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  7056.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  7057.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  7058.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  7059.         $spreadsheet->getActiveSheet()->getStyle('A1:F1')->applyFromArray($tableHead2);
  7060.         //loop through the data
  7061.         //current row
  7062.         $row=2;
  7063.         foreach($rapports as $rapport){
  7064.             $spreadsheet->getActiveSheet()->setCellValue('A'.$row , $rapport['name']);
  7065.             $spreadsheet = $this->addStyleToCellDate('B',$row,$rapport['dateMiseEnService'],$spreadsheet);
  7066.             $arrayStyleRed =  [
  7067.                 'fill'=>[
  7068.                     'fillType' => Fill::FILL_SOLID,
  7069.                     'startColor' => [
  7070.                         'rgb' => 'ff0000'
  7071.                     ]
  7072.                 ],
  7073.             ];
  7074.             $arrayStyleGreen =  [
  7075.                 'fill'=>[
  7076.                     'fillType' => Fill::FILL_SOLID,
  7077.                     'startColor' => [
  7078.                         'rgb' => '00fd00'
  7079.                     ]
  7080.                 ],
  7081.             ];
  7082.             $arrayStyleDesabled =  [
  7083.                 'fill'=>[
  7084.                     'fillType' => Fill::FILL_SOLID,
  7085.                     'startColor' => [
  7086.                         'rgb' => '707070'
  7087.                     ]
  7088.                 ],
  7089.             ];
  7090.             // Date 1
  7091.             if($rapport['date1']['isDisabled']){
  7092.                 $spreadsheet->getActiveSheet()->getStyle('C' . $row)->applyFromArray($arrayStyleDesabled);
  7093.             }else{
  7094.                 if($rapport['date1']['statusRapport'] == 'OK'){
  7095.                     $spreadsheet->getActiveSheet()->setCellValue('C' . $row, $rapport['date1']['statusRapport']);
  7096.                     $spreadsheet->getActiveSheet()->getStyle('C' . $row)->applyFromArray($arrayStyleGreen);
  7097.                 }else{
  7098.                     $spreadsheet->getActiveSheet()->setCellValue('C' . $row, $rapport['date1']['statusRapport']);
  7099.                     $spreadsheet->getActiveSheet()->getStyle('C' . $row)->applyFromArray($arrayStyleRed);
  7100.                 }
  7101.             }
  7102.             // Date 2
  7103.             if($rapport['date2']['isDisabled']){
  7104.                 $spreadsheet->getActiveSheet()->getStyle('D' . $row)->applyFromArray($arrayStyleDesabled);
  7105.             }else{
  7106.                 if($rapport['date2']['statusRapport'] == 'OK'){
  7107.                     $spreadsheet->getActiveSheet()->setCellValue('D' . $row, $rapport['date2']['statusRapport']);
  7108.                     $spreadsheet->getActiveSheet()->getStyle('D' . $row)->applyFromArray($arrayStyleGreen);
  7109.                 }else{
  7110.                     $spreadsheet->getActiveSheet()->setCellValue('D' . $row, $rapport['date2']['statusRapport']);
  7111.                     $spreadsheet->getActiveSheet()->getStyle('D' . $row)->applyFromArray($arrayStyleRed);
  7112.                 }
  7113.             }
  7114.             // Date 3
  7115.             if($rapport['date3']['isDisabled']){
  7116.                 $spreadsheet->getActiveSheet()->getStyle('E' . $row)->applyFromArray($arrayStyleDesabled);
  7117.             }else{
  7118.                 if($rapport['date3']['statusRapport'] == 'OK'){
  7119.                     $spreadsheet->getActiveSheet()->setCellValue('E' . $row, $rapport['date3']['statusRapport']);
  7120.                     $spreadsheet->getActiveSheet()->getStyle('E' . $row)->applyFromArray($arrayStyleGreen);
  7121.                 }else{
  7122.                     $spreadsheet->getActiveSheet()->setCellValue('E' . $row, $rapport['date3']['statusRapport']);
  7123.                     $spreadsheet->getActiveSheet()->getStyle('E' . $row)->applyFromArray($arrayStyleRed);
  7124.                 }
  7125.             }
  7126.             // Date 4
  7127.             if($rapport['date4']['isDisabled']){
  7128.                 $spreadsheet->getActiveSheet()->getStyle('F' . $row)->applyFromArray($arrayStyleDesabled);
  7129.             }else{
  7130.                 if($rapport['date4']['statusRapport'] == 'OK'){
  7131.                     $spreadsheet->getActiveSheet()->setCellValue('F' . $row, $rapport['date4']['statusRapport']);
  7132.                     $spreadsheet->getActiveSheet()->getStyle('F' . $row)->applyFromArray($arrayStyleGreen);
  7133.                 }else{
  7134.                     $spreadsheet->getActiveSheet()->setCellValue('F' . $row, $rapport['date4']['statusRapport']);
  7135.                     $spreadsheet->getActiveSheet()->getStyle('F' . $row)->applyFromArray($arrayStyleRed);
  7136.                 }
  7137.             }
  7138.             $row++;
  7139.         }
  7140.         $firstRow=1;
  7141.         $lastRow=$row-1;
  7142.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":F".$lastRow);
  7143.         $writer = new Xlsx($spreadsheet);
  7144.         $writer->save($file);
  7145.         return $file;
  7146.     }
  7147.     public function addProjectExiste($token){
  7148.         $project = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  7149.         $this->addAllTimeline($project);
  7150.         $this->etapsService->updateStatusTracker($project); // set status tracker
  7151.         $this->etapsService->setCodeProject($project);
  7152.         $etap160 = $this->em->getRepository(Etap160::class)->findOneBy(['project'=>$project->getId()]);
  7153.         if($etap160){
  7154.             $etap160->setLat($project->getLongi());
  7155.             $etap160->setLongi($project->getLat());
  7156.             $this->em->persist($etap160);
  7157.             $this->em->flush();
  7158.         }
  7159.     }
  7160.     public function addCommentParametrageLoyer($request,$user,$idComment=null)
  7161.     {
  7162.         $comment = $request->get('comment');
  7163.         $token = $request->get('token');
  7164.         if($comment and $token){
  7165.             $centrale = $this->em->getRepository(Project::class)->findOneBy(['token'=>$token]);
  7166.             $parametrageLoyer = $this->em->getRepository(ParametrageLoyer::class)->findOneBy(['centrale'=>$centrale->getId()]);
  7167.             if($parametrageLoyer && $user){
  7168.                 if($idComment){
  7169.                     $commentEntity = $this->em->getRepository(CommentLoyer::class)->find($idComment);
  7170.                     $commentEntity->setUpdateAt(new \DateTime());
  7171.                     $commentChild = $commentEntity->getComment();
  7172.                     $userChild = $commentEntity->getUser();
  7173.                     $createdAt = $commentEntity->getCreatedAt();
  7174.                     $commentEntityChild = new CommentLoyerChild();
  7175.                     $commentEntityChild->setUser($userChild);
  7176.                     $commentEntityChild->setComment($commentChild);
  7177.                     $commentEntityChild->setCommentLoyer($commentEntity);
  7178.                     $commentEntityChild->setCreatedAt($createdAt);
  7179.                     $this->em->persist($commentEntityChild);
  7180.                     $this->em->flush();
  7181.                 }else{
  7182.                     $commentEntity = new CommentLoyer();
  7183.                 }
  7184.                 $commentEntity->setParametrageLoyer($parametrageLoyer);
  7185.                 $commentEntity->setUser($user);
  7186.                 $commentEntity->setComment($comment);
  7187.                 $this->em->persist($commentEntity);
  7188.                 $this->em->flush();
  7189.                 return [
  7190.                     'commentEntity' => $commentEntity,
  7191.                     'parametrageLoyer' => $parametrageLoyer,
  7192.                     'success' => true
  7193.                 ];
  7194.             }
  7195.         }
  7196.         return [
  7197.             'success' => false
  7198.         ];
  7199.     }
  7200.     public function deleteCommentParametrageLoyer($idComment)
  7201.     {
  7202.         if($idComment){
  7203.             $commentEntity = $this->em->getRepository(CommentLoyer::class)->find($idComment);
  7204.             if($commentEntity) {
  7205.                 $this->em->remove($commentEntity);
  7206.                 $this->em->flush();
  7207.             }
  7208.             return [
  7209.                 'success' => true
  7210.             ];
  7211.         }
  7212.         return [
  7213.             'success' => false
  7214.         ];
  7215.     }
  7216.     public function displayLoyerPeriode()
  7217.     {
  7218.         $loyers = $this->em->getRepository(LoyerFinance::class)->getLoyerFinanceNotDisplay();
  7219.         $dateNow = new \DateTime();
  7220.         $dateNow->modify('+1 month');
  7221.         $user = $this->security->getUser();
  7222.         $admins = $this->em->getRepository(User::class)->getUserByRoles(['ROLE_SUPER_ADMINISTRATOR']);
  7223.         if($loyers){
  7224.             $i = 1;
  7225.             foreach ($loyers as $loyer){
  7226.                 $string = '<span class="spanNotif" >'.$loyer->getParametrageLoyer()->getCentrale()->getName().' - '.$loyer->getEcheanceStr().' </span> a été créé';
  7227.                 if($loyer->getParametrageLoyerPeriode()->getMethodeReglement() == 'A échoir'){
  7228.                     if($loyer->getDateDebut() <= $dateNow ){
  7229.                         $loyer->setIsDisplay(true);
  7230.                         $this->em->persist($loyer);
  7231.                         foreach ($admins as $admin){
  7232.                             $this->notification->addNotification($admin,$user, $string, null,false,null,false,false,true,$loyer,Notification::FACTURE);
  7233.                         }
  7234.                     }
  7235.                 }
  7236.                 if($loyer->getParametrageLoyerPeriode()->getMethodeReglement() == 'Echu'){
  7237.                     if($loyer->getDateFin() <= $dateNow ){
  7238.                         $loyer->setIsDisplay(true);
  7239.                         $this->em->persist($loyer);
  7240.                         foreach ($admins as $admin){
  7241.                             $this->notification->addNotification($admin,$user, $string, null,false,null,false,false,true,$loyer,Notification::FACTURE);
  7242.                         }
  7243.                     }
  7244.                 }
  7245.                 if(($i % 1000) == 0 or (count($loyers) == $i)){
  7246.                     $this->em->flush();
  7247.                 }
  7248.                 $i++;
  7249.             }
  7250.         }
  7251.     }
  7252.     public function addCommentFinanceLoyer($request,$user,$idComment=null)
  7253.     {
  7254.         $comment = $request->get('comment');
  7255.         $token = $request->get('token');
  7256.         if($comment and $token){
  7257.             $loyerFinance = $this->em->getRepository(LoyerFinance::class)->findOneBy(['token'=>$token]);
  7258.             if($loyerFinance && $user){
  7259.                 if($idComment){
  7260.                     $commentEntity = $this->em->getRepository(CommentFinanceLoyer::class)->find($idComment);
  7261.                     $commentEntity->setUpdateAt(new \DateTime());
  7262.                     $commentChild = $commentEntity->getComment();
  7263.                     $userChild = $commentEntity->getUser();
  7264.                     $createdAt = $commentEntity->getCreatedAt();
  7265.                     $commentEntityChild = new CommentFinanceLoyerChild();
  7266.                     $commentEntityChild->setUser($userChild);
  7267.                     $commentEntityChild->setComment($commentChild);
  7268.                     $commentEntityChild->setCommentFinanceLoyer($commentEntity);
  7269.                     $commentEntityChild->setCreatedAt($createdAt);
  7270.                     $this->em->persist($commentEntityChild);
  7271.                     $this->em->flush();
  7272.                 }else{
  7273.                     $commentEntity = new CommentFinanceLoyer();
  7274.                 }
  7275.                 $commentEntity->setLoyerFinance($loyerFinance);
  7276.                 $commentEntity->setUser($user);
  7277.                 $commentEntity->setComment($comment);
  7278.                 $this->em->persist($commentEntity);
  7279.                 $this->em->flush();
  7280.                 return [
  7281.                     'commentEntity' => $commentEntity,
  7282.                     'loyerFinance' => $loyerFinance,
  7283.                     'success' => true
  7284.                 ];
  7285.             }
  7286.         }
  7287.         return [
  7288.             'success' => false
  7289.         ];
  7290.     }
  7291.     public function deleteCommentFinanceLoyer($idComment)
  7292.     {
  7293.         if($idComment){
  7294.             $commentEntity = $this->em->getRepository(CommentFinanceLoyer::class)->find($idComment);
  7295.             if($commentEntity) {
  7296.                 $this->em->remove($commentEntity);
  7297.                 $this->em->flush();
  7298.             }
  7299.             return [
  7300.                 'success' => true
  7301.             ];
  7302.         }
  7303.         return [
  7304.             'success' => false
  7305.         ];
  7306.     }
  7307.     public function getProjectsForCarte($request){
  7308.         $search = $request->get('search');
  7309.         $status = $request->get('statusProject');
  7310.         $status2 = $request->get('status2Project');
  7311.         $statusAdministratifProject = $request->get('statusAdministratifProject');
  7312.         $statusTrackerProject = $request->get('statusTrackerProject');
  7313.         $typologieProject = $request->get('typologieProject');
  7314.         $spvProject = $request->get('spvProject');
  7315.         $devProject = $request->get('devProject');
  7316.         $entrepriseProject = $request->get('entrepriseProject');
  7317.         $responsableProject = $request->get('responsableProject');
  7318.         $responsableFoncierProject = $request->get('responsableFoncierProject');
  7319.         $responsableDevProject = $request->get('responsableDevProject');
  7320.         $constructeurProject = $request->get('constructeurProject');
  7321.         $constructeurEpcProject = $request->get('constructeurEpcProject');
  7322.         $constructeurInstallateurProject = $request->get('constructeurInstallateurProject');
  7323.         $constructeurCharpentierProject = $request->get('constructeurCharpentierProject');
  7324.         $constructeurNotaireProject = $request->get('constructeurNotaireProject');
  7325.         $intervenantProject = $request->get('intervenantProject');
  7326.         $stadeConstruction = $request->get('stadeConstruction');
  7327.         $statusUrbanisme = $request->get('statusUrbanisme');
  7328.         $statusFoncier1 = $request->get('statusFoncier1');
  7329.         $statusFoncier2 = $request->get('statusFoncier2');
  7330.         $statusFoncier3 = $request->get('statusFoncier3');
  7331.         $achatLocation = $request->get('achatLocation');
  7332.         $user = $this->security->getUser();
  7333.         $roles = $user->getRoles();
  7334.         $spvsTab = [];
  7335.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  7336.             $spvs = $user->getSpv();
  7337.             foreach($spvs as $item){
  7338.                 $spvsTab[] = $item->getId();
  7339.             }
  7340.         }
  7341.         $filters = [
  7342.             'query' => $search,
  7343.             'devProject' => $devProject,
  7344.             'entrepriseProject' => $entrepriseProject,
  7345.             'spvsTab' => $spvsTab,
  7346.             'responsableProject' => $responsableProject,
  7347.             'responsableFoncierProject' => $responsableFoncierProject,
  7348.             'responsableDevProject' => $responsableDevProject,
  7349.             'constructeurProject' => $constructeurProject,
  7350.             'constructeurEpcProject' => $constructeurEpcProject,
  7351.             'constructeurInstallateurProject' => $constructeurInstallateurProject,
  7352.             'constructeurCharpentierProject' => $constructeurCharpentierProject,
  7353.             'constructeurNotaireProject' => $constructeurNotaireProject,
  7354.             'user' => $user,
  7355.             'statusAdministratifProject' => $statusAdministratifProject,
  7356.             'statusTrackerProject' => $statusTrackerProject,
  7357.             'intervenantProject' => $intervenantProject,
  7358.             'stadeConstruction' => $stadeConstruction,
  7359.             'statusUrbanisme' => $statusUrbanisme,
  7360.             'statusFoncier1' => $statusFoncier1,
  7361.             'statusFoncier2' => $statusFoncier2,
  7362.             'statusFoncier3' => $statusFoncier3,
  7363.             'achatLocation' => $achatLocation,
  7364.             'typologieProject' => $typologieProject
  7365.         ];
  7366.         $projects= $this->em->getRepository(\App\Entity\Project::class)->searchForCarte(false,$status,$status2,$spvProject,$filters);
  7367.         $output = array();
  7368.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  7369.         $intl = new \IntlDateFormatter('fr', \IntlDateFormatter::LONG, \IntlDateFormatter::NONE, null, null, 'd MMMM YYYY');
  7370.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  7371.         foreach ($projects as $project) {
  7372.             $outputDetail = [];
  7373.             if($project[0]->getLat()){
  7374.                 $outputDetail['lat'] = str_replace([','], ".", str_replace([' '], "", $project[0]->getLongi())) ;
  7375.             }else{
  7376.                 $outputDetail['lat'] = isset($project['lat'])? $project['lat'] : null ;
  7377.             }
  7378.             if($project[0]->getLongi()){
  7379.                 $outputDetail['longi'] = str_replace([','], ".", str_replace([' '], "", $project[0]->getLat())) ;
  7380.             }else{
  7381.                 $outputDetail['longi'] = isset($project['longi'])? $project['longi'] : null ;
  7382.             }
  7383. //            $outputDetail['adresse'] = $project[0]->getAdresse();
  7384. //            $outputDetail['codePostale'] = $project[0]->getCodePostal();
  7385. //            $outputDetail['city'] = $project[0]->getCity();
  7386.             $outputDetail['spv'] = $project[0]->getSpv()?$project[0]->getSpv()->getName():'';
  7387. //            $outputDetail['tokenProject'] = $project[0]->getToken();
  7388.             $outputDetail['name'] = $project[0]->getName();
  7389.             $outputDetail['lien'] = $this->router->generate('admin_project_view_recap',['token'=>$project[0]->getToken()]) ;
  7390. //            $outputDetail['image'] = $project[0]->getImageProject() ? $baseurl.'/uploads/'.$project[0]->getImageProject()->getPath(): 0;
  7391.             $outputDetail['firstnameProprietaire'] = isset($project['firstnameProprietaire'])? $project['firstnameProprietaire'] : '' ;
  7392.             $outputDetail['lastnameProprietaire'] = isset($project['lastnameProprietaire'])? $project['lastnameProprietaire'] : '' ;
  7393.             $outputDetail['phoneProprietaire'] = isset($project['phoneProprietaire'])? $project['phoneProprietaire'] : '' ;
  7394.             if($project[0]->getStatusAdministratif() == Project::STATUS_CUSTOM_DEVELOPPEMENT){
  7395.                 $outputDetail['status'] = Project::STATUS_CUSTOM_DEVELOPPEMENT ;
  7396.             }elseif ($project[0]->getStatusAdministratif() == Project::STATUS_CUSTOM_CONSTRUCTION){
  7397.                 $outputDetail['status'] = Project::STATUS_CUSTOM_CONSTRUCTION ;
  7398.             }elseif ($project[0]->getStatusAdministratif() == Project::STATUS_CUSTOM_EXPLOITATION){
  7399.                 $outputDetail['status'] = Project::STATUS_CUSTOM_EXPLOITATION ;
  7400.             }else{
  7401.                 $outputDetail['status'] = Project::STATUS_CUSTOM_EN_ATTENT ;
  7402.             }
  7403.             $output[] = $outputDetail;
  7404.         }
  7405.         return $output;
  7406.     }
  7407.     public function getDashboardAlert($user)
  7408.     {
  7409.         $response = [];
  7410.         $filters = ['user' => $user];
  7411.         $alerts = $this->em->getRepository(\App\Entity\Alert::class)->search(false,$filters, 0, 4, true,'id', 'desc');
  7412.         $now = new \DateTime();
  7413.         foreach ($alerts as $alert) {
  7414.             if($alert->getTypeAlert() == Alert::ALERT_BAIL){
  7415.                 $typeAlert = 'Promesse de bail' ;
  7416.                 $typeAlertId = Alert::ALERT_BAIL ;
  7417.             }elseif ($alert->getTypeAlert() == Alert::ALERT_PC_CONSUEL){
  7418.                 $typeAlert = 'PC/DP' ;
  7419.                 $typeAlertId = Alert::ALERT_PC_CONSUEL ;
  7420.             }elseif ($alert->getTypeAlert() == Alert::ALERT_T0){
  7421.                 $typeAlert = 'Date de T0 - Date limite d’achèvement' ;
  7422.                 $typeAlertId = Alert::ALERT_T0 ;
  7423.             }elseif ($alert->getTypeAlert() == Alert::ALERT_Etap1And2){
  7424.                 $typeAlert = 'Avancement étape 1 et étape 2 timeline urbanisme' ;
  7425.                 $typeAlertId = Alert::ALERT_Etap1And2 ;
  7426.             }else{
  7427.                 $typeAlert = '';
  7428.                 $typeAlertId = null ;
  7429.             }
  7430.             $dateLimit = $alert->getDateLimit();
  7431.             $alertClass = 'alert-primary';
  7432.             if (is_object($dateLimit)) {
  7433.                 $diff = $now->diff($dateLimit);
  7434.                 $isPast = $dateLimit < $now;
  7435.                 if ($isPast) {
  7436.                     $alertClass = 'alert-danger';
  7437.                 } elseif ($diff->days <= 15) {
  7438.                     $alertClass = 'alert-warning';
  7439.                 }
  7440.             }
  7441.             array_push($response, [
  7442.                 'responsive_id' => '',
  7443.                 'id' => $alert->getId(),
  7444.                 'token' => $alert->getToken(),
  7445.                 'projectEntity' => $alert->getProject(),
  7446.                 'project' => $alert->getProject()->getName(),
  7447.                 'spv' => $alert->getProject()->getSpv()?$alert->getProject()->getSpv()->getName():'',
  7448.                 'status' => $alert->getProject()->getStatusAdministratifNum() .'('.$alert->getProject()->getStatusTrackerStr().')',
  7449.                 'typeAlert' => $typeAlert,
  7450.                 'typeAlertId' => $typeAlertId,
  7451.                 'dateLimit' => $alert->getDateLimit()  ? $alert->getDateLimit()->format('d/m/Y') : '',
  7452.                 'createdAt' => $alert->getCreatedAt()->format('H:m - d/m/Y'),
  7453.                 'delaiRestant' => $this->delaiRestantDateExpirationPromesseBail($alert),
  7454.                 'alertClass' => $alertClass
  7455.             ]);
  7456.         }
  7457.         return $response;
  7458.     }
  7459.     public function addPhotoInQuestion($array){
  7460.         if($array){
  7461.             foreach ($array as $item){
  7462.                 $tokenQuestion = $item['tokenQustion'];
  7463.                 $tokenFile = $item['tokenFile'];
  7464.                 if($tokenFile  && $tokenQuestion){
  7465.                     $question = $this->em->getRepository(VisiteTerrainV2Question::class)->findOneBy(['token' => $tokenQuestion]);
  7466.                     $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  7467.                     if($question){
  7468.                         $question->addFilePhotosMultiple($docUpload);
  7469.                         $this->em->persist($question);
  7470.                     }
  7471.                 }
  7472.             }
  7473.             $this->em->flush();
  7474.         }
  7475.     }
  7476.     public function getEtapByNumAndProject(int $num, Project $project)
  7477.     {
  7478.         $etapEntity = 'App\\Entity\\Etap' . $num;
  7479.         if($project){
  7480.             return $this->em->getRepository($etapEntity)->findOneBy(['project' => $project->getId()]);
  7481.         }else{
  7482.             return null;
  7483.         }
  7484.     }
  7485.     public function addEditInfoProject($entity,$className){
  7486.         if($className == 'ActualiteProject'){
  7487.             $entityProject = new ActualiteProjectChild();
  7488.             $entityProject->setActualiteProject($entity);
  7489.         }elseif ($className == 'ContextProject'){
  7490.             $entityProject = new ContextProjectChild();
  7491.             $entityProject->setContextProject($entity);
  7492.         }elseif ($className == 'EnvironnementProject'){
  7493.             $entityProject = new EnvironnementProjectChild();
  7494.             $entityProject->setEnvironnementProject($entity);
  7495.         }
  7496.         $entityProject->setComment($entity->getComment());
  7497.         $entityProject->setCreatedAt($entity->getCreatedAt());
  7498.         $entityProject->setUser($entity->getUser());
  7499.         $this->em->persist($entityProject);
  7500.         $this->em->flush();
  7501.     }
  7502.     public function importProjectsAltaria($filename)
  7503.     {
  7504.         $file = $this->params->get('uploads_directory')."/".$filename;
  7505.         $array = [];
  7506.         $f = fopen($file, "r");
  7507.         $flag = true;
  7508.         $i = 0;
  7509.         $header = [];
  7510.         while (($line = fgetcsv($f,0,";")) !== false) {
  7511.             if($flag) {
  7512.                 $header = [];
  7513.                 foreach ($line as $key1 => $cell) {
  7514.                     $header[] =  trim(preg_replace('/^\xEF\xBB\xBF/', '', $cell));
  7515.                 }
  7516.                 $flag = false;
  7517.                 continue;
  7518.             }
  7519.             foreach ($line as $key => $cell) {
  7520.                 $array[$i][$header[$key]]=  trim($cell);
  7521.             }
  7522.             $i++ ;
  7523.         }
  7524.         fclose($f);
  7525.         $entreprise = $this->em->getRepository(Entreprise::class)->findOneBy(['isAlteria'=>true]);
  7526.         $admins = $this->em->getRepository(User::class)->getUserByRoles(['ROLE_SUPER_ADMINISTRATOR']);
  7527.         $admin = $admins[0];
  7528.         foreach ($array as $item){
  7529.             if(isset($item['Code du projet']) and $item['Code du projet']){
  7530.                 $project = $this->em->getRepository(Project::class)->findOneBy(['codeProject'=>$item['Code du projet']]);
  7531.                 if(!$project){
  7532.                     $project = new Project();
  7533.                 }
  7534.                 // add or update timeline
  7535.                 $etap0 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_0]); $etapEntity0 = $this->setOrAddEntityEtap($project,$etap0,Etaps::STATUS_EN_COURS,'App\Entity\Etap0');
  7536.                 $etap1 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_1]); $etapEntity1 = $this->setOrAddEntityEtap($project,$etap1,Etaps::STATUS_EN_COURS,'App\Entity\Etap1');
  7537.                 $etap2 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_2]); $etapEntity2 = $this->setOrAddEntityEtap($project,$etap2,Etaps::STATUS_EN_COURS,'App\Entity\Etap2');
  7538.                 $etap3 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_3]); $etapEntity3 = $this->setOrAddEntityEtap($project,$etap3,Etaps::STATUS_EN_COURS,'App\Entity\Etap3');
  7539.                 $etap4 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_4]); $etapEntity4 = $this->setOrAddEntityEtap($project,$etap4,Etaps::STATUS_EN_COURS,'App\Entity\Etap4');
  7540.                 $etap5 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_5]); $etapEntity5 = $this->setOrAddEntityEtap($project,$etap5,Etaps::STATUS_EN_COURS,'App\Entity\Etap5');
  7541.                 $etap6 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_6]); $etapEntity6 = $this->setOrAddEntityEtap($project,$etap6,Etaps::STATUS_EN_COURS,'App\Entity\Etap6');
  7542.                 $etap601 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_601]); $etapEntity601 = $this->setOrAddEntityEtap($project,$etap601,Etaps::STATUS_EN_COURS,'App\Entity\Etap601');
  7543.                 $etap602 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_602]); $etapEntity602 = $this->setOrAddEntityEtap($project,$etap602,Etaps::STATUS_EN_COURS,'App\Entity\Etap602');
  7544.                 $etap7 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_7]); $etapEntity7 = $this->setOrAddEntityEtap($project,$etap7,Etaps::STATUS_EN_COURS,'App\Entity\Etap7');
  7545.                 $etap71 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_71]); $etapEntity71 = $this->setOrAddEntityEtap($project,$etap71,Etaps::STATUS_EN_COURS,'App\Entity\Etap71');
  7546.                 $etap8 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_8]); $etapEntity8 = $this->setOrAddEntityEtap($project,$etap8,Etaps::STATUS_EN_COURS,'App\Entity\Etap8');
  7547.                 $etap80 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_80]); $etapEntity80 = $this->setOrAddEntityEtap($project,$etap80,Etaps::STATUS_EN_COURS,'App\Entity\Etap80');
  7548.                 $etap9 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_9]); $etapEntity9 = $this->setOrAddEntityEtap($project,$etap9,Etaps::STATUS_EN_COURS,'App\Entity\Etap9');
  7549.                 $etap10 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_10]); $etapEntity10 = $this->setOrAddEntityEtap($project,$etap10,Etaps::STATUS_EN_COURS,'App\Entity\Etap10');
  7550.                 $etap11 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_11]); $etapEntity11 = $this->setOrAddEntityEtap($project,$etap11,Etaps::STATUS_EN_COURS,'App\Entity\Etap11');
  7551.                 $etap12 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_12]); $etapEntity12 = $this->setOrAddEntityEtap($project,$etap12,Etaps::STATUS_EN_COURS,'App\Entity\Etap12');
  7552.                 $etap121 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_121]); $etapEntity121 = $this->setOrAddEntityEtap($project,$etap121,Etaps::STATUS_EN_COURS,'App\Entity\Etap121');
  7553.                 $etap13 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_13]); $etapEntity13 = $this->setOrAddEntityEtap($project,$etap13,Etaps::STATUS_EN_COURS,'App\Entity\Etap13');
  7554.                 $etap14 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_14]); $etapEntity14 = $this->setOrAddEntityEtap($project,$etap14,Etaps::STATUS_EN_COURS,'App\Entity\Etap14');
  7555.                 $etap15 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_15]); $etapEntity15 = $this->setOrAddEntityEtap($project,$etap15,Etaps::STATUS_EN_COURS,'App\Entity\Etap15');
  7556.                 $etap159 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_159]); $etapEntity159 = $this->setOrAddEntityEtap($project,$etap159,Etaps::STATUS_EN_COURS,'App\Entity\Etap159');
  7557.                 $etap23 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_23]); $etapEntity23 = $this->setOrAddEntityEtap($project,$etap23,Etaps::STATUS_EN_COURS,'App\Entity\Etap23');
  7558.                 $etap160 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_160]); $etapEntity160 = $this->setOrAddEntityEtap($project,$etap160,Etaps::STATUS_EN_COURS,'App\Entity\Etap160');
  7559.                 $etap161 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_161]); $etapEntity161 = $this->setOrAddEntityEtap($project,$etap161,Etaps::STATUS_EN_COURS,'App\Entity\Etap161');
  7560.                 $etap16 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_16]); $etapEntity16 = $this->setOrAddEntityEtap($project,$etap16,Etaps::STATUS_EN_COURS,'App\Entity\Etap16');
  7561.                 $etap17 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_17]); $etapEntity17 = $this->setOrAddEntityEtap($project,$etap17,Etaps::STATUS_EN_COURS,'App\Entity\Etap17');
  7562.                 $etap171 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_171]); $etapEntity171 = $this->setOrAddEntityEtap($project,$etap171,Etaps::STATUS_EN_COURS,'App\Entity\Etap171');
  7563.                 $etap172 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_172]); $etapEntity172 = $this->setOrAddEntityEtap($project,$etap172,Etaps::STATUS_EN_COURS,'App\Entity\Etap172');
  7564.                 $etap173 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_173]); $etapEntity173 = $this->setOrAddEntityEtap($project,$etap173,Etaps::STATUS_EN_COURS,'App\Entity\Etap173');
  7565.                 $etap174 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_174]); $etapEntity174 = $this->setOrAddEntityEtap($project,$etap174,Etaps::STATUS_EN_COURS,'App\Entity\Etap174');
  7566.                 $etap175 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_175]); $etapEntity175 = $this->setOrAddEntityEtap($project,$etap175,Etaps::STATUS_EN_COURS,'App\Entity\Etap175');
  7567.                 $etap18 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_18]); $etapEntity18 = $this->setOrAddEntityEtap($project,$etap18,Etaps::STATUS_EN_COURS,'App\Entity\Etap18');
  7568.                 $etap19 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_19]); $etapEntity19 = $this->setOrAddEntityEtap($project,$etap19,Etaps::STATUS_EN_COURS,'App\Entity\Etap19');
  7569.                 $etap20 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_20]); $etapEntity20 = $this->setOrAddEntityEtap($project,$etap20,Etaps::STATUS_EN_COURS,'App\Entity\Etap20');
  7570.                 $etap201 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_201]); $etapEntity201 = $this->setOrAddEntityEtap($project,$etap201,Etaps::STATUS_EN_COURS,'App\Entity\Etap201');
  7571.                 $etap21 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_21]); $etapEntity21 = $this->setOrAddEntityEtap($project,$etap21,Etaps::STATUS_EN_COURS,'App\Entity\Etap21');
  7572.                 $etap22 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_22]); $etapEntity22 = $this->setOrAddEntityEtap($project,$etap22,Etaps::STATUS_EN_COURS,'App\Entity\Etap22');
  7573.                 $etap24 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_24]); $etapEntity24 = $this->setOrAddEntityEtap($project,$etap24,Etaps::STATUS_EN_COURS,'App\Entity\Etap24');
  7574.                 $etap25 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_25]); $etapEntity25 = $this->setOrAddEntityEtap($project,$etap25,Etaps::STATUS_EN_COURS,'App\Entity\Etap25');
  7575.                 $etap26 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_26]); $etapEntity26 = $this->setOrAddEntityEtap($project,$etap26,Etaps::STATUS_EN_COURS,'App\Entity\Etap26');
  7576.                 $project->setCodeProject($item['Code du projet']);
  7577.                 if(isset($item['Nom du projet']) and $item['Nom du projet']){$project->setName($item['Nom du projet']);}
  7578.                 if(isset($item['Date de sourcing']) and $item['Date de sourcing']){
  7579.                     $b = explode(' au ',$item['Date de sourcing']);
  7580.                     $dateSourcing = new \Datetime($b[0]);
  7581.                     $project->setDateSourcing($dateSourcing);
  7582.                 }
  7583.                 if(isset($item['Sourcing']) and $item['Sourcing']){
  7584.                     $sourcing = $this->em->getRepository(Sourcing::class)->findOneBy(['name'=>$item['Sourcing']]);
  7585.                     if(!$sourcing){
  7586.                         $sourcing = new Sourcing();
  7587.                         $sourcing->setName($item['Sourcing']);
  7588.                         $this->em->persist($sourcing);
  7589.                     }
  7590.                     $project->setSourcing($sourcing);
  7591.                 }
  7592.                 if(isset($item['Ville']) and $item['Ville']){$project->setCity($item['Ville']);}
  7593.                 if(isset($item['Productible (P50)']) and $item['Productible (P50)']){$project->setProductible($item['Productible (P50)']);}
  7594.                 if(isset($item['Typologie du projet']) and $item['Typologie du projet']){}
  7595.                 if(isset($item['Famille du projet']) and $item['Famille du projet']){
  7596.                 }
  7597.                 if(isset($item['Sous-famille du projet']) and $item['Sous-famille du projet']){
  7598.                     $tabSousFamille = explode(',',$item['Sous-famille du projet']);
  7599.                     if($tabSousFamille){
  7600.                         foreach ($tabSousFamille as $itemSousFamille){
  7601.                             $sousFamille = $this->em->getRepository(SousFamilleProject::class)->findOneBy(['name'=>$itemSousFamille]);
  7602.                             if(!$sousFamille){
  7603.                                 $sousFamille = new SousFamilleProject();
  7604.                                 $sousFamille->setName($itemSousFamille);
  7605.                                 $this->em->persist($sousFamille);
  7606.                             }
  7607.                             $project->addSousFamilleProject($sousFamille);
  7608.                         }
  7609.                     }
  7610.                 }
  7611.                 if(isset($item['Surface disponible (EN HA)']) and $item['Surface disponible (EN HA)']){$project->setSurfaceDisponible(floatval(str_replace(',','.',$item['Surface disponible (EN HA)'])));}
  7612.                 if(isset($item['Surface exploitable (EN HA)']) and $item['Surface exploitable (EN HA)']){$project->setSurfaceExploitable(floatval(str_replace(',','.',$item['Surface exploitable (EN HA)'])));}
  7613.                 if(isset($item['Capacité installée (kWc)']) and $item['Capacité installée (kWc)']){$project->setCapacite(floatval(str_replace(',','.',$item['Capacité installée (kWc)'])));}
  7614.                 if(isset($item['Actualité']) and $item['Actualité']){
  7615.                     $actualite = $this->em->getRepository(ActualiteProject::class)->findOneBy(['project'=>$project->getId()]);
  7616.                     if(!$actualite){
  7617.                         $actualite = new ActualiteProject();
  7618.                     }
  7619.                     $actualite->setComment($item['Actualité']);
  7620.                     $actualite->setCreatedAt(new \DateTime());
  7621.                     $actualite->setUser($admin);
  7622.                     $actualite->setProject($project);
  7623.                     $this->em->persist($actualite);
  7624.                 }
  7625.                 if(isset($item['Situation foncière']) and $item['Situation foncière']){
  7626.                     $etapEntity6->setSituationFonciere($item['Situation foncière']);
  7627.                     $this->em->persist($etapEntity6);
  7628.                 }
  7629.                 if(isset($item['Type de développement (ou boutons Achat / Location)']) and $item['Type de développement (ou boutons Achat / Location)']){
  7630.                     if($item['Type de développement (ou boutons Achat / Location)'] == 'LOCATION'){
  7631.                         $project->setAchatLocation(Project::LOCATION);
  7632.                     }elseif($item['Type de développement (ou boutons Achat / Location)'] == 'ACHAT'){
  7633.                         $project->setAchatLocation(Project::ACHAT);
  7634.                     }
  7635.                 }
  7636.                 if(isset($item['Zonage PLU']) and $item['Zonage PLU']){
  7637.                     $zonagePlu = $this->em->getRepository(ZonagePlu::class)->findOneBy(['name'=>$item['Zonage PLU']]);
  7638.                     if(!$zonagePlu){
  7639.                         $zonagePlu = new ZonagePlu();
  7640.                         $zonagePlu->setName($item['Zonage PLU']);
  7641.                         $this->em->persist($zonagePlu);
  7642.                     }
  7643.                     $project->addZonagePlu($zonagePlu);
  7644.                 }
  7645.                 if(isset($item['Numéro de parcelle']) and $item['Numéro de parcelle']){$project->setNumParcelle($item['Numéro de parcelle']);}
  7646.                 if(isset($item['Nature du raccordement']) and $item['Nature du raccordement']){
  7647.                     $etapEntity80->setNatureRaccordement($item['Nature du raccordement']);
  7648.                     $this->em->persist($etapEntity80);
  7649.                 }
  7650.                 if(isset($item['Distance Poste Source']) and $item['Distance Poste Source']){
  7651.                     $etapEntity80->setDistancePdl($item['Distance Poste Source']);
  7652.                     $this->em->persist($etapEntity80);
  7653.                 }
  7654.                 if(isset($item['date de fin d’exclusivité loi']) and $item['date de fin d’exclusivité loi']){
  7655.                     $b = explode(' au ',$item['date de fin d’exclusivité loi']);
  7656.                     $dateFinExclusiviteLoi = new \Datetime($b[0]);
  7657.                     $etapEntity5->setDateFinExclusiviteLoi($dateFinExclusiviteLoi);
  7658.                     $this->em->persist($etapEntity5);
  7659.                 }
  7660.                 if(isset($item['Date PDB']) and $item['Date PDB']){
  7661.                     $b = explode(' au ',$item['Date PDB']);
  7662.                     $datePdb = new \Datetime($b[0]);
  7663.                     $project->setDateExpirationPromesseBail($datePdb);
  7664.                     $etapEntity5->setDateExpirationPromesseBail($datePdb);
  7665.                     $this->em->persist($etapEntity5);
  7666.                 }
  7667.                 if(isset($item['Validité PDB']) and $item['Validité PDB']){
  7668.                 }
  7669.                 if(isset($item['Durée du bail en année']) and $item['Durée du bail en année']){
  7670.                     $etapEntity5->setDureeBail($item['Durée du bail en année']);
  7671.                     $this->em->persist($etapEntity5);
  7672.                 }
  7673.                 if(isset($item['Date de dépôt PC']) and $item['Date de dépôt PC']){
  7674.                     $b = explode(' au ',$item['Date de dépôt PC']);
  7675.                     $dateDepotPc = new \Datetime($b[0]);
  7676.                     $project->setDateDepotPc($dateDepotPc);
  7677.                     $etapEntity1->setDateDepotPc($dateDepotPc);
  7678.                     $this->em->persist($etapEntity1);
  7679.                 }
  7680.                 if(isset($item['Date PC/DP purgé']) and $item['Date PC/DP purgé']){
  7681.                     $b = explode(' au ',$item['Date PC/DP purgé']);
  7682.                     $datePcDpPurge = new \Datetime($b[0]);
  7683.                     $etapEntity2->setDatePcDpPurge($datePcDpPurge);
  7684.                     $this->em->persist($etapEntity2);
  7685.                 }
  7686.                 if(isset($item['Date T0']) and $item['Date T0']){
  7687.                     $b = explode(' au ',$item['Date T0']);
  7688.                     $dateT0 = new \Datetime($b[0]);
  7689.                     $etapEntity9->setDateT0($dateT0);
  7690.                     $this->em->persist($etapEntity9);
  7691.                 }
  7692.                 if(isset($item['Date de signature du bail']) and $item['Date de signature du bail']){
  7693.                     $b = explode(' au ',$item['Date de signature du bail']);
  7694.                     $dateSignatureBail = new \Datetime($b[0]);
  7695.                     $etapEntity7->setDateSignatureBail($dateSignatureBail);
  7696.                     $this->em->persist($etapEntity7);
  7697.                 }
  7698.                 if(isset($item['Durée d’exploitation']) and $item['Durée d’exploitation']){$project->setDureeExploitation($item['Durée d’exploitation']);}
  7699.                 if(isset($item['Loyer en €/an']) and $item['Loyer en €/an']){
  7700.                     $project->setLoyerVise(floatval(str_replace(',','.',$item['Loyer en €/an'])));
  7701.                     $etapEntity5->setLoyerConfirme(floatval(str_replace(',','.',$item['Loyer en €/an'])));
  7702.                     $this->em->persist($etapEntity5);
  7703.                 }
  7704.                 if(isset($item['Rémunération exploitant agricole']) and $item['Rémunération exploitant agricole']){
  7705.                     $project->setRemunerationExploitantAgricole($item['Rémunération exploitant agricole']);
  7706.                 }
  7707.                 if(isset($item['Soulte']) and $item['Soulte']){
  7708.                     $project->setSoulteVise(floatval(str_replace(',','.',$item['Soulte'])));
  7709.                     $etapEntity5->setSoulteConfirme(floatval(str_replace(',','.',$item['Soulte'])));
  7710.                     $this->em->persist($etapEntity5);
  7711.                 }
  7712.                 if(isset($item['Honoraire apporteur (k€/MWc)']) and $item['Honoraire apporteur (k€/MWc)']){
  7713.                     $etapEntity5->setHonoraireApporteur($item['Soulte']);
  7714.                     $this->em->persist($etapEntity5);
  7715.                 }
  7716.                 if(isset($item['Prix d’achat foncier (k€/ha)']) and $item['Prix d’achat foncier (k€/ha)']){
  7717.                     $project->setPrixAchatFoncierKHa($item['Prix d’achat foncier (k€/ha)']);
  7718.                 }
  7719.                 if(isset($item['Prix d’achat foncier (k€/MWc)']) and $item['Prix d’achat foncier (k€/MWc)']){
  7720.                     $project->setPrixAchatFoncierKMWc($item['Prix d’achat foncier (k€/MWc)']);
  7721.                 }
  7722.                 if(isset($item['Indemnité transitoire (€/an)']) and $item['Indemnité transitoire (€/an)']){
  7723.                     $project->setIndemiteTransitoire($item['Indemnité transitoire (€/an)']);
  7724.                 }
  7725.                 if((isset($item['Type / Sous-type de valorisation']) and $item['Type / Sous-type de valorisation'])
  7726.                    or (isset($item['Prix de vente électricité']) and $item['Prix de vente électricité'])
  7727.                    or (isset($item['Durée du contrat (en année)']) and $item['Durée du contrat (en année)'])
  7728.                    or (isset($item['Taux d’indexation du tarif']) and $item['Taux d’indexation du tarif'])
  7729.                 ){
  7730.                     if(count($etapEntity24->getEtap24Champs()) > 0){
  7731.                         foreach ($etapEntity24->getEtap24Champs() as $item2){
  7732.                             $etap24Champs = $item2;
  7733.                         }
  7734.                     }else{
  7735.                         $etap24Champs = new Etap24Champs();
  7736.                         $etap24Champs->setEtap24($etapEntity24);
  7737.                         $etap24Champs->setEtap25($etapEntity25);
  7738.                         $etap24Champs->setEtap26($etapEntity26);
  7739.                     }
  7740.                     if($item['Type / Sous-type de valorisation']){
  7741.                         if(in_array($item['Type / Sous-type de valorisation'],['CRE Bat','CRE Sol','AOS'])){
  7742.                           $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_ao_cre]);
  7743.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7744.                             $etap24Champs->setSousChoixValorisation($item['Type / Sous-type de valorisation']);
  7745.                         }elseif (in_array($item['Type / Sous-type de valorisation'],['S21','S24','S23'])){
  7746.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_guichet_ouvert]);
  7747.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7748.                             if($item['Type / Sous-type de valorisation'] == 'S21'){
  7749.                                 $etap24Champs->setSousChoixValorisation('OA - S21');
  7750.                             }
  7751.                             if($item['Type / Sous-type de valorisation'] == 'S24'){
  7752.                                 $etap24Champs->setSousChoixValorisation('OA - S24');
  7753.                             }
  7754.                             if($item['Type / Sous-type de valorisation'] == 'S23'){
  7755.                                 $etap24Champs->setSousChoixValorisation('OA - S23');
  7756.                             }
  7757.                         }
  7758.                         elseif (in_array($item['Type / Sous-type de valorisation'],['ACC','CRE ou ACC'])){
  7759.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_acc]);
  7760.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7761.                         }
  7762.                         elseif (in_array($item['Type / Sous-type de valorisation'],['PPA ou FER'])){
  7763.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_ppa]);
  7764.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7765.                         }
  7766.                         elseif (in_array($item['Type / Sous-type de valorisation'],['ACI'])){
  7767.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_aci]);
  7768.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7769.                         }
  7770.                         elseif (in_array($item['Type / Sous-type de valorisation'],['U-PPA ou spot'])){
  7771.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_spot]);
  7772.                             $etap24Champs->setTypeValorisation($typeValorisation);
  7773.                         }
  7774.                     }
  7775.                     if($item['Durée du contrat (en année)']){
  7776.                         $etap24Champs->setDureeContrat((int)$item['Durée du contrat (en année)']);
  7777.                     }
  7778.                     if($item['Prix de vente électricité']){
  7779.                         $etap24Champs->setPrixVenteElectricite($item['Prix de vente électricité']);
  7780.                     }
  7781.                     $etap24Champs->setTauxIndexationTarif($item['Taux d’indexation du tarif'] ? str_replace('%/an','',$item['Taux d’indexation du tarif']): '');
  7782.                     $this->em->persist($etap24Champs);
  7783.                 }
  7784.                 if(isset($item['TRI']) and $item['TRI']){$project->setTri($item['TRI']);}
  7785.                 if(isset($item['TRI avec Prime']) and $item['TRI avec Prime']){$project->setTriPrime($item['TRI avec Prime']);}
  7786.                 if(isset($item['Rendement EBE/CAPEX']) and $item['Rendement EBE/CAPEX']){$project->setRendementEbeCapex($item['Rendement EBE/CAPEX']);}
  7787.                 if(isset($item['Rendement EBE/CAPEX PPA 70€']) and $item['Rendement EBE/CAPEX PPA 70€']){$project->setRendementEbeCapexPPA($item['Rendement EBE/CAPEX PPA 70€']);}
  7788.                 if(isset($item['Ratio CAPEX/Puissance']) and $item['Ratio CAPEX/Puissance']){$project->setRatioCapexPuissance($item['Ratio CAPEX/Puissance']);}
  7789.                 if(isset($item['Date d’abandon']) and $item['Date d’abandon']){
  7790.                     $b = explode(' au ',$item['Date d’abandon']);
  7791.                     $dateAbandon = new \Datetime($b[0]);
  7792.                     $project->setDateAbandon($dateAbandon);
  7793.                 }
  7794.                 if(isset($item['SPV']) and $item['SPV']){
  7795.                     $spv = $this->em->getRepository(Spv::class)->findOneBy(['name'=>$item['SPV']]);
  7796.                     if($spv){
  7797.                         $project->setSpv($spv);
  7798.                     }
  7799.                 }
  7800.                 if($entreprise){
  7801.                     $project->setEntreprise($entreprise);
  7802.                 }
  7803.                 $project->setStatus(Project::STATUS_EN_COURS);
  7804.                 $project->setIsNewConstruction(true);
  7805.                 $project->setIsEnabled(true);
  7806.                 $project->setIsImportCode(true);
  7807.                 $project->setUserCreated($admin);
  7808.                 $project->setCreatedAt(new \DateTime());
  7809.                 $this->em->persist($project);
  7810.                 $this->em->flush();
  7811.                 $this->etapsService->updateStatusTracker($project); // set status tracker
  7812.             }
  7813.             if(isset($item['Code Projet']) and $item['Code Projet']){
  7814.                 $project = $this->em->getRepository(Project::class)->findOneBy(['codeProject'=>$item['Code Projet']]);
  7815.                 if(!$project){
  7816.                     $project = new Project();
  7817.                 }
  7818.                 // add or update timeline
  7819.                 $etap0 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_0]); $etapEntity0 = $this->setOrAddEntityEtap($project,$etap0,Etaps::STATUS_EN_COURS,'App\Entity\Etap0');
  7820.                 $etap1 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_1]); $etapEntity1 = $this->setOrAddEntityEtap($project,$etap1,Etaps::STATUS_EN_COURS,'App\Entity\Etap1');
  7821.                 $etap2 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_2]); $etapEntity2 = $this->setOrAddEntityEtap($project,$etap2,Etaps::STATUS_EN_COURS,'App\Entity\Etap2');
  7822.                 $etap3 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_3]); $etapEntity3 = $this->setOrAddEntityEtap($project,$etap3,Etaps::STATUS_EN_COURS,'App\Entity\Etap3');
  7823.                 $etap4 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_4]); $etapEntity4 = $this->setOrAddEntityEtap($project,$etap4,Etaps::STATUS_EN_COURS,'App\Entity\Etap4');
  7824.                 $etap5 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_5]); $etapEntity5 = $this->setOrAddEntityEtap($project,$etap5,Etaps::STATUS_EN_COURS,'App\Entity\Etap5');
  7825.                 $etap6 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_6]); $etapEntity6 = $this->setOrAddEntityEtap($project,$etap6,Etaps::STATUS_EN_COURS,'App\Entity\Etap6');
  7826.                 $etap601 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_601]); $etapEntity601 = $this->setOrAddEntityEtap($project,$etap601,Etaps::STATUS_EN_COURS,'App\Entity\Etap601');
  7827.                 $etap602 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_602]); $etapEntity602 = $this->setOrAddEntityEtap($project,$etap602,Etaps::STATUS_EN_COURS,'App\Entity\Etap602');
  7828.                 $etap7 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_7]); $etapEntity7 = $this->setOrAddEntityEtap($project,$etap7,Etaps::STATUS_EN_COURS,'App\Entity\Etap7');
  7829.                 $etap71 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_71]); $etapEntity71 = $this->setOrAddEntityEtap($project,$etap71,Etaps::STATUS_EN_COURS,'App\Entity\Etap71');
  7830.                 $etap8 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_8]); $etapEntity8 = $this->setOrAddEntityEtap($project,$etap8,Etaps::STATUS_EN_COURS,'App\Entity\Etap8');
  7831.                 $etap80 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_80]); $etapEntity80 = $this->setOrAddEntityEtap($project,$etap80,Etaps::STATUS_EN_COURS,'App\Entity\Etap80');
  7832.                 $etap9 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_9]); $etapEntity9 = $this->setOrAddEntityEtap($project,$etap9,Etaps::STATUS_EN_COURS,'App\Entity\Etap9');
  7833.                 $etap10 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_10]); $etapEntity10 = $this->setOrAddEntityEtap($project,$etap10,Etaps::STATUS_EN_COURS,'App\Entity\Etap10');
  7834.                 $etap11 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_11]); $etapEntity11 = $this->setOrAddEntityEtap($project,$etap11,Etaps::STATUS_EN_COURS,'App\Entity\Etap11');
  7835.                 $etap12 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_12]); $etapEntity12 = $this->setOrAddEntityEtap($project,$etap12,Etaps::STATUS_EN_COURS,'App\Entity\Etap12');
  7836.                 $etap121 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_121]); $etapEntity121 = $this->setOrAddEntityEtap($project,$etap121,Etaps::STATUS_EN_COURS,'App\Entity\Etap121');
  7837.                 $etap13 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_13]); $etapEntity13 = $this->setOrAddEntityEtap($project,$etap13,Etaps::STATUS_EN_COURS,'App\Entity\Etap13');
  7838.                 $etap14 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_14]); $etapEntity14 = $this->setOrAddEntityEtap($project,$etap14,Etaps::STATUS_EN_COURS,'App\Entity\Etap14');
  7839.                 $etap15 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_15]); $etapEntity15 = $this->setOrAddEntityEtap($project,$etap15,Etaps::STATUS_EN_COURS,'App\Entity\Etap15');
  7840.                 $etap159 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_159]); $etapEntity159 = $this->setOrAddEntityEtap($project,$etap159,Etaps::STATUS_EN_COURS,'App\Entity\Etap159');
  7841.                 $etap23 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_23]); $etapEntity23 = $this->setOrAddEntityEtap($project,$etap23,Etaps::STATUS_EN_COURS,'App\Entity\Etap23');
  7842.                 $etap160 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_160]); $etapEntity160 = $this->setOrAddEntityEtap($project,$etap160,Etaps::STATUS_EN_COURS,'App\Entity\Etap160');
  7843.                 $etap161 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_161]); $etapEntity161 = $this->setOrAddEntityEtap($project,$etap161,Etaps::STATUS_EN_COURS,'App\Entity\Etap161');
  7844.                 $etap16 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_16]); $etapEntity16 = $this->setOrAddEntityEtap($project,$etap16,Etaps::STATUS_EN_COURS,'App\Entity\Etap16');
  7845.                 $etap17 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_17]); $etapEntity17 = $this->setOrAddEntityEtap($project,$etap17,Etaps::STATUS_EN_COURS,'App\Entity\Etap17');
  7846.                 $etap171 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_171]); $etapEntity171 = $this->setOrAddEntityEtap($project,$etap171,Etaps::STATUS_EN_COURS,'App\Entity\Etap171');
  7847.                 $etap172 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_172]); $etapEntity172 = $this->setOrAddEntityEtap($project,$etap172,Etaps::STATUS_EN_COURS,'App\Entity\Etap172');
  7848.                 $etap173 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_173]); $etapEntity173 = $this->setOrAddEntityEtap($project,$etap173,Etaps::STATUS_EN_COURS,'App\Entity\Etap173');
  7849.                 $etap174 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_174]); $etapEntity174 = $this->setOrAddEntityEtap($project,$etap174,Etaps::STATUS_EN_COURS,'App\Entity\Etap174');
  7850.                 $etap175 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_175]); $etapEntity175 = $this->setOrAddEntityEtap($project,$etap175,Etaps::STATUS_EN_COURS,'App\Entity\Etap175');
  7851.                 $etap18 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_18]); $etapEntity18 = $this->setOrAddEntityEtap($project,$etap18,Etaps::STATUS_EN_COURS,'App\Entity\Etap18');
  7852.                 $etap19 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_19]); $etapEntity19 = $this->setOrAddEntityEtap($project,$etap19,Etaps::STATUS_EN_COURS,'App\Entity\Etap19');
  7853.                 $etap20 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_20]); $etapEntity20 = $this->setOrAddEntityEtap($project,$etap20,Etaps::STATUS_EN_COURS,'App\Entity\Etap20');
  7854.                 $etap201 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_201]); $etapEntity201 = $this->setOrAddEntityEtap($project,$etap201,Etaps::STATUS_EN_COURS,'App\Entity\Etap201');
  7855.                 $etap21 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_21]); $etapEntity21 = $this->setOrAddEntityEtap($project,$etap21,Etaps::STATUS_EN_COURS,'App\Entity\Etap21');
  7856.                 $etap22 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_22]); $etapEntity22 = $this->setOrAddEntityEtap($project,$etap22,Etaps::STATUS_EN_COURS,'App\Entity\Etap22');
  7857.                 $etap24 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_24]); $etapEntity24 = $this->setOrAddEntityEtap($project,$etap24,Etaps::STATUS_EN_COURS,'App\Entity\Etap24');
  7858.                 $etap25 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_25]); $etapEntity25 = $this->setOrAddEntityEtap($project,$etap25,Etaps::STATUS_EN_COURS,'App\Entity\Etap25');
  7859.                 $etap26 = $this->em->getRepository(Etaps::class)->findOneBy(['num' => Etaps::ETAP_26]); $etapEntity26 = $this->setOrAddEntityEtap($project,$etap26,Etaps::STATUS_EN_COURS,'App\Entity\Etap26');
  7860.                 $project->setCodeProject($item['Code Projet']);
  7861.                 if(isset($item['Name']) and $item['Name']){$project->setName($item['Name']);}
  7862.                 if(isset($item['Développeur']) and $item['Développeur']){
  7863.                     $fullNameTab = explode(',',trim($item['Développeur']));
  7864.                     foreach ($fullNameTab as $fullName){
  7865.                         $fullNameTabItem = explode(' ',trim($fullName));
  7866.                         if (count($fullNameTabItem) !== 2) {
  7867.                         }else{
  7868.                             $p1 = $fullNameTabItem[0];
  7869.                             $p2 = $fullNameTabItem[1];
  7870.                             $user = $this->em->getRepository(User::class)->checkUserByName($p1,$p2);
  7871.                             if($user){
  7872.                                 $responsableFoncier = new ResponcableFoncierPorject();
  7873.                                 $responsableFoncier->setResponsable($user);
  7874.                                 $responsableFoncier->setProject($project);
  7875.                                 $this->em->persist($responsableFoncier);
  7876.                             }
  7877.                         }
  7878.                     }
  7879.                 }
  7880.                 if(isset($item['Chef de projet']) and $item['Chef de projet']){
  7881.                     $fullNameTab = explode(',',trim($item['Chef de projet']));
  7882.                     foreach ($fullNameTab as $fullName){
  7883.                         $fullNameTabItem = explode(' ',trim($fullName));
  7884.                         if (count($fullNameTabItem) !== 2) {
  7885.                         }else{
  7886.                             $p1 = $fullNameTabItem[0];
  7887.                             $p2 = $fullNameTabItem[1];
  7888.                             $user = $this->em->getRepository(User::class)->checkUserByName($p1,$p2);
  7889.                             if($user){
  7890.                                 $responsableDeveloppement = new ResponsableDeveloppement();
  7891.                                 $responsableDeveloppement->setResponsable($user);
  7892.                                 $responsableDeveloppement->setProject($project);
  7893.                                 $this->em->persist($responsableDeveloppement);
  7894.                             }
  7895.                         }
  7896.                     }
  7897.                 }
  7898.                 if(isset($item['Promotion']) and $item['Promotion']){
  7899.                     $fullNameTab = explode(',',trim($item['Promotion']));
  7900.                     foreach ($fullNameTab as $fullName){
  7901.                         $fullNameTabItem = explode(' ',trim($fullName));
  7902.                         if (count($fullNameTabItem) !== 2) {
  7903.                         }else{
  7904.                             $p1 = $fullNameTabItem[0];
  7905.                             $p2 = $fullNameTabItem[1];
  7906.                             $user = $this->em->getRepository(User::class)->checkUserByName($p1,$p2);
  7907.                             if($user){
  7908.                                 $responsableUser = new ResponcablePorject();
  7909.                                 $responsableUser->setResponsable($user);
  7910.                                 $responsableUser->setProject($project);
  7911.                                 $this->em->persist($responsableUser);
  7912.                             }
  7913.                         }
  7914.                     }
  7915.                 }
  7916.                 if(isset($item['Date sourcing']) and $item['Date sourcing']){
  7917.                     $b = explode(' au ',$item['Date sourcing']);
  7918.                     if(strpos($b[0],'/')){
  7919.                         $dateSourcing = \DateTime::createFromFormat('d/m/Y', $b[0] );
  7920.                     }else{
  7921.                         $dateSourcing = \DateTime::createFromFormat('Y-m-d', $b[0] );
  7922.                     }
  7923.                     $project->setDateSourcing($dateSourcing);
  7924.                 }
  7925.                 if(isset($item['Sourcing']) and $item['Sourcing']){
  7926.                     $sourcing = $this->em->getRepository(Sourcing::class)->findOneBy(['name'=>$item['Sourcing']]);
  7927.                     if(!$sourcing){
  7928.                         $sourcing = new Sourcing();
  7929.                         $sourcing->setName($item['Sourcing']);
  7930.                         $this->em->persist($sourcing);
  7931.                     }
  7932.                     $project->setSourcing($sourcing);
  7933.                 }
  7934.                 if(isset($item['Ville']) and $item['Ville']){$project->setCity($item['Ville']);}
  7935.                 if(isset($item['Département']) and $item['Département']){$project->setDepartement($item['Département']);}
  7936.                 if(isset($item['Nature du Foncier']) and $item['Nature du Foncier']){
  7937.                     $context = $this->em->getRepository(ContextProject::class)->findOneBy(['project'=>$project->getId()]);
  7938.                     if(!$context){
  7939.                         $context = new ContextProject();
  7940.                     }
  7941.                     $context->setComment($item['Nature du Foncier']);
  7942.                     $context->setUser($admin);
  7943.                     $context->setProject($project);
  7944.                     $this->em->persist($context);
  7945.                 }
  7946.                 if(isset($item['P 50 (kWh/kWc/an)']) and $item['P 50 (kWh/kWc/an)']){$project->setProductible($item['P 50 (kWh/kWc/an)']);}
  7947.                 if(isset($item['Famille de projet']) and $item['Famille de projet']){
  7948.                     if($item['Famille de projet'] == 'Ombrières'){
  7949.                         $typo = $this->em->getRepository(TypologieProject::class)->findOneBy(['name'=>'Ombrière']);
  7950.                         if($typo){
  7951.                             $project->setTypologieProject($typo);
  7952.                         }
  7953.                     }
  7954.                     if($item['Famille de projet'] == 'AgriPV'){
  7955.                         $typo = $this->em->getRepository(TypologieProject::class)->findOneBy(['name'=>'Agrivoltaïsme']);
  7956.                         if($typo){
  7957.                             $project->setTypologieProject($typo);
  7958.                         }
  7959.                     }
  7960.                     if($item['Famille de projet'] == 'Sol' and isset($item['Puissance'])){
  7961.                         $typoPetitSol = $this->em->getRepository(TypologieProject::class)->findOneBy(['name'=>'Petit Sol']);
  7962.                         $typoGrandSol = $this->em->getRepository(TypologieProject::class)->findOneBy(['name'=>'Grand Sol']);
  7963.                         if(floatval(str_replace(',','.',$item['Puissance'])) > 1 ){
  7964.                             $project->setTypologieProject($typoGrandSol);
  7965.                         }else{
  7966.                             $project->setTypologieProject($typoPetitSol);
  7967.                         }
  7968.                     }
  7969.                     if($item['Famille de projet'] == 'Petit Sol'){
  7970.                         $typo = $this->em->getRepository(TypologieProject::class)->findOneBy(['name'=>'Petit Sol']);
  7971.                         if($typo){
  7972.                             $project->setTypologieProject($typo);
  7973.                         }
  7974.                     }
  7975.                     if($item['Famille de projet'] == 'Hangar'){
  7976.                     }
  7977.                 }
  7978.                 if(isset($item['Prix de vente éléctricité (€/MWc)']) and $item['Prix de vente éléctricité (€/MWc)']){
  7979.                     $project->setTarifRevente($item['Prix de vente éléctricité (€/MWc)']);
  7980.                 }
  7981.                 if(isset($item['Sous-famille']) and $item['Sous-famille']){
  7982.                     $tabSousFamille = explode(',',$item['Sous-famille']);
  7983.                     if($tabSousFamille){
  7984.                         foreach ($tabSousFamille as $itemSousFamille){
  7985.                             $sousFamille = $this->em->getRepository(SousFamilleProject::class)->findOneBy(['name'=>$itemSousFamille]);
  7986.                             if(!$sousFamille){
  7987.                                 $sousFamille = new SousFamilleProject();
  7988.                                 $sousFamille->setName($itemSousFamille);
  7989.                                 $this->em->persist($sousFamille);
  7990.                             }
  7991.                             $project->addSousFamilleProject($sousFamille);
  7992.                         }
  7993.                     }
  7994.                 }
  7995.                 if(isset($item['Surface disponible']) and $item['Surface disponible']){$project->setSurfaceDisponible(floatval(str_replace(',','.',$item['Surface disponible'])));}
  7996.                 if(isset($item['Surface exploitable']) and $item['Surface exploitable']){$project->setSurfaceExploitable(floatval(str_replace(',','.',$item['Surface exploitable'])));}
  7997.                 if(isset($item['Puissance']) and $item['Puissance']){$project->setCapacite(floatval(str_replace(',','.',$item['Puissance'])) * 1000);}
  7998.                 if(isset($item['Contexte']) and $item['Contexte']){
  7999.                     $context = $this->em->getRepository(ContextProject::class)->findOneBy(['project'=>$project->getId()]);
  8000.                     if(!$context){
  8001.                         $context = new ContextProject();
  8002.                     }
  8003.                     $context->setComment($item['Contexte']);
  8004.                     $context->setUser($admin);
  8005.                     $context->setProject($project);
  8006.                     $this->em->persist($context);
  8007.                 }
  8008.                 if(isset($item['Environnement']) and $item['Environnement']){
  8009.                     $environnement = $this->em->getRepository(EnvironnementProject::class)->findOneBy(['project'=>$project->getId()]);
  8010.                     if(!$environnement){
  8011.                         $environnement = new EnvironnementProject();
  8012.                     }
  8013.                     $environnement->setComment($item['Environnement']);
  8014.                     $environnement->setUser($admin);
  8015.                     $environnement->setProject($project);
  8016.                     $this->em->persist($environnement);
  8017.                 }
  8018.                 if(isset($item['Ranking']) and $item['Ranking']){$project->setRanking($item['Ranking']);}
  8019.                 if(isset($item['Achat/Location']) and $item['Achat/Location']){
  8020.                     if($item['Achat/Location'] == 'LOCATION'){
  8021.                         $project->setAchatLocation(Project::LOCATION);
  8022.                     }elseif($item['Achat/Location'] == 'ACHAT'){
  8023.                         $project->setAchatLocation(Project::ACHAT);
  8024.                     }
  8025.                 }
  8026.                 if(isset($item['Zonage PLU']) and $item['Zonage PLU']){
  8027.                     $zonagePlu = $this->em->getRepository(ZonagePlu::class)->findOneBy(['name'=>$item['Zonage PLU']]);
  8028.                     if(!$zonagePlu){
  8029.                         $zonagePlu = new ZonagePlu();
  8030.                         $zonagePlu->setName($item['Zonage PLU']);
  8031.                         $this->em->persist($zonagePlu);
  8032.                     }
  8033.                     $project->addZonagePlu($zonagePlu);
  8034.                 }
  8035.                 if(isset($item['Parcelles']) and $item['Parcelles']){$project->setNumParcelle($item['Parcelles']);}
  8036.                 if(isset($item['Nature du raccordement']) and $item['Nature du raccordement']){
  8037.                     $etapEntity80->setNatureRaccordement($item['Nature du raccordement']);
  8038.                     $this->em->persist($etapEntity80);
  8039.                 }
  8040.                 if(isset($item['Distance Poste Source']) and $item['Distance Poste Source']){
  8041.                     $etapEntity80->setDistancePdl($item['Distance Poste Source']);
  8042.                     $this->em->persist($etapEntity80);
  8043.                 }
  8044. //                if(isset($item['Actualités']) and $item['Actualités']){
  8045. //                    $commentProject2 = new CommentProject2();
  8046. //                    $commentProject2->setComment($item['Actualités']);
  8047. //                    $commentProject2->setCreatedAt(new \DateTime());
  8048. //                    $commentProject2->setUser($admin);
  8049. //                    $commentProject2->setProject($project);
  8050. //                    $this->em->persist($commentProject2);
  8051. //                }
  8052. //                if(isset($item['Avancement Développement']) and $item['Avancement Développement']){
  8053. //                    $commentProject2 = new CommentProject2();
  8054. //                    $commentProject2->setComment($item['Avancement Développement']);
  8055. //                    $commentProject2->setCreatedAt(new \DateTime());
  8056. //                    $commentProject2->setUser($admin);
  8057. //                    $commentProject2->setProject($project);
  8058. //                    $this->em->persist($commentProject2);
  8059. //                }
  8060.                 if(isset($item['Fin Exclusivité LOI']) and $item['Fin Exclusivité LOI']){
  8061.                     $b = explode(' au ',$item['Fin Exclusivité LOI']);
  8062.                     if(strpos($b[0],'/')){
  8063.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8064.                     }else{
  8065.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8066.                     }
  8067.                     $etapEntity5->setDateFinExclusiviteLoi($datetimeFromFormat);
  8068.                     $this->em->persist($etapEntity5);
  8069.                 }
  8070.                 if(isset($item['Signature LOI']) and $item['Signature LOI']){
  8071.                     $b = explode(' au ',$item['Signature LOI']);
  8072.                     if(strpos($b[0],'/')){
  8073.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8074.                     }else{
  8075.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8076.                     }
  8077.                     $etapEntity5->setDateSignature($datetimeFromFormat);
  8078.                     $this->em->persist($etapEntity5);
  8079.                 }
  8080.                 if(isset($item['Signature Promesse']) and $item['Signature Promesse']){
  8081.                     $b = explode(' au ',$item['Signature Promesse']);
  8082.                     if(strpos($b[0],'/')){
  8083.                         $datePdb = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8084.                     }else{
  8085.                         $datePdb = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8086.                     }
  8087.                     $project->setDateExpirationPromesseBail($datePdb);
  8088.                     $etapEntity5->setDateExpirationPromesseBail($datePdb);
  8089.                     $this->em->persist($etapEntity5);
  8090.                 }
  8091.                 if(isset($item['Échéance Promesse']) and $item['Échéance Promesse']){
  8092.                     $b = explode(' au ',$item['Échéance Promesse']);
  8093.                     if(strpos($b[0],'/')){
  8094.                         $datePdb = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8095.                     }else{
  8096.                         $datePdb = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8097.                     }
  8098.                     $etapEntity5->setDateEcheancePromesse($datePdb);
  8099.                     $this->em->persist($etapEntity5);
  8100.                 }
  8101.                 if(isset($item['Durée maximale du bail']) and $item['Durée maximale du bail']){
  8102.                     $etapEntity5->setDureeBail($item['Durée maximale du bail']);
  8103.                     $this->em->persist($etapEntity5);
  8104.                 }
  8105.                  if(isset($item['Objectif dépôt PC/DP']) and $item['Objectif dépôt PC/DP']){
  8106.                      $b = explode(' au ',$item['Objectif dépôt PC/DP']);
  8107.                      if(strpos($b[0],'/')){
  8108.                          $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8109.                      }else{
  8110.                          $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8111.                      }
  8112.                      $project->setDateDepotPc($datetimeFromFormat);
  8113. //                     $project->setDateMiseEnService($datetimeFromFormat);
  8114. //                     $etapEntity14->setDateMiseEnService($datetimeFromFormat);
  8115. //                     $etapEntity21->setDateMiseEnService($datetimeFromFormat);
  8116. //                     $this->em->persist($etapEntity21);
  8117. //                     $this->em->persist($etapEntity14);
  8118.                  }
  8119.                 if(isset($item['Objectif PC/DP obtenu']) and $item['Objectif PC/DP obtenu']){
  8120.                     $b = explode(' au ',$item['Objectif PC/DP obtenu']);
  8121.                     if(strpos($b[0],'/')){
  8122.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8123.                     }else{
  8124.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8125.                     }
  8126.                     $project->setDateObtentionPc($datetimeFromFormat);
  8127.                 }
  8128.                 if(isset($item['Objectif RTB']) and $item['Objectif RTB']){
  8129.                     $b = explode(' au ',$item['Objectif RTB']);
  8130.                     if(strpos($b[0],'/')){
  8131.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8132.                     }else{
  8133.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8134.                     }
  8135.                     $project->setDateRTBtarifie($datetimeFromFormat);
  8136.                 }
  8137.                 if(isset($item['Date Dépôt PC/DP']) and $item['Date Dépôt PC/DP']){
  8138.                     $b = explode(' au ',$item['Date Dépôt PC/DP']);
  8139.                     if(strpos($b[0],'/')){
  8140.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8141.                     }else{
  8142.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8143.                     }
  8144.                     $project->setDateDepotPc($datetimeFromFormat);
  8145.                     $etapEntity1->setDateDepotPc($datetimeFromFormat);
  8146.                     $this->em->persist($etapEntity1);
  8147.                 }
  8148.                 if(isset($item['Date PC/DP purgé']) and $item['Date PC/DP purgé']){
  8149.                     $b = explode(' au ',$item['Date PC/DP purgé']);
  8150.                     if(strpos($b[0],'/')){
  8151.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8152.                     }else{
  8153.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8154.                     }
  8155.                     $etapEntity2->setDatePcDpPurge($datetimeFromFormat);
  8156.                     $this->em->persist($etapEntity2);
  8157.                 }
  8158.                 if(isset($item['Signature Bail / Achat']) and $item['Signature Bail / Achat']){
  8159.                     $b = explode(' au ',$item['Signature Bail / Achat']);
  8160.                     if(strpos($b[0],'/')){
  8161.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8162.                     }else{
  8163.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8164.                     }
  8165.                     $etapEntity7->setDateSignatureBail($datetimeFromFormat);
  8166.                     $this->em->persist($etapEntity7);
  8167.                 }
  8168.                 if(isset($item['Objectif mise en service']) and $item['Objectif mise en service']){
  8169.                     $b = explode(' au ',$item['Objectif mise en service']);
  8170.                     if(strpos($b[0],'/')){
  8171.                         $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8172.                     }else{
  8173.                         $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8174.                     }
  8175.                     $etapEntity14->setDateMesPrevisionnelle($datetimeFromFormat);
  8176.                     $this->em->persist($etapEntity14);
  8177.                 }
  8178. //                if(isset($item['Date mise en service'])){
  8179. //                    if($item['Date mise en service']){
  8180. //                        $datetimeFromFormat = null;
  8181. //                    }else{
  8182. //                        $b = explode(' au ',$item['Date mise en service']);
  8183. //                        if(strpos($b[0],'/')){
  8184. //                            $datetimeFromFormat = \DateTime::createFromFormat('d/m/Y', $b[0] );
  8185. //                        }else{
  8186. //                            $datetimeFromFormat = \DateTime::createFromFormat('Y-m-d', $b[0] );
  8187. //                        }
  8188. //                    }
  8189. //
  8190. //                    $project->setDateMiseEnService($datetimeFromFormat);
  8191. //                    $etapEntity14->setDateMiseEnService($datetimeFromFormat);
  8192. //                    $etapEntity21->setDateMiseEnService($datetimeFromFormat);
  8193. //                    $this->em->persist($etapEntity21);
  8194. //                    $this->em->persist($etapEntity14);
  8195. //                }
  8196.                 if(isset($item["Durée d'exploitation"]) and $item["Durée d'exploitation"]){$project->setDureeExploitation($item["Durée d'exploitation"]);}
  8197.                 if(isset($item['Loyer (€/MWc)']) and $item['Loyer (€/MWc)']){
  8198.                     $project->setLoyerVise(floatval(str_replace(',','.',$item['Loyer (€/MWc)'])));
  8199.                     $etapEntity5->setLoyerConfirme(floatval(str_replace(',','.',$item['Loyer (€/MWc)'])));
  8200.                     $this->em->persist($etapEntity5);
  8201.                 }
  8202.                 if(isset($item['Rémunération exploitant agricole']) and $item['Rémunération exploitant agricole']){
  8203.                     $project->setRemunerationExploitantAgricole($item['Rémunération exploitant agricole']);
  8204.                 }
  8205.                 if(isset($item['Soulte (k€)']) and $item['Soulte (k€)']){
  8206.                     $project->setSoulteVise(floatval(str_replace(',','.',$item['Soulte (k€)'])));
  8207.                     $etapEntity5->setSoulteConfirme(floatval(str_replace(',','.',$item['Soulte (k€)'])));
  8208.                     $this->em->persist($etapEntity5);
  8209.                 }
  8210.                 if(isset($item['Honoraires apporteur (k€/MWc)']) and $item['Honoraires apporteur (k€/MWc)']){
  8211.                     $etapEntity5->setHonoraireApporteur($item['Honoraires apporteur (k€/MWc)']);
  8212.                     $this->em->persist($etapEntity5);
  8213.                 }
  8214.                 if(isset($item["Prix d'achat foncier (k€/ha)"]) and $item["Prix d'achat foncier (k€/ha)"]){
  8215.                     $project->setPrixAchatFoncierKHa($item["Prix d'achat foncier (k€/ha)"]);
  8216.                 }
  8217.                 if(isset($item["Prix d'achat foncier (k€/MWc)"]) and $item["Prix d'achat foncier (k€/MWc)"]){
  8218.                     $project->setPrixAchatFoncierKMWc($item["Prix d'achat foncier (k€/MWc)"]);
  8219.                 }
  8220.                 if(isset($item["Indemnité transitoire (k€/an)"]) and $item["Indemnité transitoire (k€/an)"]){
  8221.                     $project->setIndemiteTransitoire($item["Indemnité transitoire (k€/an)"]);
  8222.                 }
  8223.                 if((isset($item['Valorisation']) and $item['Valorisation'])
  8224.                     or (isset($item['Prix de vente éléctricité (€/MWc)']) and $item['Prix de vente éléctricité (€/MWc)'])
  8225.                     or (isset($item['Durée du contrat valorisation']) and $item['Durée du contrat valorisation'])
  8226.                     or (isset($item['Taux inflation de tarif']) and $item['Taux inflation de tarif'])
  8227.                 ){
  8228.                     if(count($etapEntity24->getEtap24Champs()) > 0){
  8229.                         foreach ($etapEntity24->getEtap24Champs() as $item2){
  8230.                             $etap24Champs = $item2;
  8231.                         }
  8232.                     }else{
  8233.                         $etap24Champs = new Etap24Champs();
  8234.                         $etap24Champs->setEtap24($etapEntity24);
  8235.                         $etap24Champs->setEtap25($etapEntity25);
  8236.                         $etap24Champs->setEtap26($etapEntity26);
  8237.                     }
  8238.                     if($item['Valorisation']){
  8239.                         if(in_array($item['Valorisation'],['CRE Bat','CRE Sol','AOS'])){
  8240.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_ao_cre]);
  8241.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8242.                             $etap24Champs->setSousChoixValorisation($item['Valorisation']);
  8243.                         }elseif (in_array($item['Valorisation'],['S21','S24','S23'])){
  8244.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_guichet_ouvert]);
  8245.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8246.                             if($item['Valorisation'] == 'S21'){
  8247.                                 $etap24Champs->setSousChoixValorisation('OA - S21');
  8248.                             }
  8249.                             if($item['Valorisation'] == 'S24'){
  8250.                                 $etap24Champs->setSousChoixValorisation('OA - S24');
  8251.                             }
  8252.                             if($item['Valorisation'] == 'S23'){
  8253.                                 $etap24Champs->setSousChoixValorisation('OA - S23');
  8254.                             }
  8255.                         }
  8256.                         elseif (in_array($item['Valorisation'],['ACC','CRE ou ACC'])){
  8257.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_acc]);
  8258.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8259.                         }
  8260.                         elseif (in_array($item['Valorisation'],['PPA ou FER'])){
  8261.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_ppa]);
  8262.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8263.                         }
  8264.                         elseif (in_array($item['Valorisation'],['ACI'])){
  8265.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_aci]);
  8266.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8267.                         }
  8268.                         elseif (in_array($item['Valorisation'],['U-PPA ou spot'])){
  8269.                             $typeValorisation = $this->em->getRepository(TypeValorisation::class)->findOneBy(['category'=>TypeValorisation::type_spot]);
  8270.                             $etap24Champs->setTypeValorisation($typeValorisation);
  8271.                         }
  8272.                     }
  8273.                     if($item['Durée du contrat valorisation']){
  8274.                         $etap24Champs->setDureeContrat((int)$item['Durée du contrat valorisation']);
  8275.                     }
  8276.                     if($item['Prix de vente éléctricité (€/MWc)']){
  8277.                         $etap24Champs->setPrixVenteElectricite($item['Prix de vente éléctricité (€/MWc)']);
  8278.                     }
  8279.                     $etap24Champs->setTauxIndexationTarif($item['Taux inflation de tarif'] ? str_replace('%/an','',$item['Taux inflation de tarif']): '');
  8280.                     $this->em->persist($etap24Champs);
  8281.                 }
  8282.                 if(isset($item['TRI']) and $item['TRI']){$project->setTri($item['TRI']);}
  8283.                 if(isset($item['TRI avec Prime']) and $item['TRI avec Prime']){$project->setTriPrime($item['TRI avec Prime']);}
  8284.                 if(isset($item['TRI PPA 70€']) and $item['TRI PPA 70€']){$project->setTriPpaMin($item['TRI PPA 70€']);}
  8285.                 if(isset($item['Rendement EBE/CAPEX']) and $item['Rendement EBE/CAPEX']){$project->setRendementEbeCapex($item['Rendement EBE/CAPEX']);}
  8286.                 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€']);}
  8287.                 if(isset($item['Ratio CAPEX / Puissance']) and $item['Ratio CAPEX / Puissance']){$project->setRatioCapexPuissance($item['Ratio CAPEX / Puissance']);}
  8288.                 if(isset($item['SPV']) and $item['SPV']){
  8289.                     $spv = $this->em->getRepository(Spv::class)->findOneBy(['name'=>$item['SPV']]);
  8290.                     if($spv){
  8291.                         $project->setSpv($spv);
  8292.                     }
  8293.                 }
  8294.                 if(isset($item['Actualités']) and $item['Actualités']){
  8295.                     $actualite = $this->em->getRepository(ActualiteProject::class)->findOneBy(['project'=>$project->getId()]);
  8296.                     if(!$actualite){
  8297.                         $actualite = new ActualiteProject();
  8298.                     }
  8299.                     $actualite->setComment($item['Actualités']);
  8300.                     $actualite->setCreatedAt(new \DateTime());
  8301.                     $actualite->setUser($admin);
  8302.                     $actualite->setProject($project);
  8303.                     $this->em->persist($actualite);
  8304.                 }
  8305.                 if(isset($item['Avancement Développement']) and $item['Avancement Développement']){
  8306.                     $actualite = $this->em->getRepository(ActualiteProject::class)->findOneBy(['project'=>$project->getId()]);
  8307.                     if(!$actualite){
  8308.                         $actualite = new ActualiteProject();
  8309.                     }
  8310.                     $actualite->setComment($item['Avancement Développement']);
  8311.                     $actualite->setCreatedAt(new \DateTime());
  8312.                     $actualite->setUser($admin);
  8313.                     $actualite->setProject($project);
  8314.                     $this->em->persist($actualite);
  8315.                 }
  8316.                 if($entreprise){
  8317.                     $project->setEntreprise($entreprise);
  8318.                 }
  8319.                 $project->setStatus(Project::STATUS_EN_COURS);
  8320.                 $project->setIsNewConstruction(true);
  8321.                 $project->setIsEnabled(true);
  8322.                 $project->setIsImportCode(true);
  8323.                 $project->setUserCreated($admin);
  8324.                 $project->setCreatedAt(new \DateTime());
  8325.                 $this->em->persist($project);
  8326.                 $this->em->flush();
  8327.                 $this->etapsService->updateStatusTracker($project); // set status tracker
  8328.             }
  8329.             if(isset($item['Prénom']) and $item['Prénom'] and isset($item['Nom']) and $item['Nom'] and isset($item['Email']) and $item['Email']){
  8330.                 $this->userService->addUsersByArray($item['Nom'],$item['Prénom'],$item['Email'],$item['Téléphone']);
  8331.             }
  8332.         }
  8333.     }
  8334.     private function setOrAddEntityEtap($project,$etap,$status,$className){
  8335.         if($project && $project->getId()){
  8336.             $etapEntity = $this->em->getRepository($className)->findOneBy(['project'=>$project->getId()]);
  8337.             if(!$etapEntity){
  8338.                 $etapEntity = new $className();
  8339.                 $etapEntity->setStatus($status);
  8340.             }
  8341.         }else{
  8342.             $etapEntity = new $className();
  8343.             $etapEntity->setStatus($status);
  8344.         }
  8345.         $etapEntity->setProject($project);
  8346.         $etapEntity->setEtap($etap);
  8347.         $this->em->persist($etapEntity);
  8348.         $this->em->flush();
  8349.         return $etapEntity;
  8350.     }
  8351.     public function checkProjectAccess($project){
  8352.         $user = $this->security->getUser();
  8353.         $roles = $user->getRoles();
  8354.         $spvsTab = [];
  8355.         if (in_array("ROLE_AUDITEUR", $roles) or in_array("ROLE_COMPTABLE", $roles) or in_array($user->getTypeAcces(),[User::ACCES_visiteur,User::ACCES_comptable])) {
  8356.             $spvs = $user->getSpv();
  8357.             foreach($spvs as $item){
  8358.                 $spvsTab[] = $item->getId();
  8359.             }
  8360.         }
  8361.         $result = $this->em->getRepository(Project::class)->checkProjectAccess($user,$project,$spvsTab);
  8362.         return $result;
  8363.     }
  8364. }