mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 06:35:56 +08:00
Merge pull request #5424 from G-Chubinidze/gc_SCI_8302
Implement the bottom action toolbar - reports [SI-8302]
This commit is contained in:
commit
ef0bf65c19
|
@ -100,6 +100,10 @@
|
|||
}
|
||||
|
||||
function updateButtons() {
|
||||
if (window.actionToolbarComponent) {
|
||||
window.actionToolbarComponent.fetchActions({ report_ids: CHECKBOX_SELECTOR.selectedRows });
|
||||
}
|
||||
|
||||
const rowsCount = CHECKBOX_SELECTOR.selectedRows.length;
|
||||
if (rowsCount === 0) {
|
||||
$('.single-object-action, .multiple-object-action').addClass('disabled hidden');
|
||||
|
@ -205,6 +209,8 @@
|
|||
},
|
||||
createdRow: addAttributesToRow,
|
||||
initComplete: function(settings) {
|
||||
initActionToolbar();
|
||||
|
||||
const { nTableWrapper: dataTableWrapper } = settings;
|
||||
CHECKBOX_SELECTOR = new DataTableCheckboxes(dataTableWrapper, {
|
||||
checkboxSelector: '.report-row-selector',
|
||||
|
@ -240,7 +246,7 @@
|
|||
}
|
||||
|
||||
function initUpdatePDFReport() {
|
||||
$('#updatePdf').click(function(ev) {
|
||||
$(document).on('click', '#updatePdf', function(ev) {
|
||||
ev.stopPropagation();
|
||||
ev.preventDefault();
|
||||
|
||||
|
@ -260,7 +266,7 @@
|
|||
}
|
||||
|
||||
function initGenerateDocxReport() {
|
||||
$('#requestDocx').click(function(ev) {
|
||||
$(document).on('click', '#requestDocx', function(ev) {
|
||||
ev.stopPropagation();
|
||||
ev.preventDefault();
|
||||
$(this).closest('.dropdown-menu').dropdown('toggle');
|
||||
|
@ -269,7 +275,7 @@
|
|||
}
|
||||
|
||||
function initUpdateDocxReport() {
|
||||
$('#updateDocx').click(function(ev) {
|
||||
$(document).on('click', '#updateDocx', function(ev) {
|
||||
ev.stopPropagation();
|
||||
ev.preventDefault();
|
||||
|
||||
|
@ -302,7 +308,7 @@
|
|||
}
|
||||
|
||||
function initSaveReportPDFToInventory() {
|
||||
$('#savePdfToInventoryButton').click(function(ev) {
|
||||
$(document).on('click', '#savePdfToInventoryButton', function(ev) {
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
|
||||
|
@ -322,14 +328,14 @@
|
|||
}
|
||||
|
||||
function initDeleteReports() {
|
||||
$('#delete-reports-btn').click(function() {
|
||||
$(document).on('click', '#delete-reports-btn', function() {
|
||||
if (CHECKBOX_SELECTOR.selectedRows.length > 0) {
|
||||
$('#report-ids').attr('value', '[' + CHECKBOX_SELECTOR.selectedRows + ']');
|
||||
$('#delete-reports-modal').modal('show');
|
||||
}
|
||||
});
|
||||
|
||||
$('#confirm-delete-reports-btn').click(function() {
|
||||
$(document).on('click', '#confirm-delete-reports-btn', function() {
|
||||
animateLoading();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ class ReportsController < ApplicationController
|
|||
before_action :load_available_repositories, only: %i(index save_pdf_to_inventory_modal available_repositories)
|
||||
before_action :check_project_read_permissions, only: %i(create edit update generate_pdf
|
||||
generate_docx new_template_values project_contents)
|
||||
before_action :check_read_permissions, except: %i(index datatable new create edit update destroy generate_pdf
|
||||
before_action :check_read_permissions, except: %i(index datatable new create edit update destroy actions_toolbar generate_pdf
|
||||
generate_docx new_template_values project_contents
|
||||
available_repositories)
|
||||
before_action :check_create_permissions, only: %i(new create)
|
||||
|
@ -332,6 +332,16 @@ class ReportsController < ApplicationController
|
|||
) }
|
||||
end
|
||||
|
||||
def actions_toolbar
|
||||
render json: {
|
||||
actions:
|
||||
Toolbars::ReportsService.new(
|
||||
current_user,
|
||||
report_ids: params[:report_ids].split(',')
|
||||
).actions
|
||||
}
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
AvailableRepository = Struct.new(:id, :name)
|
||||
|
|
91
app/services/toolbars/reports_service.rb
Normal file
91
app/services/toolbars/reports_service.rb
Normal file
|
@ -0,0 +1,91 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Toolbars
|
||||
class ReportsService
|
||||
attr_reader :current_user
|
||||
|
||||
include Canaid::Helpers::PermissionsHelper
|
||||
include Rails.application.routes.url_helpers
|
||||
|
||||
def initialize(current_user, report_ids: [])
|
||||
@current_user = current_user
|
||||
@reports = Report.where(id: report_ids)
|
||||
@report = @reports.first if @reports.length == 1
|
||||
end
|
||||
|
||||
def actions
|
||||
return [] if @reports.none?
|
||||
|
||||
[
|
||||
edit_action,
|
||||
update_pdf_action,
|
||||
save_pdf_to_inventory_action,
|
||||
generate_docx_action,
|
||||
delete_action
|
||||
].compact
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def edit_action
|
||||
return unless @report && can_manage_report?(@report)
|
||||
|
||||
{
|
||||
name: 'edit',
|
||||
label: I18n.t('projects.reports.index.edit'),
|
||||
icon: 'fas fa-pencil-alt',
|
||||
button_id: 'edit-report-btn',
|
||||
path: edit_project_report_path(@report.project_id, @report.id),
|
||||
type: :link
|
||||
}
|
||||
end
|
||||
|
||||
def update_pdf_action
|
||||
return unless @report && can_manage_report?(@report)
|
||||
|
||||
{
|
||||
name: 'update_pdf',
|
||||
label: I18n.t('projects.reports.index.update_pdf'),
|
||||
icon: 'fas fa-file-pdf',
|
||||
button_id: 'updatePdf'
|
||||
}
|
||||
end
|
||||
|
||||
def save_pdf_to_inventory_action
|
||||
return unless @report && can_manage_report?(@report)
|
||||
|
||||
{
|
||||
name: 'save_pdf_to_inventory',
|
||||
label: I18n.t('projects.reports.index.save_pdf_to_inventory'),
|
||||
icon: 'fas fa-save',
|
||||
button_id: 'savePdfToInventoryButton'
|
||||
}
|
||||
end
|
||||
|
||||
def generate_docx_action
|
||||
return unless @report && can_manage_report?(@report)
|
||||
|
||||
button_id = @report.docx_file_status == 'docx_empty' ? 'requestDocx' : 'updateDocx'
|
||||
label = @report.docx_file_status == 'docx_empty' ? I18n.t('projects.reports.index.request_docx') : I18n.t('projects.reports.index.update_docx')
|
||||
|
||||
{
|
||||
name: 'generate_docx_action',
|
||||
label: label,
|
||||
icon: 'fas fa-file-word',
|
||||
button_id: button_id
|
||||
}
|
||||
end
|
||||
|
||||
def delete_action
|
||||
return unless @reports.all? { |report| can_manage_report?(report) }
|
||||
|
||||
{
|
||||
name: 'delete',
|
||||
label: I18n.t('projects.reports.index.delete'),
|
||||
icon: 'fas fa-trash',
|
||||
button_id: 'delete-reports-btn',
|
||||
type: :link
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
|
@ -4,47 +4,6 @@
|
|||
<span class="fas fa-plus" aria-hidden="true"></span>
|
||||
<span class="hidden-xs"><%= t("projects.reports.index.new") %></span>
|
||||
<% end %>
|
||||
<div class="report-actions-dropdown sci-dropdown">
|
||||
<button class="btn btn-light dropdown-toggle single-object-action disabled hidden" type="button" id="reportMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<i class="fas fa-file"></i>
|
||||
<%= t("projects.reports.index.report_button") %>
|
||||
<span class="caret pull-right"></span>
|
||||
</button>
|
||||
<ul id="reportMenuDropdown" class="dropdown-menu report-actions-menu" aria-labelledby="reportMenu">
|
||||
<li>
|
||||
<%= link_to '#', remote: true, id: 'updatePdf' do %>
|
||||
<i class="fas fa-file-pdf"></i>
|
||||
<%= t("projects.reports.index.update_pdf") %>
|
||||
<% end %>
|
||||
</li>
|
||||
<li>
|
||||
<%= link_to '#savePdfToInventory', remote: true, id: 'savePdfToInventoryButton' do %>
|
||||
<i class="fas fa-save"></i>
|
||||
<%= t("projects.reports.index.save_pdf_to_inventory") %>
|
||||
<% end %>
|
||||
</li>
|
||||
<li>
|
||||
<%= link_to '#', remote: true, id: 'requestDocx', class: 'generate-docx' do %>
|
||||
<i class="fas fa-file-word"></i>
|
||||
<%= t("projects.reports.index.request_docx") %>
|
||||
<% end %>
|
||||
</li>
|
||||
<li>
|
||||
<%= link_to '#', remote: true, id: 'updateDocx', class: 'generate-docx' do %>
|
||||
<i class="fas fa-file-word"></i>
|
||||
<%= t("projects.reports.index.update_docx") %>
|
||||
<% end %>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<%= link_to "", remote: true, class: "btn btn-light disabled hidden single-object-action", id: "edit-report-btn" do %>
|
||||
<span class="fas fa-pencil-alt" aria-hidden="true"></span>
|
||||
<span class="hidden-xs"><%=t "projects.reports.index.edit" %></span>
|
||||
<% end %>
|
||||
<%= link_to "", remote: true, class: "btn btn-light disabled hidden multiple-object-action", id: "delete-reports-btn" do %>
|
||||
<span class="fas fa-trash" aria-hidden="true"></span>
|
||||
<span class="hidden-xs"><%=t "projects.reports.index.delete" %></span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="sci-input-container left-icon search-report-container">
|
||||
<input type="text" class="sci-input-field report-search" placeholder="<%= t("projects.reports.index.search_reports") %>"></input>
|
||||
|
|
|
@ -66,9 +66,14 @@
|
|||
<% end %>
|
||||
</div>
|
||||
|
||||
<div id="actionToolbar" data-behaviour="vue">
|
||||
<action-toolbar actions-url="<%= actions_toolbar_reports_url %>" />
|
||||
</div>
|
||||
|
||||
<%= render partial: 'reports/modals/regenerate' %>
|
||||
|
||||
<%= javascript_include_tag 'reports/save_pdf_to_inventory' %>
|
||||
<%= javascript_include_tag 'reports/reports_datatable' %>
|
||||
<%= javascript_include_tag 'pdf_js' %>
|
||||
<%= stylesheet_link_tag 'pdf_js_styles' %>
|
||||
<%= javascript_include_tag "vue_components_action_toolbar" %>
|
||||
|
|
|
@ -609,8 +609,8 @@ en:
|
|||
update_pdf: "Update PDF"
|
||||
save_pdf_to_inventory: "Save PDF to Inventory"
|
||||
search_reports: "Filter reports"
|
||||
request_docx: "Generate DOCX"
|
||||
update_docx: "Update DOCX"
|
||||
request_docx: "Generate .DOCX"
|
||||
update_docx: "Update .DOCX"
|
||||
edit: "Edit"
|
||||
delete: "Delete"
|
||||
deleted: "(Deleted)"
|
||||
|
|
|
@ -250,6 +250,7 @@ Rails.application.routes.draw do
|
|||
end
|
||||
collection do
|
||||
get :project_contents
|
||||
get 'actions_toolbar'
|
||||
end
|
||||
end
|
||||
get 'reports/datatable', to: 'reports#datatable'
|
||||
|
|
Loading…
Reference in a new issue