Last active
January 26, 2019 15:12
-
-
Save evmorov/2af7e033e9d1c595fa58bed37da261ac to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
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