From 2df2d7037538b68becc77dd6e0d94478a0d551d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Mon, 28 Oct 2024 16:52:36 +0100 Subject: [PATCH] feat: overview of teamers' custom availabilities --- .../Availability/IndexController.php | 44 +++++++++++++ src/Menu/AdminMenuBuilder.php | 9 +++ src/Repository/AvailabilityRepository.php | 16 +++-- .../availability/index.html.twig | 64 +++++++++++++++++++ 4 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 src/Controller/Administrative/Availability/IndexController.php create mode 100644 templates/administrative/availability/index.html.twig diff --git a/src/Controller/Administrative/Availability/IndexController.php b/src/Controller/Administrative/Availability/IndexController.php new file mode 100644 index 0000000..eea9e96 --- /dev/null +++ b/src/Controller/Administrative/Availability/IndexController.php @@ -0,0 +1,44 @@ +availabilityRepository + ->getListQuery(true) + ; + + $pagination = $this->paginator->paginate( + $query, + $request->query->getInt('page', 1), + $request->query->getInt('limit', 10), + [ + 'defaultSortFieldName' => 'availability.dateFrom', + 'defaultSortDirection' => 'asc', + ] + ); + + return $this->render('administrative/availability/index.html.twig', [ + 'pagination' => $pagination, + ]); + } +} \ No newline at end of file diff --git a/src/Menu/AdminMenuBuilder.php b/src/Menu/AdminMenuBuilder.php index 212c143..9e9d926 100644 --- a/src/Menu/AdminMenuBuilder.php +++ b/src/Menu/AdminMenuBuilder.php @@ -74,6 +74,15 @@ class AdminMenuBuilder extends AbstractMenuBuilder ], ], ]); + $menu->addChild('Verfügbarkeiten', [ + 'route' => 'app_administrative_availability_index', + 'linkAttributes' => [ + 'title' => 'Verfügbarkeiten', + ], + 'extras' => [ + 'icon' => 'calendar', + ], + ]); $settingsMenu = $menu->addChild('Einstellungen', [ 'linkAttributes' => [ 'title' => 'Einstellungen', diff --git a/src/Repository/AvailabilityRepository.php b/src/Repository/AvailabilityRepository.php index eb25923..f32d757 100644 --- a/src/Repository/AvailabilityRepository.php +++ b/src/Repository/AvailabilityRepository.php @@ -23,20 +23,28 @@ class AvailabilityRepository extends ServiceEntityRepository parent::__construct($registry, Availability::class); } - public function getListQuery(): Query + public function getListQuery(bool $custom = false): Query { $qb = $this->createQueryBuilder('availability'); - return $qb + $qb + ->select('availability', 'teamer') + ->leftJoin('availability.owner', 'teamer') ->where($qb->expr()->andX( $qb->expr()->gt('availability.dateFrom', ':today'), - $qb->expr()->isNull('availability.owner'), $qb->expr()->isNull('availability.deletedAt') )) ->orderBy('availability.dateFrom', 'ASC') ->setParameter('today', new \DateTimeImmutable()) - ->getQuery() ; + + if (false === $custom) { + $qb->andWhere($qb->expr()->isNull('availability.owner')); + } else { + $qb->andWhere($qb->expr()->isNotNull('availability.owner')); + } + + return $qb->getQuery(); } public function getSelectableForTeamer(Teamer $teamer): array diff --git a/templates/administrative/availability/index.html.twig b/templates/administrative/availability/index.html.twig new file mode 100644 index 0000000..3d88682 --- /dev/null +++ b/templates/administrative/availability/index.html.twig @@ -0,0 +1,64 @@ +{% extends 'admin/layout.html.twig' %} + +{% block title %}Eigene Verfügbarkeiten der Teamer{% endblock %} + +{% block content %} +

+ Eigene Verfügbarkeiten der Teamer +

+
+
+ + + + + + + + + + + {% for availability in pagination %} + + + + + + + {% else %} + + + + {% endfor %} + +
+ {{ knp_pagination_sortable(pagination, 'Datum von', 'availability.dateFrom') }} + + {{ knp_pagination_sortable(pagination, 'Datum bis', 'availability.dateTo') }} + + {{ knp_pagination_sortable(pagination, 'Teamer', 'teamer.lastName') }} + + {{ knp_pagination_sortable(pagination, 'Beschreibung', 'availability.description') }} +
+ {{ availability.dateFrom|date('d.m.Y') }} + + {{ availability.dateTo|date('d.m.Y') }} + + {{ availability.owner.lastName }}, {{ availability.owner.firstName }} + + {{ availability.description|default('-') }} +
+ Keine Daten... +
+ {{ knp_pagination_render(pagination) }} +
+
+ +{% endblock %} \ No newline at end of file