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'