feat: hide past assignments by default, include via filtersetting

This commit is contained in:
Björn Fromme
2024-07-15 14:37:15 +02:00
parent dcaf338da8
commit 5a0c998d2b
5 changed files with 30 additions and 0 deletions
+5
View File
@@ -10,6 +10,7 @@ use App\Model\AssignmentFilterDto;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
@@ -51,6 +52,10 @@ class AssignmentFilterType extends AbstractType
'Mehr als einen Woche' => AssignmentFilterDto::DURATION_MORE,
],
])
->add('includePast', CheckboxType::class, [
'label' => 'vergangene Einsätze anzeigen',
'required' => false,
])
->add('apply', SubmitType::class, [
'label' => 'filtern',
])
+13
View File
@@ -18,6 +18,7 @@ class AssignmentFilterDto extends AbstractFilterDto
protected ?string $hotel = null;
protected ?int $duration = null;
protected ?string $status = null;
protected bool $includePast = false;
public function getDateFrom(): ?\DateTimeImmutable
{
@@ -90,4 +91,16 @@ class AssignmentFilterDto extends AbstractFilterDto
return $this;
}
public function isIncludePast(): bool
{
return $this->includePast;
}
public function setIncludePast(bool $includePast): static
{
$this->includePast = $includePast;
return $this;
}
}
+7
View File
@@ -110,6 +110,13 @@ class AssignmentRepository extends ServiceEntityRepository
private function applyFilterSettings(AssignmentFilterDto $filterDto, QueryBuilder $qb): void
{
if (false === $filterDto->isIncludePast()) {
$qb
->andWhere($qb->expr()->gte('destination.dateFrom', ':now'))
->setParameter('now', new \DateTimeImmutable())
;
}
if (null !== $status = $filterDto->getStatus()) {
switch ($status) {
case Assignment::STATUS_STAFFED:
@@ -76,6 +76,9 @@ class AssignmentFilterHandler
if (isset($data['status'])) {
$filterDto->setStatus($data['status']);
}
if (isset($data['include_past'])) {
$filterDto->setIncludePast((bool) $data['include_past']);
}
return $filterDto;
}
@@ -89,6 +92,7 @@ class AssignmentFilterHandler
'hotel' => $filterDto->getHotel(),
'duration' => $filterDto->getDuration(),
'status' => $filterDto->getStatus(),
'include_past' => $filterDto->isIncludePast(),
]);
}
@@ -13,6 +13,7 @@
{{ form_row(filterForm.jobProfile) }}
{{ form_row(filterForm.hotel) }}
{{ form_row(filterForm.duration) }}
{{ form_row(filterForm.includePast) }}
</div>
<div class="flex items-center space-x-2">
{{ form_widget(filterForm.apply, { 'attr': { 'class': 'btn' } }) }}