Handle stock management in full table views [SCI-6440]

This commit is contained in:
Martin Artnik 2022-01-28 17:53:56 +01:00
parent 9d1d31935e
commit b22fde2334
8 changed files with 127 additions and 57 deletions

View file

@ -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);
}
};
}());

View file

@ -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');
});

View file

@ -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

View file

@ -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)

View file

@ -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') %>

View file

@ -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>

View file

@ -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 %>

View file

@ -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