src/Repository/UserProjectRepository.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\AppelAProjet;
  4. use App\Entity\Project;
  5. use App\Entity\QuestionnaireResponse;
  6. use App\Entity\User;
  7. use App\Entity\UserProject;
  8. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  9. use Doctrine\ORM\NonUniqueResultException;
  10. use Doctrine\Persistence\ManagerRegistry;
  11. /**
  12.  * @method UserProject|null find($id, $lockMode = null, $lockVersion = null)
  13.  * @method UserProject|null findOneBy(array $criteria, array $orderBy = null)
  14.  * @method UserProject[]    findAll()
  15.  * @method UserProject[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  16.  */
  17. class UserProjectRepository extends ServiceEntityRepository
  18. {
  19.     public function __construct(ManagerRegistry $registry)
  20.     {
  21.         parent::__construct($registryUserProject::class);
  22.     }
  23.     /**
  24.      * @param string $type
  25.      * @param Project $project
  26.      * @param User $user
  27.      * @return UserProject|null
  28.      * @throws NonUniqueResultException
  29.      */
  30.     public function getByTypeByProjectByUser(string $typeProject $projectUser $user)
  31.     {
  32.         return $this->createQueryBuilder('u')
  33.             ->leftJoin('u.questionnaireResponse''qr')
  34.             ->addSelect('qr')
  35.             ->where('u.type = :type')
  36.             ->andWhere('u.project = :project')
  37.             ->andWhere('u.user = :user')
  38.             ->setParameters([
  39.                 'type' => $type,
  40.                 'project' => $project,
  41.                 'user' => $user
  42.             ])
  43.             ->getQuery()
  44.             ->getSingleResult();
  45.     }
  46.     /**
  47.      * @param $aap
  48.      * @param string $type
  49.      * @param $status
  50.      * @return UserProject[]
  51.      */
  52.     public function findByAppelAProjetRelance($aapstring $type$status) {
  53.         $qb $this->createQueryBuilder('u');
  54.         $qb->leftJoin('u.questionnaireResponse''qr')
  55.             ->addSelect('qr')
  56.             ->leftjoin('u.project''p')
  57.             ->leftjoin('u.user','user')
  58.             ->addSelect('user')
  59.             ->leftjoin('u.girci','g')
  60.             ->addSelect('g')
  61.             ->where('p.appelAProjet = :aap')
  62.             ->andWhere('u.type = :type')
  63.             ->andWhere($qb->expr()->orX(
  64.                 'qr is null',
  65.                 'qr.status = :status'
  66.             ))
  67.             ->setParameters([
  68.                 'aap' => $aap,
  69.                 'type' => $type,
  70.                 'status' => $status,
  71.             ])
  72.         ;
  73.         return $qb->getQuery()->getResult();
  74.     }
  75.     /**
  76.      * @param array $types
  77.      * @param Project $project
  78.      * @return UserProject[]
  79.      */
  80.     public function findByTypes(array $typesProject $project)
  81.     {
  82.         return $this->createQueryBuilder('up')
  83.             ->leftJoin('up.questionnaireResponse''qr')
  84.             ->addSelect('qr')
  85.             ->where('up.type in (:types)')
  86.             ->andWhere('up.project = :project')
  87.             ->setParameters([
  88.                 'types' => $types,
  89.                 'project' => $project
  90.             ])
  91.             ->getQuery()
  92.             ->getResult()
  93.             ;
  94.     }
  95.     /**
  96.      * @param AppelAProjet $appelAProjet
  97.      * @return UserProject[]
  98.      */
  99.     public function findByAppelAProjetExpertForDelete(AppelAProjet $appelAProjet)
  100.     {
  101.         return $this->createQueryBuilder('up')
  102.             ->join('up.project''p')
  103.             ->where('p.appelAProjet = :aap')
  104.             ->andWhere('up.type = :type')
  105.             ->setParameters([
  106.                 'aap' => $appelAProjet,
  107.                 'type' => QuestionnaireResponse::QR_TYPE_EXPERT,
  108.             ])
  109.             ->getQuery()
  110.             ->getResult()
  111.             ;
  112.     }
  113.     /**
  114.      * @param Project $project
  115.      * @return UserProject[]
  116.      */
  117.     public function findByProject(Project $project)
  118.     {
  119.         return $this->createQueryBuilder('up')
  120.             ->leftJoin('up.user''u')
  121.             ->addSelect('u')
  122.             ->leftJoin('up.girci''g')
  123.             ->addSelect('g')
  124.             ->where('up.project = :project')
  125.             ->setParameter('project'$project)
  126.             ->getQuery()
  127.             ->getResult()
  128.             ;
  129.     }
  130.     /**
  131.      * @param Project $project
  132.      * @return array
  133.      */
  134.     public function findOrderedByProject(Project $project)
  135.     {
  136.         $results $this->findByProject($project);
  137.         $orderedResult = [];
  138.         foreach ($results as $result) {
  139.             $orderedResult[$result->getType()][] = $result;
  140.         }
  141.         return $orderedResult;
  142.     }
  143.     /**
  144.      * @param Project $project
  145.      * @param string $type
  146.      * @return int
  147.      */
  148.     public function countByProjectByType(Project $projectstring $type)
  149.     {
  150.         return $this->createQueryBuilder('up')
  151.             ->select('COUNT(up.id)')
  152.             ->where('up.project = :project')
  153.             ->andWhere('up.type = :type')
  154.             ->setParameters([
  155.                 'project' => $project,
  156.                 'type' => $type
  157.             ])
  158.             ->getQuery()
  159.             ->getSingleScalarResult()
  160.             ;
  161.     }
  162. }