diff --git a/app/controllers/administrateurs/groupe_instructeurs_controller.rb b/app/controllers/administrateurs/groupe_instructeurs_controller.rb index 612bacc02..c714c712b 100644 --- a/app/controllers/administrateurs/groupe_instructeurs_controller.rb +++ b/app/controllers/administrateurs/groupe_instructeurs_controller.rb @@ -3,7 +3,7 @@ module Administrateurs include ActiveSupport::NumberHelper include Logic include UninterlacePngConcern - include PreviewAttestationConcern + include GroupeInstructeursSignatureConcern before_action :ensure_not_super_admin!, only: [:add_instructeur] @@ -362,26 +362,6 @@ 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? diff --git a/app/controllers/concerns/groupe_instructeurs_signature_concern.rb b/app/controllers/concerns/groupe_instructeurs_signature_concern.rb new file mode 100644 index 000000000..5ff13f1e8 --- /dev/null +++ b/app/controllers/concerns/groupe_instructeurs_signature_concern.rb @@ -0,0 +1,63 @@ +module GroupeInstructeursSignatureConcern + extend ActiveSupport::Concern + + included do + def add_signature + @procedure = procedure + @groupe_instructeur = groupe_instructeur + @instructeurs = paginated_instructeurs + + signature_file = params[:groupe_instructeur][:signature] + + if params[:groupe_instructeur].nil? || signature_file.blank? + if respond_to?(:available_instructeur_emails) + @available_instructeur_emails = available_instructeur_emails + end + + flash[:alert] = "Aucun fichier joint pour le tampon de l'attestation" + render :show + else + signature = uninterlace_png(signature_file) + + if @groupe_instructeur.signature.attach(signature) + handle_redirect :success + else + handle_redirect :alert + end + end + end + + def preview_attestation + attestation_template = procedure.attestation_template || procedure.build_attestation_template + @attestation = attestation_template.render_attributes_for({ groupe_instructeur: groupe_instructeur }) + + render 'administrateurs/attestation_templates/show', formats: [:pdf] + end + + private + + def handle_redirect(status) + redirect, preview = if self.class.module_parent_name == "Administrateurs" + [ + :admin_procedure_groupe_instructeur_path, + :preview_attestation_admin_procedure_groupe_instructeur_path + ] + else + [ + :instructeur_groupe_path, + :preview_attestation_instructeur_groupe_path + ] + end + + redirect_path = method(redirect).call(@procedure, @groupe_instructeur) + preview_path = method(preview).call(@procedure, @groupe_instructeur) + + case status + when :success + redirect_to redirect_path, notice: "Le tampon de l’attestation a bien été ajouté. #{helpers.link_to("Prévisualiser l’attestation", preview_path)}" + when :alert + redirect_to redirect_path, alert: "Une erreur a empêché l’ajout du tampon. Réessayez dans quelques instants." + end + end + end +end diff --git a/app/controllers/concerns/preview_attestation_concern.rb b/app/controllers/concerns/preview_attestation_concern.rb deleted file mode 100644 index c82c37273..000000000 --- a/app/controllers/concerns/preview_attestation_concern.rb +++ /dev/null @@ -1,12 +0,0 @@ -module PreviewAttestationConcern - extend ActiveSupport::Concern - - included do - def preview_attestation - attestation_template = procedure.attestation_template || procedure.build_attestation_template - @attestation = attestation_template.render_attributes_for({ groupe_instructeur: groupe_instructeur }) - - render 'administrateurs/attestation_templates/show', formats: [:pdf] - end - end -end diff --git a/app/controllers/instructeurs/groupe_instructeurs_controller.rb b/app/controllers/instructeurs/groupe_instructeurs_controller.rb index 8d8ababcb..3a6b52fee 100644 --- a/app/controllers/instructeurs/groupe_instructeurs_controller.rb +++ b/app/controllers/instructeurs/groupe_instructeurs_controller.rb @@ -1,7 +1,7 @@ module Instructeurs class GroupeInstructeursController < InstructeurController include UninterlacePngConcern - include PreviewAttestationConcern + include GroupeInstructeursSignatureConcern ITEMS_PER_PAGE = 25 @@ -16,26 +16,6 @@ module Instructeurs @instructeurs = paginated_instructeurs end - def add_signature - @procedure = procedure - @groupe_instructeur = groupe_instructeur - @instructeurs = paginated_instructeurs - - signature_file = params[:groupe_instructeur][:signature] - - if params[:groupe_instructeur].nil? || signature_file.blank? - flash[:alert] = "Aucun fichier joint pour le tampon de l'attestation" - render :show - else - file = uninterlace_png(signature_file) - params[:groupe_instructeur][:signature] = file - if @groupe_instructeur.update(signature: file) - redirect_to instructeur_groupe_path(@procedure, @groupe_instructeur), - notice: "Le tampon de l'attestation a bien été ajouté" - end - end - end - def add_instructeur instructeur = Instructeur.by_email(instructeur_email) || create_instructeur(instructeur_email)