User can save a draft dossier who does not see by the accompagnateur
This commit is contained in:
parent
d78b64982b
commit
71de64e3ec
9 changed files with 80 additions and 15 deletions
|
@ -25,6 +25,9 @@ class Users::DescriptionController < UsersController
|
|||
@procedure = @dossier.procedure
|
||||
@champs = @dossier.ordered_champs
|
||||
|
||||
mandatory = true
|
||||
mandatory = !(params[:submit].keys.first == 'brouillon') unless params[:submit].nil?
|
||||
|
||||
unless @dossier.update_attributes(create_params)
|
||||
@dossier = @dossier.decorate
|
||||
|
||||
|
@ -43,10 +46,10 @@ class Users::DescriptionController < UsersController
|
|||
end
|
||||
|
||||
unless params[:champs].nil?
|
||||
champs_service_errors = ChampsService.save_formulaire @dossier.champs, params
|
||||
champs_service_errors = ChampsService.save_formulaire @dossier.champs, params, mandatory
|
||||
|
||||
unless champs_service_errors.empty?
|
||||
flash.now.alert = (champs_service_errors.inject('') {|acc, error| acc+= error[:message]+'<br>' }).html_safe
|
||||
flash.now.alert = (champs_service_errors.inject('') { |acc, error| acc+= error[:message]+'<br>' }).html_safe
|
||||
return render 'show'
|
||||
end
|
||||
end
|
||||
|
@ -56,12 +59,18 @@ class Users::DescriptionController < UsersController
|
|||
return render 'show'
|
||||
end
|
||||
|
||||
if @dossier.draft?
|
||||
@dossier.initiated!
|
||||
end
|
||||
|
||||
flash.notice = 'Félicitation, votre demande a bien été enregistrée.'
|
||||
redirect_to url_for(controller: :recapitulatif, action: :show, dossier_id: @dossier.id)
|
||||
if mandatory
|
||||
if @dossier.draft?
|
||||
@dossier.initiated!
|
||||
end
|
||||
|
||||
flash.notice = 'Félicitation, votre demande a bien été enregistrée.'
|
||||
redirect_to url_for(controller: :recapitulatif, action: :show, dossier_id: @dossier.id)
|
||||
else
|
||||
flash.notice = 'Votre brouillon a bien été sauvegardé.'
|
||||
redirect_to url_for(controller: :dossiers, action: :index, liste: :brouillon)
|
||||
end
|
||||
end
|
||||
|
||||
def pieces_justificatives
|
||||
|
@ -92,4 +101,5 @@ class Users::DescriptionController < UsersController
|
|||
def create_params
|
||||
params.permit()
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -35,6 +35,10 @@ class DossiersListFacades
|
|||
@list_table_columns ||= @current_devise_profil.preference_list_dossiers.where(procedure: @procedure).order(:id)
|
||||
end
|
||||
|
||||
def brouillon_class
|
||||
(@liste == 'brouillon' ? 'active' : '')
|
||||
end
|
||||
|
||||
def nouveaux_class
|
||||
(@liste == 'nouveaux' ? 'active' : '')
|
||||
end
|
||||
|
@ -75,6 +79,10 @@ class DossiersListFacades
|
|||
(@liste == 'invite' ? 'active' : '')
|
||||
end
|
||||
|
||||
def brouillon_total
|
||||
service.brouillon.count
|
||||
end
|
||||
|
||||
def nouveaux_total
|
||||
service.nouveaux.count
|
||||
end
|
||||
|
@ -117,6 +125,10 @@ class DossiersListFacades
|
|||
service.invite.count
|
||||
end
|
||||
|
||||
def brouillon_url
|
||||
base_url 'brouillon'
|
||||
end
|
||||
|
||||
def nouveaux_url
|
||||
base_url 'nouveaux'
|
||||
end
|
||||
|
|
|
@ -43,6 +43,7 @@ class Dossier < ActiveRecord::Base
|
|||
|
||||
validates :user, presence: true
|
||||
|
||||
BROUILLON = %w(draft)
|
||||
NOUVEAUX = %w(initiated)
|
||||
WAITING_FOR_GESTIONNAIRE = %w(updated)
|
||||
WAITING_FOR_USER = %w(replied validated)
|
||||
|
@ -164,6 +165,10 @@ class Dossier < ActiveRecord::Base
|
|||
state
|
||||
end
|
||||
|
||||
def brouillon?
|
||||
BROUILLON.include?(state)
|
||||
end
|
||||
|
||||
def nouveaux?
|
||||
NOUVEAUX.include?(state)
|
||||
end
|
||||
|
@ -200,6 +205,10 @@ class Dossier < ActiveRecord::Base
|
|||
TERMINE.include?(state)
|
||||
end
|
||||
|
||||
def self.brouillon order = 'ASC'
|
||||
where(state: BROUILLON, archived: false).order("updated_at #{order}")
|
||||
end
|
||||
|
||||
def self.nouveaux order = 'ASC'
|
||||
where(state: NOUVEAUX, archived: false).order("updated_at #{order}")
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
class ChampsService
|
||||
def self.save_formulaire champs, params
|
||||
def self.save_formulaire champs, params, check_mandatory=true
|
||||
errors = Array.new
|
||||
|
||||
champs.each do |champ|
|
||||
|
@ -13,8 +13,10 @@ class ChampsService
|
|||
params[:time_minute]["'#{champ.id}'"]
|
||||
end
|
||||
|
||||
if champ.mandatory? && (champ.value.nil? || champ.value.blank?)
|
||||
errors.push({message: "Le champ #{champ.libelle} doit être rempli."})
|
||||
if check_mandatory
|
||||
if champ.mandatory? && (champ.value.nil? || champ.value.blank?)
|
||||
errors.push({message: "Le champ #{champ.libelle} doit être rempli."})
|
||||
end
|
||||
end
|
||||
|
||||
champ.save
|
||||
|
|
|
@ -5,7 +5,8 @@ class DossiersListUserService
|
|||
end
|
||||
|
||||
def dossiers_to_display
|
||||
{'nouveaux' => nouveaux,
|
||||
{'brouillon' => brouillon,
|
||||
'nouveaux' => nouveaux,
|
||||
'a_traiter' => waiting_for_user,
|
||||
'en_attente' => waiting_for_gestionnaire,
|
||||
'valides' => valides,
|
||||
|
@ -14,6 +15,10 @@ class DossiersListUserService
|
|||
'invite' => invite}[@liste]
|
||||
end
|
||||
|
||||
def brouillon
|
||||
@brouillon ||= @current_devise_profil.dossiers.brouillon
|
||||
end
|
||||
|
||||
def nouveaux
|
||||
@nouveaux ||= @current_devise_profil.dossiers.nouveaux
|
||||
end
|
||||
|
|
|
@ -56,7 +56,8 @@
|
|||
-if !@dossier.draft?
|
||||
=render partial: '/layouts/modifications_terminees'
|
||||
-else
|
||||
= submit_tag 'Soumettre mon dossier', id: 'suivant', class: %w(btn btn btn-success), style: 'float:right', data: { disable_with: 'Soumettre votre dossier', submit: true}
|
||||
= submit_tag 'Soumettre mon dossier', id: 'suivant', name: 'submit[nouveaux]', class: %w(btn btn btn-success), style: 'float:right', data: { disable_with: 'Soumettre votre dossier', submit: true}
|
||||
= submit_tag 'Enregistrer un brouillon', id: 'brouillon', name: 'submit[brouillon]', class: %w(btn btn-xs btn-default), style: 'float:right; margin-right: 10px; margin-top: 6px', data: {disable_with: 'Enregistrer un brouillon', submit: true}
|
||||
|
||||
%br
|
||||
%br
|
|
@ -16,7 +16,10 @@
|
|||
= dossier.id
|
||||
%td
|
||||
= link_to(dossier.procedure.libelle, users_dossiers_invite_path(id: invite.id)) unless invite.nil?
|
||||
= link_to(dossier.procedure.libelle, users_dossier_recapitulatif_path(dossier)) if invite.nil?
|
||||
- if invite.nil?
|
||||
= link_to(dossier.procedure.libelle, users_dossier_recapitulatif_path(dossier)) unless dossier.brouillon?
|
||||
= link_to(dossier.procedure.libelle, users_dossier_description_path(dossier)) if dossier.brouillon?
|
||||
|
||||
|
||||
%td{id: "dossier_#{dossier.id}_state"}= dossier.display_state
|
||||
%td= dossier.last_update
|
||||
|
|
|
@ -3,6 +3,13 @@
|
|||
%br
|
||||
#onglets
|
||||
%ul.nav.nav-tabs
|
||||
%li{ class: @dossiers_list_facade.brouillon_class }
|
||||
%a{:href => "#{url_for users_dossiers_path(liste: 'brouillon')}", 'data-toggle' => :tooltip, title: 'Les dossiers jamais proposés à la relecture.'}
|
||||
%h5.text-default
|
||||
= "Brouillons"
|
||||
.badge.progress-bar-default
|
||||
= @dossiers_list_facade.brouillon_total
|
||||
|
||||
%li{ class: @dossiers_list_facade.nouveaux_class }
|
||||
%a{:href => "#{url_for users_dossiers_path(liste: 'nouveaux')}", 'data-toggle' => :tooltip, title: 'Les nouveaux dossiers qui n\'ont pas encore été vus par votre accompagnateur.'}
|
||||
%h5.text-info
|
||||
|
|
|
@ -43,9 +43,13 @@ shared_examples 'description_controller_spec' do
|
|||
|
||||
context 'Tous les attributs sont bons' do
|
||||
describe 'Premier enregistrement des données' do
|
||||
let(:submit) { {nouveaux: 'nouveaux'} }
|
||||
|
||||
subject { post :create, dossier_id: dossier_id, submit: submit }
|
||||
|
||||
before do
|
||||
dossier.draft!
|
||||
post :create, dossier_id: dossier_id
|
||||
subject
|
||||
dossier.reload
|
||||
end
|
||||
|
||||
|
@ -56,6 +60,18 @@ shared_examples 'description_controller_spec' do
|
|||
it 'etat du dossier est soumis' do
|
||||
expect(dossier.state).to eq('initiated')
|
||||
end
|
||||
|
||||
context 'when user whould like save just a draft' do
|
||||
let(:submit) { {brouillon: 'brouillon'} }
|
||||
|
||||
it "redirection vers la page recapitulative" do
|
||||
expect(response).to redirect_to("/users/dossiers?liste=brouillon")
|
||||
end
|
||||
|
||||
it 'etat du dossier est soumis' do
|
||||
expect(dossier.state).to eq('draft')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'En train de manipuler un dossier non brouillon' do
|
||||
|
|
Loading…
Reference in a new issue