2018-10-09 22:07:31 +02:00
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
2018-10-10 15:36:23 +02:00
restore_neph_deleted_dossiers
2018-10-09 22:07:31 +02:00
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
2018-10-10 15:36:23 +02:00
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
2018-10-09 22:07:31 +02:00
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 )
2018-10-11 19:27:58 +02:00
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
)
2018-10-10 17:19:59 +02:00
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
2018-10-09 22:07:31 +02:00
migrator . check_consistency
migrator . migrate_dossiers
2018-10-11 19:27:58 +02:00
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
2018-10-09 22:07:31 +02:00
end
end . new . run
end
end