src/Repository/AlertRepository.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Alert;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. /**
  7.  * @method Alert|null find($id, $lockMode = null, $lockVersion = null)
  8.  * @method Alert|null findOneBy(array $criteria, array $orderBy = null)
  9.  * @method Alert[]    findAll()
  10.  * @method Alert[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  11.  */
  12. class AlertRepository extends ServiceEntityRepository
  13. {
  14.     public function __construct(ManagerRegistry $registry)
  15.     {
  16.         parent::__construct($registry, Alert::class);
  17.     }
  18.     public function search($isArchive = false,$data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
  19.         $qb =  $this->createQueryBuilder('c');
  20.         $query = isset($data['query']) && $data['query'] ? $data['query'] : null;
  21.         $devProject = isset($data['devProject']) && $data['devProject'] ? $data['devProject'] : null;
  22.         $searchDate = isset($data['searchDate']) && $data['searchDate'] ? new \DateTime($data['searchDate']) : null;
  23.         $typeAlert = isset($data['typeAlert']) && $data['typeAlert'] ? $data['typeAlert'] : null;
  24.         $qb->leftJoin('c.project','p');
  25.         $qb->andWhere('p.name like :query ')
  26.             ->setParameter('query', "%" . $query . "%")
  27.         ;
  28.         if($typeAlert){
  29.             $qb->andWhere('c.typeAlert = :typeAlert ')
  30.                 ->setParameter('typeAlert', $typeAlert)
  31.             ;
  32.         }
  33.         if($isArchive){
  34.             $qb->andWhere('c.isArchived = 1');
  35.         }else{
  36.             $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  37.         }
  38.         $qb->andWhere('c.isDeleted = 0 or c.isDeleted is null');
  39.         $qb->andWhere('c.isNotEnabledDashboard = 0 or c.isNotEnabledDashboard is null');
  40.         $spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
  41.         $user = isset($data['user']) && $data['user'] ? $data['user'] : null;
  42.         if($user){
  43.             $qb->leftJoin('p.fournisseurProject', 'fournisseurProject');
  44.             if (in_array('ROLE_COMPTABLE',$user->getRoles())||in_array('ROLE_AUDITEUR',$user->getRoles())) {
  45.                 $qb->andWhere('p.spv in (:spvsTab)')
  46.                     ->setParameter('spvsTab',$spvsTab);
  47.             }elseif (in_array('ROLE_FOURNISSEUR',$user->getRoles())){
  48.                 $qb->innerJoin('fournisseurProject.fournisseur', 'fournisseur');
  49.                 $qb->leftJoin('p.fournisseur', 'fournisseurUser');
  50.                 $qb->leftJoin('fournisseur.user', 'fournisseurProjectUser');
  51.                 $qb->leftJoin('fournisseurUser.user', 'fournisseurUserUser');
  52.                 $qb->andWhere('fournisseurProjectUser.id = :userFournisseur or fournisseurUserUser.id = :userFournisseur')
  53.                     ->setParameter('userFournisseur', $user->getId());
  54.             }
  55.             elseif(in_array('ROLE_DEV',$user->getRoles())){
  56.                 if($user->getEntreprise()){
  57.                     $qb->andWhere('(p.developpeur = :user) or (p.entreprise = :userEntreprise)')
  58.                         ->setParameter('user',$user->getId())
  59.                         ->setParameter('userEntreprise',$user->getEntreprise()->getId());
  60.                 }else{
  61.                     $qb->andWhere('p.developpeur = :user')
  62.                         ->setParameter('user',$user->getId());
  63.                 }
  64.             }elseif (in_array('ROLE_EPC',$user->getRoles())){
  65.                 $qb->andWhere('p.epc = :user or c.developpeur = :user')
  66.                     ->setParameter('user',$user->getId());
  67.             }elseif (in_array('ROLE_CONSTRUCTEUR',$user->getRoles())){
  68.                 $qb->innerJoin('p.constructeurUser','constructeur');
  69.                 $qb->andWhere('constructeur.constructeur = :user')
  70.                     ->setParameter('user',$user->getId());
  71.             }elseif (in_array('ROLE_ADMIN',$user->getRoles()) || in_array('ROLE_SUPER_ADMINISTRATOR',$user->getRoles())){
  72.             }
  73.         }
  74.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null');
  75.         $date6mois = new \DateTime('now');
  76.         $date6mois->modify('+3 month');
  77.         $qb->andWhere('c.dateLimit  <= :date6mois')
  78.             ->setParameter('date6mois',$date6mois);
  79.         if($searchDate){
  80.             $qb->andWhere('c.dateLimit  LIKE :searchDate')
  81.                 ->setParameter('searchDate','%'.$searchDate->format('Y-m-d').'%');
  82.         }
  83.         if($count){
  84.             $qb->select('count(DISTINCT c.id) as result');
  85.             return $qb->getQuery()->getOneOrNullResult();
  86.         }else{
  87.             $qb->select('DISTINCT c');
  88.             $qb->orderBy("c.$columnOrder", $dirOrder);
  89.             if ($columnOrder) {
  90.                 if($columnOrder == 'project'){
  91.                     $qb->orderBy("c.project", $dirOrder);
  92.                 }elseif($columnOrder == 'typeAlert'){
  93.                     $qb->orderBy("c.typeAlert", $dirOrder);
  94.                 }elseif($columnOrder == 'delaiRestant'){
  95.                     $qb->orderBy("c.dateLimit", $dirOrder);
  96.                 }elseif($columnOrder == 'dateLimit'){
  97.                     $qb->orderBy("c.dateLimit", $dirOrder);
  98.                 }else{
  99.                 }
  100.             }
  101.             if ($max) {
  102.                 $preparedQuery = $qb->getQuery()
  103.                     ->setMaxResults($max)
  104.                     ->setFirstResult($page * $max)
  105.                 ;
  106.             } else {
  107.                 $preparedQuery = $qb->getQuery();
  108.             }
  109.             return $getResult ? $preparedQuery->getResult() : $preparedQuery;
  110.         }
  111.     }
  112.     public function getActives($spvs,$user) {
  113.         $qb =  $this->createQueryBuilder('c');
  114.         $spvsTab = $spvs;
  115.         if ($user and  (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user->getRoles()))) {
  116.             $qb->andWhere('p.spv in (:spvsTab)')
  117.                 ->setParameter('spvsTab',$spvsTab);
  118.         }
  119.         $qb->leftJoin('c.project','p');
  120.         $qb->andWhere('p.isArchived = 0 or p.isArchived is null');
  121.         $qb->andWhere('c.isArchived = 0 or c.isArchived is null');
  122.         $qb->andWhere('c.isDeleted = 0 or c.isDeleted is null');
  123.         $qb->andWhere('c.isNotEnabledDashboard = 0 or c.isNotEnabledDashboard is null');
  124.         return $qb->getQuery()->getResult();
  125.     }
  126.     public function findAllAlertByTokens($tokens){
  127.         $qb =  $this->createQueryBuilder('c');
  128.         $qb->andWhere('c.token in (:tokens)')
  129.             ->setParameter('tokens',$tokens);
  130.         return  $qb->getQuery()->getResult();
  131.     }
  132. }