mirror of
				https://github.com/scinote-eln/scinote-web.git
				synced 2025-10-31 00:19:20 +08:00 
			
		
		
		
	Merge pull request #8336 from andrej-scinote/aj_SCI_11554
Add forms to reports [SCI-11554]
This commit is contained in:
		
						commit
						f1d1551175
					
				
					 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