Improve handling of unshared inventories and unassigned items for stock ledger records [SCI-9504] (#6565)

This commit is contained in:
Alex Kriuchykhin 2023-11-20 13:24:31 +01:00 committed by GitHub
parent 790038fdc5
commit 43b8f97126
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 101 additions and 15 deletions

View file

@ -23,6 +23,10 @@ module PrefixedIdModel
self::PREFIXED_ID_SQL = "('#{self::ID_PREFIX}' || #{table_name}.id)".freeze
def self.code(id)
"#{self::ID_PREFIX}#{id}"
end
def code
"#{self.class::ID_PREFIX}#{id}"
end

View file

@ -63,7 +63,13 @@ class MyModuleRepositoryRow < ApplicationRecord
amount: delta,
balance: stock_value.amount,
comment: comment,
unit: stock_value.repository_stock_unit_item&.data
unit: stock_value.repository_stock_unit_item&.data,
my_module_references: {
my_module_id: my_module.id,
experiment_id: my_module.experiment.id,
project_id: my_module.experiment.project.id,
team_id: my_module.experiment.project.team.id
}
)
stock_value.save!
save!

View file

@ -17,4 +17,18 @@ class RepositoryLedgerRecord < ApplicationRecord
end),
optional: true, foreign_key: :reference_id, inverse_of: :repository_ledger_records
has_one :repository_row, through: :repository_stock_value
validate :my_module_references_present?, if: -> { reference.is_a?(MyModuleRepositoryRow) }
private
def my_module_references_present?
return if my_module_references.present? &&
my_module_references['my_module_id'].is_a?(Integer) &&
my_module_references['experiment_id'].is_a?(Integer) &&
my_module_references['project_id'].is_a?(Integer) &&
my_module_references['team_id'].is_a?(Integer)
errors.add(:base, I18n.t('repository_ledger_records.errors.my_module_references_missing'))
end
end

View file

@ -17,6 +17,8 @@ module RepositoryStockLedgerZipExport
project
experiment
task
project_id
experiment_id
task_id
stock_amount_balance
stock_balance_unit
@ -58,8 +60,6 @@ module RepositoryStockLedgerZipExport
added_amount_unit = record.unit
end
breadcrumbs_data = Array.new(4, '')
row_data = [
consumption_type,
record.repository_row.name,
@ -73,20 +73,42 @@ module RepositoryStockLedgerZipExport
record.balance.to_d,
record.unit
]
breadcrumbs_data = Array.new(5)
if consumption_type == 'Task'
my_module = record.my_module_repository_row&.my_module
breadcrumbs_data = [
my_module&.experiment&.project&.team&.name,
my_module&.experiment&.project&.name,
my_module&.experiment&.name,
my_module&.name,
my_module&.code
]
end
breadcrumbs_data =
if consumption_type == 'Task'
build_breadcrumbs(record)
else
Array.new(7)
end
row_data.insert(9, *breadcrumbs_data)
row_data
end
def build_breadcrumbs(record)
if record.my_module_repository_row.present?
my_module = record.my_module_repository_row.my_module
[
my_module.experiment.project.team.name,
my_module.experiment.project.name,
my_module.experiment.name,
my_module.name,
my_module.experiment.project.code,
my_module.experiment.code,
my_module.code
]
elsif record.my_module_references.present?
[
Team.find_by(id: record.my_module_references['team_id'])&.name,
nil,
nil,
nil,
Project.code(record.my_module_references['project_id']),
Experiment.code(record.my_module_references['experiment_id']),
MyModule.code(record.my_module_references['my_module_id'])
]
else
Array.new(7)
end
end
end
end

View file

@ -2353,13 +2353,18 @@ en:
consumed_on: 'Consumed on'
team: 'Team'
project: 'Project'
project_id: 'Project ID'
experiment: 'Experiment'
experiment_id: 'Experiment ID'
task: 'Task'
task_id: 'Task ID'
stock_amount_balance: 'Stock amount after update (balance)'
stock_balance_unit: 'Stock unit after update'
repository_rows:
invalid_params: "Invalid params"
repository_ledger_records:
errors:
my_module_references_missing: 'Task references are not set'
libraries:
manange_modal_column_index:
title: "Manage columns"

View file

@ -0,0 +1,34 @@
# frozen_string_literal: true
class AddMyModuleReferencesToRepositoryLedgerRecords < ActiveRecord::Migration[7.0]
def up
add_column :repository_ledger_records, :my_module_references, :jsonb
RepositoryLedgerRecord
.joins(
"INNER JOIN my_module_repository_rows
ON my_module_repository_rows.id = repository_ledger_records.reference_id
AND repository_ledger_records.reference_type = 'MyModuleRepositoryRow'
INNER JOIN my_modules ON my_modules.id = my_module_repository_rows.my_module_id
INNER JOIN experiments ON experiments.id = my_modules.experiment_id
INNER JOIN projects ON projects.id = experiments.project_id
INNER JOIN teams ON teams.id = projects.team_id"
).select(
'repository_ledger_records.*, my_modules.id AS my_module_id, experiments.id AS experiment_id,' \
'projects.id AS project_id, teams.id AS team_id '
).find_each do |ledger_record|
ledger_record.update!(
my_module_references: {
my_module_id: ledger_record.my_module_id,
experiment_id: ledger_record.experiment_id,
project_id: ledger_record.project_id,
team_id: ledger_record.team_id
}
)
end
end
def down
remove_column :repository_ledger_records, :my_module_references
end
end

View file

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2023_10_03_114337) do
ActiveRecord::Schema[7.0].define(version: 2023_10_23_091358) do
# These are extensions that must be enabled in order to support this database
enable_extension "btree_gist"
enable_extension "pg_trgm"
@ -737,6 +737,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_03_114337) do
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "unit"
t.jsonb "my_module_references"
t.index ["reference_type", "reference_id"], name: "index_repository_ledger_records_on_reference"
t.index ["repository_stock_value_id"], name: "index_repository_ledger_records_on_repository_stock_value_id"
t.index ["user_id"], name: "index_repository_ledger_records_on_user_id"