Add repositories settings to report wizard [SCI-5648] (#3269)

* Add repositories settings to report wizard [SCI-5648]

* Move repositories from report settings to content [SCI-5648]
This commit is contained in:
aignatov-bio 2021-04-28 09:54:00 +02:00 committed by GitHub
parent fe48e35cf0
commit 7c75f170d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 108 additions and 27 deletions

View file

@ -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');
}
$.each($('.task-contents-container .content-element .protocol-setting'), function(i, e) {
if (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.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();

View file

@ -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;

View file

@ -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

View file

@ -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,

View file

@ -47,6 +47,39 @@
</li>
</ul>
</li>
<li class="content-element">
<i class="fas fa-caret-down " data-toggle="collapse" href="#resultContents" aria-expanded="false"></i>
<span class="content-element-title">
<%= t("projects.reports.wizard.third_step.assigned_items") %>
</span><br>
<span class="repositories-items-description">
<i class="fas fa-info-circle"></i>
<%= t("projects.reports.wizard.third_step.assigned_items_description") %>
</span>
<div class="divider"></div>
<ul class="collapse in" id="resultContents">
<li>
<span class="sci-checkbox-container">
<input type="checkbox" class="sci-checkbox select-all-repositories"/>
<span class="sci-checkbox-label"></span>
</span>
<%= t("projects.reports.wizard.third_step.include_all_assigned_iitems") %>
<div class="divider"></div>
<ul class="repositories-contents">
<% @repositories.each do |repository| %>
<li>
<span class="sci-checkbox-container">
<input type="checkbox" class="sci-checkbox repositories-setting" value="<%= repository.id %>" <%= 'checked' if report.new_record? || @project_contents[:repositories].include?(repository.id) %> />
<span class="sci-checkbox-label"></span>
</span>
<%= repository.name %>
<div class="divider"></div>
</li>
<% end %>
</ul>
</li>
</ul>
</li>
<li class="content-element">
<i class="fas fa-caret-down " data-toggle="collapse" href="#resultContents" aria-expanded="false"></i>
<span class="content-element-title">

View file

@ -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"