Add additional custom fields for reports [SCI-5609]

This commit is contained in:
Oleksii Kriuchykhin 2021-04-19 10:17:44 +02:00
parent d18a54c874
commit a67cc619ec
10 changed files with 60 additions and 28 deletions

View file

@ -1220,8 +1220,20 @@ function reportHandsonTableConverter() {
disableSearch: true,
onChange: function() {
let template = $('#templateSelector').val();
$.get($('#templateSelector').data('valuesEditorPath'), { template: template }, function(result) {
let params = {
project_id: dropdownSelector.getValues('#projectSelector'),
template: template
};
$.get($('#templateSelector').data('valuesEditorPath'), params, function(result) {
$('.report-template-values-container').html(result.html);
$('.report-template-value-dropdown').each(function() {
dropdownSelector.init($(this), {
singleSelect: false,
closeOnSelect: true,
noEmptyOption: true,
selectAppearance: 'simple'
});
});
});
}
});

View file

@ -4,7 +4,7 @@
<% @items.each do |key, value| %>
<li>
<div class="sci-checkbox-container">
<%= check_box_tag "#{@name}[]", key, (@value && @value[key.to_s] == 'true') ,class: 'sci-checkbox', data: { type: 'MultiCheckboxInputComponent' } %>
<%= check_box_tag "#{@name}[]", key, (@value && @value[key.to_s] == 'true'), class: 'sci-checkbox', data: { type: 'MultiCheckboxInputComponent' } %>
<span class="sci-checkbox-label"></span>
</div>
<%= value %>

View file

@ -0,0 +1,11 @@
<% if @editing %>
<div class="sci-input-container">
<%= label_tag @name, @label %>
<%= select_tag @name, options_from_collection_for_select(@project_members, :id, :name), placeholder: @placeholder, class: 'sci-input-field report-template-value-dropdown', data: { type: 'ProjectMembersInputComponent' } %>
</div>
<% else %>
<% @project_members.where(id: @value).pluck(@displayed_field).each do |field| %>
<%= field %>
<br>
<% end %>
<% end %>

View file

@ -1,10 +1,11 @@
# frozen_string_literal: true
module Reports
class TeamMemberInputComponent < TemplateValueComponent
def initialize(report:, name:, label:, placeholder: nil, editing: true, team:)
class ProjectMembersInputComponent < TemplateValueComponent
def initialize(report:, name:, label:, placeholder: nil, editing: true, displayed_field: :full_name)
super(report: report, name: name, label: label, placeholder: placeholder, editing: editing)
@team_members = team.users
@project_members = report.project&.users
@displayed_field = displayed_field
end
end
end

View file

@ -1,8 +0,0 @@
<% if @editing %>
<div class="sci-input-container">
<%= label_tag @name, @label %>
<%= select_tag @name, options_from_collection_for_select(@team_members, :id, :name), placeholder: @placeholder, class: 'sci-input-field', data: { type: 'TeamMemberInputComponent' } %>
</div>
<% else %>
<%= @value %>
<% end %>

View file

@ -10,6 +10,7 @@ class ReportsController < ApplicationController
generate_pdf
generate_docx
save_modal
new_template_values
project_contents
experiment_contents_modal
module_contents_modal
@ -57,6 +58,9 @@ class ReportsController < ApplicationController
template = Extends::REPORT_TEMPLATES[params[:template].to_sym]
return render_404 if template.blank?
report = current_team.reports.where(project: @project).find_by(id: params[:report_id])
report ||= current_team.reports.new(project: @project)
respond_to do |format|
format.json do
if lookup_context.template_exists?("reports/templates/#{template}/edit.html.erb")
@ -64,7 +68,7 @@ class ReportsController < ApplicationController
html: render_to_string(
template: "reports/templates/#{template}/edit.html.erb",
layout: 'reports/template_values_editor',
locals: { report: Report.find_by(id: params[:report_id]) || Report.new }
locals: { report: report }
)
}
else

View file

@ -173,6 +173,19 @@ module ReportsHelper
html_doc.to_s
end
def report_experiment_descriptions(report)
report.report_elements.experiment.pluck(:description)
end
def assigned_to_report_repository_items(report, repository_name)
repository = Repository.accessible_by_teams(report.team).where(name: repository_name).take
return RepositoryRow.none if repository.blank?
my_modules = MyModule.where(experiment: { project: report.project })
.where(id: report.report_elements.my_module.select(:my_module_id))
repository.repository_rows.joins(:my_modules).where(my_modules: my_modules)
end
private
def obj_name_to_filename(obj, filename_suffix = '')

View file

@ -84,7 +84,10 @@
1. PRODUCT
</div>
<div class="cell-value">
<%# template[:product] %> %>
<% report_experiment_descriptions(report).each do |description| %>
<%= description %>
<br>
<% end %>
</div>
</td>
<td colspan=5>
@ -92,7 +95,7 @@
2. SAMPLE NUMBER
</div>
<div class="cell-value">
<%# template[:sample_number] %>
<%= assigned_to_report_repository_items(report, 'Samples').pluck(:name).join(', ') %>
</div>
</td>
</tr>
@ -246,7 +249,7 @@
11. RESERVE SAMPLE
</div>
<div class="cell-value">
<%# template[:reserve_sample] %>
<%= render Reports::TextInputComponent.new(report: report, name: :reserve_sample, label: 'Reserve sample', editing: false) %>
</div>
</td>
</tr>

View file

@ -1,8 +1,3 @@
<% content_for :header do %>
<%= render Reports::TextInputComponent.new(report: report, name: :product, label: 'Product') %>
<%= render Reports::TextInputComponent.new(report: report, name: :sample_number, label: 'Sample number') %>
<% end %>
<% content_for :cover do %>
<%= render Reports::MultiCheckboxInputComponent.new(
report: report,
@ -31,6 +26,7 @@
<%= render Reports::CheckboxInputComponent.new(report: report, name: :labeling_none, label: 'None') %>
<%= render Reports::LargeTextInputComponent.new(report: report, name: :analysis_summary, label: 'Summary of analysis') %>
<%= render Reports::TextInputComponent.new(report: report, name: :reserve_sample, label: 'Reserve sample') %>
<%= render Reports::CheckboxInputComponent.new(report: report, name: :analyst_signature_broke, label: 'Broke seal') %>
<%= render Reports::TextInputComponent.new(report: report, name: :analyst_signature_a, label: 'Analyst signature A') %>
<%= render Reports::TextInputComponent.new(report: report, name: :analyst_signature_b, label: 'Analyst signature B') %>
@ -41,7 +37,7 @@
<% end %>
<% content_for :footer do %>
<%= render Reports::TeamMemberInputComponent.new(report: report, name: :analyst, label: 'Analyst', team: current_team) %>
<%= render Reports::TextInputComponent.new(report: report, name: :analyst_number, label: 'Employee number') %>
<%= render Reports::TeamMemberInputComponent.new(report: report, name: :checked_by, label: 'Checked by', team: current_team) %>
<%= render Reports::ProjectMembersInputComponent.new(report: report, name: :analyst, label: 'Analyst') %>
<%= render Reports::ProjectMembersInputComponent.new(report: report, name: :analyst_number, label: 'Employee number', displayed_field: :external_id) %>
<%= render Reports::ProjectMembersInputComponent.new(report: report, name: :checked_by, label: 'Checked by') %>
<% end %>

View file

@ -44,7 +44,7 @@
<b>ANALYST(S)</b>
</div>
<div class="cell-value">
<%= render Reports::TeamMemberInputComponent.new(report: report, name: :analyst, label: 'Analyst', editing: false, team: current_team) %>
<%= render Reports::ProjectMembersInputComponent.new(report: report, name: :analyst, label: 'Analyst', editing: false) %>
</div>
</td>
<td colspan=2>
@ -52,7 +52,7 @@
<b>ANALYST EMPLOYEE NO.</b>
</div>
<div class="cell-value">
<%= render Reports::TextInputComponent.new(report: report, name: :analyst_number, label: 'Employee number', editing: false) %>
<%= render Reports::ProjectMembersInputComponent.new(report: report, name: :analyst_number, label: 'Employee number', editing: false, displayed_field: :external_id) %>
</div>
</td>
<td colspan=3>
@ -60,7 +60,7 @@
<b>CHECKED BY:</b>
</div>
<div class="cell-value">
<%= render Reports::TeamMemberInputComponent.new(report: report, name: :checked_by, label: 'Checked by', editing: false, team: current_team) %>
<%= render Reports::ProjectMembersInputComponent.new(report: report, name: :checked_by, label: 'Checked by', editing: false) %>
</div>
</td>
<td colspan=2 class="pagination">