Last active
January 30, 2019 10:49
-
-
Save evmorov/598abecabafc2060594f13feb0210974 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 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