Create export all PDF when it's needed [SCI-2641]

This commit is contained in:
Matej Zrimšek 2018-09-16 19:33:43 +02:00
parent c0dc4f6951
commit 476b6d50a2

View file

@ -182,10 +182,7 @@ class ReportsController < ApplicationController
def export_project_pdf(project)
@project = project
@report = Report.first
# cleans all the deleted report
current_team_switch(@report.project.team)
@report.cleanup_report
@report = generate_export_all_report
page_html_string = render_to_string 'reports/new.html.erb', export_all: true
parsed_page_html = Nokogiri::HTML(page_html_string)
@ -216,6 +213,208 @@ class ReportsController < ApplicationController
)
end
def generate_export_all_report
report_contents = []
report_contents << {
'type_of' => 'project_header',
'id' => {
'project_id' => @project.id
},
'sort_order' => nil,
'children' => []
}
@project.experiments.each do |exp|
modules = []
exp.my_modules.each do |my_module|
module_children = []
my_module.protocol.steps.each do |step|
step_children = []
step.assets.each do |asset|
step_children << {
'type_of' => 'step_asset',
'id' => {
'asset_id' => asset.id
},
'sort_order' => nil,
'children' => []
}
end
step.tables.each do |table|
step_children << {
'type_of' => 'step_table',
'id' => {
'table_id' => table.id
},
'sort_order' => nil,
'children' => []
}
end
step.checklists.each do |step_checklist|
step_children << {
'type_of' => 'step_checklist',
'id' => {
'checklist_id' => step_checklist.id
},
'sort_order' => nil,
'children' => []
}
end
if step.step_comments.any?
step_children << {
'type_of' => 'step_comments',
'id' => {
'step_id' => step.id
},
'sort_order' => 'asc',
'children' => []
}
end
module_children << {
'type_of' => 'step',
'id' => {
'step_id' => step.id
},
'sort_order' => nil,
'children' => step_children
}
end
my_module.results.each do |result|
if result.asset
result_comments = []
if result.result_comments.any?
result_comments << {
'type_of' => 'result_comments',
'id' => {
'result_id' => result.id
},
'sort_order' => 'asc',
'children' => []
}
end
module_children << {
'type_of' => 'result_asset',
'id' => {
'result_id' => result.id
},
'sort_order' => nil,
'children' => []
}
elsif result.table
result_comments = []
if result.result_comments.any?
result_comments << {
'type_of' => 'result_comments',
'id' => {
'result_id' => result.id
},
'sort_order' => 'asc',
'children' => []
}
end
module_children << {
'type_of' => 'result_table',
'id' => {
'result_id' => result.id
},
'sort_order' => nil,
'children' => result_comments
}
elsif result.result_text
result_comments = []
if result.result_comments.any?
result_comments << {
'type_of' => 'result_comments',
'id' => {
'result_id' => result.id
},
'sort_order' => 'asc',
'children' => []
}
end
module_children << {
'type_of' => 'result_text',
'id' => {
'result_id' => result.id
},
'sort_order' => nil,
'children' => result_comments
}
end
end
if my_module.activities.any?
module_children << {
'type_of' => 'my_module_activity',
'id' => {
'my_module_id' => my_module.id
},
'sort_order' => 'asc',
'children' => []
}
end
module_repositories_id =
my_module.repository_rows.map(&:repository_id).uniq
module_repositories_id.each do |repo_id|
module_children << {
'type_of' => 'my_module_repository',
'id' => {
'my_module_id' => my_module.id,
'repository_id' => repo_id
},
'sort_order' => 'asc',
'children' => []
}
end
modules << {
'type_of' => 'my_module',
'id' => {
'my_module_id' => my_module.id
},
'sort_order' => nil,
'children' => module_children
}
end
report_contents << {
'type_of' => 'experiment',
'id' => {
'experiment_id' => exp.id
},
'sort_order' => nil,
'children' => modules
}
end
report = Report.new
token = loop do
token = SecureRandom.hex(10)
break token unless Report.where(name: token).exists?
end
report.name = token
report.project = @project
report.user = current_user
report.team = current_team
report.last_modified_by = current_user
report.save_with_contents(report_contents)
# TODO: do report.destroy after it is downloaded
report
end
def save_pdf_to_inventory_item
save_pdf_to_inventory_item = ReportActions::SavePdfToInventoryItem.new(
current_user, current_team, save_PDF_params