mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-06 21:24:23 +08:00
Add additional custom fields for reports [SCI-5609]
This commit is contained in:
parent
d18a54c874
commit
a67cc619ec
10 changed files with 60 additions and 28 deletions
|
@ -1220,8 +1220,20 @@ function reportHandsonTableConverter() {
|
||||||
disableSearch: true,
|
disableSearch: true,
|
||||||
onChange: function() {
|
onChange: function() {
|
||||||
let template = $('#templateSelector').val();
|
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-values-container').html(result.html);
|
||||||
|
$('.report-template-value-dropdown').each(function() {
|
||||||
|
dropdownSelector.init($(this), {
|
||||||
|
singleSelect: false,
|
||||||
|
closeOnSelect: true,
|
||||||
|
noEmptyOption: true,
|
||||||
|
selectAppearance: 'simple'
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<% @items.each do |key, value| %>
|
<% @items.each do |key, value| %>
|
||||||
<li>
|
<li>
|
||||||
<div class="sci-checkbox-container">
|
<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>
|
<span class="sci-checkbox-label"></span>
|
||||||
</div>
|
</div>
|
||||||
<%= value %>
|
<%= value %>
|
||||||
|
|
|
@ -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 %>
|
|
@ -1,10 +1,11 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
module Reports
|
module Reports
|
||||||
class TeamMemberInputComponent < TemplateValueComponent
|
class ProjectMembersInputComponent < TemplateValueComponent
|
||||||
def initialize(report:, name:, label:, placeholder: nil, editing: true, team:)
|
def initialize(report:, name:, label:, placeholder: nil, editing: true, displayed_field: :full_name)
|
||||||
super(report: report, name: name, label: label, placeholder: placeholder, editing: editing)
|
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
|
end
|
||||||
end
|
end
|
|
@ -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 %>
|
|
|
@ -10,6 +10,7 @@ class ReportsController < ApplicationController
|
||||||
generate_pdf
|
generate_pdf
|
||||||
generate_docx
|
generate_docx
|
||||||
save_modal
|
save_modal
|
||||||
|
new_template_values
|
||||||
project_contents
|
project_contents
|
||||||
experiment_contents_modal
|
experiment_contents_modal
|
||||||
module_contents_modal
|
module_contents_modal
|
||||||
|
@ -57,6 +58,9 @@ class ReportsController < ApplicationController
|
||||||
template = Extends::REPORT_TEMPLATES[params[:template].to_sym]
|
template = Extends::REPORT_TEMPLATES[params[:template].to_sym]
|
||||||
return render_404 if template.blank?
|
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|
|
respond_to do |format|
|
||||||
format.json do
|
format.json do
|
||||||
if lookup_context.template_exists?("reports/templates/#{template}/edit.html.erb")
|
if lookup_context.template_exists?("reports/templates/#{template}/edit.html.erb")
|
||||||
|
@ -64,7 +68,7 @@ class ReportsController < ApplicationController
|
||||||
html: render_to_string(
|
html: render_to_string(
|
||||||
template: "reports/templates/#{template}/edit.html.erb",
|
template: "reports/templates/#{template}/edit.html.erb",
|
||||||
layout: 'reports/template_values_editor',
|
layout: 'reports/template_values_editor',
|
||||||
locals: { report: Report.find_by(id: params[:report_id]) || Report.new }
|
locals: { report: report }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -173,6 +173,19 @@ module ReportsHelper
|
||||||
html_doc.to_s
|
html_doc.to_s
|
||||||
end
|
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
|
private
|
||||||
|
|
||||||
def obj_name_to_filename(obj, filename_suffix = '')
|
def obj_name_to_filename(obj, filename_suffix = '')
|
||||||
|
|
|
@ -84,7 +84,10 @@
|
||||||
1. PRODUCT
|
1. PRODUCT
|
||||||
</div>
|
</div>
|
||||||
<div class="cell-value">
|
<div class="cell-value">
|
||||||
<%# template[:product] %> %>
|
<% report_experiment_descriptions(report).each do |description| %>
|
||||||
|
<%= description %>
|
||||||
|
<br>
|
||||||
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td colspan=5>
|
<td colspan=5>
|
||||||
|
@ -92,7 +95,7 @@
|
||||||
2. SAMPLE NUMBER
|
2. SAMPLE NUMBER
|
||||||
</div>
|
</div>
|
||||||
<div class="cell-value">
|
<div class="cell-value">
|
||||||
<%# template[:sample_number] %>
|
<%= assigned_to_report_repository_items(report, 'Samples').pluck(:name).join(', ') %>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -246,7 +249,7 @@
|
||||||
11. RESERVE SAMPLE
|
11. RESERVE SAMPLE
|
||||||
</div>
|
</div>
|
||||||
<div class="cell-value">
|
<div class="cell-value">
|
||||||
<%# template[:reserve_sample] %>
|
<%= render Reports::TextInputComponent.new(report: report, name: :reserve_sample, label: 'Reserve sample', editing: false) %>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -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 %>
|
<% content_for :cover do %>
|
||||||
<%= render Reports::MultiCheckboxInputComponent.new(
|
<%= render Reports::MultiCheckboxInputComponent.new(
|
||||||
report: report,
|
report: report,
|
||||||
|
@ -31,6 +26,7 @@
|
||||||
<%= render Reports::CheckboxInputComponent.new(report: report, name: :labeling_none, label: 'None') %>
|
<%= 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::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::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_a, label: 'Analyst signature A') %>
|
||||||
<%= render Reports::TextInputComponent.new(report: report, name: :analyst_signature_b, label: 'Analyst signature B') %>
|
<%= render Reports::TextInputComponent.new(report: report, name: :analyst_signature_b, label: 'Analyst signature B') %>
|
||||||
|
@ -41,7 +37,7 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% content_for :footer do %>
|
<% content_for :footer do %>
|
||||||
<%= render Reports::TeamMemberInputComponent.new(report: report, name: :analyst, label: 'Analyst', team: current_team) %>
|
<%= render Reports::ProjectMembersInputComponent.new(report: report, name: :analyst, label: 'Analyst') %>
|
||||||
<%= render Reports::TextInputComponent.new(report: report, name: :analyst_number, label: 'Employee number') %>
|
<%= render Reports::ProjectMembersInputComponent.new(report: report, name: :analyst_number, label: 'Employee number', displayed_field: :external_id) %>
|
||||||
<%= render Reports::TeamMemberInputComponent.new(report: report, name: :checked_by, label: 'Checked by', team: current_team) %>
|
<%= render Reports::ProjectMembersInputComponent.new(report: report, name: :checked_by, label: 'Checked by') %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
<b>ANALYST(S)</b>
|
<b>ANALYST(S)</b>
|
||||||
</div>
|
</div>
|
||||||
<div class="cell-value">
|
<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>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td colspan=2>
|
<td colspan=2>
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
<b>ANALYST EMPLOYEE NO.</b>
|
<b>ANALYST EMPLOYEE NO.</b>
|
||||||
</div>
|
</div>
|
||||||
<div class="cell-value">
|
<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>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td colspan=3>
|
<td colspan=3>
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
<b>CHECKED BY:</b>
|
<b>CHECKED BY:</b>
|
||||||
</div>
|
</div>
|
||||||
<div class="cell-value">
|
<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>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td colspan=2 class="pagination">
|
<td colspan=2 class="pagination">
|
||||||
|
|
Loading…
Add table
Reference in a new issue