From f54e6c7b76f6313c88977e5b2892f294f55ce66b Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Mon, 29 Sep 2025 11:56:30 +0100 Subject: [PATCH] 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 --- .../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..0c75b6e02 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: { created_at: range } }).pluck(:id), + ) + ids.concat( + relation.left_joins(managing_organisation: :organisation_name_changes).where(managing_organisation: { organisation_name_changes: { created_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