superadmin can transfer dossier from a user to another user

This commit is contained in:
Christophe Robillard 2023-11-27 11:19:32 +01:00
parent 116ba085bf
commit 332570bfba
5 changed files with 93 additions and 1 deletions

View file

@ -16,6 +16,21 @@ module Manager
end end
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("<br>")
end
redirect_to manager_dossier_path(params[:id])
end
private private
def unfiltered_list? def unfiltered_list?

View file

@ -26,6 +26,13 @@ as well as a link to its edit page.
(Supprimé) (Supprimé)
<% end %> <% end %>
</h1> </h1>
<div>
<%= link_to(
"Transférer le dossier",
[:transfer_edit, namespace, page.resource],
class: "button",
) if valid_action? :transfer_edit %>
</div>
</header> </header>
<section class="main-content__body"> <section class="main-content__body">

View file

@ -0,0 +1,46 @@
<% content_for(:title) { "Transfert d'un dossier vers un autre utilisateur" } %>
<header class="main-content__header" role="banner">
<h1 class="main-content__page-title">
<%= content_for(:title) %>
</h1>
</header>
<section class="main-content__body">
<dl>
<dt class="attribute-label" id="user">User</dt>
<dd class="attribute-data attribute-data--belongs-to">
<%= link_to @dossier.user.email, manager_user_path(@dossier.user) %>
</dd>
<dt class="attribute-label" id="text_summary">Text summary</dt>
<dd class="attribute-data attribute-data--string">
<%= @dossier.text_summary %>
</dd>
<dt class="attribute-label" id="state">State</dt>
<dd class="attribute-data attribute-data--enum">
<%= dossier_display_state(@dossier) %>
</dd>
</dl>
</section>
<section>
<%= form_for([namespace, DossierTransfer.new], method: :post, url: transfer_manager_dossier_path(@dossier), html: { class: "form" }) do |f| %>
<div class="field-unit field-unit--string field-unit--optional">
<div class="field-unit__label">
<label for="user_email">A qui souhaitez-vous transferer le dossier ?</label>
</div>
<div class="field-unit__field">
<input type="text" name="email" required placeholder="chouette.gars@laposte.net">
</div>
</div>
<div class="form-actions">
<%= f.submit "Transférer le dossier" %>
</div>
<% end %>
</section>

View file

@ -69,7 +69,10 @@ Rails.application.routes.draw do
end end
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] resources :bill_signatures, only: [:index]

View file

@ -34,4 +34,25 @@ describe Manager::DossiersController, type: :controller do
it { expect(subject).to match(%r{Nom\s+\*\s+Texte court\s+🟢\s+rempli}) } it { expect(subject).to match(%r{Nom\s+\*\s+Texte court\s+🟢\s+rempli}) }
end 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("Ladresse email est invalide") }
it { expect(DossierMailer).not_to have_received(:notify_transfer) }
end
end
end end