Improve report wizards [SCI-10989]

This commit is contained in:
Andrej 2024-08-28 11:57:41 +02:00
parent df6e4172f3
commit dddffc11cd
8 changed files with 63 additions and 10 deletions

View file

@ -1258,7 +1258,8 @@ function reportHandsonTableConverter() {
function reCheckContinueButton() {
if (dropdownSelector.getValues('#projectSelector').length > 0
&& dropdownSelector.getValues('#templateSelector').length > 0
&& dropdownSelector.getValues('#docxTemplateSelector').length > 0) {
&& (dropdownSelector.getValues('#docxTemplateSelector').length > 0
|| $('#docxTemplateSelector').closest('.hidden').length > 0)) {
$('.continue-button').attr('disabled', false);
} else {
$('.continue-button').attr('disabled', true);
@ -1281,6 +1282,12 @@ function reportHandsonTableConverter() {
if (dropdownSelector.getValues('#projectSelector').length > 0) {
dropdownSelector.enableSelector('#templateSelector');
dropdownSelector.enableSelector('#docxTemplateSelector');
if ($('#templateSelector').data('defaultTemplate')) {
dropdownSelector.selectValues('#templateSelector', $('#templateSelector').data('defaultTemplate'));
}
if ($('#docxTemplateSelector').data('defaultTemplate')) {
dropdownSelector.selectValues('#docxTemplateSelector', $('#docxTemplateSelector').data('defaultTemplate'));
}
} else {
dropdownSelector.selectValues('#templateSelector', '');
dropdownSelector.disableSelector('#templateSelector');
@ -1354,7 +1361,7 @@ function reportHandsonTableConverter() {
}
function loadTemplate() {
let template = $('#templateSelector').val();
const template = dropdownSelector.getValues('#templateSelector');
let params = {
project_id: dropdownSelector.getValues('#projectSelector'),
template: template
@ -1384,7 +1391,7 @@ function reportHandsonTableConverter() {
}
function loadDocxTemplate() {
let template = $('#docxTemplateSelector').val();
const template = dropdownSelector.getValues('#docxTemplateSelector');
let params = {
project_id: dropdownSelector.getValues('#projectSelector'),
template: template

View file

@ -18,7 +18,8 @@ class ReportsController < ApplicationController
before_action :check_create_permissions, only: %i(new create)
before_action :check_manage_permissions, only: %i(edit update generate_pdf generate_docx)
before_action :switch_team_with_param, only: :index
after_action :generate_pdf_report, only: %i(create update generate_pdf)
after_action :generate_pdf_report, only: %i(generate_pdf)
after_action :generate_report, only: %i(create update)
# Index showing all reports of a single project
def index
@ -44,6 +45,8 @@ class ReportsController < ApplicationController
def new_template_values
if Extends::REPORT_TEMPLATES.key?(params[:template]&.to_sym)
template = params[:template]
@type = :pdf
@template_name = Extends::REPORT_TEMPLATES[params[:template].to_sym]
else
return render_404
end
@ -69,6 +72,7 @@ class ReportsController < ApplicationController
else
render json: {
html: render_to_string(partial: 'reports/wizard/no_template_values',
locals: { type: @type, template: @template_name },
formats: :html)
}
end
@ -77,6 +81,8 @@ class ReportsController < ApplicationController
def new_docx_template_values
if Extends::DOCX_REPORT_TEMPLATES.key?(params[:template]&.to_sym)
template = params[:template]
@type = :docx
@template_name = Extends::DOCX_REPORT_TEMPLATES[params[:template].to_sym]
else
return render_404
end
@ -102,6 +108,7 @@ class ReportsController < ApplicationController
else
render json: {
html: render_to_string(partial: 'reports/wizard/no_template_values',
locals: { type: @type, template: @template_name },
formats: :html)
}
end
@ -363,6 +370,9 @@ class ReportsController < ApplicationController
.merge(MyModule.active)
.group(:id)
.select(:id, :name)
@default_template = Extends::REPORT_TEMPLATES.keys.first.to_s if Extends::REPORT_TEMPLATES.one?
@default_docx_template = Extends::DOCX_REPORT_TEMPLATES.keys.first.to_s if Extends::DOCX_REPORT_TEMPLATES.one? && custom_templates(Extends::DOCX_REPORT_TEMPLATES)
end
def check_project_read_permissions
@ -430,6 +440,26 @@ class ReportsController < ApplicationController
Rails.logger.error e.message
end
def generate_docx_report
return unless @report.persisted?
@report.docx_processing!
log_activity(:generate_docx_report)
ensure_report_template!
Reports::DocxJob.perform_later(@report.id, user_id: current_user.id, root_url: root_url)
rescue ActiveRecord::ActiveRecordError => e
Rails.logger.error e.message
end
def generate_report
return unless @report.persisted?
generate_pdf_report
generate_docx_report if @report.settings['docx_template'].present? && custom_templates(Extends::DOCX_REPORT_TEMPLATES)
end
def ensure_report_template!
return if @report.settings['template'].present?

View file

@ -106,4 +106,8 @@ module ReportsHelper
experiment_element.experiment.description
end
end
def custom_templates(templates)
templates.any? { |template, _| template != :scinote_template }
end
end

View file

@ -30,7 +30,7 @@ class Reports::Docx
@link_style = {}
@color = {}
@scinote_url = options[:scinote_url][0..-2]
@template = @settings[:docx_template] || 'scinote_template'
@template = @settings[:docx_template].presence || 'scinote_template'
extend "#{@template.camelize}Docx".constantize
end

View file

@ -1,6 +1,10 @@
<div class="template-editor-header">
<h1 class="title">
<%= t('projects.reports.wizard.first_step.values_editor.title') %>
<% if @type == :pdf %>
<%= t('projects.reports.wizard.first_step.values_editor.title_pdf', template: @template_name) %>
<% else %>
<%= t('projects.reports.wizard.first_step.values_editor.title_docx', template: @template_name) %>
<% end %>
</h1>
<div class="collapse-buttons sci-btn-group pull-right">
<button class="btn btn-light collapse-all">

View file

@ -1,5 +1,9 @@
<h1>
<%= t('projects.reports.wizard.first_step.values_editor.no_values_title') %>
<% if type == :pdf %>
<%= t('projects.reports.wizard.first_step.values_editor.no_values_title_pdf', template: ) %>
<% else %>
<%= t('projects.reports.wizard.first_step.values_editor.no_values_title_docx', template: ) %>
<% end %>
</h1>
<h3>
<%= t('projects.reports.wizard.first_step.values_editor.no_values_description') %>

View file

@ -20,10 +20,11 @@
disable_on_load: report.settings[:template].blank? && report.new_record?,
placeholder: t('projects.reports.wizard.first_step.select_template'),
selected_template: report.settings[:template],
default_template: @default_template,
values_editor_path: reports_new_template_values_path(report_id: report.id)
} %>
</div>
<div class='template-selector'>
<div class='template-selector <%= "hidden" unless custom_templates(Extends::DOCX_REPORT_TEMPLATES) %>'>
<%= label_tag :docxTemplateSelector, t('projects.reports.wizard.first_step.select_docx_template') %>
<%= select_tag :docxTemplateSelector,
options_for_select(@docx_templates.invert, @active_docx_template),
@ -32,6 +33,7 @@
disable_on_load: report.settings[:docx_template].blank? && report.new_record?,
placeholder: t('projects.reports.wizard.first_step.select_docx_template'),
selected_template: report.settings[:docx_template],
default_template: @default_docx_template,
values_editor_path: reports_new_docx_template_values_path(report_id: report.id)
} %>
</div>

View file

@ -803,13 +803,15 @@ en:
report_description: "Report description (optional)"
report_description_placeholder: "In this report you can see..."
values_editor:
title: "Enter template data"
title_pdf: "PDF %{template}"
title_docx: "DOCX %{template}"
description: "This template requires you to fill out additional information about this project. This is the only place you will be able to do so."
header: "Header"
cover: "Title page"
footer: "Footer"
toc: "Table of contents"
no_values_title: "No additional data required"
no_values_title_pdf: "PDF %{template}: No additional data required"
no_values_title_docx: "DOCX %{template}: No additional data required"
no_values_description: "SciNote template doesnt need any additional input for it to be successfully generated."
second_step:
select_project_content: "Select and reorder experiments and tasks"