src/Repository/UserProjectRepository.php line 24

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.         return $this->createQueryBuilder('u')
  54.             ->leftJoin('u.questionnaireResponse''qr''WITH''qr.status = :status')
  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.             ->setParameters([
  64.                 'aap' => $aap,
  65.                 'type' => $type,
  66.                 'status' => $status,
  67.             ])
  68.             ->getQuery()
  69.             ->getResult();
  70.     }
  71.     /**
  72.      * @param array $types
  73.      * @param Project $project
  74.      * @return UserProject[]
  75.      */
  76.     public function findByTypes(array $typesProject $project)
  77.     {
  78.         return $this->createQueryBuilder('up')
  79.             ->leftJoin('up.questionnaireResponse''qr')
  80.             ->addSelect('qr')
  81.             ->where('up.type in (:types)')
  82.             ->andWhere('up.project = :project')
  83.             ->setParameters([
  84.                 'types' => $types,
  85.                 'project' => $project
  86.             ])
  87.             ->getQuery()
  88.             ->getResult()
  89.             ;
  90.     }
  91.     /**
  92.      * @param AppelAProjet $appelAProjet
  93.      * @return UserProject[]
  94.      */
  95.     public function findByAppelAProjetExpertForDelete(AppelAProjet $appelAProjet)
  96.     {
  97.         return $this->createQueryBuilder('up')
  98.             ->join('up.project''p')
  99.             ->where('p.appelAProjet = :aap')
  100.             ->andWhere('up.type = :type')
  101.             ->setParameters([
  102.                 'aap' => $appelAProjet,
  103.                 'type' => QuestionnaireResponse::QR_TYPE_EXPERT,
  104.             ])
  105.             ->getQuery()
  106.             ->getResult()
  107.             ;
  108.     }
  109.     /**
  110.      * @param Project $project
  111.      * @return UserProject[]
  112.      */
  113.     public function findByProject(Project $project)
  114.     {
  115.         return $this->createQueryBuilder('up')
  116.             ->leftJoin('up.user''u')
  117.             ->addSelect('u')
  118.             ->leftJoin('up.girci''g')
  119.             ->addSelect('g')
  120.             ->where('up.project = :project')
  121.             ->setParameter('project'$project)
  122.             ->getQuery()
  123.             ->getResult()
  124.             ;
  125.     }
  126.     /**
  127.      * @param Project $project
  128.      * @return array
  129.      */
  130.     public function findOrderedByProject(Project $project)
  131.     {
  132.         $results $this->findByProject($project);
  133.         $orderedResult = [];
  134.         foreach ($results as $result) {
  135.             $orderedResult[$result->getType()][] = $result;
  136.         }
  137.         return $orderedResult;
  138.     }
  139.     /**
  140.      * @param Project $project
  141.      * @param string $type
  142.      * @return int
  143.      */
  144.     public function countByProjectByType(Project $projectstring $type)
  145.     {
  146.         return $this->createQueryBuilder('up')
  147.             ->select('COUNT(up.id)')
  148.             ->where('up.project = :project')
  149.             ->andWhere('up.type = :type')
  150.             ->setParameters([
  151.                 'project' => $project,
  152.                 'type' => $type
  153.             ])
  154.             ->getQuery()
  155.             ->getSingleScalarResult()
  156.             ;
  157.     }
  158. }