From ead765a9c1884ca582713866f90aa869e3dd410b Mon Sep 17 00:00:00 2001 From: taitus Date: Sat, 2 Feb 2019 17:18:02 +0100 Subject: [PATCH 1/2] The value of cweek did not manage well the last week of the year grouping_key_for method when params[:group] == "week" always returned "#{date.cweek}/#{date.year}" but that not always is true. When a date belongs to the first_week/last_week of the year we have exceptions for example "31/12/2018". His cweek is equal to "1", old code returned "1/2018" value but correct result would be "1/2019". --- .../concerns/dashboard/group_supports.rb | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/app/controllers/concerns/dashboard/group_supports.rb b/app/controllers/concerns/dashboard/group_supports.rb index d1e6c9d31..e726fc28f 100644 --- a/app/controllers/concerns/dashboard/group_supports.rb +++ b/app/controllers/concerns/dashboard/group_supports.rb @@ -7,8 +7,8 @@ module Dashboard::GroupSupports end def grouping_key_for(date) - return "#{date.cweek}/#{date.year}" if params[:group_by] == 'week' - return "#{date.year}-#{date.month}" if params[:group_by] == 'month' + return calculate_week(date) if params[:group_by] == "week" + return "#{date.year}-#{date.month}" if params[:group_by] == "month" date end @@ -50,4 +50,29 @@ module Dashboard::GroupSupports 1.day end end + private + + def calculate_week(date) + week = date.cweek + year = calculate_year_of_week(date) + "#{week}/#{year}" + end + + def calculate_year_of_week(date) + year = date.year + if first_week_of_year?(date) && date.end_of_week.year != date.year + year = year + 1 + elsif last_week_of_year?(date) && date.beginning_of_week.year != date.year + year = year - 1 + end + year + end + + def first_week_of_year?(date) + date.cweek == 1 + end + + def last_week_of_year?(date) + date.cweek == 52 || date.cweek == 53 + end end From 7d910ed502333eba21c572679f25d63d04e64bd5 Mon Sep 17 00:00:00 2001 From: taitus Date: Sat, 2 Feb 2019 17:19:46 +0100 Subject: [PATCH 2/2] Fix wrong iteration. Explained on Notes from PR --- app/controllers/concerns/dashboard/group_supports.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/dashboard/group_supports.rb b/app/controllers/concerns/dashboard/group_supports.rb index e726fc28f..79888fd45 100644 --- a/app/controllers/concerns/dashboard/group_supports.rb +++ b/app/controllers/concerns/dashboard/group_supports.rb @@ -3,7 +3,7 @@ module Dashboard::GroupSupports included do def grouped_supports(attribute) - supports.group_by { |v| grouping_key_for(v[attribute].to_date) } + supports.group_by { |v| grouping_key_for(v[attribute].in_time_zone.to_date) } end def grouping_key_for(date)