Add revisions models and relationships
This commit is contained in:
parent
35461f0159
commit
9de917592b
5 changed files with 51 additions and 0 deletions
|
@ -48,6 +48,7 @@ class Dossier < ApplicationRecord
|
||||||
|
|
||||||
belongs_to :groupe_instructeur
|
belongs_to :groupe_instructeur
|
||||||
has_one :procedure, through: :groupe_instructeur
|
has_one :procedure, through: :groupe_instructeur
|
||||||
|
belongs_to :revision, class_name: 'ProcedureRevision', optional: true
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
|
||||||
accepts_nested_attributes_for :champs
|
accepts_nested_attributes_for :champs
|
||||||
|
|
|
@ -14,6 +14,9 @@ class Procedure < ApplicationRecord
|
||||||
|
|
||||||
has_many :types_de_champ, -> { root.public_only.ordered }, inverse_of: :procedure, dependent: :destroy
|
has_many :types_de_champ, -> { root.public_only.ordered }, inverse_of: :procedure, dependent: :destroy
|
||||||
has_many :types_de_champ_private, -> { root.private_only.ordered }, class_name: 'TypeDeChamp', inverse_of: :procedure, dependent: :destroy
|
has_many :types_de_champ_private, -> { root.private_only.ordered }, class_name: 'TypeDeChamp', inverse_of: :procedure, dependent: :destroy
|
||||||
|
has_many :revisions, class_name: 'ProcedureRevision', inverse_of: :procedure, dependent: :destroy
|
||||||
|
belongs_to :draft_revision, class_name: 'ProcedureRevision', optional: true
|
||||||
|
belongs_to :published_revision, class_name: 'ProcedureRevision', optional: true
|
||||||
has_many :deleted_dossiers, dependent: :destroy
|
has_many :deleted_dossiers, dependent: :destroy
|
||||||
|
|
||||||
has_one :module_api_carto, dependent: :destroy
|
has_one :module_api_carto, dependent: :destroy
|
||||||
|
@ -23,6 +26,10 @@ class Procedure < ApplicationRecord
|
||||||
belongs_to :canonical_procedure, class_name: 'Procedure'
|
belongs_to :canonical_procedure, class_name: 'Procedure'
|
||||||
belongs_to :service
|
belongs_to :service
|
||||||
|
|
||||||
|
def active_revision
|
||||||
|
brouillon? ? draft_revision : published_revision
|
||||||
|
end
|
||||||
|
|
||||||
has_many :administrateurs_procedures
|
has_many :administrateurs_procedures
|
||||||
has_many :administrateurs, through: :administrateurs_procedures, after_remove: -> (procedure, _admin) { procedure.validate! }
|
has_many :administrateurs, through: :administrateurs_procedures, after_remove: -> (procedure, _admin) { procedure.validate! }
|
||||||
has_many :groupe_instructeurs, dependent: :destroy
|
has_many :groupe_instructeurs, dependent: :destroy
|
||||||
|
|
16
app/models/procedure_revision.rb
Normal file
16
app/models/procedure_revision.rb
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
class ProcedureRevision < ApplicationRecord
|
||||||
|
belongs_to :procedure, -> { with_discarded }, inverse_of: :revisions
|
||||||
|
|
||||||
|
has_many :revision_types_de_champ, -> { public_only.ordered }, class_name: 'ProcedureRevisionTypeDeChamp', foreign_key: :revision_id, dependent: :destroy, inverse_of: :revision
|
||||||
|
has_many :revision_types_de_champ_private, -> { private_only.ordered }, class_name: 'ProcedureRevisionTypeDeChamp', foreign_key: :revision_id, dependent: :destroy, inverse_of: :revision
|
||||||
|
has_many :types_de_champ, through: :revision_types_de_champ, source: :type_de_champ
|
||||||
|
has_many :types_de_champ_private, through: :revision_types_de_champ_private, source: :type_de_champ
|
||||||
|
|
||||||
|
def draft?
|
||||||
|
procedure.draft_revision == self
|
||||||
|
end
|
||||||
|
|
||||||
|
def locked?
|
||||||
|
!draft?
|
||||||
|
end
|
||||||
|
end
|
24
app/models/procedure_revision_type_de_champ.rb
Normal file
24
app/models/procedure_revision_type_de_champ.rb
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
class ProcedureRevisionTypeDeChamp < ApplicationRecord
|
||||||
|
belongs_to :revision, class_name: 'ProcedureRevision'
|
||||||
|
belongs_to :type_de_champ
|
||||||
|
|
||||||
|
scope :ordered, -> { order(:position) }
|
||||||
|
scope :public_only, -> { joins(:type_de_champ).where(types_de_champ: { private: false }) }
|
||||||
|
scope :private_only, -> { joins(:type_de_champ).where(types_de_champ: { private: true }) }
|
||||||
|
|
||||||
|
before_create :set_position
|
||||||
|
|
||||||
|
def private?
|
||||||
|
type_de_champ.private?
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def set_position
|
||||||
|
self.position ||= if private?
|
||||||
|
revision.types_de_champ_private.size
|
||||||
|
else
|
||||||
|
revision.types_de_champ.size
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -31,11 +31,14 @@ class TypeDeChamp < ApplicationRecord
|
||||||
}
|
}
|
||||||
|
|
||||||
belongs_to :procedure
|
belongs_to :procedure
|
||||||
|
belongs_to :revision, class_name: 'ProcedureRevision'
|
||||||
|
|
||||||
belongs_to :parent, class_name: 'TypeDeChamp'
|
belongs_to :parent, class_name: 'TypeDeChamp'
|
||||||
has_many :types_de_champ, -> { ordered }, foreign_key: :parent_id, class_name: 'TypeDeChamp', inverse_of: :parent, dependent: :destroy
|
has_many :types_de_champ, -> { ordered }, foreign_key: :parent_id, class_name: 'TypeDeChamp', inverse_of: :parent, dependent: :destroy
|
||||||
|
|
||||||
store_accessor :options, :cadastres, :quartiers_prioritaires, :parcelles_agricoles, :old_pj, :drop_down_options, :skip_pj_validation
|
store_accessor :options, :cadastres, :quartiers_prioritaires, :parcelles_agricoles, :old_pj, :drop_down_options, :skip_pj_validation
|
||||||
|
has_many :revision_types_de_champ, class_name: 'ProcedureRevisionTypeDeChamp', dependent: :destroy, inverse_of: :type_de_champ
|
||||||
|
|
||||||
delegate :tags_for_template, to: :dynamic_type
|
delegate :tags_for_template, to: :dynamic_type
|
||||||
|
|
||||||
class WithIndifferentAccess
|
class WithIndifferentAccess
|
||||||
|
|
Loading…
Reference in a new issue