171 lines
5.2 KiB
Ruby
171 lines
5.2 KiB
Ruby
class Procedure < ActiveRecord::Base
|
|
has_many :types_de_piece_justificative, -> { order "order_place ASC" }, dependent: :destroy
|
|
has_many :types_de_champ, class_name: 'TypeDeChampPublic', dependent: :destroy
|
|
has_many :types_de_champ_private, dependent: :destroy
|
|
has_many :dossiers
|
|
|
|
has_one :procedure_path, dependent: :destroy
|
|
|
|
has_one :module_api_carto, dependent: :destroy
|
|
has_one :attestation_template, dependent: :destroy
|
|
|
|
belongs_to :administrateur
|
|
|
|
has_many :assign_to, dependent: :destroy
|
|
has_many :gestionnaires, through: :assign_to
|
|
|
|
has_many :preference_list_dossiers
|
|
|
|
has_one :initiated_mail, class_name: "Mails::InitiatedMail", dependent: :destroy
|
|
has_one :received_mail, class_name: "Mails::ReceivedMail", dependent: :destroy
|
|
has_one :closed_mail, class_name: "Mails::ClosedMail", dependent: :destroy
|
|
has_one :refused_mail, class_name: "Mails::RefusedMail", dependent: :destroy
|
|
has_one :without_continuation_mail, class_name: "Mails::WithoutContinuationMail", dependent: :destroy
|
|
|
|
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
|
|
|
|
default_scope { where(hidden_at: nil) }
|
|
scope :published, -> { where(published: true) }
|
|
scope :not_published, -> { where(published: false) }
|
|
scope :archived, -> { where(archived: true) }
|
|
scope :not_archived, -> { where(archived: false) }
|
|
scope :by_libelle, -> { order(libelle: :asc) }
|
|
|
|
validates :libelle, presence: true, allow_blank: false, allow_nil: false
|
|
validates :description, presence: true, allow_blank: false, allow_nil: false
|
|
|
|
def hide!
|
|
now = DateTime.now
|
|
self.update_attributes(hidden_at: now)
|
|
self.dossiers.update_all(hidden_at: now)
|
|
end
|
|
|
|
def path
|
|
procedure_path.path unless procedure_path.nil?
|
|
end
|
|
|
|
def default_path
|
|
libelle.parameterize.first(50)
|
|
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 self.active id
|
|
not_archived.published.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, index_of_first_element)
|
|
end
|
|
|
|
def switch_list_order(list, index_of_first_element)
|
|
if index_of_first_element < 0 ||
|
|
index_of_first_element == list.count - 1 ||
|
|
list.count < 1
|
|
|
|
false
|
|
else
|
|
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
|
|
end
|
|
|
|
def locked?
|
|
published?
|
|
end
|
|
|
|
def clone
|
|
procedure = self.deep_clone(include:
|
|
{
|
|
types_de_piece_justificative: nil,
|
|
module_api_carto: nil,
|
|
attestation_template: nil,
|
|
types_de_champ: :drop_down_list,
|
|
types_de_champ_private: :drop_down_list
|
|
})
|
|
procedure.archived = false
|
|
procedure.published = false
|
|
procedure.logo_secure_token = nil
|
|
procedure.remote_logo_url = self.logo_url
|
|
|
|
procedure.initiated_mail = initiated_mail.try(:dup)
|
|
procedure.received_mail = received_mail.try(:dup)
|
|
procedure.closed_mail = closed_mail.try(:dup)
|
|
procedure.refused_mail = refused_mail.try(:dup)
|
|
procedure.without_continuation_mail = without_continuation_mail.try(:dup)
|
|
|
|
return procedure if procedure.save
|
|
end
|
|
|
|
def publish!(path)
|
|
self.update_attributes!({ published: true, archived: false, published_at: Time.now })
|
|
ProcedurePath.create!(path: path, procedure: self, administrateur: self.administrateur)
|
|
end
|
|
|
|
def archive
|
|
self.update_attributes!(archived: true, archived_at: Time.now)
|
|
end
|
|
|
|
def total_dossier
|
|
self.dossiers.state_not_brouillon.size
|
|
end
|
|
|
|
def generate_export
|
|
exportable_dossiers = dossiers.downloadable
|
|
|
|
headers = exportable_dossiers.any? ? exportable_dossiers.first.export_headers : []
|
|
data = exportable_dossiers.any? ? exportable_dossiers.map { |d| d.full_data_strings_array } : [[]]
|
|
|
|
{
|
|
headers: headers,
|
|
data: data
|
|
}
|
|
end
|
|
|
|
def procedure_overview(start_date)
|
|
ProcedureOverview.new(self, start_date)
|
|
end
|
|
|
|
def initiated_mail_template
|
|
initiated_mail || Mails::InitiatedMail.default
|
|
end
|
|
|
|
def received_mail_template
|
|
received_mail || Mails::ReceivedMail.default
|
|
end
|
|
|
|
def closed_mail_template
|
|
closed_mail || Mails::ClosedMail.default
|
|
end
|
|
|
|
def refused_mail_template
|
|
refused_mail || Mails::RefusedMail.default
|
|
end
|
|
|
|
def without_continuation_mail_template
|
|
without_continuation_mail || Mails::WithoutContinuationMail.default
|
|
end
|
|
end
|