a11yist/app/controllers/reports_controller.rb
david 109dcd205c
All checks were successful
/ Run tests (push) Successful in 1m35s
/ Run system tests (push) Successful in 2m31s
/ Build, push and deploy image (push) Successful in 6m18s
Add pandoc
2024-07-26 03:14:07 +02:00

105 lines
2.8 KiB
Ruby

class ReportsController < ApplicationController
before_action :set_report, only: %i[show edit update destroy work]
# GET /reports
def index
@reports = Report.all
end
# GET /reports/1
def show
respond_to do |format|
format.html
format.pdf
format.xlsx do
response.headers['Content-Disposition'] = %(attachment; filename="#{filename(@report, extension: 'xlsx')}")
render
end
format.xml do
response.headers['Content-Disposition'] = %(attachment; filename="#{filename(@report, extension: 'html')}")
render formats: [:odt], layout: false
end
format.rtf do
html = render_to_string(template: 'reports/show', formats: [:odt],
layout: false)
rtf = "{\\rtf1\n#{PandocRuby.html(html).to_rtf}}"
send_data rtf, filename: filename(@report, extension: 'rtf')
end
format.odt do
html = render_to_string(layout: false)
odt = PandocRuby.html(html).to_odt
send_data odt, filename: filename(@report, extension: 'odt')
end
format.docx do
template = Sablon.template(Rails.root.join('lib/templates/docx/report.docx'))
context = {
person: OpenStruct.new(first_name: @report.name),
skills: [],
education: [],
career: [],
referees: []
}
template.render_to_file(Rails.root.join('tmp/output.docx'), context)
send_file Rails.root.join('tmp/output.docx'),
filename: filename(@report, extension: 'docx'),
type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
end
end
end
# GET /reports/new
def new
@report = Report.new
end
# GET /reports/1/edit
def edit
end
# POST /reports
def create
@report = Report.new(report_params)
if @report.save
redirect_to @report, notice: 'Report was successfully created.'
else
render :new, status: :unprocessable_entity
end
end
# PATCH/PUT /reports/1
def update
if @report.update(report_params)
redirect_to @report, notice: 'Report was successfully updated.', status: :see_other
else
render :edit, status: :unprocessable_entity
end
end
# DELETE /reports/1
def destroy
@report.destroy!
redirect_to reports_url, notice: 'Report was successfully destroyed.', status: :see_other
end
def work
@report
end
private
# Use callbacks to share common setup or constraints between actions.
def set_report
@report = Report.find(params[:id])
end
# Only allow a list of trusted parameters through.
def report_params
params.require(:report).permit(:name, :comment_html)
end
def filename(report, extension: 'html')
"#{report.name}-#{Time.current.strftime('%Y%m%d%H%M')}.#{extension}"
end
end