diff --git a/app/services/merge/merge_organisations_service.rb b/app/services/merge/merge_organisations_service.rb index 7610a6e4e..85988cf3c 100644 --- a/app/services/merge/merge_organisations_service.rb +++ b/app/services/merge/merge_organisations_service.rb @@ -6,14 +6,16 @@ class Merge::MergeOrganisationsService def call merge_organisation_details - merge_rent_periods - merge_organisation_relationships - merge_users - merge_schemes_and_locations - merge_lettings_logs - merge_sales_logs - mark_organisations_as_merged + @merging_organisations.each do |merging_organisation| + merge_rent_periods(merging_organisation) + merge_organisation_relationships(merging_organisation) + merge_users(merging_organisation) + merge_schemes_and_locations(merging_organisation) + merge_lettings_logs(merging_organisation) + merge_sales_logs(merging_organisation) + end @absorbing_organisation.save! + mark_organisations_as_merged end private @@ -22,78 +24,66 @@ private @absorbing_organisation.holds_own_stock = merge_boolean_organisation_attribute("holds_own_stock") end - def merge_rent_periods - @merging_organisations.each do |merging_organisation| - merging_organisation.rent_periods.each do |rent_period| - @absorbing_organisation.organisation_rent_periods << OrganisationRentPeriod.new(rent_period:) unless @absorbing_organisation.rent_periods.include?(rent_period) - end + def merge_rent_periods(merging_organisation) + merging_organisation.rent_periods.each do |rent_period| + @absorbing_organisation.organisation_rent_periods << OrganisationRentPeriod.new(rent_period:) unless @absorbing_organisation.rent_periods.include?(rent_period) end end - def merge_organisation_relationships - @merging_organisations.each do |merging_organisation| - merging_organisation.parent_organisation_relationships.each do |parent_organisation_relationship| - if parent_relationship_exists_on_absorbing_organisation?(parent_organisation_relationship) - parent_organisation_relationship.destroy! - else - parent_organisation_relationship.update!(child_organisation: @absorbing_organisation) - end + def merge_organisation_relationships(merging_organisation) + merging_organisation.parent_organisation_relationships.each do |parent_organisation_relationship| + if parent_relationship_exists_on_absorbing_organisation?(parent_organisation_relationship) + parent_organisation_relationship.destroy! + else + parent_organisation_relationship.update!(child_organisation: @absorbing_organisation) end - merging_organisation.child_organisation_relationships.each do |child_organisation_relationship| - if child_relationship_exists_on_absorbing_organisation?(child_organisation_relationship) - child_organisation_relationship.destroy! - else - child_organisation_relationship.update!(parent_organisation: @absorbing_organisation) - end + end + merging_organisation.child_organisation_relationships.each do |child_organisation_relationship| + if child_relationship_exists_on_absorbing_organisation?(child_organisation_relationship) + child_organisation_relationship.destroy! + else + child_organisation_relationship.update!(parent_organisation: @absorbing_organisation) end end end - def merge_users - @merging_organisations.each do |merging_organisation| - merging_organisation.users.update_all(organisation_id: @absorbing_organisation.id) - end + def merge_users(merging_organisation) + merging_organisation.users.update_all(organisation_id: @absorbing_organisation.id) end - def merge_schemes_and_locations - @merging_organisations.each do |merging_organisation| - merging_organisation.owned_schemes.each do |scheme| - next if scheme.deactivated? + def merge_schemes_and_locations(merging_organisation) + merging_organisation.owned_schemes.each do |scheme| + next if scheme.deactivated? - new_scheme = Scheme.create!(scheme.attributes.except("id", "owning_organisation_id").merge(owning_organisation: @absorbing_organisation)) - scheme.locations.each do |location| - new_scheme.locations << Location.new(location.attributes.except("id", "scheme_id")) unless location.deactivated? - end - SchemeDeactivationPeriod.create!(scheme:, deactivation_date: Time.zone.now) + new_scheme = Scheme.create!(scheme.attributes.except("id", "owning_organisation_id").merge(owning_organisation: @absorbing_organisation)) + scheme.locations.each do |location| + new_scheme.locations << Location.new(location.attributes.except("id", "scheme_id")) unless location.deactivated? end + SchemeDeactivationPeriod.create!(scheme:, deactivation_date: Time.zone.now) end end - def merge_lettings_logs - @merging_organisations.each do |merging_organisation| - merging_organisation.owned_lettings_logs.after_date(Time.zone.today).each do |lettings_log| - 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) + def merge_lettings_logs(merging_organisation) + merging_organisation.owned_lettings_logs.after_date(Time.zone.today).each do |lettings_log| + 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) - lettings_log.scheme = scheme_to_set if scheme_to_set.present? - lettings_log.location = location_to_set if location_to_set.present? - end - lettings_log.owning_organisation = @absorbing_organisation - lettings_log.save! - end - merging_organisation.managed_lettings_logs.after_date(Time.zone.today).each do |lettings_log| - lettings_log.managing_organisation = @absorbing_organisation - lettings_log.save! + lettings_log.scheme = scheme_to_set if scheme_to_set.present? + lettings_log.location = location_to_set if location_to_set.present? end + lettings_log.owning_organisation = @absorbing_organisation + lettings_log.save! + end + merging_organisation.managed_lettings_logs.after_date(Time.zone.today).each do |lettings_log| + lettings_log.managing_organisation = @absorbing_organisation + lettings_log.save! end end - def merge_sales_logs - @merging_organisations.each do |merging_organisation| - merging_organisation.owned_sales_logs.after_date(Time.zone.today).each do |sales_log| - sales_log.update(owning_organisation: @absorbing_organisation) - end + def merge_sales_logs(merging_organisation) + merging_organisation.owned_sales_logs.after_date(Time.zone.today).each do |sales_log| + sales_log.update(owning_organisation: @absorbing_organisation) end end