demarches-normaliennes/app/models/dossier.rb

111 lines
2.9 KiB
Ruby
Raw Normal View History

2015-08-10 11:05:06 +02:00
class Dossier < ActiveRecord::Base
enum state: { draft: 'draft',
2015-09-24 10:27:14 +02:00
proposed: 'proposed',
reply: 'reply',
updated: 'updated',
confirmed: 'confirmed',
deposited: 'deposited',
processed: '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
2015-09-24 10:27:14 +02:00
def retrieve_piece_justificative_by_type(type)
pieces_justificatives.where(type_de_piece_justificative_id: type).last
end
2015-08-18 14:22:16 +02:00
2015-09-24 10:27:14 +02:00
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
2015-09-24 10:27:14 +02:00
def sous_domaine
if Rails.env.production?
'tps'
else
'tps-dev'
end
end
2015-09-02 17:34:13 +02:00
2015-09-24 10:27:14 +02:00
def next_step! role, action
unless ['propose', 'reply', 'update', 'comment', 'confirme', 'depose', 'process'].include?(action)
fail 'action is not valid'
end
2015-08-18 14:22:16 +02:00
2015-09-24 10:27:14 +02:00
unless ['user', 'gestionnaire'].include?(role)
fail 'role is not valid'
end
if role == 'user'
case action
when 'propose'
if draft?
proposed!
end
when 'depose'
if confirmed?
deposited!
end
when 'update'
if reply?
updated!
end
when 'comment'
if reply?
updated!
end
end
elsif role == 'gestionnaire'
case action
when 'comment'
if updated?
reply!
elsif proposed?
reply!
end
when 'confirme'
if updated?
confirmed!
elsif reply?
confirmed!
elsif proposed?
confirmed!
end
when 'process'
if deposited?
processed!
end
end
end
state
end
private
def build_default_cerfa
build_cerfa
true
end
2015-08-10 11:05:06 +02:00
end