src/Repository/ProjectRepository.php line 307

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\DocUpload;
  4. use App\Entity\Etap14;
  5. use App\Entity\Etap15;
  6. use App\Entity\Etap160;
  7. use App\Entity\Etap17;
  8. use App\Entity\Etap21;
  9. use App\Entity\Etap24;
  10. use App\Entity\Etap5;
  11. use App\Entity\Etap6;
  12. use App\Entity\Etap8;
  13. use App\Entity\Etap1;
  14. use App\Entity\Etap2;
  15. use App\Entity\Etap3;
  16. use App\Entity\Etap4;
  17. use App\Entity\Etap7;
  18. use App\Entity\Etap9;
  19. use App\Entity\Etap10;
  20. use App\Entity\Etap11;
  21. use App\Entity\Etap12;
  22. use App\Entity\Etap13;
  23. use App\Entity\Etaps;
  24. use App\Entity\NumeroCardi;
  25. use App\Entity\ParametrageLoyer;
  26. use App\Entity\Project;
  27. use App\Entity\SolargisProject;
  28. use App\Entity\SolecoProject;
  29. use App\Entity\StatusFoncier;
  30. use App\Entity\StatusUrbanisme;
  31. use App\Entity\User;
  32. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  33. use Doctrine\Persistence\ManagerRegistry;
  34. use Symfony\Component\Security\Core\Security;
  35. /**
  36.  * @method Project|null find($id, $lockMode = null, $lockVersion = null)
  37.  * @method Project|null findOneBy(array $criteria, array $orderBy = null)
  38.  * @method Project[]    findAll()
  39.  * @method Project[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  40.  */
  41. class ProjectRepository extends ServiceEntityRepository
  42. {
  43.     public function __construct(ManagerRegistry $registry,Security $security)
  44.     {
  45.         $this->security = $security;
  46.         parent::__construct($registry, Project::class);
  47.     }
  48.     public function search($isArchive = false ,$status,$user,$data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
  49.         $qb =  $this->createQueryBuilder('c');
  50.         $query = isset($data['query']) && $data['query'] ? $data['query'] : null;
  51.         $spvProject = isset($data['spvProject']) && $data['spvProject'] ? $data['spvProject'] : null;
  52.         $statusAdministratifProject = isset($data['statusAdministratifProject']) && $data['statusAdministratifProject'] ? $data['statusAdministratifProject'] : null;
  53.         $statusTrackerProject = isset($data['statusTrackerProject']) && $data['statusTrackerProject'] ? $data['statusTrackerProject'] : null;
  54.         $achatLocation = isset($data['achatLocation']) && $data['achatLocation'] ? $data['achatLocation'] : null;
  55.         $stadeConstruction = isset($data['stadeConstruction']) && $data['stadeConstruction'] ? $data['stadeConstruction'] : null;
  56.         $typologieProject = isset($data['typologieProject']) && $data['typologieProject'] ? $data['typologieProject'] : null;
  57.         $statusUrbanisme = isset($data['statusUrbanisme']) && $data['statusUrbanisme'] ? $data['statusUrbanisme'] : null;
  58.         $statusFoncier1 = isset($data['statusFoncier1']) && $data['statusFoncier1'] ? $data['statusFoncier1'] : null;
  59.         $statusFoncier2 = isset($data['statusFoncier2']) && $data['statusFoncier2'] ? $data['statusFoncier2'] : null;
  60.         $statusFoncier3 = isset($data['statusFoncier3']) && $data['statusFoncier3'] ? $data['statusFoncier3'] : null;
  61.         $responsableProject = isset($data['responsableProject']) && $data['responsableProject'] ? $data['responsableProject'] : null;
  62.         $responsableFoncierProject = isset($data['responsableFoncierProject']) && $data['responsableFoncierProject'] ? $data['responsableFoncierProject'] : null;
  63.         $responsableDevProject = isset($data['responsableDevProject']) && $data['responsableDevProject'] ? $data['responsableDevProject'] : null;
  64.         $constructeurProject = isset($data['constructeurProject']) && $data['constructeurProject'] ? $data['constructeurProject'] : null;
  65.         $intervenantProject = isset($data['intervenantProject']) && $data['intervenantProject'] ? $data['intervenantProject'] : null;
  66.         $qb->leftJoin('c.familleProject','familleProject');
  67.         $qb->leftJoin('c.typologieProject','typologieProject');
  68.         $qb->leftJoin('c.typeBatimentProject','typeBatimentProject');
  69.         $qb->leftJoin(Etap5::class, 'etap5', 'WITH', 'etap5.project = c.id');
  70.         $qb->leftJoin(Etap6::class, 'etap6', 'WITH', 'etap6.project = c.id');
  71.         $qb->leftJoin(Etap8::class, 'etap8', 'WITH', 'etap8.project = c.id');
  72.         $qb->leftJoin(Etap10::class, 'etap10', 'WITH', 'etap10.project = c.id');
  73.         $qb->leftJoin(Etap14::class, 'etap14', 'WITH', 'etap14.project = c.id');
  74.         $qb->leftJoin(Etap15::class, 'etap15', 'WITH', 'etap15.project = c.id');
  75.         $qb->leftJoin(Etap12::class, 'etap12', 'WITH', 'etap12.project = c.id');
  76.         $qb->leftJoin('etap12.numeroCardiMultiple','numeroCardi');
  77.         $qb->leftJoin('etap15.informationMultiple','informationEtap15');
  78.         $qb->leftJoin(Etap24::class, 'etap24', 'WITH', 'etap24.project = c.id');
  79.         $qb->leftJoin('etap24.etap24Champs','etap24Champs');
  80.         $qb->leftJoin('etap24Champs.etap26Champs','etap26Champs');
  81.         $qb->leftJoin('c.fournisseurProject', 'fournisseurProject');
  82.         $constructeurEpcProject = isset($data['constructeurEpcProject']) && $data['constructeurEpcProject'] ? $data['constructeurEpcProject'] : null;
  83.         $constructeurInstallateurProject = isset($data['constructeurInstallateurProject']) && $data['constructeurInstallateurProject'] ? $data['constructeurInstallateurProject'] : null;
  84.         $constructeurCharpentierProject = isset($data['constructeurCharpentierProject']) && $data['constructeurCharpentierProject'] ? $data['constructeurCharpentierProject'] : null;
  85.         $constructeurNotaireProject = isset($data['constructeurNotaireProject']) && $data['constructeurNotaireProject'] ? $data['constructeurNotaireProject'] : null;
  86.         $entrepriseProject = isset($data['entrepriseProject']) && $data['entrepriseProject'] ? $data['entrepriseProject'] : null;
  87.         if($achatLocation && $achatLocation != 0){
  88.             if($achatLocation == Project::ACHAT){
  89.                 $qb->andWhere('c.achatLocation = :achatLocation')
  90.                     ->setParameter('achatLocation',$achatLocation);
  91.             }else{
  92.                 $qb->andWhere('(c.achatLocation = :achatLocation) or (c.achatLocation is null)')
  93.                     ->setParameter('achatLocation',Project::LOCATION);
  94.             }
  95.         }
  96.         if($entrepriseProject){
  97.             $qb->leftJoin('c.developpeur','developpeurEntity');
  98.             $qb->andWhere('(c.entreprise in (:entreprise)) or (developpeurEntity.entreprise in (:entreprise))')
  99.                 ->setParameter('entreprise',$entrepriseProject);
  100.         }
  101.         if($constructeurEpcProject){
  102.             $qb->andWhere('c.fournisseur in (:constructeurEpcProject)')
  103.                 ->setParameter('constructeurEpcProject',$constructeurEpcProject);
  104.         }
  105.         if($constructeurInstallateurProject){
  106.             $qb->andWhere('fournisseurProject.fournisseur in (:constructeurInstallateurProject)')
  107.                 ->setParameter('constructeurInstallateurProject',$constructeurInstallateurProject);
  108.         }
  109.         if($constructeurCharpentierProject){
  110.             $qb->andWhere('fournisseurProject.fournisseur in (:constructeurCharpentierProject)')
  111.                 ->setParameter('constructeurCharpentierProject',$constructeurCharpentierProject);
  112.         }
  113.         if($constructeurNotaireProject){
  114.             $qb->andWhere('fournisseurProject.fournisseur in (:constructeurNotaireProject)')
  115.                 ->setParameter('constructeurNotaireProject',$constructeurNotaireProject);
  116.         }
  117.         $qb->andWhere('c.name like :query or c.codeProject like :query or familleProject.name like :query or typologieProject.name like :query or typeBatimentProject.name like :query
  118.          or c.adresse like :query or c.city like :query  or c.codePostal like :query  or c.numParcelle like :query  or etap5.typeBail like :query  or etap6.nomNotaire like :query 
  119.          or etap8.siretEts like :query or etap14.adresseMiseEnService like :query or etap14.codePostalMiseEnService like :query or etap14.cityMiseEnService like :query 
  120.          or etap14.firstnameProprietaire like :query or etap14.lastnameProprietaire like :query or etap14.phoneProprietaire like :query or etap14.emailProprietaire like :query
  121.          or etap15.numeroContratAchat like :query or numeroCardi.numeroCardi like :query or numeroCardi.identifiantEnedis like :query 
  122.          or informationEtap15.numeroContratAchat like :query or informationEtap15.tarifContratAchat like :query or etap10.referenceEnedis like :query
  123.         or etap26Champs.numeroContratAchat1 like :query or etap26Champs.numeroContratAchat2 like :query
  124.         ')
  125.             ->setParameter('query', "%" . $query . "%")
  126.         ;
  127.         if($isArchive){
  128.             $qb->andWhere('c.isArchived = 1');
  129.         }else{
  130.             if($query){
  131.             }else{
  132.                 $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  133.             }
  134.         }
  135.         if($status){
  136.             $qb->andWhere('c.status in (:status)')
  137.                 ->setParameter('status',$status);
  138.         }
  139.         if($statusAdministratifProject){
  140.             $qb->andWhere('c.statusAdministratif in (:statusAdministratif)')
  141.                 ->setParameter('statusAdministratif',$statusAdministratifProject);
  142.         }
  143.         if($statusTrackerProject){
  144.             $qb->andWhere('c.statusTrackerActuel in (:statusTracker)')
  145.                 ->setParameter('statusTracker',$statusTrackerProject);
  146.         }
  147.         if($stadeConstruction){
  148.             $qb->andWhere('c.statusTrackerActuelConstruction in (:stadeConstruction)')
  149.                 ->setParameter('stadeConstruction',$stadeConstruction);
  150.         }
  151.         if($statusUrbanisme){
  152.             $qb->leftJoin(StatusUrbanisme::class, 'statusUrbanisme', 'WITH', 'statusUrbanisme.project = c.id');
  153.             $str = '';
  154.             foreach ($statusUrbanisme as $key => $item){
  155.                 if($key == 0){
  156.                     $str .=  '(statusUrbanisme.statusStr like :statusUrbanisme'.$key .')' ;
  157.                 }else{
  158.                     $str .=  ' OR (statusUrbanisme.statusStr like :statusUrbanisme'.$key.')' ;
  159.                 }
  160.             }
  161.             if($str != ''){
  162.                 $qb->andWhere($str);
  163.                 foreach ($statusUrbanisme as $key => $item) {
  164.                     $qb->setParameter('statusUrbanisme'.$key, '%'.$item.'%');
  165.                 }
  166.             }
  167.         }
  168.         if($statusFoncier1 || $statusFoncier2 || $statusFoncier3){
  169.             $qb->leftJoin(StatusFoncier::class, 'statusFoncier', 'WITH', 'statusFoncier.project = c.id');
  170.             if($statusFoncier1){
  171.                 $qb->andWhere('statusFoncier.statusStr1 like :statusStr1');
  172.                 $qb->setParameter('statusStr1', '%'.$statusFoncier1.'%');
  173.             }
  174.             if($statusFoncier2){
  175.                 $qb->andWhere('statusFoncier.statusStr2 like :statusStr2');
  176.                 $qb->setParameter('statusStr2', '%'.$statusFoncier2.'%');
  177.             }
  178.             if($statusFoncier3){
  179.                 $qb->andWhere('statusFoncier.statusStr3 like :statusStr3');
  180.                 $qb->setParameter('statusStr3', '%'.$statusFoncier3.'%');
  181.             }
  182.         }
  183.         if($typologieProject){
  184.             $qb->andWhere('c.typologieProject in (:typologieProject)')
  185.                 ->setParameter('typologieProject',$typologieProject);
  186.         }
  187.         if(in_array('ROLE_DEV',$user->getRoles())){
  188.             if($user->getEntreprise()){
  189.                 $qb->andWhere('(c.developpeur = :user) or (c.entreprise = :userEntreprise)')
  190.                     ->setParameter('user',$user->getId())
  191.                     ->setParameter('userEntreprise',$user->getEntreprise()->getId());
  192.             }else{
  193.                 $qb->andWhere('c.developpeur = :user')
  194.                     ->setParameter('user',$user->getId());
  195.             }
  196.         }elseif (in_array('ROLE_EPC',$user->getRoles())){
  197.             $qb->andWhere('c.epc = :user or c.developpeur = :user')
  198.                 ->setParameter('user',$user->getId());
  199.         }elseif (in_array('ROLE_CONSTRUCTEUR',$user->getRoles())){
  200.             $qb->innerJoin('c.constructeurUser','constructeur');
  201.             $qb->andWhere('constructeur.constructeur = :user')
  202.                 ->setParameter('user',$user->getId());
  203.         }elseif (in_array('ROLE_ADMIN',$user->getRoles()) || in_array('ROLE_SUPER_ADMINISTRATOR',$user->getRoles())){
  204.         }
  205.         if($user && in_array($user->getTypeAcces(),[User::ACCES_intervenant,User::ACCES_visiteur,User::ACCES_comptable])){
  206.             $spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
  207.             if($user && $spvsTab ){
  208.                 $qb->andWhere('c.spv in (:spvsTab)')
  209.                     ->setParameter('spvsTab',$spvsTab);
  210.             }else{
  211.                 if (in_array('ROLE_COMPTABLE',$user->getRoles())||in_array('ROLE_AUDITEUR',$user->getRoles())) {
  212.                     $qb->andWhere('fournisseurProject.user = :userCourant')
  213.                         ->setParameter('userCourant', $user->getId());
  214.                 }elseif (in_array('ROLE_FOURNISSEUR',$user->getRoles())){
  215.                     $qb->innerJoin('fournisseurProject.fournisseur', 'fournisseur');
  216.                     $qb->leftJoin('c.fournisseur', 'fournisseurUser');
  217.                     $qb->leftJoin('fournisseur.user', 'fournisseurProjectUser');
  218.                     $qb->leftJoin('fournisseurUser.user', 'fournisseurUserUser');
  219.                     $qb->andWhere('fournisseurProjectUser.id = :userFournisseur or fournisseurUserUser.id = :userFournisseur')
  220.                         ->setParameter('userFournisseur', $user->getId());
  221.                 }
  222.             }
  223.         }
  224.         if($spvProject){
  225.             $qb->andWhere('c.spv in (:spv)')
  226.                 ->setParameter('spv',$spvProject);
  227.         }
  228.         if($responsableProject){
  229.             $qb->innerJoin('c.responsableUser', 'responsable');
  230.             $qb->andWhere('responsable.responsable in (:responsable)')
  231.                 ->setParameter('responsable',$responsableProject);
  232.         }
  233.         if($responsableFoncierProject){
  234.             $qb->innerJoin('c.responsableFoncierUser', 'responsable');
  235.             $qb->andWhere('responsable.responsable in (:responsable)')
  236.                 ->setParameter('responsable',$responsableFoncierProject);
  237.         }
  238.         if($responsableDevProject){
  239.             $qb->innerJoin('c.responsableDeveloppement', 'responsableDev');
  240.             $qb->andWhere('responsableDev.responsable in (:responsableDevStr)')
  241.                 ->setParameter('responsableDevStr',$responsableDevProject);
  242.         }
  243.         if($constructeurProject){
  244.             $qb->innerJoin('c.constructeurUser', 'constructeur');
  245.             $qb->andWhere('constructeur.constructeur in (:constructeur)')
  246.                 ->setParameter('constructeur',$constructeurProject);
  247.         }
  248.         if($intervenantProject){
  249.             $qb->innerJoin('c.intervenantUser', 'intervenantUser');
  250.             $qb->andWhere('intervenantUser.intervenant in (:intervenantUser)')
  251.                 ->setParameter('intervenantUser',$intervenantProject);
  252.         }
  253.         if($count){
  254.             $qb->select('count(DISTINCT c.id) as result');
  255.             return $qb->getQuery()->getOneOrNullResult();
  256.         }else{
  257.             $qb->select('DISTINCT c');
  258.             if ($columnOrder) {
  259.                 if($columnOrder == 'name'){
  260.                     $qb->orderBy("c.$columnOrder", $dirOrder);
  261.                 }
  262.                 elseif($columnOrder == 'status'){
  263.                     $qb->orderBy("c.status", $dirOrder);
  264.                 }
  265.                 elseif($columnOrder == 'createdAt'){
  266.                     $qb->orderBy("c.createdAt", $dirOrder);
  267.                 }
  268.                 elseif($columnOrder == 'archiveAt'){
  269.                     $qb->orderBy("c.archiveAt", $dirOrder);
  270.                 }
  271.                 elseif($columnOrder == 'commentArchive'){
  272.                     $qb->orderBy("c.commentArchive", $dirOrder);
  273.                 }
  274.                 elseif($columnOrder == 'statusAdministratif'){
  275.                     $qb->orderBy("c.statusAdministratif", $dirOrder);
  276.                 }
  277.                 elseif($columnOrder == 'statusTrackerActuel'){
  278.                     $qb->orderBy("c.statusTrackerActuel", $dirOrder);
  279.                 }else{
  280.                     $qb->orderBy("c.createdAt", 'desc');
  281.                 }
  282.             }
  283.             if ($max) {
  284.                 $preparedQuery = $qb->getQuery()
  285.                     ->setMaxResults($max)
  286.                     ->setFirstResult($page * $max)
  287.                 ;
  288.             } else {
  289.                 $preparedQuery = $qb->getQuery();
  290.             }
  291.             return $getResult ? $preparedQuery->getResult() : $preparedQuery;
  292.         }
  293.     }
  294.     public function searchAdmin($isArchive = false,$status,$statusCustom=null,$spv,$data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
  295.         $qb =  $this->createQueryBuilder('c');
  296.         $query = isset($data['query']) && $data['query'] ? $data['query'] : null;
  297.         $statusAdministratifProject = isset($data['statusAdministratifProject']) && $data['statusAdministratifProject'] ? $data['statusAdministratifProject'] : null;
  298.         $statusTrackerProject = isset($data['statusTrackerProject']) && $data['statusTrackerProject'] ? $data['statusTrackerProject'] : null;
  299.         $stadeConstruction = isset($data['stadeConstruction']) && $data['stadeConstruction'] ? $data['stadeConstruction'] : null;
  300.         $statusUrbanisme = isset($data['statusUrbanisme']) && $data['statusUrbanisme'] ? $data['statusUrbanisme'] : null;
  301.         $statusFoncier1 = isset($data['statusFoncier1']) && $data['statusFoncier1'] ? $data['statusFoncier1'] : null;
  302.         $statusFoncier2 = isset($data['statusFoncier2']) && $data['statusFoncier2'] ? $data['statusFoncier2'] : null;
  303.         $statusFoncier3 = isset($data['statusFoncier3']) && $data['statusFoncier3'] ? $data['statusFoncier3'] : null;
  304.         $typologieProject = isset($data['typologieProject']) && $data['typologieProject'] ? $data['typologieProject'] : null;
  305.         $devProject = isset($data['devProject']) && $data['devProject'] ? $data['devProject'] : null;
  306.         $entrepriseProject = isset($data['entrepriseProject']) && $data['entrepriseProject'] ? $data['entrepriseProject'] : null;
  307.         $responsableProject = isset($data['responsableProject']) && $data['responsableProject'] ? $data['responsableProject'] : null;
  308.         $responsableFoncierProject = isset($data['responsableFoncierProject']) && $data['responsableFoncierProject'] ? $data['responsableFoncierProject'] : null;
  309.         $responsableDevProject = isset($data['responsableDevProject']) && $data['responsableDevProject'] ? $data['responsableDevProject'] : null;
  310.         $constructeurProject = isset($data['constructeurProject']) && $data['constructeurProject'] ? $data['constructeurProject'] : null;
  311.         $intervenantProject = isset($data['intervenantProject']) && $data['intervenantProject'] ? $data['intervenantProject'] : null;
  312.         $achatLocation = isset($data['achatLocation']) && $data['achatLocation'] ? $data['achatLocation'] : null;
  313.         if($achatLocation && $achatLocation != 0){
  314.             if($achatLocation == Project::ACHAT){
  315.                 $qb->andWhere('c.achatLocation = :achatLocation')
  316.                     ->setParameter('achatLocation',$achatLocation);
  317.             }else{
  318.                 $qb->andWhere('(c.achatLocation = :achatLocation) or (c.achatLocation is null)')
  319.                     ->setParameter('achatLocation',Project::LOCATION);
  320.             }
  321.         }
  322.         $qb->leftJoin('c.familleProject','familleProject');
  323.         $qb->leftJoin('c.typologieProject','typologieProject');
  324.         $qb->leftJoin('c.typeBatimentProject','typeBatimentProject');
  325.         $qb->leftJoin(Etap5::class, 'etap5', 'WITH', 'etap5.project = c.id');
  326.         $qb->leftJoin(Etap6::class, 'etap6', 'WITH', 'etap6.project = c.id');
  327.         $qb->leftJoin(Etap8::class, 'etap8', 'WITH', 'etap8.project = c.id');
  328.         $qb->leftJoin(Etap14::class, 'etap14', 'WITH', 'etap14.project = c.id');
  329.         $qb->leftJoin(Etap15::class, 'etap15', 'WITH', 'etap15.project = c.id');
  330.         $qb->leftJoin(Etap12::class, 'etap12', 'WITH', 'etap12.project = c.id');
  331.         $qb->leftJoin(Etap10::class, 'etap10', 'WITH', 'etap10.project = c.id');
  332.         $qb->leftJoin('etap12.numeroCardiMultiple','numeroCardiEntity');
  333.         $qb->leftJoin('etap15.informationMultiple','informationEtap15');
  334.         $qb->leftJoin(Etap24::class, 'etap24', 'WITH', 'etap24.project = c.id');
  335.         $qb->leftJoin('etap24.etap24Champs','etap24Champs');
  336.         $qb->leftJoin('etap24Champs.etap26Champs','etap26Champs');
  337.         $qb->leftJoin('c.fournisseurProject', 'fournisseurProject');
  338.         $constructeurEpcProject = isset($data['constructeurEpcProject']) && $data['constructeurEpcProject'] ? $data['constructeurEpcProject'] : null;
  339.         $constructeurInstallateurProject = isset($data['constructeurInstallateurProject']) && $data['constructeurInstallateurProject'] ? $data['constructeurInstallateurProject'] : null;
  340.         $constructeurCharpentierProject = isset($data['constructeurCharpentierProject']) && $data['constructeurCharpentierProject'] ? $data['constructeurCharpentierProject'] : null;
  341.         $constructeurNotaireProject = isset($data['constructeurNotaireProject']) && $data['constructeurNotaireProject'] ? $data['constructeurNotaireProject'] : null;
  342.         if($constructeurEpcProject){
  343.             $qb->andWhere('c.fournisseur in (:constructeurEpcProject)')
  344.                 ->setParameter('constructeurEpcProject',$constructeurEpcProject);
  345.         }
  346.         if($constructeurInstallateurProject){
  347.             $qb->andWhere('fournisseurProject.fournisseur in (:constructeurInstallateurProject)')
  348.                 ->setParameter('constructeurInstallateurProject',$constructeurInstallateurProject);
  349.         }
  350.         if($constructeurCharpentierProject){
  351.             $qb->andWhere('fournisseurProject.fournisseur in (:constructeurCharpentierProject)')
  352.                 ->setParameter('constructeurCharpentierProject',$constructeurCharpentierProject);
  353.         }
  354.         if($constructeurNotaireProject){
  355.             $qb->andWhere('fournisseurProject.fournisseur in (:constructeurNotaireProject)')
  356.                 ->setParameter('constructeurNotaireProject',$constructeurNotaireProject);
  357.         }
  358.         $qb->andWhere('c.name like :query or c.codeProject like :query or familleProject.name like :query or typologieProject.name like :query or typeBatimentProject.name like :query
  359.          or c.adresse like :query or c.city like :query  or c.codePostal like :query  or c.numParcelle like :query  or etap5.typeBail like :query  or etap6.nomNotaire like :query 
  360.          or etap8.siretEts like :query or etap14.adresseMiseEnService like :query or etap14.codePostalMiseEnService like :query or etap14.cityMiseEnService like :query 
  361.          or etap14.firstnameProprietaire like :query or etap14.lastnameProprietaire like :query or etap14.phoneProprietaire like :query or etap14.emailProprietaire like :query
  362.          or etap15.numeroContratAchat like :query  or numeroCardiEntity.numeroCardi like :query  or numeroCardiEntity.identifiantEnedis like :query
  363.         or informationEtap15.numeroContratAchat like :query or informationEtap15.tarifContratAchat like :query or etap10.referenceEnedis like :query
  364.         or etap26Champs.numeroContratAchat1 like :query or etap26Champs.numeroContratAchat2 like :query
  365.         ')
  366.             ->setParameter('query', "%" . $query . "%")
  367.         ;
  368.         $user = isset($data['user']) && $data['user'] ? $data['user'] : null;
  369.         if($isArchive){
  370.             $qb->andWhere('c.isArchived = 1');
  371.         }else{
  372.             if($query){
  373.             }else{
  374.                 $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  375.             }
  376.         }
  377.         if($statusAdministratifProject){
  378.             $qb->andWhere('c.statusAdministratif in (:statusAdministratif)')
  379.                 ->setParameter('statusAdministratif',$statusAdministratifProject);
  380.         }
  381.         if($statusTrackerProject){
  382.             $qb->andWhere('c.statusTrackerActuel in (:statusTracker)')
  383.                 ->setParameter('statusTracker',$statusTrackerProject);
  384.         }
  385.         if($stadeConstruction){
  386.             $qb->andWhere('c.statusTrackerActuelConstruction in (:stadeConstruction)')
  387.                 ->setParameter('stadeConstruction',$stadeConstruction);
  388.         }
  389.         if($statusUrbanisme){
  390.             $qb->leftJoin(StatusUrbanisme::class, 'statusUrbanisme', 'WITH', 'statusUrbanisme.project = c.id');
  391.             $str = '';
  392.             foreach ($statusUrbanisme as $key => $item){
  393.                 if($key == 0){
  394.                     $str .=  '(statusUrbanisme.statusStr like :statusUrbanisme'.$key .')' ;
  395.                 }else{
  396.                     $str .=  ' OR (statusUrbanisme.statusStr like :statusUrbanisme'.$key.')' ;
  397.                 }
  398.             }
  399.             if($str != ''){
  400.                 $qb->andWhere($str);
  401.                 foreach ($statusUrbanisme as $key => $item) {
  402.                     $qb->setParameter('statusUrbanisme'.$key, '%'.$item.'%');
  403.                 }
  404.             }
  405.         }
  406.         if($statusFoncier1 || $statusFoncier2 || $statusFoncier3){
  407.             $qb->leftJoin(StatusFoncier::class, 'statusFoncier', 'WITH', 'statusFoncier.project = c.id');
  408.             if($statusFoncier1){
  409.                 $qb->andWhere('statusFoncier.statusStr1 like :statusStr1');
  410.                 $qb->setParameter('statusStr1', '%'.$statusFoncier1.'%');
  411.             }
  412.             if($statusFoncier2){
  413.                 $qb->andWhere('statusFoncier.statusStr2 like :statusStr2');
  414.                 $qb->setParameter('statusStr2', '%'.$statusFoncier2.'%');
  415.             }
  416.             if($statusFoncier3){
  417.                 $qb->andWhere('statusFoncier.statusStr3 like :statusStr3');
  418.                 $qb->setParameter('statusStr3', '%'.$statusFoncier3.'%');
  419.             }
  420.         }
  421.         if($typologieProject){
  422.             $qb->andWhere('c.typologieProject in (:typologieProject)')
  423.                 ->setParameter('typologieProject',$typologieProject);
  424.         }
  425.         if($status){
  426.             $qb->andWhere('c.status in (:status)')
  427.                 ->setParameter('status',$status);
  428.         }
  429.         if($statusCustom == Project::STATUS_CUSTOM_EN_ATTENT){
  430.             $qb->andWhere('c.status in (:status)')
  431.                 ->setParameter('status',[Project::STATUS_DEMANDE,Project::STATUS_EN_ATTENT,Project::STATUS_DEMANDE_REPONDU]);
  432.         }elseif ($statusCustom == Project::STATUS_CUSTOM_EXPLOITATION){
  433.             $qb->innerJoin(Etap21::class, 'etap21', 'WITH', 'etap21.project = c.id')
  434.                 ->andWhere('etap21.status = :statusValide')
  435.                 ->setParameter('statusValide',Etaps::STATUS_VALIDE);
  436.         }elseif ($statusCustom == Project::STATUS_CUSTOM_CONSTRUCTION){
  437.             $qb->innerJoin(Etap17::class, 'etap17', 'WITH', 'etap17.project = c.id')
  438.                 ->andWhere('etap17.status = :statusValide')
  439.                 ->setParameter('statusValide',Etaps::STATUS_VALIDE);
  440.             $qb->innerJoin(Etap21::class, 'etap21', 'WITH', 'etap21.project = c.id')
  441.                 ->andWhere('etap21.status <> :statusValide')
  442.                 ->setParameter('statusValide',Etaps::STATUS_VALIDE);
  443.         }elseif ($statusCustom == Project::STATUS_CUSTOM_DEVELOPPEMENT){
  444.             $qb->andWhere('c.status in (:status)')
  445.                 ->setParameter('status',[Project::STATUS_EN_COURS]);
  446.         }
  447.         if($spv){
  448.             $qb->andWhere('c.spv in (:spv)')
  449.                 ->setParameter('spv',$spv);
  450.         }
  451.         if($devProject){
  452.             $qb->andWhere('c.developpeur in (:dev)')
  453.                 ->setParameter('dev',$devProject);
  454.         }
  455.         if($entrepriseProject){
  456.             $qb->leftJoin('c.developpeur','developpeurEntity');
  457.             $qb->andWhere('(c.entreprise in (:entreprise)) or (developpeurEntity.entreprise in (:entreprise))')
  458.                 ->setParameter('entreprise',$entrepriseProject);
  459.         }
  460.         if($responsableProject){
  461.             $qb->innerJoin('c.responsableUser', 'responsable');
  462.             $qb->andWhere('responsable.responsable in (:responsable)')
  463.                 ->setParameter('responsable',$responsableProject);
  464.         }
  465.         if($responsableFoncierProject){
  466.             $qb->innerJoin('c.responsableFoncierUser', 'responsable');
  467.             $qb->andWhere('responsable.responsable in (:responsable)')
  468.                 ->setParameter('responsable',$responsableFoncierProject);
  469.         }
  470.         if($responsableDevProject){
  471.             $qb->innerJoin('c.responsableDeveloppement', 'responsableDev');
  472.             $qb->andWhere('responsableDev.responsable in (:responsableDevStr)')
  473.                 ->setParameter('responsableDevStr',$responsableDevProject);
  474.         }
  475.         if($constructeurProject){
  476.             $qb->innerJoin('c.constructeurUser', 'constructeur');
  477.             $qb->andWhere('constructeur.constructeur in (:constructeur)')
  478.                 ->setParameter('constructeur',$constructeurProject);
  479.         }
  480.         if($intervenantProject){
  481.             $qb->innerJoin('c.intervenantUser', 'intervenantUser');
  482.             $qb->andWhere('intervenantUser.intervenant in (:intervenantUser)')
  483.                 ->setParameter('intervenantUser',$intervenantProject);
  484.         }
  485.         if($user && $user->getIntervenantNum() && $user->getIntervenantNum() != '0'){
  486.             $qb->innerJoin('c.intervenantUser','intervenantUser');
  487.             $qb->andWhere('intervenantUser.intervenant = :user')
  488.                 ->setParameter('user',$user->getId());
  489.         }
  490.         if($user && in_array($user->getTypeAcces(),[User::ACCES_intervenant,User::ACCES_visiteur,User::ACCES_comptable])){
  491.             $spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
  492.             if($user && $spvsTab ){
  493.                 $qb->andWhere('c.spv in (:spvsTab)')
  494.                     ->setParameter('spvsTab',$spvsTab);
  495.             }else{
  496.                 if (in_array('ROLE_COMPTABLE',$user->getRoles())||in_array('ROLE_AUDITEUR',$user->getRoles())) {
  497.                     $qb->andWhere('fournisseurProject.user = :userCourant')
  498.                         ->setParameter('userCourant', $user->getId());
  499.                 }elseif (in_array('ROLE_FOURNISSEUR',$user->getRoles())){
  500.                     $qb->innerJoin('fournisseurProject.fournisseur', 'fournisseur');
  501.                     $qb->leftJoin('c.fournisseur', 'fournisseurUser');
  502.                     $qb->leftJoin('fournisseur.user', 'fournisseurProjectUser');
  503.                     $qb->leftJoin('fournisseurUser.user', 'fournisseurUserUser');
  504.                     $qb->andWhere('fournisseurProjectUser.id = :userFournisseur or fournisseurUserUser.id = :userFournisseur')
  505.                         ->setParameter('userFournisseur', $user->getId());
  506.                 }
  507.             }
  508.         }
  509.         if($count){
  510.             $qb->select('count(DISTINCT c.id) as result');
  511.             return $qb->getQuery()->getOneOrNullResult();
  512.         }else{
  513.             $qb->select('DISTINCT c');
  514.             if ($columnOrder) {
  515.                 if($columnOrder == 'name'){
  516.                     $qb->orderBy("c.$columnOrder", $dirOrder);
  517.                 }
  518.                 elseif($columnOrder == 'status'){
  519.                     $qb->orderBy("c.status", $dirOrder);
  520.                 }
  521.                 elseif($columnOrder == 'spv'){
  522.                     $qb->orderBy("c.spv", $dirOrder);
  523.                 }
  524.                 elseif($columnOrder == 'developpeur'){
  525.                     $qb->orderBy("c.developpeur", $dirOrder);
  526.                 }
  527.                 elseif($columnOrder == 'entreprise'){
  528.                     $qb->leftJoin('c.developpeur','dev');
  529.                     $qb->orderBy("dev.entreprise", $dirOrder);
  530.                 }
  531.                 elseif($columnOrder == 'createdAt'){
  532.                     $qb->orderBy("c.createdAt", $dirOrder);
  533.                 }
  534.                 elseif($columnOrder == 'archiveAt'){
  535.                     $qb->orderBy("c.archiveAt", $dirOrder);
  536.                 }
  537.                 elseif($columnOrder == 'commentArchive'){
  538.                     $qb->orderBy("c.commentArchive", $dirOrder);
  539.                 }
  540.                 elseif($columnOrder == 'statusAdministratif'){
  541.                     $qb->orderBy("c.statusAdministratif", $dirOrder);
  542.                 }
  543.                 elseif($columnOrder == 'statusTrackerActuel'){
  544.                     $qb->orderBy("c.statusTrackerActuel", $dirOrder);
  545.                 }else{
  546.                     $qb->orderBy("c.createdAt", 'desc');
  547.                 }
  548.             }
  549.             if ($max) {
  550.                 $preparedQuery = $qb->getQuery()
  551.                     ->setMaxResults($max)
  552.                     ->setFirstResult($page * $max)
  553.                 ;
  554.             } else {
  555.                 $preparedQuery = $qb->getQuery();
  556.             }
  557.             return $getResult ? $preparedQuery->getResult() : $preparedQuery;
  558.         }
  559.     }
  560.     public function searchByCustomStatus($project,$statusCustom){
  561.         $qb =  $this->createQueryBuilder('c');
  562.         $qb->andWhere('c.id = :id')
  563.             ->setParameter('id',$project->getId());
  564.         if($statusCustom == Project::STATUS_CUSTOM_EN_ATTENT){
  565.             $qb->andWhere('c.status in (:status)')
  566.                 ->setParameter('status',[Project::STATUS_DEMANDE,Project::STATUS_EN_ATTENT,Project::STATUS_DEMANDE_REPONDU]);
  567.         }elseif ($statusCustom == Project::STATUS_CUSTOM_EXPLOITATION){
  568.             $qb->innerJoin(Etap21::class, 'etap21', 'WITH', 'etap21.project = c.id')
  569.                 ->andWhere('etap21.status = :statusValide')
  570.                 ->setParameter('statusValide',Etaps::STATUS_VALIDE);
  571.         }elseif ($statusCustom == Project::STATUS_CUSTOM_CONSTRUCTION){
  572.             $qb->innerJoin(Etap17::class, 'etap17', 'WITH', 'etap17.project = c.id')
  573.                 ->andWhere('etap17.status = :statusValide')
  574.                 ->setParameter('statusValide',Etaps::STATUS_VALIDE);
  575.         }elseif ($statusCustom == Project::STATUS_CUSTOM_DEVELOPPEMENT){
  576.             $qb->andWhere('c.status in (:status)')
  577.                 ->setParameter('status',[Project::STATUS_EN_COURS]);
  578.         }
  579.        return  $qb->getQuery()->getResult();
  580.     }
  581.     public function findAllProjectBySPV($id){
  582.         $qb =  $this->createQueryBuilder('c');
  583.         $qb->andWhere('c.spv = :id')
  584.             ->setParameter('id',$id);
  585.             $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  586.         return  $qb->getQuery()->getResult();
  587.     }
  588.     public function findAllProjectByDev($id){
  589.         $qb =  $this->createQueryBuilder('c');
  590.         $qb->andWhere('c.developpeur = :id')
  591.             ->setParameter('id',$id);
  592.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  593.         return  $qb->getQuery()->getResult();
  594.     }
  595.     public function findAllProjectByTokens($tokens){
  596.         $qb =  $this->createQueryBuilder('c');
  597.         $qb->andWhere('c.token in (:tokens)')
  598.             ->setParameter('tokens',$tokens);
  599.         return  $qb->getQuery()->getResult();
  600.     }
  601.     public function getProjectsBySpvs($spvIds){
  602.         $qb =  $this->createQueryBuilder('c');
  603.         $qb->andWhere('c.spv in (:ids)')
  604.             ->setParameter('ids', $spvIds) ;
  605.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  606.         return  $qb->getQuery()->getResult();
  607.     }
  608.     public function kpiProjectBySpv($spvIds=null){
  609.         $qb =  $this->createQueryBuilder('p');
  610.         $qb->select('s.id as id ,s.name as name, count(p.id) as nbrProject, sum(p.tarifRevente)/count(p.id) as moyenTarif, sum(p.capacite) as sommeCapacite ')
  611.             ->innerJoin('p.spv','s');
  612.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null')
  613.             ->andWhere('s.isEnabled = 1');
  614.         if($spvIds){
  615.             if(in_array('tous',$spvIds)){
  616.             }else{
  617.                 $qb->andWhere('s.id in (:spvIds)')
  618.                     ->setParameter('spvIds',$spvIds);
  619.             }
  620.         }else{
  621.             $qb->setMaxResults(5);
  622.         }
  623.         if($this->security->getUser() and   (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
  624.             $spvs = $this->security->getUser()->getSpv();
  625.             $spvsTab = [];
  626.             foreach($spvs as $item){
  627.                 $spvsTab[] = $item->getId();
  628.             }
  629.             $qb->andWhere('p.spv in (:spvsTab)')
  630.                 ->setParameter('spvsTab',$spvsTab);
  631.         }
  632.         $qb->groupBy('s.id');
  633.         $qb->orderBy('s.id','ASC');
  634.         return  $qb->getQuery()->getResult();
  635.     }
  636.     public function kpiProjectBySpvTotal($spvIds=null){
  637.         $qb =  $this->createQueryBuilder('p');
  638.         $qb->select('s.id as id ,s.name as name, count(p.id) as nbrProject, sum(p.tarifRevente)/count(p.id) as moyenTarif, sum(p.capacite) as sommeCapacite ')
  639.             ->innerJoin('p.spv','s');
  640.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null')
  641.             ->andWhere('s.isEnabled = 1');
  642.         if($spvIds){
  643.             if(in_array('tous',$spvIds)){
  644.             }else{
  645.                 $qb->andWhere('s.id in (:spvIds)')
  646.                     ->setParameter('spvIds',$spvIds);
  647.             }
  648.         }else{
  649.             $qb->setMaxResults(5);
  650.         }
  651.         if($this->security->getUser() and   (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
  652.             $spvs = $this->security->getUser()->getSpv();
  653.             $spvsTab = [];
  654.             foreach($spvs as $item){
  655.                 $spvsTab[] = $item->getId();
  656.             }
  657.             $qb->andWhere('p.spv in (:spvsTab)')
  658.                 ->setParameter('spvsTab',$spvsTab);
  659.         }
  660.         $qb->groupBy('s.id');
  661.         $qb->orderBy('s.id','ASC');
  662.         return  $qb->getQuery()->getResult();
  663.     }
  664.     public function kpiProjectBySpvAndStatus($spv,$status){
  665.         $qb =  $this->createQueryBuilder('p');
  666.         $qb->select('count(p.id) as nbrProjectBySpv, sum(p.capacite) as sommeCapaciteBySpv ')
  667.             ->innerJoin('p.spv','s');
  668.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null')
  669.            ->andWhere('s.id = :spvId')
  670.            ->andWhere('p.statusAdministratif = :status')
  671.             ->setParameter('spvId',$spv)
  672.             ->setParameter('status',$status);
  673.         return  $qb->getQuery()->getOneOrNullResult();
  674.     }
  675.     public function kpiProjectByDev($devIds=null){
  676.         $qb =  $this->createQueryBuilder('p');
  677.         $qb->select('s.id as id ,CONCAT(s.firstname,  \' \' , s.lastname) as name, count(p.id) as nbrProject, sum(p.tarifRevente)/count(p.id) as moyenTarif, sum(p.capacite) as sommeCapacite ')
  678.             ->innerJoin('p.developpeur','s');
  679.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null');
  680.         if($devIds){
  681.             $qb->andWhere('s.id in (:devIds)')
  682.                 ->setParameter('devIds',$devIds);
  683.         }else{
  684.             $qb->setMaxResults(5);
  685.         }
  686.         if($this->security->getUser() and   (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
  687.             $spvs = $this->security->getUser()->getSpv();
  688.             $spvsTab = [];
  689.             foreach($spvs as $item){
  690.                 $spvsTab[] = $item->getId();
  691.             }
  692.             $qb->andWhere('p.spv in (:spvsTab)')
  693.                 ->setParameter('spvsTab',$spvsTab);
  694.         }
  695.         $qb->groupBy('s.id');
  696.         $qb->orderBy('s.id','ASC');
  697.         return  $qb->getQuery()->getResult();
  698.     }
  699.     public function kpiProjectByDevTotal($devIds=null){
  700.         $qb =  $this->createQueryBuilder('p');
  701.         $qb->select('s.id as id ,CONCAT(s.firstname,  \' \' , s.lastname) as name, count(p.id) as nbrProject, sum(p.tarifRevente)/count(p.id) as moyenTarif, sum(p.capacite) as sommeCapacite ')
  702.             ->innerJoin('p.developpeur','s');
  703.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null');
  704.         if($this->security->getUser() and   (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
  705.             $spvs = $this->security->getUser()->getSpv();
  706.             $spvsTab = [];
  707.             foreach($spvs as $item){
  708.                 $spvsTab[] = $item->getId();
  709.             }
  710.             $qb->andWhere('p.spv in (:spvsTab)')
  711.                 ->setParameter('spvsTab',$spvsTab);
  712.         }
  713.         $qb->groupBy('s.id');
  714.         $qb->orderBy('s.id','ASC');
  715.         return  $qb->getQuery()->getResult();
  716.     }
  717.     public function kpiProjectByDevAndStatus($dev,$status){
  718.         $qb =  $this->createQueryBuilder('p');
  719.         $qb->select('count(p.id) as nbrProjectByDev, sum(p.capacite) as sommeCapaciteByDev ')
  720.             ->innerJoin('p.developpeur','s');
  721.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null')
  722.             ->andWhere('s.id = :devId')
  723.             ->andWhere('p.statusAdministratif = :status')
  724.             ->setParameter('devId',$dev)
  725.             ->setParameter('status',$status);
  726.         return  $qb->getQuery()->getOneOrNullResult();
  727.     }
  728.     public function kpiProjectByTypologieProject($typologieProjectIds=null){
  729.         $qb =  $this->createQueryBuilder('p');
  730.         $qb->select('s.id as id ,s.name as name, count(p.id) as nbrProject, sum(p.tarifRevente)/count(p.id) as moyenTarif, sum(p.capacite) as sommeCapacite ')
  731.             ->innerJoin('p.typologieProject','s');
  732.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null');
  733.         if($typologieProjectIds){
  734.             $qb->andWhere('s.id in (:typologieProjectIds)')
  735.                 ->setParameter('typologieProjectIds',$typologieProjectIds);
  736.         }else{
  737.             $qb->setMaxResults(5);
  738.         }
  739.         if($this->security->getUser() and   (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
  740.             $spvs = $this->security->getUser()->getSpv();
  741.             $spvsTab = [];
  742.             foreach($spvs as $item){
  743.                 $spvsTab[] = $item->getId();
  744.             }
  745.             $qb->andWhere('p.spv in (:spvsTab)')
  746.                 ->setParameter('spvsTab',$spvsTab);
  747.         }
  748.         $qb->groupBy('s.id');
  749.         $qb->orderBy('s.id','ASC');
  750.         return  $qb->getQuery()->getResult();
  751.     }
  752.     public function kpiProjectByTypologieProjectTotal($typologieProjectIds=null){
  753.         $qb =  $this->createQueryBuilder('p');
  754.         $qb->select('s.id as id ,s.name as name, count(p.id) as nbrProject, sum(p.tarifRevente)/count(p.id) as moyenTarif, sum(p.capacite) as sommeCapacite ')
  755.             ->innerJoin('p.typologieProject','s');
  756.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null');
  757.         if($this->security->getUser() and   (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
  758.             $spvs = $this->security->getUser()->getSpv();
  759.             $spvsTab = [];
  760.             foreach($spvs as $item){
  761.                 $spvsTab[] = $item->getId();
  762.             }
  763.             $qb->andWhere('p.spv in (:spvsTab)')
  764.                 ->setParameter('spvsTab',$spvsTab);
  765.         }
  766.         $qb->groupBy('s.id');
  767.         $qb->orderBy('s.id','ASC');
  768.         return  $qb->getQuery()->getResult();
  769.     }
  770.     public function kpiProjectByTypologieProjectAndStatus($typologieProject,$status){
  771.         $qb =  $this->createQueryBuilder('p');
  772.         $qb->select('count(p.id) as nbrProjectByTypologieProject, sum(p.capacite) as sommeCapaciteByTypologieProject ')
  773.             ->innerJoin('p.typologieProject','s');
  774.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null')
  775.             ->andWhere('s.id = :typologieProject')
  776.             ->andWhere('p.statusAdministratif = :status')
  777.             ->setParameter('typologieProject',$typologieProject)
  778.             ->setParameter('status',$status);
  779.         return  $qb->getQuery()->getOneOrNullResult();
  780.     }
  781.     public function kpiProjectByFamilleProject($familleProjectIds=null){
  782.         $qb =  $this->createQueryBuilder('p');
  783.         $qb->select('s.id as id ,s.name as name, count(p.id) as nbrProject, sum(p.tarifRevente)/count(p.id) as moyenTarif, sum(p.capacite) as sommeCapacite ')
  784.             ->innerJoin('p.familleProject','s');
  785.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null');
  786.         if($familleProjectIds){
  787.             $qb->andWhere('s.id in (:familleProjectIds)')
  788.                 ->setParameter('familleProjectIds',$familleProjectIds);
  789.         }else{
  790.             $qb->setMaxResults(5);
  791.         }
  792.         if($this->security->getUser() and   (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
  793.             $spvs = $this->security->getUser()->getSpv();
  794.             $spvsTab = [];
  795.             foreach($spvs as $item){
  796.                 $spvsTab[] = $item->getId();
  797.             }
  798.             $qb->andWhere('p.spv in (:spvsTab)')
  799.                 ->setParameter('spvsTab',$spvsTab);
  800.         }
  801.         $qb->groupBy('s.id');
  802.         $qb->orderBy('s.id','ASC');
  803.         return  $qb->getQuery()->getResult();
  804.     }
  805.     public function kpiProjectByFamilleProjectTotal($familleProjectIds=null){
  806.         $qb =  $this->createQueryBuilder('p');
  807.         $qb->select('s.id as id ,s.name as name, count(p.id) as nbrProject, sum(p.tarifRevente)/count(p.id) as moyenTarif, sum(p.capacite) as sommeCapacite ')
  808.             ->innerJoin('p.familleProject','s');
  809.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null');
  810.         if($this->security->getUser() and   (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
  811.             $spvs = $this->security->getUser()->getSpv();
  812.             $spvsTab = [];
  813.             foreach($spvs as $item){
  814.                 $spvsTab[] = $item->getId();
  815.             }
  816.             $qb->andWhere('p.spv in (:spvsTab)')
  817.                 ->setParameter('spvsTab',$spvsTab);
  818.         }
  819.         $qb->groupBy('s.id');
  820.         $qb->orderBy('s.id','ASC');
  821.         return  $qb->getQuery()->getResult();
  822.     }
  823.     public function kpiProjectByFamilleProjectAndStatus($familleProject,$status){
  824.         $qb =  $this->createQueryBuilder('p');
  825.         $qb->select('count(p.id) as nbrProjectByFamilleProject, sum(p.capacite) as sommeCapaciteByFamilleProject ')
  826.             ->innerJoin('p.familleProject','s');
  827.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null')
  828.             ->andWhere('s.id = :familleProject')
  829.             ->andWhere('p.statusAdministratif = :status')
  830.             ->setParameter('familleProject',$familleProject)
  831.             ->setParameter('status',$status);
  832.         return  $qb->getQuery()->getOneOrNullResult();
  833.     }
  834.     public function kpiProjectByStatus($status){
  835.         $qb =  $this->createQueryBuilder('p');
  836.         $qb->select('count(p.id) as nbrProjectByStatus, sum(p.capacite) as sommeCapaciteByStatus ');
  837.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null')
  838.             ->andWhere('p.statusAdministratif = :status')
  839.             ->setParameter('status',$status);
  840.         if($this->security->getUser() and   (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
  841.             $spvs = $this->security->getUser()->getSpv();
  842.             $spvsTab = [];
  843.             foreach($spvs as $item){
  844.                 $spvsTab[] = $item->getId();
  845.             }
  846.             $qb->andWhere('p.spv in (:spvsTab)')
  847.                 ->setParameter('spvsTab',$spvsTab);
  848.         }
  849.         return  $qb->getQuery()->getOneOrNullResult();
  850.     }
  851.     public function getProjectsGlobal($isArchive=false,$spv=null,$search=null,$dev=null,$epc=null,$status = null,$user = null) {
  852.         $qb =  $this->createQueryBuilder('c');
  853.         if($isArchive){
  854.             $qb->andWhere('c.isArchived = 1');
  855.         }else {
  856.             $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  857.         }
  858.         if($search){
  859.             $qb->andWhere('c.name like :search')
  860.                 ->setParameter('search', "%" . $search . "%");
  861.         }
  862.         if($spv){
  863.             $qb->andWhere('c.spv = :spv')
  864.                 ->setParameter('spv',$spv);
  865.         }
  866.         if($user and   (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
  867.             $spvs = $user->getSpv();
  868.             $spvsTab = [];
  869.             foreach($spvs as $item){
  870.                 $spvsTab[] = $item->getId();
  871.             }
  872.             $qb->andWhere('c.spv in (:spvsTab)')
  873.                 ->setParameter('spvsTab',$spvsTab);
  874.         }
  875.         if($user && $user->getIntervenantNum() && $user->getIntervenantNum() != '0'){
  876.             $qb->innerJoin('c.intervenantUser','intervenantUser');
  877.             $qb->andWhere('intervenantUser.intervenant = :user')
  878.                 ->setParameter('user',$user->getId());
  879.         }
  880.         if($user && in_array('ROLE_FOURNISSEUR',$user->getRoles())){
  881.             $qb->innerJoin('c.fournisseurProject','fournisseurProject');
  882.             $qb->innerJoin('fournisseurProject.fournisseur', 'fournisseur');
  883.             $qb->leftJoin('c.fournisseur', 'fournisseurUser');
  884.             $qb->leftJoin('fournisseur.user', 'fournisseurProjectUser');
  885.             $qb->leftJoin('fournisseurUser.user', 'fournisseurUserUser');
  886.             $qb->andWhere('fournisseurProjectUser.id = :userFournisseur or fournisseurUserUser.id = :userFournisseur')
  887.                 ->setParameter('userFournisseur', $user->getId());
  888.         }
  889.         if($dev){
  890.             $qb->andWhere('c.developpeur = :dev')
  891.                 ->setParameter('dev',$dev);
  892.         }
  893.         if($epc){
  894.             $qb->andWhere('c.epc = :epc')
  895.                 ->setParameter('epc',$epc);
  896.         }
  897.         return  $qb->getQuery()->getResult() ;
  898.     }
  899.     public function searchByDoc($docsProject,$spv,$data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
  900.         $qb =  $this->createQueryBuilder('c');
  901.         $query = isset($data['query']) && $data['query'] ? $data['query'] : null;
  902.         $devProject = isset($data['devProject']) && $data['devProject'] ? $data['devProject'] : null;
  903.         $responsableProject = isset($data['responsableProject']) && $data['responsableProject'] ? $data['responsableProject'] : null;
  904.         $responsableFoncierProject = isset($data['responsableFoncierProject']) && $data['responsableFoncierProject'] ? $data['responsableFoncierProject'] : null;
  905.         $responsableDevProject = isset($data['responsableDevProject']) && $data['responsableDevProject'] ? $data['responsableDevProject'] : null;
  906.         $constructeurProject = isset($data['constructeurProject']) && $data['constructeurProject'] ? $data['constructeurProject'] : null;
  907.         if($docsProject){
  908.             $arrayExiste = [];
  909.             $arrayExisteManyToMany = [];
  910.             $strWhere = '';
  911.             $i = 0;
  912.             foreach ($docsProject as $docs){
  913.                 $str = explode("__", $docs);
  914.                 $etapNum = $str[0];
  915.                 $fileName = $str[1];
  916.                 $nameChampManyToMany = isset($str[2])?$str[2]:null;
  917.                 $etapClass = 'App\\Entity\\Etap'.$etapNum;
  918.                 if(in_array($etapClass,$arrayExiste)){
  919.                 }else{
  920.                     $arrayExiste[] = $etapClass;
  921.                     $qb->leftJoin($etapClass, 'etap'.$etapNum, 'WITH', 'etap'.$etapNum.'.project = c.id');
  922.                 }
  923.                 $classMetadata = $this->_em->getClassMetadata($etapClass);
  924.                 if($nameChampManyToMany){
  925.                     $associationMappings = $classMetadata->getAssociationMapping($nameChampManyToMany);
  926.                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  927.                         $etapClassManyToMany = 'etap'.$etapNum.'.'.$nameChampManyToMany ;
  928.                         if(in_array($etapClassManyToMany,$arrayExisteManyToMany)){
  929.                         }else{
  930.                             $qb->leftJoin('etap'.$etapNum.'.'.$nameChampManyToMany, $nameChampManyToMany);
  931.                         }
  932.                         $qb->leftJoin($nameChampManyToMany.'.'.$fileName,  'file_'.$fileName);
  933.                         $strWhereIN = "(file_$fileName.name is not null and (file_$fileName.isArchived is null or file_$fileName.isArchived = 0))";
  934.                         if($i == 0){
  935.                             $strWhere = $strWhereIN ;
  936.                         }else{
  937.                             $strWhere .= ' OR '.$strWhereIN ;
  938.                         }
  939.                     }
  940.                 }else{
  941.                     $associationMappings = $classMetadata->getAssociationMapping($fileName);
  942.                     if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
  943.                         $qb->leftJoin('etap'.$etapNum.'.'.$fileName, 'file_'.$fileName);
  944.                         $strWhereIN = "(file_$fileName.name is not null and (file_$fileName.isArchived is null or file_$fileName.isArchived = 0))";
  945.                         if($i == 0){
  946.                             $strWhere = $strWhereIN ;
  947.                         }else{
  948.                             $strWhere .= ' OR '.$strWhereIN ;
  949.                         }
  950.                     }else{
  951.                         $strWhereIN = "(etap$etapNum.$fileName is not null)";
  952.                         if($i == 0){
  953.                             $strWhere = $strWhereIN ;
  954.                         }else{
  955.                             $strWhere .= ' OR '.$strWhereIN ;
  956.                         }
  957.                     }
  958.                 }
  959.                 if($fileName == 'filePromessebailMultiple'){
  960.                     $strWhereIN = "(c.filePromessebail is  not null)";
  961.                     if($strWhere != ''){
  962.                         $strWhere .= ' OR '.$strWhereIN ;
  963.                     }else{
  964.                         $strWhere .= $strWhereIN ;
  965.                     }
  966.                 }
  967.                 $i++;
  968.             }
  969.             if($strWhere != ''){
  970.                 $qb->andWhere($strWhere);
  971.             }
  972.         }
  973.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  974.         if($spv){
  975.             $qb->andWhere('c.spv in (:spv)')
  976.                 ->setParameter('spv',$spv);
  977.         }
  978.         $spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
  979.         $user = isset($data['user']) && $data['user'] ? $data['user'] : null;
  980.         if($user and   (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
  981.             $qb->andWhere('c.spv in (:spvsTab)')
  982.                 ->setParameter('spvsTab',$spvsTab);
  983.         }
  984.         if($devProject){
  985.             $qb->andWhere('c.developpeur in (:dev)')
  986.                 ->setParameter('dev',$devProject);
  987.         }
  988.         if($responsableProject){
  989.             $qb->innerJoin('c.responsableUser', 'responsable');
  990.             $qb->andWhere('responsable.responsable in (:responsable)')
  991.                 ->setParameter('responsable',$responsableProject);
  992.         }
  993.         if($responsableFoncierProject){
  994.             $qb->innerJoin('c.responsableFoncierUser', 'responsable');
  995.             $qb->andWhere('responsable.responsable in (:responsable)')
  996.                 ->setParameter('responsable',$responsableFoncierProject);
  997.         }
  998.         if($responsableDevProject){
  999.             $qb->innerJoin('c.responsableDeveloppement', 'responsableDev');
  1000.             $qb->andWhere('responsableDev.responsable in (:responsableDevStr)')
  1001.                 ->setParameter('responsableDevStr',$responsableDevProject);
  1002.         }
  1003.         if($constructeurProject){
  1004.             $qb->innerJoin('c.constructeurUser', 'constructeur');
  1005.             $qb->andWhere('constructeur.constructeur in (:constructeur)')
  1006.                 ->setParameter('constructeur',$constructeurProject);
  1007.         }
  1008.         if($count){
  1009.             $qb->select('count(DISTINCT c.id) as result');
  1010.             return $qb->getQuery()->getOneOrNullResult();
  1011.         }
  1012.         else{
  1013.             $qb->select('DISTINCT c');
  1014.             if ($columnOrder) {
  1015.                 if($columnOrder == 'name'){
  1016.                     $qb->orderBy("c.$columnOrder", $dirOrder);
  1017.                 }
  1018.                 if($columnOrder == 'status'){
  1019.                     $qb->orderBy("c.status", $dirOrder);
  1020.                 }
  1021.                 if($columnOrder == 'spv'){
  1022.                     $qb->orderBy("c.spv", $dirOrder);
  1023.                 }
  1024.                 if($columnOrder == 'developpeur'){
  1025.                     $qb->orderBy("c.developpeur", $dirOrder);
  1026.                 }
  1027.                 if($columnOrder == 'entreprise'){
  1028.                     $qb->leftJoin('c.developpeur','dev');
  1029.                     $qb->orderBy("dev.entreprise", $dirOrder);
  1030.                 }
  1031.                 if($columnOrder == 'createdAt'){
  1032.                     $qb->orderBy("c.createdAt", $dirOrder);
  1033.                 }
  1034.                 if($columnOrder == 'archiveAt'){
  1035.                     $qb->orderBy("c.archiveAt", $dirOrder);
  1036.                 }
  1037.                 if($columnOrder == 'commentArchive'){
  1038.                     $qb->orderBy("c.commentArchive", $dirOrder);
  1039.                 }
  1040.                 if($columnOrder == 'statusTrackerActuel'){
  1041.                     $qb->orderBy("c.statusTrackerActuel", $dirOrder);
  1042.                 }
  1043.             }
  1044.             if ($max) {
  1045.                 $preparedQuery = $qb->getQuery()
  1046.                     ->setMaxResults($max)
  1047.                     ->setFirstResult($page * $max)
  1048.                 ;
  1049.             } else {
  1050.                 $preparedQuery = $qb->getQuery();
  1051.             }
  1052.             return $getResult ? $preparedQuery->getResult() : $preparedQuery;
  1053.         }
  1054.     }
  1055.     public function searchByDocPreFilter($spv,$data) {
  1056.         $qb =  $this->createQueryBuilder('c');
  1057.         $query = isset($data['query']) && $data['query'] ? $data['query'] : null;
  1058.         $devProject = isset($data['devProject']) && $data['devProject'] ? $data['devProject'] : null;
  1059.         $responsableProject = isset($data['responsableProject']) && $data['responsableProject'] ? $data['responsableProject'] : null;
  1060.         $responsableFoncierProject = isset($data['responsableFoncierProject']) && $data['responsableFoncierProject'] ? $data['responsableFoncierProject'] : null;
  1061.         $responsableDevProject = isset($data['responsableDevProject']) && $data['responsableDevProject'] ? $data['responsableDevProject'] : null;
  1062.         $constructeurProject = isset($data['constructeurProject']) && $data['constructeurProject'] ? $data['constructeurProject'] : null;
  1063.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1064.         if($spv){
  1065.             $qb->andWhere('c.spv = :spv')
  1066.                 ->setParameter('spv',$spv);
  1067.         }
  1068.         $spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
  1069.         $user = isset($data['user']) && $data['user'] ? $data['user'] : null;
  1070.         if($user and   (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
  1071.             $qb->andWhere('c.spv in (:spvsTab)')
  1072.                 ->setParameter('spvsTab',$spvsTab);
  1073.         }
  1074.         if($devProject){
  1075.             $qb->andWhere('c.developpeur = :dev')
  1076.                 ->setParameter('dev',$devProject);
  1077.         }
  1078.         if($responsableProject){
  1079.             $qb->innerJoin('c.responsableUser', 'responsable');
  1080.             $qb->andWhere('responsable.responsable in (:responsable)')
  1081.                 ->setParameter('responsable',$responsableProject);
  1082.         }
  1083.         if($responsableFoncierProject){
  1084.             $qb->innerJoin('c.responsableFoncierUser', 'responsable');
  1085.             $qb->andWhere('responsable.responsable in (:responsable)')
  1086.                 ->setParameter('responsable',$responsableFoncierProject);
  1087.         }
  1088.         if($responsableDevProject){
  1089.             $qb->innerJoin('c.responsableDeveloppement', 'responsableDev');
  1090.             $qb->andWhere('responsableDev.responsable in (:responsableDevStr)')
  1091.                 ->setParameter('responsableDevStr',$responsableDevProject);
  1092.         }
  1093.         if($constructeurProject){
  1094.             $qb->innerJoin('c.constructeurUser', 'constructeur');
  1095.             $qb->andWhere('constructeur.constructeur in (:constructeur)')
  1096.                 ->setParameter('constructeur',$constructeurProject);
  1097.         }
  1098.         return  $qb->getQuery()->getResult();
  1099.     }
  1100.     public function searchByIds($data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
  1101.         $qb =  $this->createQueryBuilder('c');
  1102.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1103.         if($data and count($data) > 0){
  1104.             $qb->andWhere('c.id in (:projectIds)')
  1105.                 ->setParameter('projectIds',$data);
  1106.         }else{
  1107.             $qb->andWhere('c.id = 0') ;
  1108.         }
  1109.         if($count){
  1110.             $qb->select('count(DISTINCT c.id) as result');
  1111.             return $qb->getQuery()->getOneOrNullResult();
  1112.         }
  1113.         else{
  1114.             $qb->select('DISTINCT c');
  1115.             if ($columnOrder) {
  1116.                 if($columnOrder == 'name'){
  1117.                     $qb->orderBy("c.$columnOrder", $dirOrder);
  1118.                 }
  1119.                 if($columnOrder == 'status'){
  1120.                     $qb->orderBy("c.status", $dirOrder);
  1121.                 }
  1122.                 if($columnOrder == 'spv'){
  1123.                     $qb->orderBy("c.spv", $dirOrder);
  1124.                 }
  1125.                 if($columnOrder == 'developpeur'){
  1126.                     $qb->orderBy("c.developpeur", $dirOrder);
  1127.                 }
  1128.                 if($columnOrder == 'entreprise'){
  1129.                     $qb->leftJoin('c.developpeur','dev');
  1130.                     $qb->orderBy("dev.entreprise", $dirOrder);
  1131.                 }
  1132.                 if($columnOrder == 'createdAt'){
  1133.                     $qb->orderBy("c.createdAt", $dirOrder);
  1134.                 }
  1135.                 if($columnOrder == 'archiveAt'){
  1136.                     $qb->orderBy("c.archiveAt", $dirOrder);
  1137.                 }
  1138.                 if($columnOrder == 'commentArchive'){
  1139.                     $qb->orderBy("c.commentArchive", $dirOrder);
  1140.                 }
  1141.                 if($columnOrder == 'statusTrackerActuel'){
  1142.                     $qb->orderBy("c.statusTrackerActuel", $dirOrder);
  1143.                 }
  1144.             }
  1145.             if ($max) {
  1146.                 $preparedQuery = $qb->getQuery()
  1147.                     ->setMaxResults($max)
  1148.                     ->setFirstResult($page * $max)
  1149.                 ;
  1150.             } else {
  1151.                 $preparedQuery = $qb->getQuery();
  1152.             }
  1153.             return $getResult ? $preparedQuery->getResult() : $preparedQuery;
  1154.         }
  1155.     }
  1156.     public function getProjectDocs($docsProject,$spv,$projectIds,$devProject=null) {
  1157.         $qb =  $this->createQueryBuilder('c');
  1158. //        if($docsProject){
  1159. //            $arrayExiste = [];
  1160. //            $arrayExisteManyToMany = [];
  1161. //            $strWhere = '';
  1162. //            $i = 0;
  1163. //            foreach ($docsProject as $docs){
  1164. //                $str = explode("__", $docs);
  1165. //                $etapNum = $str[0];
  1166. //                $fileName = $str[1];
  1167. //                $nameChampManyToMany = isset($str[2])?$str[2]:null;
  1168. //                $etapClass = 'App\\Entity\\Etap'.$etapNum;
  1169. //                if(in_array($etapClass,$arrayExiste)){
  1170. //
  1171. //                }else{
  1172. //                    $arrayExiste[] = $etapClass;
  1173. //                    $qb->leftJoin($etapClass, 'etap'.$etapNum, 'WITH', 'etap'.$etapNum.'.project = c.id');
  1174. //                }
  1175. //                $classMetadata = $this->_em->getClassMetadata($etapClass);
  1176. //                if($nameChampManyToMany){
  1177. //                    $associationMappings = $classMetadata->getAssociationMapping($nameChampManyToMany);
  1178. //                    if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
  1179. //                        $etapClassManyToMany = 'etap'.$etapNum.'.'.$nameChampManyToMany ;
  1180. //                        if(in_array($etapClassManyToMany,$arrayExisteManyToMany)){
  1181. //
  1182. //                        }else{
  1183. //                            $qb->leftJoin('etap'.$etapNum.'.'.$nameChampManyToMany, $nameChampManyToMany);
  1184. //                        }
  1185. //                        $qb->leftJoin($nameChampManyToMany.'.'.$fileName,  'file_'.$fileName);
  1186. //                        $strWhereIN = "(file_$fileName.name is not null and (file_$fileName.isArchived is null or file_$fileName.isArchived = 0))";
  1187. //                        if($i == 0){
  1188. //                            $strWhere = $strWhereIN ;
  1189. //                        }else{
  1190. //                            $strWhere .= ' OR '.$strWhereIN ;
  1191. //                        }
  1192. //                    }
  1193. //                }else {
  1194. //                    $associationMappings = $classMetadata->getAssociationMapping($fileName);
  1195. //                    if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
  1196. //                        $qb->leftJoin('etap' . $etapNum . '.' . $fileName, 'file_' . $fileName);
  1197. //                        $strWhereIN = "(file_$fileName.name is not null and (file_$fileName.isArchived is null or file_$fileName.isArchived = 0))";
  1198. //                        if ($i == 0) {
  1199. //                            $strWhere = $strWhereIN;
  1200. //                        } else {
  1201. //                            $strWhere .= ' OR ' . $strWhereIN;
  1202. //                        }
  1203. //                    } else {
  1204. //                        $strWhereIN = "(etap$etapNum.$fileName is not null)";
  1205. //                        if ($i == 0) {
  1206. //                            $strWhere = $strWhereIN;
  1207. //                        } else {
  1208. //                            $strWhere .= ' OR ' . $strWhereIN;
  1209. //                        }
  1210. //                    }
  1211. //                }
  1212. //                if($fileName == 'filePromessebailMultiple'){
  1213. //                    $strWhereIN = "(c.filePromessebail is  not null)";
  1214. //                    if($strWhere != ''){
  1215. //                        $strWhere .= ' OR '.$strWhereIN ;
  1216. //                    }else{
  1217. //                        $strWhere .= $strWhereIN ;
  1218. //                    }
  1219. //                }
  1220. //                $i++;
  1221. //            }
  1222. //            if($strWhere != ''){
  1223. //                $qb->andWhere($strWhere);
  1224. //            }
  1225. //        }
  1226.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1227.         if($projectIds and count($projectIds) > 0){
  1228.             $qb->andWhere('c.token in (:projectIds)')
  1229.                 ->setParameter('projectIds',$projectIds);
  1230.         }
  1231.         if($spv){
  1232.             $qb->andWhere('c.spv = :spv')
  1233.                 ->setParameter('spv',$spv);
  1234.         }
  1235.         if($devProject){
  1236.             $qb->andWhere('c.developpeur = :dev')
  1237.                 ->setParameter('dev',$devProject);
  1238.         }
  1239.         $qb->select('DISTINCT c');
  1240.         return  $qb->getQuery()->getResult() ;
  1241.     }
  1242.     public function findAllProjectActive(){
  1243.         $qb =  $this->createQueryBuilder('c');
  1244.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1245.         return  $qb->getQuery()->getResult();
  1246.     }
  1247.     public function findAllProjectActiveMiseEnService($date1,$date2,$developpeur=null,$responsableConstruction=null,$spvId=null,$schemaConstruction=null,$constructeurRapport=null){
  1248.         $qb =  $this->createQueryBuilder('c');
  1249.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1250.         $qb->leftJoin(Etap14::class, 'etap14', 'WITH', 'etap14.project = c.id');
  1251.         $qb->andWhere('etap14.dateMiseEnService is not null  or c.dateMiseEnService is not null');
  1252.         $qb->andWhere('c.dateMiseEnService  BETWEEN :date1 AND :date2' )
  1253.             ->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
  1254.             ->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
  1255.         if($developpeur){
  1256.             $qb->andWhere('c.developpeur = :developpeur')
  1257.                 ->setParameter('developpeur',$developpeur->getId());
  1258.         }
  1259.         if($responsableConstruction){
  1260.             $qb->innerJoin('c.responsableUser', 'responsable');
  1261.             $qb->andWhere('responsable.responsable in (:responsable)')
  1262.                 ->setParameter('responsable',$responsableConstruction);
  1263.         }
  1264.         if($spvId){
  1265.             $qb->andWhere('c.spv in (:spv)')
  1266.                 ->setParameter('spv',$spvId);
  1267.         }
  1268.         if($schemaConstruction){
  1269.             $qb->andWhere('c.schemaConstruction = :schemaConstruction')
  1270.                 ->setParameter('schemaConstruction',$schemaConstruction);
  1271.         }
  1272.         if($constructeurRapport){
  1273.             $qb->innerJoin('c.fournisseurProject','fournisseurProject');
  1274.             $qb->andWhere('((fournisseurProject.titre = :charpentier or fournisseurProject.titre = :installateur ) and fournisseurProject.fournisseur = :fournisseur) or (c.fournisseur = :fournisseur)')
  1275.                 ->setParameter('charpentier','Charpentier')
  1276.                 ->setParameter('installateur','Installateur')
  1277.                 ->setParameter('fournisseur',$constructeurRapport);
  1278.         }
  1279.         return  $qb->getQuery()->getResult();
  1280.     }
  1281.     public function findAllProjectExploitation(){
  1282.         $qb =  $this->createQueryBuilder('c');
  1283.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1284.         $qb->andWhere('c.statusAdministratif = :status')
  1285.             ->setParameter('status', Project::STATUS_CUSTOM_EXPLOITATION);
  1286.         return  $qb->getQuery()->getResult();
  1287.     }
  1288.     public function searchCentrale($data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
  1289.         $qb =  $this->createQueryBuilder('c');
  1290.         $query = isset($data['query']) && $data['query'] ? $data['query'] : null;
  1291.         $isParametrer = isset($data['isParametrer']) ? $data['isParametrer'] : null;
  1292.         $tabDate = isset($data['dateTab']) && $data['dateTab'] ? new \DateTime($data['dateTab']) : null;
  1293.         $qb->leftJoin('c.spv','spv');
  1294.         $qb->andWhere('c.name like :query or spv.name like :query  ')
  1295.             ->setParameter('query', "%" . $query . "%")
  1296.         ;
  1297.         if($tabDate){
  1298.             $qb->andWhere('c.dateMiseEnService  LIKE :searchTabDate')
  1299.                 ->setParameter('searchTabDate','%'.$tabDate->format('Y-m-d').'%');
  1300.         }
  1301.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1302.         $qb->andWhere('c.statusAdministratif = :status')
  1303.             ->setParameter('status', Project::STATUS_CUSTOM_EXPLOITATION);
  1304.         if($isParametrer === '1' || $isParametrer === '0'){
  1305.             if($isParametrer === '1'){
  1306.                 $qb->innerJoin(ParametrageLoyer::class, 'parametrage', 'WITH', 'parametrage.centrale = c.id');
  1307.             }else{
  1308.                 $subquery = $this->_em->createQueryBuilder();
  1309.                 $subquery->select("centrale.id");
  1310.                 $subquery->from(ParametrageLoyer::class,"p");
  1311.                 $subquery->innerJoin('p.centrale','centrale');
  1312.                 $subqueryResult = $subquery->getQuery()->getResult();
  1313.                 $qb->andWhere('c.id not in (:sub)')
  1314.                    ->setParameter('sub', array_values($subqueryResult));
  1315.             }
  1316.         }
  1317.         $spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
  1318.         $user = isset($data['user']) && $data['user'] ? $data['user'] : null;
  1319.         if($user and   (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
  1320.             $qb->andWhere('c.spv in (:spvsTab)')
  1321.                 ->setParameter('spvsTab',$spvsTab);
  1322.         }
  1323.         if($spvsTab && !empty(array_filter($spvsTab))) {
  1324.             $qb->andWhere('c.spv IN (:spv)')
  1325.                 ->setParameter('spv', $spvsTab);
  1326.         }
  1327.         if($count){
  1328.             $qb->select('count(DISTINCT c.id) as result');
  1329.             return $qb->getQuery()->getOneOrNullResult();
  1330.         }else{
  1331.             $qb->select('DISTINCT c');
  1332.             if ($columnOrder) {
  1333.                 if($columnOrder == 'name'){
  1334.                     $qb->orderBy("c.$columnOrder", $dirOrder);
  1335.                 }
  1336.                 if($columnOrder == 'spv'){
  1337.                     $qb->orderBy("c.spv", $dirOrder);
  1338.                 }
  1339.                 if($columnOrder == 'dateMiseEnService'){
  1340.                     $qb->orderBy("c.dateMiseEnService", $dirOrder);
  1341.                 }
  1342.                 if($columnOrder == 'entreprise'){
  1343.                     $qb->leftJoin('c.developpeur','dev');
  1344.                     $qb->orderBy("dev.entreprise", $dirOrder);
  1345.                 }
  1346.                 if($columnOrder == 'capacite'){
  1347.                     $qb->orderBy("c.capacite", $dirOrder);
  1348.                 }
  1349.             }
  1350.             if ($max) {
  1351.                 $preparedQuery = $qb->getQuery()
  1352.                     ->setMaxResults($max)
  1353.                     ->setFirstResult($page * $max)
  1354.                 ;
  1355.             } else {
  1356.                 $preparedQuery = $qb->getQuery();
  1357.             }
  1358.             return $getResult ? $preparedQuery->getResult() : $preparedQuery;
  1359.         }
  1360.     }
  1361.     public function findAllProjectActiveBailSigne($date1,$date2,$developpeur=null,$responsableConstruction=null,$spvId=null,$schemaConstruction=null,$constructeurRapport=null){
  1362.         $qb =  $this->createQueryBuilder('c');
  1363.         $qb->addSelect('fileBailSigneMultiple.createdAt as createdAtBailSigne,c.capacite');
  1364.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1365.         $qb->leftJoin(Etap7::class, 'etap7', 'WITH', 'etap7.project = c.id');
  1366.         $qb->leftJoin('etap7.fileBailSigneMultiple','fileBailSigneMultiple');
  1367.         $qb->andWhere('(fileBailSigneMultiple.isArchived = 0 or fileBailSigneMultiple.isArchived is null) and fileBailSigneMultiple.createdAt  BETWEEN :date1 AND :date2' )
  1368.             ->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
  1369.             ->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
  1370.         if($developpeur){
  1371.             $qb->andWhere('c.developpeur = :developpeur')
  1372.                 ->setParameter('developpeur',$developpeur->getId());
  1373.         }
  1374.         if($responsableConstruction){
  1375.             $qb->innerJoin('c.responsableUser', 'responsable');
  1376.             $qb->andWhere('responsable.responsable in (:responsable)')
  1377.                 ->setParameter('responsable',$responsableConstruction);
  1378.         }
  1379.         if($spvId){
  1380.             $qb->andWhere('c.spv in (:spv)')
  1381.                 ->setParameter('spv',$spvId);
  1382.         }
  1383.         if($schemaConstruction){
  1384.             $qb->andWhere('c.schemaConstruction = :schemaConstruction')
  1385.                 ->setParameter('schemaConstruction',$schemaConstruction);
  1386.         }
  1387.         if($constructeurRapport){
  1388.             $qb->innerJoin('c.fournisseurProject','fournisseurProject');
  1389.             $qb->andWhere('((fournisseurProject.titre = :charpentier or fournisseurProject.titre = :installateur ) and fournisseurProject.fournisseur = :fournisseur) or (c.fournisseur = :fournisseur)')
  1390.                 ->setParameter('charpentier','Charpentier')
  1391.                 ->setParameter('installateur','Installateur')
  1392.                 ->setParameter('fournisseur',$constructeurRapport);
  1393.         }
  1394.         return  $qb->getQuery()->getResult();
  1395.     }
  1396.     public function findAllArchives($date1,$date2,$developpeur=null,$responsableConstruction=null,$spvId=null,$schemaConstruction=null,$constructeurRapport=null){
  1397.         $qb =  $this->createQueryBuilder('c');
  1398.         $qb->andWhere('c.isArchived = 1');
  1399.         $qb->andWhere('c.archiveAt  BETWEEN :date1 AND :date2' )
  1400.             ->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
  1401.             ->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
  1402.         if($developpeur){
  1403.             $qb->andWhere('c.developpeur = :developpeur')
  1404.                 ->setParameter('developpeur',$developpeur->getId());
  1405.         }
  1406.         if($responsableConstruction){
  1407.             $qb->innerJoin('c.responsableUser', 'responsable');
  1408.             $qb->andWhere('responsable.responsable in (:responsable)')
  1409.                 ->setParameter('responsable',$responsableConstruction);
  1410.         }
  1411.         if($spvId){
  1412.             $qb->andWhere('c.spv in (:spv)')
  1413.                 ->setParameter('spv',$spvId);
  1414.         }
  1415.         if($schemaConstruction){
  1416.             $qb->andWhere('c.schemaConstruction = :schemaConstruction')
  1417.                 ->setParameter('schemaConstruction',$schemaConstruction);
  1418.         }
  1419.         if($constructeurRapport){
  1420.             $qb->innerJoin('c.fournisseurProject','fournisseurProject');
  1421.             $qb->andWhere('((fournisseurProject.titre = :charpentier or fournisseurProject.titre = :installateur ) and fournisseurProject.fournisseur = :fournisseur) or (c.fournisseur = :fournisseur)')
  1422.                 ->setParameter('charpentier','Charpentier')
  1423.                 ->setParameter('installateur','Installateur')
  1424.                 ->setParameter('fournisseur',$constructeurRapport);
  1425.         }
  1426.         return  $qb->getQuery()->getResult();
  1427.     }
  1428.     public function findAllAnnules($date1,$date2,$developpeur=null,$responsableConstruction=null,$spvId=null,$schemaConstruction=null,$constructeurRapport=null){
  1429.         $qb =  $this->createQueryBuilder('c');
  1430.         $qb->andWhere('c.status in (:statusRefuse)');
  1431.         $qb->andWhere('c.refuseAt  BETWEEN :date1 AND :date2' )
  1432.             ->setParameter('statusRefuse', [Project::STATUS_REFUSE])
  1433.             ->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
  1434.             ->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
  1435.         if($developpeur){
  1436.             $qb->andWhere('c.developpeur = :developpeur')
  1437.                 ->setParameter('developpeur',$developpeur->getId());
  1438.         }
  1439.         if($responsableConstruction){
  1440.             $qb->innerJoin('c.responsableUser', 'responsable');
  1441.             $qb->andWhere('responsable.responsable in (:responsable)')
  1442.                 ->setParameter('responsable',$responsableConstruction);
  1443.         }
  1444.         if($spvId){
  1445.             $qb->andWhere('c.spv in (:spv)')
  1446.                 ->setParameter('spv',$spvId);
  1447.         }
  1448.         if($schemaConstruction){
  1449.             $qb->andWhere('c.schemaConstruction = :schemaConstruction')
  1450.                 ->setParameter('schemaConstruction',$schemaConstruction);
  1451.         }
  1452.         if($constructeurRapport){
  1453.             $qb->innerJoin('c.fournisseurProject','fournisseurProject');
  1454.             $qb->andWhere('((fournisseurProject.titre = :charpentier or fournisseurProject.titre = :installateur ) and fournisseurProject.fournisseur = :fournisseur) or (c.fournisseur = :fournisseur)')
  1455.                 ->setParameter('charpentier','Charpentier')
  1456.                 ->setParameter('installateur','Installateur')
  1457.                 ->setParameter('fournisseur',$constructeurRapport);
  1458.         }
  1459.         return  $qb->getQuery()->getResult();
  1460.     }
  1461.     public function findAllProjectByStadeConstruction($stadeConstruction,$date1,$date2,$developpeur=null){
  1462.         $qb =  $this->createQueryBuilder('c');
  1463.         $qb->andWhere('c.stadeConstruction in (:stadeConstruction)')
  1464.             ->setParameter('stadeConstruction',$stadeConstruction);
  1465.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1466.         $qb->andWhere('c.stadeConstructionDate  BETWEEN :date1 AND :date2' )
  1467.             ->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
  1468.             ->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
  1469.         if($developpeur){
  1470.             $qb->andWhere('c.developpeur = :developpeur')
  1471.                 ->setParameter('developpeur',$developpeur->getId());
  1472.         }
  1473.         return  $qb->getQuery()->getResult();
  1474.     }
  1475.     public function findCodeProjectByYearAndDev($year,$dev){
  1476.         $qb =  $this->createQueryBuilder('c');
  1477.         $qb->where('c.compteurErpiAnnee = :year')
  1478.             ->setParameter('year',$year);
  1479.         $qb->innerJoin('c.developpeur','dev');
  1480.         $qb->andWhere('dev.id = :developpeur')
  1481.             ->setParameter('developpeur',$dev);
  1482.         $qb->andWhere('c.codeProject is not null');
  1483.         $qb->setMaxResults(1);
  1484.         $qb->orderBy('c.compteurErpiNbr','desc');
  1485.         return  $qb->getQuery()->getOneOrNullResult();
  1486.     }
  1487.     public function findAllProjectActiveNew($date1,$date2,$developpeur=null,$responsableConstruction=null,$spvId=null,$schemaConstruction=null,$constructeurRapport=null){
  1488.         $qb =  $this->createQueryBuilder('c');
  1489.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1490.         $qb->andWhere('c.createdAt  BETWEEN :date1 AND :date2' )
  1491.             ->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
  1492.             ->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
  1493.         if($developpeur){
  1494.             $qb->andWhere('c.developpeur = :developpeur')
  1495.                 ->setParameter('developpeur',$developpeur->getId());
  1496.         }
  1497.         if($responsableConstruction){
  1498.             $qb->innerJoin('c.responsableUser', 'responsable');
  1499.             $qb->andWhere('responsable.responsable in (:responsable)')
  1500.                 ->setParameter('responsable',$responsableConstruction);
  1501.         }
  1502.         if($spvId){
  1503.             $qb->andWhere('c.spv in (:spv)')
  1504.                 ->setParameter('spv',$spvId);
  1505.         }
  1506.         if($schemaConstruction){
  1507.             $qb->andWhere('c.schemaConstruction = :schemaConstruction')
  1508.                 ->setParameter('schemaConstruction',$schemaConstruction);
  1509.         }
  1510.         if($constructeurRapport){
  1511.             $qb->innerJoin('c.fournisseurProject','fournisseurProject');
  1512.             $qb->andWhere('((fournisseurProject.titre = :charpentier or fournisseurProject.titre = :installateur ) and fournisseurProject.fournisseur = :fournisseur) or (c.fournisseur = :fournisseur)')
  1513.                 ->setParameter('charpentier','Charpentier')
  1514.                 ->setParameter('installateur','Installateur')
  1515.                 ->setParameter('fournisseur',$constructeurRapport);
  1516.         }
  1517.         return  $qb->getQuery()->getResult();
  1518.     }
  1519.     public function getCentrales($data) {
  1520.         $qb =  $this->createQueryBuilder('c');
  1521.         $query = isset($data['query']) && $data['query'] ? $data['query'] : null;
  1522.         $qb->leftJoin('c.spv','spv');
  1523.         $qb->andWhere('c.name like :query  ')
  1524.             ->setParameter('query', "%" . $query . "%")
  1525.         ;
  1526.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1527.         $qb->andWhere('c.statusAdministratif = :status')
  1528.             ->setParameter('status', Project::STATUS_CUSTOM_EXPLOITATION);
  1529.         $spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
  1530.         $user = isset($data['user']) && $data['user'] ? $data['user'] : null;
  1531.         $centraleRapportSuivi = isset($data['centraleRapportSuivi']) && $data['centraleRapportSuivi'] ? $data['centraleRapportSuivi'] : null;
  1532.         if($user and   (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
  1533.             $qb->andWhere('c.spv in (:spvsTab)')
  1534.                 ->setParameter('spvsTab',$spvsTab);
  1535.         }
  1536.         if($centraleRapportSuivi){
  1537.             $qb->andWhere('c.token in (:centraleRapportSuivi)')
  1538.                 ->setParameter('centraleRapportSuivi',$centraleRapportSuivi);
  1539.         }
  1540.         return $qb->getQuery()->getResult();
  1541.     }
  1542.     public function searchCentraleRapportById($data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
  1543.         $qb =  $this->createQueryBuilder('c');
  1544.         $qb->andWhere('c.id in (:ids)')
  1545.             ->setParameter('ids',$data);
  1546.         if($count){
  1547.             $qb->select('count(DISTINCT c.id) as result');
  1548.             return $qb->getQuery()->getOneOrNullResult();
  1549.         }else{
  1550.             $qb->select('DISTINCT c');
  1551.             if ($columnOrder) {
  1552.                 if($columnOrder == 'name'){
  1553.                     $qb->orderBy("c.$columnOrder", $dirOrder);
  1554.                 }
  1555.                 if($columnOrder == 'dateMiseEnService'){
  1556.                     $qb->orderBy("c.dateMiseEnService", $dirOrder);
  1557.                 }
  1558.             }
  1559.             if ($max) {
  1560.                 $preparedQuery = $qb->getQuery()
  1561.                     ->setMaxResults($max)
  1562.                     ->setFirstResult($page * $max)
  1563.                 ;
  1564.             } else {
  1565.                 $preparedQuery = $qb->getQuery();
  1566.             }
  1567.             return $getResult ? $preparedQuery->getResult() : $preparedQuery;
  1568.         }
  1569.     }
  1570.     public function getCentraleRapportById($data) {
  1571.         $qb =  $this->createQueryBuilder('c');
  1572.         $qb->andWhere('c.id in (:ids)')
  1573.             ->setParameter('ids',$data);
  1574.         return  $qb->getQuery()->getResult();
  1575.     }
  1576.     public function searchForCarte($isArchive = false,$status,$statusCustom=null,$spv,$data) {
  1577.         $qb =  $this->createQueryBuilder('c');
  1578.         $query = isset($data['query']) && $data['query'] ? $data['query'] : null;
  1579.         $statusAdministratifProject = isset($data['statusAdministratifProject']) && $data['statusAdministratifProject'] ? $data['statusAdministratifProject'] : null;
  1580.         $statusTrackerProject = isset($data['statusTrackerProject']) && $data['statusTrackerProject'] ? $data['statusTrackerProject'] : null;
  1581.         $stadeConstruction = isset($data['stadeConstruction']) && $data['stadeConstruction'] ? $data['stadeConstruction'] : null;
  1582.         $statusUrbanisme = isset($data['statusUrbanisme']) && $data['statusUrbanisme'] ? $data['statusUrbanisme'] : null;
  1583.         $statusFoncier1 = isset($data['statusFoncier1']) && $data['statusFoncier1'] ? $data['statusFoncier1'] : null;
  1584.         $statusFoncier2 = isset($data['statusFoncier2']) && $data['statusFoncier2'] ? $data['statusFoncier2'] : null;
  1585.         $statusFoncier3 = isset($data['statusFoncier3']) && $data['statusFoncier3'] ? $data['statusFoncier3'] : null;
  1586.         $typologieProject = isset($data['typologieProject']) && $data['typologieProject'] ? $data['typologieProject'] : null;
  1587.         $devProject = isset($data['devProject']) && $data['devProject'] ? $data['devProject'] : null;
  1588.         $entrepriseProject = isset($data['entrepriseProject']) && $data['entrepriseProject'] ? $data['entrepriseProject'] : null;
  1589.         $responsableProject = isset($data['responsableProject']) && $data['responsableProject'] ? $data['responsableProject'] : null;
  1590.         $responsableFoncierProject = isset($data['responsableFoncierProject']) && $data['responsableFoncierProject'] ? $data['responsableFoncierProject'] : null;
  1591.         $responsableDevProject = isset($data['responsableDevProject']) && $data['responsableDevProject'] ? $data['responsableDevProject'] : null;
  1592.         $constructeurProject = isset($data['constructeurProject']) && $data['constructeurProject'] ? $data['constructeurProject'] : null;
  1593.         $intervenantProject = isset($data['intervenantProject']) && $data['intervenantProject'] ? $data['intervenantProject'] : null;
  1594.         $achatLocation = isset($data['achatLocation']) && $data['achatLocation'] ? $data['achatLocation'] : null;
  1595.         if($achatLocation && $achatLocation != 0){
  1596.             if($achatLocation == Project::ACHAT){
  1597.                 $qb->andWhere('c.achatLocation = :achatLocation')
  1598.                     ->setParameter('achatLocation',$achatLocation);
  1599.             }else{
  1600.                 $qb->andWhere('(c.achatLocation = :achatLocation) or (c.achatLocation is null)')
  1601.                     ->setParameter('achatLocation',Project::LOCATION);
  1602.             }
  1603.         }
  1604.         $qb->leftJoin('c.familleProject','familleProject');
  1605.         $qb->leftJoin('c.typologieProject','typologieProject');
  1606.         $qb->leftJoin('c.typeBatimentProject','typeBatimentProject');
  1607.         $qb->leftJoin(Etap5::class, 'etap5', 'WITH', 'etap5.project = c.id');
  1608.         $qb->leftJoin(Etap6::class, 'etap6', 'WITH', 'etap6.project = c.id');
  1609.         $qb->leftJoin(Etap8::class, 'etap8', 'WITH', 'etap8.project = c.id');
  1610.         $qb->leftJoin(Etap14::class, 'etap14', 'WITH', 'etap14.project = c.id');
  1611.         $qb->leftJoin(Etap15::class, 'etap15', 'WITH', 'etap15.project = c.id');
  1612.         $qb->leftJoin(Etap12::class, 'etap12', 'WITH', 'etap12.project = c.id');
  1613.         $qb->leftJoin(Etap160::class, 'etap160', 'WITH', 'etap160.project = c.id');
  1614.         $qb->leftJoin(Etap10::class, 'etap10', 'WITH', 'etap10.project = c.id');
  1615.         $qb->leftJoin('etap12.numeroCardiMultiple','numeroCardiEntity');
  1616.         $qb->leftJoin('etap15.informationMultiple','informationEtap15');
  1617.         $qb->leftJoin(Etap24::class, 'etap24', 'WITH', 'etap24.project = c.id');
  1618.         $qb->leftJoin('etap24.etap24Champs','etap24Champs');
  1619.         $qb->leftJoin('etap24Champs.etap26Champs','etap26Champs');
  1620.         $qb->andWhere('c.name like :query or familleProject.name like :query or typologieProject.name like :query or typeBatimentProject.name like :query
  1621.          or c.adresse like :query or c.city like :query  or c.codePostal like :query  or c.numParcelle like :query  or etap5.typeBail like :query  or etap6.nomNotaire like :query 
  1622.          or etap8.siretEts like :query or etap14.adresseMiseEnService like :query or etap14.codePostalMiseEnService like :query or etap14.cityMiseEnService like :query 
  1623.          or etap14.firstnameProprietaire like :query or etap14.lastnameProprietaire like :query or etap14.phoneProprietaire like :query or etap14.emailProprietaire like :query
  1624.          or etap15.numeroContratAchat like :query  or numeroCardiEntity.numeroCardi like :query  or numeroCardiEntity.identifiantEnedis like :query
  1625.         or informationEtap15.numeroContratAchat like :query or informationEtap15.tarifContratAchat like :query or etap10.referenceEnedis like :query
  1626.         or etap26Champs.numeroContratAchat1 like :query or etap26Champs.numeroContratAchat2 like :query           
  1627.         ')
  1628.             ->setParameter('query', "%" . $query . "%")
  1629.         ;
  1630.         if($isArchive){
  1631.             $qb->andWhere('c.isArchived = 1');
  1632.         }else{
  1633. //            if($query){
  1634. //
  1635. //            }else{
  1636.                 $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1637. //            }
  1638.         }
  1639.         if($statusAdministratifProject){
  1640.             $qb->andWhere('c.statusAdministratif in (:statusAdministratif)')
  1641.                 ->setParameter('statusAdministratif',$statusAdministratifProject);
  1642.         }
  1643.         if($statusTrackerProject){
  1644.             $qb->andWhere('c.statusTrackerActuel in (:statusTracker)')
  1645.                 ->setParameter('statusTracker',$statusTrackerProject);
  1646.         }
  1647.         if($stadeConstruction){
  1648.             $qb->andWhere('c.statusTrackerActuelConstruction in (:stadeConstruction)')
  1649.                 ->setParameter('stadeConstruction',$stadeConstruction);
  1650.         }
  1651.         if($statusUrbanisme){
  1652.             $qb->leftJoin(StatusUrbanisme::class, 'statusUrbanisme', 'WITH', 'statusUrbanisme.project = c.id');
  1653.             $str = '';
  1654.             foreach ($statusUrbanisme as $key => $item){
  1655.                 if($key == 0){
  1656.                     $str .=  '(statusUrbanisme.statusStr like :statusUrbanisme'.$key .')' ;
  1657.                 }else{
  1658.                     $str .=  ' OR (statusUrbanisme.statusStr like :statusUrbanisme'.$key.')' ;
  1659.                 }
  1660.             }
  1661.             if($str != ''){
  1662.                 $qb->andWhere($str);
  1663.                 foreach ($statusUrbanisme as $key => $item) {
  1664.                     $qb->setParameter('statusUrbanisme'.$key, '%'.$item.'%');
  1665.                 }
  1666.             }
  1667.         }
  1668.         if($statusFoncier1 || $statusFoncier2 || $statusFoncier3){
  1669.             $qb->leftJoin(StatusFoncier::class, 'statusFoncier', 'WITH', 'statusFoncier.project = c.id');
  1670.             if($statusFoncier1){
  1671.                 $qb->andWhere('statusFoncier.statusStr1 like :statusStr1');
  1672.                 $qb->setParameter('statusStr1', '%'.$statusFoncier1.'%');
  1673.             }
  1674.             if($statusFoncier2){
  1675.                 $qb->andWhere('statusFoncier.statusStr2 like :statusStr2');
  1676.                 $qb->setParameter('statusStr2', '%'.$statusFoncier2.'%');
  1677.             }
  1678.             if($statusFoncier3){
  1679.                 $qb->andWhere('statusFoncier.statusStr3 like :statusStr3');
  1680.                 $qb->setParameter('statusStr3', '%'.$statusFoncier3.'%');
  1681.             }
  1682.         }
  1683.         if($typologieProject){
  1684.             $qb->andWhere('c.typologieProject in (:typologieProject)')
  1685.                 ->setParameter('typologieProject',$typologieProject);
  1686.         }
  1687.         if($status){
  1688.             $qb->andWhere('c.status in (:status)')
  1689.                 ->setParameter('status',$status);
  1690.         }
  1691.         if($statusCustom == Project::STATUS_CUSTOM_EN_ATTENT){
  1692.             $qb->andWhere('c.status in (:status)')
  1693.                 ->setParameter('status',[Project::STATUS_DEMANDE,Project::STATUS_EN_ATTENT,Project::STATUS_DEMANDE_REPONDU]);
  1694.         }elseif ($statusCustom == Project::STATUS_CUSTOM_EXPLOITATION){
  1695.             $qb->innerJoin(Etap21::class, 'etap21', 'WITH', 'etap21.project = c.id')
  1696.                 ->andWhere('etap21.status = :statusValide')
  1697.                 ->setParameter('statusValide',Etaps::STATUS_VALIDE);
  1698.         }elseif ($statusCustom == Project::STATUS_CUSTOM_CONSTRUCTION){
  1699.             $qb->innerJoin(Etap17::class, 'etap17', 'WITH', 'etap17.project = c.id')
  1700.                 ->andWhere('etap17.status = :statusValide')
  1701.                 ->setParameter('statusValide',Etaps::STATUS_VALIDE);
  1702.             $qb->innerJoin(Etap21::class, 'etap21', 'WITH', 'etap21.project = c.id')
  1703.                 ->andWhere('etap21.status <> :statusValide')
  1704.                 ->setParameter('statusValide',Etaps::STATUS_VALIDE);
  1705.         }elseif ($statusCustom == Project::STATUS_CUSTOM_DEVELOPPEMENT){
  1706.             $qb->andWhere('c.status in (:status)')
  1707.                 ->setParameter('status',[Project::STATUS_EN_COURS]);
  1708.         }
  1709.         if($spv){
  1710.             $qb->andWhere('c.spv in (:spv)')
  1711.                 ->setParameter('spv',$spv);
  1712.         }
  1713.         $spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
  1714.         $user = isset($data['user']) && $data['user'] ? $data['user'] : null;
  1715.         if(in_array('ROLE_DEV',$user->getRoles())){
  1716.             if($user->getEntreprise()){
  1717.                 $qb->andWhere('(c.developpeur = :user) or (c.entreprise = :userEntreprise)')
  1718.                     ->setParameter('user',$user->getId())
  1719.                     ->setParameter('userEntreprise',$user->getEntreprise()->getId());
  1720.             }else{
  1721.                 $qb->andWhere('c.developpeur = :user')
  1722.                     ->setParameter('user',$user->getId());
  1723.             }
  1724.         }elseif (in_array('ROLE_EPC',$user->getRoles())){
  1725.             $qb->andWhere('c.epc = :user or c.developpeur = :user')
  1726.                 ->setParameter('user',$user->getId());
  1727.         }elseif (in_array('ROLE_RESPONSABLE',$user->getRoles())){
  1728.             $qb->innerJoin('c.responsableUser','responsable');
  1729.             $qb->andWhere('responsable.responsable = :user')
  1730.                 ->setParameter('user',$user->getId());
  1731.         }elseif (in_array('ROLE_RESPONSABLE_DEVELOPPEMENT',$user->getRoles())){
  1732.             $qb->innerJoin('c.responsableDeveloppement','responsableDev');
  1733.             $qb->andWhere('responsableDev.responsable = :user')
  1734.                 ->setParameter('user',$user->getId());
  1735.         }elseif (in_array('ROLE_CONSTRUCTEUR',$user->getRoles())){
  1736.             $qb->innerJoin('c.constructeurUser','constructeur');
  1737.             $qb->andWhere('constructeur.constructeur = :user')
  1738.                 ->setParameter('user',$user->getId());
  1739.         }elseif (in_array('ROLE_ADMIN',$user->getRoles()) || in_array('ROLE_SUPER_ADMINISTRATOR',$user->getRoles())){
  1740.         }
  1741.         if($user && $user->getIntervenantNum() && $user->getIntervenantNum() != '0'){
  1742.             $qb->innerJoin('c.intervenantUser','intervenantUser');
  1743.             $qb->andWhere('intervenantUser.intervenant = :user')
  1744.                 ->setParameter('user',$user->getId());
  1745.         }
  1746.         if($user && in_array('ROLE_FOURNISSEUR',$user->getRoles())){
  1747.             $qb->innerJoin('c.fournisseurProject','fournisseurProject');
  1748.             $qb->innerJoin('fournisseurProject.fournisseur', 'fournisseur');
  1749.             $qb->leftJoin('c.fournisseur', 'fournisseurUser');
  1750.             $qb->leftJoin('fournisseur.user', 'fournisseurProjectUser');
  1751.             $qb->leftJoin('fournisseurUser.user', 'fournisseurUserUser');
  1752.             $qb->andWhere('fournisseurProjectUser.id = :userFournisseur or fournisseurUserUser.id = :userFournisseur')
  1753.                 ->setParameter('userFournisseur', $user->getId());
  1754.         }
  1755.         if($user and   (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
  1756.             $qb->andWhere('c.spv in (:spvsTab)')
  1757.                 ->setParameter('spvsTab',$spvsTab);
  1758.         }
  1759.         if($devProject){
  1760.             $qb->andWhere('c.developpeur in (:dev)')
  1761.                 ->setParameter('dev',$devProject);
  1762.         }
  1763.         if($entrepriseProject){
  1764.             $qb->leftJoin('c.developpeur','developpeurEntity');
  1765.             $qb->andWhere('(c.entreprise in (:entreprise)) or (developpeurEntity.entreprise in (:entreprise))')
  1766.                 ->setParameter('entreprise',$entrepriseProject);
  1767.         }
  1768.         if($responsableProject){
  1769.             $qb->innerJoin('c.responsableUser', 'responsable');
  1770.             $qb->andWhere('responsable.responsable in (:responsable)')
  1771.                 ->setParameter('responsable',$responsableProject);
  1772.         }
  1773.         if($responsableFoncierProject){
  1774.             $qb->innerJoin('c.responsableFoncierUser', 'responsable');
  1775.             $qb->andWhere('responsable.responsable in (:responsable)')
  1776.                 ->setParameter('responsable',$responsableFoncierProject);
  1777.         }
  1778.         if($responsableDevProject){
  1779.             $qb->innerJoin('c.responsableDeveloppement', 'responsableDev');
  1780.             $qb->andWhere('responsableDev.responsable in (:responsableDevStr)')
  1781.                 ->setParameter('responsableDevStr',$responsableDevProject);
  1782.         }
  1783.         if($constructeurProject){
  1784.             $qb->innerJoin('c.constructeurUser', 'constructeur');
  1785.             $qb->andWhere('constructeur.constructeur in (:constructeur)')
  1786.                 ->setParameter('constructeur',$constructeurProject);
  1787.         }
  1788.         if($intervenantProject){
  1789.             $qb->innerJoin('c.intervenantUser', 'intervenantUser');
  1790.             $qb->andWhere('intervenantUser.intervenant in (:intervenantUser)')
  1791.                 ->setParameter('intervenantUser',$intervenantProject);
  1792.         }
  1793.          $qb->select('DISTINCT c');
  1794.          $qb->addSelect('etap160.lat as longi, etap160.longi as lat');
  1795.          $qb->addSelect('etap14.firstnameProprietaire as firstnameProprietaire,etap14.lastnameProprietaire as lastnameProprietaire, etap14.phoneProprietaire as phoneProprietaire');
  1796.         return $qb->getQuery()->getResult();
  1797.     }
  1798.     public function getCentraleEploitationBySpv($spv) {
  1799.         $qb =  $this->createQueryBuilder('c');
  1800.         $qb->leftJoin('c.spv','spv');
  1801.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1802.         $qb->andWhere('c.statusAdministratif = :status')
  1803.             ->setParameter('status', Project::STATUS_CUSTOM_EXPLOITATION);
  1804.         $qb->andWhere('c.spv = :spvId')
  1805.             ->setParameter('spvId',$spv->getId());
  1806.         return $qb->getQuery()->getResult();
  1807.     }
  1808.     public function searchProjectAnalyse($data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
  1809.         $qb =  $this->createQueryBuilder('c');
  1810.         $query = isset($data['query']) && $data['query'] ? $data['query'] : null;
  1811.         $projectIds = isset($data['projectIds']) && $data['projectIds'] ? $data['projectIds'] : null;
  1812. //        $qb->leftJoin(SolecoProject::class, 'solecoProject', 'WITH', 'solecoProject.project = c.id');
  1813. //        $qb->leftJoin(SolargisProject::class, 'solargisProject', 'WITH', 'solargisProject.project = c.id');
  1814. //        $qb->leftJoin('solecoProject.soleco','soleco');
  1815. //        $qb->leftJoin('solargisProject.solargisPan','solargisPan');
  1816.         if(isset($data['projectIds'])){
  1817.             if($projectIds){
  1818.                 $qb->andWhere('c.id in (:projectIds) ')
  1819.                     ->setParameter('projectIds', $projectIds);
  1820.             }else{
  1821.                 $qb->andWhere('c.id = 0 ')  ;
  1822.             }
  1823.         }
  1824.         $qb->andWhere('c.name like :query ')
  1825.             ->setParameter('query', "%" . $query . "%");
  1826.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  1827.         $qb->andWhere('c.statusAdministratif = :status')
  1828.             ->setParameter('status', Project::STATUS_CUSTOM_EXPLOITATION);
  1829.         if($count){
  1830.             $qb->select('count(DISTINCT c.id) as result');
  1831.             return $qb->getQuery()->getOneOrNullResult();
  1832.         }else{
  1833.             $qb->select('DISTINCT c');
  1834.             $qb->orderBy("c.createdAt", $dirOrder);
  1835.             if ($max) {
  1836.                 $preparedQuery = $qb->getQuery()
  1837.                     ->setMaxResults($max)
  1838.                     ->setFirstResult($page * $max)
  1839.                 ;
  1840.             } else {
  1841.                 $preparedQuery = $qb->getQuery();
  1842.             }
  1843.             return $getResult ? $preparedQuery->getResult() : $preparedQuery;
  1844.         }
  1845.     }
  1846.     public function checkProjectAccess($user,$project,$spvsTab) {
  1847.         $qb =  $this->createQueryBuilder('c');
  1848.         $qb->leftJoin('c.fournisseurProject', 'fournisseurProject');
  1849.         $qb->andWhere('c.id = :id')
  1850.             ->setParameter('id',$project->getId());
  1851.         if(in_array('ROLE_DEV',$user->getRoles())){
  1852.             if($user->getEntreprise()){
  1853.                 $qb->andWhere('(c.developpeur = :user) or (c.entreprise = :userEntreprise)')
  1854.                     ->setParameter('user',$user->getId())
  1855.                     ->setParameter('userEntreprise',$user->getEntreprise()->getId());
  1856.             }else{
  1857.                 $qb->andWhere('c.developpeur = :user')
  1858.                     ->setParameter('user',$user->getId());
  1859.             }
  1860.         }elseif (in_array('ROLE_EPC',$user->getRoles())){
  1861.             $qb->andWhere('c.epc = :user or c.developpeur = :user')
  1862.                 ->setParameter('user',$user->getId());
  1863.         }elseif (in_array('ROLE_CONSTRUCTEUR',$user->getRoles())){
  1864.             $qb->innerJoin('c.constructeurUser','constructeur');
  1865.             $qb->andWhere('constructeur.constructeur = :user')
  1866.                 ->setParameter('user',$user->getId());
  1867.         }elseif (in_array('ROLE_ADMIN',$user->getRoles()) || in_array('ROLE_SUPER_ADMINISTRATOR',$user->getRoles())){
  1868.         }
  1869.         if($user && in_array($user->getTypeAcces(),[User::ACCES_intervenant,User::ACCES_visiteur,User::ACCES_comptable])){
  1870.             if($user && $spvsTab ){
  1871.                 $qb->andWhere('c.spv in (:spvsTab)')
  1872.                     ->setParameter('spvsTab',$spvsTab);
  1873.             }else{
  1874.                 if (in_array('ROLE_COMPTABLE',$user->getRoles())||in_array('ROLE_AUDITEUR',$user->getRoles())) {
  1875.                     $qb->andWhere('fournisseurProject.user = :userCourant')
  1876.                         ->setParameter('userCourant', $user->getId());
  1877.                 }elseif (in_array('ROLE_FOURNISSEUR',$user->getRoles())){
  1878.                     $qb->innerJoin('fournisseurProject.fournisseur', 'fournisseur');
  1879.                     $qb->leftJoin('c.fournisseur', 'fournisseurUser');
  1880.                     $qb->leftJoin('fournisseur.user', 'fournisseurProjectUser');
  1881.                     $qb->leftJoin('fournisseurUser.user', 'fournisseurUserUser');
  1882.                     $qb->andWhere('fournisseurProjectUser.id = :userFournisseur or fournisseurUserUser.id = :userFournisseur')
  1883.                         ->setParameter('userFournisseur', $user->getId());
  1884.                 }
  1885.             }
  1886.         }
  1887.         $qb->setMaxResults(1);
  1888.         return $qb->getQuery()->getOneOrNullResult() ;
  1889.     }
  1890. }