diff --git a/app/controllers/repository_rows_controller.rb b/app/controllers/repository_rows_controller.rb index 3de7fe7e9..5426e1995 100644 --- a/app/controllers/repository_rows_controller.rb +++ b/app/controllers/repository_rows_controller.rb @@ -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) diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb index 2b2a68e9f..30da6ebba 100644 --- a/app/helpers/repository_datatable_helper.rb +++ b/app/helpers/repository_datatable_helper.rb @@ -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( diff --git a/app/models/concerns/reminder_repository_cell_joinable.rb b/app/models/concerns/reminder_repository_cell_joinable.rb index f6d6089be..eb0aeb9b8 100644 --- a/app/models/concerns/reminder_repository_cell_joinable.rb +++ b/app/models/concerns/reminder_repository_cell_joinable.rb @@ -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 diff --git a/app/permissions/repository.rb b/app/permissions/repository.rb index 69cb9851b..4b525f189 100644 --- a/app/permissions/repository.rb +++ b/app/permissions/repository.rb @@ -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