diff --git a/app/controllers/manager/dossiers_controller.rb b/app/controllers/manager/dossiers_controller.rb index 5f64cb7e8..d947b6c9a 100644 --- a/app/controllers/manager/dossiers_controller.rb +++ b/app/controllers/manager/dossiers_controller.rb @@ -16,6 +16,21 @@ module Manager end end + def transfer_edit + @dossier = Dossier.find params[:id] + end + + def transfer + transfer = DossierTransfer.create(email: params[:email], dossiers: [Dossier.find(params[:id])]) + if transfer.persisted? + flash[:success] = "Une invitation de transfert a été envoyée à #{params[:email]}" + else + flash[:alert] = transfer.errors.full_messages.join("
") + end + + redirect_to manager_dossier_path(params[:id]) + end + private def unfiltered_list? diff --git a/app/views/manager/dossiers/show.html.erb b/app/views/manager/dossiers/show.html.erb index 8d3f108b7..50aee6daf 100644 --- a/app/views/manager/dossiers/show.html.erb +++ b/app/views/manager/dossiers/show.html.erb @@ -26,6 +26,13 @@ as well as a link to its edit page. (Supprimé) <% end %> +
+ <%= link_to( + "Transférer le dossier", + [:transfer_edit, namespace, page.resource], + class: "button", + ) if valid_action? :transfer_edit %> +
diff --git a/app/views/manager/dossiers/transfer_edit.html.erb b/app/views/manager/dossiers/transfer_edit.html.erb new file mode 100644 index 000000000..bf2216774 --- /dev/null +++ b/app/views/manager/dossiers/transfer_edit.html.erb @@ -0,0 +1,46 @@ +<% content_for(:title) { "Transfert d'un dossier vers un autre utilisateur" } %> + + + +
+
+
User
+ +
+ <%= link_to @dossier.user.email, manager_user_path(@dossier.user) %> +
+ +
Text summary
+ +
+ <%= @dossier.text_summary %> +
+ +
State
+ +
+ <%= dossier_display_state(@dossier) %> +
+
+
+
+ <%= form_for([namespace, DossierTransfer.new], method: :post, url: transfer_manager_dossier_path(@dossier), html: { class: "form" }) do |f| %> +
+
+ +
+
+ +
+ +
+
+ <%= f.submit "Transférer le dossier" %> +
+ <% end %> +
diff --git a/config/routes.rb b/config/routes.rb index d244d5ade..2ab6b85a9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -69,7 +69,10 @@ Rails.application.routes.draw do end end - resources :dossiers, only: [:show] + resources :dossiers, only: [:show] do + get 'transfer_edit', on: :member + post 'transfer', on: :member + end resources :bill_signatures, only: [:index] diff --git a/spec/controllers/manager/dossiers_controller_spec.rb b/spec/controllers/manager/dossiers_controller_spec.rb index 3bff00e01..54f103f62 100644 --- a/spec/controllers/manager/dossiers_controller_spec.rb +++ b/spec/controllers/manager/dossiers_controller_spec.rb @@ -34,4 +34,25 @@ describe Manager::DossiersController, type: :controller do it { expect(subject).to match(%r{Nom\s+\*\s+Texte court\s+🟢\s+rempli}) } end + + describe "POST #transfer" do + before do + allow(DossierMailer).to receive(:notify_transfer).and_call_original + post :transfer, params: { id: @dossier.id, email: } + end + + context 'with valid email' do + let(:email) { "chouette.gars@laposte.net" } + + it { expect(flash[:success]).to eq("Une invitation de transfert a été envoyée à chouette.gars@laposte.net") } + it { expect(DossierMailer).to have_received(:notify_transfer) } + end + + context 'with invalid email' do + let(:email) { "chouette" } + + it { expect(flash[:alert]).to eq("L’adresse email est invalide") } + it { expect(DossierMailer).not_to have_received(:notify_transfer) } + end + end end