From cede11dd3c6980624a33300284112767e830327b Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Mon, 3 Nov 2025 14:14:11 +0000 Subject: [PATCH] CLDC-4028: Ensure logs will update when an organisation name change is created (#3109) * CLDC-4028: Ensure logs will update when an organisation name change is created, as they draw the org name this could lead to redundant exports if the name change does not impact the log at its startdate (which we put into the log), but it'd be more difficult to query this way so fine to be safe here also query name changes by updated_at. shouldn't really matter as we don't expect name changes to be updated but worth being safe in case we need to update a name change for maintenance reasons * CLDC-4028: Fix created at name change in lettings log always safer to use updated at for checking whether the record has changed --- .../exports/lettings_log_export_service.rb | 11 ++++++++++- app/services/exports/sales_log_export_service.rb | 8 ++++++++ app/services/exports/user_export_service.rb | 2 +- .../exports/lettings_log_export_service_spec.rb | 16 ++++++++++++++++ .../exports/sales_log_export_service_spec.rb | 16 ++++++++++++++++ 5 files changed, 51 insertions(+), 2 deletions(-) diff --git a/app/services/exports/lettings_log_export_service.rb b/app/services/exports/lettings_log_export_service.rb index 4e1fe2019..89b041104 100644 --- a/app/services/exports/lettings_log_export_service.rb +++ b/app/services/exports/lettings_log_export_service.rb @@ -31,7 +31,8 @@ module Exports end def retrieve_resources_from_range(range, year) - relation = LettingsLog.exportable.filter_by_year(year).left_joins(:created_by, :updated_by, :assigned_to, :owning_organisation, :managing_organisation) + relation = LettingsLog.exportable.filter_by_year(year) + .left_joins(:created_by, :updated_by, :assigned_to, :owning_organisation, :managing_organisation) ids = relation .where({ updated_at: range }) @@ -55,6 +56,14 @@ module Exports ) .pluck(:id) + # these must be separate as activerecord struggles to join to two different name change tables in the same query + ids.concat( + relation.left_joins(owning_organisation: :organisation_name_changes).where(owning_organisation: { organisation_name_changes: { updated_at: range } }).pluck(:id), + ) + ids.concat( + relation.left_joins(managing_organisation: :organisation_name_changes).where(managing_organisation: { organisation_name_changes: { updated_at: range } }).pluck(:id), + ) + LettingsLog.where(id: ids) end diff --git a/app/services/exports/sales_log_export_service.rb b/app/services/exports/sales_log_export_service.rb index db525dde4..7fac8d27e 100644 --- a/app/services/exports/sales_log_export_service.rb +++ b/app/services/exports/sales_log_export_service.rb @@ -55,6 +55,14 @@ module Exports ) .pluck(:id) + # these must be separate as activerecord struggles to join to two different name change tables in the same query + ids.concat( + relation.left_joins(owning_organisation: :organisation_name_changes).where(owning_organisation: { organisation_name_changes: { updated_at: range } }).pluck(:id), + ) + ids.concat( + relation.left_joins(managing_organisation: :organisation_name_changes).where(managing_organisation: { organisation_name_changes: { updated_at: range } }).pluck(:id), + ) + SalesLog.where(id: ids) end diff --git a/app/services/exports/user_export_service.rb b/app/services/exports/user_export_service.rb index d79a4df49..0a8ebe34e 100644 --- a/app/services/exports/user_export_service.rb +++ b/app/services/exports/user_export_service.rb @@ -33,7 +33,7 @@ module Exports relation.where.not(organisations: { updated_at: nil }).where(organisations: { updated_at: range }), ) .or( - relation.where(organisation_name_changes: { created_at: range }), + relation.where(organisation_name_changes: { updated_at: range }), ) .pluck(:id) diff --git a/spec/services/exports/lettings_log_export_service_spec.rb b/spec/services/exports/lettings_log_export_service_spec.rb index 38366e83d..02c7f4a2b 100644 --- a/spec/services/exports/lettings_log_export_service_spec.rb +++ b/spec/services/exports/lettings_log_export_service_spec.rb @@ -550,6 +550,22 @@ RSpec.describe Exports::LettingsLogExportService do export_service.export_xml_lettings_logs(collection_year: current_collection_start_year) end + + it "does export the lettings log if owning_organisation name change is created" do + create(:organisation_name_change, organisation: owning_organisation) + + expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) + + export_service.export_xml_lettings_logs(collection_year: current_collection_start_year) + end + + it "does export the lettings log if managing_organisation name change is created" do + create(:organisation_name_change, organisation: managing_organisation) + + expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) + + export_service.export_xml_lettings_logs(collection_year: current_collection_start_year) + end end end diff --git a/spec/services/exports/sales_log_export_service_spec.rb b/spec/services/exports/sales_log_export_service_spec.rb index 1d54f71e0..5b9a41d02 100644 --- a/spec/services/exports/sales_log_export_service_spec.rb +++ b/spec/services/exports/sales_log_export_service_spec.rb @@ -491,6 +491,22 @@ RSpec.describe Exports::SalesLogExportService do export_service.export_xml_sales_logs(collection_year: current_collection_start_year) end + + it "does export the sales log if owning_organisation name change is created" do + create(:organisation_name_change, organisation: owning_organisation) + + expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) + + export_service.export_xml_sales_logs(collection_year: current_collection_start_year) + end + + it "does export the sales log if managing_organisation name change is created" do + create(:organisation_name_change, organisation: managing_organisation) + + expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) + + export_service.export_xml_sales_logs(collection_year: current_collection_start_year) + end end end end