mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-12-17 14:19:05 +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
|
self::PREFIXED_ID_SQL = "('#{self::ID_PREFIX}' || #{table_name}.id)".freeze
|
||||||
|
|
||||||
|
def self.code(id)
|
||||||
|
"#{self::ID_PREFIX}#{id}"
|
||||||
|
end
|
||||||
|
|
||||||
def code
|
def code
|
||||||
"#{self.class::ID_PREFIX}#{id}"
|
"#{self.class::ID_PREFIX}#{id}"
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,13 @@ class MyModuleRepositoryRow < ApplicationRecord
|
||||||
amount: delta,
|
amount: delta,
|
||||||
balance: stock_value.amount,
|
balance: stock_value.amount,
|
||||||
comment: comment,
|
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!
|
stock_value.save!
|
||||||
save!
|
save!
|
||||||
|
|
|
||||||
|
|
@ -17,4 +17,18 @@ class RepositoryLedgerRecord < ApplicationRecord
|
||||||
end),
|
end),
|
||||||
optional: true, foreign_key: :reference_id, inverse_of: :repository_ledger_records
|
optional: true, foreign_key: :reference_id, inverse_of: :repository_ledger_records
|
||||||
has_one :repository_row, through: :repository_stock_value
|
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
|
end
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ module RepositoryStockLedgerZipExport
|
||||||
project
|
project
|
||||||
experiment
|
experiment
|
||||||
task
|
task
|
||||||
|
project_id
|
||||||
|
experiment_id
|
||||||
task_id
|
task_id
|
||||||
stock_amount_balance
|
stock_amount_balance
|
||||||
stock_balance_unit
|
stock_balance_unit
|
||||||
|
|
@ -58,8 +60,6 @@ module RepositoryStockLedgerZipExport
|
||||||
added_amount_unit = record.unit
|
added_amount_unit = record.unit
|
||||||
end
|
end
|
||||||
|
|
||||||
breadcrumbs_data = Array.new(4, '')
|
|
||||||
|
|
||||||
row_data = [
|
row_data = [
|
||||||
consumption_type,
|
consumption_type,
|
||||||
record.repository_row.name,
|
record.repository_row.name,
|
||||||
|
|
@ -73,20 +73,42 @@ module RepositoryStockLedgerZipExport
|
||||||
record.balance.to_d,
|
record.balance.to_d,
|
||||||
record.unit
|
record.unit
|
||||||
]
|
]
|
||||||
breadcrumbs_data = Array.new(5)
|
breadcrumbs_data =
|
||||||
if consumption_type == 'Task'
|
if consumption_type == 'Task'
|
||||||
my_module = record.my_module_repository_row&.my_module
|
build_breadcrumbs(record)
|
||||||
breadcrumbs_data = [
|
else
|
||||||
my_module&.experiment&.project&.team&.name,
|
Array.new(7)
|
||||||
my_module&.experiment&.project&.name,
|
|
||||||
my_module&.experiment&.name,
|
|
||||||
my_module&.name,
|
|
||||||
my_module&.code
|
|
||||||
]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
row_data.insert(9, *breadcrumbs_data)
|
row_data.insert(9, *breadcrumbs_data)
|
||||||
row_data
|
row_data
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -2353,13 +2353,18 @@ en:
|
||||||
consumed_on: 'Consumed on'
|
consumed_on: 'Consumed on'
|
||||||
team: 'Team'
|
team: 'Team'
|
||||||
project: 'Project'
|
project: 'Project'
|
||||||
|
project_id: 'Project ID'
|
||||||
experiment: 'Experiment'
|
experiment: 'Experiment'
|
||||||
|
experiment_id: 'Experiment ID'
|
||||||
task: 'Task'
|
task: 'Task'
|
||||||
task_id: 'Task ID'
|
task_id: 'Task ID'
|
||||||
stock_amount_balance: 'Stock amount after update (balance)'
|
stock_amount_balance: 'Stock amount after update (balance)'
|
||||||
stock_balance_unit: 'Stock unit after update'
|
stock_balance_unit: 'Stock unit after update'
|
||||||
repository_rows:
|
repository_rows:
|
||||||
invalid_params: "Invalid params"
|
invalid_params: "Invalid params"
|
||||||
|
repository_ledger_records:
|
||||||
|
errors:
|
||||||
|
my_module_references_missing: 'Task references are not set'
|
||||||
libraries:
|
libraries:
|
||||||
manange_modal_column_index:
|
manange_modal_column_index:
|
||||||
title: "Manage columns"
|
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.
|
# 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
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "btree_gist"
|
enable_extension "btree_gist"
|
||||||
enable_extension "pg_trgm"
|
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 "created_at", null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", null: false
|
||||||
t.string "unit"
|
t.string "unit"
|
||||||
|
t.jsonb "my_module_references"
|
||||||
t.index ["reference_type", "reference_id"], name: "index_repository_ledger_records_on_reference"
|
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 ["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"
|
t.index ["user_id"], name: "index_repository_ledger_records_on_user_id"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue