diff --git a/app/services/merge/merge_organisations_service.rb b/app/services/merge/merge_organisations_service.rb index 9f0759d33..147a1a094 100644 --- a/app/services/merge/merge_organisations_service.rb +++ b/app/services/merge/merge_organisations_service.rb @@ -85,6 +85,9 @@ private def merge_lettings_logs(merging_organisation) merging_organisation.owned_lettings_logs.after_date(@merge_date.to_time).each do |lettings_log| + if lettings_log.managing_organisation == merging_organisation + lettings_log.managing_organisation = @absorbing_organisation + end if lettings_log.scheme.present? scheme_to_set = @absorbing_organisation.owned_schemes.find_by(service_name: lettings_log.scheme.service_name) location_to_set = scheme_to_set.locations.find_by(name: lettings_log.location&.name, postcode: lettings_log.location&.postcode) @@ -113,7 +116,10 @@ private end def merge_sales_logs(merging_organisation) - merging_organisation.sales_logs.after_date(@merge_date.to_time).each do |sales_log| + merging_organisation.owned_sales_logs.after_date(@merge_date.to_time).each do |sales_log| + if sales_log.managing_organisation == merging_organisation + sales_log.managing_organisation = @absorbing_organisation + end sales_log.owning_organisation = @absorbing_organisation if sales_log.collection_period_open? sales_log.skip_dpo_validation = true @@ -122,6 +128,10 @@ private sales_log.save!(validate: false) end end + merging_organisation.managed_sales_logs.after_date(@merge_date.to_time).each do |sales_log| + sales_log.managing_organisation = @absorbing_organisation + sales_log.save!(validate: false) + end end def mark_organisation_as_merged(merging_organisation) diff --git a/spec/services/merge/merge_organisations_service_spec.rb b/spec/services/merge/merge_organisations_service_spec.rb index d01b0525a..844ad9074 100644 --- a/spec/services/merge/merge_organisations_service_spec.rb +++ b/spec/services/merge/merge_organisations_service_spec.rb @@ -558,10 +558,16 @@ RSpec.describe Merge::MergeOrganisationsService do end context "and merging sales logs" do - let!(:sales_log) { create(:sales_log, saledate: Time.zone.today, owning_organisation: merging_organisation) } + let(:owning_organisation) { create(:organisation, holds_own_stock: true) } + let!(:sales_log) { create(:sales_log, saledate: Time.zone.today, owning_organisation: merging_organisation, purchid: "owned") } + let!(:managed_sales_log) { create(:sales_log, saledate: Time.zone.today, purchid: "managed") } before do create(:sales_log, saledate: Time.zone.today - 2.days, owning_organisation: merging_organisation) + create(:organisation_relationship) { create(:organisation_relationship, parent_organisation: owning_organisation, child_organisation: merging_organisation) } + managed_sales_log.update!(owning_organisation:, managing_organisation: merging_organisation, created_by: merging_organisation_user) + create(:sales_log, saledate: Time.zone.today - 2.days, owning_organisation: merging_organisation, created_by: merging_organisation_user, purchid: "ranom 1") + create(:sales_log, saledate: Time.zone.today - 2.days, owning_organisation:, managing_organisation: merging_organisation, created_by: merging_organisation_user, purchid: "ranom 2") end it "moves relevant logs" do @@ -570,6 +576,9 @@ RSpec.describe Merge::MergeOrganisationsService do absorbing_organisation.reload expect(SalesLog.filter_by_owning_organisation(absorbing_organisation).count).to eq(1) expect(SalesLog.filter_by_owning_organisation(absorbing_organisation).first).to eq(sales_log) + expect(SalesLog.filter_by_managing_organisation(absorbing_organisation).count).to eq(2) + expect(SalesLog.filter_by_managing_organisation(absorbing_organisation)).to include(managed_sales_log) + expect(SalesLog.filter_by_managing_organisation(absorbing_organisation)).to include(sales_log) end it "rolls back if there's an error" do