diff --git a/src/Controller/Administrative/Statistics/ApplicationsByDestinationController.php b/src/Controller/Administrative/Statistics/ApplicationsByDestinationController.php index 7865afd..d3fa1e3 100644 --- a/src/Controller/Administrative/Statistics/ApplicationsByDestinationController.php +++ b/src/Controller/Administrative/Statistics/ApplicationsByDestinationController.php @@ -35,8 +35,8 @@ class ApplicationsByDestinationController extends AbstractController } $statistics = $this->applicationRepository->getApplicationsByDestination( - $filterDto->getDateFrom(), - $filterDto->getDateTo(), + $filterDto->getEffectiveDateFrom(), + $filterDto->getEffectiveDateTo(), ); return $this->render('administrative/statistics/applications_by_destination.html.twig', [ diff --git a/src/Controller/Administrative/Statistics/FeedbackByDestinationController.php b/src/Controller/Administrative/Statistics/FeedbackByDestinationController.php index a839ceb..178a273 100644 --- a/src/Controller/Administrative/Statistics/FeedbackByDestinationController.php +++ b/src/Controller/Administrative/Statistics/FeedbackByDestinationController.php @@ -35,8 +35,8 @@ class FeedbackByDestinationController extends AbstractController } $statistics = $this->dispositionRepository->getFeedbackStatisticsByNormalizedHotelCode( - $filterDto->getDateFrom(), - $filterDto->getDateTo(), + $filterDto->getEffectiveDateFrom(), + $filterDto->getEffectiveDateTo(), ); return $this->render('administrative/statistics/feedback_by_destination.html.twig', [ diff --git a/src/Controller/Administrative/Statistics/FeedbackRatingsByDestinationController.php b/src/Controller/Administrative/Statistics/FeedbackRatingsByDestinationController.php index d999214..46d367a 100644 --- a/src/Controller/Administrative/Statistics/FeedbackRatingsByDestinationController.php +++ b/src/Controller/Administrative/Statistics/FeedbackRatingsByDestinationController.php @@ -35,8 +35,8 @@ class FeedbackRatingsByDestinationController extends AbstractController } $statistics = $this->feedbackRepository->getAverageRatingsByDestinationAndFeedbackSet( - $filterDto->getDateFrom(), - $filterDto->getDateTo(), + $filterDto->getEffectiveDateFrom(), + $filterDto->getEffectiveDateTo(), ); return $this->render('administrative/statistics/feedback_ratings_by_destination.html.twig', [ diff --git a/src/Controller/Administrative/Statistics/FeedbackRatingsController.php b/src/Controller/Administrative/Statistics/FeedbackRatingsController.php index cafb676..6cf9755 100644 --- a/src/Controller/Administrative/Statistics/FeedbackRatingsController.php +++ b/src/Controller/Administrative/Statistics/FeedbackRatingsController.php @@ -35,8 +35,8 @@ class FeedbackRatingsController extends AbstractController } $statistics = $this->feedbackRepository->getAverageRatingsByQuestionAndFeedbackSet( - $filterDto->getDateFrom(), - $filterDto->getDateTo(), + $filterDto->getEffectiveDateFrom(), + $filterDto->getEffectiveDateTo(), ); // Prepare chart data for each feedback set diff --git a/src/Model/StatisticsFilterDto.php b/src/Model/StatisticsFilterDto.php index 3eaead9..eb708b3 100644 --- a/src/Model/StatisticsFilterDto.php +++ b/src/Model/StatisticsFilterDto.php @@ -32,4 +32,27 @@ class StatisticsFilterDto extends AbstractFilterDto return $this; } + + /** + * The lower bound actually applied to a query: the picked date, or a rolling + * 12-month window ending today when nothing is picked. + * + * The default lives here rather than in a nullable property so that + * AbstractFilterDto::isActive() still sees a fresh instance as "not filtered" + * (it compares properties with !==, which no two DateTimeImmutable share). + */ + public function getEffectiveDateFrom(): \DateTimeImmutable + { + return $this->dateFrom ?? (new \DateTimeImmutable('today'))->modify('-12 months'); + } + + public function getEffectiveDateTo(): \DateTimeImmutable + { + return $this->dateTo ?? new \DateTimeImmutable('today 23:59:59'); + } + + public function isUsingDefaultRange(): bool + { + return null === $this->dateFrom && null === $this->dateTo; + } } diff --git a/templates/administrative/statistics/applications_by_destination.html.twig b/templates/administrative/statistics/applications_by_destination.html.twig index 264aaaa..648e2a3 100644 --- a/templates/administrative/statistics/applications_by_destination.html.twig +++ b/templates/administrative/statistics/applications_by_destination.html.twig @@ -24,13 +24,12 @@ {{ form_end(form) }} - {% if filterDto.active %} -
- Filter aktiv: - {% if filterDto.dateFrom %}von {{ filterDto.dateFrom|date('d.m.Y') }}{% endif %} - {% if filterDto.dateTo %}bis {{ filterDto.dateTo|date('d.m.Y') }}{% endif %} -
- {% endif %} ++ Zeitraum: {{ filterDto.effectiveDateFrom|date('d.m.Y') }} – {{ filterDto.effectiveDateTo|date('d.m.Y') }} + + {% if filterDto.usingDefaultRange %}(Standard: letzte 12 Monate){% else %}(Filter aktiv){% endif %} + +
{% if statistics is empty %}- Filter aktiv: - {% if filterDto.dateFrom %}von {{ filterDto.dateFrom|date('d.m.Y') }}{% endif %} - {% if filterDto.dateTo %}bis {{ filterDto.dateTo|date('d.m.Y') }}{% endif %} -
- {% endif %} ++ Zeitraum: {{ filterDto.effectiveDateFrom|date('d.m.Y') }} – {{ filterDto.effectiveDateTo|date('d.m.Y') }} + + {% if filterDto.usingDefaultRange %}(Standard: letzte 12 Monate){% else %}(Filter aktiv){% endif %} + +
{% if statistics is empty %}- Filter aktiv: - {% if filterDto.dateFrom %}von {{ filterDto.dateFrom|date('d.m.Y') }}{% endif %} - {% if filterDto.dateTo %}bis {{ filterDto.dateTo|date('d.m.Y') }}{% endif %} -
- {% endif %} ++ Zeitraum: {{ filterDto.effectiveDateFrom|date('d.m.Y') }} – {{ filterDto.effectiveDateTo|date('d.m.Y') }} + + {% if filterDto.usingDefaultRange %}(Standard: letzte 12 Monate){% else %}(Filter aktiv){% endif %} + +
{% if chartsData is empty %}- Filter aktiv: - {% if filterDto.dateFrom %}von {{ filterDto.dateFrom|date('d.m.Y') }}{% endif %} - {% if filterDto.dateTo %}bis {{ filterDto.dateTo|date('d.m.Y') }}{% endif %} -
- {% endif %} ++ Zeitraum: {{ filterDto.effectiveDateFrom|date('d.m.Y') }} – {{ filterDto.effectiveDateTo|date('d.m.Y') }} + + {% if filterDto.usingDefaultRange %}(Standard: letzte 12 Monate){% else %}(Filter aktiv){% endif %} + +
{% if destinations is empty %}