Class: DataImportColumn
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- DataImportColumn
- Defined in:
- app/models/data_import_column.rb
Overview
== Schema Information
Table name: data_import_columns
Database name: primary
id :integer not null, primary key
column_index :integer
name :string(255)
data_dictionary_set_id :integer
data_import_id :integer
Indexes
index_data_import_columns_on_data_import_id (data_import_id)
Foreign Keys
data_import_columns_data_import_id_fk (data_import_id => data_imports.id) ON DELETE => cascade
fk_rails_... (data_import_id => data_imports.id) ON DELETE => cascade
Constant Summary
Constants included from Models::Schedulable
Models::Schedulable::SIMPLE_FORM_OPTIONS
Belongs to collapse
Has many collapse
Instance Method Summary collapse
-
#expand_address(data_import_cell_ids: nil) ⇒ void
Expand free-form address cells into structured address columns.
Methods inherited from ApplicationRecord
ransackable_associations, ransackable_attributes, ransackable_scopes, ransortable_attributes, #to_relation
Methods included from Models::Schedulable
Methods included from Models::AfterCommittable
Methods included from Models::EventPublishable
Instance Method Details
#data_dictionary_set ⇒ DataDictionarySet
27 |
# File 'app/models/data_import_column.rb', line 27 belongs_to :data_dictionary_set, optional: true |
#data_import ⇒ DataImport
25 |
# File 'app/models/data_import_column.rb', line 25 belongs_to :data_import, inverse_of: :data_import_columns |
#data_import_cells ⇒ ActiveRecord::Relation<DataImportCell>
29 |
# File 'app/models/data_import_column.rb', line 29 has_many :data_import_cells, dependent: :destroy, inverse_of: :data_import_row |
#expand_address(data_import_cell_ids: nil) ⇒ void
This method returns an undefined value.
Expand free-form address cells into structured address columns.
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 93 |
# File 'app/models/data_import_column.rb', line 35 def (data_import_cell_ids: nil) # Prepare columns country_iso_to_iso3_map = Country.iso_to_iso3_map # last column index col_index = data_import.data_import_columns.maximum(:column_index) || 0 dds_address_line_1 = DataDictionarySet.find_by(default_set: true, destination: 'billing_address.street1') dic_address_line_1 = data_import.data_import_columns.where(name: 'address_line_1').first_or_create(column_index: (col_index += 1), data_dictionary_set_id: dds_address_line_1.id) dds_address_line_2 = DataDictionarySet.find_by(default_set: true, destination: 'billing_address.street2') dic_address_line_2 = data_import.data_import_columns.where(name: 'address_line_2').first_or_create(column_index: (col_index += 1), data_dictionary_set_id: dds_address_line_2.id) dds_city = DataDictionarySet.find_by(default_set: true, destination: 'billing_address.city') dic_city = data_import.data_import_columns.where(name: 'city').first_or_create(column_index: (col_index += 1), data_dictionary_set_id: dds_city.id) dds_state_code = DataDictionarySet.find_by(default_set: true, destination: 'billing_address.state_code') dic_state_code = data_import.data_import_columns.where(name: 'state_code').first_or_create(column_index: (col_index += 1), data_dictionary_set_id: dds_state_code.id) dds_postal_code = DataDictionarySet.find_by(default_set: true, destination: 'billing_address.zip') dic_postal_code = data_import.data_import_columns.where(name: 'postal_code').first_or_create(column_index: (col_index += 1), data_dictionary_set_id: dds_postal_code.id) dds_country_iso3 = DataDictionarySet.find_by(default_set: true, destination: 'billing_address.country_iso3') dic_country_iso3 = data_import.data_import_columns.where(name: 'country_iso3').first_or_create(column_index: (col_index += 1), data_dictionary_set_id: dds_country_iso3.id) dds_longitude = DataDictionarySet.find_by(default_set: true, destination: 'billing_address.lng') dic_longitude = data_import.data_import_columns.where(name: 'longitude').first_or_create(column_index: (col_index += 1), data_dictionary_set_id: dds_longitude.id) dds_latitude = DataDictionarySet.find_by(default_set: true, destination: 'billing_address.lat') dic_latitude = data_import.data_import_columns.where(name: 'latitude').first_or_create(column_index: (col_index + 1), data_dictionary_set_id: dds_latitude.id) # Now go through our cells new_cells = [] cells_to_process = data_import_cells.where.not(content: nil) cells_to_process = cells_to_process.where(id: data_import_cell_ids) if data_import_cell_ids.present? resultset_size = cells_to_process.size counter = 0 cells_to_process.find_each do |cell| counter += 1 puts "[#{counter}/#{resultset_size}] Processing cell #{cell.id} #{cell.content}" if (addr = Address::NormalizedAddress.from_string(cell.content)) new_cells << { content: addr.address_line1, data_import_row_id: cell.data_import_row_id, data_import_column_id: dic_address_line_1.id } if addr.address_line1.present? new_cells << { content: addr.address_line2, data_import_row_id: cell.data_import_row_id, data_import_column_id: dic_address_line_2.id } if addr.address_line2.present? new_cells << { content: addr.city, data_import_row_id: cell.data_import_row_id, data_import_column_id: dic_city.id } if addr.city.present? new_cells << { content: addr.state_code, data_import_row_id: cell.data_import_row_id, data_import_column_id: dic_state_code.id } if addr.state_code.present? new_cells << { content: addr.postal_code, data_import_row_id: cell.data_import_row_id, data_import_column_id: dic_postal_code.id } if addr.postal_code.present? # Go ISO3 country_iso3 = country_iso_to_iso3_map[addr.country_iso] new_cells << { content: country_iso3, data_import_row_id: cell.data_import_row_id, data_import_column_id: dic_country_iso3.id } if country_iso3.present? new_cells << { content: addr.longitude, data_import_row_id: cell.data_import_row_id, data_import_column_id: dic_longitude.id } if addr.longitude.present? new_cells << { content: addr.latitude, data_import_row_id: cell.data_import_row_id, data_import_column_id: dic_latitude.id } if addr.latitude.present? end end DataImportCell.upsert_all(new_cells, unique_by: %i[data_import_row_id data_import_column_id], update_only: [:content]) if new_cells.any? end |