src/Twig/AppExtension.php line 78

Open in your IDE?
  1. <?php
  2. namespace App\Twig;
  3. use App\Entity\Avoir;
  4. use App\Entity\AvoirFactureFinance;
  5. use App\Entity\AvoirMontantTvaProject;
  6. use App\Entity\CommentEtap;
  7. use App\Entity\EfacData;
  8. use App\Entity\Entreprise;
  9. use App\Entity\EquipementCommandeProduitPrixDetail;
  10. use App\Entity\EquipementFournisseur;
  11. use App\Entity\Etap14;
  12. use App\Entity\Etap171;
  13. use App\Entity\Etap172;
  14. use App\Entity\Etap173;
  15. use App\Entity\Etap174;
  16. use App\Entity\Etap175;
  17. use App\Entity\Etaps;
  18. use App\Entity\EtapsCategory;
  19. use App\Entity\FactureFinance;
  20. use App\Entity\FactureFinanceMontantTvaProject;
  21. use App\Entity\FactureFinancePaiementDetail;
  22. use App\Entity\Fournisseur;
  23. use App\Entity\FournisseurProject;
  24. use App\Entity\HistoryFactureAvoir;
  25. use App\Entity\MeltdChamps;
  26. use App\Entity\ParametrageXlsProject;
  27. use App\Entity\Project;
  28. use App\Entity\Spv;
  29. use App\Entity\StatusTracker;
  30. use App\Entity\StatusTrackerConstruction;
  31. use App\Entity\TypologieProject;
  32. use App\Entity\User;
  33. use App\Entity\UserDroit;
  34. use App\Entity\UserDroitGlobal;
  35. use App\Entity\TypeValorisation;
  36. use App\Services\CompteRenduService;
  37. use App\Services\EquipementCommandeService;
  38. use App\Services\EtapsService;
  39. use App\Services\FactureFinanceService;
  40. use App\Services\FactureService;
  41. use App\Services\FournisseurService;
  42. use App\Services\Notifications;
  43. use App\Services\ProjectService;
  44. use App\Services\UploadService;
  45. use Twig\Extension\AbstractExtension;
  46. use Twig\TwigFilter;
  47. use Twig\TwigFunction;
  48. use Twig\Environment;
  49. use Doctrine\ORM\EntityManagerInterface;
  50. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  51. class AppExtension extends AbstractExtension
  52. {
  53.     private $twig;
  54.     private $params;
  55.     public function __construct(
  56.         Environment $twig,
  57.         EntityManagerInterface $em,
  58.         ParameterBagInterface $params,
  59.         EtapsService $etapsService,
  60.         Notifications $notifications,
  61.         ProjectService $projectService,
  62.         FactureFinanceService $factureFinanceService,
  63.         UploadService $uploadService,
  64.         FournisseurService $fournisseurService,
  65.         EquipementCommandeService $equipementCommandeService,
  66.         CompteRenduService $compteRenduService
  67.     ) {
  68.         $this->twig = $twig;
  69.         $this->em = $em;
  70.         $this->params = $params;
  71.         $this->etapsService = $etapsService;
  72.         $this->uploadService = $uploadService;
  73.         $this->notifications = $notifications;
  74.         $this->projectService = $projectService;
  75.         $this->factureFinanceService = $factureFinanceService;
  76.         $this->fournisseurService = $fournisseurService;
  77.         $this->equipementCommandeService = $equipementCommandeService;
  78.         $this->compteRenduService = $compteRenduService;
  79.     }
  80.     public function getFunctions()
  81.     {
  82.         return [
  83.             new TwigFunction('getEtapNameByNum', [$this, 'getEtapNameByNum']),
  84.             new TwigFunction('getTimelinePointEtapByNum', [$this, 'getTimelinePointEtapByNum']),
  85.             new TwigFunction('getCommentEtapByNum', [$this, 'getCommentEtapByNum']),
  86.             new TwigFunction('checkCommentEtapByNum', [$this, 'checkCommentEtapByNum']),
  87.             new TwigFunction('getEtapByNumAndProject', [$this, 'getEtapByNumAndProject']),
  88.             new TwigFunction('getNotisNotLu', [$this, 'getNotisNotLu']),
  89.             new TwigFunction('getSpvs', [$this, 'getSpvs']),
  90.             new TwigFunction('getEpcs', [$this, 'getEpcs']),
  91.             new TwigFunction('getUserByRoles', [$this, 'getUserByRoles']),
  92.             new TwigFunction('checkOpenEtap', [$this, 'checkOpenEtap']),
  93.             new TwigFunction('getDocsPartage', [$this, 'getDocsPartage']),
  94.             new TwigFunction('getAbreviation', [$this, 'getAbreviation']),
  95.             new TwigFunction('checkInformationProprietaireEtap6Raccordement', [$this, 'checkInformationProprietaireEtap6Raccordement']),
  96.             new TwigFunction('completudeCategory', [$this, 'completudeCategory']),
  97.             new TwigFunction('completudeDocsCategory', [$this, 'completudeDocsCategory']),
  98.             new TwigFunction('espaceNumber', [$this, 'espaceNumber']),
  99.             new TwigFunction('getDocUploadMultipleNotArchive', [$this, 'getDocUploadMultipleNotArchive']),
  100.             new TwigFunction('getDocUploadMultipleNotArchiveString', [$this, 'getDocUploadMultipleNotArchiveString']),
  101.             new TwigFunction('getDocUploadMultipleNotArchiveEntity', [$this, 'getDocUploadMultipleNotArchiveEntity']),
  102.             new TwigFunction('getDocUploadMultipleNotArchiveEntityImage', [$this, 'getDocUploadMultipleNotArchiveEntityImage']),
  103.             new TwigFunction('checkEtap3StatusFermee', [$this, 'checkEtap3StatusFermee']),
  104.             new TwigFunction('checkEtap3StatusName', [$this, 'checkEtap3StatusName']),
  105.             new TwigFunction('checkEtap3Status', [$this, 'checkEtap3Status']),
  106.             new TwigFunction('getDocsName', [$this, 'getDocsName']),
  107.             new TwigFunction('disabledOptionFileName', [$this, 'disabledOptionFileName']),
  108.             new TwigFunction('getAllFileNameTimeLine', [$this, 'getAllFileNameTimeLine']),
  109.             new TwigFunction('getAllFileNameTimeLineCategory', [$this, 'getAllFileNameTimeLineCategory']),
  110.             new TwigFunction('getAllFileNameTimeLineManyToMany', [$this, 'getAllFileNameTimeLineManyToMany']),
  111.             new TwigFunction('getAllFileNameTimeLineManyToMany2', [$this, 'getAllFileNameTimeLineManyToMany2']),
  112.             new TwigFunction('getAllFileNameFactureProject', [$this, 'getAllFileNameFactureProject']),
  113.             new TwigFunction('getAllFileNameAvoirProject', [$this, 'getAllFileNameAvoirProject']),
  114.             new TwigFunction('getHistoriqueAvoirFacture', [$this, 'getHistoriqueAvoirFacture']),
  115.             new TwigFunction('sommeValue', [$this, 'sommeValue']),
  116.             new TwigFunction('getAvoirByFacture', [$this, 'getAvoirByFacture']),
  117.             new TwigFunction('getfacturesByAvoir', [$this, 'getfacturesByAvoir']),
  118.             new TwigFunction('getMontantAvoirRestantByFacture', [$this, 'getMontantAvoirRestantByFacture']),
  119.             new TwigFunction('checkBailExpiree', [$this, 'checkBailExpiree']),
  120.             new TwigFunction('checkPCDPExpiree', [$this, 'checkPCDPExpiree']),
  121.             new TwigFunction('getEtapByProject', [$this, 'getEtapByProject']),
  122.             new TwigFunction('getStatusTrackerDates', [$this, 'getStatusTrackerDates']),
  123.             new TwigFunction('checkT0Expiree', [$this, 'checkT0Expiree']),
  124.             new TwigFunction('checkBailExpireeTimeline', [$this, 'checkBailExpireeTimeline']),
  125.             new TwigFunction('checkAlertPcExpireeTimeline', [$this, 'checkAlertPcExpireeTimeline']),
  126.             new TwigFunction('checkAlertT0ExpireeTimeline', [$this, 'checkAlertT0ExpireeTimeline']),
  127.             new TwigFunction('getDevsRapport', [$this, 'getDevsRapport']),
  128.             new TwigFunction('getDevsRapportSortant', [$this, 'getDevsRapportSortant']),
  129.             new TwigFunction('getDevsRapportConstructionSortant', [$this, 'getDevsRapportConstructionSortant']),
  130.             new TwigFunction('getDevsRapportConstruction', [$this, 'getDevsRapportConstruction']),
  131.             new TwigFunction('getAncientStatut', [$this, 'getAncientStatut']),
  132.             new TwigFunction('getStatutDate', [$this, 'getStatutDate']),
  133.             new TwigFunction('getAncientStatutConstruction', [$this, 'getAncientStatutConstruction']),
  134.             new TwigFunction('getStatutDateConstruction', [$this, 'getStatutDateConstruction']),
  135.             new TwigFunction('getFournisseursActive', [$this, 'getFournisseursActive']),
  136.             new TwigFunction('getChampsUpdates', [$this, 'getChampsUpdates']),
  137.             new TwigFunction('getTimeComment', [$this, 'getTimeComment']),
  138.             new TwigFunction('getCommentsProject', [$this, 'getCommentsProject']),
  139.             new TwigFunction('getChampsExport', [$this, 'getChampsExport']),
  140.             new TwigFunction('getTypologie', [$this, 'getTypologie']),
  141.             new TwigFunction('getEtapsByCategory', [$this, 'getEtapsByCategory']),
  142.             new TwigFunction('getAllIntervenant', [$this, 'getAllIntervenant']),
  143.             new TwigFunction('getAllParentAndActiveColonneXls', [$this, 'getAllParentAndActiveColonneXls']),
  144.             new TwigFunction('checkEtapIntervenant', [$this, 'checkEtapIntervenant']),
  145.             new TwigFunction('checkResponsableInProject', [$this, 'checkResponsableInProject']),
  146.             new TwigFunction('checkResponsableFoncierInProject', [$this, 'checkResponsableFoncierInProject']),
  147.             new TwigFunction('checkResponsableDeveloppementInProject', [$this, 'checkResponsableDeveloppementInProject']),
  148.             new TwigFunction('checkConstructeurInProject', [$this, 'checkConstructeurInProject']),
  149.             new TwigFunction('getSuiviBudget', [$this, 'getSuiviBudget']),
  150.             new TwigFunction('checkEtapStatusColorByDoc', [$this, 'checkEtapStatusColorByDoc']),
  151.             new TwigFunction('checkEtapStatusColorByDocEtap4Construction', [$this, 'checkEtapStatusColorByDocEtap4Construction']),
  152.             new TwigFunction('checkEtapStatusColorByDocEtap3Construction', [$this, 'checkEtapStatusColorByDocEtap3Construction']),
  153.             new TwigFunction('getDoeListFile', [$this, 'getDoeListFile']),
  154.             new TwigFunction('getBailListFile', [$this, 'getBailListFile']),
  155.             new TwigFunction('getStatusDetailStr', [$this, 'getStatusDetailStr']),
  156.             new TwigFunction('getTemplateMeltdChampsUpdate', [$this, 'getTemplateMeltdChampsUpdate']),
  157.             new TwigFunction('getTemplateMeltdChampsUpdateForm', [$this, 'getTemplateMeltdChampsUpdateForm']),
  158.             new TwigFunction('getNameChampGlobale', [$this, 'getNameChampGlobale']),
  159.             new TwigFunction('checkCalvuisUpdate', [$this, 'checkCalvuisUpdate']),
  160.             new TwigFunction('getConstructeurProject', [$this, 'getConstructeurProject']),
  161.             new TwigFunction('getMontantFinalTtcFacture', [$this, 'getMontantFinalTtcFacture']),
  162.             new TwigFunction('getFournisseurIsNotaire', [$this, 'getFournisseurIsNotaire']),
  163.             new TwigFunction('checkFournisseurRibActive', [$this, 'checkFournisseurRibActive']),
  164.             new TwigFunction('checkAltareaFacture', [$this, 'checkAltareaFacture']),
  165.             new TwigFunction('checkCodeProjectFacture', [$this, 'checkCodeProjectFacture']),
  166.             new TwigFunction('checkAlertEtap1And2', [$this, 'checkAlertEtap1And2']),
  167.             new TwigFunction('getDateFichierFactureFinancePaiement', [$this, 'getDateFichierFactureFinancePaiement']),
  168.             new TwigFunction('checkDroitProfileExtern', [$this, 'checkDroitProfileExtern']),
  169.             new TwigFunction('getUserNotaire', [$this, 'getUserNotaire']),
  170.             new TwigFunction('getUserByTitreIntervenant', [$this, 'getUserByTitreIntervenant']),
  171.             new TwigFunction('getVisitesQuestionByQuestion', [$this, 'getVisitesQuestionByQuestion']),
  172.             new TwigFunction('getQuestionColor', [$this, 'getQuestionColor']),
  173.             new TwigFunction('checkNextQuestionVisiteCompteRendu', [$this, 'checkNextQuestionVisiteCompteRendu']),
  174.             new TwigFunction('checkPrevQuestionVisiteCompteRendu', [$this, 'checkPrevQuestionVisiteCompteRendu']),
  175.             new TwigFunction('findAllProjectActive', [$this, 'findAllProjectActive']),
  176.             new TwigFunction('getAllPhotosForCompteRendu', [$this, 'getAllPhotosForCompteRendu']),
  177.             new TwigFunction('getAllEtapsPhotosMultiple', [$this, 'getAllEtapsPhotosMultiple']),
  178.             new TwigFunction('getTypeValorisation', [$this, 'getTypeValorisation']),
  179.             new TwigFunction('getEntrepriseActive', [$this, 'getEntrepriseActive']),
  180.             new TwigFunction('getfournisseurEquipement', [$this, 'getfournisseurEquipement']),
  181.             new TwigFunction('getEquipementPalettesWithCommande', [$this, 'getEquipementPalettesWithCommande']),
  182.             new TwigFunction('getEquipementProduitCommande', [$this, 'getEquipementProduitCommande']),
  183.             new TwigFunction('getEquipementProduitSousCommande', [$this, 'getEquipementProduitSousCommande']),
  184.             new TwigFunction('getEquipementCommandeFile', [$this, 'getEquipementCommandeFile']),
  185.             new TwigFunction('getEquipementProduitTabSousCommande', [$this, 'getEquipementProduitTabSousCommande']),
  186.             new TwigFunction('getTabEquipementBylogisticionReferenceAndStatus', [$this, 'getTabEquipementBylogisticionReferenceAndStatus']),
  187.             new TwigFunction('getTabEquipementLogisticienByReference', [$this, 'getTabEquipementLogisticienByReference']),
  188.             new TwigFunction('getTabEquipementTotalByReference', [$this, 'getTabEquipementTotalByReference']),
  189.             new TwigFunction('document_types', [EfacData::class, 'getDocumentTypes']),
  190.             new TwigFunction('getProjectPriceService', [$this, 'getProjectPriceService']),
  191.         ];
  192.     }
  193.     public function getFilters()
  194.     {
  195.         return array(
  196.         );
  197.     }
  198.     public function getTabEquipementTotalByReference($referenceId){
  199.         $tab = $this->equipementCommandeService->getTabEquipementTotalByReference($referenceId);
  200.         return $tab ;
  201.     }
  202.     public function getTabEquipementLogisticienByReference($referenceId){
  203.         $tab = $this->equipementCommandeService->getTabEquipementLogisticienByReference($referenceId);
  204.         return $tab ;
  205.     }
  206.     public function getTabEquipementBylogisticionReferenceAndStatus($logisticienReference,$status){
  207.         $tab = $this->equipementCommandeService->getTabEquipementBylogisticionReferenceAndStatus($logisticienReference,$status);
  208.         return $tab ;
  209.     }
  210.     public function getEquipementProduitTabSousCommande($commande){
  211.         $tab = $this->equipementCommandeService->getEquipementProduitTabSousCommande($commande);
  212.         return $tab ;
  213.     }
  214.     public function getEquipementCommandeFile($commande){
  215.         $tab = $this->equipementCommandeService->getEquipementCommandeFile($commande);
  216.         return $tab ;
  217.     }
  218.     public function getEquipementProduitSousCommande($sousCommande){
  219.         $tab = $this->equipementCommandeService->getEquipementProduitSousCommande($sousCommande);
  220.         return $tab ;
  221.     }
  222.     public function getEquipementProduitCommande($commande){
  223.         $tab = $this->equipementCommandeService->getEquipementProduitCommande($commande);
  224.         return $tab ;
  225.     }
  226.     public function getEquipementPalettesWithCommande($commande){
  227.         $tab = $this->equipementCommandeService->getEquipementPalettesWithCommande($commande);
  228.         return $tab ;
  229.     }
  230.     public function getfournisseurEquipement(){
  231.         $fournisseurs = $this->em->getRepository(EquipementFournisseur::class)->findAll();
  232.         return $fournisseurs ;
  233.     }
  234.     public function getProjectPriceService($tvaFactureFinanceId,$projectId,$isAvoir = false){
  235.         if($isAvoir){
  236.             $factureFinanceMontantTvaProject = $this->em->getRepository(AvoirMontantTvaProject::class)->getMontantTvaProjectByIdTvaAndPorjectId($tvaFactureFinanceId,$projectId);
  237.         }else{
  238.             $factureFinanceMontantTvaProject = $this->em->getRepository(FactureFinanceMontantTvaProject::class)->getMontantTvaProjectByIdTvaAndPorjectId($tvaFactureFinanceId,$projectId);
  239.         }
  240.         return $factureFinanceMontantTvaProject;
  241.     }
  242.     public function getEntrepriseActive(){
  243.         $entreprises = $this->em->getRepository(Entreprise::class)->getAllActive();
  244.         return $entreprises ;
  245.     }
  246.     public function getAllPhotosForCompteRendu($project){
  247.         return  $this->compteRenduService->getAllPhotosForCompteRendu($project);
  248.     }
  249.     public function findAllProjectActive(){
  250.         return  $this->em->getRepository(Project::class)->findAllProjectActive();
  251.     }
  252.     public function checkNextQuestionVisiteCompteRendu($token){
  253.         return  $this->compteRenduService->checkIsNext($token);
  254.     }
  255.     public function checkPrevQuestionVisiteCompteRendu($token){
  256.         return  $this->compteRenduService->checkIsPrev($token);
  257.     }
  258.     public function getQuestionColor($question){
  259.         $vistesByQuestion = $this->compteRenduService->getQuestionColor($question);
  260.         return $vistesByQuestion;
  261.     }
  262.     public function getVisitesQuestionByQuestion($question){
  263.         $vistesByQuestion = $this->compteRenduService->getQuestionsByVisite($question);
  264.         return $vistesByQuestion;
  265.     }
  266.     public function getUserByTitreIntervenant($titre){
  267.         $fournisseurs = $this->fournisseurService->getUserByTitreIntervenant($titre);
  268.         return $fournisseurs ;
  269.     }
  270.     public function getUserNotaire(){
  271.         $users = $this->fournisseurService->getUserNotaire();
  272.         return $users ;
  273.     }
  274.     public function checkFournisseurRibActive($fournisseur){
  275.         $montant = $this->fournisseurService->checkFournisseurRibActive($fournisseur);
  276.         return $montant ;
  277.     }
  278.     public function checkAltareaFacture($facture){
  279.         $montant = $this->factureFinanceService->checkAltareaFacture($facture);
  280.         return $montant ;
  281.     }
  282.     public function checkCodeProjectFacture($facture){
  283.         $data = $this->factureFinanceService->checkFactureFinanceCodeProject($facture);
  284.         return $data ;
  285.     }
  286.     public function getMontantFinalTtcFacture($facture){
  287.         $montant = $this->factureFinanceService->getMontantFinalTtcFacture($facture);
  288.         return $montant ;
  289.     }
  290.     public function getFournisseurIsNotaire($user){
  291.         $fournissueur = $this->em->getRepository(Fournisseur::class)->findOneBy(['user'=>$user->getId()]);
  292.         return $fournissueur ? $fournissueur->getIsNotaire() :false;
  293.     }
  294.     public function getConstructeurProject(){
  295.         $constructeurProject = $this->em->getRepository(FournisseurProject::class)->getConstructeurProject();
  296.         return $constructeurProject ;
  297.     }
  298.     public function checkCalvuisUpdate($project){
  299.         $champs = $this->em->getRepository(MeltdChamps::class)->getNotValideByProject($project);
  300.         return $champs ;
  301.     }
  302.     public function getNameChampGlobale($meltedId){
  303.        $name = $this->projectService->getNameChampGlobale($meltedId);
  304.        return $name ;
  305.     }
  306.     public function getTemplateMeltdChampsUpdate($project,$etap,$champName,$user,$isEtap = 1){
  307.         if(in_array($user->getTypeAcces(),[User::ACCES_intervenant,User::ACCES_visiteur,User::ACCES_comptable])){
  308.             $arrays = $this->em->getRepository(UserDroitGlobal::class)->getByUserAndChamp($user->getId(),'isUploadDoc');
  309.             if(!$arrays){
  310.                 return 'disabled';
  311.             }
  312.         }
  313.         if($isEtap){
  314.             $melted = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project'=>$project->getId(),'numEtap'=>$etap->getEtap()->getNum(),'champName'=>$champName]);
  315.         }else{
  316.             $melted = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project'=>$project->getId(),'champName'=>$champName,'isProject'=>true]);
  317.         }
  318.         if($melted && (in_array('ROLE_SUPER_ADMINISTRATOR',$user->getRoles()) || in_array('ROLE_ADMIN',$user->getRoles()) || in_array('ROLE_ADMINISTRATEUR_FINANCIER',$user->getRoles()))){
  319.             return $this->twig->render('user/etaps/tooltip-champs-border.html.twig', [
  320.                 'melted' => $melted
  321.             ]);
  322.         }else {
  323.             return '';
  324.         }
  325.     }
  326.     public function getTemplateMeltdChampsUpdateForm($project,$etap,$champName,$user,$isEtap = 1){
  327.         if($isEtap){
  328.             $melted = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project'=>$project->getId(),'numEtap'=>$etap->getEtap()->getNum(),'champName'=>$champName]);
  329.         }else{
  330.             $melted = $this->em->getRepository(MeltdChamps::class)->findOneBy(['project'=>$project->getId(),'champName'=>$champName,'isProject'=>true]);
  331.         }
  332.         if($melted && (in_array('ROLE_SUPER_ADMINISTRATOR',$user->getRoles()) || in_array('ROLE_ADMIN',$user->getRoles()) || in_array('ROLE_ADMINISTRATEUR_FINANCIER',$user->getRoles()))){
  333.             return $this->twig->render('user/etaps/tooltip-champs-form.html.twig', [
  334.                 'melted' => $melted
  335.             ]);
  336.         }else {
  337.             return '';
  338.         }
  339.     }
  340.     public function getStatusDetailStr($project,$cat){
  341.         return $this->etapsService->getStatusDetailStr($project,$cat);
  342.     }
  343.     public function getDoeListFile($project){
  344.         return $this->projectService->getDoeListFile($project);
  345.     }
  346.     public function getBailListFile($project){
  347.         return $this->projectService->getBailListFile($project);
  348.     }
  349.     public function checkEtapStatusColorByDocEtap4Construction($project){
  350.         return $this->etapsService->checkEtapStatusColorByDocEtap4Construction($project);
  351.     }
  352.     public function checkEtapStatusColorByDocEtap3Construction($project){
  353.         return $this->etapsService->checkEtapStatusColorByDocEtap3Construction($project);
  354.     }
  355.     public function checkEtapStatusColorByDoc($etap){
  356.         return $this->etapsService->checkEtapStatusColorByDoc($etap);
  357.     }
  358.     public function getSuiviBudget($project){
  359.         $tab = $this->projectService->getTabFacturationParProject($project);
  360.         return $tab;
  361.     }
  362.     public function checkResponsableFoncierInProject($responsableUser,$project){
  363.         $arrays = $project->getResponsableFoncierUser();
  364.         foreach ($arrays as $item){
  365.             $responsable = $item->getResponsable();
  366.             if($responsable == $responsableUser){
  367.                 return true;
  368.                 break;
  369.             }
  370.         }
  371.         return false;
  372.     }
  373.     public function checkResponsableInProject($responsableUser,$project){
  374.         $arrays = $project->getResponsableUser();
  375.         foreach ($arrays as $item){
  376.             $responsable = $item->getResponsable();
  377.             if($responsable == $responsableUser){
  378.                 return true;
  379.                 break;
  380.             }
  381.         }
  382.         return false;
  383.     }
  384.     public function checkResponsableDeveloppementInProject($responsableUser,$project){
  385.         $arrays = $project->getResponsableDeveloppement();
  386.         foreach ($arrays as $item){
  387.             $responsable = $item->getResponsable();
  388.             if($responsable == $responsableUser){
  389.                 return true;
  390.                 break;
  391.             }
  392.         }
  393.         return false;
  394.     }
  395.     public function checkConstructeurInProject($constructeurUser,$project){
  396.         $arrays = $project->getConstructeurUser();
  397.         foreach ($arrays as $item){
  398.             $constructeur = $item->getConstructeur();
  399.             if($constructeur == $constructeurUser){
  400.                 return true;
  401.                 break;
  402.             }
  403.         }
  404.         return false;
  405.     }
  406.     public function checkEtapIntervenant($etapNum,$user){
  407.         $arrays = $this->em->getRepository(UserDroit::class)->getByEtapNumUser($etapNum,$user->getId());
  408.         return $arrays;
  409.     }
  410.     public function checkDroitProfileExtern($user,$champ){
  411.         if(in_array($user->getTypeAcces(),[User::ACCES_intervenant,User::ACCES_visiteur,User::ACCES_comptable])){
  412.             $arrays = $this->em->getRepository(UserDroitGlobal::class)->getByUserAndChamp($user->getId(),$champ);
  413.             return $arrays;
  414.         }else{
  415.             return true;
  416.         }
  417.     }
  418.     public function getAllParentAndActiveColonneXls($parentId){
  419.         $arrays = $this->em->getRepository(ParametrageXlsProject::class)->getAllParentAndActive($parentId);
  420.         return $arrays;
  421.     }
  422.     public function getAllIntervenant(){
  423.         $arrays = $this->em->getRepository(User::class)->getIntervenants();
  424.         return $arrays;
  425.     }
  426.     public function getEtapsByCategory($categoryNum,$isNewConstruction){
  427.         $arrays = $this->em->getRepository(Etaps::class)->getEtapsByCategory($categoryNum,$isNewConstruction);
  428.         return $arrays;
  429.     }
  430.     public function getTypologie(){
  431.         $arrays = $this->em->getRepository(TypologieProject::class)->findAll();
  432.         return $arrays;
  433.     }
  434.     public function getCommentsProject($project){
  435.         $arrays = $this->projectService->getCommentsProject($project);
  436.         return $arrays;
  437.     }
  438.     public function getTimeComment($dateTime){
  439.         $str = $this->projectService->getTimeComment($dateTime);
  440.         return $str;
  441.     }
  442.     public function getChampsUpdates(){
  443.         $array = $this->etapsService->getChampsUpdates();
  444.         return $array;
  445.     }
  446.     public function getChampsExport(){
  447.         $array = $this->etapsService->getChampsExport();
  448.         return $array;
  449.     }
  450.     public function getFournisseursActive(){
  451.         $fournisseurs = $this->em->getRepository(Fournisseur::class)->findAllActive();
  452.         return $fournisseurs;
  453.     }
  454.     public function getAncientStatut($project,$date,$date2,$isNew=1){
  455.         if($isNew == 1){
  456.             $statusTrackers = $this->em->getRepository(StatusTracker::class)->getNewStatut($date,$date2,$project->getId());
  457.             if($statusTrackers){
  458.                 if(count($statusTrackers)>=1){
  459.                     return isset($statusTrackers[0]) ? $this->projectService->getStatusTrackerStr($statusTrackers[0]->getStatus()): '-';
  460.                 }
  461.             }
  462.         }else{
  463.             $statusTrackers = $this->em->getRepository(StatusTracker::class)->getAncientStatut($date,$project->getId());
  464.             if($statusTrackers){
  465.                 if(count($statusTrackers)>0){
  466.                     return isset($statusTrackers[0]) ? $this->projectService->getStatusTrackerStr($statusTrackers[0]->getStatus()): '-';
  467.                 }
  468.             }
  469.         }
  470.         return '-';
  471.     }
  472.     public function getStatutDate($project,$date){
  473.         $statusTrackers = $this->em->getRepository(StatusTracker::class)->getAncientStatut($date,$project->getId());
  474.         if($statusTrackers){
  475.             if(count($statusTrackers)>0){
  476.                 return $statusTrackers[0];
  477.             }
  478.         }
  479.         return false;
  480.     }
  481.     public function getDevsRapportSortant($projects,$status){
  482.         $array = [];
  483.         if($projects){
  484.             foreach ($projects as $statusTracker){
  485.                 if($statusTracker->getProject()->getDeveloppeur()){
  486.                     if($status >= $statusTracker->getStatus() ){
  487.                         $array[$statusTracker->getProject()->getDeveloppeur()->getId()]['projects']['moins'][] = $statusTracker->getProject() ;
  488.                     }else {
  489.                         $array[$statusTracker->getProject()->getDeveloppeur()->getId()]['projects']['plus'][] = $statusTracker->getProject() ;
  490.                     }
  491.                     $array[$statusTracker->getProject()->getDeveloppeur()->getId()]['developeur'] = $statusTracker->getProject()->getDeveloppeur()? $statusTracker->getProject()->getDeveloppeur()->getFirstname().' '.$statusTracker->getProject()->getDeveloppeur()->getLastname(): null ;
  492.                     $array[$statusTracker->getProject()->getDeveloppeur()->getId()]['coulour'] = $statusTracker->getProject()->getDeveloppeur()? $statusTracker->getProject()->getDeveloppeur()->getCouleurRapport(): null ;
  493.                 }else{
  494.                   $array['notDev']['notDev'][] = $statusTracker->getProject() ;
  495.                   $array['notDev']['coulour'] = null ;
  496.                 }
  497.             }
  498.         }
  499.         return $array ;
  500.     }
  501.     public function getDevsRapport($projects){
  502.         $array = [];
  503.         if($projects){
  504.             foreach ($projects as $project){
  505.                 if($project->getDeveloppeur()){
  506.                     $array[$project->getDeveloppeur()->getId()]['projects'][] = $project ;
  507.                     $array[$project->getDeveloppeur()->getId()]['developeur'] = $project->getDeveloppeur()? $project->getDeveloppeur()->getFirstname().' '.$project->getDeveloppeur()->getLastname(): null ;
  508.                     $array[$project->getDeveloppeur()->getId()]['coulour'] = $project->getDeveloppeur()? $project->getDeveloppeur()->getCouleurRapport(): null ;
  509.                 }else{
  510.                     $array['notDev']['notDev'][] = $project ;
  511.                     $array['notDev']['coulour'] = null ;
  512.                 }
  513.             }
  514.         }
  515.         if($array) {
  516.             foreach ($array as &$item) {
  517.                 if (isset($item['projects'])) {
  518.                     $item['pourcentage'] = count($item['projects'])/count($projects) * 100;
  519.                 }elseif(isset($item['notDev'])){
  520.                     $item['pourcentage'] = count($item['notDev'])/count($projects) * 100;
  521.                 }
  522.             }
  523.         }
  524.         $pourcentage = array_column($array, 'pourcentage');
  525.         array_multisort($pourcentage, SORT_DESC, $array);
  526.         return $array ;
  527.     }
  528.     public function getDevsRapportConstructionSortant($projects,$status){
  529.         $array = [];
  530.         if($projects){
  531.             foreach ($projects as $statusTracker){
  532.                 if($statusTracker->getProject()->getResponsableUser() && count($statusTracker->getProject()->getResponsableUser())){
  533.                     $responsable0 = $statusTracker->getProject()->getResponsableUser()[0];
  534.                     if($status >= $statusTracker->getStatus() ){
  535.                         $array[$responsable0->getResponsable()->getId()]['projects']['moins'][] = $statusTracker->getProject() ;
  536.                     }else {
  537.                         $array[$responsable0->getResponsable()->getId()]['projects']['plus'][] = $statusTracker->getProject() ;
  538.                     }
  539.                     foreach ($statusTracker->getProject()->getResponsableUser() as $responsable){
  540.                         $array[$responsable0->getResponsable()->getId()]['responsableConstruction'][] =  $responsable->getResponsable()->getFirstname().' '.$responsable->getResponsable()->getLastname() ;
  541.                     }
  542.                     $array[$responsable0->getResponsable()->getId()]['coulour'] = $responsable0 ? $responsable0->getResponsable()->getCouleurRapport(): null ;
  543.                 }else{
  544.                     $array['notDev']['notDev'][] = $statusTracker->getProject() ;
  545.                     $array['notDev']['coulour'] = null ;
  546.                 }
  547.             }
  548.         }
  549.         return $array ;
  550.     }
  551.     public function getDevsRapportConstruction($projects){
  552.         $array = [];
  553.         if($projects){
  554.             foreach ($projects as $project){
  555.                 if($project->getResponsableUser() && count($project->getResponsableUser())>0){
  556.                     $responsable0 = $project->getResponsableUser()[0];
  557.                     $array[$responsable0->getResponsable()->getId()]['projects'][] = $project ;
  558.                     foreach ($project->getResponsableUser() as $responsable){
  559.                         $array[$responsable0->getResponsable()->getId()]['responsableConstruction'][] =  $responsable->getResponsable()->getFirstname().' '.$responsable->getResponsable()->getLastname() ;
  560.                     }
  561.                     $array[$responsable0->getResponsable()->getId()]['coulour'] = $responsable0 ? $responsable0->getResponsable()->getCouleurRapport(): null ;
  562.                 }else{
  563.                     $array['notDev']['notDev'][] = $project ;
  564.                     $array['notDev']['coulour'] = null ;
  565.                 }
  566.             }
  567.         }
  568.         if($array) {
  569.             foreach ($array as &$item) {
  570.                 if (isset($item['projects'])) {
  571.                     $item['pourcentage'] = count($item['projects'])/count($projects) * 100;
  572.                 }elseif(isset($item['notDev'])){
  573.                     $item['pourcentage'] = count($item['notDev'])/count($projects) * 100;
  574.                 }
  575.             }
  576.         }
  577.         $pourcentage = array_column($array, 'pourcentage');
  578.         array_multisort($pourcentage, SORT_DESC, $array);
  579.         return $array ;
  580.     }
  581.     public function getAncientStatutConstruction($project,$date,$date2,$isNew=1){
  582.         if($isNew == 1){
  583.             $statusTrackers = $this->em->getRepository(StatusTrackerConstruction::class)->getNewStatut($date,$date2,$project->getId());
  584.             if($statusTrackers){
  585.                 if(count($statusTrackers)>=1){
  586.                     return isset($statusTrackers[0]) ? $this->projectService->getStatusTrackerConstructionStr($statusTrackers[0]->getStatus()): '-';
  587.                 }
  588.             }
  589.         }else{
  590.             $statusTrackers = $this->em->getRepository(StatusTrackerConstruction::class)->getAncientStatut($date,$project->getId());
  591.             if($statusTrackers){
  592.                 if(count($statusTrackers)>0){
  593.                     return isset($statusTrackers[0]) ? $this->projectService->getStatusTrackerConstructionStr($statusTrackers[0]->getStatus()): '-';
  594.                 }
  595.             }
  596.         }
  597.         return '-';
  598.     }
  599.     public function getStatutDateConstruction($project,$date){
  600.         $statusTrackers = $this->em->getRepository(StatusTrackerConstruction::class)->getAncientStatut($date,$project->getId());
  601.         if($statusTrackers){
  602.             if(count($statusTrackers)>0){
  603.                 return $statusTrackers[0];
  604.             }
  605.         }
  606.         return false;
  607.     }
  608.     public function getEtapByProject($project,$etapNum){
  609.         $etapEntityClass = 'App\\Entity\\Etap' . $etapNum;
  610.         $etapEntity = $this->em->getRepository($etapEntityClass)->findOneBy(['project' => $project->getId()]);
  611.         return $etapEntity ;
  612.     }
  613.     /**
  614.      * Retourne un tableau [status => date d'entrée réelle la plus ancienne] Ã  partir de l'historique statusTracker du projet.
  615.      * Utilisé par le panneau "Calendrier" du détail projet.
  616.      */
  617.     public function getStatusTrackerDates($project){
  618.         $dates = [];
  619.         if($project){
  620.             foreach ($project->getStatusTracker() as $statusTracker){
  621.                 $status = $statusTracker->getStatus();
  622.                 if($status === null || $status === ''){
  623.                     continue;
  624.                 }
  625.                 $status = (int)$status;
  626.                 $createdAt = $statusTracker->getCreatedAt();
  627.                 if($createdAt === null){
  628.                     continue;
  629.                 }
  630.                 if(!isset($dates[$status]) || $createdAt < $dates[$status]){
  631.                     $dates[$status] = $createdAt;
  632.                 }
  633.             }
  634.         }
  635.         return $dates;
  636.     }
  637.     public function getAllEtapsPhotosMultiple($project){
  638.         $photos = [];
  639.         $etapsDone = [];
  640.         $etaps = $this->em->getRepository(Etaps::class)->findAll();
  641.         foreach ($etaps as $etapDef){
  642.             $num = $etapDef->getNum();
  643.             if(isset($etapsDone[$num])){
  644.                 continue;
  645.             }
  646.             $etapsDone[$num] = true;
  647.             $etapEntityClass = 'App\\Entity\\Etap' . $num;
  648.             if(!class_exists($etapEntityClass)){
  649.                 continue;
  650.             }
  651.             $etapEntity = $this->em->getRepository($etapEntityClass)->findOneBy(['project' => $project->getId()]);
  652.             if($etapEntity && method_exists($etapEntity, 'getFilePhotosMultiple')){
  653.                 foreach ($etapEntity->getFilePhotosMultiple() as $doc){
  654.                     if(!$doc->getIsArchived() && $this->checkIfInArrayString(['.png', '.jpg', '.jpeg', 'heic'], strtolower($doc->getPath()))){
  655.                         $photos[] = $doc;
  656.                     }
  657.                 }
  658.             }
  659.         }
  660.         return $photos;
  661.     }
  662.     public function getMontantAvoirRestantByFacture($facture){
  663.         $mantantTotalAvoir = 0;
  664.         $mantantTotalAvoirRestant = 0;
  665.         if($facture){
  666.             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  667.             $mantantFacture = (float)(str_replace(',','.',$facture->getMonatantTtc()));
  668.             if($avoirs){
  669.                 foreach ($avoirs as $avoir){
  670.                     if($avoir->getMonatantAvoirTtc()){
  671.                         $mantantTotalAvoir += (float)(str_replace(',','.',$avoir->getMonatantAvoirTtc()));
  672.                     }else{
  673.                         $mantantTotalAvoir += 0;
  674.                     }
  675.                 }
  676.             }
  677.             if($mantantFacture >= $mantantTotalAvoir){
  678.                 $mantantTotalAvoirRestant = 0;
  679.             }else{
  680.                 $mantantTotalAvoirRestant = $mantantTotalAvoir - $mantantFacture;
  681.             }
  682.         }
  683.         return $mantantTotalAvoirRestant;
  684.     }
  685.     public function getAvoirByFacture($facture){
  686.         $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  687.         return $avoirs;
  688.     }
  689.     public function getfacturesByAvoir($avoir){
  690.         $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir'=>$avoir->getId()]);
  691.         return $avoirs;
  692.     }
  693.     public function sommeValue($val1,$val2){
  694.         $val1 = (float)(str_replace(',','.',$val1));
  695.         $val2 = (float)(str_replace(',','.',$val2));
  696.         return $val1 + $val2;
  697.     }
  698.     public function getHistoriqueAvoirFacture($avoir=null,$facture=null){
  699.         $array = null;
  700.         if($avoir){
  701.             $array = $this->em->getRepository(HistoryFactureAvoir::class)->findBy(['avoir'=>$avoir->getId()],['id'=>'desc']);
  702.         }elseif($facture){
  703.             $array = $this->em->getRepository(HistoryFactureAvoir::class)->findBy(['factureFinance'=>$facture->getId()],['id'=>'desc']);
  704.         }
  705.         return $array;
  706.     }
  707.     public function checkBailExpireeTimeline($project){
  708.         $rep = $this->notifications->getAlertBailTimeline($project);
  709.         return $rep;
  710.     }
  711.     public function checkAlertPcExpireeTimeline($project){
  712.         $rep = $this->notifications->getAlertPcTimeline($project);
  713.         return $rep;
  714.     }
  715.     public function checkAlertT0ExpireeTimeline($project){
  716.         $rep = $this->notifications->getAlertT0Timeline($project);
  717.         return $rep;
  718.     }
  719.     public function checkBailExpiree($project){
  720.         $rep = $this->notifications->getAlertBail($project);
  721.         return $rep;
  722.     }
  723.     public function checkPCDPExpiree($project){
  724.         $rep = $this->notifications->getAlertPc($project);
  725.         return $rep;
  726.     }
  727.     public function checkAlertEtap1And2($project){
  728.         $rep = $this->etapsService->getAlertsEtap1AndEtap2($project);
  729.         return $rep;
  730.     }
  731.     public function checkT0Expiree($project){
  732.         $rep = $this->notifications->getAlertT0($project);
  733.         return $rep;
  734.     }
  735.     public function disabledOptionFileName($project,$fileNameInput,$etapNum){
  736.         $etapNum = $etapNum;
  737.         $fileName = $fileNameInput;
  738.         $etapClass = 'App\\Entity\\Etap'.$etapNum;
  739.         $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  740.         $isNotEmpty = false;
  741.         if($etap){
  742.             $classMetadata = $this->em->getClassMetadata($etapClass);
  743.             $associationMappings = $classMetadata->getAssociationMapping($fileName);
  744.             if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  745.                 $nameGeteurFiled = 'get'.ucfirst($fileName);
  746.                 $filedValue = $etap->{$nameGeteurFiled}();
  747.                 if(!$filedValue->isEmpty()){
  748.                     if($fileName == 'fileCrdSigneeMultiple'){
  749.                         foreach ($filedValue as $item){
  750.                             if($item->getIsArchived()){
  751.                             }else{
  752.                                 $isNotEmpty = true;
  753.                             }
  754.                         }
  755.                         $filedValue2 = $etap->getFileCrdSigneeSansPtfMultiple();
  756.                         if(!$filedValue2->isEmpty()) {
  757.                             foreach ($filedValue2 as $item) {
  758.                                 if ($item->getIsArchived()) {
  759.                                 } else {
  760.                                     $isNotEmpty = true;
  761.                                 }
  762.                             }
  763.                         }
  764.                     }elseif ($fileName == 'fileCrdSigneeSansPtfMultiple'){
  765.                         foreach ($filedValue as $item){
  766.                             if($item->getIsArchived()){
  767.                             }else{
  768.                                 $isNotEmpty = true;
  769.                             }
  770.                         }
  771.                         $filedValue2 = $etap->getFileCrdSigneeMultiple();
  772.                         if(!$filedValue2->isEmpty()){
  773.                             foreach ($filedValue2 as $item){
  774.                                 if($item->getIsArchived()){
  775.                                 }else{
  776.                                     $isNotEmpty = true;
  777.                                 }
  778.                             }
  779.                         }
  780.                     }
  781.                     else{
  782.                         foreach ($filedValue as $item){
  783.                             if($item->getIsArchived()){
  784.                             }else{
  785.                                 $isNotEmpty = true;
  786.                             }
  787.                         }
  788.                     }
  789.                 }
  790.             }else{
  791.                 $nameGeteurFiled = 'get'.ucfirst($fileName);
  792.                 $filedValue = $etap->{$nameGeteurFiled}();
  793.                 if($filedValue){
  794.                     $isNotEmpty = true;
  795.                 }
  796.             }
  797.         }
  798.         return $isNotEmpty;
  799.     }
  800.     public function getAllFileNameTimeLine($project,$fileNameInput,$etapNum){
  801.         $etapNum = $etapNum;
  802.         $fileName = $fileNameInput;
  803.         $etapClass = 'App\\Entity\\Etap'.$etapNum;
  804.         $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  805.         $targetEntity = 'App\Entity\DocUpload';
  806.         $file = [];
  807.         if($etap){
  808.             $classMetadata = $this->em->getClassMetadata($etapClass);
  809.             $associationMappings = $classMetadata->getAssociationMapping($fileName);
  810.             if($associationMappings['targetEntity'] === $targetEntity){
  811.                 if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  812.                     $nameGeteurFiled = 'get'.ucfirst($fileName);
  813. //                    if($etapNum == 10){
  814. //                        $condition = false;
  815. //                        if($etap->getIsPtf()){
  816. //                            if(in_array($fileName,['filePtfMultiple','fileCrdSigneeMultiple','filePreuveVirementMultiple'])){
  817. //                                $condition = true;
  818. //                            }
  819. //                        }else{
  820. //                            if(in_array($fileName,['fileCrdSigneeSansPtfMultiple','filePreuveVirementSansPtfMultiple'])){
  821. //                                $condition = true;
  822. //                            }
  823. //                        }
  824. //                        if($condition){
  825. //                            $filedValue = $etap->{$nameGeteurFiled}();
  826. //                            if(!$filedValue->isEmpty()){
  827. //                                foreach ($filedValue as $item){
  828. //                                    if($item->getIsArchived()){
  829. //
  830. //                                    }else{
  831. //                                        $file[] = $item;
  832. //                                    }
  833. //                                }
  834. //                            }
  835. //                        }
  836. //                    }else{
  837.                         $filedValue = $etap->{$nameGeteurFiled}();
  838.                         if(!$filedValue->isEmpty()){
  839.                             foreach ($filedValue as $item){
  840.                                 if($item->getIsArchived()){
  841.                                 }else{
  842.                                     $file[] = $item;
  843.                                 }
  844.                             }
  845.                         }
  846. //                    }
  847.                 }else{
  848.                     $nameGeteurFiled = 'get'.ucfirst($fileName);
  849.                     $filedValue = $etap->{$nameGeteurFiled}();
  850.                     if($filedValue){
  851.                         $file[] = $filedValue;
  852.                     }
  853.                 }
  854.             }
  855.         }
  856.         return $file;
  857.     }
  858.     public function getAllFileNameTimeLineCategory($project,$etapNum){
  859.         $etapNum = $etapNum;
  860.         $etapClass = 'App\\Entity\\Etap'.$etapNum;
  861.         $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  862.         $file = [];
  863.         $fileName = 'categorys';
  864.         if($etap){
  865.             $classMetadata = $this->em->getClassMetadata($etapClass);
  866.             $ssociationMappings = $classMetadata->getAssociationMappings();
  867.             if(array_key_exists('categorys',$ssociationMappings)){
  868.                 $associationMappings = $classMetadata->getAssociationMapping($fileName);
  869.                 if(isset($associationMappings['targetEntity']) && $associationMappings['targetEntity'] == 'App\Entity\CategoryDocument'){
  870.                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  871.                         $nameGeteurFiled = 'get'.ucfirst($fileName);
  872.                         $filedValueCat = $etap->{$nameGeteurFiled}();
  873.                         if(!$filedValueCat->isEmpty()){
  874.                             foreach ($filedValueCat as $item){
  875.                                 if(!$item->getDocuments()->isEmpty()){
  876.                                     foreach ($item->getDocuments() as $document){
  877.                                         $doc = $document->getDocUpload() ;
  878.                                         if($doc){
  879.                                             $file[] = $doc;
  880.                                         }
  881.                                     }
  882.                                 }
  883.                             }
  884.                         }
  885.                     }
  886.                 }
  887.             }
  888.         }
  889.         return $file;
  890.     }
  891.     public function getAllFileNameTimeLineManyToMany($project,$etapNum,$etapsFilesManyToManyName,$fileNameInput,$class){
  892.         $etapNum = $etapNum;
  893.         $etapClass = 'App\\Entity\\Etap'.$etapNum;
  894.         $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  895.         $file = [];
  896.         $fileName = $fileNameInput;
  897.         $targetEntity = 'App\Entity\DocUpload';
  898.         if($etap){
  899.             $classMetadata = $this->em->getClassMetadata($etapClass);
  900.             $ssociationMappings = $classMetadata->getAssociationMappings();
  901.             if(array_key_exists($etapsFilesManyToManyName,$ssociationMappings)){
  902.                 $associationMappings = $classMetadata->getAssociationMapping($etapsFilesManyToManyName);
  903.                 if(isset($associationMappings['targetEntity'])){
  904.                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  905.                         $nameGeteurFiled = 'get'.ucfirst($etapsFilesManyToManyName);
  906.                         $filedValueCat = $etap->{$nameGeteurFiled}();
  907.                         if(!$filedValueCat->isEmpty()){
  908.                             $etapClassDetail = 'App\\Entity\\'.$class;
  909.                             $classMetadataDetail = $this->em->getClassMetadata($etapClassDetail);
  910.                             $ssociationMappingsDetail = $classMetadataDetail->getAssociationMappings();
  911.                             if(array_key_exists($fileNameInput,$ssociationMappingsDetail)){
  912.                                 foreach ($filedValueCat as $item){
  913.                                     $associationMappingsDetail = $classMetadataDetail->getAssociationMapping($fileNameInput);
  914.                                     if($associationMappingsDetail['targetEntity'] === $targetEntity){
  915.                                         if ($associationMappingsDetail['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  916.                                             $nameGeteurFiledDetail = 'get'.ucfirst($fileName);
  917.                                             $filedValueDetail = $item->{$nameGeteurFiledDetail}();
  918.                                             if(!$filedValueDetail->isEmpty()){
  919.                                                 foreach ($filedValueDetail as $item2){
  920.                                                     if($item2->getIsArchived()){
  921.                                                     }else{
  922.                                                         $file[] = $item2;
  923.                                                     }
  924.                                                 }
  925.                                             }
  926.                                         }else{
  927.                                             $nameGeteurFiledDetail = 'get'.ucfirst($fileName);
  928.                                             $filedValueDetail = $item->{$nameGeteurFiledDetail}();
  929.                                             if($filedValueDetail){
  930.                                                 $file[] = $filedValueDetail;
  931.                                             }
  932.                                         }
  933.                                     }
  934.                                 }
  935.                             }
  936.                         }
  937.                     }
  938.                 }
  939.             }
  940.         }
  941.         return $file;
  942.     }
  943.     public function getAllFileNameTimeLineManyToMany2($project,$etapNum,$etapsFilesManyToManyName,$fileNameInput,$class,$etapsFilesManyToManyName2,$class2){
  944.         $etapNum = $etapNum;
  945.         $etapClass = 'App\\Entity\\Etap'.$etapNum;
  946.         $etap = $this->em->getRepository($etapClass)->findOneBy(['project'=>$project->getId()]);
  947.         $file = [];
  948.         $fileName = $fileNameInput;
  949.         $targetEntity = 'App\Entity\DocUpload';
  950.         if($etap){
  951.             $classMetadata = $this->em->getClassMetadata($etapClass);
  952.             $ssociationMappings = $classMetadata->getAssociationMappings();
  953.             if(array_key_exists($etapsFilesManyToManyName,$ssociationMappings)){
  954.                 $associationMappings = $classMetadata->getAssociationMapping($etapsFilesManyToManyName);
  955.                 if(isset($associationMappings['targetEntity'])){
  956.                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  957.                         $nameGeteurFiled = 'get'.ucfirst($etapsFilesManyToManyName);
  958.                         $filedValueCat = $etap->{$nameGeteurFiled}();
  959.                         if(!$filedValueCat->isEmpty()){
  960.                             $etapClassDetail = 'App\\Entity\\'.$class;
  961.                             $classMetadataDetail = $this->em->getClassMetadata($etapClassDetail);
  962.                             $ssociationMappingsDetail = $classMetadataDetail->getAssociationMappings();
  963.                             if(array_key_exists($etapsFilesManyToManyName2,$ssociationMappingsDetail)) {
  964.                                 foreach ($filedValueCat as $item1) {
  965.                                     $associationMappings2 = $classMetadataDetail->getAssociationMapping($etapsFilesManyToManyName2);
  966.                                     if (isset($associationMappings2['targetEntity'])) {
  967.                                         if ($associationMappings2['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY) {
  968.                                             $nameGeteurFiled2 = 'get' . ucfirst($etapsFilesManyToManyName2);
  969.                                             $filedValueCat2 = $item1->{$nameGeteurFiled2}();
  970.                                             if (!$filedValueCat2->isEmpty()) {
  971.                                                 $etapClassDetail2 = 'App\\Entity\\' . $class2;
  972.                                                 $classMetadataDetail2 = $this->em->getClassMetadata($etapClassDetail2);
  973.                                                 $ssociationMappingsDetail2 = $classMetadataDetail2->getAssociationMappings();
  974.                                                 if(array_key_exists($fileNameInput,$ssociationMappingsDetail2)){
  975.                                                     foreach ($filedValueCat2 as $item){
  976.                                                         $associationMappingsDetail2 = $classMetadataDetail2->getAssociationMapping($fileNameInput);
  977.                                                         if($associationMappingsDetail2['targetEntity'] === $targetEntity){
  978.                                                             if ($associationMappingsDetail2['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  979.                                                                 $nameGeteurFiledDetail = 'get'.ucfirst($fileName);
  980.                                                                 $filedValueDetail = $item->{$nameGeteurFiledDetail}();
  981.                                                                 if(!$filedValueDetail->isEmpty()){
  982.                                                                     foreach ($filedValueDetail as $item2){
  983.                                                                         if($item2->getIsArchived()){
  984.                                                                         }else{
  985.                                                                             $file[] = $item2;
  986.                                                                         }
  987.                                                                     }
  988.                                                                 }
  989.                                                             }else{
  990.                                                                 $nameGeteurFiledDetail = 'get'.ucfirst($fileName);
  991.                                                                 $filedValueDetail = $item->{$nameGeteurFiledDetail}();
  992.                                                                 if($filedValueDetail){
  993.                                                                     $file[] = $filedValueDetail;
  994.                                                                 }
  995.                                                             }
  996.                                                         }
  997.                                                     }
  998.                                                 }
  999.                                             }
  1000.                                         }
  1001.                                     }
  1002.                                 }
  1003.                             }
  1004.                         }
  1005.                     }
  1006.                 }
  1007.             }
  1008.         }
  1009.         return $file;
  1010.     }
  1011.     public function getAllFileNameFactureProject($project){
  1012.         $factures = $this->em->getRepository(FactureFinance::class)->getFacturesProject([$project->getId()]);
  1013.         $file = [];
  1014.         foreach ($factures as $facture){
  1015.             if($facture->getFileFacture()){
  1016.                 $file[] = $facture->getFileFacture();
  1017.             }
  1018.         }
  1019.         return $file;
  1020.     }
  1021.     public function getAllFileNameAvoirProject($project){
  1022.         $factures = $this->em->getRepository(Avoir::class)->getAvoirsProject([$project->getId()]);
  1023.         $file = [];
  1024.         foreach ($factures as $facture){
  1025.             if($facture->getFileAvoir()){
  1026.                 $file[] = $facture->getFileAvoir();
  1027.             }
  1028.         }
  1029.         return $file;
  1030.     }
  1031.     public function getDocsName($project = null){
  1032.         $docsName = $this->projectService->getDocsName($project);
  1033.         return $docsName;
  1034.     }
  1035.     public function checkEtap3StatusFermee($project){
  1036.         $etap171 = $this->em->getRepository(Etap171::class)->findOneBy(['project'=>$project->getId()]);
  1037.         $etap172 = $this->em->getRepository(Etap172::class)->findOneBy(['project'=>$project->getId()]);
  1038.         $etap173 = $this->em->getRepository(Etap173::class)->findOneBy(['project'=>$project->getId()]);
  1039.         $etap174 = $this->em->getRepository(Etap174::class)->findOneBy(['project'=>$project->getId()]);
  1040.         $etap175 = $this->em->getRepository(Etap175::class)->findOneBy(['project'=>$project->getId()]);
  1041.         if(($etap171 && $etap171->getStatus() == Etaps::STATUS_FERMEE)
  1042.             && ($etap172 && $etap172->getStatus() == Etaps::STATUS_FERMEE)
  1043.             && ($etap173 && $etap173->getStatus() == Etaps::STATUS_FERMEE)
  1044.             && ($etap174 && $etap174->getStatus() == Etaps::STATUS_FERMEE)
  1045.             && ($etap175 && $etap175->getStatus() == Etaps::STATUS_FERMEE)
  1046.         ){
  1047.             return true;
  1048.         }else{
  1049.             return false;
  1050.         }
  1051.     }
  1052.     public function checkEtap3Status($project){
  1053.         $etap171 = $this->em->getRepository(Etap171::class)->findOneBy(['project'=>$project->getId()]);
  1054.         $etap172 = $this->em->getRepository(Etap172::class)->findOneBy(['project'=>$project->getId()]);
  1055.         $etap173 = $this->em->getRepository(Etap173::class)->findOneBy(['project'=>$project->getId()]);
  1056.         $etap174 = $this->em->getRepository(Etap174::class)->findOneBy(['project'=>$project->getId()]);
  1057.         $etap175 = $this->em->getRepository(Etap175::class)->findOneBy(['project'=>$project->getId()]);
  1058.         if(($etap171 && $etap171->getStatus() == Etaps::STATUS_FERMEE)
  1059.             && ($etap172 && $etap172->getStatus() == Etaps::STATUS_FERMEE)
  1060.             && ($etap173 && $etap173->getStatus() == Etaps::STATUS_FERMEE)
  1061.             && ($etap174 && $etap174->getStatus() == Etaps::STATUS_FERMEE)
  1062.             && ($etap175 && $etap175->getStatus() == Etaps::STATUS_FERMEE)
  1063.         ){
  1064.             return Etaps::STATUS_FERMEE;
  1065.         }elseif(($etap171 && $etap171->getStatus() == Etaps::STATUS_VALIDE)
  1066.             && ($etap172 && $etap172->getStatus() == Etaps::STATUS_VALIDE)
  1067.             && ($etap173 && $etap173->getStatus() == Etaps::STATUS_VALIDE)
  1068.             && ($etap174 && $etap174->getStatus() == Etaps::STATUS_VALIDE)
  1069.             && ($etap175 && $etap175->getStatus() == Etaps::STATUS_VALIDE)
  1070.         ){
  1071.             return Etaps::STATUS_VALIDE;
  1072.         }elseif(($etap171 && in_array($etap171->getStatus() , [Etaps::STATUS_DEMANDE]))
  1073.             || ($etap172 && in_array($etap172->getStatus() , [Etaps::STATUS_DEMANDE]))
  1074.             || ($etap173 && in_array($etap173->getStatus() , [Etaps::STATUS_DEMANDE]))
  1075.             || ($etap174 && in_array($etap174->getStatus() , [Etaps::STATUS_DEMANDE]))
  1076.             || ($etap175 && in_array($etap175->getStatus() , [Etaps::STATUS_DEMANDE]))
  1077.         ){
  1078.             return Etaps::STATUS_DEMANDE;
  1079.         }elseif(($etap171 && in_array($etap171->getStatus() , [Etaps::STATUS_EN_ATTENT]))
  1080.             || ($etap172 && in_array($etap172->getStatus() , [Etaps::STATUS_EN_ATTENT]))
  1081.             || ($etap173 && in_array($etap173->getStatus() , [Etaps::STATUS_EN_ATTENT]))
  1082.             || ($etap174 && in_array($etap174->getStatus() , [Etaps::STATUS_EN_ATTENT]))
  1083.             || ($etap175 && in_array($etap175->getStatus() , [Etaps::STATUS_EN_ATTENT]))
  1084.         ){
  1085.             return Etaps::STATUS_EN_ATTENT;
  1086.         }elseif(($etap171 && in_array($etap171->getStatus() , [Etaps::STATUS_REFUSE]))
  1087.             || ($etap172 && in_array($etap172->getStatus() , [Etaps::STATUS_REFUSE]))
  1088.             || ($etap173 && in_array($etap173->getStatus() , [Etaps::STATUS_REFUSE]))
  1089.             || ($etap174 && in_array($etap174->getStatus() , [Etaps::STATUS_REFUSE]))
  1090.             || ($etap175 && in_array($etap175->getStatus() , [Etaps::STATUS_REFUSE]))
  1091.         ){
  1092.             return Etaps::STATUS_REFUSE;
  1093.         }
  1094.         elseif(($etap171 && in_array($etap171->getStatus() , [Etaps::STATUS_EN_COURS]))
  1095.             || ($etap172 && in_array($etap172->getStatus() , [Etaps::STATUS_EN_COURS]))
  1096.             || ($etap173 && in_array($etap173->getStatus() , [Etaps::STATUS_EN_COURS]))
  1097.             || ($etap174 && in_array($etap174->getStatus() , [Etaps::STATUS_EN_COURS]))
  1098.             || ($etap175 && in_array($etap175->getStatus() , [Etaps::STATUS_EN_COURS]))
  1099.         ){
  1100.             return Etaps::STATUS_EN_COURS;
  1101.         }else{
  1102.             return false;
  1103.         }
  1104.     }
  1105.     public function checkEtap3StatusName($project){
  1106.         $etap171 = $this->em->getRepository(Etap171::class)->findOneBy(['project'=>$project->getId()]);
  1107.         $etap172 = $this->em->getRepository(Etap172::class)->findOneBy(['project'=>$project->getId()]);
  1108.         $etap173 = $this->em->getRepository(Etap173::class)->findOneBy(['project'=>$project->getId()]);
  1109.         $etap174 = $this->em->getRepository(Etap174::class)->findOneBy(['project'=>$project->getId()]);
  1110.         $etap175 = $this->em->getRepository(Etap175::class)->findOneBy(['project'=>$project->getId()]);
  1111.         if(($etap171 && $etap171->getStatus() == Etaps::STATUS_EN_ATTENT)
  1112.             || ($etap172 && $etap172->getStatus() == Etaps::STATUS_EN_ATTENT)
  1113.             || ($etap173 && $etap173->getStatus() == Etaps::STATUS_EN_ATTENT)
  1114.             || ($etap174 && $etap174->getStatus() == Etaps::STATUS_EN_ATTENT)
  1115.             || ($etap175 && $etap175->getStatus() == Etaps::STATUS_EN_ATTENT)
  1116.         ){
  1117.             return 'En attente de validation';
  1118.         }elseif (($etap171 && $etap171->getStatus() == Etaps::STATUS_REFUSE)
  1119.             || ($etap172 && $etap172->getStatus() == Etaps::STATUS_REFUSE)
  1120.             || ($etap173 && $etap173->getStatus() == Etaps::STATUS_REFUSE)
  1121.             || ($etap174 && $etap174->getStatus() == Etaps::STATUS_REFUSE)
  1122.             || ($etap175 && $etap175->getStatus() == Etaps::STATUS_REFUSE)
  1123.         ){
  1124.            return 'L\'etape a Ã©té refusé';
  1125.         }elseif (($etap171 && $etap171->getStatus() == Etaps::STATUS_DEMANDE)
  1126.             || ($etap172 && $etap172->getStatus() == Etaps::STATUS_DEMANDE)
  1127.             || ($etap173 && $etap173->getStatus() == Etaps::STATUS_DEMANDE)
  1128.             || ($etap174 && $etap174->getStatus() == Etaps::STATUS_DEMANDE)
  1129.             || ($etap175 && $etap175->getStatus() == Etaps::STATUS_DEMANDE)
  1130.         ){
  1131.             return 'Demande de complément';
  1132.         }else{
  1133.             return false;
  1134.         }
  1135.     }
  1136.     public function getDocUploadMultipleNotArchiveEntity($array){
  1137.         $val = null;
  1138.         if(count($array)>0){
  1139.             foreach ($array as $value){
  1140.                 if(!$value->getIsArchived()){
  1141.                     $val =  $value;
  1142.                 }
  1143.             }
  1144.         }
  1145.         return $val;
  1146.     }
  1147.     public function getDocUploadMultipleNotArchiveEntityImage($array){
  1148.         $val = null;
  1149.         if(count($array)>0){
  1150.             foreach ($array as $value){
  1151.                 if(!$value->getIsArchived() and ($this->checkIfInArrayString(['.png', '.jpg','.jpeg','heic'],$value->getPath()))){
  1152.                     $val =  $value;
  1153.                 }
  1154.             }
  1155.         }
  1156.         return $val;
  1157.     }
  1158.     private function checkIfInArrayString($array, $searchingFor) {
  1159.         foreach ($array as $element) {
  1160.             if (strpos($searchingFor, $element) !== false) {
  1161.                 return true;
  1162.             }
  1163.         }
  1164.         return false;
  1165.     }
  1166.     public function getDocUploadMultipleNotArchive($array){
  1167.         $token = null;
  1168.         if(count($array)>0){
  1169.             foreach ($array as $value){
  1170.                 if(!$value->getIsArchived()){
  1171.                     $token =  $value->getToken();
  1172.                 }
  1173.             }
  1174.         }
  1175.         return $token;
  1176.     }
  1177.     public function getDocUploadMultipleNotArchiveString($array){
  1178.         $strTokens = '';
  1179.         if(count($array)>0){
  1180.             $lastArray = $array[count($array)-1];
  1181.             foreach ($array as $value){
  1182.                 if(!$value->getIsArchived()){
  1183.                     $strTokens .=  $value->getToken();
  1184.                     if($value->getId() != $lastArray->getId()){
  1185.                         $strTokens .= ',';
  1186.                     }
  1187.                 }
  1188.             }
  1189.         }
  1190.         return $strTokens;
  1191.     }
  1192.     public function espaceNumber($str,$chiffreApresVergule = 3){
  1193.         $formattedNumber = str_replace(',','.',$str);
  1194.         if($formattedNumber and is_numeric($formattedNumber)){
  1195.             if(strpos($formattedNumber,'.') or strpos($formattedNumber,',')){
  1196.                 if(strpos($formattedNumber,'.')){
  1197.                     $formattedNumber = number_format($formattedNumber, $chiffreApresVergule, '.', ' ');
  1198.                 }else{
  1199.                     $formattedNumber = number_format($formattedNumber, $chiffreApresVergule, ',', ' ');
  1200.                 }
  1201.             }else{
  1202.                 $formattedNumber = number_format($formattedNumber, 0, '0', ' ');
  1203.             }
  1204.         }
  1205.         return $formattedNumber;
  1206.     }
  1207.     public function checkInformationProprietaireEtap6Raccordement($project){
  1208.         $etap = $this->em->getRepository(Etap14::class)->findOneBy(['project'=>$project->getId()]);
  1209.         if($etap){
  1210.             if(!empty($etap->getAdresseMiseEnService()) or !empty($etap->getCityMiseEnService()) or !empty($etap->getCodePostalMiseEnService()) or !empty($etap->getFirstnameProprietaire()) or !empty($etap->getLastnameProprietaire()) or !empty($etap->getPhoneProprietaire()) ){
  1211.                 return true;
  1212.             }
  1213.         }
  1214.         return false;
  1215.     }
  1216.     public function getAbreviation($user=null){
  1217.         $name = '';
  1218.         $nameAB = 'X';
  1219.         $role = '';
  1220.         $entreprise = null;
  1221.         if($user){
  1222.             $name = ucwords((string)$user->getFirstname()).' '.ucwords((string)$user->getLastname());
  1223.             $role = $user->getRoleStringComplet();
  1224.             $entreprise = $user->getEntreprise() ? ucfirst($user->getEntreprise()->getName()) : null;
  1225.             $nameAB = substr((string)$user->getFirstname(), 0, 1) .substr((string)$user->getLastname(), 0, 1);
  1226.         }
  1227.         return ['entreprise'=>$entreprise,'role'=>$role,'name' => $name,'nameAB' => strtoupper($nameAB)];
  1228.     }
  1229.     public function getDocsPartage($project){
  1230.         $docs = $this->uploadService->getFilesPorjectPartage($project);
  1231.         return $docs ;
  1232.     }
  1233.     public function getEpcs($role){
  1234.         $users = $this->em->getRepository(User::class)->getUserByRole($role);
  1235.         return $users ;
  1236.     }
  1237.     public function getUserByRoles($roles){
  1238.         $users = $this->em->getRepository(User::class)->getUserByRoles($roles);
  1239.         return $users ;
  1240.     }
  1241.     public function checkOpenEtap($etap){
  1242.         if($etap) {
  1243.             if ($etap->getEtap()->getCategory()->getNum() == 1) {
  1244.                 if($etap->getProject()->getIsOpenCat1()){
  1245.                     return true;
  1246.                 }
  1247.             } elseif ($etap->getEtap()->getCategory()->getNum() == 2) {
  1248.                 if($etap->getProject()->getIsOpenCat2()){
  1249.                     return true;
  1250.                 }
  1251.             } elseif ($etap->getEtap()->getCategory()->getNum() == 3) {
  1252.                 if($etap->getProject()->getIsOpenCat3()){
  1253.                     return true;
  1254.                 }
  1255.             } elseif ($etap->getEtap()->getCategory()->getNum() == 4) {
  1256.                 if($etap->getProject()->getIsOpenCat4()){
  1257.                     return true;
  1258.                 }
  1259.             }
  1260.         }
  1261.         return false;
  1262.     }
  1263.     public function completudeCategory($project){
  1264.         $array = $this->etapsService->completudeValideEtapProject($project);
  1265.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  1266.         if(isset($array['category'])){
  1267.             return $this->twig->render('user/etaps/completude.html.twig', [
  1268.                 'completude' => $array,
  1269.                 'cats' => $cats,
  1270.             ]);
  1271.         }else{
  1272.             return [];
  1273.         }
  1274.     }
  1275.     public function completudeDocsCategory($project){
  1276.         $array = $this->etapsService->completudeValideDocumentEtapProject($project);
  1277.         $cats = $this->em->getRepository(EtapsCategory::class)->findAll();
  1278.         if(isset($array['category'])){
  1279.             return $this->twig->render('user/etaps/completudeDocs.html.twig', [
  1280.                 'completude' => $array,
  1281.                 'cats' => $cats,
  1282.                 'project' => $project,
  1283.             ]);
  1284.         }else{
  1285.             return [];
  1286.         }
  1287.     }
  1288.     public function getNotisNotLu($user){
  1289.         $notifs = $this->notifications->getNotifictionNotLu($user);
  1290.         return $notifs;
  1291.     }
  1292.     public function getSpvs(){
  1293.         $spvs = $this->em->getRepository(Spv::class)->getSpvEnabled();
  1294.         return $spvs;
  1295.     }
  1296.     public function getEtapNameByNum($num){
  1297.         $etap = $this->em->getRepository(Etaps::class)->findOneBy(['num'=>$num]);
  1298.         return $etap ? $etap->getName():' ';
  1299.     }
  1300.     public function getEtapByNumAndProject($num,$project){
  1301.         $etapEntity = 'App\\Entity\\Etap'.$num;
  1302.         if($project){
  1303.             $etap = $this->em->getRepository($etapEntity)->findOneBy(['project'=>$project->getId()]);
  1304.             return $etap ;
  1305.         }else{
  1306.             return null;
  1307.         }
  1308.     }
  1309.     public function getTimelinePointEtapByNum($project,$num,$etapCurrent){
  1310.         if(is_object($project)){
  1311.             $etapEntity = 'App\\Entity\\Etap'.$num;
  1312.             $etap = $this->em->getRepository($etapEntity)->findOneBy(['project'=>$project->getId()]);
  1313.             return $this->twig->render('user/etaps/timeline-point.html.twig', [
  1314.                 'etap' => $etap,
  1315.                 'etapCurrent' => $etapCurrent
  1316.             ]);
  1317.         }
  1318.         return ' ';
  1319.     }
  1320.     public function getCommentEtapByNum($project,$num){
  1321.         if(is_object($project)){
  1322.             $comments = $this->em->getRepository(CommentEtap::class)->findBy(['project'=>$project->getId(),'etapNum'=>$num]);
  1323.             $response = $this->twig->render('user/etaps/etapComment.html.twig',['comments'=>$comments,'multiple'=>true]);
  1324.             return $response;
  1325.         }
  1326.         return ' ';
  1327.     }
  1328.     public function checkCommentEtapByNum($project,$num){
  1329.         if(is_object($project)){
  1330.             $comments = $this->em->getRepository(CommentEtap::class)->findBy(['project'=>$project->getId(),'etapNum'=>$num]);
  1331.             if($comments){
  1332.                 return true;
  1333.             }
  1334.         }
  1335.         return false;
  1336.     }
  1337.     public function getDateFichierFactureFinancePaiement($factureFinancePaiment){
  1338.         if(is_object($factureFinancePaiment)){
  1339.             $details = $this->em->getRepository(FactureFinancePaiementDetail::class)->findBy(['factureFinancePaiement'=>$factureFinancePaiment->getId()]);
  1340.            if($details){
  1341.                $detail = $details[0];
  1342.                if($detail->getFactureFinance() && $detail->getFactureFinance()->getDatePaiementGenerateFichier()){
  1343.                    return $detail->getFactureFinance()->getDatePaiementGenerateFichier();
  1344.                }
  1345.            }
  1346.         }
  1347.         return null;
  1348.     }
  1349.     public function getTypeValorisation(){
  1350.         $typeValorisations = $this->em->getRepository(TypeValorisation::class)->findAll();
  1351.         return $typeValorisations;
  1352.     }
  1353. }