* * @method Teamer|null find($id, $lockMode = null, $lockVersion = null) * @method Teamer|null findOneBy(array $criteria, array $orderBy = null) * @method Teamer[] findAll() * @method Teamer[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class TeamerRepository extends ServiceEntityRepository { use QueryHelperTrait; public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Teamer::class); } public function getListQuery(TeamerFilterDto $filterDto): Query { $qb = $this->createQueryBuilder('teamer'); $qb ->select('teamer', 'user', 'feedback') ->leftJoin('teamer.availabilities', 'availability') ->leftJoin('teamer.jobProfiles', 'job_profile') ->leftJoin('teamer.licenses', 'license') ->leftJoin('teamer.feedback', 'feedback') ->leftJoin('teamer.user', 'user') ->addOrderBy('teamer.viewed', 'asc') ->addOrderBy('teamer.lastName', 'asc') ; if (null !== $filterDto->getName()) { $qb ->andWhere($qb->expr()->orX( $qb->expr()->like('teamer.firstName', ':name'), $qb->expr()->like('teamer.lastName', ':name') )) ->setParameter('name', '%'.$this->escapeLikeWildcards($filterDto->getName()).'%') ; } if (null !== $filterDto->getAvailableAt()) { $qb ->andWhere($qb->expr()->andX( $qb->expr()->lte('availability.dateFrom', ':availableAt'), $qb->expr()->gte('availability.dateTo', ':availableAt') )) ->setParameter('availableAt', $filterDto->getAvailableAt()) ; } if (0 < count($filterDto->getJobProfiles())) { $qb ->andWhere($qb->expr()->in('job_profile', ':jobProfiles')) ->setParameter('jobProfiles', $filterDto->getJobProfiles()) ; } if ('' !== $filterDto->getPickupId()) { $qb ->andWhere($qb->expr()->like('teamer.pickups', ':pickup')) ->setParameter('pickup', '%"'.$this->escapeLikeWildcards($filterDto->getPickupId()).'"%') ; } if (true === $filterDto->hasSkiLicense()) { $qb ->andWhere($qb->expr()->eq('license.type', ':licenseSki')) ->setParameter('licenseSki', License::TYPE_SKI) ; } if (true === $filterDto->hasSnowboardLicense()) { $qb ->andWhere($qb->expr()->eq('license.type', ':licenseSnowboard')) ->setParameter('licenseSnowboard', License::TYPE_SNOWBOARD) ; } if (true === $filterDto->hasNoTrainings()) { $qb ->leftJoin('teamer.trainingAttendances', 'training_attendance') ->andWhere($qb->expr()->isNull('training_attendance')) ; } return $qb->getQuery(); } public function getAutocompletionData(string $search): array { $qb = $this->createQueryBuilder('teamer'); $teamers = $qb ->where($qb->expr()->orX( $qb->expr()->like('teamer.lastName', ':search'), $qb->expr()->like('teamer.firstName', ':search'), )) ->orderBy('teamer.lastName', 'ASC') ->addOrderBy('teamer.firstName', 'ASC') ->setParameter('search', '%'.$this->escapeLikeWildcards($search).'%') ->getQuery() ->getResult() ; $data = [ [ 'value' => '', 'text' => '...', ], ]; foreach ($teamers as $teamer) { $data[] = [ 'value' => $teamer->getId(), 'text' => (string) $teamer, ]; } return $data; } }