diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb index 331c539d6..9d3e66036 100644 --- a/app/helpers/repository_datatable_helper.rb +++ b/app/helpers/repository_datatable_helper.rb @@ -14,7 +14,6 @@ module RepositoryDatatableHelper DT_RowId: record.id, DT_RowAttr: { 'data-state': row_style(record) }, recordInfoUrl: Rails.application.routes.url_helpers.repository_repository_row_path(repository, record), - hasActiveReminders: record.has_active_stock_reminders || record.has_active_datetime_reminders, rowRemindersUrl: Rails.application.routes.url_helpers .active_reminder_repository_cells_repository_repository_row_url( @@ -23,6 +22,10 @@ module RepositoryDatatableHelper ) ) + if reminders_enabled + row['hasActiveReminders'] = record.has_active_stock_reminders || record.has_active_datetime_reminders + end + if has_stock_management row['manageStockUrl'] = if record.has_stock? Rails.application.routes.url_helpers @@ -108,7 +111,6 @@ module RepositoryDatatableHelper DT_RowAttr: { 'data-state': row_style(record) }, '0': escape_input(record.name), recordInfoUrl: Rails.application.routes.url_helpers.repository_repository_row_path(record.repository, record), - hasActiveReminders: record.has_active_stock_reminders || record.has_active_datetime_reminders, rowRemindersUrl: Rails.application.routes.url_helpers .active_reminder_repository_cells_repository_repository_row_url( @@ -117,6 +119,10 @@ module RepositoryDatatableHelper ) } + if reminders_enabled + row['hasActiveReminders'] = record.has_active_stock_reminders || record.has_active_datetime_reminders + end + if has_stock_management stock_present = record.repository_stock_cell.present? # Always disabled in a simple view @@ -276,11 +282,11 @@ module RepositoryDatatableHelper end def with_reminders_status(repository_rows, repository) - # don't load reminders for archived repositories - return repository_rows if repository.archived? - - # don't load reminders for snapshots - return repository_rows if repository.is_a?(RepositorySnapshot) + # don't load reminders for archived repositories or snapshots + if repository.archived? || repository.is_a?(RepositorySnapshot) + return repository_rows.select('FALSE AS has_active_stock_reminders') + .select('FALSE AS has_active_datetime_reminders') + end repository_cells = RepositoryCell.joins( "INNER JOIN repository_columns ON repository_columns.id = repository_cells.repository_column_id " \ diff --git a/app/models/concerns/reminder_repository_cell_joinable.rb b/app/models/concerns/reminder_repository_cell_joinable.rb index 3f61180a5..d376f9d80 100644 --- a/app/models/concerns/reminder_repository_cell_joinable.rb +++ b/app/models/concerns/reminder_repository_cell_joinable.rb @@ -5,13 +5,16 @@ module ReminderRepositoryCellJoinable included do def self.reminder_repository_cells_scope(relation, user) - relation.joins( # datetime reminders + relation.joins( + 'INNER JOIN repository_columns repository_reminder_columns ON ' \ + 'repository_reminder_columns.id = repository_cells.repository_column_id' + ).joins( # datetime reminders '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_reminder_columns.metadata ->> \'reminder_delta\' <> \'\' AND '\ '(repository_date_time_values.data - NOW()) <= '\ - '(repository_columns.metadata ->> \'reminder_delta\')::int * interval \'1 sec\'' + '(repository_reminder_columns.metadata ->> \'reminder_delta\')::int * interval \'1 sec\'' ).joins( # stock reminders 'LEFT OUTER JOIN "repository_stock_values" ON '\ '"repository_cells"."value_type" = \'RepositoryStockValue\' AND '\ diff --git a/app/models/repository_cell.rb b/app/models/repository_cell.rb index 9f2c27e0b..bff0e34d8 100644 --- a/app/models/repository_cell.rb +++ b/app/models/repository_cell.rb @@ -46,7 +46,7 @@ class RepositoryCell < ApplicationRecord unless: :importing scope :with_active_reminder, lambda { |user| - reminder_repository_cells_scope(joins(:repository_column), user) + reminder_repository_cells_scope(self, user) } def self.create_with_value!(row, column, data, user) diff --git a/app/models/repository_row.rb b/app/models/repository_row.rb index 21aeaee19..5718b8ce1 100644 --- a/app/models/repository_row.rb +++ b/app/models/repository_row.rb @@ -88,7 +88,7 @@ class RepositoryRow < ApplicationRecord scope :archived, -> { where(archived: true) } scope :with_active_reminders, lambda { |user| - reminder_repository_cells_scope(joins(repository_cells: :repository_column), user) + reminder_repository_cells_scope(joins(:repository_cells), user) } def code