From e15fe3b772a3f10ce08255e927fdbb50e35154af Mon Sep 17 00:00:00 2001 From: Nat Dean-Lewis Date: Tue, 24 Mar 2026 09:51:18 +0000 Subject: [PATCH] CLDC-4326: initial alignment --- app/models/sales_log.rb | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index 4d6e152a2..611210ddc 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -85,15 +85,34 @@ class SalesLog < Log } scope :after_date, ->(date) { where("saledate >= ?", date) } - scope :duplicate_sets, lambda { |assigned_to_id = nil| + scope :duplicate_sets_2025_and_earlier, lambda { |assigned_to_id = nil| scope = visible - .group(*DUPLICATE_LOG_ATTRIBUTES) - .where.not(saledate: nil) - .sex1_answered - .address_answered - .age1_answered - .ecstat1_answered - .having("COUNT(*) > 1") + .filter_by_year_or_earlier(2025) + .group(*DUPLICATE_LOG_ATTRIBUTES) + .where.not(saledate: nil) + .where.not(sex1: nil) + .address_answered + .age1_answered + .ecstat1_answered + .having("COUNT(*) > 1") + + if assigned_to_id + scope = scope.having("MAX(CASE WHEN assigned_to_id = ? THEN 1 ELSE 0 END) >= 1", assigned_to_id) + end + + scope.pluck("ARRAY_AGG(id)") + } + + scope :duplicate_sets_2026_and_later, lambda { |assigned_to_id = nil| + scope = visible + .filter_by_year_or_later(2026) + .group(*DUPLICATE_LOG_ATTRIBUTES) + .where.not(saledate: nil) + .where.not(sexrab1: nil) + .address_answered + .age1_answered + .ecstat1_answered + .having("COUNT(*) > 1") if assigned_to_id scope = scope.having("MAX(CASE WHEN assigned_to_id = ? THEN 1 ELSE 0 END) >= 1", assigned_to_id) @@ -102,6 +121,10 @@ class SalesLog < Log scope.pluck("ARRAY_AGG(id)") } + scope :duplicate_sets, lambda { |assigned_to_id = nil| + duplicate_sets_2025_and_earlier(assigned_to_id) + duplicate_sets_2026_and_later(assigned_to_id) + } + OPTIONAL_FIELDS = %w[purchid othtype buyers_organisations].freeze DUPLICATE_LOG_ATTRIBUTES = %w[owning_organisation_id purchid saledate age1_known age1 sex1 sexrab1 ecstat1 postcode_full uprn address_line1].freeze