Fix date time inventories reminder processing [SCI-7816]

This commit is contained in:
Oleksii Kriuchykhin 2023-01-30 17:07:27 +01:00
parent 667e0be9f6
commit fa96a9a939
10 changed files with 24 additions and 60 deletions

View file

@ -12,31 +12,14 @@ var RepositoryDateColumnType = (function() {
});
}
function setReminderDelta() {
let reminderValueInput = $(columnContainer).find('.reminder-value');
reminderValueInput.val(reminderValueInput.val().replace(/[^0-9]/, ''));
let value = reminderValueInput.val();
if (!isNaN(parseInt(value, 10))) {
$(columnContainer).find('.reminder-delta').val(
value * $(columnContainer).find('.reminder-unit').val()
);
}
}
function initReminders() {
let $modal = $('#manage-repository-column');
$modal.on('input', `${columnContainer} .reminder-value, ${columnContainer} .reminder-unit`, function() {
setReminderDelta();
});
$modal.on('change', `${columnContainer} #date-reminder, ${columnContainer} #date-range`, function() {
let reminderCheckbox = $(columnContainer).find('#date-reminder');
let rangeCheckbox = $(columnContainer).find('#date-range');
rangeCheckbox.attr('disabled', reminderCheckbox.is(':checked'));
reminderCheckbox.attr('disabled', rangeCheckbox.is(':checked'));
$(columnContainer).find('.reminder-group').toggleClass('hidden', !reminderCheckbox.is(':checked'));
if (reminderCheckbox.is(':checked')) setReminderDelta();
});
$modal.on('columnModal::partialLoadedForRepositoryDateValue', function() {
@ -79,7 +62,6 @@ var RepositoryDateColumnType = (function() {
}
return {
column_type: columnType,
reminder_delta: hasReminder ? $(columnContainer).find('.reminder-delta').val() : null,
reminder_value: hasReminder ? $(columnContainer).find('.reminder-value').val() : null,
reminder_unit: hasReminder ? $(columnContainer).find('.reminder-unit').val() : null,
reminder_message: hasReminder ? $(columnContainer).find('.reminder-message').val() : null

View file

@ -12,31 +12,14 @@ var RepositoryDateTimeColumnType = (function() {
});
}
function setReminderDelta() {
let reminderValueInput = $(columnContainer).find('.reminder-value');
reminderValueInput.val(reminderValueInput.val().replace(/[^0-9]/, ''));
let value = reminderValueInput.val();
if (!isNaN(parseInt(value, 10))) {
$(columnContainer).find('.reminder-delta').val(
value * $(columnContainer).find('.reminder-unit').val()
);
}
}
function initReminders() {
let $modal = $('#manage-repository-column');
$modal.on('input', `${columnContainer} .reminder-value, ${columnContainer} .reminder-unit`, function() {
setReminderDelta();
});
$modal.on('change', `${columnContainer} #datetime-reminder, ${columnContainer} #datetime-range`, function() {
let reminderCheckbox = $(columnContainer).find('#datetime-reminder');
let rangeCheckbox = $(columnContainer).find('#datetime-range');
rangeCheckbox.attr('disabled', reminderCheckbox.is(':checked'));
reminderCheckbox.attr('disabled', rangeCheckbox.is(':checked'));
$(columnContainer).find('.reminder-group').toggleClass('hidden', !reminderCheckbox.is(':checked'));
if (reminderCheckbox.is(':checked')) setReminderDelta();
});
$modal.on('columnModal::partialLoadedForRepositoryDateTimeValue', function() {
@ -79,7 +62,6 @@ var RepositoryDateTimeColumnType = (function() {
}
return {
column_type: columnType,
reminder_delta: hasReminder ? $(columnContainer).find('.reminder-delta').val() : null,
reminder_value: hasReminder ? $(columnContainer).find('.reminder-value').val() : null,
reminder_unit: hasReminder ? $(columnContainer).find('.reminder-unit').val() : null,
reminder_message: hasReminder ? $(columnContainer).find('.reminder-message').val() : null

View file

@ -34,7 +34,7 @@ module RepositoryColumns
private
def repository_column_params
params.require(:repository_column).permit(:name, :reminder_delta, :reminder_value, :reminder_unit, :reminder_message)
params.require(:repository_column).permit(:name, :reminder_value, :reminder_unit, :reminder_message)
end
def column_type_param

View file

@ -12,9 +12,10 @@ module ReminderRepositoryCellJoinable
'LEFT OUTER JOIN "repository_date_time_values" ON '\
'"repository_date_time_values"."id" = "repository_cells"."value_id" AND '\
'"repository_cells"."value_type" = \'RepositoryDateTimeValueBase\' '\
'AND repository_reminder_columns.metadata ->> \'reminder_delta\' <> \'\' AND '\
'AND repository_reminder_columns.metadata ->> \'reminder_value\' <> \'\' AND '\
'(repository_date_time_values.data - NOW()) <= '\
'(repository_reminder_columns.metadata ->> \'reminder_delta\')::int * interval \'1 sec\''
'(repository_reminder_columns.metadata ->> \'reminder_value\')::int * ' \
'(repository_reminder_columns.metadata ->> \'reminder_unit\')::int * interval \'1 sec\''
).joins( # stock reminders
'LEFT OUTER JOIN "repository_stock_values" ON '\
'"repository_cells"."value_type" = \'RepositoryStockValue\' AND '\
@ -52,9 +53,10 @@ module ReminderRepositoryCellJoinable
'LEFT OUTER JOIN "repository_date_time_values" ON ' \
'"repository_date_time_values"."id" = "repository_cells"."value_id" AND ' \
'"repository_cells"."value_type" = \'RepositoryDateTimeValueBase\' ' \
'AND repository_columns.metadata ->> \'reminder_delta\' <> \'\' AND ' \
'AND repository_columns.metadata ->> \'reminder_value\' <> \'\' AND ' \
'(repository_date_time_values.data - NOW()) <= ' \
'(repository_columns.metadata ->> \'reminder_delta\')::int * interval \'1 sec\''
'(repository_columns.metadata ->> \'reminder_value\')::int * ' \
'(repository_columns.metadata ->> \'reminder_unit\')::int * interval \'1 sec\''
).joins(
'LEFT OUTER JOIN "hidden_repository_cell_reminders" ON ' \
'"repository_cells"."id" = "hidden_repository_cell_reminders"."repository_cell_id" AND ' \

View file

@ -26,7 +26,7 @@ class RepositoryColumn < ApplicationRecord
enum data_type: Extends::REPOSITORY_DATA_TYPES
store_accessor :metadata, %i(reminder_delta reminder_value reminder_unit reminder_message)
store_accessor :metadata, %i(reminder_value reminder_unit reminder_message)
validates :data_type, uniqueness: { if: :repository_stock_value?, scope: :repository_id }
validates :data_type, uniqueness: { if: :repository_stock_consumption_value?, scope: :repository_id }
@ -164,7 +164,7 @@ class RepositoryColumn < ApplicationRecord
end
def clear_hidden_repository_cell_reminders
return unless reminder_delta_changed?
return unless reminder_value_changed? || reminder_unit_changed?
HiddenRepositoryCellReminder.joins(repository_cell: :repository_column)
.where(repository_columns: { id: id })

View file

@ -10,11 +10,11 @@ module RepositoryDatatable
datetime: value_object.data.strftime('%Y/%m/%d %H:%M')
}
if scope.dig(:options, :reminders_enabled)
reminder_delta = scope[:column].metadata['reminder_delta']
if !scope[:repository].is_a?(RepositorySnapshot) && reminder_delta
data[:reminder] = reminder_delta.to_i + DateTime.now.to_i >= value_object.data.to_i
end
if scope.dig(:options, :reminders_enabled) &&
!scope[:repository].is_a?(RepositorySnapshot) &&
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
end
data

View file

@ -8,11 +8,11 @@ module RepositoryDatatable
datetime: value_object.data.strftime('%Y/%m/%d %H:%M')
}
if scope.dig(:options, :reminders_enabled)
reminder_delta = scope[:column].metadata['reminder_delta']
if !scope[:repository].is_a?(RepositorySnapshot) && reminder_delta
data[:reminder] = DateTime.now + reminder_delta.to_i.seconds >= value_object.data
end
if scope.dig(:options, :reminders_enabled) &&
!scope[:repository].is_a?(RepositorySnapshot) &&
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
end
data

View file

@ -5,7 +5,7 @@
<% if RepositoryBase.reminders_enabled? %>
<div class="col-sm-9 checkbox-selector">
<span class="sci-checkbox-container">
<%= check_box_tag 'range', '', column&.metadata['reminder_delta'], { id: 'date-reminder', class: 'sci-checkbox', disabled: column&.repository_date_range_value? } %>
<%= check_box_tag 'range', '', column&.metadata['reminder_value'], { id: 'date-reminder', class: 'sci-checkbox', disabled: column&.repository_date_range_value? } %>
<span class="sci-checkbox-label"></span>
</span>
<span class="reminder-label">
@ -24,8 +24,7 @@
</div>
<% if RepositoryBase.reminders_enabled? %>
<hr/>
<div class="form-group reminder-group <%= 'hidden' if column&.metadata['reminder_delta'].blank? %> ">
<input type="hidden" class="reminder-delta" value="<%= column&.metadata['reminder_delta'] %>">
<div class="form-group reminder-group <%= 'hidden' if column&.metadata['reminder_value'].blank? %> ">
<label class="control-label col-sm-3">
<%= t('libraries.manange_modal_column.datetime_type.remind') %>
</label>

View file

@ -5,7 +5,7 @@
<% if RepositoryBase.reminders_enabled? %>
<div class="col-sm-9 checkbox-selector">
<span class="sci-checkbox-container">
<%= check_box_tag 'range', '', column&.metadata['reminder_delta'], { id: 'datetime-reminder', class: 'sci-checkbox', disabled: column&.repository_date_time_range_value? } %>
<%= check_box_tag 'range', '', column&.metadata['reminder_value'], { id: 'datetime-reminder', class: 'sci-checkbox', disabled: column&.repository_date_time_range_value? } %>
<span class="sci-checkbox-label"></span>
</span>
<span class="reminder-label">
@ -24,8 +24,7 @@
</div>
<% if RepositoryBase.reminders_enabled? %>
<hr/>
<div class="form-group reminder-group <%= 'hidden' if column&.metadata['reminder_delta'].blank? %> ">
<input type="hidden" class="reminder-delta" value="<%= column&.metadata['reminder_delta'] %>">
<div class="form-group reminder-group <%= 'hidden' if column&.metadata['reminder_value'].blank? %> ">
<label class="control-label col-sm-3">
<%= t('libraries.manange_modal_column.datetime_type.remind') %>
</label>

View file

@ -43,7 +43,7 @@ class Constants
# data type is used
INFINITY = 2**32 / 2 - 1
# Prevents integer overflow for reminder_delta seconds
# Prevents integer overflow for reminder delta seconds
MAX_NUMBER_OF_REMINDER_WEEKS = 816
#=============================================================================