feat(ProcedureRevision.ineligibilites_rules): keep track of changes and show it to admin for republication
This commit is contained in:
parent
aca3e38859
commit
5de4ce889f
11 changed files with 458 additions and 258 deletions
|
@ -22,7 +22,7 @@ module DossierRebaseConcern
|
|||
end
|
||||
|
||||
def pending_changes
|
||||
procedure.published_revision.present? ? revision.compare(procedure.published_revision) : []
|
||||
procedure.published_revision.present? ? revision.compare_types_de_champ(procedure.published_revision) : []
|
||||
end
|
||||
|
||||
def can_rebase_mandatory_change?(stable_id)
|
||||
|
|
|
@ -431,11 +431,15 @@ class Procedure < ApplicationRecord
|
|||
|
||||
def draft_changed?
|
||||
preload_draft_and_published_revisions
|
||||
!brouillon? && published_revision.different_from?(draft_revision) && revision_changes.present?
|
||||
!brouillon? && (types_de_champ_revision_changes.present? || ineligibilite_rules_revision_changes.present?)
|
||||
end
|
||||
|
||||
def revision_changes
|
||||
published_revision.compare(draft_revision)
|
||||
def types_de_champ_revision_changes
|
||||
published_revision.compare_types_de_champ(draft_revision)
|
||||
end
|
||||
|
||||
def ineligibilite_rules_revision_changes
|
||||
published_revision.compare_ineligibilite_rules(draft_revision)
|
||||
end
|
||||
|
||||
def preload_draft_and_published_revisions
|
||||
|
|
|
@ -148,16 +148,18 @@ class ProcedureRevision < ApplicationRecord
|
|||
!draft?
|
||||
end
|
||||
|
||||
def different_from?(revision)
|
||||
revision_types_de_champ != revision.revision_types_de_champ
|
||||
end
|
||||
|
||||
def compare(revision)
|
||||
def compare_types_de_champ(revision)
|
||||
changes = []
|
||||
changes += compare_revision_types_de_champ(revision_types_de_champ, revision.revision_types_de_champ)
|
||||
changes
|
||||
end
|
||||
|
||||
def compare_ineligibilite_rules(revision)
|
||||
changes = []
|
||||
changes += compare_revision_ineligibilite_rules(revision)
|
||||
changes
|
||||
end
|
||||
|
||||
def dossier_for_preview(user)
|
||||
dossier = Dossier
|
||||
.create_with(autorisation_donnees: true)
|
||||
|
@ -334,6 +336,29 @@ class ProcedureRevision < ApplicationRecord
|
|||
end
|
||||
end
|
||||
|
||||
def compare_revision_ineligibilite_rules(new_revision)
|
||||
from_ineligibilite_rules = ineligibilite_rules
|
||||
to_ineligibilite_rules = new_revision.ineligibilite_rules
|
||||
changes = []
|
||||
|
||||
if from_ineligibilite_rules.present? && to_ineligibilite_rules.blank?
|
||||
changes << ProcedureRevisionChange::RemoveEligibiliteRuleChange
|
||||
end
|
||||
if from_ineligibilite_rules.blank? && to_ineligibilite_rules.present?
|
||||
changes << ProcedureRevisionChange::AddEligibiliteRuleChange
|
||||
end
|
||||
if from_ineligibilite_rules != to_ineligibilite_rules
|
||||
changes << ProcedureRevisionChange::UpdateEligibiliteRuleChange
|
||||
end
|
||||
if ineligibilite_message != new_revision.ineligibilite_message
|
||||
changes << ProcedureRevisionChange::UpdateEligibiliteMessageChange
|
||||
end
|
||||
if ineligibilite_enabled != new_revision.ineligibilite_enabled
|
||||
changes << (new_revision.ineligibilite_enabled ? ProcedureRevisionChange::EligibiliteEnabledChange : ProcedureRevisionChange::EligibiliteDisabledChange)
|
||||
end
|
||||
changes.map { _1.new(self, new_revision) }
|
||||
end
|
||||
|
||||
def compare_type_de_champ(from_type_de_champ, to_type_de_champ, from_coordinates, to_coordinates)
|
||||
changes = []
|
||||
if from_type_de_champ.type_champ != to_type_de_champ.type_champ
|
||||
|
|
|
@ -1,17 +1,19 @@
|
|||
class ProcedureRevisionChange
|
||||
attr_reader :type_de_champ
|
||||
def initialize(type_de_champ)
|
||||
@type_de_champ = type_de_champ
|
||||
class TypeDeChange
|
||||
attr_reader :type_de_champ
|
||||
def initialize(type_de_champ)
|
||||
@type_de_champ = type_de_champ
|
||||
end
|
||||
|
||||
def label = @type_de_champ.libelle
|
||||
def stable_id = @type_de_champ.stable_id
|
||||
def private? = @type_de_champ.private?
|
||||
def child? = @type_de_champ.child?
|
||||
|
||||
def to_h = { op:, stable_id:, label:, private: private? }
|
||||
end
|
||||
|
||||
def label = @type_de_champ.libelle
|
||||
def stable_id = @type_de_champ.stable_id
|
||||
def private? = @type_de_champ.private?
|
||||
def child? = @type_de_champ.child?
|
||||
|
||||
def to_h = { op:, stable_id:, label:, private: private? }
|
||||
|
||||
class AddChamp < ProcedureRevisionChange
|
||||
class AddChamp < TypeDeChange
|
||||
def initialize(type_de_champ)
|
||||
super(type_de_champ)
|
||||
end
|
||||
|
@ -23,7 +25,7 @@ class ProcedureRevisionChange
|
|||
def to_h = super.merge(mandatory: mandatory?)
|
||||
end
|
||||
|
||||
class RemoveChamp < ProcedureRevisionChange
|
||||
class RemoveChamp < TypeDeChange
|
||||
def initialize(type_de_champ)
|
||||
super(type_de_champ)
|
||||
end
|
||||
|
@ -32,7 +34,7 @@ class ProcedureRevisionChange
|
|||
def can_rebase?(dossier = nil) = true
|
||||
end
|
||||
|
||||
class MoveChamp < ProcedureRevisionChange
|
||||
class MoveChamp < TypeDeChange
|
||||
attr_reader :from, :to
|
||||
|
||||
def initialize(type_de_champ, from, to)
|
||||
|
@ -46,7 +48,7 @@ class ProcedureRevisionChange
|
|||
def to_h = super.merge(from:, to:)
|
||||
end
|
||||
|
||||
class UpdateChamp < ProcedureRevisionChange
|
||||
class UpdateChamp < TypeDeChange
|
||||
attr_reader :attribute, :from, :to
|
||||
|
||||
def initialize(type_de_champ, attribute, from, to)
|
||||
|
@ -75,4 +77,48 @@ class ProcedureRevisionChange
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
class EligibiliteRulesChange
|
||||
attr_reader :previous_revision, :new_revision
|
||||
def initialize(previous_revision, new_revision)
|
||||
@previous_revision = previous_revision
|
||||
@new_revision = new_revision
|
||||
@previous_ineligibilite_rules = @previous_revision.ineligibilite_rules
|
||||
@new_ineligibilite_rules = @new_revision.ineligibilite_rules
|
||||
end
|
||||
|
||||
def i18n_params
|
||||
{
|
||||
previous_condition: @previous_ineligibilite_rules&.to_s(previous_revision.types_de_champ.filter { @previous_ineligibilite_rules.sources.include? _1.stable_id }),
|
||||
new_condition: @new_ineligibilite_rules&.to_s(new_revision.types_de_champ.filter { @new_ineligibilite_rules.sources.include? _1.stable_id })
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
class AddEligibiliteRuleChange < EligibiliteRulesChange
|
||||
def op = :add
|
||||
end
|
||||
|
||||
class RemoveEligibiliteRuleChange < EligibiliteRulesChange
|
||||
def op = :remove
|
||||
end
|
||||
|
||||
class UpdateEligibiliteRuleChange < EligibiliteRulesChange
|
||||
def op = :update
|
||||
end
|
||||
|
||||
class EligibiliteEnabledChange < EligibiliteRulesChange
|
||||
def op = :enabled
|
||||
def i18n_params = {}
|
||||
end
|
||||
|
||||
class EligibiliteDisabledChange < EligibiliteRulesChange
|
||||
def op = :disabled
|
||||
def i18n_params = {}
|
||||
end
|
||||
|
||||
class UpdateEligibiliteMessageChange < EligibiliteRulesChange
|
||||
def op = :message_updated
|
||||
def i18n_params = { ineligibilite_message: @new_revision.ineligibilite_message }
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue