mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-03-03 19:24:48 +08:00
Improve Inventory table loading time [SCI-6886]
This commit is contained in:
parent
bb067974b4
commit
07716e56a5
4 changed files with 18 additions and 12 deletions
|
@ -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)
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue