*/ final class EmployeeRepository extends ServiceEntityRepository { public function __construct( ManagerRegistry $registry, private readonly EmployeeScopeService $employeeScopeService, ) { parent::__construct($registry, Employee::class); } /** * @param list $employeeIds * * @return array */ public function findAccessibleByIds(array $employeeIds, User $user): array { if ([] === $employeeIds) { return []; } $qb = $this->createQueryBuilder('e') ->andWhere('e.id IN (:ids)') ->setParameter('ids', $employeeIds) ; $this->employeeScopeService->applyEmployeeScope($qb, 'e', 'employee_repo_scope', $user); /** @var list $employees */ $employees = $qb->getQuery()->getResult(); $byId = []; foreach ($employees as $employee) { $employeeId = $employee->getId(); if ($employeeId) { $byId[$employeeId] = $employee; } } return $byId; } /** * @return list */ public function findScoped(User $user): array { $qb = $this->createQueryBuilder('e') ->leftJoin('e.site', 's') ->addSelect('s') ->orderBy('s.name', 'ASC') ->addOrderBy('e.displayOrder', 'ASC') ->addOrderBy('e.lastName', 'ASC') ->addOrderBy('e.firstName', 'ASC') ; $this->employeeScopeService->applyEmployeeScope($qb, 'e', 'employee_scoped_list', $user); /** @var list $employees */ return $qb->getQuery()->getResult(); } /** * @param list $siteIds * * @return list */ public function findForPrintBySiteIds(array $siteIds): array { $qb = $this->createQueryBuilder('e') ->leftJoin('e.site', 's') ->addSelect('s') ->orderBy('s.displayOrder', 'ASC') ->addOrderBy('s.name', 'ASC') ->addOrderBy('e.displayOrder', 'ASC') ->addOrderBy('e.lastName', 'ASC') ->addOrderBy('e.firstName', 'ASC') ; if ([] !== $siteIds) { $qb->andWhere('s.id IN (:siteIds)') ->setParameter('siteIds', $siteIds) ; } /** @var list $employees */ return $qb->getQuery()->getResult(); } }