mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-06 13:14:29 +08:00
Improve handling of unshared inventories and unassigned items for stock ledger records [SCI-9504] (#6565)
This commit is contained in:
parent
790038fdc5
commit
43b8f97126
7 changed files with 101 additions and 15 deletions
|
@ -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
|
||||
|
|
|
@ -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!
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Reference in a new issue