Merge pull request #3397 from okriuchykhin/ok_SCI_5831

Fix repositories selection in report wizard and deleted repositories handling [SCI-5831]
This commit is contained in:
Alex Kriuchykhin 2021-06-18 10:35:59 +02:00 committed by GitHub
commit 945d5ea6c6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 44 additions and 69 deletions

View file

@ -975,7 +975,7 @@ function reportHandsonTableConverter() {
reportData.report = {
name: $('.report-name').val(),
description: $('#projectDescription').val(),
settings: { task: { protocol: {} }, deleted_repositories: [] }
settings: { task: { protocol: {} } }
};
// Project
reportData.project_id = dropdownSelector.getValues('#projectSelector');
@ -1046,9 +1046,6 @@ function reportHandsonTableConverter() {
$.each($('.task-contents-container .content-element .task-setting'), function(i, e) {
reportData.report.settings.task[e.value] = e.checked;
});
$.each($('.task-contents-container .repositories-contents .deleted-repositories-setting:checked'), function(i, e) {
reportData.report.settings.deleted_repositories.push(parseInt(e.value, 10));
});
reportData.report.settings.task.result_order = dropdownSelector.getValues('#taskResultsOrder');

View file

@ -25,12 +25,11 @@ class ReportsController < ApplicationController
before_action :load_vars, only: %i(edit update document_preview generate_pdf generate_docx status
save_pdf_to_inventory_modal save_pdf_to_inventory_item)
before_action :load_vars_nested, only: BEFORE_ACTION_METHODS
before_action :load_visible_projects, only: %i(new edit)
before_action :load_wizard_vars, only: %i(new edit)
before_action :load_available_repositories, only: %i(index save_pdf_to_inventory_modal available_repositories)
before_action :check_manage_permissions, only: BEFORE_ACTION_METHODS
before_action :switch_team_with_param, only: :index
before_action :load_repositories, only: %i(new edit)
after_action :generate_pdf_report, only: %i(create update generate_pdf)
@ -112,7 +111,6 @@ class ReportsController < ApplicationController
def edit
@edit = true
@templates = Extends::REPORT_TEMPLATES
@active_template = @report.settings[:template]
@report.settings = Report::DEFAULT_SETTINGS if @report.settings.blank?
@ -496,16 +494,6 @@ class ReportsController < ApplicationController
include StringUtility
AvailableRepository = Struct.new(:id, :name)
def load_repositories
@repositories = Repository.accessible_by_teams(current_team).order(:name)
@deleted_repositories = RepositorySnapshot.where(team: current_team)
.group(:parent_id, :name)
.where.not(
original_repository: Repository.accessible_by_teams(current_team)
)
.select(:parent_id, :name)
end
def load_vars
@report = current_team.reports.find_by(id: params[:id])
render_404 unless @report
@ -518,12 +506,14 @@ class ReportsController < ApplicationController
render_403 unless can_read_project?(@project)
end
def check_manage_permissions
render_403 unless can_manage_reports?(@project.team)
end
def load_visible_projects
render_404 unless current_team
def load_wizard_vars
@templates = Extends::REPORT_TEMPLATES
live_repositories = Repository.accessible_by_teams(current_team)
snapshots_of_deleted = RepositorySnapshot.left_outer_joins(:original_repository)
.where(team: current_team)
.where.not(original_repository: live_repositories)
.select('DISTINCT ON ("repositories"."parent_id") "repositories".*')
@repositories = (live_repositories + snapshots_of_deleted).sort_by { |r| r.name.downcase }
@visible_projects = Project.active
.viewable_by_user(current_user, current_team)
.joins(experiments: :my_modules)
@ -532,6 +522,10 @@ class ReportsController < ApplicationController
.select(:id, :name)
end
def check_manage_permissions
render_403 unless can_manage_reports?(@project.team)
end
def load_available_repositories
@available_repositories = []
repositories = Repository.active

View file

@ -45,6 +45,7 @@ module ReportsHelper
end
children_html.safe_concat render_new_element(false)
end
locals[:report_element] = element
locals[:children] = children_html
if provided_locals[:export_all]
@ -116,19 +117,15 @@ module ReportsHelper
)
end
def assigned_repository_or_snapshot(my_module, element_id, snapshot, repository)
if element_id
repository = Repository.accessible_by_teams(my_module.experiment.project.team).find_by(id: element_id)
# Check for default set snapshots when repository still exists
if repository
selected_snapshot = repository.repository_snapshots.where(my_module: my_module).find_by(selected: true)
repository = selected_snapshot if selected_snapshot
def assigned_repository_or_snapshot(my_module, repository)
if repository.is_a?(RepositorySnapshot)
return my_module.repository_snapshots.find_by(parent_id: repository.parent_id, selected: true)
end
repository ||= RepositorySnapshot.joins(my_module: { experiment: :project })
.where(my_module: { experiments: { project: my_module.experiment.project } })
.find_by(id: element_id)
end
repository || snapshot
return nil unless my_module.assigned_repositories.exists?(id: repository.id)
selected_snapshot = repository.repository_snapshots.find_by(my_module: my_module, selected: true)
selected_snapshot || repository
end
def assigned_repositories_in_project_list(project)

View file

@ -3,6 +3,7 @@
module ReportActions
class ReportContent
include Canaid::Helpers::PermissionsHelper
include ReportsHelper
MY_MODULE_ADDONS_ELEMENTS = []
@ -81,7 +82,8 @@ module ReportActions
my_module_element = save_element!({ 'my_module_id' => my_module.id }, :my_module, experiment_element)
@repositories.each do |repository|
next unless my_module.live_and_snapshot_repositories_list.pluck(:id).include?(repository.id)
repository = assigned_repository_or_snapshot(my_module, repository)
next unless repository
save_element!(
{ 'my_module_id' => my_module.id, 'repository_id' => repository.id },

View file

@ -88,11 +88,6 @@ module Reports::Docx::DrawMyModule
end
end
@settings['deleted_repositories']&.each do |repo|
snapshot = my_module.repository_snapshots.where(parent_id: repo).find_by(selected: true)
draw_my_module_repository(nil, my_module, snapshot) if snapshot
end
@docx.p
subject.children.active.each do |child|
public_send("draw_#{child.type_of}", child)

View file

@ -1,12 +1,12 @@
# frozen_string_literal: true
module Reports::Docx::DrawMyModuleRepository
def draw_my_module_repository(subject, my_module = nil, snapshot = nil)
my_module ||= subject&.my_module
repository = subject&.repository
repository = assigned_repository_or_snapshot(my_module, repository&.id, nil, snapshot)
def draw_my_module_repository(subject)
my_module = subject.my_module
repository = subject.repository
repository = assigned_repository_or_snapshot(my_module, repository)
return unless can_read_experiment?(@user, my_module.experiment) &&
(can_read_repository?(@user, repository) || repository.is_a?(RepositorySnapshot))
(repository.is_a?(RepositorySnapshot) || can_read_repository?(@user, repository))
repository_data = my_module.repository_docx_json(repository)

View file

@ -98,11 +98,6 @@
<%= render partial: 'reports/elements/my_module_result_text_element.html.erb', locals: { result: result, export_all: export_all } %>
<% end %>
<% end %>
<% @settings['deleted_repositories']&.each do |repo| %>
<% snapshot = my_module.repository_snapshots.where(parent_id: repo).find_by(selected: true) %>
<%= render partial: 'reports/elements/my_module_repository_element.html.erb', locals: { repository_snapshot: snapshot, export_all: export_all, my_module: my_module } if snapshot %>
<% end %>
</div>
<% if defined?(children) %>

View file

@ -1,8 +1,7 @@
<% my_module ||= @my_module %>
<% repository ||= nil %>
<% repository_snapshot ||= nil %>
<% repository ||= report_element.repository %>
<% element_id ||= repository&.id %>
<% repository ||= assigned_repository_or_snapshot(my_module, element_id, repository, repository_snapshot) %>
<% repository ||= assigned_repository_or_snapshot(my_module, repository) %>
<% timestamp = Time.current + 1.year - 1.days %>
<% rows_json = my_module.repository_json_hot(repository, :desc) %>
<div class="report-element report-module-repository-element"

View file

@ -69,28 +69,24 @@
<% @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) %> />
<input type="checkbox"
class="sci-checkbox repositories-setting"
value="<%= repository.id %>"
<%= 'checked' if report.new_record? ||
@project_contents[:repositories].include?(repository.id) ||
(repository.is_a?(Repository) && repository.repository_snapshots.exists?(id: @project_contents[:repositories])) %> />
<span class="sci-checkbox-label"></span>
</span>
<%= repository.name %>
<% unless repository.active? %>
<% if repository.archived? %>
<span class="archived">
<%= t("projects.reports.wizard.third_step.archived") %>
</span>
<% end %>
<div class="divider"></div>
</li>
<% end %>
<% @deleted_repositories.each do |repository| %>
<li>
<span class="sci-checkbox-container">
<input type="checkbox" class="sci-checkbox deleted-repositories-setting" value="<%= repository.parent_id %>" <%= 'checked' if report.new_record? || report.settings.dig(:deleted_repositories).include?(repository.parent_id) %> />
<span class="sci-checkbox-label"></span>
</span>
<%= repository.name %>
<% elsif repository.is_a?(RepositorySnapshot) %>
<span class="deleted">
<%= t("projects.reports.wizard.third_step.deleted") %>
</span>
<% end %>
<div class="divider"></div>
</li>
<% end %>