mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-21 07:26:15 +08:00
Handle stock management in full table views [SCI-6440]
This commit is contained in:
parent
9d1d31935e
commit
b22fde2334
|
@ -11,6 +11,41 @@ var MyModuleRepositories = (function() {
|
|||
var FULL_VIEW_TABLE_SCROLLBAR;
|
||||
var SELECTED_ROWS = {};
|
||||
|
||||
function stockManagementColumns(otherColumnCount) {
|
||||
return [
|
||||
{
|
||||
visible: true,
|
||||
searchable: false,
|
||||
data: otherColumnCount
|
||||
},
|
||||
{
|
||||
visible: true,
|
||||
searchable: false,
|
||||
data: otherColumnCount + 1
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
function stockManagementColumnDefs() {
|
||||
return [
|
||||
{
|
||||
targets: 'row-stock',
|
||||
className: 'item-stock',
|
||||
sWidth: '1%',
|
||||
render: function(data) {
|
||||
return $.fn.dataTable.render.RepositoryStockValue(data);
|
||||
}
|
||||
}, {
|
||||
targets: 'row-consumption',
|
||||
className: 'item-consumed-stock',
|
||||
sWidth: '1%',
|
||||
render: function(data) {
|
||||
return $.fn.dataTable.render.RepositoryConsumedStockValue(data);
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
function reloadRepositoriesList(repositoryId) {
|
||||
var repositoriesContainer = $('#assigned-items-container');
|
||||
$.get(repositoriesContainer.data('repositories-list-url'), function(result) {
|
||||
|
@ -38,10 +73,17 @@ var MyModuleRepositories = (function() {
|
|||
defaultContent: $.fn.dataTable.render['default' + column.dataset.type](column.id)
|
||||
});
|
||||
});
|
||||
|
||||
if ($(tableContainer).data('stock-management')) {
|
||||
let column = stockManagementColumns(columns.length)[1];
|
||||
column.data -= 1;
|
||||
columns.push(column);
|
||||
}
|
||||
|
||||
return columns;
|
||||
}
|
||||
|
||||
function fullViewColumnDefs() {
|
||||
function fullViewColumnDefs(tableContainer) {
|
||||
let columnDefs = [{
|
||||
targets: 0,
|
||||
visible: true,
|
||||
|
@ -89,11 +131,19 @@ var MyModuleRepositories = (function() {
|
|||
if (typeof data === 'object' && $.fn.dataTable.render[data.value_type]) {
|
||||
return $.fn.dataTable.render[data.value_type](data);
|
||||
}
|
||||
if (data !== undefined && data.stock_present !== undefined) {
|
||||
return $.fn.dataTable.render.RepositoryConsumedStockValue(data);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
if ($(tableContainer).data('stock-management')) {
|
||||
let stockColumnDef = stockManagementColumnDefs()[1];
|
||||
columnDefs.push(stockColumnDef);
|
||||
}
|
||||
|
||||
return columnDefs;
|
||||
}
|
||||
|
||||
|
@ -107,16 +157,7 @@ var MyModuleRepositories = (function() {
|
|||
];
|
||||
|
||||
if ($(tableContainer).data('stock-management')) {
|
||||
columns.push({
|
||||
visible: true,
|
||||
searchable: false,
|
||||
data: 1
|
||||
});
|
||||
columns.push({
|
||||
visible: true,
|
||||
searchable: false,
|
||||
data: 2
|
||||
});
|
||||
columns = columns.concat(stockManagementColumns(columns.length));
|
||||
}
|
||||
|
||||
return columns;
|
||||
|
@ -133,21 +174,7 @@ var MyModuleRepositories = (function() {
|
|||
}];
|
||||
|
||||
if ($(tableContainer).data('stock-management')) {
|
||||
columnDefs.push({
|
||||
targets: 1,
|
||||
className: 'item-stock',
|
||||
sWidth: '1%',
|
||||
render: function(data) {
|
||||
return $.fn.dataTable.render.RepositoryStockValue(data);
|
||||
}
|
||||
}, {
|
||||
targets: 2,
|
||||
className: 'item-consumed-stock',
|
||||
sWidth: '1%',
|
||||
render: function(data) {
|
||||
return $.fn.dataTable.render.RepositoryConsumedStockValue(data);
|
||||
}
|
||||
});
|
||||
columnDefs = columnDefs.concat(stockManagementColumnDefs());
|
||||
}
|
||||
|
||||
return columnDefs;
|
||||
|
@ -192,6 +219,7 @@ var MyModuleRepositories = (function() {
|
|||
}
|
||||
|
||||
function reloadSimpleTable() {
|
||||
if (!SIMPLE_TABLE) return;
|
||||
SIMPLE_TABLE.ajax.reload(null, false);
|
||||
}
|
||||
|
||||
|
@ -220,7 +248,7 @@ var MyModuleRepositories = (function() {
|
|||
type: 'POST'
|
||||
},
|
||||
columns: tableColumns(tableContainer, options.skipCheckbox),
|
||||
columnDefs: fullViewColumnDefs(),
|
||||
columnDefs: fullViewColumnDefs(tableContainer),
|
||||
|
||||
fnInitComplete: function() {
|
||||
var dataTableWrapper = $(tableContainer).closest('.dataTables_wrapper');
|
||||
|
@ -748,6 +776,10 @@ var MyModuleRepositories = (function() {
|
|||
},
|
||||
reloadSimpletable: () => {
|
||||
reloadSimpleTable();
|
||||
},
|
||||
reloadFullViewTable: () => {
|
||||
if (!FULL_VIEW_TABLE) return;
|
||||
FULL_VIEW_TABLE.ajax.reload(null, false);
|
||||
}
|
||||
};
|
||||
}());
|
||||
|
|
|
@ -27,6 +27,7 @@ var MyModuleStockConsumption = (function() {
|
|||
|
||||
$(CONSUMPTION_MODAL + ' form').on('ajax:success', function() {
|
||||
MyModuleRepositories.reloadSimpletable();
|
||||
MyModuleRepositories.reloadFullViewTable();
|
||||
$manageModal.modal('hide');
|
||||
$(WARNING_MODAL).modal('hide');
|
||||
});
|
||||
|
|
|
@ -18,10 +18,12 @@ class MyModuleRepositoriesController < ApplicationController
|
|||
|
||||
@datatable_params = {
|
||||
view_mode: params[:view_mode],
|
||||
my_module: @my_module
|
||||
my_module: @my_module,
|
||||
include_stock_consumption: @repository.has_stock_management?
|
||||
}
|
||||
@all_rows_count = datatable_service.all_count
|
||||
@columns_mappings = datatable_service.mappings
|
||||
|
||||
if params[:simple_view]
|
||||
repository_rows = datatable_service.repository_rows
|
||||
rows_view = 'repository_rows/simple_view_index.json'
|
||||
|
@ -101,7 +103,10 @@ class MyModuleRepositoriesController < ApplicationController
|
|||
|
||||
def full_view_table
|
||||
render json: {
|
||||
html: render_to_string(partial: 'my_modules/repositories/full_view_table')
|
||||
html: render_to_string(
|
||||
partial: 'my_modules/repositories/full_view_table',
|
||||
locals: { include_stock_consumption: params[:include_stock_consumption] }
|
||||
)
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
@ -5,32 +5,37 @@ module RepositoryDatatableHelper
|
|||
|
||||
def prepare_row_columns(repository_rows, repository, columns_mappings, team, options = {})
|
||||
repository_rows.map do |record|
|
||||
row = {
|
||||
'DT_RowId': record.id,
|
||||
'DT_RowAttr': { 'data-state': row_style(record) },
|
||||
default_cells = {
|
||||
'1': assigned_row(record),
|
||||
'2': record.code,
|
||||
'3': escape_input(record.name),
|
||||
'4': I18n.l(record.created_at, format: :full),
|
||||
'5': escape_input(record.created_by.full_name),
|
||||
'6': (record.archived_on ? I18n.l(record.archived_on, format: :full) : ''),
|
||||
'7': escape_input(record.archived_by&.full_name),
|
||||
'recordInfoUrl': Rails.application.routes.url_helpers.repository_repository_row_path(repository, record)
|
||||
'7': escape_input(record.archived_by&.full_name)
|
||||
}
|
||||
|
||||
row['manageStockUrl'] = if record.has_stock?
|
||||
Rails.application.routes.url_helpers
|
||||
.edit_repository_stock_repository_repository_row_url(
|
||||
repository,
|
||||
record
|
||||
)
|
||||
else
|
||||
Rails.application.routes.url_helpers
|
||||
.new_repository_stock_repository_repository_row_url(
|
||||
repository,
|
||||
record
|
||||
)
|
||||
end
|
||||
row = {
|
||||
'DT_RowId': record.id,
|
||||
'DT_RowAttr': { 'data-state': row_style(record) },
|
||||
'recordInfoUrl': Rails.application.routes.url_helpers.repository_repository_row_path(repository, record)
|
||||
}.merge(default_cells)
|
||||
|
||||
if options[:include_stock_consumption]
|
||||
row['manageStockUrl'] = if record.has_stock?
|
||||
Rails.application.routes.url_helpers
|
||||
.edit_repository_stock_repository_repository_row_url(
|
||||
repository,
|
||||
record
|
||||
)
|
||||
else
|
||||
Rails.application.routes.url_helpers
|
||||
.new_repository_stock_repository_repository_row_url(
|
||||
repository,
|
||||
record
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
unless options[:view_mode]
|
||||
row['recordUpdateUrl'] =
|
||||
|
@ -41,16 +46,37 @@ module RepositoryDatatableHelper
|
|||
row['0'] = record[:row_assigned] if options[:my_module]
|
||||
|
||||
# Add custom columns
|
||||
record.repository_cells.each do |cell|
|
||||
custom_cells = record.repository_cells
|
||||
|
||||
custom_cells.each do |cell|
|
||||
row[columns_mappings[cell.repository_column.id]] =
|
||||
display_cell_value(cell, team)
|
||||
end
|
||||
|
||||
if options[:include_stock_consumption] && record.repository.has_stock_management? && options[:my_module]
|
||||
row[(default_cells.length + custom_cells.length + 1).to_s] =
|
||||
if record.repository_stock_cell.present?
|
||||
display_cell_value(record.repository_stock_cell, record.repository.team)
|
||||
end
|
||||
row[(default_cells.length + custom_cells.length + 2).to_s] = {
|
||||
stock_present: record.repository_stock_cell.present?,
|
||||
updateStockConsumptionUrl: Rails.application.routes.url_helpers.consume_modal_my_module_repository_path(
|
||||
options[:my_module],
|
||||
record.repository,
|
||||
row_id: record.id
|
||||
),
|
||||
value: {
|
||||
consumed_stock_formatted: record.consumed_stock,
|
||||
unit: record.repository_stock_value.repository_stock_unit_item&.data
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
row
|
||||
end
|
||||
end
|
||||
|
||||
def prepare_simple_view_row_columns(repository_rows, my_module)
|
||||
def prepare_simple_view_row_columns(repository_rows, my_module, options = {})
|
||||
repository_rows.map do |record|
|
||||
row = {
|
||||
DT_RowId: record.id,
|
||||
|
@ -59,7 +85,7 @@ module RepositoryDatatableHelper
|
|||
recordInfoUrl: Rails.application.routes.url_helpers.repository_repository_row_path(record.repository, record)
|
||||
}
|
||||
|
||||
if record.repository.has_stock_management?
|
||||
if options[:include_stock_consumption] && record.repository.has_stock_management?
|
||||
row['1'] =
|
||||
if record.repository_stock_cell.present?
|
||||
display_cell_value(record.repository_stock_cell, record.repository.team)
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<a href="#" id="selectLiveVersionButton" class="list-group-item live-version-item version-button"
|
||||
data-id="<%= @repository.id %>"
|
||||
data-selected="<%= @repository_snapshots.select{ |s| s.selected == true }.blank? %>"
|
||||
data-table-url="<%= full_view_table_my_module_repository_path(@my_module, @repository) %>"
|
||||
data-table-url="<%= full_view_table_my_module_repository_path(@my_module, @repository, include_stock_consumption: true) %>"
|
||||
>
|
||||
<h2 class="list-group-item-heading">
|
||||
<%= t('my_modules.repository.snapshots.full_view.live') %>
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
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-stock-management="<%= include_stock_consumption && @repository.has_stock_management? %>"
|
||||
data-stock-consumption-editable="<%= include_stock_consumption && can_update_my_module_stock_consumption?(@my_module) %>">
|
||||
<thead>
|
||||
<tr>
|
||||
<th id="checkbox">
|
||||
|
@ -37,6 +38,9 @@
|
|||
<%= display_tooltip(column.name) %>
|
||||
</th>
|
||||
<% end %>
|
||||
<% if include_stock_consumption && @repository.has_stock_management? && can_update_my_module_stock_consumption?(@my_module) %>
|
||||
<th class="row-consumption" data-columns-visible="false"><%= t("repositories.table.row_consumption") %></th>
|
||||
<% end %>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
</span>
|
||||
<% end %>
|
||||
<div class="action-buttons">
|
||||
<button class="btn btn-light icon-btn full-screen" data-table-url="<%= assigned_repository_full_view_table_path(@my_module, repository) %>">
|
||||
<button class="btn btn-light icon-btn full-screen" data-table-url="<%= assigned_repository_full_view_table_path(@my_module, repository) %>?include_stock_consumption=true">
|
||||
<i class="fas fa-expand"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
@ -28,12 +28,12 @@
|
|||
data-name-column-id="<%= assigned_repository_simple_view_name_column_id(repository) %>"
|
||||
>
|
||||
<table class="table hidden repository-table"
|
||||
data-stock-management="<%= repository.has_stock_management? %>"
|
||||
data-stock-consumption-editable="<%= can_manage_my_module_repository_rows?(@my_module) %>">
|
||||
data-stock-management="<%= !repository.is_a?(RepositorySnapshot) && repository.has_stock_management? %>"
|
||||
data-stock-consumption-editable="<%= can_update_my_module_stock_consumption?(@my_module) %>">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="row-name"><%= t("repositories.table.row_name") %></th>
|
||||
<% if repository.has_stock_management? %>
|
||||
<% if !repository.is_a?(RepositorySnapshot) && repository.has_stock_management? %>
|
||||
<th class="row-stock" data-columns-visible="false"><%= repository.repository_stock_column.name %></th>
|
||||
<th class="row-consumption" data-columns-visible="false"><%= t("repositories.table.row_consumption") %></th>
|
||||
<% end %>
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
json.draw @draw
|
||||
json.data do
|
||||
json.array! prepare_simple_view_row_columns(@repository_rows, @my_module)
|
||||
json.array! prepare_simple_view_row_columns(
|
||||
@repository_rows, @my_module, { include_stock_consumption: @repository.has_stock_management? }
|
||||
)
|
||||
end
|
||||
json.recordsFiltered @repository_rows.first ? @repository_rows.first.filtered_count : 0
|
||||
json.recordsTotal @all_rows_count
|
||||
|
|
Loading…
Reference in a new issue