mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-06 05:04:35 +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,
|
||||
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'
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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 %>
|
||||
|
|
|
@ -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
|
||||
|
||||
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
|
|
@ -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_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
|
||||
|
|
|
@ -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 = '')
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 %>
|
||||
|
|
|
@ -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">
|
||||
|
|
Loading…
Add table
Reference in a new issue