From 6adb3f7a3a44e96321f8c66b6a9276cfa6ca59ec Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Thu, 12 May 2022 09:26:43 +0200 Subject: [PATCH] fix(revision): fix migrate_parent! --- app/models/procedure.rb | 7 +++++++ app/models/procedure_revision.rb | 5 ++--- app/models/type_de_champ.rb | 15 +++++++++------ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 00854daca..a4a4d7a50 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -732,6 +732,13 @@ class Procedure < ApplicationRecord new_draft.revision_types_de_champ.reload + # Some revisions do not have links to children types de champ + new_draft + .types_de_champ + .filter(&:repetition?) + .flat_map(&:types_de_champ) + .each(&:migrate_parent!) + new_draft end diff --git a/app/models/procedure_revision.rb b/app/models/procedure_revision.rb index 46b85b1f5..37887fe17 100644 --- a/app/models/procedure_revision.rb +++ b/app/models/procedure_revision.rb @@ -381,13 +381,12 @@ class ProcedureRevision < ApplicationRecord end def revise_type_de_champ(type_de_champ) - types_de_champ_association = type_de_champ.private? ? :revision_types_de_champ_private : :revision_types_de_champ_public - association = send(types_de_champ_association).find_by!(type_de_champ: type_de_champ) + revision_type_de_champ = revision_types_de_champ.find_by!(type_de_champ: type_de_champ) cloned_type_de_champ = type_de_champ.deep_clone(include: [:types_de_champ]) do |original, kopy| PiecesJustificativesService.clone_attachments(original, kopy) end cloned_type_de_champ.revision = self - association.update!(type_de_champ: cloned_type_de_champ) + revision_type_de_champ.update!(type_de_champ: cloned_type_de_champ) cloned_type_de_champ.types_de_champ.each(&:migrate_parent!) cloned_type_de_champ end diff --git a/app/models/type_de_champ.rb b/app/models/type_de_champ.rb index 5ec75a695..ec0cbeab5 100644 --- a/app/models/type_de_champ.rb +++ b/app/models/type_de_champ.rb @@ -18,6 +18,8 @@ # stable_id :bigint # class TypeDeChamp < ApplicationRecord + self.ignored_columns = [:migrated_parent] + enum type_champs: { text: 'text', textarea: 'textarea', @@ -394,12 +396,13 @@ class TypeDeChamp < ApplicationRecord end def migrate_parent! - if parent_id.present? && migrated_parent.nil? - ProcedureRevisionTypeDeChamp.create(parent: parent.revision_type_de_champ, - type_de_champ: self, - revision_id: parent.revision_type_de_champ.revision_id, - position: order_place) - update_column(:migrated_parent, true) + if parent_id.present? && revision_types_de_champ.empty? + parent.revision_types_de_champ.each do |revision_type_de_champ| + ProcedureRevisionTypeDeChamp.create(parent: revision_type_de_champ, + type_de_champ: self, + revision_id: revision_type_de_champ.revision_id, + position: order_place) + end end self end