diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 1f09a3174..1aef4d3fa 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -509,9 +509,11 @@ class Procedure < ApplicationRecord procedure.service = self.service.clone_and_assign_to_administrateur(admin) end - procedure.save + transaction do + procedure.save - move_new_children_to_new_parent_coordinate(procedure.draft_revision) + move_new_children_to_new_parent_coordinate(procedure.draft_revision) + end if is_different_admin || from_library procedure.draft_types_de_champ.each { |tdc| tdc.options&.delete(:old_pj) } @@ -728,13 +730,15 @@ class Procedure < ApplicationRecord end def create_new_revision - new_draft = draft_revision - .deep_clone(include: [:revision_types_de_champ]) - .tap(&:save!) + transaction do + new_draft = draft_revision + .deep_clone(include: [:revision_types_de_champ]) + .tap(&:save!) - move_new_children_to_new_parent_coordinate(new_draft) + move_new_children_to_new_parent_coordinate(new_draft) - new_draft + new_draft + end end def average_dossier_weight diff --git a/lib/tasks/deployment/20220601070414_move_new_children_to_new_parent_coordinate.rake b/lib/tasks/deployment/20220601070414_move_new_children_to_new_parent_coordinate.rake new file mode 100644 index 000000000..7ba85e6be --- /dev/null +++ b/lib/tasks/deployment/20220601070414_move_new_children_to_new_parent_coordinate.rake @@ -0,0 +1,26 @@ +namespace :after_party do + desc 'Deployment task: move_new_children_to_new_parent_coordinate' + task move_new_children_to_new_parent_coordinate: :environment do + puts "Running deploy task 'move_new_children_to_new_parent_coordinate'" + + children = ProcedureRevisionTypeDeChamp + .includes(parent: :type_de_champ) + .where.not(parent_id: nil) + .filter { |child| child.revision_id != child.parent.revision_id } + + progress = ProgressReport.new(children.size) + + children.each do |child| + new_parent = child.revision.revision_types_de_champ.joins(:type_de_champ).find_by!(type_de_champ: { stable_id: child.parent.stable_id }) + child.update!(parent: new_parent) + 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