mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-10-11 22:36:33 +08:00
Refactor ReportsHelper#render_report_element
This commit is contained in:
parent
aa30cf6130
commit
67d51a8880
1 changed files with 51 additions and 43 deletions
|
@ -7,8 +7,19 @@ module ReportsHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_report_element(element, provided_locals = nil)
|
def render_report_element(element, provided_locals = nil)
|
||||||
children_html = ''.html_safe
|
# Determine partial
|
||||||
|
|
||||||
|
file_name = element.type_of
|
||||||
|
if element.type_of.in? ReportExtends::MY_MODULE_CHILDREN_ELEMENTS
|
||||||
|
file_name = "my_module_#{element.type_of.singularize}"
|
||||||
|
end
|
||||||
|
view = "reports/elements/#{file_name}_element.html.erb"
|
||||||
|
|
||||||
|
# Set locals
|
||||||
|
|
||||||
|
locals = provided_locals.nil? ? {} : provided_locals.clone
|
||||||
|
|
||||||
|
children_html = ''.html_safe
|
||||||
# First, recursively render element's children
|
# First, recursively render element's children
|
||||||
if element.comments? || element.project_header?
|
if element.comments? || element.project_header?
|
||||||
# Render no children
|
# Render no children
|
||||||
|
@ -33,25 +44,18 @@ module ReportsHelper
|
||||||
end
|
end
|
||||||
children_html.safe_concat render_new_element(false)
|
children_html.safe_concat render_new_element(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
file_name = element.type_of
|
|
||||||
if element.type_of.in? ReportExtends::MY_MODULE_CHILDREN_ELEMENTS
|
|
||||||
file_name = "my_module_#{element.type_of.singularize}"
|
|
||||||
end
|
|
||||||
view = "reports/elements/#{file_name}_element.html.erb"
|
|
||||||
|
|
||||||
locals = provided_locals.nil? ? {} : provided_locals.clone
|
|
||||||
locals[:children] = children_html
|
locals[:children] = children_html
|
||||||
|
|
||||||
if provided_locals[:export_all]
|
if provided_locals[:export_all]
|
||||||
# Set path and filename local variables for files and tables
|
# Set path and filename locals for files and tables in export all ZIP
|
||||||
|
|
||||||
if element['type_of'] == 'my_module_repository'
|
if element['type_of'] == 'my_module_repository'
|
||||||
obj_name = Repository.find(element[:repository_id]).name + '.csv'
|
obj = Repository.find(element[:repository_id])
|
||||||
|
obj_filename = obj_name_to_filename(obj)
|
||||||
obj_folder_name = 'Inventories'
|
obj_folder_name = 'Inventories'
|
||||||
|
|
||||||
locals[:filename] = obj_name
|
locals[:filename] = obj_filename
|
||||||
locals[:path] = "#{obj_folder_name}/#{obj_name}"
|
locals[:path] = "#{obj_folder_name}/#{obj_filename}"
|
||||||
elsif element['type_of'].in? %w(step_asset step_table result_asset
|
elsif element['type_of'].in? %w(step_asset step_table result_asset
|
||||||
result_table)
|
result_table)
|
||||||
|
|
||||||
|
@ -61,37 +65,26 @@ module ReportsHelper
|
||||||
.find(parent_el["#{parent_type}_id"])
|
.find(parent_el["#{parent_type}_id"])
|
||||||
|
|
||||||
if parent.class == Step
|
if parent.class == Step
|
||||||
obj_name = if element['type_of'] == 'step_asset'
|
obj = if element['type_of'] == 'step_asset'
|
||||||
name = Asset.find(element[:asset_id]).file_file_name
|
Asset.find(element[:asset_id])
|
||||||
suffix = name.split('.').second
|
elsif element['type_of'] == 'step_table'
|
||||||
suffix.prepend('.') if suffix
|
Table.find(element[:table_id])
|
||||||
name.split('.').first
|
end
|
||||||
else
|
obj_filename = obj_name_to_filename(obj,
|
||||||
name = Table.find(element[:table_id]).name
|
"_Step#{parent.position + 1}")
|
||||||
suffix = '.csv'
|
|
||||||
name.empty? ? 'Table' : name
|
|
||||||
end
|
|
||||||
obj_name = to_filesystems_compatible_filename(obj_name)
|
|
||||||
obj_name += "_Step#{parent.position + 1}#{suffix}"
|
|
||||||
obj_folder_name = 'Protocol attachments'
|
obj_folder_name = 'Protocol attachments'
|
||||||
parent_module = if parent.protocol.present?
|
parent_module = if parent.protocol.present?
|
||||||
parent.protocol.my_module
|
parent.protocol.my_module
|
||||||
else
|
else
|
||||||
parent.my_module
|
parent.my_module
|
||||||
end
|
end
|
||||||
else
|
elsif parent.class == MyModule
|
||||||
obj_name = if element['type_of'] == 'result_asset'
|
obj = if element['type_of'] == 'result_asset'
|
||||||
name = Asset.find(element[:result_id]).file_file_name
|
Result.find(element[:result_id]).asset
|
||||||
suffix = name.split('.').second
|
elsif element['type_of'] == 'result_table'
|
||||||
suffix.prepend('.') if suffix
|
Result.find(element[:result_id])
|
||||||
name.split('.').first
|
end
|
||||||
else
|
obj_filename = obj_name_to_filename(obj)
|
||||||
name = Result.find(element[:result_id]).name
|
|
||||||
suffix = '.csv'
|
|
||||||
name.empty? ? 'Table' : name
|
|
||||||
end
|
|
||||||
obj_name = to_filesystems_compatible_filename(obj_name)
|
|
||||||
obj_name += suffix
|
|
||||||
obj_folder_name = 'Results attachments'
|
obj_folder_name = 'Results attachments'
|
||||||
parent_module = parent
|
parent_module = parent
|
||||||
end
|
end
|
||||||
|
@ -101,21 +94,21 @@ module ReportsHelper
|
||||||
parent_exp_name =
|
parent_exp_name =
|
||||||
to_filesystems_compatible_filename(parent_module.experiment.name)
|
to_filesystems_compatible_filename(parent_module.experiment.name)
|
||||||
|
|
||||||
locals[:filename] = obj_name
|
locals[:filename] = obj_filename
|
||||||
locals[:path] = "#{parent_exp_name}/#{parent_module_name}/" \
|
locals[:path] = "#{parent_exp_name}/#{parent_module_name}/" \
|
||||||
"#{obj_folder_name}/#{obj_name}"
|
"#{obj_folder_name}/#{obj_filename}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# ReportExtends is located in config/initializers/extends/report_extends.rb
|
# ReportExtends is located in config/initializers/extends/report_extends.rb
|
||||||
|
|
||||||
ReportElement.type_ofs.keys.each do |type|
|
ReportElement.type_ofs.keys.each do |type|
|
||||||
next unless element.public_send("#{type}?")
|
next unless element.public_send("#{type}?")
|
||||||
element.element_references.each do |el_ref|
|
element.element_references.each do |el_ref|
|
||||||
locals[el_ref.class.name.underscore.to_sym] = el_ref
|
locals[el_ref.class.name.underscore.to_sym] = el_ref
|
||||||
end
|
end
|
||||||
locals[:order] = element
|
if type.in? ReportExtends::SORTED_ELEMENTS
|
||||||
.sort_order if type.in? ReportExtends::SORTED_ELEMENTS
|
locals[:order] = element.sort_order
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
(render partial: view, locals: locals).html_safe
|
(render partial: view, locals: locals).html_safe
|
||||||
|
@ -180,4 +173,19 @@ module ReportsHelper
|
||||||
end
|
end
|
||||||
html_doc.to_s
|
html_doc.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def obj_name_to_filename(obj, name_suffix = '')
|
||||||
|
obj_name = if obj.class == Asset
|
||||||
|
obj_name, suffix = obj.file_file_name.split('.')
|
||||||
|
suffix.prepend('.') if suffix
|
||||||
|
obj_name
|
||||||
|
elsif obj.class.in? [Table, Result, Repository]
|
||||||
|
suffix = '.csv'
|
||||||
|
obj.name.present? ? obj.name : obj.class.name
|
||||||
|
end
|
||||||
|
obj_name = to_filesystems_compatible_filename(obj_name)
|
||||||
|
obj_name += "#{name_suffix}#{suffix}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue