feat(sva): instructeur can flag a dossier as incomplete
This commit is contained in:
parent
1c977c72bf
commit
6ce8428ac6
12 changed files with 76 additions and 12 deletions
|
@ -21,4 +21,12 @@ class Instructeurs::EnConstructionMenuComponent < ApplicationComponent
|
|||
t(".revert_en_construction")
|
||||
end
|
||||
end
|
||||
|
||||
def sva?
|
||||
dossier.procedure.sva?
|
||||
end
|
||||
|
||||
def sva_resume_method
|
||||
dossier.procedure.sva_svr_configuration.resume
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,3 +2,4 @@
|
|||
en:
|
||||
revert_en_construction: Revert to in progress
|
||||
request_correction: Request a correction
|
||||
request_completion: Request to complete
|
||||
|
|
|
@ -2,3 +2,4 @@
|
|||
fr:
|
||||
revert_en_construction: Repasser en construction
|
||||
request_correction: Demander une correction
|
||||
request_completion: Demander à compléter
|
||||
|
|
|
@ -16,7 +16,13 @@
|
|||
|
||||
.dropdown-description
|
||||
%h4= t('.request_correction')
|
||||
L’usager sera informé que des modifications sont attendues
|
||||
L’usager sera informé que des modifications sont attendues.
|
||||
|
||||
- if sva?
|
||||
- if sva_resume_method == :reset
|
||||
Le délai du SVA sera réinitialisé lorqu’il déclarera avoir complété le dossier.
|
||||
- else
|
||||
Le délai du SVA reprendra lorsqu’il déclarera avoir corrigé le dossier.
|
||||
|
||||
- menu.with_item(class: "inactive form-inside fr-pt-1v") do
|
||||
= render partial: 'instructeurs/dossiers/instruction_button_motivation', locals: { dossier:,
|
||||
|
@ -29,3 +35,24 @@
|
|||
process_action: nil,
|
||||
title: 'Marquer en attente de corrections',
|
||||
confirm: 'Envoyer la demande de corrections ?'}
|
||||
|
||||
- if sva?
|
||||
- menu.with_item do
|
||||
= link_to('#', onclick: "DS.showMotivation(event, 'pending_completion');", role: 'menuitem') do
|
||||
%span.fr-icon.fr-icon-error-warning-line.fr-text-default--warning.fr-mt-1v{ "aria-hidden": "true" }
|
||||
|
||||
.dropdown-description
|
||||
%h4= t('.request_completion')
|
||||
L’usager sera informé que son dossier est incomplet. Le délai du SVA sera réinitialisé lorque il déclarera avoir complété le dossier.
|
||||
|
||||
- menu.with_item(class: "inactive form-inside fr-pt-1v") do
|
||||
= render partial: 'instructeurs/dossiers/instruction_button_motivation', locals: { dossier:,
|
||||
visible: false,
|
||||
form_path: pending_correction_instructeur_dossier_path(dossier.procedure, dossier, kind: :incomplete),
|
||||
placeholder: 'Expliquez au demandeur comment compléter son dossier',
|
||||
popup_class: 'pending_completion',
|
||||
button_justificatif_label: "Ajouter une pièce jointe (facultatif)",
|
||||
process_button: dossier.en_construction? ? 'Valider' : 'Valider et repasser en construction',
|
||||
process_action: nil,
|
||||
title: 'Marquer le dossier comme incomplet',
|
||||
confirm: 'Envoyer la demande de complétion ?'}
|
||||
|
|
|
@ -10,6 +10,7 @@ en:
|
|||
resume_intro: |
|
||||
When an instructor asks for a file to be corrected, the countdown of the delay is interrupted.
|
||||
The delay resumes when the applicant resubmits their file stating that they have made the requested corrections.
|
||||
If the file has been declared incomplete, the delay will be reset, regardless of the configuration below.
|
||||
submit: Apply SVA/SVR configuration
|
||||
cancel: Cancel
|
||||
decision_buttons:
|
||||
|
@ -20,8 +21,8 @@ en:
|
|||
svr_hint: "A file is automatically rejected if no instructor has pronounced before the allotted time"
|
||||
resume_buttons:
|
||||
continue_label: "Resume countdown from where it stopped"
|
||||
continue_hint: "Example: if the instructor asks for corrections while there are 10 days left before the automatic decision, and the file is resubmitted on April 15, it will be automatically accepted on April 25, unless the instructor pronounces in the meantime or asks for corrections again"
|
||||
continue_hint: "Example: if the instructor requests corrections to a complete file with 10 days to go before the automatic decision, and the file is resubmitted on April 15, it will be automatically accepted on April 25, unless the instructor makes a decision by then or requests corrections again. On the other hand, if the inspector asks for the file to be completed, the deadline will be reset."
|
||||
reset_label: "Reset the delay"
|
||||
reset_hint: "Example: if the file is resubmitted on April 15 and the delay is 2 months, the decision will be automatically made on June 15, unless the instructor pronounces in the meantime or asks for corrections again"
|
||||
reset_hint: "Example: if the file is resubmitted on April 15 and the delay is 2 months, the decision will be automatically made on June 15, unless the instructor pronounces in the meantime or asks for corrections again."
|
||||
notice_new_files_only: "Information: if you activate this rule, only the newly submitted files will be subject to it."
|
||||
notice_edit_denied: "Warning: SVA/SVR cannot be changed or disabled."
|
||||
|
|
|
@ -10,6 +10,7 @@ fr:
|
|||
resume_intro: |
|
||||
Lorsqu’un instructeur demande de corriger un dossier, le décompte du délai est interrompu.
|
||||
Le délai reprend lorsque le demandeur redépose son dossier en déclarant avoir effectué les corrections demandées.
|
||||
Si le dossier avait été déclaré incomplet, le délai sera réinitialisé, quelle que soit la configuration ci-dessous.
|
||||
submit: Appliquer la configuration SVA/SVR
|
||||
cancel: Annuler
|
||||
decision_buttons:
|
||||
|
@ -20,8 +21,8 @@ fr:
|
|||
svr_hint: "Un dossier est automatiquement refusé si aucun n’instructeur ne s’est prononcé avant le délai imparti"
|
||||
resume_buttons:
|
||||
continue_label: "Reprendre le décompte depuis le moment où il s’était arrêté"
|
||||
continue_hint: "Exemple: si l’instructeur demande des corrections alors qu’il reste 10 jours avant la décision automatique, et que le dossier est re-déposé le 15 avril, il sera automatiquement accepté le 25 avril, sauf à ce que l’instructeur se prononce d’ici là ou demande à nouveau des corrections"
|
||||
continue_hint: "Exemple: si l’instructeur demande des corrections d’un dossier complet alors qu’il reste 10 jours avant la décision automatique, et que le dossier est re-déposé le 15 avril, il sera automatiquement accepté le 25 avril, sauf à ce que l’instructeur se prononce d’ici là ou demande à nouveau des corrections. En revanche si l’instructeur demande à compléter le dossier, le délai sera réinitialisé."
|
||||
reset_label: "Réinitialiser le délai"
|
||||
reset_hint: "Exemple: si le dossier est re-déposé le 15 avril et que le délai est de 2 mois, la décision sera automatiquement prise le 15 juin, sauf à ce que l’instructeur se prononce d’ici là ou demande à nouveau des corrections"
|
||||
reset_hint: "Exemple: si le dossier est re-déposé le 15 avril et que le délai est de 2 mois, la décision sera automatiquement prise le 15 juin, sauf à ce que l’instructeur se prononce d’ici là ou demande à nouveau des corrections."
|
||||
notice_new_files_only: "Information : si vous activez cette règle, seuls les nouveaux dossiers déposés y seront soumis."
|
||||
notice_edit_denied: "Avertissement : le changement ou la désactivation du SVA/SVR est impossible."
|
||||
|
|
|
@ -234,7 +234,7 @@ module Instructeurs
|
|||
commentaire = CommentaireService.build(current_instructeur, dossier, { body: message, piece_jointe: })
|
||||
|
||||
if commentaire.valid?
|
||||
dossier.flag_as_pending_correction!(commentaire)
|
||||
dossier.flag_as_pending_correction!(commentaire, params[:kind].presence)
|
||||
dossier.update!(last_commentaire_updated_at: Time.zone.now)
|
||||
current_instructeur.follow(dossier)
|
||||
|
||||
|
|
|
@ -8,10 +8,12 @@ module DossierCorrectableConcern
|
|||
|
||||
scope :with_pending_corrections, -> { joins(:corrections).where(corrections: { resolved_at: nil }) }
|
||||
|
||||
def flag_as_pending_correction!(commentaire)
|
||||
def flag_as_pending_correction!(commentaire, kind)
|
||||
return unless may_flag_as_pending_correction?
|
||||
|
||||
corrections.create!(commentaire:)
|
||||
kind ||= :correction
|
||||
|
||||
corrections.create!(commentaire:, kind:)
|
||||
|
||||
return if en_construction?
|
||||
|
||||
|
|
|
@ -19,10 +19,15 @@
|
|||
%p.fr-callout__text.fr-mt-2w
|
||||
L’écoulement du délai est suspendu quand un instructeur
|
||||
%strong demande des corrections
|
||||
(action
|
||||
ou
|
||||
déclare le
|
||||
%strong dossier incomplet
|
||||
(actions
|
||||
%em Demander une correction
|
||||
et
|
||||
%em Demander à compléter
|
||||
). Le dossier repasse alors en construction.
|
||||
Une fois les corrections effectuées, l’usager re-dépose son dossier. En fonction de la démarche, l’écoulement du délai reprend, ou est réinitialisé à 0.
|
||||
Une fois les corrections effectuées, l’usager re-dépose son dossier. En fonction de la démarche et de la complétude du dossier, l’écoulement du délai reprend, ou est réinitialisé à 0.
|
||||
|
||||
%p.fr-callout__text.fr-mt-2w
|
||||
Cet écran permet le réglage des paramètres nécessaires au fonctionnement du SVA ou SVR.
|
||||
|
|
|
@ -56,7 +56,8 @@ RSpec.describe Instructeurs::EnConstructionMenuComponent, type: :component do
|
|||
it 'renders a dropdown' do
|
||||
expect(subject).to have_dropdown_title('Demander une correction')
|
||||
expect(subject).to have_dropdown_item('Demander une correction')
|
||||
expect(subject).to have_dropdown_items(count: 2)
|
||||
expect(subject).to have_dropdown_item('Demander à compléter')
|
||||
expect(subject).to have_dropdown_items(count: 4)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -499,11 +499,13 @@ describe Instructeurs::DossiersController, type: :controller do
|
|||
describe '#pending_correction' do
|
||||
let(:message) { 'do that' }
|
||||
let(:justificatif) { nil }
|
||||
let(:kind) { nil }
|
||||
|
||||
subject do
|
||||
post :pending_correction, params: {
|
||||
procedure_id: procedure.id, dossier_id: dossier.id,
|
||||
dossier: { motivation: message, justificatif_motivation: justificatif }
|
||||
dossier: { motivation: message, justificatif_motivation: justificatif },
|
||||
kind:
|
||||
}, format: :turbo_stream
|
||||
end
|
||||
|
||||
|
@ -529,6 +531,7 @@ describe Instructeurs::DossiersController, type: :controller do
|
|||
|
||||
expect(dossier.reload).to be_en_construction
|
||||
expect(dossier).to be_pending_correction
|
||||
expect(dossier.corrections.last).to be_correction
|
||||
end
|
||||
|
||||
it 'create a comment with text body' do
|
||||
|
@ -536,6 +539,14 @@ describe Instructeurs::DossiersController, type: :controller do
|
|||
expect(dossier.commentaires.last).to be_flagged_pending_correction
|
||||
end
|
||||
|
||||
context 'flagged as incomplete' do
|
||||
let(:kind) { 'incomplete' }
|
||||
|
||||
it 'create a correction of incomplete kind' do
|
||||
expect(dossier.corrections.last).to be_incomplete
|
||||
end
|
||||
end
|
||||
|
||||
context 'with an attachment' do
|
||||
let(:justificatif) { fake_justificatif }
|
||||
|
||||
|
|
|
@ -34,6 +34,12 @@ describe DossierCorrectableConcern do
|
|||
context 'when dossier is en_construction' do
|
||||
it 'creates a correction' do
|
||||
expect { dossier.flag_as_pending_correction!(commentaire) }.to change { dossier.corrections.pending.count }.by(1)
|
||||
expect(dossier.corrections.last).to be_correction
|
||||
end
|
||||
|
||||
it 'created a correction of incomplete kind' do
|
||||
expect { dossier.flag_as_pending_correction!(commentaire, "incomplete") }.to change { dossier.corrections.pending.count }.by(1)
|
||||
expect(dossier.corrections.last).to be_incomplete
|
||||
end
|
||||
|
||||
it 'does not change dossier state' do
|
||||
|
|
Loading…
Reference in a new issue