2015-08-10 11:05:06 +02:00
|
|
|
class Dossier < ActiveRecord::Base
|
2015-11-02 11:23:55 +01:00
|
|
|
enum state: {draft: 'draft',
|
2015-11-02 11:33:00 +01:00
|
|
|
submitted: 'submitted',
|
2015-11-02 11:45:52 +01:00
|
|
|
replied: 'replied',
|
2015-11-02 11:23:55 +01:00
|
|
|
updated: 'updated',
|
2015-11-02 11:52:39 +01:00
|
|
|
validated: 'validated',
|
2015-11-02 15:00:28 +01:00
|
|
|
submit_validated: 'submit_validated',
|
|
|
|
closed: 'closed'} #-processed
|
2015-09-22 18:30:20 +02:00
|
|
|
|
2015-09-24 11:45:00 +02:00
|
|
|
has_one :etablissement, dependent: :destroy
|
|
|
|
has_one :entreprise, dependent: :destroy
|
|
|
|
has_one :cerfa, dependent: :destroy
|
|
|
|
has_many :pieces_justificatives, dependent: :destroy
|
2015-09-21 17:59:03 +02:00
|
|
|
belongs_to :procedure
|
2015-09-23 12:16:21 +02:00
|
|
|
belongs_to :user
|
2015-09-24 11:45:00 +02:00
|
|
|
has_many :commentaires, dependent: :destroy
|
2015-08-12 10:09:52 +02:00
|
|
|
|
2015-08-13 15:55:19 +02:00
|
|
|
delegate :siren, to: :entreprise
|
|
|
|
delegate :siret, to: :etablissement
|
2015-09-21 17:59:03 +02:00
|
|
|
delegate :types_de_piece_justificative, to: :procedure
|
2015-08-13 15:55:19 +02:00
|
|
|
|
2015-08-18 14:22:16 +02:00
|
|
|
before_create :build_default_cerfa
|
|
|
|
|
2015-09-21 17:59:03 +02:00
|
|
|
after_save :build_default_pieces_justificatives, if: Proc.new { procedure_id_changed? }
|
2015-08-24 15:23:07 +02:00
|
|
|
|
2015-08-25 10:19:39 +02:00
|
|
|
validates :nom_projet, presence: true, allow_blank: false, allow_nil: true
|
|
|
|
validates :description, presence: true, allow_blank: false, allow_nil: true
|
|
|
|
validates :montant_projet, presence: true, allow_blank: false, allow_nil: true
|
|
|
|
validates :montant_aide_demande, presence: true, allow_blank: false, allow_nil: true
|
|
|
|
validates :date_previsionnelle, presence: true, allow_blank: false, unless: Proc.new { description.nil? }
|
2015-09-24 11:17:17 +02:00
|
|
|
validates :user, presence: true
|
2015-08-21 11:37:13 +02:00
|
|
|
|
2015-09-24 18:12:08 +02:00
|
|
|
def retrieve_piece_justificative_by_type(type)
|
|
|
|
pieces_justificatives.where(type_de_piece_justificative_id: type).last
|
|
|
|
end
|
|
|
|
|
|
|
|
def build_default_pieces_justificatives
|
|
|
|
procedure.types_de_piece_justificative.each do |type_de_piece_justificative|
|
|
|
|
PieceJustificative.create(type_de_piece_justificative_id: type_de_piece_justificative.id, dossier_id: id)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def sous_domaine
|
|
|
|
if Rails.env.production?
|
|
|
|
'tps'
|
|
|
|
else
|
|
|
|
'tps-dev'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def next_step! role, action
|
2015-11-02 15:00:28 +01:00
|
|
|
unless %w(submit replied update comment valid submit_validate close).include?(action)
|
2015-09-24 18:12:08 +02:00
|
|
|
fail 'action is not valid'
|
|
|
|
end
|
|
|
|
|
2015-10-05 16:42:29 +02:00
|
|
|
unless %w(user gestionnaire).include?(role)
|
2015-09-24 18:12:08 +02:00
|
|
|
fail 'role is not valid'
|
|
|
|
end
|
|
|
|
|
|
|
|
if role == 'user'
|
|
|
|
case action
|
2015-11-02 11:23:55 +01:00
|
|
|
when 'submit'
|
2015-09-24 18:12:08 +02:00
|
|
|
if draft?
|
2015-11-02 11:23:55 +01:00
|
|
|
submitted!
|
2015-09-24 18:12:08 +02:00
|
|
|
end
|
2015-11-02 11:52:39 +01:00
|
|
|
when 'submit_validate'
|
2015-11-02 11:45:52 +01:00
|
|
|
if validated?
|
2015-11-02 11:52:39 +01:00
|
|
|
submit_validated!
|
2015-09-24 18:12:08 +02:00
|
|
|
end
|
|
|
|
when 'update'
|
2015-11-02 11:33:00 +01:00
|
|
|
if replied?
|
2015-09-24 18:12:08 +02:00
|
|
|
updated!
|
|
|
|
end
|
|
|
|
when 'comment'
|
2015-11-02 11:33:00 +01:00
|
|
|
if replied?
|
2015-09-24 18:12:08 +02:00
|
|
|
updated!
|
|
|
|
end
|
|
|
|
end
|
|
|
|
elsif role == 'gestionnaire'
|
|
|
|
case action
|
|
|
|
when 'comment'
|
|
|
|
if updated?
|
2015-11-02 11:33:00 +01:00
|
|
|
replied!
|
2015-11-02 11:23:55 +01:00
|
|
|
elsif submitted?
|
2015-11-02 11:33:00 +01:00
|
|
|
replied!
|
2015-09-24 18:12:08 +02:00
|
|
|
end
|
2015-11-02 11:45:52 +01:00
|
|
|
when 'valid'
|
2015-09-24 18:12:08 +02:00
|
|
|
if updated?
|
2015-11-02 11:45:52 +01:00
|
|
|
validated!
|
2015-11-02 11:33:00 +01:00
|
|
|
elsif replied?
|
2015-11-02 11:45:52 +01:00
|
|
|
validated!
|
2015-11-02 11:23:55 +01:00
|
|
|
elsif submitted?
|
2015-11-02 11:45:52 +01:00
|
|
|
validated!
|
2015-09-24 18:12:08 +02:00
|
|
|
end
|
2015-11-02 15:00:28 +01:00
|
|
|
when 'close'
|
2015-11-02 11:52:39 +01:00
|
|
|
if submit_validated?
|
2015-11-02 15:00:28 +01:00
|
|
|
closed!
|
2015-09-24 18:12:08 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
state
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.a_traiter
|
2015-11-02 11:52:39 +01:00
|
|
|
Dossier.where("state='submitted' OR state='updated' OR state='submit_validated'").order('updated_at ASC')
|
2015-09-24 18:12:08 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
def self.en_attente
|
2015-11-02 11:45:52 +01:00
|
|
|
Dossier.where("state='replied' OR state='validated'").order('updated_at ASC')
|
2015-09-24 18:12:08 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
def self.termine
|
2015-11-02 15:00:28 +01:00
|
|
|
Dossier.where("state='closed'").order('updated_at ASC')
|
2015-09-24 18:12:08 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def build_default_cerfa
|
|
|
|
build_cerfa
|
|
|
|
true
|
|
|
|
end
|
2015-08-10 11:05:06 +02:00
|
|
|
end
|