Skip to content

Instantly share code, notes, and snippets.

@evmorov
Last active January 26, 2019 16:34
Show Gist options
  • Save evmorov/fc49a4b167b52fbe87ef5630442de2c4 to your computer and use it in GitHub Desktop.
Save evmorov/fc49a4b167b52fbe87ef5630442de2c4 to your computer and use it in GitHub Desktop.
log_path = File.join(File.dirname(__FILE__), 'company_migration.log')
puts "Writing log to '#{log_path}'"
# a - append to file
open(log_path, 'a') do |f|
f.puts 'Running migration script'
f.puts 'Moving values from some custom fields to core fields...'
Company.find_each do |c|
c.update!(
short_name: c.try(:em_short_name),
vat_number: c.try(:em_inn),
email: c.try(:em_email),
phone_number: c.try(:em_phone_number) || c.try(:em_phone)
)
end
f.puts 'Done!'
f.puts 'Creating Company::StateOrder records'
CRM::StateOrder.joins(:company).find_each do |so|
company_state_order = Company::StateOrder.find_or_create_by!(company: so.company)
# 'update_attribute' to skip validations because VKGC has a required field added in EntityManager
so.update_attribute(:company_state_order, company_state_order)
end
f.puts 'Done!'
f.puts 'Creating Company::Pansion records'
Pansion.find_each do |p|
company_id = p.try(:em_company) || p.try(:em_company_id)
next if company_id.blank?
company = Company.find(company_id)
# we don't want to have Company with Company::StateOrder and Company::Pansion
if company.state_order
f.puts "Pansion with id '#{p.id}' and name '#{p.name} has Company with id #{company.id}' and name '#{company.name}' but the company already has Company::StateOrder so Company::Pansion isn't created"
next
end
company_pansion = Company::Pansion.find_or_create_by!(company_id: company_id)
p.update!(company_pansion: company_pansion)
end
f.puts 'Done!'
f.puts 'Creating Company::StateOrder records for companies without a pansion or a state order'
Company.find_each do |c|
next if c.pansion || c.state_order
f.puts "Company with id '#{c.id}' and name '#{c.name}' doesn't have a pansion or a state order. Creating Company::StateOrder"
Company::StateOrder.find_or_create_by!(company: c)
end
f.puts 'Done!'
f.puts 'Creating Company::ServiceProvider records!'
ServiceProvider.with_kind(:default).find_each do |sp|
company = Company.find_or_create_by!(name: sp.name) do |c|
c.name = sp.name
c.vat_number = sp.inn
end
provider = Company::ServiceProvider.find_or_create_by!(company: company)
Resident::AdditionalService.where(service_provider_id: sp.id).find_each do |as|
as.update!(company_service_provider: provider)
end
end
f.puts 'Done!'
f.puts 'Creating Company::Lab records, transfering Analysis.service_providers labs to Company::Lab!'
ServiceProvider.with_kind(:lab).find_each do |sp|
company = Company.find_or_create_by!(name: sp.name) do |c|
c.name = sp.name
c.vat_number = sp.inn
end
lab = Company::Lab.find_or_create_by!(company: company)
Analysis.where(service_provider: sp).find_each do |a|
a.update!(company_lab: lab)
end
Resident::AdditionalService.where(service_provider: sp).find_each do |as|
as.analysis.update!(company_lab: lab)
end
end
f.puts 'Done!'
f.puts 'Migration script is finished'
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment