2015-09-21 17:59:03 +02:00
|
|
|
class Procedure < ActiveRecord::Base
|
2017-04-13 14:48:18 +02:00
|
|
|
has_many :types_de_piece_justificative, -> { order "order_place ASC" }, dependent: :destroy
|
2016-08-03 18:19:56 +02:00
|
|
|
has_many :types_de_champ, class_name: 'TypeDeChampPublic', dependent: :destroy
|
|
|
|
has_many :types_de_champ_private, dependent: :destroy
|
2016-06-20 17:37:04 +02:00
|
|
|
has_many :dossiers
|
2017-03-07 10:25:28 +01:00
|
|
|
|
2016-06-24 16:41:44 +02:00
|
|
|
has_one :procedure_path, dependent: :destroy
|
|
|
|
|
2016-01-18 16:20:51 +01:00
|
|
|
has_one :module_api_carto, dependent: :destroy
|
|
|
|
|
|
|
|
belongs_to :administrateur
|
|
|
|
|
2016-06-20 17:37:04 +02:00
|
|
|
has_many :assign_to, dependent: :destroy
|
2016-05-20 15:39:17 +02:00
|
|
|
has_many :gestionnaires, through: :assign_to
|
|
|
|
|
2016-09-08 16:21:54 +02:00
|
|
|
has_many :preference_list_dossiers
|
|
|
|
|
2016-01-25 15:54:21 +01:00
|
|
|
delegate :use_api_carto, to: :module_api_carto
|
|
|
|
|
2016-08-31 16:07:11 +02:00
|
|
|
accepts_nested_attributes_for :types_de_champ, :reject_if => proc { |attributes| attributes['libelle'].blank? }, :allow_destroy => true
|
2015-11-20 13:54:08 +01:00
|
|
|
accepts_nested_attributes_for :types_de_piece_justificative, :reject_if => proc { |attributes| attributes['libelle'].blank? }, :allow_destroy => true
|
2015-12-08 10:11:58 +01:00
|
|
|
accepts_nested_attributes_for :module_api_carto
|
2016-08-03 18:19:56 +02:00
|
|
|
accepts_nested_attributes_for :types_de_champ_private
|
2015-11-10 10:23:15 +01:00
|
|
|
|
2015-12-10 17:13:39 +01:00
|
|
|
mount_uploader :logo, ProcedureLogoUploader
|
|
|
|
|
2017-05-26 21:30:11 +02:00
|
|
|
scope :not_archived, -> { where(archived: false) }
|
|
|
|
scope :by_libelle, -> { order(libelle: :asc) }
|
|
|
|
|
2015-09-22 11:21:52 +02:00
|
|
|
validates :libelle, presence: true, allow_blank: false, allow_nil: false
|
|
|
|
validates :description, presence: true, allow_blank: false, allow_nil: false
|
2015-11-17 15:30:03 +01:00
|
|
|
|
2017-03-06 15:19:34 +01:00
|
|
|
# for all those mails do
|
2017-03-06 22:37:37 +01:00
|
|
|
# has_one :initiated_mail, class_name: 'Mails::InitiatedMail'
|
2017-03-06 15:19:34 +01:00
|
|
|
#
|
|
|
|
# add a method to return default mail if none is saved
|
2017-03-06 22:37:37 +01:00
|
|
|
# def initiated_mail_with_override
|
|
|
|
# self.initiated_mail_without_override || InitiatedMail.default
|
2017-03-06 15:19:34 +01:00
|
|
|
# end
|
|
|
|
# alias_method_chain :initiated_mail, :override
|
|
|
|
|
2017-03-07 18:19:48 +01:00
|
|
|
MAIL_TEMPLATE_TYPES = %w(InitiatedMail ReceivedMail ClosedMail RefusedMail WithoutContinuationMail)
|
|
|
|
|
|
|
|
MAIL_TEMPLATE_TYPES.each do |name|
|
2017-03-13 10:27:19 +01:00
|
|
|
has_one "#{name.underscore}".to_sym, class_name: "Mails::#{name}", dependent: :destroy
|
2017-03-06 15:00:05 +01:00
|
|
|
define_method("#{name.underscore}_with_override") do
|
2017-03-06 22:37:37 +01:00
|
|
|
self.send("#{name.underscore}_without_override") || Object.const_get("Mails::#{name}").default
|
2017-03-06 15:00:05 +01:00
|
|
|
end
|
|
|
|
alias_method_chain "#{name.underscore.to_sym}".to_s, :override
|
2017-03-04 09:56:09 +01:00
|
|
|
end
|
|
|
|
|
2016-06-24 16:41:44 +02:00
|
|
|
def path
|
|
|
|
procedure_path.path unless procedure_path.nil?
|
|
|
|
end
|
|
|
|
|
2016-06-30 10:24:01 +02:00
|
|
|
def default_path
|
2017-04-14 11:34:53 +02:00
|
|
|
libelle.parameterize.first(50)
|
2016-06-30 10:24:01 +02:00
|
|
|
end
|
|
|
|
|
2015-11-17 15:30:03 +01:00
|
|
|
def types_de_champ_ordered
|
|
|
|
types_de_champ.order(:order_place)
|
|
|
|
end
|
2015-11-19 11:37:01 +01:00
|
|
|
|
2016-08-03 18:19:56 +02:00
|
|
|
def types_de_champ_private_ordered
|
|
|
|
types_de_champ_private.order(:order_place)
|
|
|
|
end
|
|
|
|
|
2016-06-09 17:49:38 +02:00
|
|
|
def self.active id
|
|
|
|
Procedure.where(archived: false, published: true).find(id)
|
|
|
|
end
|
|
|
|
|
2015-11-19 11:37:01 +01:00
|
|
|
def switch_types_de_champ index_of_first_element
|
2016-06-08 16:45:18 +02:00
|
|
|
switch_list_order(types_de_champ_ordered, index_of_first_element)
|
|
|
|
end
|
|
|
|
|
2016-08-03 18:19:56 +02:00
|
|
|
def switch_types_de_champ_private index_of_first_element
|
|
|
|
switch_list_order(types_de_champ_private_ordered, index_of_first_element)
|
|
|
|
end
|
|
|
|
|
2016-06-08 16:45:18 +02:00
|
|
|
def switch_types_de_piece_justificative index_of_first_element
|
2017-04-13 14:48:18 +02:00
|
|
|
switch_list_order(types_de_piece_justificative, index_of_first_element)
|
2016-06-08 16:45:18 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
def switch_list_order(list, index_of_first_element)
|
2015-11-19 11:37:01 +01:00
|
|
|
return false if index_of_first_element < 0
|
2016-06-08 16:45:18 +02:00
|
|
|
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)
|
2015-11-19 11:37:01 +01:00
|
|
|
true
|
|
|
|
end
|
2015-12-21 14:40:28 +01:00
|
|
|
|
|
|
|
def locked?
|
2016-06-09 17:49:38 +02:00
|
|
|
published?
|
2015-12-21 14:40:28 +01:00
|
|
|
end
|
2016-06-09 17:49:38 +02:00
|
|
|
|
2016-06-15 11:34:05 +02:00
|
|
|
def clone
|
2017-03-07 18:19:48 +01:00
|
|
|
procedure = self.deep_clone(include:
|
|
|
|
[:types_de_piece_justificative,
|
|
|
|
:types_de_champ,
|
|
|
|
:types_de_champ_private,
|
|
|
|
:module_api_carto,
|
|
|
|
types_de_champ: [:drop_down_list]
|
|
|
|
])
|
2016-06-15 11:34:05 +02:00
|
|
|
procedure.archived = false
|
|
|
|
procedure.published = false
|
2016-09-02 17:10:55 +02:00
|
|
|
procedure.logo_secure_token = nil
|
|
|
|
procedure.remote_logo_url = self.logo_url
|
2017-03-07 18:19:48 +01:00
|
|
|
|
|
|
|
MAIL_TEMPLATE_TYPES.each do |mtt|
|
|
|
|
procedure.send("#{mtt.underscore}=", self.send("#{mtt.underscore}_without_override").try(:dup))
|
|
|
|
end
|
|
|
|
|
2016-06-15 11:34:05 +02:00
|
|
|
return procedure if procedure.save
|
|
|
|
end
|
|
|
|
|
2016-07-12 15:20:10 +02:00
|
|
|
def publish!(path)
|
2016-08-31 16:07:11 +02:00
|
|
|
self.update_attributes!({published: true, archived: false})
|
2016-06-24 16:41:44 +02:00
|
|
|
ProcedurePath.create!(path: path, procedure: self, administrateur: self.administrateur)
|
|
|
|
end
|
|
|
|
|
|
|
|
def archive
|
2016-08-31 16:07:11 +02:00
|
|
|
self.update_attributes!({archived: true})
|
2016-06-24 16:41:44 +02:00
|
|
|
end
|
|
|
|
|
2016-07-22 15:06:30 +02:00
|
|
|
def total_dossier
|
|
|
|
self.dossiers.where.not(state: :draft).size
|
|
|
|
end
|
2017-01-26 12:12:52 +01:00
|
|
|
|
2017-04-05 11:34:16 +02:00
|
|
|
def generate_export
|
|
|
|
exportable_dossiers = dossiers.downloadable
|
|
|
|
|
|
|
|
headers = exportable_dossiers.any? ? exportable_dossiers.first.export_headers : []
|
2017-04-12 17:59:12 +02:00
|
|
|
data = exportable_dossiers.any? ? exportable_dossiers.map { |d| d.full_data_strings_array } : [[]]
|
2017-04-05 11:34:16 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
headers: headers,
|
|
|
|
data: data
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2017-05-12 15:47:05 +02:00
|
|
|
def procedure_overview(start_date, notifications_count)
|
|
|
|
ProcedureOverview.new(self, start_date, notifications_count)
|
|
|
|
end
|
2015-09-21 17:59:03 +02:00
|
|
|
end
|