mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-21 07:03:49 +00:00
FEATURE [repository] implement filter logic
This commit is contained in:
@@ -103,40 +103,52 @@ final class AccompanyingPeriodWorkRepository implements ObjectRepository
|
||||
$rsm->addRootEntityFromClassMetadata(AccompanyingPeriodWork::class, 'w');
|
||||
|
||||
$sql = "SELECT {$rsm} FROM chill_person_accompanying_period_work w
|
||||
WHERE accompanyingPeriod_id = :periodId
|
||||
ORDER BY
|
||||
CASE WHEN enddate IS NULL THEN '-infinity'::timestamp ELSE 'infinity'::timestamp END ASC,
|
||||
startdate DESC,
|
||||
enddate DESC,
|
||||
id DESC";
|
||||
WHERE accompanyingPeriod_id = :periodId";
|
||||
|
||||
// implement filters
|
||||
|
||||
if([] !== ($filters['types'] ?? []))
|
||||
{
|
||||
$sql .= "AND WHERE w.socialAction IN (:types)";
|
||||
$sql .= " AND w.socialaction_id IN (:types)";
|
||||
}
|
||||
|
||||
if([] !== ($filters['users'] ?? []))
|
||||
{
|
||||
$sql .= "AND WHERE w.createdBy IN (:users)";
|
||||
$sql .= " AND w.createdBy = (:userCreated)";
|
||||
|
||||
foreach ($filters['users'] as $key => $user) {
|
||||
$sql .= "OR :user_" . $key . " IN w.referrers)";
|
||||
$sql .= " OR :userReferrer IN (w.referrers)";
|
||||
}
|
||||
|
||||
$nq = $this->em->createNativeQuery($sql, $rsm)
|
||||
->setParameter(':user_' . $key);
|
||||
}
|
||||
|
||||
// ... to be continued
|
||||
if (null !== ($after = $filters['after'] ?? null) && null === $filters['before']) {
|
||||
$sql .= " AND w.startdate::date >= :after";
|
||||
} elseif (null !== ($before = $filters['before'] ?? null) && null === $filters['after']) {
|
||||
$sql .= " AND COALESCE(w.enddate::date, 'infinity'::date) <= :before";
|
||||
} elseif (null !== ($after = $filters['after'] ?? null) && null !== ($before = $filters['before'] ?? null)) {
|
||||
$sql .= " AND w.startdate::date >= :after AND COALESCE(w.enddate::date, 'now'::date) <= :before";
|
||||
}
|
||||
|
||||
// set limit and offset
|
||||
|
||||
$sql .= " ORDER BY
|
||||
CASE WHEN enddate IS NULL THEN '-infinity'::timestamp ELSE 'infinity'::timestamp END ASC,
|
||||
startdate DESC,
|
||||
enddate DESC,
|
||||
id DESC";
|
||||
|
||||
$sql .= " LIMIT :limit OFFSET :offset";
|
||||
|
||||
$typeIds = [];
|
||||
foreach ($filters['types'] as $type) {
|
||||
$typeIds[] = $type->getId();
|
||||
}
|
||||
|
||||
$nq = $this->em->createNativeQuery($sql, $rsm)
|
||||
->setParameter('periodId', $period->getId(), Types::INTEGER)
|
||||
->setParameter('types', $typeIds)
|
||||
->setParameter('userCreated', $filters['user'])
|
||||
->setParameter('userReferrer', $filters['user'])
|
||||
->setParameter('after', $filters['after'])
|
||||
->setParameter('before', $filters['before'])
|
||||
->setParameter('limit', $limit, Types::INTEGER)
|
||||
->setParameter('offset', $offset, Types::INTEGER);
|
||||
|
||||
|
Reference in New Issue
Block a user