src/Twig/AppExtension.php line 82

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