Migrate procedures “on demand”
This commit is contained in:
parent
0a0912503b
commit
d18a9c8162
5 changed files with 79 additions and 23 deletions
|
@ -246,6 +246,7 @@ class Procedure < ApplicationRecord
|
|||
def new_dossier
|
||||
Dossier.new(
|
||||
procedure: self,
|
||||
revision: active_revision,
|
||||
champs: build_champs,
|
||||
champs_private: build_champs_private,
|
||||
groupe_instructeur: defaut_groupe_instructeur
|
||||
|
@ -296,13 +297,22 @@ class Procedure < ApplicationRecord
|
|||
end
|
||||
|
||||
def clone(admin, from_library)
|
||||
# FIXUP: needed during transition to revisions
|
||||
RevisionsMigration.add_revisions(self)
|
||||
|
||||
is_different_admin = !admin.owns?(self)
|
||||
|
||||
populate_champ_stable_ids
|
||||
include_list = {
|
||||
attestation_template: nil,
|
||||
types_de_champ: [:types_de_champ],
|
||||
types_de_champ_private: [:types_de_champ]
|
||||
attestation_template: [],
|
||||
draft_revision: {
|
||||
revision_types_de_champ: {
|
||||
type_de_champ: :types_de_champ
|
||||
},
|
||||
revision_types_de_champ_private: {
|
||||
type_de_champ: :types_de_champ
|
||||
}
|
||||
}
|
||||
}
|
||||
include_list[:groupe_instructeurs] = :instructeurs if !is_different_admin
|
||||
procedure = self.deep_clone(include: include_list, &method(:clone_attachments))
|
||||
|
@ -312,10 +322,7 @@ class Procedure < ApplicationRecord
|
|||
procedure.unpublished_at = nil
|
||||
procedure.published_at = nil
|
||||
procedure.lien_notice = nil
|
||||
|
||||
if is_different_admin || from_library
|
||||
procedure.types_de_champ.each { |tdc| tdc.options&.delete(:old_pj) }
|
||||
end
|
||||
procedure.draft_revision.procedure = procedure
|
||||
|
||||
if is_different_admin
|
||||
procedure.administrateurs = [admin]
|
||||
|
@ -343,6 +350,18 @@ class Procedure < ApplicationRecord
|
|||
|
||||
procedure.save
|
||||
|
||||
# FIXUP: needed during transition to revisions
|
||||
procedure.draft_revision.types_de_champ.each do |type_de_champ|
|
||||
procedure.types_de_champ << type_de_champ
|
||||
end
|
||||
procedure.draft_revision.types_de_champ_private.each do |type_de_champ|
|
||||
procedure.types_de_champ_private << type_de_champ
|
||||
end
|
||||
|
||||
if is_different_admin || from_library
|
||||
procedure.types_de_champ.each { |tdc| tdc.options&.delete(:old_pj) }
|
||||
end
|
||||
|
||||
procedure
|
||||
end
|
||||
|
||||
|
@ -582,6 +601,10 @@ class Procedure < ApplicationRecord
|
|||
ApiEntrepriseToken.new(api_entreprise_token).expired?
|
||||
end
|
||||
|
||||
def create_new_revision
|
||||
draft_revision.deep_clone(include: [:revision_types_de_champ, :revision_types_de_champ_private])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def move_type_de_champ_attributes(types_de_champ, type_de_champ, new_index)
|
||||
|
@ -605,15 +628,23 @@ class Procedure < ApplicationRecord
|
|||
end
|
||||
|
||||
def after_publish(canonical_procedure = nil)
|
||||
update!(published_at: Time.zone.now, canonical_procedure: canonical_procedure)
|
||||
# FIXUP: needed during transition to revisions
|
||||
if RevisionsMigration.add_revisions(self)
|
||||
update!(published_at: Time.zone.now, canonical_procedure: canonical_procedure)
|
||||
else
|
||||
update!(published_at: Time.zone.now, canonical_procedure: canonical_procedure, draft_revision: create_new_revision, published_revision: draft_revision)
|
||||
end
|
||||
end
|
||||
|
||||
def after_close
|
||||
now = Time.zone.now
|
||||
update!(closed_at: now)
|
||||
# FIXUP: needed during transition to revisions
|
||||
RevisionsMigration.add_revisions(self)
|
||||
update!(closed_at: Time.zone.now)
|
||||
end
|
||||
|
||||
def after_unpublish
|
||||
# FIXUP: needed during transition to revisions
|
||||
RevisionsMigration.add_revisions(self)
|
||||
update!(unpublished_at: Time.zone.now)
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue