fix(routing): migrate remaining data
This commit is contained in:
parent
a5b99ddfd9
commit
6f97fc2a68
1 changed files with 81 additions and 0 deletions
|
@ -0,0 +1,81 @@
|
||||||
|
namespace :after_party do
|
||||||
|
desc 'Deployment task: migrate_remaining_data_for_routing_with_dropdown_list'
|
||||||
|
task migrate_remaining_data_for_routing_with_dropdown_list: :environment do
|
||||||
|
include Logic
|
||||||
|
puts "Running deploy task 'migrate_remaining_data_for_routing_with_dropdown_list'"
|
||||||
|
|
||||||
|
# 301 procedures have a max_duree_conservation_dossiers_dans_ds shorter than the
|
||||||
|
# duree_conservation_dossiers_dans_ds. We fix it (otherwise the next request will fail)
|
||||||
|
Procedure.with_discarded
|
||||||
|
.where('duree_conservation_dossiers_dans_ds > max_duree_conservation_dossiers_dans_ds')
|
||||||
|
.update_all('max_duree_conservation_dossiers_dans_ds = duree_conservation_dossiers_dans_ds')
|
||||||
|
|
||||||
|
# First case : routed procedures with only one active group
|
||||||
|
# (data had been fixed in lib/tasks/deployment/20221026074507_update_procedure_routing_enabled.rake
|
||||||
|
# but not for `with_discarded` procedures)
|
||||||
|
Procedure.with_discarded
|
||||||
|
.where(routing_enabled: true)
|
||||||
|
.filter { |p| p.groupe_instructeurs.active.count == 1 }
|
||||||
|
.each do |p|
|
||||||
|
p.update!(routing_enabled: false)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Second case : procedures not migrated because created during the previous migration
|
||||||
|
# (lib/tasks/deployment/20230417083259_migrate_data_for_routing_with_dropdown_list.rake)
|
||||||
|
# So we run the same migration again
|
||||||
|
|
||||||
|
procedure_ids = Procedure.with_discarded
|
||||||
|
.where(routing_enabled: true)
|
||||||
|
.where(migrated_champ_routage: [nil, false])
|
||||||
|
.filter { |p| p.active_revision.types_de_champ.none?(&:used_by_routing_rules?) }
|
||||||
|
.filter { |p| p.groupe_instructeurs.active.count > 1 }
|
||||||
|
.pluck(:id)
|
||||||
|
|
||||||
|
progress = ProgressReport.new(procedure_ids.count)
|
||||||
|
|
||||||
|
procedure_ids.each do |procedure_id|
|
||||||
|
procedure = Procedure.with_discarded.find(procedure_id)
|
||||||
|
procedure.transaction do
|
||||||
|
routage_type_de_champ = TypeDeChamp.create!(
|
||||||
|
type_champ: 'drop_down_list',
|
||||||
|
libelle: procedure.routing_criteria_name || 'Votre ville',
|
||||||
|
options: { "drop_down_options" => [''] + procedure.groupe_instructeurs.active.pluck(:label) },
|
||||||
|
private: false,
|
||||||
|
mandatory: true
|
||||||
|
)
|
||||||
|
|
||||||
|
ProcedureRevisionTypeDeChamp
|
||||||
|
.joins(:revision)
|
||||||
|
.where(procedure_revisions: { procedure_id: }, parent_id: nil)
|
||||||
|
.update_all('position = position + 1')
|
||||||
|
|
||||||
|
# add routage_type_de_champ sur les positions
|
||||||
|
now = Time.zone.now
|
||||||
|
to_insert = procedure.revisions.ids.map do |revision_id|
|
||||||
|
{ revision_id:, type_de_champ_id: routage_type_de_champ.id, position: 0, created_at: now, updated_at: now }
|
||||||
|
end
|
||||||
|
ProcedureRevisionTypeDeChamp.insert_all(to_insert)
|
||||||
|
|
||||||
|
procedure.groupe_instructeurs.each do |gi|
|
||||||
|
gi.update_columns(routing_rule: ds_eq(champ_value(routage_type_de_champ.stable_id), constant(gi.label)))
|
||||||
|
end
|
||||||
|
|
||||||
|
procedure.update_columns(migrated_champ_routage: true)
|
||||||
|
|
||||||
|
# Ajouter un chp drpdwn ds chq dossier
|
||||||
|
insert_dropdown_champ_sql = <<~EOF
|
||||||
|
INSERT INTO champs ( type, value, type_de_champ_id, dossier_id, private, created_at, updated_at )
|
||||||
|
#{procedure.dossiers.left_joins(:groupe_instructeur).select("'Champs::DropDownListChamp', groupe_instructeurs.label, '#{routage_type_de_champ.id}', dossiers.id, false, dossiers.created_at, dossiers.created_at").to_sql}
|
||||||
|
EOF
|
||||||
|
ActiveRecord::Base.connection.execute(insert_dropdown_champ_sql)
|
||||||
|
end
|
||||||
|
progress.inc
|
||||||
|
end
|
||||||
|
progress.finish
|
||||||
|
|
||||||
|
# Update task as completed. If you remove the line below, the task will
|
||||||
|
# run with every deploy (or every time you call after_party:run).
|
||||||
|
AfterParty::TaskRecord
|
||||||
|
.create version: AfterParty::TaskRecorder.new(__FILE__).timestamp
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue