Move PDF generation and export logic of export all PDF to the model

This commit is contained in:
Matej Zrimšek 2018-10-14 22:52:54 +02:00
parent 69f3a919db
commit 48a6a64502
3 changed files with 49 additions and 44 deletions

View file

@ -11,7 +11,6 @@ class ReportsController < ApplicationController
edit
update
generate
export_whole_project_pdf
save_modal
project_contents_modal
experiment_contents_modal
@ -181,43 +180,6 @@ class ReportsController < ApplicationController
end
end
def export_whole_project_pdf(project)
@project = project
@report = Report.generate_whole_project_report(
@project, current_user, current_team
)
page_html_string = render_to_string 'reports/new.html.erb',
locals: { export_all: true }
parsed_page_html = Nokogiri::HTML(page_html_string)
parsed_pdf_html = parsed_page_html.at_css('#report-content')
@report.destroy
filename = "#{@project.name}_Report.pdf"
parsed_pdf = render_to_string(
pdf: filename,
header: { right: '[page] of [topage]' },
locals: { content: parsed_pdf_html.to_s },
template: 'reports/report.pdf.erb',
disable_javascript: true,
disable_internal_links: false
)
# Dirty workaround to convert absolute links back to relative ones, since
# WickedPdf does the opposite, based on the path where the file parsing is
# done
parsed_pdf_with_relative_links =
parsed_pdf.gsub('/URI (file:////tmp/', '/URI (')
zip = ZipExport.create(user: current_user)
zip.generate_exportable_zip(
current_user,
parsed_pdf_with_relative_links,
:team,
filename: filename
)
end
def save_pdf_to_inventory_item
save_pdf_to_inventory_item = ReportActions::SavePdfToInventoryItem.new(
current_user, current_team, save_PDF_params

View file

@ -221,4 +221,47 @@ class Project < ApplicationRecord
end
res
end
def export_report(user, team)
ActionController::Renderer::RACK_KEY_TRANSLATION['warden'] ||= 'warden'
proxy = Warden::Proxy.new({}, Warden::Manager.new({}))
renderer = ApplicationController.renderer.new(warden: proxy)
report = Report.generate_whole_project_report(
self, user, team
)
page_html_string = renderer.render 'reports/new.html.erb',
locals: { export_all: true },
assigns: { project: self,
report: report }
parsed_page_html = Nokogiri::HTML(page_html_string)
parsed_pdf_html = parsed_page_html.at_css('#report-content')
report.destroy
filename = "#{name}_Report.pdf"
parsed_pdf = ApplicationController.render(
pdf: filename,
header: { right: '[page] of [topage]' },
locals: { content: parsed_pdf_html.to_s },
template: 'reports/report.pdf.erb',
disable_javascript: true,
disable_internal_links: false,
current_user: user,
current_team: team
)
# Dirty workaround to convert absolute links back to relative ones, since
# WickedPdf does the opposite, based on the path where the file parsing is
# done
parsed_pdf_with_relative_links =
parsed_pdf.gsub('/URI (file:////tmp/', '/URI (')
zip = ZipExport.create(user: user)
zip.generate_exportable_zip(
user,
parsed_pdf_with_relative_links,
:team,
filename: filename
)
end
end

View file

@ -14,15 +14,15 @@
id="data-holder"
class="hidden"
data-project-modal-title="<%=t "projects.reports.elements.modals.project_contents.head_title" %>"
data-add-project-contents-url="<%= project_contents_modal_project_reports_url %>"
data-add-experiment-contents-url="<%= experiment_contents_modal_project_reports_url %>"
data-add-module-contents-url="<%= module_contents_modal_project_reports_url %>"
data-add-step-contents-url="<%= step_contents_modal_project_reports_url %>"
data-add-result-contents-url="<%= result_contents_modal_project_reports_url %>"
data-add-project-contents-url="<%= project_contents_modal_project_reports_url(@project) %>"
data-add-experiment-contents-url="<%= experiment_contents_modal_project_reports_url(@project) %>"
data-add-module-contents-url="<%= module_contents_modal_project_reports_url(@project) %>"
data-add-step-contents-url="<%= step_contents_modal_project_reports_url(@project) %>"
data-add-result-contents-url="<%= result_contents_modal_project_reports_url(@project) %>"
data-stylesheet-url="<%= stylesheet_path "application" %>"
data-print-title="<%=t "projects.reports.print_title", project: @project.name %>"
data-project-id="<%= @project.id %>"
data-save-report-url="<%= save_modal_project_reports_url %>"
data-save-report-url="<%= save_modal_project_reports_url(@project) %>"
data-report-id="<%= @report.present? ? @report.id : "" %>"
data-unsaved-work-text="<%=t "projects.reports.new.unsaved_work" %>"
data-global-sort-text="<%=t "projects.reports.new.global_sort" %>"></div>