mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-09 22:55:34 +08:00
Add forms to reports [SCI-11554]
This commit is contained in:
parent
06e85947f3
commit
788ec7d1e7
8 changed files with 136 additions and 1 deletions
|
@ -121,4 +121,19 @@ module ReportsHelper
|
|||
def custom_templates(templates)
|
||||
templates.any? { |template, _| template != :scinote_template }
|
||||
end
|
||||
|
||||
def report_form_response_content(form_response)
|
||||
form_field_values = form_response.form_field_values
|
||||
|
||||
form_response.form.form_fields&.map do |form_field|
|
||||
form_field_value = form_field_values.find_by(form_field_id: form_field.id, latest: true)
|
||||
|
||||
{
|
||||
name: form_field.name,
|
||||
value: form_field_value&.not_applicable ? I18n.t('forms.export.values.not_applicable') : form_field_value&.formatted.to_s,
|
||||
submitted_at: form_field_value&.submitted_at&.utc.to_s,
|
||||
submitted_by: form_field_value&.submitted_by&.full_name.to_s
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -55,6 +55,7 @@ class Report < ApplicationRecord
|
|||
step_files: true,
|
||||
step_tables: true,
|
||||
step_comments: true,
|
||||
step_forms: true,
|
||||
step_well_plates: true
|
||||
},
|
||||
file_results: true,
|
||||
|
|
|
@ -40,6 +40,8 @@ module Reports::Docx::DrawStep
|
|||
handle_checklist(element.orderable)
|
||||
when 'StepText'
|
||||
handle_step_text(element)
|
||||
when 'FormResponse'
|
||||
handle_step_forms(element)
|
||||
end
|
||||
end
|
||||
if @settings.dig('task', 'protocol', 'step_files')
|
||||
|
@ -73,4 +75,8 @@ module Reports::Docx::DrawStep
|
|||
def handle_step_text(element)
|
||||
draw_step_text(element) if @settings.dig('task', 'protocol', 'step_texts')
|
||||
end
|
||||
|
||||
def handle_step_forms(element)
|
||||
draw_step_forms(element) if @settings.dig('task', 'protocol', 'step_forms')
|
||||
end
|
||||
end
|
||||
|
|
50
app/services/reports/docx/draw_step_form.rb
Normal file
50
app/services/reports/docx/draw_step_form.rb
Normal file
|
@ -0,0 +1,50 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Reports
|
||||
class Docx
|
||||
module DrawStepForm
|
||||
def draw_step_forms(element)
|
||||
return unless @settings.dig('task', 'protocol', 'step_forms')
|
||||
|
||||
form_response = element.orderable
|
||||
color = @color
|
||||
form_fields = form_response.form.form_fields
|
||||
form_field_values = form_response.form_field_values
|
||||
|
||||
table = [[
|
||||
I18n.t('projects.reports.elements.step_forms.field'),
|
||||
I18n.t('projects.reports.elements.step_forms.answer'),
|
||||
I18n.t('projects.reports.elements.step_forms.submitted_at'),
|
||||
I18n.t('projects.reports.elements.step_forms.submitted_by')
|
||||
]]
|
||||
|
||||
form_fields&.each do |form_field|
|
||||
form_field_value = form_field_values.find_by(form_field_id: form_field.id, latest: true)
|
||||
table << [
|
||||
form_field.name,
|
||||
form_field_value&.not_applicable ? I18n.t('forms.export.values.not_applicable') : form_field_value&.formatted.to_s,
|
||||
form_field_value&.submitted_at&.utc.to_s,
|
||||
form_field_value&.submitted_by&.full_name.to_s
|
||||
]
|
||||
end
|
||||
|
||||
@docx.p
|
||||
@docx.table table, border_size: Constants::REPORT_DOCX_TABLE_BORDER_SIZE do
|
||||
cell_style rows[0], bold: true, background: color[:concrete]
|
||||
end
|
||||
|
||||
@docx.p do
|
||||
text I18n.t('projects.reports.elements.step_forms.table_name', name: form_response.form.name), italic: true
|
||||
text ' '
|
||||
|
||||
if form_response.submitted?
|
||||
text I18n.t('projects.reports.elements.step_forms.user_time', user: form_response.submitted_by&.full_name,
|
||||
timestamp: I18n.l(form_response.submitted_at, format: :full)), color: color[:gray]
|
||||
else
|
||||
text I18n.t('projects.reports.elements.step_forms.not_submitted'), color: color[:gray]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -37,6 +37,9 @@
|
|||
<% if e.orderable_type == 'StepText' && @settings.dig('task', 'protocol', 'step_texts') %>
|
||||
<%= render partial: 'reports/elements/step_text_element', locals: { step_text: e.orderable, export_all: export_all } %>
|
||||
<% end %>
|
||||
<% if e.orderable_type == 'FormResponse' && @settings.dig('task', 'protocol', 'step_forms') %>
|
||||
<%= render partial: 'reports/elements/step_form_element', locals: { form_response: e.orderable } %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if @settings.dig('task', 'protocol', 'step_files') %>
|
||||
<% assets.each do |asset| %>
|
||||
|
|
50
app/views/reports/elements/_step_form_element.html.erb
Normal file
50
app/views/reports/elements/_step_form_element.html.erb
Normal file
|
@ -0,0 +1,50 @@
|
|||
<% form_fields = report_form_response_content(form_response) %>
|
||||
<div class="report-element report-step-table-element">
|
||||
<div class="report-element-header">
|
||||
<div class="table-name">
|
||||
<em>
|
||||
<%= truncate(form_response.form.name, length: Constants::FILENAME_TRUNCATION_LENGTH) %>
|
||||
</em>
|
||||
</div>
|
||||
<div class="user-time">
|
||||
<% if form_response.submitted? %>
|
||||
<%= t("projects.reports.elements.step_forms.user_time", user: form_response.submitted_by&.full_name,
|
||||
timestamp: l(form_response.submitted_at, format: :full)) %>
|
||||
<% else %>
|
||||
<%= t('projects.reports.elements.step_forms.not_submitted') %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="report-element-body">
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<table class="report-common-table-format">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><%= t('projects.reports.elements.step_forms.field') %></th>
|
||||
<th><%= t('projects.reports.elements.step_forms.answer') %></th>
|
||||
<th><%= t('projects.reports.elements.step_forms.submitted_at') %></th>
|
||||
<th><%= t('projects.reports.elements.step_forms.submitted_by') %></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% form_fields.each do |form_field| %>
|
||||
<tr>
|
||||
<td><%= form_field[:name] %></td>
|
||||
<td><%= form_field[:value] %></td>
|
||||
<td><%= form_field[:submitted_at] %></td>
|
||||
<td><%= form_field[:submitted_by] %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% if defined?(children) %>
|
||||
<div class="report-element-children">
|
||||
<%= children %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
|
@ -33,7 +33,7 @@
|
|||
<%= t("projects.reports.wizard.third_step.protocol_step") %>
|
||||
<div class="divider"></div>
|
||||
<ul class="step-contents report-protocol-settings">
|
||||
<% %i(completed_steps uncompleted_steps step_texts step_files step_tables step_well_plates step_checklists step_comments).each do |step_content| %>
|
||||
<% %i(completed_steps uncompleted_steps step_texts step_files step_tables step_well_plates step_checklists step_forms step_comments).each do |step_content| %>
|
||||
<li>
|
||||
<span class="sci-checkbox-container">
|
||||
<input type="checkbox" class="sci-checkbox protocol-setting" value="<%= step_content %>" <%= 'checked' if report.settings.dig(:task, :protocol, step_content) %> />
|
||||
|
|
|
@ -848,6 +848,7 @@ en:
|
|||
step_files: "Step files"
|
||||
step_tables: "Step tables"
|
||||
step_well_plates: "Step well plates"
|
||||
step_forms: "Step forms"
|
||||
step_comments: "Step comments"
|
||||
assigned_items: "Assigned items"
|
||||
assigned_items_description: "Inventories selected below will only contain the items that you assigned to the tasks directly."
|
||||
|
@ -1027,6 +1028,15 @@ en:
|
|||
name: "Step comments"
|
||||
no_comments: "No comments"
|
||||
comment_prefix: "%{user} on %{date} at %{time}:"
|
||||
step_forms:
|
||||
field: "Field"
|
||||
answer: "Answer"
|
||||
submitted_at: "Submitted at"
|
||||
submitted_by: "Submitted by"
|
||||
not_submitted: "Not submitted yet"
|
||||
user_time: "Form submitted on %{timestamp} by %{user}."
|
||||
table_name: "%{name}"
|
||||
|
||||
experiment_archive:
|
||||
head_title: "%{project} | Archived experiments"
|
||||
no_archived_experiments: "No archived experiments!"
|
||||
|
|
Loading…
Add table
Reference in a new issue