Merge pull request #1043 from sgmap/fix_363_delete_dossier_next_step

Fix 363 delete dossier next step
This commit is contained in:
LeSim 2017-12-15 15:51:04 +01:00 committed by GitHub
commit 18eef80e31
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 22 additions and 266 deletions

View file

@ -115,20 +115,25 @@ class Backoffice::DossiersController < Backoffice::DossiersListController
case params[:process_action] case params[:process_action]
when "refuse" when "refuse"
next_step = "refuse" dossier.refuse!
notice = "Dossier considéré comme refusé." notice = "Dossier considéré comme refusé."
template = dossier.procedure.refused_mail_template template = dossier.procedure.refused_mail_template
when "without_continuation" when "without_continuation"
next_step = "without_continuation" dossier.sans_suite!
notice = "Dossier considéré comme sans suite." notice = "Dossier considéré comme sans suite."
template = dossier.procedure.without_continuation_mail_template template = dossier.procedure.without_continuation_mail_template
when "close" when "close"
next_step = "close" dossier.attestation = dossier.build_attestation
dossier.accepte!
notice = "Dossier traité avec succès." notice = "Dossier traité avec succès."
template = dossier.procedure.closed_mail_template template = dossier.procedure.closed_mail_template
end end
dossier.next_step! 'gestionnaire', next_step, motivation if motivation
dossier.motivation = motivation
end
dossier.save
# needed to force Carrierwave to provide dossier.attestation.pdf.read # needed to force Carrierwave to provide dossier.attestation.pdf.read
# when the Feature.remote_storage is true, otherwise pdf.read is a closed stream. # when the Feature.remote_storage is true, otherwise pdf.read is a closed stream.

View file

@ -19,11 +19,9 @@ class CommentairesController < ApplicationController
if is_gestionnaire? if is_gestionnaire?
@commentaire.email = current_gestionnaire.email @commentaire.email = current_gestionnaire.email
@commentaire.dossier = current_gestionnaire.dossiers.find_by(id: dossier_id) || current_gestionnaire.avis.find_by!(dossier_id: dossier_id).dossier @commentaire.dossier = current_gestionnaire.dossiers.find_by(id: dossier_id) || current_gestionnaire.avis.find_by!(dossier_id: dossier_id).dossier
@commentaire.dossier.next_step! 'gestionnaire', 'comment'
else else
@commentaire.email = current_user.email @commentaire.email = current_user.email
@commentaire.dossier = current_user.dossiers.find_by(id: dossier_id) || current_user.invites.find_by!(dossier_id: dossier_id).dossier @commentaire.dossier = current_user.dossiers.find_by(id: dossier_id) || current_user.invites.find_by!(dossier_id: dossier_id).dossier
@commentaire.dossier.next_step! 'user', 'comment' if current_user.email == @commentaire.dossier.user.email
end end
@commentaire.file = params["file"] @commentaire.file = params["file"]

View file

@ -37,7 +37,6 @@ module NewGestionnaire
def follow def follow
current_gestionnaire.follow(dossier) current_gestionnaire.follow(dossier)
dossier.next_step!('gestionnaire', 'follow')
flash.notice = 'Dossier suivi' flash.notice = 'Dossier suivi'
redirect_back(fallback_location: procedures_url) redirect_back(fallback_location: procedures_url)
end end
@ -82,20 +81,25 @@ module NewGestionnaire
case params[:process_action] case params[:process_action]
when "refuser" when "refuser"
next_step = "refuse" dossier.refuse!
notice = "Dossier considéré comme refusé." notice = "Dossier considéré comme refusé."
template = procedure.refused_mail_template template = procedure.refused_mail_template
when "classer_sans_suite" when "classer_sans_suite"
next_step = "without_continuation" dossier.sans_suite!
notice = "Dossier considéré comme sans suite." notice = "Dossier considéré comme sans suite."
template = procedure.without_continuation_mail_template template = procedure.without_continuation_mail_template
when "accepter" when "accepter"
next_step = "close" dossier.attestation = dossier.build_attestation
dossier.accepte!
notice = "Dossier traité avec succès." notice = "Dossier traité avec succès."
template = procedure.closed_mail_template template = procedure.closed_mail_template
end end
dossier.next_step!('gestionnaire', next_step, motivation) if motivation
dossier.motivation = motivation
end
dossier.save
# needed to force Carrierwave to provide dossier.attestation.pdf.read # needed to force Carrierwave to provide dossier.attestation.pdf.read
# when the Feature.remote_storage is true, otherwise pdf.read is a closed stream. # when the Feature.remote_storage is true, otherwise pdf.read is a closed stream.

View file

@ -83,7 +83,6 @@ class Users::DescriptionController < UsersController
else else
flash.notice = 'Nouveaux fichiers envoyés' if flash.alert.nil? flash.notice = 'Nouveaux fichiers envoyés' if flash.alert.nil?
@dossier.next_step! 'user', 'update'
end end
return redirect_to users_dossiers_invite_path(id: current_user.invites.find_by_dossier_id(@dossier.id).id) if invite return redirect_to users_dossiers_invite_path(id: current_user.invites.find_by_dossier_id(@dossier.id).id) if invite

View file

@ -10,7 +10,7 @@ class Users::RecapitulatifController < UsersController
def initiate def initiate
create_dossier_facade create_dossier_facade
@facade.dossier.next_step! 'user', 'initiate' @facade.dossier.en_construction!
flash.notice = 'Dossier soumis avec succès.' flash.notice = 'Dossier soumis avec succès.'
redirect_to users_dossier_recapitulatif_path redirect_to users_dossier_recapitulatif_path

View file

@ -144,61 +144,6 @@ class Dossier < ActiveRecord::Base
champs.joins(', types_de_piece_justificative').where("pieces_justificatives.type_de_piece_justificative_id = types_de_piece_justificative.id AND types_de_piece_justificative.procedure_id = #{procedure.id}").order('order_place ASC') champs.joins(', types_de_piece_justificative').where("pieces_justificatives.type_de_piece_justificative_id = types_de_piece_justificative.id AND types_de_piece_justificative.procedure_id = #{procedure.id}").order('order_place ASC')
end end
def next_step! role, action, motivation = nil
unless %w(initiate follow update comment receive refuse without_continuation close).include?(action)
fail 'action is not valid'
end
unless %w(user gestionnaire).include?(role)
fail 'role is not valid'
end
case role
when 'user'
case action
when 'initiate'
if brouillon?
en_construction!
end
end
when 'gestionnaire'
case action
when 'close'
if en_instruction?
self.attestation = build_attestation
save
accepte!
if motivation
self.motivation = motivation
save
end
end
when 'refuse'
if en_instruction?
refuse!
if motivation
self.motivation = motivation
save
end
end
when 'without_continuation'
if en_instruction?
sans_suite!
if motivation
self.motivation = motivation
save
end
end
end
end
state
end
def brouillon? def brouillon?
BROUILLON.include?(state) BROUILLON.include?(state)
end end
@ -379,14 +324,14 @@ class Dossier < ActiveRecord::Base
end end
end end
private
def build_attestation def build_attestation
if procedure.attestation_template.present? && procedure.attestation_template.activated? if procedure.attestation_template.present? && procedure.attestation_template.activated?
procedure.attestation_template.attestation_for(self) procedure.attestation_template.attestation_for(self)
end end
end end
private
def update_state_dates def update_state_dates
if en_construction? && !self.en_construction_at if en_construction? && !self.en_construction_at
self.en_construction_at = DateTime.now self.en_construction_at = DateTime.now

View file

@ -32,7 +32,6 @@ describe NewGestionnaire::DossiersController, type: :controller do
describe '#follow' do describe '#follow' do
before do before do
expect_any_instance_of(Dossier).to receive(:next_step!).with('gestionnaire', 'follow')
patch :follow, params: { procedure_id: procedure.id, dossier_id: dossier.id } patch :follow, params: { procedure_id: procedure.id, dossier_id: dossier.id }
end end

View file

@ -116,200 +116,6 @@ describe Dossier do
end end
end end
end end
describe '#next_step' do
let(:dossier) { create(:dossier) }
let(:role) { 'user' }
let(:action) { 'initiate' }
subject { dossier.next_step! role, action }
context 'when action is not valid' do
let(:action) { 'test' }
it { expect { subject }.to raise_error('action is not valid') }
end
context 'when role is not valid' do
let(:role) { 'test' }
it { expect { subject }.to raise_error('role is not valid') }
end
context 'when dossier is at state brouillon' do
before do
dossier.brouillon!
end
context 'when user is connected' do
let(:role) { 'user' }
context 'when he updates dossier informations' do
let(:action) { 'update' }
it { is_expected.to eq('brouillon') }
end
context 'when he posts a comment' do
let(:action) { 'comment' }
it { is_expected.to eq('brouillon') }
end
context 'when he initiate a dossier' do
let(:action) { 'initiate' }
it { is_expected.to eq('en_construction') }
end
end
end
context 'when dossier is at state en_construction' do
before do
dossier.en_construction!
end
context 'when user is connect' do
let(:role) { 'user' }
context 'when is update dossier informations' do
let(:action) { 'update' }
it { is_expected.to eq('en_construction') }
end
context 'when is post a comment' do
let(:action) { 'comment' }
it { is_expected.to eq('en_construction') }
end
end
context 'when gestionnaire is connect' do
let(:role) { 'gestionnaire' }
context 'when is post a comment' do
let(:action) { 'comment' }
it { is_expected.to eq('en_construction') }
end
context 'when is follow' do
let(:action) { 'follow' }
it { is_expected.to eq 'en_construction' }
end
end
end
context 'when dossier is at state en_instruction' do
before do
dossier.en_instruction!
end
context 'when user is connected' do
let(:role) { 'user' }
context 'when he posts a comment' do
let(:action) { 'comment' }
it { is_expected.to eq('en_instruction') }
end
end
context 'when gestionnaire is connect' do
let(:role) { 'gestionnaire' }
context 'when he posts a comment' do
let(:action) { 'comment' }
it { is_expected.to eq('en_instruction') }
end
context 'when he closes the dossier' do
let(:action) { 'close' }
it { is_expected.to eq('accepte') }
end
end
end
context 'when dossier is at state refuse' do
before do
dossier.refuse!
end
context 'when user is connected' do
let(:role) { 'user' }
context 'when he posts a comment' do
let(:action) { 'comment' }
it { is_expected.to eq('refuse') }
end
end
context 'when gestionnaire is connect' do
let(:role) { 'gestionnaire' }
context 'when he posts a comment' do
let(:action) { 'comment' }
it { is_expected.to eq('refuse') }
end
end
end
context 'when dossier is at state sans_suite' do
before do
dossier.sans_suite!
end
context 'when user is connected' do
let(:role) { 'user' }
context 'when he posts a comment' do
let(:action) { 'comment' }
it { is_expected.to eq('sans_suite') }
end
end
context 'when gestionnaire is connect' do
let(:role) { 'gestionnaire' }
context 'when he posts a comment' do
let(:action) { 'comment' }
it { is_expected.to eq('sans_suite') }
end
end
end
context 'when dossier is at state accepte' do
before do
dossier.accepte!
end
context 'when user is connect' do
let(:role) { 'user' }
context 'when is post a comment' do
let(:action) { 'comment' }
it { is_expected.to eq('accepte') }
end
end
context 'when gestionnaire is connect' do
let(:role) { 'gestionnaire' }
context 'when is post a comment' do
let(:action) { 'comment' }
it { is_expected.to eq('accepte') }
end
end
end
end
end end
describe '#cerfa_available?' do describe '#cerfa_available?' do
@ -818,7 +624,7 @@ describe Dossier do
let(:procedure) { create(:procedure, attestation_template: attestation_template) } let(:procedure) { create(:procedure, attestation_template: attestation_template) }
before :each do before :each do
dossier.next_step!('gestionnaire', 'close') dossier.attestation = dossier.build_attestation
dossier.reload dossier.reload
end end