From 9484c4cdf44db89981257661db1c778dd68ef17a Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 1 Apr 2022 18:20:12 +0200 Subject: [PATCH 1/2] fix(Dossier.processed_in_month): using PG between operator with a date does not play nicely when it is compared to DateTime in postgres. meaning given a Date as 2022/03/31, when compared with a DateTime in postgres, the casting of 2022/03/31 to Datetime becomes 2022/03/31 00:00. So we skiped all dossiers from last date in month --- app/models/dossier.rb | 4 ++-- spec/models/dossier_spec.rb | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 4a3109c90..53e3bebc0 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -233,10 +233,10 @@ class Dossier < ApplicationRecord scope :en_instruction, -> { not_archived.state_en_instruction } scope :termine, -> { not_archived.state_termine } - scope :processed_in_month, -> (month) do + scope :processed_in_month, -> (date) do state_termine .joins(:traitements) - .where(traitements: { processed_at: month.beginning_of_month..month.end_of_month }) + .where(traitements: { processed_at: date.beginning_of_month..date.end_of_month }) end scope :downloadable_sorted, -> { state_not_brouillon diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 4dcc91063..ce5249bc6 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -1720,4 +1720,29 @@ describe Dossier do expect(rebased_datetime_champ.rebased_at).not_to be_nil end end + + describe '#processed_in_month' do + include ActiveSupport::Testing::TimeHelpers + + let(:dossier_accepte_at) { DateTime.new(2022, 3, 31, 12, 0) } + before do + travel_to(dossier_accepte_at) do + dossier = create(:dossier, :accepte) + end + end + + context 'given a date' do + let(:archive_date) { Date.new(2022, 3, 1) } + it 'includes a dossier processed_at at last day of month' do + expect(Dossier.processed_in_month(archive_date).count).to eq(1) + end + end + + context 'given a datetime' do + let(:archive_date) { DateTime.new(2022, 3, 1, 12, 0) } + it 'includes a dossier processed_at at last day of month' do + expect(Dossier.processed_in_month(archive_date).count).to eq(1) + end + end + end end From 4890530428e0f6dc9fc618628cb0c78cf48bbb16 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 2 Apr 2022 06:53:30 +0200 Subject: [PATCH 2/2] fix(Dossier.processed_in_month): recast date to datetime in scope --- app/models/dossier.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 53e3bebc0..fbef6d1a3 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -234,6 +234,7 @@ class Dossier < ApplicationRecord scope :termine, -> { not_archived.state_termine } scope :processed_in_month, -> (date) do + date = date.to_datetime state_termine .joins(:traitements) .where(traitements: { processed_at: date.beginning_of_month..date.end_of_month })