From c121a8b2dc6e31107c6bb99fbf2c07acc720d5bd Mon Sep 17 00:00:00 2001 From: Christophe Robillard Date: Tue, 19 Sep 2023 17:02:41 +0200 Subject: [PATCH] admin can add groupe_instructeur signature --- .../groupe_instructeurs_controller.rb | 25 +++++++++++++++++++ .../groupe_instructeurs/_signature.html.haml | 10 ++++++++ .../groupe_instructeurs/show.html.haml | 2 ++ config/routes.rb | 1 + .../groupe_instructeurs_controller_spec.rb | 18 +++++++++++++ 5 files changed, 56 insertions(+) create mode 100644 app/views/administrateurs/groupe_instructeurs/_signature.html.haml diff --git a/app/controllers/administrateurs/groupe_instructeurs_controller.rb b/app/controllers/administrateurs/groupe_instructeurs_controller.rb index 8eb719e3c..f1f3d068b 100644 --- a/app/controllers/administrateurs/groupe_instructeurs_controller.rb +++ b/app/controllers/administrateurs/groupe_instructeurs_controller.rb @@ -2,6 +2,7 @@ module Administrateurs class GroupeInstructeursController < AdministrateurController include ActiveSupport::NumberHelper include Logic + include UninterlacePngConcern before_action :ensure_not_super_admin!, only: [:add_instructeur] @@ -360,6 +361,26 @@ module Administrateurs end end + def add_signature + @procedure = procedure + @groupe_instructeur = groupe_instructeur + @instructeurs = paginated_instructeurs + @available_instructeur_emails = available_instructeur_emails + + signature_file = params[:groupe_instructeur]&.delete('signature') + + if params[:groupe_instructeur].nil? || signature_file.blank? + flash[:alert] = "Aucun fichier joint pour le tampon de l'attestation" + render :show + else + params[:groupe_instructeur][:signature] = uninterlace_png(signature_file) + if @groupe_instructeur.update(signature_params) + redirect_to admin_procedure_groupe_instructeur_path(procedure, groupe_instructeur), + notice: "Le tampon de l'attestation a bien été ajouté" + end + end + end + private def closed_params? @@ -389,6 +410,10 @@ module Administrateurs params.require(:groupe_instructeur).permit(:label) end + def signature_params + params.require(:groupe_instructeur).permit(:signature) + end + def paginated_groupe_instructeurs groupes = if params[:q].present? query = ActiveRecord::Base.sanitize_sql_like(params[:q]) diff --git a/app/views/administrateurs/groupe_instructeurs/_signature.html.haml b/app/views/administrateurs/groupe_instructeurs/_signature.html.haml new file mode 100644 index 000000000..6abd1ef27 --- /dev/null +++ b/app/views/administrateurs/groupe_instructeurs/_signature.html.haml @@ -0,0 +1,10 @@ +.card.mt-2 + = render NestedForms::FormOwnerComponent.new + = form_with url: { action: :add_signature }, method: :post, html: { multipart: true, class: 'form' } do |f| + .card-title Tampon de l'attestation + = render Attachment::EditComponent.new(attached_file: groupe_instructeur.signature, direct_upload: false) + %p.notice + Formats acceptés : JPG / JPEG / PNG. + %br + Dimensions conseillées : au minimum 500 px de largeur ou de hauteur, poids maximum : 0,5 Mo. + = f.submit 'Ajouter signature', class: 'fr-btn' diff --git a/app/views/administrateurs/groupe_instructeurs/show.html.haml b/app/views/administrateurs/groupe_instructeurs/show.html.haml index d61e17433..748147c26 100644 --- a/app/views/administrateurs/groupe_instructeurs/show.html.haml +++ b/app/views/administrateurs/groupe_instructeurs/show.html.haml @@ -16,3 +16,5 @@ = render partial: 'administrateurs/groupe_instructeurs/contact_information', locals: { procedure: @procedure, groupe_instructeur: @groupe_instructeur } + = render partial: 'administrateurs/groupe_instructeurs/signature', + locals: { groupe_instructeur: @groupe_instructeur } diff --git a/config/routes.rb b/config/routes.rb index 0d906dacf..bfbf56c3b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -532,6 +532,7 @@ Rails.application.routes.draw do delete 'remove_instructeur' get 'reaffecter_dossiers' post 'reaffecter' + post 'add_signature' end collection do diff --git a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb index c6901eb44..c6737c284 100644 --- a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb +++ b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb @@ -843,4 +843,22 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do expect(procedure4.reload.routing_enabled).to be_truthy end end + + describe '#add_signature' do + let(:signature) { fixture_file_upload('spec/fixtures/files/black.png', 'image/png') } + + before { + post :add_signature, + params: { + procedure_id: procedure.id, + id: gi_1_1.id, + groupe_instructeur: { + signature: signature + } + } + } + + it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_1)) } + it { expect(gi_1_1.signature).to be_attached } + end end