diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 7846189d1..948377595 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -439,6 +439,7 @@ class Procedure < ApplicationRecord end def draft_changed? + preload_draft_and_published_revisions !brouillon? && published_revision.different_from?(draft_revision) && revision_changes.present? end @@ -446,6 +447,15 @@ class Procedure < ApplicationRecord published_revision.compare(draft_revision) end + def preload_draft_and_published_revisions + if !association(:published_revision).loaded? && published_revision_id.present? + association(:published_revision).target = ProcedureRevision.includes_for_compare.find(published_revision_id) + end + if !association(:draft_revision).loaded? && draft_revision_id.present? + association(:draft_revision).target = ProcedureRevision.includes_for_compare.find(draft_revision_id) + end + end + def accepts_new_dossiers? publiee? || brouillon? end diff --git a/app/models/procedure_revision.rb b/app/models/procedure_revision.rb index 46b18a935..2c1aa20c7 100644 --- a/app/models/procedure_revision.rb +++ b/app/models/procedure_revision.rb @@ -16,7 +16,13 @@ class ProcedureRevision < ApplicationRecord has_one :published_procedure, -> { with_discarded }, class_name: 'Procedure', foreign_key: :published_revision_id, dependent: :nullify, inverse_of: :published_revision scope :ordered, -> { order(:created_at) } - + scope :includes_for_compare, -> { + includes(revision_types_de_champ: { + type_de_champ: { notice_explicative_attachment: :blob, piece_justificative_template_attachment: :blob, revision: [], procedure: [] }, + revision: [], + procedure: [] + }) + } validate :conditions_are_valid? validate :header_sections_are_valid? validate :expressions_regulieres_are_valid?