mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
FEATURE [repository] implement filter logic
This commit is contained in:
parent
cc97199c5d
commit
e0758215ba
@ -255,6 +255,7 @@ class Address implements TrackCreationInterface, TrackUpdateInterface
|
|||||||
|
|
||||||
public function syncWithReference(AddressReference $addressReference): Address
|
public function syncWithReference(AddressReference $addressReference): Address
|
||||||
{
|
{
|
||||||
|
dump($addressReference);
|
||||||
$this
|
$this
|
||||||
->setPoint($addressReference->getPoint())
|
->setPoint($addressReference->getPoint())
|
||||||
->setPostcode($addressReference->getPostcode())
|
->setPostcode($addressReference->getPostcode())
|
||||||
|
@ -11,6 +11,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Chill\MainBundle\Templating\Listing;
|
namespace Chill\MainBundle\Templating\Listing;
|
||||||
|
|
||||||
|
use Chill\MainBundle\Entity\User;
|
||||||
use Chill\MainBundle\Form\Type\Listing\FilterOrderType;
|
use Chill\MainBundle\Form\Type\Listing\FilterOrderType;
|
||||||
use DateTimeImmutable;
|
use DateTimeImmutable;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\FormType;
|
use Symfony\Component\Form\Extension\Core\Type\FormType;
|
||||||
@ -134,7 +135,7 @@ class FilterOrderHelper
|
|||||||
return $this->userPickers;
|
return $this->userPickers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserPickerData(string $name): array
|
public function getUserPickerData(string $name)
|
||||||
{
|
{
|
||||||
return $this->getFormData()['user_pickers'][$name];
|
return $this->getFormData()['user_pickers'][$name];
|
||||||
}
|
}
|
||||||
|
@ -161,7 +161,7 @@ class AccompanyingCourseWorkController extends AbstractController
|
|||||||
'types' => $filter->getEntityChoiceData('typesFilter'),
|
'types' => $filter->getEntityChoiceData('typesFilter'),
|
||||||
'before' => $filter->getDateRangeData('dateFilter')['to'],
|
'before' => $filter->getDateRangeData('dateFilter')['to'],
|
||||||
'after' => $filter->getDateRangeData('dateFilter')['from'],
|
'after' => $filter->getDateRangeData('dateFilter')['from'],
|
||||||
'users' => $filter->getUserPickerData('userFilter')
|
'user' => $filter->getUserPickerData('userFilter')
|
||||||
];
|
];
|
||||||
|
|
||||||
$totalItems = $this->workRepository->countByAccompanyingPeriod($period);
|
$totalItems = $this->workRepository->countByAccompanyingPeriod($period);
|
||||||
@ -226,7 +226,7 @@ class AccompanyingCourseWorkController extends AbstractController
|
|||||||
->addEntityChoice('typesFilter', 'accompanying_course_work.types_filter', \Chill\PersonBundle\Entity\SocialWork\SocialAction::class, $types, [
|
->addEntityChoice('typesFilter', 'accompanying_course_work.types_filter', \Chill\PersonBundle\Entity\SocialWork\SocialAction::class, $types, [
|
||||||
'choice_label' => fn (SocialAction $sa) => $this->translatableStringHelper->localize($sa->getTitle())
|
'choice_label' => fn (SocialAction $sa) => $this->translatableStringHelper->localize($sa->getTitle())
|
||||||
])
|
])
|
||||||
->addUserPicker('userFilter', 'accompanying_course_work.user_filter', ['required' => false])
|
->addUserPicker('userFilter', 'accompanying_course_work.user_filter', ['required' => false, 'multiple' => false])
|
||||||
;
|
;
|
||||||
|
|
||||||
return $filterBuilder->build();
|
return $filterBuilder->build();
|
||||||
|
@ -103,40 +103,52 @@ final class AccompanyingPeriodWorkRepository implements ObjectRepository
|
|||||||
$rsm->addRootEntityFromClassMetadata(AccompanyingPeriodWork::class, 'w');
|
$rsm->addRootEntityFromClassMetadata(AccompanyingPeriodWork::class, 'w');
|
||||||
|
|
||||||
$sql = "SELECT {$rsm} FROM chill_person_accompanying_period_work w
|
$sql = "SELECT {$rsm} FROM chill_person_accompanying_period_work w
|
||||||
WHERE accompanyingPeriod_id = :periodId
|
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";
|
|
||||||
|
|
||||||
// implement filters
|
// implement filters
|
||||||
|
|
||||||
if([] !== ($filters['types'] ?? []))
|
if([] !== ($filters['types'] ?? []))
|
||||||
{
|
{
|
||||||
$sql .= "AND WHERE w.socialAction IN (:types)";
|
$sql .= " AND w.socialaction_id IN (:types)";
|
||||||
}
|
}
|
||||||
|
|
||||||
if([] !== ($filters['users'] ?? []))
|
if([] !== ($filters['users'] ?? []))
|
||||||
{
|
{
|
||||||
$sql .= "AND WHERE w.createdBy IN (:users)";
|
$sql .= " AND w.createdBy = (:userCreated)";
|
||||||
|
|
||||||
foreach ($filters['users'] as $key => $user) {
|
$sql .= " OR :userReferrer IN (w.referrers)";
|
||||||
$sql .= "OR :user_" . $key . " 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
|
// 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";
|
$sql .= " LIMIT :limit OFFSET :offset";
|
||||||
|
|
||||||
|
$typeIds = [];
|
||||||
|
foreach ($filters['types'] as $type) {
|
||||||
|
$typeIds[] = $type->getId();
|
||||||
|
}
|
||||||
|
|
||||||
$nq = $this->em->createNativeQuery($sql, $rsm)
|
$nq = $this->em->createNativeQuery($sql, $rsm)
|
||||||
->setParameter('periodId', $period->getId(), Types::INTEGER)
|
->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('limit', $limit, Types::INTEGER)
|
||||||
->setParameter('offset', $offset, Types::INTEGER);
|
->setParameter('offset', $offset, Types::INTEGER);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user