Class: Merger::ContactPointMerge
- Inherits:
-
Object
- Object
- Merger::ContactPointMerge
- Defined in:
- app/services/merger/contact_point_merge.rb
Overview
Service object: contact point merge.
Instance Method Summary collapse
-
#initialize(party_id) ⇒ ContactPointMerge
constructor
A new instance of ContactPointMerge.
- #perform_merge! ⇒ Object
Constructor Details
#initialize(party_id) ⇒ ContactPointMerge
Returns a new instance of ContactPointMerge.
4 5 6 |
# File 'app/services/merger/contact_point_merge.rb', line 4 def initialize(party_id) @party_id = party_id end |
Instance Method Details
#perform_merge! ⇒ Object
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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'app/services/merger/contact_point_merge.rb', line 8 def perform_merge! contacts_ids = [@party_id] contacts = Customer.find(@party_id).contacts contacts.map { |r| contacts_ids << r.id } if contacts.present? @contact_points = ContactPoint.where(party_id: contacts_ids) cp_ids = @contact_points.group(:party_id, :category, :detail).select("min(id) as id").map(&:id) @unique_contact_points = @contact_points.where(id: cp_ids) contact_points_remap = {} @results = [] @unique_contact_points.each do |uc| notes = [uc.notes] locator_record_id = [uc.locator_record_id] if (found_contact_points = @contact_points.select { |cp| (uc.id != cp.id) && (uc.party_id == cp.party_id) && (uc.category == cp.category) && (uc.detail == cp.detail) }).present? @results << "Contact Point #{uc.id} has duplicates, pruning #{found_contact_points.length} records" found_contact_points.each do |f| contact_points_remap[f.id] = uc.id notes << f.notes if f.notes.present? locator_record_id << f.locator_record_id if f.locator_record_id.present? end end notes = notes.compact.present? ? notes.compact.map { |n| n }.join(', ') : nil locator_record_id = locator_record_id.compact.presence&.max uc.update_columns(notes: notes, locator_record_id: locator_record_id) end # Let's remap duplicates and replacements contact_points_remap.each do |duplicate, replacement| Rails.logger.info " ! Remapping duplicate #{duplicate} to #{replacement}" # CommunicationRecipient remap_crc = CommunicationRecipient.where(contact_point_id: duplicate).update_all(contact_point_id: replacement) Rails.logger.info "CommunicationRecipient updated: #{remap_crc}" # ContactPointsFeed sql_feed = <<-SQL.squish update contact_points_feeds set contact_point_id = #{replacement} where contact_point_id = #{duplicate}; SQL remap_cpf = ActiveRecord::Base.lease_connection.execute(sql_feed).to_a.size Rails.logger.info "Contact_Points_Feeds updated: #{remap_cpf}" # ContactPointsQuote sql_quote = <<-SQL.squish update contact_points_quotes set contact_point_id = #{replacement} where contact_point_id = #{duplicate}; SQL remap_cpq = ActiveRecord::Base.lease_connection.execute(sql_quote).to_a.size Rails.logger.info "Contact_Points_Quotes updated: #{remap_cpq}" # CustomerRecord remap_cre = CustomerRecord.where(email_contact_point_id: duplicate).update_all(email_contact_point_id: replacement) Rails.logger.info "CustomerRecord updated: #{remap_cre}" remap_crp = CustomerRecord.where(portal_contact_point_id: duplicate).update_all(portal_contact_point_id: replacement) Rails.logger.info "CustomerRecord updated: #{remap_crp}" remap_crh = CustomerRecord.where(phone_contact_point_id: duplicate).update_all(phone_contact_point_id: replacement) Rails.logger.info "CustomerRecord updated: #{remap_crh}" # EmployeePhoneStatus remap_epsc = EmployeePhoneStatus.where(contact_point_id: duplicate).update_all(contact_point_id: replacement) Rails.logger.info "EmployeePhoneStatus updated: #{remap_epsc}" # NotificationChannel remap_ncc = NotificationChannel.where(contact_point_id: duplicate).update_all(contact_point_id: replacement) Rails.logger.info "NotificationChannel updated: #{remap_ncc}" # OpportunityParticipant remap_opc = OpportunityParticipant.where(contact_point_id: duplicate).update_all(contact_point_id: replacement) Rails.logger.info "OpportunityParticipant updated: #{remap_opc}" # RoomConfiguration remap_rcc = RoomConfiguration.where(contact_point_id: duplicate).update_all(contact_point_id: replacement) Rails.logger.info "RoomConfiguration updated: #{remap_rcc}" # ServiceJob remap_sjhp = ServiceJob.where(home_phone_contact_point_id: duplicate).update_all(home_phone_contact_point_id: replacement) Rails.logger.info "ServiceJob updated: #{remap_sjhp}" remap_sjcp = ServiceJob.where(cell_phone_contact_point_id: duplicate).update_all(cell_phone_contact_point_id: replacement) Rails.logger.info "ServiceJob updated: #{remap_sjcp}" remap_sjbp = ServiceJob.where(business_phone_contact_point_id: duplicate).update_all(business_phone_contact_point_id: replacement) Rails.logger.info "ServiceJob updated: #{remap_sjbp}" remap_sjec = ServiceJob.where(email_contact_point_id: duplicate).update_all(email_contact_point_id: replacement) Rails.logger.info "ServiceJob updated: #{remap_sjec}" # SupportCaseParticipant remap_scpp = SupportCaseParticipant.where(phone_id: duplicate).update_all(phone_id: replacement) Rails.logger.info "SupportCaseParticipant updated: #{remap_scpp}" remap_scpe = SupportCaseParticipant.where(email_id: duplicate).update_all(email_id: replacement) Rails.logger.info "SupportCaseParticipant updated: #{remap_scpe}" remap_scpf = SupportCaseParticipant.where(fax_id: duplicate).update_all(fax_id: replacement) Rails.logger.info "SupportCaseParticipant updated: #{remap_scpf}" # After remaping we can delete dupeplicates ContactPoint.find(duplicate).destroy Rails.logger.info "ContactPoint #{duplicate} destroyed" end end |