Class: Merger::AddressMerger

Inherits:
Object
  • Object
show all
Defined in:
app/services/merger/address_merger.rb

Instance Method Summary collapse

Constructor Details

#initialize(party_id) ⇒ AddressMerger

Returns a new instance of AddressMerger.



2
3
4
# File 'app/services/merger/address_merger.rb', line 2

def initialize(party_id)
  @party_id = party_id
end

Instance Method Details

#perform_merge!Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'app/services/merger/address_merger.rb', line 6

def perform_merge!
  @addresses = Address.where(party_id: @party_id)
  @addresses.each do |s|
    s.update_attribute(:normalized_address, nil)
  end
  unique_addresses = @addresses.group(:normalized_address).minimum(:id)
  address_remap = {}
  @results = []
  unique_addresses.each do |a, k|
    next unless (found_addresses = @addresses.select { |r| r.id != k and r.normalized_address == a }).present?

    @results << "Address #{k} has duplicates, pruning #{found_addresses.length} records"
    found_addresses.each do |f|
      address_remap[f.id] = k
    end
  end

  # Now go through the map
  address_remap.each do |duplicate, replacement|
    Rails.logger.info " ! Remapping duplicate #{duplicate} to #{replacement}"
    # RoomConfigirations
    res_rc = RoomConfiguration.where(installation_address_id: duplicate).update_all(installation_address_id: replacement)
    Rails.logger.info "Room Configurations updated: #{res_rc}"
    # Quotes
    res_q = Quote.where(shipping_address_id: duplicate).update_all(shipping_address_id: replacement)
    Rails.logger.info "Quotes updated: #{res_q}"
    # Orders
    res_o = Order.where(shipping_address_id: duplicate).update_all(shipping_address_id: replacement)
    Rails.logger.info "Orders updated: #{res_o}"
    # Deliveries
    res_oa = Delivery.where(origin_address_id: duplicate).update_all(origin_address_id: replacement)
    Rails.logger.info "Deliveries updated: #{res_oa}"
    res_da = Delivery.where(destination_address_id: duplicate).update_all(destination_address_id: replacement)
    Rails.logger.info "Deliveries updated: #{res_da}"
    # Invoices
    res_isa = Invoice.where(shipping_address_id: duplicate).update_all(shipping_address_id: replacement)
    Rails.logger.info "Invoices updated: #{res_isa}"
    res_iba = Invoice.where(billing_address_id: duplicate).update_all(billing_address_id: replacement)
    Rails.logger.info "Invoices updated: #{res_iba}"
    # CreditMemos
    res_cmsa = CreditMemo.where(shipping_address_id: duplicate).update_all(shipping_address_id: replacement)
    Rails.logger.info "Invoices updated: #{res_cmsa}"
    res_cmba = CreditMemo.where(billing_address_id: duplicate).update_all(billing_address_id: replacement)
    Rails.logger.info "Invoices updated: #{res_cmba}"
    # Customers
    res_sa = Customer.where(shipping_address_id: duplicate).update_all(shipping_address_id: replacement)
    Rails.logger.info "Customers Shipping updated: #{res_sa}"
    res_ba = Customer.where(billing_address_id: duplicate).update_all(billing_address_id: replacement)
    Rails.logger.info "Customer Billing updated: #{res_ba}"
    res_ma = Customer.where(mailing_address_id: duplicate).update_all(mailing_address_id: replacement)
    Rails.logger.info "Customer Mailing updated: #{res_ma}"
    # Support Cases
    res_sc = SupportCase.where(service_address_id: duplicate).update_all(service_address_id: replacement)
    Rails.logger.info "Support Cases: #{res_sc}"
    # Showcases (legacy) have been migrated to Showcase; update if present
    if defined?(Showcase)
      res_shw2 = Showcase.where(customer_id: duplicate).update_all(customer_id: replacement)
      Rails.logger.info "ShowcasesV2 (by customer): #{res_shw2}"
    end
    # Locator Records
    res_lr = LocatorRecord.where(address_id: duplicate).update_all(address_id: replacement)
    Rails.logger.info "Locator Records: #{res_lr}"
    # Mail Activities
    res_act = MailActivity.where(address_id: duplicate).update_all(address_id: replacement)
    Rails.logger.info "Mail Activities: #{res_act}"
    # Now dupeplicate can be deleted
    Address.find(duplicate).destroy
    Rails.logger.info "Address #{duplicate} destroyed"
  end
end