mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-07 21:55:20 +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
|
@repository_rows = datatable_service.repository_rows
|
||||||
.preload(:repository_columns,
|
.preload(:repository_columns,
|
||||||
:created_by,
|
:created_by,
|
||||||
|
:archived_by,
|
||||||
repository_cells: { value: @repository.cell_preload_includes })
|
repository_cells: { value: @repository.cell_preload_includes })
|
||||||
.page(page)
|
.page(page)
|
||||||
.per(per_page)
|
.per(per_page)
|
||||||
|
|
|
@ -5,6 +5,7 @@ module RepositoryDatatableHelper
|
||||||
|
|
||||||
def prepare_row_columns(repository_rows, repository, columns_mappings, team, options = {})
|
def prepare_row_columns(repository_rows, repository, columns_mappings, team, options = {})
|
||||||
reminder_row_ids = repository_reminder_row_ids(repository_rows, repository)
|
reminder_row_ids = repository_reminder_row_ids(repository_rows, repository)
|
||||||
|
has_stock_management = repository.has_stock_management?
|
||||||
|
|
||||||
repository_rows.map do |record|
|
repository_rows.map do |record|
|
||||||
default_cells = public_send("#{repository.class.name.underscore}_default_columns", record)
|
default_cells = public_send("#{repository.class.name.underscore}_default_columns", record)
|
||||||
|
@ -21,7 +22,7 @@ module RepositoryDatatableHelper
|
||||||
)
|
)
|
||||||
}.merge(default_cells)
|
}.merge(default_cells)
|
||||||
|
|
||||||
if record.repository.has_stock_management?
|
if has_stock_management
|
||||||
row['manageStockUrl'] = if record.has_stock?
|
row['manageStockUrl'] = if record.has_stock?
|
||||||
Rails.application.routes.url_helpers
|
Rails.application.routes.url_helpers
|
||||||
.edit_repository_stock_repository_repository_row_url(
|
.edit_repository_stock_repository_repository_row_url(
|
||||||
|
@ -46,21 +47,23 @@ module RepositoryDatatableHelper
|
||||||
row['0'] = record[:row_assigned] if options[:my_module]
|
row['0'] = record[:row_assigned] if options[:my_module]
|
||||||
|
|
||||||
# Add custom columns
|
# 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|
|
custom_cells.each do |cell|
|
||||||
row[columns_mappings[cell.repository_column.id]] =
|
row[columns_mappings[cell.repository_column.id]] =
|
||||||
display_cell_value(cell, team, repository)
|
display_cell_value(cell, team, repository)
|
||||||
end
|
end
|
||||||
|
|
||||||
stock_present = record.repository_stock_cell.present?
|
stock_cell = record.repository_cells.find { |cell| cell.value_type == 'RepositoryStockValue' }
|
||||||
stock_managable = !options[:disable_stock_management] && can_manage_repository_stock?(record.repository)
|
stock_managable = has_stock_management &&
|
||||||
|
!options[:disable_stock_management] &&
|
||||||
|
can_manage_repository_stock?(record.repository)
|
||||||
|
|
||||||
# always add stock cell, even if empty
|
# 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'][:stock_managable] = stock_managable
|
||||||
row['stock']['displayWarnings'] = display_stock_warnings?(repository)
|
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'
|
row['stock']['value_type'] = 'RepositoryStockValue'
|
||||||
|
|
||||||
|
@ -73,7 +76,7 @@ module RepositoryDatatableHelper
|
||||||
strip_insignificant_zeros: true
|
strip_insignificant_zeros: true
|
||||||
)
|
)
|
||||||
row['consumedStock'] = {
|
row['consumedStock'] = {
|
||||||
stock_present: stock_present,
|
stock_present: stock_cell.present?,
|
||||||
consumptionPermitted: stock_consumption_permitted?(repository, options[:my_module]),
|
consumptionPermitted: stock_consumption_permitted?(repository, options[:my_module]),
|
||||||
consumptionManagable: consumption_managable,
|
consumptionManagable: consumption_managable,
|
||||||
updateStockConsumptionUrl: Rails.application.routes.url_helpers.consume_modal_my_module_repository_path(
|
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_date_time_values.data - NOW()) <= '\
|
||||||
'(repository_columns.metadata ->> \'reminder_delta\')::int * interval \'1 sec\''
|
'(repository_columns.metadata ->> \'reminder_delta\')::int * interval \'1 sec\''
|
||||||
).joins( # stock reminders
|
).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_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 <= repository_stock_values.low_stock_threshold OR '\
|
||||||
' repository_stock_values.amount <= 0)'
|
' repository_stock_values.amount <= 0)'
|
||||||
).joins(
|
).joins(
|
||||||
'LEFT OUTER JOIN "hidden_repository_cell_reminders" ON '\
|
'LEFT OUTER JOIN "hidden_repository_cell_reminders" ON '\
|
||||||
'"repository_cells"."id" = "hidden_repository_cell_reminders"."repository_cell_id" AND '\
|
'"repository_cells"."id" = "hidden_repository_cell_reminders"."repository_cell_id"'
|
||||||
'"hidden_repository_cell_reminders"."user_id" = ' + user.id.to_s
|
|
||||||
).where(
|
).where(
|
||||||
|
'"hidden_repository_cell_reminders"."user_id" = ? AND '\
|
||||||
'hidden_repository_cell_reminders.id IS NULL 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
|
||||||
end
|
end
|
||||||
|
|
|
@ -64,7 +64,7 @@ Canaid::Permissions.register_for(Repository) do
|
||||||
|
|
||||||
if repository.shared_with?(user.current_team)
|
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)
|
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)
|
user.is_normal_user_or_admin_of_team?(repository.team)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue