Skip to content

Instantly share code, notes, and snippets.

@evmorov
Last active January 30, 2019 10:49
Show Gist options
  • Save evmorov/598abecabafc2060594f13feb0210974 to your computer and use it in GitHub Desktop.
Save evmorov/598abecabafc2060594f13feb0210974 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 CompanyStateOrder records'
CRM::StateOrder.joins(:company).find_each do |so|
company_state_order = CompanyStateOrder.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 CompanyPansion 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)
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}' and this company already has CompanyStateOrder"
end
company_pansion = CompanyPansion.find_or_create_by!(company_id: company_id)
p.update!(company_pansion: company_pansion)
end
f.puts 'Done!'
f.puts 'Log companies without Pansion or StateOrder'
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"
end
f.puts 'Done!'
f.puts 'Creating CompanyServiceProvider 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 = CompanyServiceProvider.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 CompanyLab records, transfering Analysis.service_providers labs to CompanyLab!'
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 = CompanyLab.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