Merge pull request #6482 from betagouv/user_can_transfer_all_dossier
Un usager peut transférer tous ces dossiers
This commit is contained in:
commit
326956b002
5 changed files with 86 additions and 0 deletions
|
@ -5,6 +5,7 @@ module Users
|
|||
if: -> { instructeur_signed_in? }
|
||||
|
||||
def show
|
||||
@waiting_transfers = current_user.dossiers.joins(:transfer).group('dossier_transfers.email').count.to_a
|
||||
end
|
||||
|
||||
def renew_api_token
|
||||
|
@ -27,6 +28,12 @@ module Users
|
|||
redirect_to profil_path
|
||||
end
|
||||
|
||||
def transfer_all_dossiers
|
||||
DossierTransfer.initiate(next_owner_email, current_user.dossiers)
|
||||
flash.notice = t('.new_transfer', count: current_user.dossiers.count, email: next_owner_email)
|
||||
redirect_to profil_path
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def update_email_params
|
||||
|
@ -40,5 +47,9 @@ module Users
|
|||
def redirect_if_instructeur
|
||||
redirect_to profil_path
|
||||
end
|
||||
|
||||
def next_owner_email
|
||||
params[:next_owner]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -23,6 +23,22 @@
|
|||
= f.email_field :email, value: nil, placeholder: 'Nouvelle adresse email', required: true
|
||||
= f.submit "Changer mon adresse", class: 'button primary'
|
||||
|
||||
- if !instructeur_signed_in?
|
||||
.card
|
||||
.card-title= t('.transfer_title')
|
||||
= t('.transfer_explication_html')
|
||||
|
||||
= form_tag transfer_all_dossiers_path, class: 'form' do
|
||||
= email_field_tag :next_owner, nil, required: true
|
||||
= submit_tag "Transférer tous mes dossiers", class: 'button primary', data: { confirm: t('.transfer_confirmation') }
|
||||
|
||||
- if @waiting_transfers.any?
|
||||
.card.warning
|
||||
.card-title= t('.waiting_transfers')
|
||||
%ul
|
||||
- @waiting_transfers.each do |email, nb_dossier|
|
||||
%li= t('.one_waiting_transfer', email: email, count: nb_dossier)
|
||||
|
||||
- if current_administrateur.present?
|
||||
.card
|
||||
.card-title Jeton d’identification de l’API (token)
|
||||
|
|
16
config/locales/views/users/profil/fr.yml
Normal file
16
config/locales/views/users/profil/fr.yml
Normal file
|
@ -0,0 +1,16 @@
|
|||
fr:
|
||||
users:
|
||||
profil:
|
||||
show:
|
||||
transfer_title: Transferer tous vos dossiers
|
||||
transfer_explication_html: "<p>Cette fonctionnalité vous permet de changer le propriétaire de tous vos dossiers. C'est généralement utile lors d'un changement de poste ou si vous souhaitez fusionner plusieurs comptes.</p>
|
||||
<p>Adresse email du destinataire de tous vos dossiers</p>"
|
||||
waiting_transfers: "Transfert en attente :"
|
||||
one_waiting_transfer:
|
||||
one: "Le nouveau propriétaire %{email} doit confirmer le transfert d'un dossier en suivant les instructions reçues dans son mail."
|
||||
other: "Le nouveau propriétaire %{email} doit confirmer le transfert de vos %{count} dossiers en suivant les instructions reçues dans son mail."
|
||||
transfer_confirmation: "Confirmez-vous le transfert ?"
|
||||
transfer_all_dossiers:
|
||||
new_transfer:
|
||||
one: "Le transfert d'un dossier à %{email} est en cours"
|
||||
other: "Le transfert de %{count} dossiers à %{email} est en cours"
|
|
@ -276,6 +276,7 @@ Rails.application.routes.draw do
|
|||
# allow refresh 'renew api token' page
|
||||
get 'renew-api-token' => redirect('/profil')
|
||||
patch 'update_email' => 'profil#update_email'
|
||||
post 'transfer_all_dossiers' => 'profil#transfer_all_dossiers'
|
||||
end
|
||||
|
||||
#
|
||||
|
|
|
@ -5,6 +5,32 @@ describe Users::ProfilController, type: :controller do
|
|||
|
||||
before { sign_in(user) }
|
||||
|
||||
describe 'GET #show' do
|
||||
render_views
|
||||
|
||||
before { post :show }
|
||||
|
||||
context 'when the current user is not an instructeur' do
|
||||
it { expect(response.body).to include(I18n.t('users.profil.show.transfer_title')) }
|
||||
|
||||
context 'when an existing transfer exists' do
|
||||
let(:dossiers) { Array.new(3) { create(:dossier, user: user) } }
|
||||
let(:next_owner) { 'loulou@lou.com' }
|
||||
let!(:transfer) { DossierTransfer.initiate(next_owner, dossiers) }
|
||||
|
||||
before { post :show }
|
||||
|
||||
it { expect(response.body).to include(I18n.t('users.profil.show.one_waiting_transfer', count: dossiers.count, email: next_owner)) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the current user is an instructeur' do
|
||||
let(:user) { create(:instructeur).user }
|
||||
|
||||
it { expect(response.body).not_to include(I18n.t('users.profil.show.transfer_title')) }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #renew_api_token' do
|
||||
let(:administrateur) { create(:administrateur) }
|
||||
|
||||
|
@ -72,4 +98,20 @@ describe Users::ProfilController, type: :controller do
|
|||
it { expect(response).to redirect_to(profil_path) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'POST #transfer_all_dossiers' do
|
||||
let!(:dossiers) { Array.new(3) { create(:dossier, user: user) } }
|
||||
let(:next_owner) { 'loulou@lou.com' }
|
||||
let(:created_transfer) { DossierTransfer.first }
|
||||
|
||||
before do
|
||||
post :transfer_all_dossiers, params: { next_owner: next_owner }
|
||||
end
|
||||
|
||||
it "transfer all dossiers" do
|
||||
expect(created_transfer.email).to eq(next_owner)
|
||||
expect(created_transfer.dossiers).to eq(dossiers)
|
||||
expect(flash.notice).to eq("Le transfert de 3 dossiers à #{next_owner} est en cours")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue