diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 4a9d89148..a36c8c1e3 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -400,23 +400,39 @@ class ReportsController < ApplicationController .keys .collect { |id| id.to_i } - modules.each do |module_id| - my_module = MyModule.find_by_id(module_id) - if my_module.present? - res << generate_new_el(false) - el = generate_el( - "reports/elements/my_module_element.html.erb", - { my_module: my_module } - ) - el[:children] = generate_module_contents_json(my_module) - res << el - end + # Get unique experiments from given modules + experiments = MyModule.where(id: modules).map(&:experiment).uniq + experiments.each do |experiment| + res << generate_new_el(false) + el = generate_el( + "reports/elements/experiment_element.html.erb", + { experiment: experiment } + ) + el[:children] = generate_experiment_contents_json(experiment, modules) + res << el end end res << generate_new_el(false) res end + def generate_experiment_contents_json(experiment, selected_modules) + res = [] + experiment.my_modules.each do |my_module| + if selected_modules.include?(my_module.id) + res << generate_new_el(false) + el = generate_el( + "reports/elements/my_module_element.html.erb", + { my_module: my_module } + ) + el[:children] = generate_module_contents_json(my_module) + res << el + res << generate_new_el(false) + end + end + res + end + def generate_module_contents_json(my_module) res = [] if (in_params? :module_steps) && my_module.protocol.present? then diff --git a/app/views/reports/elements/_experiment_element.html.erb b/app/views/reports/elements/_experiment_element.html.erb new file mode 100644 index 000000000..519f64b73 --- /dev/null +++ b/app/views/reports/elements/_experiment_element.html.erb @@ -0,0 +1,40 @@ +<% timestamp = experiment.created_at %> +<% name = experiment.name %> +