feat: filter assignments by status

This commit is contained in:
Björn Fromme
2024-01-31 20:15:24 +01:00
parent aef01f25b7
commit 69c83288a5
5 changed files with 35 additions and 0 deletions
+10
View File
@@ -2,6 +2,7 @@
namespace App\Form; namespace App\Form;
use App\Entity\Assignment;
use App\Entity\Destination; use App\Entity\Destination;
use App\Entity\JobProfile; use App\Entity\JobProfile;
use App\Model\AssignmentFilterDto; use App\Model\AssignmentFilterDto;
@@ -37,6 +38,15 @@ class AssignmentFilterType extends AbstractType
'Mehr als einen Woche' => AssignmentFilterDto::DURATION_MORE, 'Mehr als einen Woche' => AssignmentFilterDto::DURATION_MORE,
], ],
]) ])
->add('status', ChoiceType::class, [
'label' => 'Status',
'required' => false,
'choices' => [
'Entwurf' => Assignment::STATUS_DRAFT,
'offen' => Assignment::STATUS_OPEN,
'geschlossen' => Assignment::STATUS_CLOSED,
],
])
->add('apply', SubmitType::class, [ ->add('apply', SubmitType::class, [
'label' => 'filtern', 'label' => 'filtern',
]) ])
+13
View File
@@ -17,6 +17,7 @@ class AssignmentFilterDto extends AbstractFilterDto
protected ?JobProfile $jobProfile = null; protected ?JobProfile $jobProfile = null;
protected ?Destination $destination = null; protected ?Destination $destination = null;
protected ?int $duration = null; protected ?int $duration = null;
protected ?string $status = null;
public function getDateFrom(): ?\DateTimeImmutable public function getDateFrom(): ?\DateTimeImmutable
{ {
@@ -77,4 +78,16 @@ class AssignmentFilterDto extends AbstractFilterDto
return $this; return $this;
} }
public function getStatus(): ?string
{
return $this->status;
}
public function setStatus(?string $status): static
{
$this->status = $status;
return $this;
}
} }
+7
View File
@@ -77,6 +77,13 @@ class AssignmentRepository extends ServiceEntityRepository
private function applyFilterSettings(AssignmentFilterDto $filterDto, QueryBuilder $qb): void private function applyFilterSettings(AssignmentFilterDto $filterDto, QueryBuilder $qb): void
{ {
if (null !== $status = $filterDto->getStatus()) {
$qb
->andWhere($qb->expr()->eq('assignment.status', ':status'))
->setParameter('status', $status)
;
}
if (null !== $dateFrom = $filterDto->getDateFrom()) { if (null !== $dateFrom = $filterDto->getDateFrom()) {
$qb $qb
->andWhere($qb->expr()->gte('destination.dateFrom', ':dateFrom')) ->andWhere($qb->expr()->gte('destination.dateFrom', ':dateFrom'))
@@ -79,6 +79,9 @@ class AssignmentFilterHandler
if (isset($data['duration']) && 0 < (int) $data['duration']) { if (isset($data['duration']) && 0 < (int) $data['duration']) {
$filterDto->setDuration($data['duration']); $filterDto->setDuration($data['duration']);
} }
if (isset($data['status'])) {
$filterDto->setStatus($data['status']);
}
return $filterDto; return $filterDto;
} }
@@ -91,6 +94,7 @@ class AssignmentFilterHandler
'job_profile' => $filterDto->getJobProfile()?->getId(), 'job_profile' => $filterDto->getJobProfile()?->getId(),
'destination' => $filterDto->getDestination()?->getId(), 'destination' => $filterDto->getDestination()?->getId(),
'duration' => $filterDto->getDuration(), 'duration' => $filterDto->getDuration(),
'status' => $filterDto->getStatus(),
]); ]);
} }
@@ -1,5 +1,6 @@
{{ form_start(filterForm) }} {{ form_start(filterForm) }}
<div class="flex flex-col space-y-2 pb-2"> <div class="flex flex-col space-y-2 pb-2">
{{ form_row(filterForm.status) }}
{{ form_row(filterForm.dateFrom) }} {{ form_row(filterForm.dateFrom) }}
{{ form_row(filterForm.dateTo) }} {{ form_row(filterForm.dateTo) }}
{{ form_row(filterForm.jobProfile) }} {{ form_row(filterForm.jobProfile) }}