From f8a6765367431df8b133d2c0efd960243fc751bb Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 10 Sep 2018 17:52:49 +0200 Subject: [PATCH] [Fix #2540] Allow an instructeur to send a dossier to several instructeurs --- .../new_design/personnes_impliquees.scss | 6 +++++ .../new_gestionnaire/dossiers_controller.rb | 10 ++++--- app/javascript/new_design/select2.js | 7 +++++ .../dossiers/_envoyer_dossier_block.html.haml | 10 ++++--- config/routes.rb | 2 +- .../dossiers_controller_spec.rb | 6 ++--- .../new_gestionnaire/gestionnaire_spec.rb | 26 +++++++++++++++++++ 7 files changed, 57 insertions(+), 10 deletions(-) diff --git a/app/assets/stylesheets/new_design/personnes_impliquees.scss b/app/assets/stylesheets/new_design/personnes_impliquees.scss index 80c227495..ac908f538 100644 --- a/app/assets/stylesheets/new_design/personnes_impliquees.scss +++ b/app/assets/stylesheets/new_design/personnes_impliquees.scss @@ -5,4 +5,10 @@ list-style-type: disc; margin-left: 16px; } + + // scss-lint:disable SelectorFormat + .form .select2-container .select2-selection__rendered { + padding: 12px; + } + // scss-lint:enable } diff --git a/app/controllers/new_gestionnaire/dossiers_controller.rb b/app/controllers/new_gestionnaire/dossiers_controller.rb index b23359872..76950e5a4 100644 --- a/app/controllers/new_gestionnaire/dossiers_controller.rb +++ b/app/controllers/new_gestionnaire/dossiers_controller.rb @@ -37,9 +37,13 @@ module NewGestionnaire @potential_recipients = procedure.gestionnaires.reject { |g| g == current_gestionnaire } end - def envoyer_a_instructeur - recipient = Gestionnaire.find(params[:recipient]) - GestionnaireMailer.send_dossier(current_gestionnaire, dossier, recipient).deliver_later + def send_to_instructeurs + recipients = Gestionnaire.find(params[:recipients]) + + recipients.each do |recipient| + GestionnaireMailer.send_dossier(current_gestionnaire, dossier, recipient).deliver_later + end + flash.notice = "Dossier envoyé" redirect_to(personnes_impliquees_gestionnaire_dossier_path(procedure, dossier)) end diff --git a/app/javascript/new_design/select2.js b/app/javascript/new_design/select2.js index 268e47225..ccd14b117 100644 --- a/app/javascript/new_design/select2.js +++ b/app/javascript/new_design/select2.js @@ -13,4 +13,11 @@ addEventListener('turbolinks:load', () => { maximumSelectionLength: '5', width: '300px' }); + + $('.recipients-form select.select2-limited').select2({ + language: 'fr', + placeholder: 'Sélectionnez des instructeurs', + maximumSelectionLength: '30', + width: '300px' + }); }); diff --git a/app/views/new_gestionnaire/dossiers/_envoyer_dossier_block.html.haml b/app/views/new_gestionnaire/dossiers/_envoyer_dossier_block.html.haml index 0fead70e5..20fccfb17 100644 --- a/app/views/new_gestionnaire/dossiers/_envoyer_dossier_block.html.haml +++ b/app/views/new_gestionnaire/dossiers/_envoyer_dossier_block.html.haml @@ -4,7 +4,11 @@ %p.tab-paragraph Vous êtes le seul instructeur assigné sur cette démarche - else - = form_for dossier, url: envoyer_a_instructeur_gestionnaire_dossier_path(dossier.procedure, dossier), method: :post, html: { class: 'form' } do |f| - .flex.justify-start.align-baseline - = select_tag(:recipient, options_from_collection_for_select(potential_recipients, :id, :email)) + = form_for dossier, url: send_to_instructeurs_gestionnaire_dossier_path(dossier.procedure, dossier), method: :post, html: { class: 'form recipients-form' } do |f| + .flex.justify-start.align-start + = select_tag(:recipients, + options_from_collection_for_select(potential_recipients, :id, :email), + multiple: true, + class: 'select2-limited', + placeholder: '') = f.submit "Envoyer", class: "button large send gap-left" diff --git a/config/routes.rb b/config/routes.rb index 78a27debe..19adc8ed6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -322,7 +322,7 @@ Rails.application.routes.draw do post 'passer-en-instruction' => 'dossiers#passer_en_instruction' post 'repasser-en-construction' => 'dossiers#repasser_en_construction' post 'terminer' - post 'envoyer-a-instructeur' => 'dossiers#envoyer_a_instructeur' + post 'send-to-instructeurs' => 'dossiers#send_to_instructeurs' scope :carte do get 'position' end diff --git a/spec/controllers/new_gestionnaire/dossiers_controller_spec.rb b/spec/controllers/new_gestionnaire/dossiers_controller_spec.rb index 570a63cb9..65a0e2255 100644 --- a/spec/controllers/new_gestionnaire/dossiers_controller_spec.rb +++ b/spec/controllers/new_gestionnaire/dossiers_controller_spec.rb @@ -31,7 +31,7 @@ describe NewGestionnaire::DossiersController, type: :controller do end end - describe '#envoyer_a_instructeur' do + describe '#send_to_instructeurs' do let(:recipient) { create(:gestionnaire) } let(:gestionnaires) { [gestionnaire, recipient] } let(:mail) { double("mail") } @@ -45,9 +45,9 @@ describe NewGestionnaire::DossiersController, type: :controller do .and_return(mail) post( - :envoyer_a_instructeur, + :send_to_instructeurs, params: { - recipient: recipient, + recipients: [recipient], procedure_id: procedure.id, dossier_id: dossier.id } diff --git a/spec/features/new_gestionnaire/gestionnaire_spec.rb b/spec/features/new_gestionnaire/gestionnaire_spec.rb index 24c5375ca..94826ca91 100644 --- a/spec/features/new_gestionnaire/gestionnaire_spec.rb +++ b/spec/features/new_gestionnaire/gestionnaire_spec.rb @@ -134,6 +134,32 @@ feature 'The gestionnaire part' do expect(page).to have_text(gestionnaire2.email) end + scenario 'A gestionnaire can send a dossier to several instructeurs', js: true do + instructeur_2 = FactoryBot.create(:gestionnaire) + instructeur_3 = FactoryBot.create(:gestionnaire) + procedure.gestionnaires << [instructeur_2, instructeur_3] + + send_dossier = double() + expect(GestionnaireMailer).to receive(:send_dossier).and_return(send_dossier).twice + expect(send_dossier).to receive(:deliver_later).twice + + log_in(gestionnaire.email, password) + + click_on procedure.libelle + click_on dossier.user.email + + click_on 'Personnes impliquées' + + first('.select2-container', minimum: 1).click + find('li.select2-results__option[role="treeitem"]', text: instructeur_2.email).click + first('.select2-container', minimum: 1).click + find('li.select2-results__option[role="treeitem"]', text: instructeur_3.email).click + + click_on 'Envoyer' + + expect(page).to have_text("Dossier envoyé") + end + def log_in(email, password) visit '/' click_on 'Connexion'