views: refactor the state button
Now that all states have a dropdown, we can simplify the code. This also brings the "Repasser en instruction" action for all states (including when no attestation or motivation is present).
This commit is contained in:
parent
07f75ff20e
commit
dd57953b76
2 changed files with 91 additions and 107 deletions
|
@ -1,93 +1,95 @@
|
|||
- if dossier.en_construction? || dossier.en_instruction?
|
||||
%span.dropdown
|
||||
-# Dropdown button title
|
||||
%button.button.primary.dropdown-button{ class: button_or_label_class(dossier) }
|
||||
= dossier_display_state dossier
|
||||
|
||||
-# -----------------------------------------
|
||||
-# Dossier EN CONSTRUCTION ou EN INSTRUCTION
|
||||
-# -----------------------------------------
|
||||
-# Dropdown content
|
||||
.dropdown-content.fade-in-down{ class: ('terminated' if dossier.termine?) }
|
||||
|
||||
%span.dropdown
|
||||
%button.button.primary.dropdown-button
|
||||
= dossier_display_state dossier
|
||||
.dropdown-content.fade-in-down
|
||||
- if dossier.en_construction?
|
||||
-# ------------------------------------------------------
|
||||
-# EN CONSTRUCTION
|
||||
-# ------------------------------------------------------
|
||||
%ul.dropdown-items
|
||||
- if dossier.en_construction?
|
||||
%li.selected
|
||||
%span.icon.edit
|
||||
.dropdown-description
|
||||
%h4 En construction
|
||||
Vous permettez à l'usager de modifier ses réponses au formulaire
|
||||
%li
|
||||
= link_to passer_en_instruction_instructeur_dossier_path(dossier.procedure, dossier), method: :post, data: { remote: true, confirm: "Confirmez-vous le passage en instruction de ce dossier ?" } do
|
||||
%span.icon.in-progress
|
||||
.dropdown-description
|
||||
%h4 Passer en instruction
|
||||
L'usager ne pourra plus modifier le formulaire
|
||||
|
||||
- if dossier.en_instruction?
|
||||
%li
|
||||
= link_to repasser_en_construction_instructeur_dossier_path(dossier.procedure, dossier), method: :post, data: { remote:true, confirm: "Confirmez-vous le passage en construction de ce dossier ?" } do
|
||||
%span.icon.edit
|
||||
.dropdown-description
|
||||
%h4 Repasser en construction
|
||||
Vous permettrez à l'usager de modifier ses réponses au formulaire
|
||||
%li.selected
|
||||
%li.selected
|
||||
%span.icon.edit
|
||||
.dropdown-description
|
||||
%h4 En construction
|
||||
Vous permettez à l'usager de modifier ses réponses au formulaire
|
||||
|
||||
%li
|
||||
= link_to passer_en_instruction_instructeur_dossier_path(dossier.procedure, dossier), method: :post, data: { remote: true, confirm: "Confirmez-vous le passage en instruction de ce dossier ?" } do
|
||||
%span.icon.in-progress
|
||||
.dropdown-description
|
||||
%h4 En instruction
|
||||
L'usager ne peut modifier son dossier pendant l'instruction
|
||||
%li
|
||||
%a{ href: '#', onclick: "DS.showMotivation(event, 'accept');" }
|
||||
%span.icon.accept
|
||||
.dropdown-description
|
||||
%h4 Accepter
|
||||
L'usager sera notifié que son dossier a été accepté
|
||||
%li
|
||||
%a{ href: '#', onclick: "DS.showMotivation(event, 'without-continuation');" }
|
||||
%span.icon.without-continuation
|
||||
.dropdown-description
|
||||
%h4 Classer sans suite
|
||||
L'usager sera notifié que son dossier a été classé sans suite
|
||||
%li
|
||||
%a{ href: '#', onclick: "DS.showMotivation(event, 'refuse');" }
|
||||
%span.icon.refuse
|
||||
.dropdown-description
|
||||
%h4 Refuser
|
||||
L'usager sera notifié que son dossier a été refusé
|
||||
= render partial: 'instructeurs/dossiers/state_button_motivation', locals: { dossier: dossier, popup_title: 'Accepter le dossier', placeholder: 'Expliquez au demandeur pourquoi ce dossier est accepté (facultatif)', popup_class: 'accept', process_action: 'accepter', title: 'Accepter', confirm: "Confirmez-vous l'acceptation ce dossier ?" }
|
||||
= render partial: 'instructeurs/dossiers/state_button_motivation', locals: { dossier: dossier, popup_title: 'Classer le dossier sans suite', placeholder: 'Expliquez au demandeur pourquoi ce dossier est classé sans suite (obligatoire)', popup_class: 'without-continuation', process_action: 'classer_sans_suite', title: 'Classer sans suite', confirm: 'Confirmez-vous le classement sans suite de ce dossier ?' }
|
||||
= render partial: 'instructeurs/dossiers/state_button_motivation', locals: { dossier: dossier, popup_title: 'Refuser le dossier', placeholder: 'Expliquez au demandeur pourquoi ce dossier est refusé (obligatoire)', popup_class: 'refuse', process_action: 'refuser', title: 'Refuser', confirm: 'Confirmez-vous le refus de ce dossier ?' }
|
||||
%h4 Passer en instruction
|
||||
L'usager ne pourra plus modifier le formulaire
|
||||
|
||||
- else
|
||||
- elsif dossier.en_instruction?
|
||||
-# ------------------------------------------------------
|
||||
-# EN INSTRUCTION
|
||||
-# ------------------------------------------------------
|
||||
%ul.dropdown-items
|
||||
|
||||
-# ---------------------------------------------------
|
||||
-# Dossier TERMINÉ
|
||||
-# ---------------------------------------------------
|
||||
%li
|
||||
= link_to repasser_en_construction_instructeur_dossier_path(dossier.procedure, dossier), method: :post, data: { remote:true, confirm: "Confirmez-vous le passage en construction de ce dossier ?" } do
|
||||
%span.icon.edit
|
||||
.dropdown-description
|
||||
%h4 Repasser en construction
|
||||
Vous permettrez à l'usager de modifier ses réponses au formulaire
|
||||
|
||||
- if dossier.motivation.present? || dossier.attestation.present?
|
||||
%span.dropdown
|
||||
%button.button.dropdown-button{ class: button_or_label_class(dossier) }
|
||||
= dossier_display_state(dossier, lower: true)
|
||||
.dropdown-content.fade-in-down.terminated
|
||||
- if dossier.motivation.present?
|
||||
%h4.title Motivation
|
||||
%p.dossier-motivation= dossier.motivation
|
||||
= render partial: 'users/dossiers/show/download_justificatif', locals: { dossier: dossier }
|
||||
%li.selected
|
||||
%span.icon.in-progress
|
||||
.dropdown-description
|
||||
%h4 En instruction
|
||||
L'usager ne peut modifier son dossier pendant l'instruction
|
||||
|
||||
- if dossier.attestation.present?
|
||||
%h4.title Attestation
|
||||
%p.attestation L'acceptation du dossier a envoyé automatiquement une attestation au demandeur
|
||||
= link_to "Voir l'attestation", attestation_instructeur_dossier_path(dossier.procedure, dossier), target: '_blank', rel: 'noopener', class: 'button'
|
||||
%li
|
||||
%a{ href: '#', onclick: "DS.showMotivation(event, 'accept');" }
|
||||
%span.icon.accept
|
||||
.dropdown-description
|
||||
%h4 Accepter
|
||||
L'usager sera notifié que son dossier a été accepté
|
||||
|
||||
- if dossier.termine?
|
||||
%ul.dropdown-items.with-top-border
|
||||
%li
|
||||
= link_to repasser_en_instruction_instructeur_dossier_path(dossier.procedure, dossier), method: :post, data: { remote:true, confirm: "Voulez vous remettre le dossier #{dossier.id} en instruction ?" } do
|
||||
%span.icon.in-progress
|
||||
.dropdown-description
|
||||
%h4 Repasser en instruction
|
||||
L’usager sera notifié que son dossier est réexaminé.
|
||||
%li
|
||||
%a{ href: '#', onclick: "DS.showMotivation(event, 'without-continuation');" }
|
||||
%span.icon.without-continuation
|
||||
.dropdown-description
|
||||
%h4 Classer sans suite
|
||||
L'usager sera notifié que son dossier a été classé sans suite
|
||||
|
||||
- else
|
||||
-# No actions to perform: only display a label with the dossier state
|
||||
-# FIXME: we still should be able to move back the dossier to instruction
|
||||
%span.label{ class: button_or_label_class(dossier) }
|
||||
= dossier_display_state(dossier, lower: true)
|
||||
%li
|
||||
%a{ href: '#', onclick: "DS.showMotivation(event, 'refuse');" }
|
||||
%span.icon.refuse
|
||||
.dropdown-description
|
||||
%h4 Refuser
|
||||
L'usager sera notifié que son dossier a été refusé
|
||||
|
||||
= render partial: 'instructeurs/dossiers/state_button_motivation', locals: { dossier: dossier, popup_title: 'Accepter le dossier', placeholder: 'Expliquez au demandeur pourquoi ce dossier est accepté (facultatif)', popup_class: 'accept', process_action: 'accepter', title: 'Accepter', confirm: "Confirmez-vous l'acceptation ce dossier ?" }
|
||||
|
||||
= render partial: 'instructeurs/dossiers/state_button_motivation', locals: { dossier: dossier, popup_title: 'Classer le dossier sans suite', placeholder: 'Expliquez au demandeur pourquoi ce dossier est classé sans suite (obligatoire)', popup_class: 'without-continuation', process_action: 'classer_sans_suite', title: 'Classer sans suite', confirm: 'Confirmez-vous le classement sans suite de ce dossier ?' }
|
||||
|
||||
= render partial: 'instructeurs/dossiers/state_button_motivation', locals: { dossier: dossier, popup_title: 'Refuser le dossier', placeholder: 'Expliquez au demandeur pourquoi ce dossier est refusé (obligatoire)', popup_class: 'refuse', process_action: 'refuser', title: 'Refuser', confirm: 'Confirmez-vous le refus de ce dossier ?' }
|
||||
|
||||
- elsif dossier.termine?
|
||||
-# ---------------------------------------------------
|
||||
-# TERMINÉ
|
||||
-# ---------------------------------------------------
|
||||
-# TODO: turn the motivation and attestation into regular dropdown items
|
||||
- if dossier.motivation.present?
|
||||
%h4.title Motivation
|
||||
%p.dossier-motivation= dossier.motivation
|
||||
= render partial: 'users/dossiers/show/download_justificatif', locals: { dossier: dossier }
|
||||
|
||||
- if dossier.attestation.present?
|
||||
%h4.title Attestation
|
||||
%p.attestation L'acceptation du dossier a envoyé automatiquement une attestation au demandeur
|
||||
= link_to "Voir l'attestation", attestation_instructeur_dossier_path(dossier.procedure, dossier), target: '_blank', rel: 'noopener', class: 'button'
|
||||
|
||||
%ul.dropdown-items.with-top-border
|
||||
%li
|
||||
= link_to repasser_en_instruction_instructeur_dossier_path(dossier.procedure, dossier), method: :post, data: { remote:true, confirm: "Voulez vous remettre le dossier #{dossier.id} en instruction ?" } do
|
||||
%span.icon.in-progress
|
||||
.dropdown-description
|
||||
%h4 Repasser en instruction
|
||||
L’usager sera notifié que son dossier est réexaminé.
|
||||
|
|
|
@ -7,13 +7,6 @@ describe 'instructeurs/dossiers/state_button.html.haml', type: :view do
|
|||
render('instructeurs/dossiers/state_button.html.haml', dossier: dossier)
|
||||
end
|
||||
|
||||
matcher :have_state_label do |expected_title|
|
||||
match do |rendered|
|
||||
expect(rendered).to have_selector('.label', text: expected_title)
|
||||
expect(rendered).not_to have_selector('.dropdown')
|
||||
end
|
||||
end
|
||||
|
||||
matcher :have_dropdown_title do |expected_title|
|
||||
match do |rendered|
|
||||
expect(rendered).to have_selector('.dropdown .dropdown-button', text: expected_title)
|
||||
|
@ -39,13 +32,13 @@ describe 'instructeurs/dossiers/state_button.html.haml', type: :view do
|
|||
end
|
||||
|
||||
context 'brouillon' do
|
||||
let(:dossier) { create(:dossier) }
|
||||
|
||||
# Currently the state button is not supposed to be displayed for brouillons.
|
||||
# But better have a sane fallback than crashing.
|
||||
let(:dossier) { create(:dossier) }
|
||||
|
||||
it 'renders a label' do
|
||||
expect(rendered).to have_state_label('brouillon')
|
||||
it 'renders a dropdown' do
|
||||
expect(rendered).to have_dropdown_title('Brouillon')
|
||||
expect(rendered).to have_dropdown_items(count: 0)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -77,20 +70,15 @@ describe 'instructeurs/dossiers/state_button.html.haml', type: :view do
|
|||
shared_examples 'a dropdown for a closed state' do |state|
|
||||
let(:dossier) { create :dossier, state }
|
||||
|
||||
# FIXME: it should also render the link to move back to instruction
|
||||
it 'renders a simple label' do
|
||||
expect(rendered).to have_state_label(dossier_display_state(dossier, lower: true))
|
||||
it 'renders a dropdown' do
|
||||
expect(rendered).to have_dropdown_title(dossier_display_state(dossier))
|
||||
expect(rendered).to have_dropdown_items(count: 1)
|
||||
expect(rendered).to have_dropdown_item('Repasser en instruction', href: repasser_en_instruction_instructeur_dossier_path(dossier.procedure, dossier))
|
||||
end
|
||||
|
||||
context 'with a motivation' do
|
||||
let(:dossier) { create :dossier, state, motivation: 'Correspond au programme' }
|
||||
|
||||
it 'renders a dropdown' do
|
||||
expect(rendered).to have_dropdown_title(dossier_display_state(dossier, lower: true))
|
||||
expect(rendered).to have_dropdown_items(count: 1)
|
||||
expect(rendered).to have_dropdown_item('Repasser en instruction', href: repasser_en_instruction_instructeur_dossier_path(dossier.procedure, dossier))
|
||||
end
|
||||
|
||||
it 'displays the motivation text' do
|
||||
expect(rendered).to have_content('Motivation')
|
||||
expect(rendered).to have_content(dossier.motivation)
|
||||
|
@ -100,12 +88,6 @@ describe 'instructeurs/dossiers/state_button.html.haml', type: :view do
|
|||
context 'with an attestation' do
|
||||
let(:dossier) { create :dossier, state, :with_attestation }
|
||||
|
||||
it 'renders a dropdown' do
|
||||
expect(rendered).to have_dropdown_title(dossier_display_state(dossier, lower: true))
|
||||
expect(rendered).to have_dropdown_items(count: 1)
|
||||
expect(rendered).to have_dropdown_item('Repasser en instruction', href: repasser_en_instruction_instructeur_dossier_path(dossier.procedure, dossier))
|
||||
end
|
||||
|
||||
it 'provides a link to the attestation' do
|
||||
expect(rendered).to have_content('Attestation')
|
||||
expect(rendered).to have_link(href: attestation_instructeur_dossier_path(dossier.procedure, dossier))
|
||||
|
|
Loading…
Reference in a new issue