109 lines
3.3 KiB
Ruby
109 lines
3.3 KiB
Ruby
class Procedure < ActiveRecord::Base
|
|
has_many :types_de_piece_justificative, dependent: :destroy
|
|
has_many :types_de_champ, class_name: 'TypeDeChampPublic', dependent: :destroy
|
|
has_many :types_de_champ_private, dependent: :destroy
|
|
has_many :dossiers
|
|
has_many :mail_templates
|
|
has_one :mail_received
|
|
|
|
has_one :procedure_path, dependent: :destroy
|
|
|
|
has_one :module_api_carto, dependent: :destroy
|
|
|
|
belongs_to :administrateur
|
|
|
|
has_many :assign_to, dependent: :destroy
|
|
has_many :gestionnaires, through: :assign_to
|
|
|
|
delegate :use_api_carto, to: :module_api_carto
|
|
|
|
accepts_nested_attributes_for :types_de_champ, :reject_if => proc { |attributes| attributes['libelle'].blank? }, :allow_destroy => true
|
|
accepts_nested_attributes_for :types_de_piece_justificative, :reject_if => proc { |attributes| attributes['libelle'].blank? }, :allow_destroy => true
|
|
accepts_nested_attributes_for :module_api_carto
|
|
accepts_nested_attributes_for :types_de_champ_private
|
|
|
|
mount_uploader :logo, ProcedureLogoUploader
|
|
|
|
validates :libelle, presence: true, allow_blank: false, allow_nil: false
|
|
validates :description, presence: true, allow_blank: false, allow_nil: false
|
|
|
|
after_save :build_default_mails, if: Proc.new { id_changed? }
|
|
|
|
def build_default_mails
|
|
MailReceived.create(procedure: self)
|
|
end
|
|
|
|
def path
|
|
procedure_path.path unless procedure_path.nil?
|
|
end
|
|
|
|
def default_path
|
|
libelle.downcase.gsub(/[^a-z0-9\-_]/, "_").gsub(/_*$/, '').gsub(/_+/, '_')
|
|
end
|
|
|
|
def types_de_champ_ordered
|
|
types_de_champ.order(:order_place)
|
|
end
|
|
|
|
def types_de_champ_private_ordered
|
|
types_de_champ_private.order(:order_place)
|
|
end
|
|
|
|
def types_de_piece_justificative_ordered
|
|
types_de_piece_justificative.order(:order_place)
|
|
end
|
|
|
|
def self.not_archived id
|
|
Procedure.where(archived: false).find(id)
|
|
end
|
|
|
|
def self.active id
|
|
Procedure.where(archived: false, published: true).find(id)
|
|
end
|
|
|
|
def switch_types_de_champ index_of_first_element
|
|
switch_list_order(types_de_champ_ordered, index_of_first_element)
|
|
end
|
|
|
|
def switch_types_de_champ_private index_of_first_element
|
|
switch_list_order(types_de_champ_private_ordered, index_of_first_element)
|
|
end
|
|
|
|
def switch_types_de_piece_justificative index_of_first_element
|
|
switch_list_order(types_de_piece_justificative_ordered, index_of_first_element)
|
|
end
|
|
|
|
def switch_list_order(list, index_of_first_element)
|
|
return false if index_of_first_element < 0
|
|
return false if index_of_first_element == list.count - 1
|
|
return false if list.count < 1
|
|
list[index_of_first_element].update_attributes(order_place: index_of_first_element + 1)
|
|
list[index_of_first_element + 1].update_attributes(order_place: index_of_first_element)
|
|
true
|
|
end
|
|
|
|
def locked?
|
|
published?
|
|
end
|
|
|
|
def clone
|
|
procedure = self.deep_clone(include: [:types_de_piece_justificative, :types_de_champ, :module_api_carto, :mail_templates])
|
|
procedure.archived = false
|
|
procedure.published = false
|
|
return procedure if procedure.save
|
|
end
|
|
|
|
def publish!(path)
|
|
self.update_attributes!({published: true, archived: false})
|
|
ProcedurePath.create!(path: path, procedure: self, administrateur: self.administrateur)
|
|
end
|
|
|
|
def archive
|
|
self.procedure_path.destroy! if self.path
|
|
self.update_attributes!({archived: true})
|
|
end
|
|
|
|
def total_dossier
|
|
self.dossiers.where.not(state: :draft).size
|
|
end
|
|
end
|