mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-03-04 19:53:19 +08:00
Improve report wizards [SCI-10989]
This commit is contained in:
parent
df6e4172f3
commit
dddffc11cd
8 changed files with 63 additions and 10 deletions
|
@ -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
|
||||
|
|
|
@ -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?
|
||||
|
||||
|
|
|
@ -106,4 +106,8 @@ module ReportsHelper
|
|||
experiment_element.experiment.description
|
||||
end
|
||||
end
|
||||
|
||||
def custom_templates(templates)
|
||||
templates.any? { |template, _| template != :scinote_template }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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') %>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 doesn’t need any additional input for it to be successfully generated."
|
||||
second_step:
|
||||
select_project_content: "Select and reorder experiments and tasks"
|
||||
|
|
Loading…
Reference in a new issue