From 20ef08907a442a804225fdd3e211b8ce16dec8bb Mon Sep 17 00:00:00 2001
From: artoscinote <85488244+artoscinote@users.noreply.github.com>
Date: Tue, 8 Mar 2022 14:52:45 +0100
Subject: [PATCH] Stock column fixes [SCI-6455] (#3878)
* Fix issues with stock column management [SCI-6455]
* Refactor stock column in datatables [SCI-6455]
---
.../javascripts/my_modules/repositories.js | 29 ++++++++--------
app/assets/javascripts/repositories/index.js | 9 +++++
.../repositories/renderers/view_renderers.js | 34 ++++++++++---------
.../repositories/repository_datatable.js | 16 +++++++--
.../columns_initializers/stock_column_type.js | 2 +-
.../my_module_repositories_controller.rb | 2 ++
app/helpers/repository_datatable_helper.rb | 14 ++++++--
.../repository_stock_value_serializer.rb | 2 ++
.../update_stock_column_service.rb | 2 +-
.../repositories/_full_view_table.html.erb | 2 +-
.../repositories/_repository_table.html.erb | 2 +-
.../_manage_column_modal_content.html.erb | 9 -----
12 files changed, 74 insertions(+), 49 deletions(-)
diff --git a/app/assets/javascripts/my_modules/repositories.js b/app/assets/javascripts/my_modules/repositories.js
index 3e0ad483b..50791f220 100644
--- a/app/assets/javascripts/my_modules/repositories.js
+++ b/app/assets/javascripts/my_modules/repositories.js
@@ -11,7 +11,7 @@ var MyModuleRepositories = (function() {
var FULL_VIEW_TABLE_SCROLLBAR;
var SELECTED_ROWS = {};
- function stockManagementColumns(otherColumnCount) {
+ function stockManagementColumns() {
return [
{
visible: true,
@@ -65,17 +65,20 @@ var MyModuleRepositories = (function() {
columns[i].defaultContent = '';
if (skipCheckbox && i === 0) columns[i].visible = false;
}
+
customColumns.each((i, column) => {
- columns.push({
- visible: true,
- searchable: true,
- data: String(columns.length),
- defaultContent: $.fn.dataTable.render['default' + column.dataset.type](column.id)
- });
+ if (!$(column).hasClass('item-stock')) {
+ columns.push({
+ visible: true,
+ searchable: true,
+ data: String(columns.length),
+ defaultContent: $.fn.dataTable.render['default' + column.dataset.type](column.id)
+ });
+ }
});
if ($(tableContainer).data('stock-management')) {
- columns.push(stockManagementColumns(columns.length)[1]);
+ columns = columns.concat(stockManagementColumns());
}
return columns;
@@ -121,6 +124,9 @@ var MyModuleRepositories = (function() {
});
}
+ if ($(tableContainer).data('stock-management')) {
+ columnDefs = columnDefs.concat(stockManagementColumnDefs());
+ }
columnDefs.push(
{
@@ -137,11 +143,6 @@ var MyModuleRepositories = (function() {
}
);
- if ($(tableContainer).data('stock-management')) {
- let stockColumnDef = stockManagementColumnDefs()[1];
- columnDefs.push(stockColumnDef);
- }
-
return columnDefs;
}
@@ -155,7 +156,7 @@ var MyModuleRepositories = (function() {
];
if ($(tableContainer).data('stock-management')) {
- columns = columns.concat(stockManagementColumns(columns.length));
+ columns = columns.concat(stockManagementColumns());
}
return columns;
diff --git a/app/assets/javascripts/repositories/index.js b/app/assets/javascripts/repositories/index.js
index 5d31ec948..30280b6d7 100644
--- a/app/assets/javascripts/repositories/index.js
+++ b/app/assets/javascripts/repositories/index.js
@@ -86,6 +86,15 @@
}, {
targets: 8,
visible: archived
+ },
+ {
+ visible: true,
+ searchable: false,
+ data: 'stock',
+ render: {
+ _: 'display',
+ sort: 'sort'
+ }
}],
fnInitComplete: function(e) {
var dataTableWrapper = $(e.nTableWrapper);
diff --git a/app/assets/javascripts/repositories/renderers/view_renderers.js b/app/assets/javascripts/repositories/renderers/view_renderers.js
index 282971193..7a27530b3 100644
--- a/app/assets/javascripts/repositories/renderers/view_renderers.js
+++ b/app/assets/javascripts/repositories/renderers/view_renderers.js
@@ -181,24 +181,26 @@ $.fn.dataTable.render.AssignedTasksValue = function(data) {
return "
0
";
};
-$.fn.dataTable.render.RepositoryStockValue = function(data, row) {
- if (data && data.value) {
- if (row && row.manageStockUrl) {
- return `
+$.fn.dataTable.render.RepositoryStockValue = function(data) {
+ if (data) {
+ if (data.value) {
+ if (data.stock_managable) {
+ return `
+ ${data.value.stock_formatted}
+ `;
+ }
+ return `
${data.value.stock_formatted}
- `;
+ `;
+ }
+ if (data.stock_managable) {
+ return `
+
+ ${I18n.t('libraries.manange_modal_column.stock_type.add_stock')}
+ `;
}
- return `
- ${data.value.stock_formatted}
- `;
- }
- if (data && row && row.manageStockUrl) {
- return `
-
- ${I18n.t('libraries.manange_modal_column.stock_type.add_stock')}
- `;
}
return `
${I18n.t('libraries.manange_modal_column.stock_type.no_item_stock')}
diff --git a/app/assets/javascripts/repositories/repository_datatable.js b/app/assets/javascripts/repositories/repository_datatable.js
index 86ba3866b..331f88442 100644
--- a/app/assets/javascripts/repositories/repository_datatable.js
+++ b/app/assets/javascripts/repositories/repository_datatable.js
@@ -458,12 +458,20 @@ var RepositoryDatatable = (function(global) {
visible: true
}, {
targets: '_all',
- render: function(data, type, row) {
+ render: function(data) {
if (typeof data === 'object' && $.fn.dataTable.render[data.value_type]) {
- return $.fn.dataTable.render[data.value_type](data, row);
+ return $.fn.dataTable.render[data.value_type](data);
}
return data;
}
+ },
+ {
+ targets: 'row-stock',
+ className: 'item-stock',
+ sWidth: '1%',
+ render: function(data) {
+ return $.fn.dataTable.render.RepositoryStockValue(data);
+ }
}],
language: {
emptyTable: I18n.t('repositories.show.no_items'),
@@ -488,13 +496,15 @@ var RepositoryDatatable = (function(global) {
columns[i].defaultContent = '';
}
customColumns.each((i, column) => {
+ var columnData = $(column).data('type') === 'RepositoryStockValue' ? 'stock' : String(columns.length);
columns.push({
visible: true,
searchable: true,
- data: String(columns.length),
+ data: columnData,
defaultContent: $.fn.dataTable.render['default' + column.dataset.type](column.id)
});
});
+
return columns;
}()),
drawCallback: function() {
diff --git a/app/assets/javascripts/repository_columns/columns_initializers/stock_column_type.js b/app/assets/javascripts/repository_columns/columns_initializers/stock_column_type.js
index 01519ebfb..b093ee3f8 100644
--- a/app/assets/javascripts/repository_columns/columns_initializers/stock_column_type.js
+++ b/app/assets/javascripts/repository_columns/columns_initializers/stock_column_type.js
@@ -5,7 +5,7 @@ var RepositoryStockColumnType = (function() {
var delimiterDropdown = '.stock-column-type #delimiter';
var itemsTextarea = '.stock-column-type .items-textarea';
var previewContainer = '.stock-column-type .dropdown-preview';
- var dropdownOptions = '.stock-column-type .dropdown-options';
+ var dropdownOptions = '.stock-column-type #dropdown-options';
function initStockUnitDropdown() {
dropdownSelector.init(previewContainer + ' .preview-select', {
diff --git a/app/controllers/my_module_repositories_controller.rb b/app/controllers/my_module_repositories_controller.rb
index 0e6dee9ca..d876db0ee 100644
--- a/app/controllers/my_module_repositories_controller.rb
+++ b/app/controllers/my_module_repositories_controller.rb
@@ -162,6 +162,8 @@ class MyModuleRepositoriesController < ApplicationController
module_repository_row.with_lock do
module_repository_row.assign_attributes(
stock_consumption: params[:stock_consumption],
+ repository_stock_unit_item_id:
+ module_repository_row.repository_row.repository_stock_value.repository_stock_unit_item_id,
last_modified_by: current_user,
comment: params[:comment]
)
diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb
index b838b3ab5..7d7aa13f3 100644
--- a/app/helpers/repository_datatable_helper.rb
+++ b/app/helpers/repository_datatable_helper.rb
@@ -46,15 +46,22 @@ module RepositoryDatatableHelper
row['0'] = record[:row_assigned] if options[:my_module]
# Add custom columns
- custom_cells = record.repository_cells
+ custom_cells = record.repository_cells.where.not(value_type: 'RepositoryStockValue')
custom_cells.each do |cell|
row[columns_mappings[cell.repository_column.id]] =
display_cell_value(cell, team)
end
+ stock_present = record.repository_stock_cell.present?
+ stock_managable = !options[:include_stock_consumption] && can_manage_repository_rows?(record.repository)
+
+ # always add stock cell, even if empty
+ row['stock'] = stock_present ? display_cell_value(record.repository_stock_cell, team) : {}
+ row['stock'][:stock_managable] = stock_managable
+ row['stock']['value_type'] = 'RepositoryStockValue'
+
if options[:include_stock_consumption] && record.repository.has_stock_management? && options[:my_module]
- stock_present = record.repository_stock_cell.present?
consumption_managable =
stock_present && record.repository.is_a?(Repository) && can_update_my_module_stock_consumption?(options[:my_module])
@@ -68,7 +75,8 @@ module RepositoryDatatableHelper
),
value: {
consumed_stock: record.consumed_stock,
- unit: record.repository_stock_value&.repository_stock_unit_item&.data
+ consumed_stock_formatted:
+ "#{record.consumed_stock} #{record.repository_stock_value&.repository_stock_unit_item&.data}"
}
}
end
diff --git a/app/serializers/repository_datatable/repository_stock_value_serializer.rb b/app/serializers/repository_datatable/repository_stock_value_serializer.rb
index 2892cbaa6..81baf372d 100644
--- a/app/serializers/repository_datatable/repository_stock_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_stock_value_serializer.rb
@@ -2,6 +2,8 @@
module RepositoryDatatable
class RepositoryStockValueSerializer < RepositoryBaseValueSerializer
+ include Canaid::Helpers::PermissionsHelper
+
def value
{
stock_formatted: object.formatted,
diff --git a/app/services/repository_columns/update_stock_column_service.rb b/app/services/repository_columns/update_stock_column_service.rb
index f73cf96b7..717856963 100644
--- a/app/services/repository_columns/update_stock_column_service.rb
+++ b/app/services/repository_columns/update_stock_column_service.rb
@@ -13,7 +13,7 @@ module RepositoryColumns
@column.lock!
- updating_units_names = @params[:repository_stock_unit_items_attributes].to_a.map { |e| e[:data] }
+ updating_units_names = @params[:repository_stock_unit_items_attributes].to_a.pluck(:data)
existing_units_names = @column.repository_stock_unit_items.pluck(:data)
to_be_deleted = existing_units_names - updating_units_names
to_be_created = updating_units_names - existing_units_names
diff --git a/app/views/my_modules/repositories/_full_view_table.html.erb b/app/views/my_modules/repositories/_full_view_table.html.erb
index 374633b83..851532bd6 100644
--- a/app/views/my_modules/repositories/_full_view_table.html.erb
+++ b/app/views/my_modules/repositories/_full_view_table.html.erb
@@ -28,7 +28,7 @@
<%= t("repositories.table.archived_by") %> |
<% @repository.repository_columns.order(:id).each do |column| %>
diff --git a/app/views/repositories/_repository_table.html.erb b/app/views/repositories/_repository_table.html.erb
index 14f353075..109897d64 100644
--- a/app/views/repositories/_repository_table.html.erb
+++ b/app/views/repositories/_repository_table.html.erb
@@ -40,7 +40,7 @@
| <%= t("repositories.table.archived_by") %> |
<% repository.repository_columns.order(:id).each do |column| %>
>
<%= t('libraries.manange_modal_column.select.repository_time_value') %>
-
-
-
-
|