diff --git a/app/models/contact.rb b/app/models/contact.rb index a9ef9ba87..ccf11d89b 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -32,6 +32,7 @@ class Contact < ActiveRecord::Base validate :val_ident_valid_format? validate :uniq_statuses? validate :validate_html + validate :val_country_code after_initialize do self.statuses = [] if statuses.nil? @@ -39,7 +40,7 @@ class Contact < ActiveRecord::Base self.ident_updated_at = Time.zone.now if new_record? && ident_updated_at.blank? end - before_validation :set_ident_country_code + before_validation :to_upcase_country_code before_validation :prefix_code before_create :generate_auth_info @@ -352,14 +353,14 @@ class Contact < ActiveRecord::Base destroy end - def set_ident_country_code - return true unless ident_country_code_changed? && ident_country_code.present? - code = Country.new(ident_country_code) - if code - self.ident_country_code = code.alpha2 - else - errors.add(:ident, :invalid_country_code) - end + def to_upcase_country_code + self.ident_country_code = ident_country_code.upcase if ident_country_code + self.country_code = country_code.upcase if country_code + end + + def val_country_code + errors.add(:ident, :invalid_country_code) unless Country.new(ident_country_code) + errors.add(:ident, :invalid_country_code) unless Country.new(country_code) end def related_domain_descriptions diff --git a/lib/tasks/convert.rake b/lib/tasks/convert.rake index ba0e547dc..35e68046c 100644 --- a/lib/tasks/convert.rake +++ b/lib/tasks/convert.rake @@ -32,5 +32,44 @@ namespace :convert do d.save! end end + + + desc 'Contact Address Country Code Upcase' + task country_code_upcase: :environment do + count = 0 + Contact.find_each do |c| + if c.country_code.present? && c.country_code != c.country_code.upcase + c.country_code = c.country_code.upcase + c.update_columns(country_code: c.country_code.upcase) + + count +=1 + puts "#{count} contacts has been changed" if count % 1000 == 0 + end + end + puts "Contacts change has been finished. Starting ContactVersions" + + count = 0 + ContactVersion.find_each do |c| + if (if_object = (c.object && c.object["country_code"].present? && c.object["country_code"] != c.object["country_code"].upcase)) || + (if_changes = (c.object_changes && c.object_changes["country_code"].present? && c.object_changes["country_code"] != c.object_changes["country_code"].map{|e|e.try(:upcase)})) + + if if_object + h = c.object + h["country_code"] = h["country_code"].try(:upcase) + c.object = h + end + + if if_changes + h = c.object_changes + h["country_code"] = h["country_code"].map{|e|e.try(:upcase)} + c.object_changes = h + end + c.update_columns(object: c.object, object_changes: c.object_changes) + + count +=1 + puts "#{count} contact histories has been changed" if count % 1000 == 0 + end + end + end end