diff --git a/app/assets/javascripts/repositories/renderers/view_renderers.js b/app/assets/javascripts/repositories/renderers/view_renderers.js index 0acb7cff7..c9e630bfc 100644 --- a/app/assets/javascripts/repositories/renderers/view_renderers.js +++ b/app/assets/javascripts/repositories/renderers/view_renderers.js @@ -209,11 +209,11 @@ $.fn.dataTable.render.RepositoryConsumedStockValue = function(data) { if (data.value) { if (data.consumption_managable) { return ` - ${data.value.consumed_stock_formatted} ${data.value.unit} + ${data.value.consumed_stock} ${data.value.unit || ''} `; } return ` - ${data.value.consumed_stock_formatted} ${data.value.unit} + ${data.value.consumed_stock} ${data.value.unit || ''} `; } if (data.stock_present && data.consumption_managable) { diff --git a/app/controllers/my_module_repository_snapshots_controller.rb b/app/controllers/my_module_repository_snapshots_controller.rb index 452f421de..825d11381 100644 --- a/app/controllers/my_module_repository_snapshots_controller.rb +++ b/app/controllers/my_module_repository_snapshots_controller.rb @@ -18,6 +18,7 @@ class MyModuleRepositorySnapshotsController < ApplicationController @columns_mappings = datatable_service.mappings if params[:simple_view] repository_rows = datatable_service.repository_rows + @repository = @repository_snapshot rows_view = 'repository_rows/simple_view_index.json' else repository_rows = diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb index 5d6840412..dc5c9c5e2 100644 --- a/app/helpers/repository_datatable_helper.rb +++ b/app/helpers/repository_datatable_helper.rb @@ -89,24 +89,35 @@ module RepositoryDatatableHelper stock_present = record.repository_stock_cell.present? # Always disabled in a simple view stock_managable = false - consumption_managable = stock_present && can_update_my_module_stock_consumption?(my_module) + consumption_managable = + stock_present && record.repository.is_a?(Repository) && can_update_my_module_stock_consumption?(my_module) row['1'] = stock_present ? display_cell_value(record.repository_stock_cell, record.repository.team) : {} row['1'][:stock_managable] = stock_managable row['2'] = { stock_present: stock_present, - consumption_managable: consumption_managable, - updateStockConsumptionUrl: Rails.application.routes.url_helpers.consume_modal_my_module_repository_path( - my_module, - record.repository, - row_id: record.id - ) + consumption_managable: consumption_managable } - if record.consumed_stock.present? - row['2'][:value] = { - consumed_stock_formatted: record.consumed_stock, - unit: record.repository_stock_value.repository_stock_unit_item&.data - } + if record.repository.is_a?(RepositorySnapshot) + if record.repository_stock_consumption_value.present? + row['2'][:value] = { + consumed_stock: record.repository_stock_consumption_value.amount, + unit: record.repository_stock_consumption_value.repository_stock_unit_item&.data + } + end + else + if consumption_managable + row['2'][:updateStockConsumptionUrl] = + Rails.application.routes.url_helpers.consume_modal_my_module_repository_path( + my_module, record.repository, row_id: record.id + ) + end + if record.consumed_stock.present? + row['2'][:value] = { + consumed_stock: record.consumed_stock, + unit: record.repository_stock_value&.repository_stock_unit_item&.data + } + end end end diff --git a/app/models/repository.rb b/app/models/repository.rb index 5696bccea..086d339cb 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -211,14 +211,6 @@ class Repository < RepositoryBase .destroy_all end - def self.stock_management_enabled? - true - end - - def has_stock_management? - self.class.stock_management_enabled? && repository_columns.stock_type.exists? - end - private def sync_name_with_snapshots diff --git a/app/models/repository_base.rb b/app/models/repository_base.rb index c7d3187a6..59767f2cc 100644 --- a/app/models/repository_base.rb +++ b/app/models/repository_base.rb @@ -27,6 +27,14 @@ class RepositoryBase < ApplicationRecord # Not discarded default_scope -> { kept } + def self.stock_management_enabled? + true + end + + def has_stock_management? + self.class.stock_management_enabled? && repository_columns.stock_type.exists? + end + def cell_preload_includes cell_includes = [] repository_columns.pluck(:data_type).each do |data_type| diff --git a/app/models/repository_row.rb b/app/models/repository_row.rb index 34bc3a7c9..d43206d0b 100644 --- a/app/models/repository_row.rb +++ b/app/models/repository_row.rb @@ -34,9 +34,7 @@ class RepositoryRow < ApplicationRecord repository_date: 'RepositoryDateValue', repository_date_time_range: 'RepositoryDateTimeRangeValue', repository_time_range: 'RepositoryTimeRangeValue', - repository_date_range: 'RepositoryDateRangeValue', - repository_stock: 'RepositoryStockValue', - repository_stock_consumption: 'RepositoryStockConsumptionValue' + repository_date_range: 'RepositoryDateRangeValue' }.each do |relation, class_name| has_many "#{relation}_cells".to_sym, -> { where(value_type: class_name) }, class_name: 'RepositoryCell', inverse_of: :repository_row @@ -44,10 +42,33 @@ class RepositoryRow < ApplicationRecord source: :value, source_type: class_name end - has_one :repository_stock_cell, -> { where(value_type: 'RepositoryStockValue') }, class_name: 'RepositoryCell', - inverse_of: :repository_row - has_one :repository_stock_value, class_name: 'RepositoryStockValue', through: :repository_stock_cell, - source: :value, source_type: 'RepositoryStockValue' + has_one :repository_stock_cell, + lambda { + joins(:repository_column) + .where(repository_columns: { data_type: 'RepositoryStockValue' }) + .where(value_type: 'RepositoryStockValue') + }, + class_name: 'RepositoryCell', + inverse_of: :repository_row + has_one :repository_stock_value, class_name: 'RepositoryStockValue', + through: :repository_stock_cell, + source: :value, + source_type: 'RepositoryStockValue' + + # Only in snapshots + has_one :repository_stock_consumption_cell, + lambda { + joins(:repository_column) + .where(repository_columns: { data_type: 'RepositoryStockConsumptionValue' }) + .where(value_type: 'RepositoryStockValue') + }, + class_name: 'RepositoryCell', + inverse_of: :repository_row + has_one :repository_stock_consumption_value, + class_name: 'RepositoryStockConsumptionValue', + through: :repository_stock_consumption_cell, + source: :value, + source_type: 'RepositoryStockValue' has_many :repository_columns, through: :repository_cells has_many :my_module_repository_rows, diff --git a/app/services/repositories/snapshot_provisioning_service.rb b/app/services/repositories/snapshot_provisioning_service.rb index c97803c10..042931c2d 100644 --- a/app/services/repositories/snapshot_provisioning_service.rb +++ b/app/services/repositories/snapshot_provisioning_service.rb @@ -66,9 +66,10 @@ module Repositories end def create_stock_consumption_cell_snapshot!(repository_row, row_snapshot) + return if repository_row.repository_stock_value.blank? + my_module_repository_row = repository_row.my_module_repository_rows.find { |mrr| mrr.my_module_id == @repository_snapshot.my_module_id } - return if my_module_repository_row.stock_consumption.blank? stock_unit_item = @repository_snapshot.repository_stock_consumption_column @@ -79,7 +80,7 @@ module Repositories repository_column: @repository_snapshot.repository_stock_consumption_column, repository_row: row_snapshot }, - amount: my_module_repository_row.stock_consumption, + amount: my_module_repository_row.stock_consumption.to_d, repository_stock_unit_item: stock_unit_item ) end diff --git a/app/views/my_modules/repositories/_repositories_list.html.erb b/app/views/my_modules/repositories/_repositories_list.html.erb index 8905b4400..d758ec4aa 100644 --- a/app/views/my_modules/repositories/_repositories_list.html.erb +++ b/app/views/my_modules/repositories/_repositories_list.html.erb @@ -28,12 +28,12 @@ data-name-column-id="<%= assigned_repository_simple_view_name_column_id(repository) %>" >