demarches-normaliennes/app/controllers/instructeurs/export_templates_controller.rb
Christophe Robillard ffd1a15d91
add, edit and destroy export template with exported_columns
Co-authored-by: mfo <mfo@users.noreply.github.com>
Co-authored-by: LeSim <mail@simon.lehericey.net>
2024-11-14 14:45:40 +01:00

95 lines
3.2 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
module Instructeurs
class ExportTemplatesController < InstructeurController
before_action :set_procedure_and_groupe_instructeurs
before_action :set_export_template, only: [:edit, :update, :destroy]
before_action :ensure_legitimate_groupe_instructeur, only: [:create, :update]
before_action :set_types_de_champ, only: [:new, :edit]
def new
@export_template = export_template
end
def create
@export_template = ExportTemplate.new(export_template_params)
if @export_template.save
redirect_to [:exports, :instructeur, @procedure], notice: "Le modèle d'export #{@export_template.name} a bien été créé"
else
flash[:alert] = @export_template.errors.full_messages
render :new
end
end
def edit
end
def update
if @export_template.update(export_template_params)
redirect_to [:exports, :instructeur, @procedure], notice: "Le modèle d'export #{@export_template.name} a bien été modifié"
else
flash[:alert] = @export_template.errors.full_messages
render :edit
end
end
def destroy
if @export_template.destroy
redirect_to [:exports, :instructeur, @procedure], notice: "Le modèle d'export #{@export_template.name} a bien été supprimé"
else
redirect_to [:exports, :instructeur, @procedure], alert: "Le modèle d'export #{@export_template.name} n'a pu être supprimé"
end
end
def preview
export_template = ExportTemplate.new(export_template_params)
render turbo_stream: turbo_stream.replace('preview', partial: 'preview', locals: { export_template: })
end
private
def export_template = @export_template ||= ExportTemplate.default(groupe_instructeur: @groupe_instructeurs.first, kind:)
def kind = params[:kind] == 'zip' ? 'zip' : 'xlsx'
def set_types_de_champ
if export_template.tabular?
@types_de_champ_public = @procedure.all_revisions_types_de_champ(parent: nil, with_header_section: true).public_only
@types_de_champ_private = @procedure.all_revisions_types_de_champ(parent: nil, with_header_section: true).private_only
end
end
def export_template_params
params
.require(:export_template)
.permit(
:name,
:kind,
:groupe_instructeur_id,
dossier_folder: [:enabled, :template],
export_pdf: [:enabled, :template],
pjs: [:stable_id, :enabled, :template],
exported_columns: []
)
end
def set_procedure_and_groupe_instructeurs
@procedure = current_instructeur.procedures.find(params[:procedure_id])
@groupe_instructeurs = current_instructeur.groupe_instructeurs.where(procedure: @procedure)
Sentry.configure_scope { |scope| scope.set_tags(procedure: @procedure.id) }
end
def set_export_template
@export_template = current_instructeur.export_templates.find(params[:id])
end
def ensure_legitimate_groupe_instructeur
return if export_template_params[:groupe_instructeur_id].in?(@groupe_instructeurs.map { _1.id.to_s })
redirect_to [:exports, :instructeur, @procedure], alert: 'Vous navez pas le droit de créer un modèle dexport pour ce groupe'
end
end
end