<?php
namespace App\Repository;
use App\Entity\DocUpload;
use App\Entity\Etap14;
use App\Entity\Etap15;
use App\Entity\Etap160;
use App\Entity\Etap17;
use App\Entity\Etap21;
use App\Entity\Etap24;
use App\Entity\Etap5;
use App\Entity\Etap6;
use App\Entity\Etap8;
use App\Entity\Etap1;
use App\Entity\Etap2;
use App\Entity\Etap3;
use App\Entity\Etap4;
use App\Entity\Etap7;
use App\Entity\Etap9;
use App\Entity\Etap10;
use App\Entity\Etap11;
use App\Entity\Etap12;
use App\Entity\Etap13;
use App\Entity\Etaps;
use App\Entity\NumeroCardi;
use App\Entity\ParametrageLoyer;
use App\Entity\Project;
use App\Entity\SolargisProject;
use App\Entity\SolecoProject;
use App\Entity\StatusFoncier;
use App\Entity\StatusUrbanisme;
use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Security\Core\Security;
/**
* @method Project|null find($id, $lockMode = null, $lockVersion = null)
* @method Project|null findOneBy(array $criteria, array $orderBy = null)
* @method Project[] findAll()
* @method Project[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class ProjectRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry,Security $security)
{
$this->security = $security;
parent::__construct($registry, Project::class);
}
// ─── GESTION DES ENGAGEMENTS : pagination basée sur les projets ───────────
private function buildEngagementPaginationQb(array $filters)
{
$qb = $this->createQueryBuilder('p')
->leftJoin('p.spv', 's')
->addSelect('s')
->andWhere('p.isArchived = 0 or p.isArchived is null')
->andWhere('p.isEnabled = 1')
->orderBy('p.name', 'ASC');
if (!empty($filters['search'])) {
$qb->andWhere('p.name LIKE :search OR p.codeProject LIKE :search')
->setParameter('search', '%' . $filters['search'] . '%');
}
if (!empty($filters['spvId'])) {
$spv = $filters['spvId'];
if (is_array($spv)) {
$qb->andWhere('s.id IN (:spv)')->setParameter('spv', $spv);
} else {
$qb->andWhere('s.id = :spv')->setParameter('spv', $spv);
}
}
if (!empty($filters['statutAdministratif'])) {
$statut = $filters['statutAdministratif'];
if (is_array($statut)) {
$qb->andWhere('p.statusAdministratif IN (:statut)')->setParameter('statut', $statut);
} else {
$qb->andWhere('p.statusAdministratif = :statut')->setParameter('statut', $statut);
}
}
return $qb;
}
/**
* @return Project[]
*/
public function findForEngagementPagination(array $filters, int $start, int $length): array
{
return $this->buildEngagementPaginationQb($filters)
->setFirstResult($start)
->setMaxResults($length)
->getQuery()
->getResult();
}
public function countForEngagementPagination(array $filters): int
{
return (int) $this->buildEngagementPaginationQb($filters)
->select('COUNT(p.id)')
->getQuery()
->getSingleScalarResult();
}
public function search($isArchive = false ,$status,$user,$data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
$qb = $this->createQueryBuilder('c');
$query = isset($data['query']) && $data['query'] ? $data['query'] : null;
$spvProject = isset($data['spvProject']) && $data['spvProject'] ? $data['spvProject'] : null;
$statusAdministratifProject = isset($data['statusAdministratifProject']) && $data['statusAdministratifProject'] ? $data['statusAdministratifProject'] : null;
$statusTrackerProject = isset($data['statusTrackerProject']) && $data['statusTrackerProject'] ? $data['statusTrackerProject'] : null;
$achatLocation = isset($data['achatLocation']) && $data['achatLocation'] ? $data['achatLocation'] : null;
$stadeConstruction = isset($data['stadeConstruction']) && $data['stadeConstruction'] ? $data['stadeConstruction'] : null;
$typologieProject = isset($data['typologieProject']) && $data['typologieProject'] ? $data['typologieProject'] : null;
$statusUrbanisme = isset($data['statusUrbanisme']) && $data['statusUrbanisme'] ? $data['statusUrbanisme'] : null;
$statusFoncier1 = isset($data['statusFoncier1']) && $data['statusFoncier1'] ? $data['statusFoncier1'] : null;
$statusFoncier2 = isset($data['statusFoncier2']) && $data['statusFoncier2'] ? $data['statusFoncier2'] : null;
$statusFoncier3 = isset($data['statusFoncier3']) && $data['statusFoncier3'] ? $data['statusFoncier3'] : null;
$responsableProject = isset($data['responsableProject']) && $data['responsableProject'] ? $data['responsableProject'] : null;
$responsableFoncierProject = isset($data['responsableFoncierProject']) && $data['responsableFoncierProject'] ? $data['responsableFoncierProject'] : null;
$responsableDevProject = isset($data['responsableDevProject']) && $data['responsableDevProject'] ? $data['responsableDevProject'] : null;
$constructeurProject = isset($data['constructeurProject']) && $data['constructeurProject'] ? $data['constructeurProject'] : null;
$intervenantProject = isset($data['intervenantProject']) && $data['intervenantProject'] ? $data['intervenantProject'] : null;
$qb->leftJoin('c.familleProject','familleProject');
$qb->leftJoin('c.typologieProject','typologieProject');
$qb->leftJoin('c.typeBatimentProject','typeBatimentProject');
$qb->leftJoin(Etap5::class, 'etap5', 'WITH', 'etap5.project = c.id');
$qb->leftJoin(Etap6::class, 'etap6', 'WITH', 'etap6.project = c.id');
$qb->leftJoin(Etap8::class, 'etap8', 'WITH', 'etap8.project = c.id');
$qb->leftJoin(Etap10::class, 'etap10', 'WITH', 'etap10.project = c.id');
$qb->leftJoin(Etap14::class, 'etap14', 'WITH', 'etap14.project = c.id');
$qb->leftJoin(Etap15::class, 'etap15', 'WITH', 'etap15.project = c.id');
$qb->leftJoin(Etap12::class, 'etap12', 'WITH', 'etap12.project = c.id');
$qb->leftJoin('etap12.numeroCardiMultiple','numeroCardi');
$qb->leftJoin('etap15.informationMultiple','informationEtap15');
$qb->leftJoin(Etap24::class, 'etap24', 'WITH', 'etap24.project = c.id');
$qb->leftJoin('etap24.etap24Champs','etap24Champs');
$qb->leftJoin('etap24Champs.etap26Champs','etap26Champs');
$qb->leftJoin('c.fournisseurProject', 'fournisseurProject');
$constructeurEpcProject = isset($data['constructeurEpcProject']) && $data['constructeurEpcProject'] ? $data['constructeurEpcProject'] : null;
$constructeurInstallateurProject = isset($data['constructeurInstallateurProject']) && $data['constructeurInstallateurProject'] ? $data['constructeurInstallateurProject'] : null;
$constructeurCharpentierProject = isset($data['constructeurCharpentierProject']) && $data['constructeurCharpentierProject'] ? $data['constructeurCharpentierProject'] : null;
$constructeurNotaireProject = isset($data['constructeurNotaireProject']) && $data['constructeurNotaireProject'] ? $data['constructeurNotaireProject'] : null;
$entrepriseProject = isset($data['entrepriseProject']) && $data['entrepriseProject'] ? $data['entrepriseProject'] : null;
if($achatLocation && $achatLocation != 0){
if($achatLocation == Project::ACHAT){
$qb->andWhere('c.achatLocation = :achatLocation')
->setParameter('achatLocation',$achatLocation);
}else{
$qb->andWhere('(c.achatLocation = :achatLocation) or (c.achatLocation is null)')
->setParameter('achatLocation',Project::LOCATION);
}
}
if($entrepriseProject){
$qb->leftJoin('c.developpeur','developpeurEntity');
$qb->andWhere('(c.entreprise in (:entreprise)) or (developpeurEntity.entreprise in (:entreprise))')
->setParameter('entreprise',$entrepriseProject);
}
if($constructeurEpcProject){
$qb->andWhere('c.fournisseur in (:constructeurEpcProject)')
->setParameter('constructeurEpcProject',$constructeurEpcProject);
}
if($constructeurInstallateurProject){
$qb->andWhere('fournisseurProject.fournisseur in (:constructeurInstallateurProject)')
->setParameter('constructeurInstallateurProject',$constructeurInstallateurProject);
}
if($constructeurCharpentierProject){
$qb->andWhere('fournisseurProject.fournisseur in (:constructeurCharpentierProject)')
->setParameter('constructeurCharpentierProject',$constructeurCharpentierProject);
}
if($constructeurNotaireProject){
$qb->andWhere('fournisseurProject.fournisseur in (:constructeurNotaireProject)')
->setParameter('constructeurNotaireProject',$constructeurNotaireProject);
}
$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
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
or etap8.siretEts like :query or etap14.adresseMiseEnService like :query or etap14.codePostalMiseEnService like :query or etap14.cityMiseEnService like :query
or etap14.firstnameProprietaire like :query or etap14.lastnameProprietaire like :query or etap14.phoneProprietaire like :query or etap14.emailProprietaire like :query
or etap15.numeroContratAchat like :query or numeroCardi.numeroCardi like :query or numeroCardi.identifiantEnedis like :query
or informationEtap15.numeroContratAchat like :query or informationEtap15.tarifContratAchat like :query or etap10.referenceEnedis like :query
or etap26Champs.numeroContratAchat1 like :query or etap26Champs.numeroContratAchat2 like :query
')
->setParameter('query', "%" . $query . "%")
;
if($isArchive){
$qb->andWhere('c.isArchived = 1');
}else{
if($query){
}else{
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
}
}
if($status){
$qb->andWhere('c.status in (:status)')
->setParameter('status',$status);
}
if($statusAdministratifProject){
$qb->andWhere('c.statusAdministratif in (:statusAdministratif)')
->setParameter('statusAdministratif',$statusAdministratifProject);
}
if($statusTrackerProject){
$qb->andWhere('c.statusTrackerActuel in (:statusTracker)')
->setParameter('statusTracker',$statusTrackerProject);
}
if($stadeConstruction){
$qb->andWhere('c.statusTrackerActuelConstruction in (:stadeConstruction)')
->setParameter('stadeConstruction',$stadeConstruction);
}
if($statusUrbanisme){
$qb->leftJoin(StatusUrbanisme::class, 'statusUrbanisme', 'WITH', 'statusUrbanisme.project = c.id');
$str = '';
foreach ($statusUrbanisme as $key => $item){
if($key == 0){
$str .= '(statusUrbanisme.statusStr like :statusUrbanisme'.$key .')' ;
}else{
$str .= ' OR (statusUrbanisme.statusStr like :statusUrbanisme'.$key.')' ;
}
}
if($str != ''){
$qb->andWhere($str);
foreach ($statusUrbanisme as $key => $item) {
$qb->setParameter('statusUrbanisme'.$key, '%'.$item.'%');
}
}
}
if($statusFoncier1 || $statusFoncier2 || $statusFoncier3){
$qb->leftJoin(StatusFoncier::class, 'statusFoncier', 'WITH', 'statusFoncier.project = c.id');
if($statusFoncier1){
$qb->andWhere('statusFoncier.statusStr1 like :statusStr1');
$qb->setParameter('statusStr1', '%'.$statusFoncier1.'%');
}
if($statusFoncier2){
$qb->andWhere('statusFoncier.statusStr2 like :statusStr2');
$qb->setParameter('statusStr2', '%'.$statusFoncier2.'%');
}
if($statusFoncier3){
$qb->andWhere('statusFoncier.statusStr3 like :statusStr3');
$qb->setParameter('statusStr3', '%'.$statusFoncier3.'%');
}
}
if($typologieProject){
$qb->andWhere('c.typologieProject in (:typologieProject)')
->setParameter('typologieProject',$typologieProject);
}
if(in_array('ROLE_DEV',$user->getRoles())){
if($user->getEntreprise()){
$qb->andWhere('(c.developpeur = :user) or (c.entreprise = :userEntreprise)')
->setParameter('user',$user->getId())
->setParameter('userEntreprise',$user->getEntreprise()->getId());
}else{
$qb->andWhere('c.developpeur = :user')
->setParameter('user',$user->getId());
}
}elseif (in_array('ROLE_EPC',$user->getRoles())){
$qb->andWhere('c.epc = :user or c.developpeur = :user')
->setParameter('user',$user->getId());
}elseif (in_array('ROLE_CONSTRUCTEUR',$user->getRoles())){
$qb->innerJoin('c.constructeurUser','constructeur');
$qb->andWhere('constructeur.constructeur = :user')
->setParameter('user',$user->getId());
}elseif (in_array('ROLE_ADMIN',$user->getRoles()) || in_array('ROLE_SUPER_ADMINISTRATOR',$user->getRoles())){
}
if($user && in_array($user->getTypeAcces(),[User::ACCES_intervenant,User::ACCES_visiteur,User::ACCES_comptable])){
$spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
if($user && $spvsTab ){
$qb->andWhere('c.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}else{
if (in_array('ROLE_COMPTABLE',$user->getRoles())||in_array('ROLE_AUDITEUR',$user->getRoles())) {
$qb->andWhere('fournisseurProject.user = :userCourant')
->setParameter('userCourant', $user->getId());
}elseif (in_array('ROLE_FOURNISSEUR',$user->getRoles())){
$qb->innerJoin('fournisseurProject.fournisseur', 'fournisseur');
$qb->leftJoin('c.fournisseur', 'fournisseurUser');
$qb->leftJoin('fournisseur.user', 'fournisseurProjectUser');
$qb->leftJoin('fournisseurUser.user', 'fournisseurUserUser');
$qb->andWhere('fournisseurProjectUser.id = :userFournisseur or fournisseurUserUser.id = :userFournisseur')
->setParameter('userFournisseur', $user->getId());
}
}
}
if($spvProject){
$qb->andWhere('c.spv in (:spv)')
->setParameter('spv',$spvProject);
}
if($responsableProject){
$qb->innerJoin('c.responsableUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableProject);
}
if($responsableFoncierProject){
$qb->innerJoin('c.responsableFoncierUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableFoncierProject);
}
if($responsableDevProject){
$qb->innerJoin('c.responsableDeveloppement', 'responsableDev');
$qb->andWhere('responsableDev.responsable in (:responsableDevStr)')
->setParameter('responsableDevStr',$responsableDevProject);
}
if($constructeurProject){
$qb->innerJoin('c.constructeurUser', 'constructeur');
$qb->andWhere('constructeur.constructeur in (:constructeur)')
->setParameter('constructeur',$constructeurProject);
}
if($intervenantProject){
$qb->innerJoin('c.intervenantUser', 'intervenantUser');
$qb->andWhere('intervenantUser.intervenant in (:intervenantUser)')
->setParameter('intervenantUser',$intervenantProject);
}
if($count){
$qb->select('count(DISTINCT c.id) as result');
return $qb->getQuery()->getOneOrNullResult();
}else{
$qb->select('DISTINCT c');
if ($columnOrder) {
if($columnOrder == 'name'){
$qb->orderBy("c.$columnOrder", $dirOrder);
}
elseif($columnOrder == 'status'){
$qb->orderBy("c.status", $dirOrder);
}
elseif($columnOrder == 'createdAt'){
$qb->orderBy("c.createdAt", $dirOrder);
}
elseif($columnOrder == 'archiveAt'){
$qb->orderBy("c.archiveAt", $dirOrder);
}
elseif($columnOrder == 'commentArchive'){
$qb->orderBy("c.commentArchive", $dirOrder);
}
elseif($columnOrder == 'statusAdministratif'){
$qb->orderBy("c.statusAdministratif", $dirOrder);
}
elseif($columnOrder == 'statusTrackerActuel'){
$qb->orderBy("c.statusTrackerActuel", $dirOrder);
}else{
$qb->orderBy("c.createdAt", 'desc');
}
}
if ($max) {
$preparedQuery = $qb->getQuery()
->setMaxResults($max)
->setFirstResult($page * $max)
;
} else {
$preparedQuery = $qb->getQuery();
}
return $getResult ? $preparedQuery->getResult() : $preparedQuery;
}
}
public function searchAdmin($isArchive = false,$status,$statusCustom=null,$spv,$data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
$qb = $this->createQueryBuilder('c');
$query = isset($data['query']) && $data['query'] ? $data['query'] : null;
$statusAdministratifProject = isset($data['statusAdministratifProject']) && $data['statusAdministratifProject'] ? $data['statusAdministratifProject'] : null;
$statusTrackerProject = isset($data['statusTrackerProject']) && $data['statusTrackerProject'] ? $data['statusTrackerProject'] : null;
$stadeConstruction = isset($data['stadeConstruction']) && $data['stadeConstruction'] ? $data['stadeConstruction'] : null;
$statusUrbanisme = isset($data['statusUrbanisme']) && $data['statusUrbanisme'] ? $data['statusUrbanisme'] : null;
$statusFoncier1 = isset($data['statusFoncier1']) && $data['statusFoncier1'] ? $data['statusFoncier1'] : null;
$statusFoncier2 = isset($data['statusFoncier2']) && $data['statusFoncier2'] ? $data['statusFoncier2'] : null;
$statusFoncier3 = isset($data['statusFoncier3']) && $data['statusFoncier3'] ? $data['statusFoncier3'] : null;
$typologieProject = isset($data['typologieProject']) && $data['typologieProject'] ? $data['typologieProject'] : null;
$devProject = isset($data['devProject']) && $data['devProject'] ? $data['devProject'] : null;
$entrepriseProject = isset($data['entrepriseProject']) && $data['entrepriseProject'] ? $data['entrepriseProject'] : null;
$responsableProject = isset($data['responsableProject']) && $data['responsableProject'] ? $data['responsableProject'] : null;
$responsableFoncierProject = isset($data['responsableFoncierProject']) && $data['responsableFoncierProject'] ? $data['responsableFoncierProject'] : null;
$responsableDevProject = isset($data['responsableDevProject']) && $data['responsableDevProject'] ? $data['responsableDevProject'] : null;
$constructeurProject = isset($data['constructeurProject']) && $data['constructeurProject'] ? $data['constructeurProject'] : null;
$intervenantProject = isset($data['intervenantProject']) && $data['intervenantProject'] ? $data['intervenantProject'] : null;
$achatLocation = isset($data['achatLocation']) && $data['achatLocation'] ? $data['achatLocation'] : null;
if($achatLocation && $achatLocation != 0){
if($achatLocation == Project::ACHAT){
$qb->andWhere('c.achatLocation = :achatLocation')
->setParameter('achatLocation',$achatLocation);
}else{
$qb->andWhere('(c.achatLocation = :achatLocation) or (c.achatLocation is null)')
->setParameter('achatLocation',Project::LOCATION);
}
}
$qb->leftJoin('c.familleProject','familleProject');
$qb->leftJoin('c.typologieProject','typologieProject');
$qb->leftJoin('c.typeBatimentProject','typeBatimentProject');
$qb->leftJoin(Etap5::class, 'etap5', 'WITH', 'etap5.project = c.id');
$qb->leftJoin(Etap6::class, 'etap6', 'WITH', 'etap6.project = c.id');
$qb->leftJoin(Etap8::class, 'etap8', 'WITH', 'etap8.project = c.id');
$qb->leftJoin(Etap14::class, 'etap14', 'WITH', 'etap14.project = c.id');
$qb->leftJoin(Etap15::class, 'etap15', 'WITH', 'etap15.project = c.id');
$qb->leftJoin(Etap12::class, 'etap12', 'WITH', 'etap12.project = c.id');
$qb->leftJoin(Etap10::class, 'etap10', 'WITH', 'etap10.project = c.id');
$qb->leftJoin('etap12.numeroCardiMultiple','numeroCardiEntity');
$qb->leftJoin('etap15.informationMultiple','informationEtap15');
$qb->leftJoin(Etap24::class, 'etap24', 'WITH', 'etap24.project = c.id');
$qb->leftJoin('etap24.etap24Champs','etap24Champs');
$qb->leftJoin('etap24Champs.etap26Champs','etap26Champs');
$qb->leftJoin('c.fournisseurProject', 'fournisseurProject');
$constructeurEpcProject = isset($data['constructeurEpcProject']) && $data['constructeurEpcProject'] ? $data['constructeurEpcProject'] : null;
$constructeurInstallateurProject = isset($data['constructeurInstallateurProject']) && $data['constructeurInstallateurProject'] ? $data['constructeurInstallateurProject'] : null;
$constructeurCharpentierProject = isset($data['constructeurCharpentierProject']) && $data['constructeurCharpentierProject'] ? $data['constructeurCharpentierProject'] : null;
$constructeurNotaireProject = isset($data['constructeurNotaireProject']) && $data['constructeurNotaireProject'] ? $data['constructeurNotaireProject'] : null;
if($constructeurEpcProject){
$qb->andWhere('c.fournisseur in (:constructeurEpcProject)')
->setParameter('constructeurEpcProject',$constructeurEpcProject);
}
if($constructeurInstallateurProject){
$qb->andWhere('fournisseurProject.fournisseur in (:constructeurInstallateurProject)')
->setParameter('constructeurInstallateurProject',$constructeurInstallateurProject);
}
if($constructeurCharpentierProject){
$qb->andWhere('fournisseurProject.fournisseur in (:constructeurCharpentierProject)')
->setParameter('constructeurCharpentierProject',$constructeurCharpentierProject);
}
if($constructeurNotaireProject){
$qb->andWhere('fournisseurProject.fournisseur in (:constructeurNotaireProject)')
->setParameter('constructeurNotaireProject',$constructeurNotaireProject);
}
$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
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
or etap8.siretEts like :query or etap14.adresseMiseEnService like :query or etap14.codePostalMiseEnService like :query or etap14.cityMiseEnService like :query
or etap14.firstnameProprietaire like :query or etap14.lastnameProprietaire like :query or etap14.phoneProprietaire like :query or etap14.emailProprietaire like :query
or etap15.numeroContratAchat like :query or numeroCardiEntity.numeroCardi like :query or numeroCardiEntity.identifiantEnedis like :query
or informationEtap15.numeroContratAchat like :query or informationEtap15.tarifContratAchat like :query or etap10.referenceEnedis like :query
or etap26Champs.numeroContratAchat1 like :query or etap26Champs.numeroContratAchat2 like :query
')
->setParameter('query', "%" . $query . "%")
;
$user = isset($data['user']) && $data['user'] ? $data['user'] : null;
if($isArchive){
$qb->andWhere('c.isArchived = 1');
}else{
if($query){
}else{
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
}
}
if($statusAdministratifProject){
$qb->andWhere('c.statusAdministratif in (:statusAdministratif)')
->setParameter('statusAdministratif',$statusAdministratifProject);
}
if($statusTrackerProject){
$qb->andWhere('c.statusTrackerActuel in (:statusTracker)')
->setParameter('statusTracker',$statusTrackerProject);
}
if($stadeConstruction){
$qb->andWhere('c.statusTrackerActuelConstruction in (:stadeConstruction)')
->setParameter('stadeConstruction',$stadeConstruction);
}
if($statusUrbanisme){
$qb->leftJoin(StatusUrbanisme::class, 'statusUrbanisme', 'WITH', 'statusUrbanisme.project = c.id');
$str = '';
foreach ($statusUrbanisme as $key => $item){
if($key == 0){
$str .= '(statusUrbanisme.statusStr like :statusUrbanisme'.$key .')' ;
}else{
$str .= ' OR (statusUrbanisme.statusStr like :statusUrbanisme'.$key.')' ;
}
}
if($str != ''){
$qb->andWhere($str);
foreach ($statusUrbanisme as $key => $item) {
$qb->setParameter('statusUrbanisme'.$key, '%'.$item.'%');
}
}
}
if($statusFoncier1 || $statusFoncier2 || $statusFoncier3){
$qb->leftJoin(StatusFoncier::class, 'statusFoncier', 'WITH', 'statusFoncier.project = c.id');
if($statusFoncier1){
$qb->andWhere('statusFoncier.statusStr1 like :statusStr1');
$qb->setParameter('statusStr1', '%'.$statusFoncier1.'%');
}
if($statusFoncier2){
$qb->andWhere('statusFoncier.statusStr2 like :statusStr2');
$qb->setParameter('statusStr2', '%'.$statusFoncier2.'%');
}
if($statusFoncier3){
$qb->andWhere('statusFoncier.statusStr3 like :statusStr3');
$qb->setParameter('statusStr3', '%'.$statusFoncier3.'%');
}
}
if($typologieProject){
$qb->andWhere('c.typologieProject in (:typologieProject)')
->setParameter('typologieProject',$typologieProject);
}
if($status){
$qb->andWhere('c.status in (:status)')
->setParameter('status',$status);
}
if($statusCustom == Project::STATUS_CUSTOM_EN_ATTENT){
$qb->andWhere('c.status in (:status)')
->setParameter('status',[Project::STATUS_DEMANDE,Project::STATUS_EN_ATTENT,Project::STATUS_DEMANDE_REPONDU]);
}elseif ($statusCustom == Project::STATUS_CUSTOM_EXPLOITATION){
$qb->innerJoin(Etap21::class, 'etap21', 'WITH', 'etap21.project = c.id')
->andWhere('etap21.status = :statusValide')
->setParameter('statusValide',Etaps::STATUS_VALIDE);
}elseif ($statusCustom == Project::STATUS_CUSTOM_CONSTRUCTION){
$qb->innerJoin(Etap17::class, 'etap17', 'WITH', 'etap17.project = c.id')
->andWhere('etap17.status = :statusValide')
->setParameter('statusValide',Etaps::STATUS_VALIDE);
$qb->innerJoin(Etap21::class, 'etap21', 'WITH', 'etap21.project = c.id')
->andWhere('etap21.status <> :statusValide')
->setParameter('statusValide',Etaps::STATUS_VALIDE);
}elseif ($statusCustom == Project::STATUS_CUSTOM_DEVELOPPEMENT){
$qb->andWhere('c.status in (:status)')
->setParameter('status',[Project::STATUS_EN_COURS]);
}
if($spv){
$qb->andWhere('c.spv in (:spv)')
->setParameter('spv',$spv);
}
if($devProject){
$qb->andWhere('c.developpeur in (:dev)')
->setParameter('dev',$devProject);
}
if($entrepriseProject){
$qb->leftJoin('c.developpeur','developpeurEntity');
$qb->andWhere('(c.entreprise in (:entreprise)) or (developpeurEntity.entreprise in (:entreprise))')
->setParameter('entreprise',$entrepriseProject);
}
if($responsableProject){
$qb->innerJoin('c.responsableUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableProject);
}
if($responsableFoncierProject){
$qb->innerJoin('c.responsableFoncierUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableFoncierProject);
}
if($responsableDevProject){
$qb->innerJoin('c.responsableDeveloppement', 'responsableDev');
$qb->andWhere('responsableDev.responsable in (:responsableDevStr)')
->setParameter('responsableDevStr',$responsableDevProject);
}
if($constructeurProject){
$qb->innerJoin('c.constructeurUser', 'constructeur');
$qb->andWhere('constructeur.constructeur in (:constructeur)')
->setParameter('constructeur',$constructeurProject);
}
if($intervenantProject){
$qb->innerJoin('c.intervenantUser', 'intervenantUser');
$qb->andWhere('intervenantUser.intervenant in (:intervenantUser)')
->setParameter('intervenantUser',$intervenantProject);
}
if($user && $user->getIntervenantNum() && $user->getIntervenantNum() != '0'){
$qb->innerJoin('c.intervenantUser','intervenantUser');
$qb->andWhere('intervenantUser.intervenant = :user')
->setParameter('user',$user->getId());
}
if($user && in_array($user->getTypeAcces(),[User::ACCES_intervenant,User::ACCES_visiteur,User::ACCES_comptable])){
$spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
if($user && $spvsTab ){
$qb->andWhere('c.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}else{
if (in_array('ROLE_COMPTABLE',$user->getRoles())||in_array('ROLE_AUDITEUR',$user->getRoles())) {
$qb->andWhere('fournisseurProject.user = :userCourant')
->setParameter('userCourant', $user->getId());
}elseif (in_array('ROLE_FOURNISSEUR',$user->getRoles())){
$qb->innerJoin('fournisseurProject.fournisseur', 'fournisseur');
$qb->leftJoin('c.fournisseur', 'fournisseurUser');
$qb->leftJoin('fournisseur.user', 'fournisseurProjectUser');
$qb->leftJoin('fournisseurUser.user', 'fournisseurUserUser');
$qb->andWhere('fournisseurProjectUser.id = :userFournisseur or fournisseurUserUser.id = :userFournisseur')
->setParameter('userFournisseur', $user->getId());
}
}
}
if($count){
$qb->select('count(DISTINCT c.id) as result');
return $qb->getQuery()->getOneOrNullResult();
}else{
$qb->select('DISTINCT c');
if ($columnOrder) {
if($columnOrder == 'name'){
$qb->orderBy("c.$columnOrder", $dirOrder);
}
elseif($columnOrder == 'status'){
$qb->orderBy("c.status", $dirOrder);
}
elseif($columnOrder == 'spv'){
$qb->orderBy("c.spv", $dirOrder);
}
elseif($columnOrder == 'developpeur'){
$qb->orderBy("c.developpeur", $dirOrder);
}
elseif($columnOrder == 'entreprise'){
$qb->leftJoin('c.developpeur','dev');
$qb->orderBy("dev.entreprise", $dirOrder);
}
elseif($columnOrder == 'createdAt'){
$qb->orderBy("c.createdAt", $dirOrder);
}
elseif($columnOrder == 'archiveAt'){
$qb->orderBy("c.archiveAt", $dirOrder);
}
elseif($columnOrder == 'commentArchive'){
$qb->orderBy("c.commentArchive", $dirOrder);
}
elseif($columnOrder == 'statusAdministratif'){
$qb->orderBy("c.statusAdministratif", $dirOrder);
}
elseif($columnOrder == 'statusTrackerActuel'){
$qb->orderBy("c.statusTrackerActuel", $dirOrder);
}else{
$qb->orderBy("c.createdAt", 'desc');
}
}
if ($max) {
$preparedQuery = $qb->getQuery()
->setMaxResults($max)
->setFirstResult($page * $max)
;
} else {
$preparedQuery = $qb->getQuery();
}
return $getResult ? $preparedQuery->getResult() : $preparedQuery;
}
}
public function searchByCustomStatus($project,$statusCustom){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.id = :id')
->setParameter('id',$project->getId());
if($statusCustom == Project::STATUS_CUSTOM_EN_ATTENT){
$qb->andWhere('c.status in (:status)')
->setParameter('status',[Project::STATUS_DEMANDE,Project::STATUS_EN_ATTENT,Project::STATUS_DEMANDE_REPONDU]);
}elseif ($statusCustom == Project::STATUS_CUSTOM_EXPLOITATION){
$qb->innerJoin(Etap21::class, 'etap21', 'WITH', 'etap21.project = c.id')
->andWhere('etap21.status = :statusValide')
->setParameter('statusValide',Etaps::STATUS_VALIDE);
}elseif ($statusCustom == Project::STATUS_CUSTOM_CONSTRUCTION){
$qb->innerJoin(Etap17::class, 'etap17', 'WITH', 'etap17.project = c.id')
->andWhere('etap17.status = :statusValide')
->setParameter('statusValide',Etaps::STATUS_VALIDE);
}elseif ($statusCustom == Project::STATUS_CUSTOM_DEVELOPPEMENT){
$qb->andWhere('c.status in (:status)')
->setParameter('status',[Project::STATUS_EN_COURS]);
}
return $qb->getQuery()->getResult();
}
public function findAllProjectBySPV($id){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.spv = :id')
->setParameter('id',$id);
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
return $qb->getQuery()->getResult();
}
public function findAllProjectByDev($id){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.developpeur = :id')
->setParameter('id',$id);
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
return $qb->getQuery()->getResult();
}
public function findAllProjectByTokens($tokens){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.token in (:tokens)')
->setParameter('tokens',$tokens);
return $qb->getQuery()->getResult();
}
public function getProjectsBySpvs($spvIds){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.spv in (:ids)')
->setParameter('ids', $spvIds) ;
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
return $qb->getQuery()->getResult();
}
public function kpiProjectBySpv($spvIds=null){
$qb = $this->createQueryBuilder('p');
$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 ')
->innerJoin('p.spv','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null')
->andWhere('s.isEnabled = 1');
if($spvIds){
if(in_array('tous',$spvIds)){
}else{
$qb->andWhere('s.id in (:spvIds)')
->setParameter('spvIds',$spvIds);
}
}else{
$qb->setMaxResults(5);
}
if($this->security->getUser() and (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
$spvs = $this->security->getUser()->getSpv();
$spvsTab = [];
foreach($spvs as $item){
$spvsTab[] = $item->getId();
}
$qb->andWhere('p.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
$qb->groupBy('s.id');
$qb->orderBy('s.id','ASC');
return $qb->getQuery()->getResult();
}
public function kpiProjectBySpvTotal($spvIds=null){
$qb = $this->createQueryBuilder('p');
$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 ')
->innerJoin('p.spv','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null')
->andWhere('s.isEnabled = 1');
if($spvIds){
if(in_array('tous',$spvIds)){
}else{
$qb->andWhere('s.id in (:spvIds)')
->setParameter('spvIds',$spvIds);
}
}else{
$qb->setMaxResults(5);
}
if($this->security->getUser() and (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
$spvs = $this->security->getUser()->getSpv();
$spvsTab = [];
foreach($spvs as $item){
$spvsTab[] = $item->getId();
}
$qb->andWhere('p.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
$qb->groupBy('s.id');
$qb->orderBy('s.id','ASC');
return $qb->getQuery()->getResult();
}
public function kpiProjectBySpvAndStatus($spv,$status){
$qb = $this->createQueryBuilder('p');
$qb->select('count(p.id) as nbrProjectBySpv, sum(p.capacite) as sommeCapaciteBySpv ')
->innerJoin('p.spv','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null')
->andWhere('s.id = :spvId')
->andWhere('p.statusAdministratif = :status')
->setParameter('spvId',$spv)
->setParameter('status',$status);
return $qb->getQuery()->getOneOrNullResult();
}
public function kpiProjectByDev($devIds=null){
$qb = $this->createQueryBuilder('p');
$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 ')
->innerJoin('p.developpeur','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null');
if($devIds){
$qb->andWhere('s.id in (:devIds)')
->setParameter('devIds',$devIds);
}else{
$qb->setMaxResults(5);
}
if($this->security->getUser() and (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
$spvs = $this->security->getUser()->getSpv();
$spvsTab = [];
foreach($spvs as $item){
$spvsTab[] = $item->getId();
}
$qb->andWhere('p.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
$qb->groupBy('s.id');
$qb->orderBy('s.id','ASC');
return $qb->getQuery()->getResult();
}
public function kpiProjectByDevTotal($devIds=null){
$qb = $this->createQueryBuilder('p');
$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 ')
->innerJoin('p.developpeur','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null');
if($this->security->getUser() and (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
$spvs = $this->security->getUser()->getSpv();
$spvsTab = [];
foreach($spvs as $item){
$spvsTab[] = $item->getId();
}
$qb->andWhere('p.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
$qb->groupBy('s.id');
$qb->orderBy('s.id','ASC');
return $qb->getQuery()->getResult();
}
public function kpiProjectByDevAndStatus($dev,$status){
$qb = $this->createQueryBuilder('p');
$qb->select('count(p.id) as nbrProjectByDev, sum(p.capacite) as sommeCapaciteByDev ')
->innerJoin('p.developpeur','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null')
->andWhere('s.id = :devId')
->andWhere('p.statusAdministratif = :status')
->setParameter('devId',$dev)
->setParameter('status',$status);
return $qb->getQuery()->getOneOrNullResult();
}
public function kpiProjectByTypologieProject($typologieProjectIds=null){
$qb = $this->createQueryBuilder('p');
$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 ')
->innerJoin('p.typologieProject','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null');
if($typologieProjectIds){
$qb->andWhere('s.id in (:typologieProjectIds)')
->setParameter('typologieProjectIds',$typologieProjectIds);
}else{
$qb->setMaxResults(5);
}
if($this->security->getUser() and (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
$spvs = $this->security->getUser()->getSpv();
$spvsTab = [];
foreach($spvs as $item){
$spvsTab[] = $item->getId();
}
$qb->andWhere('p.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
$qb->groupBy('s.id');
$qb->orderBy('s.id','ASC');
return $qb->getQuery()->getResult();
}
public function kpiProjectByTypologieProjectTotal($typologieProjectIds=null){
$qb = $this->createQueryBuilder('p');
$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 ')
->innerJoin('p.typologieProject','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null');
if($this->security->getUser() and (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
$spvs = $this->security->getUser()->getSpv();
$spvsTab = [];
foreach($spvs as $item){
$spvsTab[] = $item->getId();
}
$qb->andWhere('p.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
$qb->groupBy('s.id');
$qb->orderBy('s.id','ASC');
return $qb->getQuery()->getResult();
}
public function kpiProjectByTypologieProjectAndStatus($typologieProject,$status){
$qb = $this->createQueryBuilder('p');
$qb->select('count(p.id) as nbrProjectByTypologieProject, sum(p.capacite) as sommeCapaciteByTypologieProject ')
->innerJoin('p.typologieProject','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null')
->andWhere('s.id = :typologieProject')
->andWhere('p.statusAdministratif = :status')
->setParameter('typologieProject',$typologieProject)
->setParameter('status',$status);
return $qb->getQuery()->getOneOrNullResult();
}
public function kpiProjectByFamilleProject($familleProjectIds=null){
$qb = $this->createQueryBuilder('p');
$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 ')
->innerJoin('p.familleProject','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null');
if($familleProjectIds){
$qb->andWhere('s.id in (:familleProjectIds)')
->setParameter('familleProjectIds',$familleProjectIds);
}else{
$qb->setMaxResults(5);
}
if($this->security->getUser() and (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
$spvs = $this->security->getUser()->getSpv();
$spvsTab = [];
foreach($spvs as $item){
$spvsTab[] = $item->getId();
}
$qb->andWhere('p.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
$qb->groupBy('s.id');
$qb->orderBy('s.id','ASC');
return $qb->getQuery()->getResult();
}
public function kpiProjectByFamilleProjectTotal($familleProjectIds=null){
$qb = $this->createQueryBuilder('p');
$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 ')
->innerJoin('p.familleProject','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null');
if($this->security->getUser() and (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
$spvs = $this->security->getUser()->getSpv();
$spvsTab = [];
foreach($spvs as $item){
$spvsTab[] = $item->getId();
}
$qb->andWhere('p.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
$qb->groupBy('s.id');
$qb->orderBy('s.id','ASC');
return $qb->getQuery()->getResult();
}
public function kpiProjectByFamilleProjectAndStatus($familleProject,$status){
$qb = $this->createQueryBuilder('p');
$qb->select('count(p.id) as nbrProjectByFamilleProject, sum(p.capacite) as sommeCapaciteByFamilleProject ')
->innerJoin('p.familleProject','s');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null')
->andWhere('s.id = :familleProject')
->andWhere('p.statusAdministratif = :status')
->setParameter('familleProject',$familleProject)
->setParameter('status',$status);
return $qb->getQuery()->getOneOrNullResult();
}
public function kpiProjectByStatus($status){
$qb = $this->createQueryBuilder('p');
$qb->select('count(p.id) as nbrProjectByStatus, sum(p.capacite) as sommeCapaciteByStatus ');
$qb->andWhere('p.isArchived = 0 or p.isArchived is null')
->andWhere('p.statusAdministratif = :status')
->setParameter('status',$status);
if($this->security->getUser() and (in_array("ROLE_AUDITEUR", $this->security->getUser()->getRoles()) or in_array("ROLE_COMPTABLE", $this->security->getUser() ->getRoles()))){
$spvs = $this->security->getUser()->getSpv();
$spvsTab = [];
foreach($spvs as $item){
$spvsTab[] = $item->getId();
}
$qb->andWhere('p.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
return $qb->getQuery()->getOneOrNullResult();
}
public function getProjectsGlobal($isArchive=false,$spv=null,$search=null,$dev=null,$epc=null,$status = null,$user = null) {
$qb = $this->createQueryBuilder('c');
if($isArchive){
$qb->andWhere('c.isArchived = 1');
}else {
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
}
if($search){
$qb->andWhere('c.name like :search')
->setParameter('search', "%" . $search . "%");
}
if($spv){
$qb->andWhere('c.spv = :spv')
->setParameter('spv',$spv);
}
if($user and (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
$spvs = $user->getSpv();
$spvsTab = [];
foreach($spvs as $item){
$spvsTab[] = $item->getId();
}
$qb->andWhere('c.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
if($user && $user->getIntervenantNum() && $user->getIntervenantNum() != '0'){
$qb->innerJoin('c.intervenantUser','intervenantUser');
$qb->andWhere('intervenantUser.intervenant = :user')
->setParameter('user',$user->getId());
}
if($user && in_array('ROLE_FOURNISSEUR',$user->getRoles())){
$qb->innerJoin('c.fournisseurProject','fournisseurProject');
$qb->innerJoin('fournisseurProject.fournisseur', 'fournisseur');
$qb->leftJoin('c.fournisseur', 'fournisseurUser');
$qb->leftJoin('fournisseur.user', 'fournisseurProjectUser');
$qb->leftJoin('fournisseurUser.user', 'fournisseurUserUser');
$qb->andWhere('fournisseurProjectUser.id = :userFournisseur or fournisseurUserUser.id = :userFournisseur')
->setParameter('userFournisseur', $user->getId());
}
if($dev){
$qb->andWhere('c.developpeur = :dev')
->setParameter('dev',$dev);
}
if($epc){
$qb->andWhere('c.epc = :epc')
->setParameter('epc',$epc);
}
return $qb->getQuery()->getResult() ;
}
public function searchByDoc($docsProject,$spv,$data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
$qb = $this->createQueryBuilder('c');
$query = isset($data['query']) && $data['query'] ? $data['query'] : null;
$devProject = isset($data['devProject']) && $data['devProject'] ? $data['devProject'] : null;
$responsableProject = isset($data['responsableProject']) && $data['responsableProject'] ? $data['responsableProject'] : null;
$responsableFoncierProject = isset($data['responsableFoncierProject']) && $data['responsableFoncierProject'] ? $data['responsableFoncierProject'] : null;
$responsableDevProject = isset($data['responsableDevProject']) && $data['responsableDevProject'] ? $data['responsableDevProject'] : null;
$constructeurProject = isset($data['constructeurProject']) && $data['constructeurProject'] ? $data['constructeurProject'] : null;
if($docsProject){
$arrayExiste = [];
$arrayExisteManyToMany = [];
$strWhere = '';
$i = 0;
foreach ($docsProject as $docs){
$str = explode("__", $docs);
$etapNum = $str[0];
$fileName = $str[1];
$nameChampManyToMany = isset($str[2])?$str[2]:null;
$etapClass = 'App\\Entity\\Etap'.$etapNum;
if(in_array($etapClass,$arrayExiste)){
}else{
$arrayExiste[] = $etapClass;
$qb->leftJoin($etapClass, 'etap'.$etapNum, 'WITH', 'etap'.$etapNum.'.project = c.id');
}
$classMetadata = $this->_em->getClassMetadata($etapClass);
if($nameChampManyToMany){
$associationMappings = $classMetadata->getAssociationMapping($nameChampManyToMany);
if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
$etapClassManyToMany = 'etap'.$etapNum.'.'.$nameChampManyToMany ;
if(in_array($etapClassManyToMany,$arrayExisteManyToMany)){
}else{
$qb->leftJoin('etap'.$etapNum.'.'.$nameChampManyToMany, $nameChampManyToMany);
}
$qb->leftJoin($nameChampManyToMany.'.'.$fileName, 'file_'.$fileName);
$strWhereIN = "(file_$fileName.name is not null and (file_$fileName.isArchived is null or file_$fileName.isArchived = 0))";
if($i == 0){
$strWhere = $strWhereIN ;
}else{
$strWhere .= ' OR '.$strWhereIN ;
}
}
}else{
$associationMappings = $classMetadata->getAssociationMapping($fileName);
if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY){
$qb->leftJoin('etap'.$etapNum.'.'.$fileName, 'file_'.$fileName);
$strWhereIN = "(file_$fileName.name is not null and (file_$fileName.isArchived is null or file_$fileName.isArchived = 0))";
if($i == 0){
$strWhere = $strWhereIN ;
}else{
$strWhere .= ' OR '.$strWhereIN ;
}
}else{
$strWhereIN = "(etap$etapNum.$fileName is not null)";
if($i == 0){
$strWhere = $strWhereIN ;
}else{
$strWhere .= ' OR '.$strWhereIN ;
}
}
}
if($fileName == 'filePromessebailMultiple'){
$strWhereIN = "(c.filePromessebail is not null)";
if($strWhere != ''){
$strWhere .= ' OR '.$strWhereIN ;
}else{
$strWhere .= $strWhereIN ;
}
}
$i++;
}
if($strWhere != ''){
$qb->andWhere($strWhere);
}
}
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
if($spv){
$qb->andWhere('c.spv in (:spv)')
->setParameter('spv',$spv);
}
$spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
$user = isset($data['user']) && $data['user'] ? $data['user'] : null;
if($user and (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
$qb->andWhere('c.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
if($devProject){
$qb->andWhere('c.developpeur in (:dev)')
->setParameter('dev',$devProject);
}
if($responsableProject){
$qb->innerJoin('c.responsableUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableProject);
}
if($responsableFoncierProject){
$qb->innerJoin('c.responsableFoncierUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableFoncierProject);
}
if($responsableDevProject){
$qb->innerJoin('c.responsableDeveloppement', 'responsableDev');
$qb->andWhere('responsableDev.responsable in (:responsableDevStr)')
->setParameter('responsableDevStr',$responsableDevProject);
}
if($constructeurProject){
$qb->innerJoin('c.constructeurUser', 'constructeur');
$qb->andWhere('constructeur.constructeur in (:constructeur)')
->setParameter('constructeur',$constructeurProject);
}
if($count){
$qb->select('count(DISTINCT c.id) as result');
return $qb->getQuery()->getOneOrNullResult();
}
else{
$qb->select('DISTINCT c');
if ($columnOrder) {
if($columnOrder == 'name'){
$qb->orderBy("c.$columnOrder", $dirOrder);
}
if($columnOrder == 'status'){
$qb->orderBy("c.status", $dirOrder);
}
if($columnOrder == 'spv'){
$qb->orderBy("c.spv", $dirOrder);
}
if($columnOrder == 'developpeur'){
$qb->orderBy("c.developpeur", $dirOrder);
}
if($columnOrder == 'entreprise'){
$qb->leftJoin('c.developpeur','dev');
$qb->orderBy("dev.entreprise", $dirOrder);
}
if($columnOrder == 'createdAt'){
$qb->orderBy("c.createdAt", $dirOrder);
}
if($columnOrder == 'archiveAt'){
$qb->orderBy("c.archiveAt", $dirOrder);
}
if($columnOrder == 'commentArchive'){
$qb->orderBy("c.commentArchive", $dirOrder);
}
if($columnOrder == 'statusTrackerActuel'){
$qb->orderBy("c.statusTrackerActuel", $dirOrder);
}
}
if ($max) {
$preparedQuery = $qb->getQuery()
->setMaxResults($max)
->setFirstResult($page * $max)
;
} else {
$preparedQuery = $qb->getQuery();
}
return $getResult ? $preparedQuery->getResult() : $preparedQuery;
}
}
public function searchByDocPreFilter($spv,$data) {
$qb = $this->createQueryBuilder('c');
$query = isset($data['query']) && $data['query'] ? $data['query'] : null;
$devProject = isset($data['devProject']) && $data['devProject'] ? $data['devProject'] : null;
$responsableProject = isset($data['responsableProject']) && $data['responsableProject'] ? $data['responsableProject'] : null;
$responsableFoncierProject = isset($data['responsableFoncierProject']) && $data['responsableFoncierProject'] ? $data['responsableFoncierProject'] : null;
$responsableDevProject = isset($data['responsableDevProject']) && $data['responsableDevProject'] ? $data['responsableDevProject'] : null;
$constructeurProject = isset($data['constructeurProject']) && $data['constructeurProject'] ? $data['constructeurProject'] : null;
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
if($spv){
$qb->andWhere('c.spv = :spv')
->setParameter('spv',$spv);
}
$spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
$user = isset($data['user']) && $data['user'] ? $data['user'] : null;
if($user and (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
$qb->andWhere('c.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
if($devProject){
$qb->andWhere('c.developpeur = :dev')
->setParameter('dev',$devProject);
}
if($responsableProject){
$qb->innerJoin('c.responsableUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableProject);
}
if($responsableFoncierProject){
$qb->innerJoin('c.responsableFoncierUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableFoncierProject);
}
if($responsableDevProject){
$qb->innerJoin('c.responsableDeveloppement', 'responsableDev');
$qb->andWhere('responsableDev.responsable in (:responsableDevStr)')
->setParameter('responsableDevStr',$responsableDevProject);
}
if($constructeurProject){
$qb->innerJoin('c.constructeurUser', 'constructeur');
$qb->andWhere('constructeur.constructeur in (:constructeur)')
->setParameter('constructeur',$constructeurProject);
}
return $qb->getQuery()->getResult();
}
public function searchByIds($data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
if($data and count($data) > 0){
$qb->andWhere('c.id in (:projectIds)')
->setParameter('projectIds',$data);
}else{
$qb->andWhere('c.id = 0') ;
}
if($count){
$qb->select('count(DISTINCT c.id) as result');
return $qb->getQuery()->getOneOrNullResult();
}
else{
$qb->select('DISTINCT c');
if ($columnOrder) {
if($columnOrder == 'name'){
$qb->orderBy("c.$columnOrder", $dirOrder);
}
if($columnOrder == 'status'){
$qb->orderBy("c.status", $dirOrder);
}
if($columnOrder == 'spv'){
$qb->orderBy("c.spv", $dirOrder);
}
if($columnOrder == 'developpeur'){
$qb->orderBy("c.developpeur", $dirOrder);
}
if($columnOrder == 'entreprise'){
$qb->leftJoin('c.developpeur','dev');
$qb->orderBy("dev.entreprise", $dirOrder);
}
if($columnOrder == 'createdAt'){
$qb->orderBy("c.createdAt", $dirOrder);
}
if($columnOrder == 'archiveAt'){
$qb->orderBy("c.archiveAt", $dirOrder);
}
if($columnOrder == 'commentArchive'){
$qb->orderBy("c.commentArchive", $dirOrder);
}
if($columnOrder == 'statusTrackerActuel'){
$qb->orderBy("c.statusTrackerActuel", $dirOrder);
}
}
if ($max) {
$preparedQuery = $qb->getQuery()
->setMaxResults($max)
->setFirstResult($page * $max)
;
} else {
$preparedQuery = $qb->getQuery();
}
return $getResult ? $preparedQuery->getResult() : $preparedQuery;
}
}
public function getProjectDocs($docsProject,$spv,$projectIds,$devProject=null) {
$qb = $this->createQueryBuilder('c');
// if($docsProject){
// $arrayExiste = [];
// $arrayExisteManyToMany = [];
// $strWhere = '';
// $i = 0;
// foreach ($docsProject as $docs){
// $str = explode("__", $docs);
// $etapNum = $str[0];
// $fileName = $str[1];
// $nameChampManyToMany = isset($str[2])?$str[2]:null;
// $etapClass = 'App\\Entity\\Etap'.$etapNum;
// if(in_array($etapClass,$arrayExiste)){
//
// }else{
// $arrayExiste[] = $etapClass;
// $qb->leftJoin($etapClass, 'etap'.$etapNum, 'WITH', 'etap'.$etapNum.'.project = c.id');
// }
// $classMetadata = $this->_em->getClassMetadata($etapClass);
// if($nameChampManyToMany){
// $associationMappings = $classMetadata->getAssociationMapping($nameChampManyToMany);
// if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY){
// $etapClassManyToMany = 'etap'.$etapNum.'.'.$nameChampManyToMany ;
// if(in_array($etapClassManyToMany,$arrayExisteManyToMany)){
//
// }else{
// $qb->leftJoin('etap'.$etapNum.'.'.$nameChampManyToMany, $nameChampManyToMany);
// }
// $qb->leftJoin($nameChampManyToMany.'.'.$fileName, 'file_'.$fileName);
// $strWhereIN = "(file_$fileName.name is not null and (file_$fileName.isArchived is null or file_$fileName.isArchived = 0))";
// if($i == 0){
// $strWhere = $strWhereIN ;
// }else{
// $strWhere .= ' OR '.$strWhereIN ;
// }
// }
// }else {
// $associationMappings = $classMetadata->getAssociationMapping($fileName);
// if ($associationMappings['type'] === \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY) {
// $qb->leftJoin('etap' . $etapNum . '.' . $fileName, 'file_' . $fileName);
// $strWhereIN = "(file_$fileName.name is not null and (file_$fileName.isArchived is null or file_$fileName.isArchived = 0))";
// if ($i == 0) {
// $strWhere = $strWhereIN;
// } else {
// $strWhere .= ' OR ' . $strWhereIN;
// }
// } else {
// $strWhereIN = "(etap$etapNum.$fileName is not null)";
// if ($i == 0) {
// $strWhere = $strWhereIN;
// } else {
// $strWhere .= ' OR ' . $strWhereIN;
// }
// }
// }
// if($fileName == 'filePromessebailMultiple'){
// $strWhereIN = "(c.filePromessebail is not null)";
// if($strWhere != ''){
// $strWhere .= ' OR '.$strWhereIN ;
// }else{
// $strWhere .= $strWhereIN ;
// }
// }
// $i++;
// }
// if($strWhere != ''){
// $qb->andWhere($strWhere);
// }
// }
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
if($projectIds and count($projectIds) > 0){
$qb->andWhere('c.token in (:projectIds)')
->setParameter('projectIds',$projectIds);
}
if($spv){
$qb->andWhere('c.spv = :spv')
->setParameter('spv',$spv);
}
if($devProject){
$qb->andWhere('c.developpeur = :dev')
->setParameter('dev',$devProject);
}
$qb->select('DISTINCT c');
return $qb->getQuery()->getResult() ;
}
public function findAllProjectActive(){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
return $qb->getQuery()->getResult();
}
public function findAllProjectActiveMiseEnService($date1,$date2,$developpeur=null,$responsableConstruction=null,$spvId=null,$schemaConstruction=null,$constructeurRapport=null){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
$qb->leftJoin(Etap14::class, 'etap14', 'WITH', 'etap14.project = c.id');
$qb->andWhere('etap14.dateMiseEnService is not null or c.dateMiseEnService is not null');
$qb->andWhere('c.dateMiseEnService BETWEEN :date1 AND :date2' )
->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
if($developpeur){
$qb->andWhere('c.developpeur = :developpeur')
->setParameter('developpeur',$developpeur->getId());
}
if($responsableConstruction){
$qb->innerJoin('c.responsableUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableConstruction);
}
if($spvId){
$qb->andWhere('c.spv in (:spv)')
->setParameter('spv',$spvId);
}
if($schemaConstruction){
$qb->andWhere('c.schemaConstruction = :schemaConstruction')
->setParameter('schemaConstruction',$schemaConstruction);
}
if($constructeurRapport){
$qb->innerJoin('c.fournisseurProject','fournisseurProject');
$qb->andWhere('((fournisseurProject.titre = :charpentier or fournisseurProject.titre = :installateur ) and fournisseurProject.fournisseur = :fournisseur) or (c.fournisseur = :fournisseur)')
->setParameter('charpentier','Charpentier')
->setParameter('installateur','Installateur')
->setParameter('fournisseur',$constructeurRapport);
}
return $qb->getQuery()->getResult();
}
public function findAllProjectExploitation(){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
$qb->andWhere('c.statusAdministratif = :status')
->setParameter('status', Project::STATUS_CUSTOM_EXPLOITATION);
return $qb->getQuery()->getResult();
}
public function searchCentrale($data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
$qb = $this->createQueryBuilder('c');
$query = isset($data['query']) && $data['query'] ? $data['query'] : null;
$isParametrer = isset($data['isParametrer']) ? $data['isParametrer'] : null;
$tabDate = isset($data['dateTab']) && $data['dateTab'] ? new \DateTime($data['dateTab']) : null;
$qb->leftJoin('c.spv','spv');
$qb->andWhere('c.name like :query or spv.name like :query ')
->setParameter('query', "%" . $query . "%")
;
if($tabDate){
$qb->andWhere('c.dateMiseEnService LIKE :searchTabDate')
->setParameter('searchTabDate','%'.$tabDate->format('Y-m-d').'%');
}
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
$qb->andWhere('c.statusAdministratif = :status')
->setParameter('status', Project::STATUS_CUSTOM_EXPLOITATION);
if($isParametrer === '1' || $isParametrer === '0'){
if($isParametrer === '1'){
$qb->innerJoin(ParametrageLoyer::class, 'parametrage', 'WITH', 'parametrage.centrale = c.id');
}else{
$subquery = $this->_em->createQueryBuilder();
$subquery->select("centrale.id");
$subquery->from(ParametrageLoyer::class,"p");
$subquery->innerJoin('p.centrale','centrale');
$subqueryResult = $subquery->getQuery()->getResult();
$qb->andWhere('c.id not in (:sub)')
->setParameter('sub', array_values($subqueryResult));
}
}
$spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
$user = isset($data['user']) && $data['user'] ? $data['user'] : null;
if($user and (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
$qb->andWhere('c.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
if($spvsTab && !empty(array_filter($spvsTab))) {
$qb->andWhere('c.spv IN (:spv)')
->setParameter('spv', $spvsTab);
}
if($count){
$qb->select('count(DISTINCT c.id) as result');
return $qb->getQuery()->getOneOrNullResult();
}else{
$qb->select('DISTINCT c');
if ($columnOrder) {
if($columnOrder == 'name'){
$qb->orderBy("c.$columnOrder", $dirOrder);
}
if($columnOrder == 'spv'){
$qb->orderBy("c.spv", $dirOrder);
}
if($columnOrder == 'dateMiseEnService'){
$qb->orderBy("c.dateMiseEnService", $dirOrder);
}
if($columnOrder == 'entreprise'){
$qb->leftJoin('c.developpeur','dev');
$qb->orderBy("dev.entreprise", $dirOrder);
}
if($columnOrder == 'capacite'){
$qb->orderBy("c.capacite", $dirOrder);
}
}
if ($max) {
$preparedQuery = $qb->getQuery()
->setMaxResults($max)
->setFirstResult($page * $max)
;
} else {
$preparedQuery = $qb->getQuery();
}
return $getResult ? $preparedQuery->getResult() : $preparedQuery;
}
}
public function findAllProjectActiveBailSigne($date1,$date2,$developpeur=null,$responsableConstruction=null,$spvId=null,$schemaConstruction=null,$constructeurRapport=null){
$qb = $this->createQueryBuilder('c');
$qb->addSelect('fileBailSigneMultiple.createdAt as createdAtBailSigne,c.capacite');
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
$qb->leftJoin(Etap7::class, 'etap7', 'WITH', 'etap7.project = c.id');
$qb->leftJoin('etap7.fileBailSigneMultiple','fileBailSigneMultiple');
$qb->andWhere('(fileBailSigneMultiple.isArchived = 0 or fileBailSigneMultiple.isArchived is null) and fileBailSigneMultiple.createdAt BETWEEN :date1 AND :date2' )
->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
if($developpeur){
$qb->andWhere('c.developpeur = :developpeur')
->setParameter('developpeur',$developpeur->getId());
}
if($responsableConstruction){
$qb->innerJoin('c.responsableUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableConstruction);
}
if($spvId){
$qb->andWhere('c.spv in (:spv)')
->setParameter('spv',$spvId);
}
if($schemaConstruction){
$qb->andWhere('c.schemaConstruction = :schemaConstruction')
->setParameter('schemaConstruction',$schemaConstruction);
}
if($constructeurRapport){
$qb->innerJoin('c.fournisseurProject','fournisseurProject');
$qb->andWhere('((fournisseurProject.titre = :charpentier or fournisseurProject.titre = :installateur ) and fournisseurProject.fournisseur = :fournisseur) or (c.fournisseur = :fournisseur)')
->setParameter('charpentier','Charpentier')
->setParameter('installateur','Installateur')
->setParameter('fournisseur',$constructeurRapport);
}
return $qb->getQuery()->getResult();
}
public function findAllArchives($date1,$date2,$developpeur=null,$responsableConstruction=null,$spvId=null,$schemaConstruction=null,$constructeurRapport=null){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.isArchived = 1');
$qb->andWhere('c.archiveAt BETWEEN :date1 AND :date2' )
->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
if($developpeur){
$qb->andWhere('c.developpeur = :developpeur')
->setParameter('developpeur',$developpeur->getId());
}
if($responsableConstruction){
$qb->innerJoin('c.responsableUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableConstruction);
}
if($spvId){
$qb->andWhere('c.spv in (:spv)')
->setParameter('spv',$spvId);
}
if($schemaConstruction){
$qb->andWhere('c.schemaConstruction = :schemaConstruction')
->setParameter('schemaConstruction',$schemaConstruction);
}
if($constructeurRapport){
$qb->innerJoin('c.fournisseurProject','fournisseurProject');
$qb->andWhere('((fournisseurProject.titre = :charpentier or fournisseurProject.titre = :installateur ) and fournisseurProject.fournisseur = :fournisseur) or (c.fournisseur = :fournisseur)')
->setParameter('charpentier','Charpentier')
->setParameter('installateur','Installateur')
->setParameter('fournisseur',$constructeurRapport);
}
return $qb->getQuery()->getResult();
}
public function findAllAnnules($date1,$date2,$developpeur=null,$responsableConstruction=null,$spvId=null,$schemaConstruction=null,$constructeurRapport=null){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.status in (:statusRefuse)');
$qb->andWhere('c.refuseAt BETWEEN :date1 AND :date2' )
->setParameter('statusRefuse', [Project::STATUS_REFUSE])
->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
if($developpeur){
$qb->andWhere('c.developpeur = :developpeur')
->setParameter('developpeur',$developpeur->getId());
}
if($responsableConstruction){
$qb->innerJoin('c.responsableUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableConstruction);
}
if($spvId){
$qb->andWhere('c.spv in (:spv)')
->setParameter('spv',$spvId);
}
if($schemaConstruction){
$qb->andWhere('c.schemaConstruction = :schemaConstruction')
->setParameter('schemaConstruction',$schemaConstruction);
}
if($constructeurRapport){
$qb->innerJoin('c.fournisseurProject','fournisseurProject');
$qb->andWhere('((fournisseurProject.titre = :charpentier or fournisseurProject.titre = :installateur ) and fournisseurProject.fournisseur = :fournisseur) or (c.fournisseur = :fournisseur)')
->setParameter('charpentier','Charpentier')
->setParameter('installateur','Installateur')
->setParameter('fournisseur',$constructeurRapport);
}
return $qb->getQuery()->getResult();
}
public function findAllProjectByStadeConstruction($stadeConstruction,$date1,$date2,$developpeur=null){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.stadeConstruction in (:stadeConstruction)')
->setParameter('stadeConstruction',$stadeConstruction);
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
$qb->andWhere('c.stadeConstructionDate BETWEEN :date1 AND :date2' )
->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
if($developpeur){
$qb->andWhere('c.developpeur = :developpeur')
->setParameter('developpeur',$developpeur->getId());
}
return $qb->getQuery()->getResult();
}
public function findCodeProjectByYearAndDev($year,$dev){
$qb = $this->createQueryBuilder('c');
$qb->where('c.compteurErpiAnnee = :year')
->setParameter('year',$year);
$qb->innerJoin('c.developpeur','dev');
$qb->andWhere('dev.id = :developpeur')
->setParameter('developpeur',$dev);
$qb->andWhere('c.codeProject is not null');
$qb->setMaxResults(1);
$qb->orderBy('c.compteurErpiNbr','desc');
return $qb->getQuery()->getOneOrNullResult();
}
public function findAllProjectActiveNew($date1,$date2,$developpeur=null,$responsableConstruction=null,$spvId=null,$schemaConstruction=null,$constructeurRapport=null){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
$qb->andWhere('c.createdAt BETWEEN :date1 AND :date2' )
->setParameter('date1', $date1->format('Y-m-d').' 00:00:00')
->setParameter('date2', $date2->format('Y-m-d').' 23:59:59');
if($developpeur){
$qb->andWhere('c.developpeur = :developpeur')
->setParameter('developpeur',$developpeur->getId());
}
if($responsableConstruction){
$qb->innerJoin('c.responsableUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableConstruction);
}
if($spvId){
$qb->andWhere('c.spv in (:spv)')
->setParameter('spv',$spvId);
}
if($schemaConstruction){
$qb->andWhere('c.schemaConstruction = :schemaConstruction')
->setParameter('schemaConstruction',$schemaConstruction);
}
if($constructeurRapport){
$qb->innerJoin('c.fournisseurProject','fournisseurProject');
$qb->andWhere('((fournisseurProject.titre = :charpentier or fournisseurProject.titre = :installateur ) and fournisseurProject.fournisseur = :fournisseur) or (c.fournisseur = :fournisseur)')
->setParameter('charpentier','Charpentier')
->setParameter('installateur','Installateur')
->setParameter('fournisseur',$constructeurRapport);
}
return $qb->getQuery()->getResult();
}
public function getCentrales($data) {
$qb = $this->createQueryBuilder('c');
$query = isset($data['query']) && $data['query'] ? $data['query'] : null;
$qb->leftJoin('c.spv','spv');
$qb->andWhere('c.name like :query ')
->setParameter('query', "%" . $query . "%")
;
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
$qb->andWhere('c.statusAdministratif = :status')
->setParameter('status', Project::STATUS_CUSTOM_EXPLOITATION);
$spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
$user = isset($data['user']) && $data['user'] ? $data['user'] : null;
$centraleRapportSuivi = isset($data['centraleRapportSuivi']) && $data['centraleRapportSuivi'] ? $data['centraleRapportSuivi'] : null;
if($user and (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
$qb->andWhere('c.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
if($centraleRapportSuivi){
$qb->andWhere('c.token in (:centraleRapportSuivi)')
->setParameter('centraleRapportSuivi',$centraleRapportSuivi);
}
return $qb->getQuery()->getResult();
}
public function searchCentraleRapportById($data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.id in (:ids)')
->setParameter('ids',$data);
if($count){
$qb->select('count(DISTINCT c.id) as result');
return $qb->getQuery()->getOneOrNullResult();
}else{
$qb->select('DISTINCT c');
if ($columnOrder) {
if($columnOrder == 'name'){
$qb->orderBy("c.$columnOrder", $dirOrder);
}
if($columnOrder == 'dateMiseEnService'){
$qb->orderBy("c.dateMiseEnService", $dirOrder);
}
}
if ($max) {
$preparedQuery = $qb->getQuery()
->setMaxResults($max)
->setFirstResult($page * $max)
;
} else {
$preparedQuery = $qb->getQuery();
}
return $getResult ? $preparedQuery->getResult() : $preparedQuery;
}
}
public function getCentraleRapportById($data) {
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.id in (:ids)')
->setParameter('ids',$data);
return $qb->getQuery()->getResult();
}
public function searchForCarte($isArchive = false,$status,$statusCustom=null,$spv,$data) {
$qb = $this->createQueryBuilder('c');
$query = isset($data['query']) && $data['query'] ? $data['query'] : null;
$statusAdministratifProject = isset($data['statusAdministratifProject']) && $data['statusAdministratifProject'] ? $data['statusAdministratifProject'] : null;
$statusTrackerProject = isset($data['statusTrackerProject']) && $data['statusTrackerProject'] ? $data['statusTrackerProject'] : null;
$stadeConstruction = isset($data['stadeConstruction']) && $data['stadeConstruction'] ? $data['stadeConstruction'] : null;
$statusUrbanisme = isset($data['statusUrbanisme']) && $data['statusUrbanisme'] ? $data['statusUrbanisme'] : null;
$statusFoncier1 = isset($data['statusFoncier1']) && $data['statusFoncier1'] ? $data['statusFoncier1'] : null;
$statusFoncier2 = isset($data['statusFoncier2']) && $data['statusFoncier2'] ? $data['statusFoncier2'] : null;
$statusFoncier3 = isset($data['statusFoncier3']) && $data['statusFoncier3'] ? $data['statusFoncier3'] : null;
$typologieProject = isset($data['typologieProject']) && $data['typologieProject'] ? $data['typologieProject'] : null;
$devProject = isset($data['devProject']) && $data['devProject'] ? $data['devProject'] : null;
$entrepriseProject = isset($data['entrepriseProject']) && $data['entrepriseProject'] ? $data['entrepriseProject'] : null;
$responsableProject = isset($data['responsableProject']) && $data['responsableProject'] ? $data['responsableProject'] : null;
$responsableFoncierProject = isset($data['responsableFoncierProject']) && $data['responsableFoncierProject'] ? $data['responsableFoncierProject'] : null;
$responsableDevProject = isset($data['responsableDevProject']) && $data['responsableDevProject'] ? $data['responsableDevProject'] : null;
$constructeurProject = isset($data['constructeurProject']) && $data['constructeurProject'] ? $data['constructeurProject'] : null;
$intervenantProject = isset($data['intervenantProject']) && $data['intervenantProject'] ? $data['intervenantProject'] : null;
$achatLocation = isset($data['achatLocation']) && $data['achatLocation'] ? $data['achatLocation'] : null;
if($achatLocation && $achatLocation != 0){
if($achatLocation == Project::ACHAT){
$qb->andWhere('c.achatLocation = :achatLocation')
->setParameter('achatLocation',$achatLocation);
}else{
$qb->andWhere('(c.achatLocation = :achatLocation) or (c.achatLocation is null)')
->setParameter('achatLocation',Project::LOCATION);
}
}
$qb->leftJoin('c.familleProject','familleProject');
$qb->leftJoin('c.typologieProject','typologieProject');
$qb->leftJoin('c.typeBatimentProject','typeBatimentProject');
$qb->leftJoin(Etap5::class, 'etap5', 'WITH', 'etap5.project = c.id');
$qb->leftJoin(Etap6::class, 'etap6', 'WITH', 'etap6.project = c.id');
$qb->leftJoin(Etap8::class, 'etap8', 'WITH', 'etap8.project = c.id');
$qb->leftJoin(Etap14::class, 'etap14', 'WITH', 'etap14.project = c.id');
$qb->leftJoin(Etap15::class, 'etap15', 'WITH', 'etap15.project = c.id');
$qb->leftJoin(Etap12::class, 'etap12', 'WITH', 'etap12.project = c.id');
$qb->leftJoin(Etap160::class, 'etap160', 'WITH', 'etap160.project = c.id');
$qb->leftJoin(Etap10::class, 'etap10', 'WITH', 'etap10.project = c.id');
$qb->leftJoin('etap12.numeroCardiMultiple','numeroCardiEntity');
$qb->leftJoin('etap15.informationMultiple','informationEtap15');
$qb->leftJoin(Etap24::class, 'etap24', 'WITH', 'etap24.project = c.id');
$qb->leftJoin('etap24.etap24Champs','etap24Champs');
$qb->leftJoin('etap24Champs.etap26Champs','etap26Champs');
$qb->andWhere('c.name like :query or familleProject.name like :query or typologieProject.name like :query or typeBatimentProject.name like :query
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
or etap8.siretEts like :query or etap14.adresseMiseEnService like :query or etap14.codePostalMiseEnService like :query or etap14.cityMiseEnService like :query
or etap14.firstnameProprietaire like :query or etap14.lastnameProprietaire like :query or etap14.phoneProprietaire like :query or etap14.emailProprietaire like :query
or etap15.numeroContratAchat like :query or numeroCardiEntity.numeroCardi like :query or numeroCardiEntity.identifiantEnedis like :query
or informationEtap15.numeroContratAchat like :query or informationEtap15.tarifContratAchat like :query or etap10.referenceEnedis like :query
or etap26Champs.numeroContratAchat1 like :query or etap26Champs.numeroContratAchat2 like :query
')
->setParameter('query', "%" . $query . "%")
;
if($isArchive){
$qb->andWhere('c.isArchived = 1');
}else{
// if($query){
//
// }else{
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
// }
}
if($statusAdministratifProject){
$qb->andWhere('c.statusAdministratif in (:statusAdministratif)')
->setParameter('statusAdministratif',$statusAdministratifProject);
}
if($statusTrackerProject){
$qb->andWhere('c.statusTrackerActuel in (:statusTracker)')
->setParameter('statusTracker',$statusTrackerProject);
}
if($stadeConstruction){
$qb->andWhere('c.statusTrackerActuelConstruction in (:stadeConstruction)')
->setParameter('stadeConstruction',$stadeConstruction);
}
if($statusUrbanisme){
$qb->leftJoin(StatusUrbanisme::class, 'statusUrbanisme', 'WITH', 'statusUrbanisme.project = c.id');
$str = '';
foreach ($statusUrbanisme as $key => $item){
if($key == 0){
$str .= '(statusUrbanisme.statusStr like :statusUrbanisme'.$key .')' ;
}else{
$str .= ' OR (statusUrbanisme.statusStr like :statusUrbanisme'.$key.')' ;
}
}
if($str != ''){
$qb->andWhere($str);
foreach ($statusUrbanisme as $key => $item) {
$qb->setParameter('statusUrbanisme'.$key, '%'.$item.'%');
}
}
}
if($statusFoncier1 || $statusFoncier2 || $statusFoncier3){
$qb->leftJoin(StatusFoncier::class, 'statusFoncier', 'WITH', 'statusFoncier.project = c.id');
if($statusFoncier1){
$qb->andWhere('statusFoncier.statusStr1 like :statusStr1');
$qb->setParameter('statusStr1', '%'.$statusFoncier1.'%');
}
if($statusFoncier2){
$qb->andWhere('statusFoncier.statusStr2 like :statusStr2');
$qb->setParameter('statusStr2', '%'.$statusFoncier2.'%');
}
if($statusFoncier3){
$qb->andWhere('statusFoncier.statusStr3 like :statusStr3');
$qb->setParameter('statusStr3', '%'.$statusFoncier3.'%');
}
}
if($typologieProject){
$qb->andWhere('c.typologieProject in (:typologieProject)')
->setParameter('typologieProject',$typologieProject);
}
if($status){
$qb->andWhere('c.status in (:status)')
->setParameter('status',$status);
}
if($statusCustom == Project::STATUS_CUSTOM_EN_ATTENT){
$qb->andWhere('c.status in (:status)')
->setParameter('status',[Project::STATUS_DEMANDE,Project::STATUS_EN_ATTENT,Project::STATUS_DEMANDE_REPONDU]);
}elseif ($statusCustom == Project::STATUS_CUSTOM_EXPLOITATION){
$qb->innerJoin(Etap21::class, 'etap21', 'WITH', 'etap21.project = c.id')
->andWhere('etap21.status = :statusValide')
->setParameter('statusValide',Etaps::STATUS_VALIDE);
}elseif ($statusCustom == Project::STATUS_CUSTOM_CONSTRUCTION){
$qb->innerJoin(Etap17::class, 'etap17', 'WITH', 'etap17.project = c.id')
->andWhere('etap17.status = :statusValide')
->setParameter('statusValide',Etaps::STATUS_VALIDE);
$qb->innerJoin(Etap21::class, 'etap21', 'WITH', 'etap21.project = c.id')
->andWhere('etap21.status <> :statusValide')
->setParameter('statusValide',Etaps::STATUS_VALIDE);
}elseif ($statusCustom == Project::STATUS_CUSTOM_DEVELOPPEMENT){
$qb->andWhere('c.status in (:status)')
->setParameter('status',[Project::STATUS_EN_COURS]);
}
if($spv){
$qb->andWhere('c.spv in (:spv)')
->setParameter('spv',$spv);
}
$spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
$user = isset($data['user']) && $data['user'] ? $data['user'] : null;
if(in_array('ROLE_DEV',$user->getRoles())){
if($user->getEntreprise()){
$qb->andWhere('(c.developpeur = :user) or (c.entreprise = :userEntreprise)')
->setParameter('user',$user->getId())
->setParameter('userEntreprise',$user->getEntreprise()->getId());
}else{
$qb->andWhere('c.developpeur = :user')
->setParameter('user',$user->getId());
}
}elseif (in_array('ROLE_EPC',$user->getRoles())){
$qb->andWhere('c.epc = :user or c.developpeur = :user')
->setParameter('user',$user->getId());
}elseif (in_array('ROLE_RESPONSABLE',$user->getRoles())){
$qb->innerJoin('c.responsableUser','responsable');
$qb->andWhere('responsable.responsable = :user')
->setParameter('user',$user->getId());
}elseif (in_array('ROLE_RESPONSABLE_DEVELOPPEMENT',$user->getRoles())){
$qb->innerJoin('c.responsableDeveloppement','responsableDev');
$qb->andWhere('responsableDev.responsable = :user')
->setParameter('user',$user->getId());
}elseif (in_array('ROLE_CONSTRUCTEUR',$user->getRoles())){
$qb->innerJoin('c.constructeurUser','constructeur');
$qb->andWhere('constructeur.constructeur = :user')
->setParameter('user',$user->getId());
}elseif (in_array('ROLE_ADMIN',$user->getRoles()) || in_array('ROLE_SUPER_ADMINISTRATOR',$user->getRoles())){
}
if($user && $user->getIntervenantNum() && $user->getIntervenantNum() != '0'){
$qb->innerJoin('c.intervenantUser','intervenantUser');
$qb->andWhere('intervenantUser.intervenant = :user')
->setParameter('user',$user->getId());
}
if($user && in_array('ROLE_FOURNISSEUR',$user->getRoles())){
$qb->innerJoin('c.fournisseurProject','fournisseurProject');
$qb->innerJoin('fournisseurProject.fournisseur', 'fournisseur');
$qb->leftJoin('c.fournisseur', 'fournisseurUser');
$qb->leftJoin('fournisseur.user', 'fournisseurProjectUser');
$qb->leftJoin('fournisseurUser.user', 'fournisseurUserUser');
$qb->andWhere('fournisseurProjectUser.id = :userFournisseur or fournisseurUserUser.id = :userFournisseur')
->setParameter('userFournisseur', $user->getId());
}
if($user and (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
$qb->andWhere('c.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
if($devProject){
$qb->andWhere('c.developpeur in (:dev)')
->setParameter('dev',$devProject);
}
if($entrepriseProject){
$qb->leftJoin('c.developpeur','developpeurEntity');
$qb->andWhere('(c.entreprise in (:entreprise)) or (developpeurEntity.entreprise in (:entreprise))')
->setParameter('entreprise',$entrepriseProject);
}
if($responsableProject){
$qb->innerJoin('c.responsableUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableProject);
}
if($responsableFoncierProject){
$qb->innerJoin('c.responsableFoncierUser', 'responsable');
$qb->andWhere('responsable.responsable in (:responsable)')
->setParameter('responsable',$responsableFoncierProject);
}
if($responsableDevProject){
$qb->innerJoin('c.responsableDeveloppement', 'responsableDev');
$qb->andWhere('responsableDev.responsable in (:responsableDevStr)')
->setParameter('responsableDevStr',$responsableDevProject);
}
if($constructeurProject){
$qb->innerJoin('c.constructeurUser', 'constructeur');
$qb->andWhere('constructeur.constructeur in (:constructeur)')
->setParameter('constructeur',$constructeurProject);
}
if($intervenantProject){
$qb->innerJoin('c.intervenantUser', 'intervenantUser');
$qb->andWhere('intervenantUser.intervenant in (:intervenantUser)')
->setParameter('intervenantUser',$intervenantProject);
}
$qb->select('DISTINCT c');
$qb->addSelect('etap160.lat as longi, etap160.longi as lat');
$qb->addSelect('etap14.firstnameProprietaire as firstnameProprietaire,etap14.lastnameProprietaire as lastnameProprietaire, etap14.phoneProprietaire as phoneProprietaire');
return $qb->getQuery()->getResult();
}
public function getCentraleEploitationBySpv($spv) {
$qb = $this->createQueryBuilder('c');
$qb->leftJoin('c.spv','spv');
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
$qb->andWhere('c.statusAdministratif = :status')
->setParameter('status', Project::STATUS_CUSTOM_EXPLOITATION);
$qb->andWhere('c.spv = :spvId')
->setParameter('spvId',$spv->getId());
return $qb->getQuery()->getResult();
}
public function searchProjectAnalyse($data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
$qb = $this->createQueryBuilder('c');
$query = isset($data['query']) && $data['query'] ? $data['query'] : null;
$projectIds = isset($data['projectIds']) && $data['projectIds'] ? $data['projectIds'] : null;
// $qb->leftJoin(SolecoProject::class, 'solecoProject', 'WITH', 'solecoProject.project = c.id');
// $qb->leftJoin(SolargisProject::class, 'solargisProject', 'WITH', 'solargisProject.project = c.id');
// $qb->leftJoin('solecoProject.soleco','soleco');
// $qb->leftJoin('solargisProject.solargisPan','solargisPan');
if(isset($data['projectIds'])){
if($projectIds){
$qb->andWhere('c.id in (:projectIds) ')
->setParameter('projectIds', $projectIds);
}else{
$qb->andWhere('c.id = 0 ') ;
}
}
$qb->andWhere('c.name like :query ')
->setParameter('query', "%" . $query . "%");
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
$qb->andWhere('c.statusAdministratif = :status')
->setParameter('status', Project::STATUS_CUSTOM_EXPLOITATION);
if($count){
$qb->select('count(DISTINCT c.id) as result');
return $qb->getQuery()->getOneOrNullResult();
}else{
$qb->select('DISTINCT c');
$qb->orderBy("c.createdAt", $dirOrder);
if ($max) {
$preparedQuery = $qb->getQuery()
->setMaxResults($max)
->setFirstResult($page * $max)
;
} else {
$preparedQuery = $qb->getQuery();
}
return $getResult ? $preparedQuery->getResult() : $preparedQuery;
}
}
public function checkProjectAccess($user,$project,$spvsTab) {
$qb = $this->createQueryBuilder('c');
$qb->leftJoin('c.fournisseurProject', 'fournisseurProject');
$qb->andWhere('c.id = :id')
->setParameter('id',$project->getId());
if(in_array('ROLE_DEV',$user->getRoles())){
if($user->getEntreprise()){
$qb->andWhere('(c.developpeur = :user) or (c.entreprise = :userEntreprise)')
->setParameter('user',$user->getId())
->setParameter('userEntreprise',$user->getEntreprise()->getId());
}else{
$qb->andWhere('c.developpeur = :user')
->setParameter('user',$user->getId());
}
}elseif (in_array('ROLE_EPC',$user->getRoles())){
$qb->andWhere('c.epc = :user or c.developpeur = :user')
->setParameter('user',$user->getId());
}elseif (in_array('ROLE_CONSTRUCTEUR',$user->getRoles())){
$qb->innerJoin('c.constructeurUser','constructeur');
$qb->andWhere('constructeur.constructeur = :user')
->setParameter('user',$user->getId());
}elseif (in_array('ROLE_ADMIN',$user->getRoles()) || in_array('ROLE_SUPER_ADMINISTRATOR',$user->getRoles())){
}
if($user && in_array($user->getTypeAcces(),[User::ACCES_intervenant,User::ACCES_visiteur,User::ACCES_comptable])){
if($user && $spvsTab ){
$qb->andWhere('c.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}else{
if (in_array('ROLE_COMPTABLE',$user->getRoles())||in_array('ROLE_AUDITEUR',$user->getRoles())) {
$qb->andWhere('fournisseurProject.user = :userCourant')
->setParameter('userCourant', $user->getId());
}elseif (in_array('ROLE_FOURNISSEUR',$user->getRoles())){
$qb->innerJoin('fournisseurProject.fournisseur', 'fournisseur');
$qb->leftJoin('c.fournisseur', 'fournisseurUser');
$qb->leftJoin('fournisseur.user', 'fournisseurProjectUser');
$qb->leftJoin('fournisseurUser.user', 'fournisseurUserUser');
$qb->andWhere('fournisseurProjectUser.id = :userFournisseur or fournisseurUserUser.id = :userFournisseur')
->setParameter('userFournisseur', $user->getId());
}
}
}
$qb->setMaxResults(1);
return $qb->getQuery()->getOneOrNullResult() ;
}
}