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 */
|
/* eslint-disable no-param-reassign, no-use-before-define */
|
||||||
/* global DataTableHelpers PerfectScrollbar FilePreviewModal animateSpinner HelperModule
|
/* global DataTableHelpers PerfectScrollbar FilePreviewModal animateSpinner HelperModule
|
||||||
initAssignedTasksDropdown I18n */
|
initAssignedTasksDropdown I18n prepareRepositoryHeaderForExport */
|
||||||
|
|
||||||
var MyModuleRepositories = (function() {
|
var MyModuleRepositories = (function() {
|
||||||
const FULL_VIEW_MODAL = $('#myModuleRepositoryFullViewModal');
|
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 {
|
return {
|
||||||
init: () => {
|
init: () => {
|
||||||
initSimpleTable();
|
initSimpleTable();
|
||||||
|
|
@ -651,6 +667,7 @@ var MyModuleRepositories = (function() {
|
||||||
initVersionsSidebarActions();
|
initVersionsSidebarActions();
|
||||||
initRepoistoryAssignView();
|
initRepoistoryAssignView();
|
||||||
initSelectAllCheckbox();
|
initSelectAllCheckbox();
|
||||||
|
initExportAssignedRows();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}());
|
}());
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
globals I18n _ SmartAnnotation FilePreviewModal animateSpinner Promise DataTableHelpers
|
globals I18n _ SmartAnnotation FilePreviewModal animateSpinner DataTableHelpers
|
||||||
HelperModule animateLoading RepositoryDatatableRowEditor
|
HelperModule RepositoryDatatableRowEditor prepareRepositoryHeaderForExport
|
||||||
initAssignedTasksDropdown
|
initAssignedTasksDropdown
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -334,35 +334,7 @@ var RepositoryDatatable = (function(global) {
|
||||||
// Append visible column information
|
// Append visible column information
|
||||||
$('table' + TABLE_ID + ' thead tr th').each(function() {
|
$('table' + TABLE_ID + ' thead tr th').each(function() {
|
||||||
var th = $(this);
|
var th = $(this);
|
||||||
var val;
|
var val = prepareRepositoryHeaderForExport(th);
|
||||||
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');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (val) {
|
if (val) {
|
||||||
appendInput(form, val, 'header_ids[]');
|
appendInput(form, val, 'header_ids[]');
|
||||||
|
|
|
||||||
|
|
@ -49,3 +49,37 @@ function initAssignedTasksDropdown(table) {
|
||||||
loadTasks(cell);
|
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
|
include ApplicationHelper
|
||||||
|
|
||||||
before_action :load_my_module
|
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_my_module_view_permissions
|
||||||
before_action :check_repository_view_permissions, except: %i(repositories_dropdown_list repositories_list_html)
|
before_action :check_repository_view_permissions, except: %i(repositories_dropdown_list repositories_list_html)
|
||||||
before_action :check_assign_repository_records_permissions, only: :update
|
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') }
|
render json: { html: render_to_string(partial: 'my_modules/repositories/repositories_dropdown_list') }
|
||||||
end
|
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
|
private
|
||||||
|
|
||||||
def load_my_module
|
def load_my_module
|
||||||
|
|
@ -128,6 +138,12 @@ class MyModuleRepositoriesController < ApplicationController
|
||||||
render_404 unless @repository
|
render_404 unless @repository
|
||||||
end
|
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
|
def check_my_module_view_permissions
|
||||||
render_403 unless can_read_experiment?(@my_module.experiment)
|
render_403 unless can_read_experiment?(@my_module.experiment)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -5,16 +5,25 @@ require 'csv'
|
||||||
module RepositoryZipExport
|
module RepositoryZipExport
|
||||||
def self.generate_zip(params, repository, current_user)
|
def self.generate_zip(params, repository, current_user)
|
||||||
# Fetch rows in the same order as in the currently viewed datatable
|
# Fetch rows in the same order as in the currently viewed datatable
|
||||||
ordered_row_ids = params[:row_ids]
|
if params[:my_module_id]
|
||||||
id_row_map = RepositoryRow.where(id: ordered_row_ids,
|
rows = if repository.is_a?(RepositorySnapshot)
|
||||||
repository: repository)
|
repository.repository_rows
|
||||||
.index_by(&:id)
|
else
|
||||||
ordered_rows = ordered_row_ids.collect { |id| id_row_map[id.to_i] }
|
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)
|
||||||
|
rows = ordered_row_ids.collect { |id| id_row_map[id.to_i] }
|
||||||
|
end
|
||||||
|
|
||||||
zip = ZipExport.create(user: current_user)
|
zip = ZipExport.create(user: current_user)
|
||||||
zip.generate_exportable_zip(
|
zip.generate_exportable_zip(
|
||||||
current_user,
|
current_user,
|
||||||
to_csv(ordered_rows, params[:header_ids], current_user, repository.team),
|
to_csv(rows, params[:header_ids], current_user, repository.team),
|
||||||
:repositories
|
:repositories
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,15 @@
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<template id="repositoryToolbarButtonsTemplate">
|
<template id="repositoryToolbarButtonsTemplate">
|
||||||
<div class="">
|
<div class="">
|
||||||
<div class="pull-left">
|
<div class="pull-left sci-btn-group">
|
||||||
<button id="showVersionsSidebar" type="button" class="btn btn-secondary">
|
<button id="showVersionsSidebar" type="button" class="btn btn-secondary">
|
||||||
<span class="fas fa-eye"></span>
|
<span class="fas fa-eye"></span>
|
||||||
<%= t('my_modules.repository.snapshots.full_view.versions_sidebar_button') %>
|
<%= t('my_modules.repository.snapshots.full_view.versions_sidebar_button') %>
|
||||||
</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>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
data-default-order="<%= default_snapshot_table_order_as_js_array %>"
|
data-default-order="<%= default_snapshot_table_order_as_js_array %>"
|
||||||
data-default-table-columns="<%= default_snapshot_table_columns %>"
|
data-default-table-columns="<%= default_snapshot_table_columns %>"
|
||||||
data-load-state-url="<%= repository_load_table_state_path(@repository_snapshot) %>"
|
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) %>"
|
data-versions-sidebar-url="<%= full_view_sidebar_my_module_repository_snapshots_path(@my_module, @repository_snapshot.parent_id) %>"
|
||||||
>
|
>
|
||||||
<thead>
|
<thead>
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
data-repository-name="<%= @repository.name %>"
|
data-repository-name="<%= @repository.name %>"
|
||||||
data-assigned-items-count="<%= @my_module.repository_rows_count(@repository) %>"
|
data-assigned-items-count="<%= @my_module.repository_rows_count(@repository) %>"
|
||||||
data-load-state-url="<%= repository_load_table_state_path(@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) %>"
|
data-versions-sidebar-url="<%= full_view_sidebar_my_module_repository_snapshots_path(@my_module, @repository) %>"
|
||||||
>
|
>
|
||||||
<thead>
|
<thead>
|
||||||
|
|
|
||||||
|
|
@ -810,6 +810,7 @@ en:
|
||||||
no_assigned_items: 'No items assigned'
|
no_assigned_items: 'No items assigned'
|
||||||
no_snapshots_label: 'You have not created any snapshots yet. To do so click the button bellow.'
|
no_snapshots_label: 'You have not created any snapshots yet. To do so click the button bellow.'
|
||||||
versions_sidebar_button: 'View versions'
|
versions_sidebar_button: 'View versions'
|
||||||
|
export_button: "Export .csv"
|
||||||
create_button: 'Create snapshot'
|
create_button: 'Create snapshot'
|
||||||
set_default_button: 'Set as default view'
|
set_default_button: 'Set as default view'
|
||||||
created_by: 'by %{full_name}'
|
created_by: 'by %{full_name}'
|
||||||
|
|
|
||||||
|
|
@ -385,6 +385,7 @@ Rails.application.routes.draw do
|
||||||
member do
|
member do
|
||||||
get :full_view_table
|
get :full_view_table
|
||||||
post :index_dt
|
post :index_dt
|
||||||
|
post :export_repository
|
||||||
get :assign_repository_records_modal, as: :assign_modal
|
get :assign_repository_records_modal, as: :assign_modal
|
||||||
get :update_repository_records_modal, as: :update_modal
|
get :update_repository_records_modal, as: :update_modal
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue