From 6ada0b649c7598d737eda7b2b1715af8bb922b29 Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Fri, 18 Dec 2020 13:09:28 +0100 Subject: [PATCH] dashboard: fix years with 53 weeks (#2206) --- src/Widget/Type/PaginatedWorkingTimeChart.php | 19 +++++++++++++++++++ ...widget-paginatedworkingtimechart.html.twig | 10 +++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/Widget/Type/PaginatedWorkingTimeChart.php b/src/Widget/Type/PaginatedWorkingTimeChart.php index f5f931f9..94fa019e 100644 --- a/src/Widget/Type/PaginatedWorkingTimeChart.php +++ b/src/Widget/Type/PaginatedWorkingTimeChart.php @@ -63,6 +63,14 @@ final class PaginatedWorkingTimeChart extends SimpleWidget implements UserWidget return $now; } + private function getLastWeekInYear($year): int + { + $lastWeekInYear = new DateTime(); + $lastWeekInYear->setISODate($year, 53); + + return $lastWeekInYear->format('W') === '53' ? 53 : 52; + } + public function getData(array $options = []) { $options = $this->getOptions($options); @@ -77,10 +85,21 @@ final class PaginatedWorkingTimeChart extends SimpleWidget implements UserWidget $weekBegin = $this->getDate($timezone, $options['year'], $options['week'], 1, 0, 0, 0); $weekEnd = $this->getDate($timezone, $options['year'], $options['week'], 7, 23, 59, 59); + $lastWeekInYear = $this->getLastWeekInYear($options['year']); + $lastWeekInLastYear = $this->getLastWeekInYear($options['year'] - 1); + + $thisMonth = clone $weekBegin; + if ((int) $options['week'] === 1) { + $thisMonth = (new DateTime())->setISODate($options['year'], $options['week'], 7)->setTime(0, 0, 0); + } + return [ 'begin' => clone $weekBegin, 'end' => clone $weekEnd, 'stats' => $this->repository->getDailyStats($user, $weekBegin, $weekEnd), + 'thisMonth' => $thisMonth, + 'lastWeekInYear' => $lastWeekInYear, + 'lastWeekInLastYear' => $lastWeekInLastYear, 'day' => $this->repository->getStatistic( 'duration', new DateTime('00:00:00', $timezone), diff --git a/templates/widget/widget-paginatedworkingtimechart.html.twig b/templates/widget/widget-paginatedworkingtimechart.html.twig index f5ebbb43..79d772da 100644 --- a/templates/widget/widget-paginatedworkingtimechart.html.twig +++ b/templates/widget/widget-paginatedworkingtimechart.html.twig @@ -13,13 +13,13 @@ {% set prevWeek = options.week %} {% set nextYear = options.year %} {% set nextWeek = options.week %} - {% if prevWeek == 1 %} + {% if options.week == 1 %} {% set prevYear = prevYear - 1 %} - {% set prevWeek = 52 %} + {% set prevWeek = data.lastWeekInLastYear %} {% else %} {% set prevWeek = prevWeek - 1 %} {% endif %} - {% if nextWeek == 52 %} + {% if options.week == data.lastWeekInYear %} {% set nextYear = nextYear + 1 %} {% set nextWeek = 1 %} {% else %} @@ -53,13 +53,13 @@
{{ data.month|duration }}
- {{ 'stats.workingTimeMonth'|trans({'%month%': data.begin|month_name, '%year%': data.begin|date_format('Y')}) }} + {{ 'stats.workingTimeMonth'|trans({'%month%': data.thisMonth|month_name, '%year%': data.thisMonth|date_format('Y')}) }}
{{ data.year|duration }}
- {{ 'stats.workingTimeYear'|trans({'%year%': data.begin|date_format('Y')}) }} + {{ 'stats.workingTimeYear'|trans({'%year%': data.thisMonth|date_format('Y')}) }}