diff --git a/app/models/legacy/contact.rb b/app/models/legacy/contact.rb index 736666e5b..0951d9df8 100644 --- a/app/models/legacy/contact.rb +++ b/app/models/legacy/contact.rb @@ -3,6 +3,5 @@ module Legacy self.table_name = :contact belongs_to :object_registry, foreign_key: :id belongs_to :object, foreign_key: :id - belongs_to :registrar, foreign_key: :crid end end diff --git a/app/models/legacy/object_registry.rb b/app/models/legacy/object_registry.rb index bb0f003e4..c6885318c 100644 --- a/app/models/legacy/object_registry.rb +++ b/app/models/legacy/object_registry.rb @@ -2,5 +2,6 @@ module Legacy class ObjectRegistry < Db self.table_name = :object_registry self.inheritance_column = nil + belongs_to :registrar, foreign_key: :crid, primary_key: :legacy_id, class_name: '::Registrar' end end diff --git a/db/migrate/20150302130224_add_legacy_columns_for_address.rb b/db/migrate/20150302130224_add_legacy_columns_for_address.rb new file mode 100644 index 000000000..3a2d4e8ba --- /dev/null +++ b/db/migrate/20150302130224_add_legacy_columns_for_address.rb @@ -0,0 +1,5 @@ +class AddLegacyColumnsForAddress < ActiveRecord::Migration + def change + add_column :addresses, :legacy_contact_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 3242725ac..e808473cd 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,11 @@ # # It's strongly recommended that you check this file into your version control system. +<<<<<<< HEAD ActiveRecord::Schema.define(version: 20150330083700) do +======= +ActiveRecord::Schema.define(version: 20150302130224) do +>>>>>>> Contact importing # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -29,6 +33,7 @@ ActiveRecord::Schema.define(version: 20150330083700) do t.string "updator_str" t.string "country_code" t.string "state" + t.integer "legacy_contact_id" end create_table "api_users", force: :cascade do |t| @@ -630,6 +635,7 @@ ActiveRecord::Schema.define(version: 20150330083700) do t.inet "current_sign_in_ip" t.inet "last_sign_in_ip" t.string "identity_code" + t.string "roles", array: true t.string "creator_str" t.string "updator_str" t.string "country_code" diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake index f6e89b293..d98cfec49 100644 --- a/lib/tasks/import.rake +++ b/lib/tasks/import.rake @@ -43,9 +43,6 @@ namespace :import do start = Time.now.to_i puts '-----> Importing contacts...' - contacts = [] - existing_ids = Contact.pluck(:legacy_id) - # 1;"RC";"born number" # not used # 2;"OP";"identity card number" -> priv # 3;"PASS";"passwport" -> @@ -60,58 +57,96 @@ namespace :import do 6 => Contact::IDENT_BIRTHDAY } - contacts = [] + contact_columns = [ + "code", + "phone", + "email", + "fax", + "created_at", + "ident", + "ident_type", + "auth_info", + "name", + "org_name", + "registrar_id", + "creator_str", + "updator_str", + "ident_country_code", + "legacy_id" + ] + + address_columns = [ + "city", + "street", + "zip", + "street2", + "street3", + "creator_str", + "updator_str", + "country_code", + "state", + "legacy_contact_id" + ] + + contacts, addresses = [], [] + existing_contact_ids = Contact.pluck(:legacy_id) + existing_address_ids = Address.pluck(:legacy_contact_id) + user = "rake-#{`whoami`.strip} #{ARGV.join ' '}" + count = 0 + + Legacy::Contact.includes(:object_registry, :object, :object_registry => :registrar).find_each(batch_size: 10000).with_index do |x, index| + next if existing_contact_ids.include?(x.id) + next if existing_address_ids.include?(x.id) + count += 1 - Legacy::Contact.includes(:object_registry, :object, :registrar).find_each(batch_size: 10000) do |x| - next if existing_ids.include?(x.id) begin - # registrar = Registrar.find_by(legacy_id: x.object_registry.crid) + contacts << [ + x.object_registry.name, + x.telephone.try(:strip), + x.email.try(:strip), + x.fax.try(:strip), + x.try(:crdate), + x.ssn.try(:strip), + ident_type_map[x.ssntype], + x.object.authinfopw.try(:strip), + x.name.try(:strip), + x.organization.try(:strip), + x.object_registry.try(:registrar).try(:id), + user, + user, + x.country.try(:strip), + x.id + ] - contacts << Contact.new({ - code: x.object_registry.name, - #type: , # not needed - #reg_no: x.ssn.try(:strip), - phone: x.telephone.try(:strip), - email: x.email.try(:strip), - fax: x.fax.try(:strip), - ident: x.ssn.try(:strip), - ident_type: ident_type_map[x.ssntype], - #created_by_id: , # not needed - #updated_by_id: , # not needed - auth_info: x.object.authinfopw.try(:strip), - name: x.name.try(:strip), - org_name: x.organization.try(:strip), - registrar_id: x.registrar.try(:id), - creator_str: "rake-#{`whoami`.strip} #{ARGV.join ' '}", - updator_str: "rake-#{`whoami`.strip} #{ARGV.join ' '}", - ident_country_code: x.country.try(:strip), - created_at: x.try(:crdate), - legacy_id: x.id, - address: Address.new({ - city: x.city.try(:strip), - street: x.street1.try(:strip), - zip: x.postalcode.try(:strip), - street2: x.street2.try(:strip), - street3: x.street3.try(:strip), - creator_str: "rake-#{`whoami`.strip} #{ARGV.join ' '}", - updator_str: "rake-#{`whoami`.strip} #{ARGV.join ' '}", - country_code: x.country.try(:strip), - state: x.stateorprovince.try(:strip) - }) - }) + addresses << [ + x.city.try(:strip), + x.street1.try(:strip), + x.postalcode.try(:strip), + x.street2.try(:strip), + x.street3.try(:strip), + user, + user, + x.country.try(:strip), + x.stateorprovince.try(:strip), + x.id + ] if contacts.size % 10000 == 0 - puts "commtting #{contacts.size}" - puts Time.now.to_i - start - # Contact.import contacts, validate: false - contacts = [] + Contact.import contact_columns, contacts, validate: false + Address.import address_columns, addresses, validate: false + contacts, addresses = [], [] end rescue => e + puts "ERROR on index #{index}" puts e - puts x.inspect end end - puts '-----> Contacts imported' + Contact.import contact_columns, contacts, validate: false + Address.import address_columns, addresses, validate: false + + puts '-----> Updating relations...' + ActiveRecord::Base.connection.execute('UPDATE addresses SET contact_id = legacy_contact_id WHERE legacy_contact_id IS NOT NULL AND contact_id IS NULL') + puts "-----> Imported #{count} new contacts in #{Time.now.to_i - start} seconds" end end