diff --git a/app/assets/javascripts/reports/new.js b/app/assets/javascripts/reports/new.js index e536ab6b8..b63d148c1 100644 --- a/app/assets/javascripts/reports/new.js +++ b/app/assets/javascripts/reports/new.js @@ -1014,35 +1014,31 @@ function reportHandsonTableConverter() { }); // Project content - reportData.project_content = []; + reportData.project_content = { experiments: {}, repositories: [] }; $.each($('.project-contents-container .experiment-element'), function(i, experiment) { - let experimentHash = {}; let expCheckbox = $(experiment).find('.report-experiment-checkbox'); if (!expCheckbox.prop('checked') && !expCheckbox.prop('indeterminate')) return; - experimentHash.experiment_id = $(experiment).find('.report-experiment-checkbox').val(); - experimentHash.my_modules = []; + let experimentId = $(experiment).find('.report-experiment-checkbox').val(); + reportData.project_content.experiments[experimentId] = []; $.each($(experiment).find('.report-my-module-checkbox:checked'), function(j, myModule) { - experimentHash.my_modules.push(myModule.value); + reportData.project_content.experiments[experimentId].push(myModule.value); }); - reportData.project_content.push(experimentHash); + }); + $.each($('.task-contents-container .repositories-contents .sci-checkbox:checked'), function(i, e) { + reportData.project_content.repositories.push(parseInt(e.value, 10)); }); // Settings - if ($('.project-contents-container .select-all-my-modules-checkbox').prop('checked')) { - reportData.report.settings.all_tasks = $('.project-contents-container .select-all-my-modules-checkbox') - .prop('checked'); - } + reportData.report.settings.all_tasks = $('.project-contents-container .select-all-my-modules-checkbox') + .prop('checked'); $.each($('.task-contents-container .content-element .protocol-setting'), function(i, e) { - if (e.checked) { - reportData.report.settings.task.protocol[e.value] = e.checked; - } + reportData.report.settings.task.protocol[e.value] = e.checked; }); $.each($('.task-contents-container .content-element .task-setting'), function(i, e) { - if (e.checked) { - reportData.report.settings.task[e.value] = e.checked; - } + reportData.report.settings.task[e.value] = e.checked; }); + reportData.report.settings.task.result_order = dropdownSelector.getValues('#taskResultsOrder'); return reportData; @@ -1050,8 +1046,12 @@ function reportHandsonTableConverter() { function initGenerateButton() { $('.reports-new').on('click', '.generate-button', function() { - $.post(this.dataset.createUrl, getReportData(), function() { - // TODO + $.ajax({ + url: this.dataset.createUrl, + type: 'POST', + data: JSON.stringify(getReportData()), + contentType: 'application/json; charset=utf-8', + success: function() {} }); }); @@ -1059,8 +1059,13 @@ function reportHandsonTableConverter() { var params = getReportData(); params.report.name = 'New ' + params.report.name; e.preventDefault(); - $.post(this.dataset.createUrl, params, function() { - // TODO + $.ajax({ + url: this.dataset.createUrl, + type: 'POST', + data: JSON.stringify(getReportData()), + contentType: 'application/json; charset=utf-8', + + success: function() {} }); }); @@ -1070,7 +1075,9 @@ function reportHandsonTableConverter() { $.ajax({ type: 'PUT', url: this.dataset.updateUrl, - data: getReportData() + contentType: 'application/json; charset=utf-8', + data: JSON.stringify(getReportData()), + success: function() {} }); }); } @@ -1248,6 +1255,19 @@ function reportHandsonTableConverter() { disableSearch: true }); + function SelectAllRepositoriesStatus() { + var selectAll = $('.task-contents-container .select-all-repositories'); + var all = $('.repositories-contents .sci-checkbox').length; + var checked = $('.repositories-contents .sci-checkbox:checked').length; + selectAll.prop('indeterminate', false); + if (all === checked) { + selectAll.prop('checked', true); + } else { + selectAll.prop('checked', false); + if (checked > 0) selectAll.prop('indeterminate', true); + } + } + $('.task-contents-container') .on('change', '.select-all-task-contents', function() { $('.content-element .sci-checkbox:not(.skip-select-all)') @@ -1260,7 +1280,16 @@ function reportHandsonTableConverter() { .on('change', '.all-results-checkbox', function() { $('.results-type-contents .sci-checkbox:not(.skip-select-all)') .prop('checked', this.checked); + }) + .on('change', '.select-all-repositories', function() { + $('.repositories-contents .sci-checkbox') + .prop('checked', this.checked); + }) + .on('change', '.repositories-contents .sci-checkbox', function() { + SelectAllRepositoriesStatus(); }); + + SelectAllRepositoriesStatus(); } initGenerateButton(); diff --git a/app/assets/stylesheets/reports/new.scss b/app/assets/stylesheets/reports/new.scss index 420c4823e..e88406db5 100644 --- a/app/assets/stylesheets/reports/new.scss +++ b/app/assets/stylesheets/reports/new.scss @@ -488,6 +488,16 @@ } } + .repositories-items-description { + @include font-button; + display: inline-block; + margin-top: 1em; + + .fas { + color: $brand-focus; + } + } + .all-results-container { align-items: flex-start; display: flex; diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 1941177aa..a12fe6ea9 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -51,6 +51,7 @@ class ReportsController < ApplicationController # Report grouped by modules def new @templates = Extends::REPORT_TEMPLATES + @repositories = Repository.accessible_by_teams(current_team).active.select(:id, :name) @report = current_team.reports.new end @@ -107,9 +108,12 @@ class ReportsController < ApplicationController def edit @edit = true @templates = Extends::REPORT_TEMPLATES + @repositories = Repository.accessible_by_teams(current_team).active.select(:id, :name) + @project_contents = { experiments: @report.report_elements.where(type_of: 'experiment').pluck(:experiment_id), - my_modules: @report.report_elements.where(type_of: 'my_module').pluck(:my_module_id) + my_modules: @report.report_elements.where(type_of: 'my_module').pluck(:my_module_id), + repositories: @report.report_elements.where(type_of: 'my_module_repository').pluck(:repository_id).uniq } render :new end diff --git a/app/services/report_actions/report_content.rb b/app/services/report_actions/report_content.rb index 440a3e839..6ec5c6752 100644 --- a/app/services/report_actions/report_content.rb +++ b/app/services/report_actions/report_content.rb @@ -43,17 +43,17 @@ module ReportActions private def generate_content - @content.each do |_i, exp| - generate_experiment_content(exp) + @content['experiments'].each do |exp_id, my_modules| + generate_experiment_content(exp_id, my_modules) end end - def generate_experiment_content(exp) - experiment = Experiment.find_by(id: exp[:experiment_id]) + def generate_experiment_content(exp_id, my_modules) + experiment = Experiment.find_by(id: exp_id) return if !experiment && !can_read_experiment?(experiment, @user) experiment_element = save_element({ 'experiment_id' => experiment.id }, :experiment, nil) - generate_my_modules_content(experiment, experiment_element, exp[:my_modules]) + generate_my_modules_content(experiment, experiment_element, my_modules) end def generate_my_modules_content(experiment, experiment_element, selected_my_modules) @@ -78,6 +78,8 @@ module ReportActions end my_module.experiment.project.assigned_repositories_and_snapshots.each do |repository| + next unless @content['repositories'].include?(repository.id) + save_element( { 'my_module_id' => my_module.id, 'repository_id' => repository.id }, :my_module_repository, diff --git a/app/views/reports/wizard/_third_step.html.erb b/app/views/reports/wizard/_third_step.html.erb index b8314d571..9a52dca80 100644 --- a/app/views/reports/wizard/_third_step.html.erb +++ b/app/views/reports/wizard/_third_step.html.erb @@ -47,6 +47,39 @@ +
  • + + + <%= t("projects.reports.wizard.third_step.assigned_items") %> +
    + + + <%= t("projects.reports.wizard.third_step.assigned_items_description") %> + +
    + +
  • diff --git a/config/locales/en.yml b/config/locales/en.yml index 8d76cfde1..5f0fba8fe 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -558,6 +558,9 @@ en: step_files: "Step files" step_tables: "Step tables" step_comments: "Step comments" + assigned_items: "Assigned items" + assigned_items_description: "Inventories selected below will only contain the items that you assigned to the tasks directly." + include_all_assigned_iitems: "Include all assigned items from the following inventories" results: "Results" all_results: "Include all results" order_results: "Order results"