|
|
|
|
@ -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 |
|
|
|
|
|
|
|
|
|
|