Improve Inventory table loading time [SCI-6886]

This commit is contained in:
Oleksii Kriuchykhin 2022-06-08 13:23:39 +02:00
parent bb067974b4
commit 07716e56a5
4 changed files with 18 additions and 12 deletions

View file

@ -26,6 +26,7 @@ class RepositoryRowsController < ApplicationController
@repository_rows = datatable_service.repository_rows
.preload(:repository_columns,
:created_by,
:archived_by,
repository_cells: { value: @repository.cell_preload_includes })
.page(page)
.per(per_page)

View file

@ -5,6 +5,7 @@ module RepositoryDatatableHelper
def prepare_row_columns(repository_rows, repository, columns_mappings, team, options = {})
reminder_row_ids = repository_reminder_row_ids(repository_rows, repository)
has_stock_management = repository.has_stock_management?
repository_rows.map do |record|
default_cells = public_send("#{repository.class.name.underscore}_default_columns", record)
@ -21,7 +22,7 @@ module RepositoryDatatableHelper
)
}.merge(default_cells)
if record.repository.has_stock_management?
if has_stock_management
row['manageStockUrl'] = if record.has_stock?
Rails.application.routes.url_helpers
.edit_repository_stock_repository_repository_row_url(
@ -46,21 +47,23 @@ module RepositoryDatatableHelper
row['0'] = record[:row_assigned] if options[:my_module]
# Add custom columns
custom_cells = record.repository_cells.where.not(value_type: 'RepositoryStockValue')
custom_cells = record.repository_cells.filter { |cell| cell.value_type != 'RepositoryStockValue' }
custom_cells.each do |cell|
row[columns_mappings[cell.repository_column.id]] =
display_cell_value(cell, team, repository)
end
stock_present = record.repository_stock_cell.present?
stock_managable = !options[:disable_stock_management] && can_manage_repository_stock?(record.repository)
stock_cell = record.repository_cells.find { |cell| cell.value_type == 'RepositoryStockValue' }
stock_managable = has_stock_management &&
!options[:disable_stock_management] &&
can_manage_repository_stock?(record.repository)
# always add stock cell, even if empty
row['stock'] = stock_present ? display_cell_value(record.repository_stock_cell, team, repository) : {}
row['stock'] = stock_cell.present? ? display_cell_value(record.repository_stock_cell, team, repository) : {}
row['stock'][:stock_managable] = stock_managable
row['stock']['displayWarnings'] = display_stock_warnings?(repository)
row['stock'][:stock_status] = record.repository_stock_cell&.value&.status
row['stock'][:stock_status] = stock_cell&.value&.status
row['stock']['value_type'] = 'RepositoryStockValue'
@ -73,7 +76,7 @@ module RepositoryDatatableHelper
strip_insignificant_zeros: true
)
row['consumedStock'] = {
stock_present: stock_present,
stock_present: stock_cell.present?,
consumptionPermitted: stock_consumption_permitted?(repository, options[:my_module]),
consumptionManagable: consumption_managable,
updateStockConsumptionUrl: Rails.application.routes.url_helpers.consume_modal_my_module_repository_path(

View file

@ -13,17 +13,19 @@ module ReminderRepositoryCellJoinable
'(repository_date_time_values.data - NOW()) <= '\
'(repository_columns.metadata ->> \'reminder_delta\')::int * interval \'1 sec\''
).joins( # stock reminders
'LEFT OUTER JOIN "repository_stock_values" ON "repository_stock_values"."id" = "repository_cells"."value_id" AND '\
'LEFT OUTER JOIN "repository_stock_values" ON '\
'"repository_cells"."value_type" = \'RepositoryStockValue\' AND '\
'"repository_stock_values"."id" = "repository_cells"."value_id" AND '\
'(repository_stock_values.amount <= repository_stock_values.low_stock_threshold OR '\
' repository_stock_values.amount <= 0)'
).joins(
'LEFT OUTER JOIN "hidden_repository_cell_reminders" ON '\
'"repository_cells"."id" = "hidden_repository_cell_reminders"."repository_cell_id" AND '\
'"hidden_repository_cell_reminders"."user_id" = ' + user.id.to_s
'"repository_cells"."id" = "hidden_repository_cell_reminders"."repository_cell_id"'
).where(
'"hidden_repository_cell_reminders"."user_id" = ? AND '\
'hidden_repository_cell_reminders.id IS NULL AND '\
'(repository_date_time_values.id IS NOT NULL OR repository_stock_values.id IS NOT NULL)'
'(repository_date_time_values.id IS NOT NULL OR repository_stock_values.id IS NOT NULL)',
user.id
)
end
end

View file

@ -64,7 +64,7 @@ Canaid::Permissions.register_for(Repository) do
if repository.shared_with?(user.current_team)
repository.shared_with_write?(user.current_team) && user.is_normal_user_or_admin_of_team?(user.current_team)
elsif user.teams.include?(repository.team)
else
user.is_normal_user_or_admin_of_team?(repository.team)
end
end