require Rails.root.join("lib", "tasks", "task_helper") namespace :data_fixer do desc <<~EOD Given a procedure_id in argument, run the PhoneFixer. ex: rails data_fixer:fix_phones\[1\] EOD task :fix_phones, [:procedure_id] => :environment do |_t, args| procedure = Procedure.find(args[:procedure_id]) phone_champs = Champ .where(dossier_id: procedure.dossiers.pluck(:id)) .where(type: "Champs::PhoneChamp") invalid_phone_champs = phone_champs.reject(&:valid?) fixable_phone_champs = invalid_phone_champs.filter { |phone| PhoneFixer.fixable?(phone.value) } fixable_phone_champs.each do |phone| fixable_phone_value = phone.value fixed_phone_value = PhoneFixer.fix(fixable_phone_value) if phone.update(value: fixed_phone_value) rake_puts "Invalid phone #{fixable_phone_value} is fixed as #{fixed_phone_value}" else rake_puts "Failed to fix #{fixable_phone_value}" end end end desc <<~EOD Given a dossier_id in argument, run the DossierChampsMissing. ex: rails data_fixer:dossier_missing_champ\[1\] EOD task :dossier_missing_champ, [:dossier_id] => :environment do |_t, args| dossier = Dossier.find(args[:dossier_id]) result = DataFixer::DossierChampsMissing.new(dossier:).fix if result > 0 rake_puts "Dossier#[#{args[:dossier_id]}] fixed" else rake_puts "Dossier#[#{args[:dossier_id]}] not fixed" end end end