demarches-normaliennes/app/models/dossier.rb

123 lines
3.3 KiB
Ruby
Raw Normal View History

2015-08-10 11:05:06 +02:00
class Dossier < ActiveRecord::Base
enum state: {draft: 'draft',
initiated: 'initiated', #-submitted
replied: 'replied',
updated: 'updated',
validated: 'validated',
submit_validated: 'submit_validated', #initiated
closed: 'closed'} #-processed
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
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
delegate :siren, to: :entreprise
delegate :siret, to: :etablissement
delegate :types_de_piece_justificative, to: :procedure
2015-08-18 14:22:16 +02:00
before_create :build_default_cerfa
after_save :build_default_pieces_justificatives, if: Proc.new { procedure_id_changed? }
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? }
validates :user, presence: true
2015-08-21 11:37:13 +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
unless %w(initiate replied update comment valid submit_validate close).include?(action)
fail 'action is not valid'
end
2015-10-05 16:42:29 +02:00
unless %w(user gestionnaire).include?(role)
fail 'role is not valid'
end
if role == 'user'
case action
when 'initiate'
if draft?
initiated!
end
when 'submit_validate'
if validated?
submit_validated!
end
when 'update'
if replied?
updated!
end
when 'comment'
if replied?
updated!
end
end
elsif role == 'gestionnaire'
case action
when 'comment'
if updated?
replied!
elsif initiated?
replied!
end
when 'valid'
if updated?
validated!
elsif replied?
validated!
elsif initiated?
validated!
end
when 'close'
if submit_validated?
closed!
end
end
end
state
end
def self.a_traiter
Dossier.where("state='initiated' OR state='updated' OR state='submit_validated'").order('updated_at ASC')
end
def self.en_attente
Dossier.where("state='replied' OR state='validated'").order('updated_at ASC')
end
def self.termine
Dossier.where("state='closed'").order('updated_at ASC')
end
private
def build_default_cerfa
build_cerfa
true
end
2015-08-10 11:05:06 +02:00
end