+
+
+
@@ -193,10 +196,12 @@ import RepositoryDateRangeValue from './repository_values/RepositoryDateRangeVal
import RepositoryTimeRangeValue from './repository_values/RepositoryTimeRangeValue.vue'
import RepositoryTimeValue from './repository_values/RepositoryTimeValue.vue'
import ScrollSpy from './repository_values/ScrollSpy.vue';
+import Reminder from './reminder.vue'
export default {
name: 'RepositoryItemSidebar',
components: {
+ Reminder,
RepositoryStockValue,
RepositoryTextValue,
RepositoryNumberValue,
diff --git a/app/javascript/vue/repository_item_sidebar/reminder.vue b/app/javascript/vue/repository_item_sidebar/reminder.vue
new file mode 100644
index 000000000..4c0a52502
--- /dev/null
+++ b/app/javascript/vue/repository_item_sidebar/reminder.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
diff --git a/app/serializers/repository_datatable/repository_date_time_value_serializer.rb b/app/serializers/repository_datatable/repository_date_time_value_serializer.rb
index 32989a920..ded1c5eb5 100644
--- a/app/serializers/repository_datatable/repository_date_time_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_date_time_value_serializer.rb
@@ -12,9 +12,22 @@ module RepositoryDatatable
if scope.dig(:options, :reminders_enabled) &&
!scope[:repository].is_a?(RepositorySnapshot) &&
- scope[:column].reminder_value.present? && scope[:column].reminder_unit.present?
+ scope[:column].reminder_value.present? &&
+ scope[:column].reminder_unit.present?
reminder_delta = scope[:column].reminder_value.to_i * scope[:column].reminder_unit.to_i
data[:reminder] = reminder_delta + DateTime.now.to_i >= value_object.data.to_i
+ data[:reminder_message] = scope[:column].reminder_message
+ days_left = ((value_object.data - Time.now.utc) / 1.day).ceil
+ if data[:reminder] && days_left.positive?
+ data[:days_left] = days_left
+ date_expiration =
+ "#{days_left} #{I18n.t("repositories.item_card.reminders.day.#{days_left == 1 ? 'one' : 'other'}")}"
+ data[:text] =
+ "#{I18n.t('repositories.item_card.reminders.date_expiration', date_expiration: date_expiration)}\n
+ #{data[:reminder_message]}"
+ elsif data[:reminder]
+ data[:text] = "#{I18n.t('repositories.item_card.reminders.item_expired')}\n#{data[:reminder_message]}"
+ end
end
data
diff --git a/app/serializers/repository_datatable/repository_date_value_serializer.rb b/app/serializers/repository_datatable/repository_date_value_serializer.rb
index 54963518f..2b9464eb7 100644
--- a/app/serializers/repository_datatable/repository_date_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_date_value_serializer.rb
@@ -10,11 +10,23 @@ module RepositoryDatatable
if scope.dig(:options, :reminders_enabled) &&
!scope[:repository].is_a?(RepositorySnapshot) &&
- scope[:column].reminder_value.present? && scope[:column].reminder_unit.present?
+ scope[:column].reminder_value.present? &&
+ scope[:column].reminder_unit.present?
reminder_delta = scope[:column].reminder_value.to_i * scope[:column].reminder_unit.to_i
data[:reminder] = reminder_delta + DateTime.now.to_i >= value_object.data.to_i
+ data[:reminder_message] = scope[:column].reminder_message
+ days_left = ((value_object.data - Time.now.utc) / 1.day).ceil
+ if data[:reminder] && days_left.positive?
+ data[:days_left] = days_left
+ date_expiration =
+ "#{days_left} #{I18n.t("repositories.item_card.reminders.day.#{days_left == 1 ? 'one' : 'other'}")}"
+ data[:text] =
+ "#{I18n.t('repositories.item_card.reminders.date_expiration', date_expiration: date_expiration)}\n
+ #{data[:reminder_message]}"
+ elsif data[:reminder]
+ data[:text] = "#{I18n.t('repositories.item_card.reminders.item_expired')}\n#{data[:reminder_message]}"
+ end
end
-
data
end
end
diff --git a/app/serializers/repository_datatable/repository_stock_value_serializer.rb b/app/serializers/repository_datatable/repository_stock_value_serializer.rb
index 40bf57d3a..796f2a96e 100644
--- a/app/serializers/repository_datatable/repository_stock_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_stock_value_serializer.rb
@@ -5,11 +5,23 @@ module RepositoryDatatable
include Canaid::Helpers::PermissionsHelper
def value
- {
+ data = {
stock_formatted: value_object.formatted,
stock_amount: value_object.data,
low_stock_threshold: value_object.low_stock_threshold
}
+ if scope.dig(:options, :reminders_enabled) &&
+ !scope[:repository].is_a?(RepositorySnapshot) &&
+ value_object.data.present? &&
+ value_object.low_stock_threshold.present?
+ data[:reminder] = value_object.low_stock_threshold > value_object.data
+ if data[:reminder] && (data[:stock_amount]).positive?
+ data[:text] = I18n.t('repositories.item_card.reminders.stock_low', stock_formated: data[:stock_formatted])
+ elsif data[:reminder]
+ data[:text] = I18n.t('repositories.item_card.reminders.stock_empty')
+ end
+ end
+ data
end
end
end
diff --git a/app/views/repository_rows/show.json.jbuilder b/app/views/repository_rows/show.json.jbuilder
index 8278793f3..e6feb098d 100644
--- a/app/views/repository_rows/show.json.jbuilder
+++ b/app/views/repository_rows/show.json.jbuilder
@@ -14,9 +14,9 @@ json.default_columns do
end
json.custom_columns do
json.array! @repository_row.repository_cells do |repository_cell|
- json.merge! serialize_repository_cell_value(repository_cell, @repository.team, @repository).merge(
- repository_cell.repository_column.as_json(only: %i(id name data_type))
- )
+ json.merge!(**serialize_repository_cell_value(
+ repository_cell, @repository.team, @repository, reminders_enabled: @reminders_present
+ ), **repository_cell.repository_column.as_json(only: %i(id name data_type)))
end
end
diff --git a/config/locales/en.yml b/config/locales/en.yml
index a6a399056..1d833c8a2 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -2240,9 +2240,17 @@ en:
added_on: "Added on"
added_at: "Added at"
added_by: "Added by"
- custom_columns_label: "Custom columns"
+ reminders:
+ stock_low: "Only %{stock_formated} left."
+ stock_empty: "No stock left"
+ date_expiration: "This item is expiring in %{date_expiration}."
+ item_expired: "This item has expired."
+ day:
+ one: "day"
+ other: "days"
stock_export: "Export"
- no_custom_columns_label: 'This item has no custom columns'
+ custom_columns_label: "Custom columns"
+ no_custom_columns_label: "This item has no custom columns"
repository_time_range_value:
no_time_range: 'No time range'
repository_text_value: