mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-12-09 05:37:36 +08:00
Add export for assigned items
This commit is contained in:
parent
41ceba11b8
commit
e69e3ea8d3
10 changed files with 97 additions and 41 deletions
|
|
@ -1,6 +1,6 @@
|
|||
/* eslint-disable no-param-reassign, no-use-before-define */
|
||||
/* global DataTableHelpers PerfectScrollbar FilePreviewModal animateSpinner HelperModule
|
||||
initAssignedTasksDropdown I18n */
|
||||
initAssignedTasksDropdown I18n prepareRepositoryHeaderForExport */
|
||||
|
||||
var MyModuleRepositories = (function() {
|
||||
const FULL_VIEW_MODAL = $('#myModuleRepositoryFullViewModal');
|
||||
|
|
@ -643,6 +643,22 @@ var MyModuleRepositories = (function() {
|
|||
});
|
||||
}
|
||||
|
||||
function initExportAssignedRows() {
|
||||
FULL_VIEW_MODAL.on('click', '#exportAssignedItems', function() {
|
||||
var headerIds = [];
|
||||
$(FULL_VIEW_TABLE.table().container()).find('.dataTables_scrollHead thead tr th').each(function() {
|
||||
headerIds.push(prepareRepositoryHeaderForExport($(this)));
|
||||
});
|
||||
$.post($(FULL_VIEW_TABLE.table().container()).find('.dataTable').data('export-url'), {
|
||||
header_ids: headerIds
|
||||
}, function(response) {
|
||||
HelperModule.flashAlertMsg(response.message, 'success');
|
||||
}).error((response) => {
|
||||
HelperModule.flashAlertMsg(response.responseJSON.message, 'danger');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
init: () => {
|
||||
initSimpleTable();
|
||||
|
|
@ -651,6 +667,7 @@ var MyModuleRepositories = (function() {
|
|||
initVersionsSidebarActions();
|
||||
initRepoistoryAssignView();
|
||||
initSelectAllCheckbox();
|
||||
initExportAssignedRows();
|
||||
}
|
||||
};
|
||||
}());
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
globals I18n _ SmartAnnotation FilePreviewModal animateSpinner Promise DataTableHelpers
|
||||
HelperModule animateLoading RepositoryDatatableRowEditor
|
||||
globals I18n _ SmartAnnotation FilePreviewModal animateSpinner DataTableHelpers
|
||||
HelperModule RepositoryDatatableRowEditor prepareRepositoryHeaderForExport
|
||||
initAssignedTasksDropdown
|
||||
*/
|
||||
|
||||
|
|
@ -334,35 +334,7 @@ var RepositoryDatatable = (function(global) {
|
|||
// Append visible column information
|
||||
$('table' + TABLE_ID + ' thead tr th').each(function() {
|
||||
var th = $(this);
|
||||
var val;
|
||||
switch ($(th).attr('id')) {
|
||||
case 'checkbox':
|
||||
val = -1;
|
||||
break;
|
||||
case 'assigned':
|
||||
val = -2;
|
||||
break;
|
||||
case 'row-id':
|
||||
val = -3;
|
||||
break;
|
||||
case 'row-name':
|
||||
val = -4;
|
||||
break;
|
||||
case 'added-by':
|
||||
val = -5;
|
||||
break;
|
||||
case 'added-on':
|
||||
val = -6;
|
||||
break;
|
||||
case 'archived-by':
|
||||
val = -7;
|
||||
break;
|
||||
case 'archived-on':
|
||||
val = -8;
|
||||
break;
|
||||
default:
|
||||
val = th.attr('id');
|
||||
}
|
||||
var val = prepareRepositoryHeaderForExport(th);
|
||||
|
||||
if (val) {
|
||||
appendInput(form, val, 'header_ids[]');
|
||||
|
|
|
|||
|
|
@ -49,3 +49,37 @@ function initAssignedTasksDropdown(table) {
|
|||
loadTasks(cell);
|
||||
});
|
||||
}
|
||||
|
||||
function prepareRepositoryHeaderForExport(th) {
|
||||
var val;
|
||||
switch ($(th).attr('id')) {
|
||||
case 'checkbox':
|
||||
val = -1;
|
||||
break;
|
||||
case 'assigned':
|
||||
val = -2;
|
||||
break;
|
||||
case 'row-id':
|
||||
val = -3;
|
||||
break;
|
||||
case 'row-name':
|
||||
val = -4;
|
||||
break;
|
||||
case 'added-by':
|
||||
val = -5;
|
||||
break;
|
||||
case 'added-on':
|
||||
val = -6;
|
||||
break;
|
||||
case 'archived-by':
|
||||
val = -7;
|
||||
break;
|
||||
case 'archived-on':
|
||||
val = -8;
|
||||
break;
|
||||
default:
|
||||
val = th.attr('id');
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ class MyModuleRepositoriesController < ApplicationController
|
|||
include ApplicationHelper
|
||||
|
||||
before_action :load_my_module
|
||||
before_action :load_repository, except: %i(repositories_dropdown_list repositories_list_html)
|
||||
before_action :load_repository, except: %i(repositories_dropdown_list repositories_list_html export_repository)
|
||||
before_action :load_repository_or_snapshot, only: :export_repository
|
||||
before_action :check_my_module_view_permissions
|
||||
before_action :check_repository_view_permissions, except: %i(repositories_dropdown_list repositories_list_html)
|
||||
before_action :check_assign_repository_records_permissions, only: :update
|
||||
|
|
@ -116,6 +117,15 @@ class MyModuleRepositoriesController < ApplicationController
|
|||
render json: { html: render_to_string(partial: 'my_modules/repositories/repositories_dropdown_list') }
|
||||
end
|
||||
|
||||
def export_repository
|
||||
if params[:header_ids]
|
||||
RepositoryZipExport.generate_zip(params, @repository, current_user)
|
||||
render json: { message: t('zip_export.export_request_success') }, status: :ok
|
||||
else
|
||||
render json: { message: t('zip_export.export_error') }, status: :unprocessable_entity
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_my_module
|
||||
|
|
@ -128,6 +138,12 @@ class MyModuleRepositoriesController < ApplicationController
|
|||
render_404 unless @repository
|
||||
end
|
||||
|
||||
def load_repository_or_snapshot
|
||||
@repository = Repository.accessible_by_teams(current_team).find_by(id: params[:id])
|
||||
@repository ||= RepositorySnapshot.find_by(id: params[:id])
|
||||
render_404 unless @repository
|
||||
end
|
||||
|
||||
def check_my_module_view_permissions
|
||||
render_403 unless can_read_experiment?(@my_module.experiment)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -5,16 +5,25 @@ require 'csv'
|
|||
module RepositoryZipExport
|
||||
def self.generate_zip(params, repository, current_user)
|
||||
# Fetch rows in the same order as in the currently viewed datatable
|
||||
if params[:my_module_id]
|
||||
rows = if repository.is_a?(RepositorySnapshot)
|
||||
repository.repository_rows
|
||||
else
|
||||
repository.repository_rows.joins(:my_module_repository_rows)
|
||||
.where(my_module_repository_rows: { my_module_id: params[:my_module_id] })
|
||||
end
|
||||
else
|
||||
ordered_row_ids = params[:row_ids]
|
||||
id_row_map = RepositoryRow.where(id: ordered_row_ids,
|
||||
repository: repository)
|
||||
.index_by(&:id)
|
||||
ordered_rows = ordered_row_ids.collect { |id| id_row_map[id.to_i] }
|
||||
rows = ordered_row_ids.collect { |id| id_row_map[id.to_i] }
|
||||
end
|
||||
|
||||
zip = ZipExport.create(user: current_user)
|
||||
zip.generate_exportable_zip(
|
||||
current_user,
|
||||
to_csv(ordered_rows, params[:header_ids], current_user, repository.team),
|
||||
to_csv(rows, params[:header_ids], current_user, repository.team),
|
||||
:repositories
|
||||
)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -19,11 +19,15 @@
|
|||
<div class="modal-body">
|
||||
<template id="repositoryToolbarButtonsTemplate">
|
||||
<div class="">
|
||||
<div class="pull-left">
|
||||
<div class="pull-left sci-btn-group">
|
||||
<button id="showVersionsSidebar" type="button" class="btn btn-secondary">
|
||||
<span class="fas fa-eye"></span>
|
||||
<%= t('my_modules.repository.snapshots.full_view.versions_sidebar_button') %>
|
||||
</button>
|
||||
<button id="exportAssignedItems" type="button" class="btn btn-secondary">
|
||||
<span class="fas fa-download"></span>
|
||||
<%= t('my_modules.repository.snapshots.full_view.export_button') %>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
data-default-order="<%= default_snapshot_table_order_as_js_array %>"
|
||||
data-default-table-columns="<%= default_snapshot_table_columns %>"
|
||||
data-load-state-url="<%= repository_load_table_state_path(@repository_snapshot) %>"
|
||||
data-export-url="<%= export_repository_my_module_repository_path(@my_module ,@repository_snapshot) %>"
|
||||
data-versions-sidebar-url="<%= full_view_sidebar_my_module_repository_snapshots_path(@my_module, @repository_snapshot.parent_id) %>"
|
||||
>
|
||||
<thead>
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
data-repository-name="<%= @repository.name %>"
|
||||
data-assigned-items-count="<%= @my_module.repository_rows_count(@repository) %>"
|
||||
data-load-state-url="<%= repository_load_table_state_path(@repository) %>"
|
||||
data-export-url="<%= export_repository_my_module_repository_path(@my_module ,@repository) %>"
|
||||
data-versions-sidebar-url="<%= full_view_sidebar_my_module_repository_snapshots_path(@my_module, @repository) %>"
|
||||
>
|
||||
<thead>
|
||||
|
|
|
|||
|
|
@ -810,6 +810,7 @@ en:
|
|||
no_assigned_items: 'No items assigned'
|
||||
no_snapshots_label: 'You have not created any snapshots yet. To do so click the button bellow.'
|
||||
versions_sidebar_button: 'View versions'
|
||||
export_button: "Export .csv"
|
||||
create_button: 'Create snapshot'
|
||||
set_default_button: 'Set as default view'
|
||||
created_by: 'by %{full_name}'
|
||||
|
|
|
|||
|
|
@ -385,6 +385,7 @@ Rails.application.routes.draw do
|
|||
member do
|
||||
get :full_view_table
|
||||
post :index_dt
|
||||
post :export_repository
|
||||
get :assign_repository_records_modal, as: :assign_modal
|
||||
get :update_repository_records_modal, as: :update_modal
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue