mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-13 16:45:18 +08:00
Fix date time inventories reminder processing [SCI-7816]
This commit is contained in:
parent
667e0be9f6
commit
fa96a9a939
10 changed files with 24 additions and 60 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ' \
|
||||
|
|
|
@ -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 })
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
||||
#=============================================================================
|
||||
|
|
Loading…
Add table
Reference in a new issue