diff --git a/app/assets/javascripts/reports/new.js b/app/assets/javascripts/reports/new.js index 63dc46a60..e536ab6b8 100644 --- a/app/assets/javascripts/reports/new.js +++ b/app/assets/javascripts/reports/new.js @@ -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' + }); + }); }); } }); diff --git a/app/components/reports/multi_checkbox_input_component.html.erb b/app/components/reports/multi_checkbox_input_component.html.erb index 98ff08ff9..686e1ec1b 100644 --- a/app/components/reports/multi_checkbox_input_component.html.erb +++ b/app/components/reports/multi_checkbox_input_component.html.erb @@ -4,7 +4,7 @@ <% @items.each do |key, value| %>
  • - <%= 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' } %>
    <%= value %> diff --git a/app/components/reports/project_members_input_component.html.erb b/app/components/reports/project_members_input_component.html.erb new file mode 100644 index 000000000..0a431c94d --- /dev/null +++ b/app/components/reports/project_members_input_component.html.erb @@ -0,0 +1,11 @@ +<% if @editing %> +
    + <%= 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' } %> +
    +<% else %> + <% @project_members.where(id: @value).pluck(@displayed_field).each do |field| %> + <%= field %> +
    + <% end %> +<% end %> diff --git a/app/components/reports/team_member_input_component.rb b/app/components/reports/project_members_input_component.rb similarity index 54% rename from app/components/reports/team_member_input_component.rb rename to app/components/reports/project_members_input_component.rb index ec5dbc2ed..ec4b436e5 100644 --- a/app/components/reports/team_member_input_component.rb +++ b/app/components/reports/project_members_input_component.rb @@ -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 diff --git a/app/components/reports/team_member_input_component.html.erb b/app/components/reports/team_member_input_component.html.erb deleted file mode 100644 index 4ef7722d7..000000000 --- a/app/components/reports/team_member_input_component.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -<% if @editing %> -
    - <%= 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' } %> -
    -<% else %> - <%= @value %> -<% end %> diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 4ddb66816..1941177aa 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -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 diff --git a/app/helpers/reports_helper.rb b/app/helpers/reports_helper.rb index 67a950976..f22834b9e 100644 --- a/app/helpers/reports_helper.rb +++ b/app/helpers/reports_helper.rb @@ -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 = '') diff --git a/app/views/reports/templates/template_1/cover.html.erb b/app/views/reports/templates/template_1/cover.html.erb index b5418cf2c..75e629e53 100644 --- a/app/views/reports/templates/template_1/cover.html.erb +++ b/app/views/reports/templates/template_1/cover.html.erb @@ -84,7 +84,10 @@ 1. PRODUCT
    - <%# template[:product] %> %> + <% report_experiment_descriptions(report).each do |description| %> + <%= description %> +
    + <% end %>
    @@ -92,7 +95,7 @@ 2. SAMPLE NUMBER
    - <%# template[:sample_number] %> + <%= assigned_to_report_repository_items(report, 'Samples').pluck(:name).join(', ') %>
    @@ -246,7 +249,7 @@ 11. RESERVE SAMPLE
    - <%# template[:reserve_sample] %> + <%= render Reports::TextInputComponent.new(report: report, name: :reserve_sample, label: 'Reserve sample', editing: false) %>
    diff --git a/app/views/reports/templates/template_1/edit.html.erb b/app/views/reports/templates/template_1/edit.html.erb index 49eec9e98..2d9229c1c 100644 --- a/app/views/reports/templates/template_1/edit.html.erb +++ b/app/views/reports/templates/template_1/edit.html.erb @@ -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 %> diff --git a/app/views/reports/templates/template_1/footer.html.erb b/app/views/reports/templates/template_1/footer.html.erb index 39973e5fb..bd6c97f08 100644 --- a/app/views/reports/templates/template_1/footer.html.erb +++ b/app/views/reports/templates/template_1/footer.html.erb @@ -44,7 +44,7 @@ ANALYST(S)
    - <%= 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) %>
    @@ -52,7 +52,7 @@ ANALYST EMPLOYEE NO.
    - <%= 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) %>
    @@ -60,7 +60,7 @@ CHECKED BY:
    - <%= 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) %>