bbdb446dfd
and notify usager
209 lines
7.6 KiB
Ruby
209 lines
7.6 KiB
Ruby
require Rails.root.join("lib", "tasks", "task_helper")
|
|
|
|
namespace :after_party do
|
|
desc 'Deployment task: restore_deleted_dossiers'
|
|
task restore_deleted_dossiers: :environment do
|
|
Class.new do
|
|
def run
|
|
rake_puts "Running deploy task 'restore_deleted_dossiers'"
|
|
restore_candidats_libres_deleted_dossiers
|
|
restore_neph_deleted_dossiers
|
|
AfterParty::TaskRecord.create version: '20181009130216'
|
|
end
|
|
|
|
def restore_candidats_libres_deleted_dossiers
|
|
mapping = Class.new(Tasks::DossierProcedureMigrator::ChampMapping) do
|
|
def setup_mapping
|
|
champ_opts = {
|
|
16 => {
|
|
source_overrides: { 'libelle' => 'Adresse postale du candidat' },
|
|
destination_overrides: { 'libelle' => 'Adresse postale complète du candidat' }
|
|
}
|
|
}
|
|
(0..23).each do |i|
|
|
map_source_to_destination_champ(i, i, **(champ_opts[i] || {}))
|
|
end
|
|
end
|
|
end
|
|
|
|
private_mapping = Class.new(Tasks::DossierProcedureMigrator::ChampMapping) do
|
|
def setup_mapping
|
|
compute_destination_champ(
|
|
TypeDeChamp.new(
|
|
type_champ: 'datetime',
|
|
order_place: 0,
|
|
libelle: 'Date et heure de convocation',
|
|
mandatory: false
|
|
)
|
|
) do |d, target_tdc|
|
|
target_tdc.champ.create(dossier: d)
|
|
end
|
|
compute_destination_champ(
|
|
TypeDeChamp.new(
|
|
type_champ: 'text',
|
|
order_place: 1,
|
|
libelle: 'Lieu de convocation',
|
|
mandatory: false
|
|
)
|
|
) do |d, target_tdc|
|
|
target_tdc.champ.create(dossier: d)
|
|
end
|
|
compute_destination_champ(
|
|
TypeDeChamp.new(
|
|
type_champ: 'address',
|
|
order_place: 2,
|
|
libelle: 'Adresse centre examen',
|
|
mandatory: false
|
|
)
|
|
) do |d, target_tdc|
|
|
target_tdc.champ.create(dossier: d)
|
|
end
|
|
end
|
|
end
|
|
|
|
pj_mapping = Class.new(Tasks::DossierProcedureMigrator::PieceJustificativeMapping) do
|
|
def setup_mapping
|
|
(0..3).each do |i|
|
|
map_source_to_destination_pj(i, i + 2)
|
|
end
|
|
leave_destination_pj_blank(
|
|
TypeDePieceJustificative.new(
|
|
order_place: 0,
|
|
libelle: "Télécharger la Charte de l'accompagnateur"
|
|
)
|
|
)
|
|
leave_destination_pj_blank(
|
|
TypeDePieceJustificative.new(
|
|
order_place: 1,
|
|
libelle: "Télécharger l'attestation d'assurance"
|
|
)
|
|
)
|
|
end
|
|
end
|
|
|
|
restore_deleted_dossiers(4860, 8603, mapping, private_mapping, pj_mapping)
|
|
end
|
|
|
|
def restore_neph_deleted_dossiers
|
|
mapping = Class.new(Tasks::DossierProcedureMigrator::ChampMapping) do
|
|
def can_migrate?(dossier)
|
|
!(dossier.termine? ||
|
|
dossier.champs.joins(:type_de_champ).find_by(types_de_champ: { order_place: 3 }).value&.include?('"Demande de duplicata de dossier d\'inscription (suite perte)"'))
|
|
end
|
|
|
|
def setup_mapping
|
|
champ_opts = {
|
|
3 => {
|
|
source_overrides: { 'drop_down' => ["", "Demande de réactualisation du numéro NEPH", "Demande de communication du numéro NEPH", "Demande de duplicata de dossier d'inscription (suite perte)", "Demande de correction sur le Fichier National des Permis de conduire"] },
|
|
destination_overrides: { 'drop_down' => ["", "Demande de réactualisation du numéro NEPH", "Demande de communication du numéro NEPH", "Demande de correction sur le Fichier National des Permis de conduire"] }
|
|
}
|
|
}
|
|
(0..14).each do |i|
|
|
map_source_to_destination_champ(i, i, **(champ_opts[i] || {}))
|
|
end
|
|
(16..22).each do |i|
|
|
map_source_to_destination_champ(i, i + 2, **(champ_opts[i] || {}))
|
|
end
|
|
|
|
discard_source_champ(
|
|
TypeDeChamp.new(
|
|
type_champ: 'address',
|
|
order_place: 15,
|
|
libelle: 'Adresse du candidat'
|
|
)
|
|
)
|
|
|
|
compute_destination_champ(
|
|
TypeDeChamp.new(
|
|
type_champ: 'address',
|
|
order_place: 15,
|
|
libelle: 'Adresse du candidat',
|
|
mandatory: true
|
|
)
|
|
) do |d, target_tdc|
|
|
value = d.champs.joins(:type_de_champ).find_by(types_de_champ: { order_place: 3 }).value
|
|
if !d.brouillon?
|
|
value ||= 'non renseigné'
|
|
end
|
|
target_tdc.champ.create(dossier: d, value: value)
|
|
end
|
|
|
|
compute_destination_champ(
|
|
TypeDeChamp.new(
|
|
type_champ: 'address',
|
|
order_place: 16,
|
|
libelle: 'Code postal',
|
|
mandatory: true
|
|
)
|
|
) do |d, target_tdc|
|
|
target_tdc.champ.create(dossier: d, value: d.brouillon? ? nil : 'non renseigné')
|
|
end
|
|
|
|
compute_destination_champ(
|
|
TypeDeChamp.new(
|
|
type_champ: 'address',
|
|
order_place: 17,
|
|
libelle: 'Ville',
|
|
mandatory: true
|
|
)
|
|
) do |d, target_tdc|
|
|
target_tdc.champ.create(dossier: d, value: d.brouillon? ? nil : 'non renseigné')
|
|
end
|
|
end
|
|
end
|
|
|
|
private_mapping = Class.new(Tasks::DossierProcedureMigrator::ChampMapping) do
|
|
def setup_mapping
|
|
(0..2).each do |i|
|
|
map_source_to_destination_champ(i, i)
|
|
end
|
|
end
|
|
end
|
|
|
|
pj_mapping = Class.new(Tasks::DossierProcedureMigrator::PieceJustificativeMapping) do
|
|
def setup_mapping
|
|
(0..3).each do |i|
|
|
map_source_to_destination_pj(i, i)
|
|
end
|
|
end
|
|
end
|
|
|
|
restore_deleted_dossiers(6388, 8770, mapping, private_mapping, pj_mapping)
|
|
end
|
|
|
|
def restore_deleted_dossiers(deleted_procedure_id, new_procedure_id, champ_mapping, champ_private_mapping, pj_mapping)
|
|
source_procedure = Procedure.unscoped.find(deleted_procedure_id)
|
|
destination_procedure = Procedure.find(new_procedure_id)
|
|
|
|
deleted_dossiers = Dossier.unscoped
|
|
.where(procedure_id: deleted_procedure_id)
|
|
.where('dossiers.hidden_at >= ?', source_procedure.hidden_at)
|
|
|
|
deleted_dossier_ids = deleted_dossiers.pluck(:id).to_a
|
|
deleted_dossiers.update_all(hidden_at: nil)
|
|
|
|
source_procedure
|
|
.update_columns(
|
|
hidden_at: nil,
|
|
archived_at: source_procedure.hidden_at,
|
|
aasm_state: :archivee
|
|
)
|
|
|
|
migrator = Tasks::DossierProcedureMigrator.new(source_procedure, destination_procedure, champ_mapping, champ_private_mapping, pj_mapping) do |dossier|
|
|
DossierMailer.notify_undelete_to_user(dossier).deliver_later
|
|
end
|
|
migrator.check_consistency
|
|
migrator.migrate_dossiers
|
|
|
|
source_procedure.dossiers.where(id: deleted_dossier_ids).find_each do |dossier|
|
|
if dossier.termine?
|
|
DossierMailer.notify_undelete_to_user(dossier).deliver_later
|
|
else
|
|
rake_puts "Dossier #{dossier.id} non migré\n"
|
|
DossierMailer.notify_unmigrated_to_user(dossier, destination_procedure).deliver_later
|
|
end
|
|
end
|
|
end
|
|
end.new.run
|
|
end
|
|
end
|