From a16d16bc5b76f7ea32d4e7b2c0cdddffefd11fbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Zrim=C5=A1ek?= Date: Sun, 16 Sep 2018 21:00:09 +0200 Subject: [PATCH] Move export all report business logic to model [SCI-2641] --- app/controllers/reports_controller.rb | 207 +------------------------- app/models/report.rb | 202 +++++++++++++++++++++++++ 2 files changed, 206 insertions(+), 203 deletions(-) diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 783a55524..be08e48c8 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -180,9 +180,11 @@ class ReportsController < ApplicationController end end - def export_project_pdf(project) + def export_whole_project_pdf(project) @project = project - @report = generate_export_all_report + @report = Report.generate_whole_project_report( + @project, current_user, current_team + ) page_html_string = render_to_string 'reports/new.html.erb', export_all: true parsed_page_html = Nokogiri::HTML(page_html_string) @@ -214,207 +216,6 @@ 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) - report - end - def save_pdf_to_inventory_item save_pdf_to_inventory_item = ReportActions::SavePdfToInventoryItem.new( current_user, current_team, save_PDF_params diff --git a/app/models/report.rb b/app/models/report.rb index 3a927f44a..17324a55f 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -93,6 +93,208 @@ class Report < ApplicationRecord end end + def self.generate_whole_project_report(project, current_user, current_team) + 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 + + dummy_name = loop do + dummy_name = SecureRandom.hex(10) + break dummy_name unless Report.where(name: dummy_name).exists? + end + + report = Report.new + report.name = dummy_name + report.project = project + report.user = current_user + report.team = current_team + report.last_modified_by = current_user + + report.save_with_contents(report_contents) + report + end + private # Recursively save a single JSON element