diff --git a/app/assets/javascripts/repositories/renderers/edit_renderers.js b/app/assets/javascripts/repositories/renderers/edit_renderers.js
index e90ac8ee5..6ca05bc0a 100644
--- a/app/assets/javascripts/repositories/renderers/edit_renderers.js
+++ b/app/assets/javascripts/repositories/renderers/edit_renderers.js
@@ -135,3 +135,8 @@ $.fn.dataTable.render.editRepositoryNumberValue = function(formId, columnId, cel
data-type="RepositoryNumberValue">
`);
};
+
+$.fn.dataTable.render.editRepositoryStockValue = function(formId, columnId, cell) {
+ return cell.node();
+};
+
diff --git a/app/assets/javascripts/repositories/renderers/new_renderers.js b/app/assets/javascripts/repositories/renderers/new_renderers.js
index 31cc6003b..c626f98d0 100644
--- a/app/assets/javascripts/repositories/renderers/new_renderers.js
+++ b/app/assets/javascripts/repositories/renderers/new_renderers.js
@@ -88,3 +88,7 @@ $.fn.dataTable.render.newRepositoryDateRangeValue = function(formId, columnId, $
$.fn.dataTable.render.newRepositoryTimeRangeValue = function(formId, columnId, $cell) {
DateTimeHelper.initDateTimeRangeEditMode(formId, columnId, $cell, 'timeonly', 'RepositoryTimeRangeValue');
};
+
+$.fn.dataTable.render.newRepositoryStockValue = function() {
+ return '';
+};
diff --git a/app/assets/javascripts/repositories/renderers/view_renderers.js b/app/assets/javascripts/repositories/renderers/view_renderers.js
index f94d875fa..69b05084b 100644
--- a/app/assets/javascripts/repositories/renderers/view_renderers.js
+++ b/app/assets/javascripts/repositories/renderers/view_renderers.js
@@ -181,7 +181,30 @@ $.fn.dataTable.render.AssignedTasksValue = function(data) {
return "
0
";
};
+$.fn.dataTable.render.RepositoryStockValue = function(data) {
+ let canManage = $('.repository-table > table').data('editable');
+ if (data) {
+ if (canManage) {
+ return `
+ ${data.value.stock_formatted}
+ `;
+ }
+ return `
+ ${data.value.stock_formatted}
+ `;
+ } else if (canManage) {
+ return `
+
+ ${I18n.t('libraries.manange_modal_column.stock_type.add_stock')}
+ `;
+ }
+ return `
+ ${I18n.t('libraries.manange_modal_column.stock_type.no_item_stock')}
+ `;
+};
$.fn.dataTable.render.defaultRepositoryStockValue = function() {
- return '';
+ return $.fn.dataTable.render.RepositoryStockValue();
};
diff --git a/app/assets/stylesheets/repository/repository_table.scss b/app/assets/stylesheets/repository/repository_table.scss
index 734ce0bf0..ccc943464 100644
--- a/app/assets/stylesheets/repository/repository_table.scss
+++ b/app/assets/stylesheets/repository/repository_table.scss
@@ -159,6 +159,37 @@
}
}
+ // Stock
+ .stock-value-view-render {
+ cursor: pointer;
+
+ &:hover {
+ text-decoration: none;
+ };
+
+ &.stock-alert {
+ color: $brand-danger;
+
+ &::before {
+ @include font-awesome;
+ content: $font-fas-exclamation-triangle;
+ }
+ }
+ }
+
+ .not-assigned-stock {
+ color: $color-black;
+ cursor: pointer;
+
+ &:hover {
+ text-decoration: none;
+ };
+ }
+
+ .empty-stock-render {
+ color: $color-silver-chalice;
+ }
+
// DateTime
.datetime-container {
display: flex;
diff --git a/app/models/user.rb b/app/models/user.rb
index 2b135122d..49a27c3c4 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -247,6 +247,16 @@ class User < ApplicationRecord
foreign_key: 'last_modified_by_id',
inverse_of: :last_modified_by,
dependent: :nullify
+ has_many :created_repository_stock_value,
+ class_name: 'RepositoryStockValue',
+ foreign_key: 'created_by_id',
+ inverse_of: :created_by,
+ dependent: :nullify
+ has_many :modified_repository_stock_value,
+ class_name: 'RepositoryStockValue',
+ foreign_key: 'created_by_id',
+ inverse_of: :last_modified_by,
+ dependent: :nullify
has_many :created_repository_checklist_types,
class_name: 'RepositoryChecklistItem',
foreign_key: 'created_by_id',
diff --git a/app/serializers/repository_datatable/repository_stock_value_serializer.rb b/app/serializers/repository_datatable/repository_stock_value_serializer.rb
new file mode 100644
index 000000000..2892cbaa6
--- /dev/null
+++ b/app/serializers/repository_datatable/repository_stock_value_serializer.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+module RepositoryDatatable
+ class RepositoryStockValueSerializer < RepositoryBaseValueSerializer
+ def value
+ {
+ stock_formatted: object.formatted,
+ stock_amount: object.data
+ }
+ end
+ end
+end
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 84f17905c..06a888754 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1598,6 +1598,8 @@ en:
all_options: 'All options'
stock_units: 'Stock units'
units_description: 'These units will appear when managing your stock. You can always add, remove or rename them in the list.'
+ add_stock: 'Add stock'
+ no_item_stock: 'No item stock'
checklist_type:
multiple_options: 'selected'
all_options: 'All options'