From 9cfd704eef992bcdea2ad902aae1e541b78cdc86 Mon Sep 17 00:00:00 2001 From: Pandiyan37 Date: Wed, 4 Feb 2026 15:19:56 +0530 Subject: [PATCH 1/2] fix(stock): update target field attribute (cherry picked from commit 7e081542177d47db795b7497b93548761ad2e4fb) --- .../stock/doctype/inventory_dimension/inventory_dimension.py | 2 +- .../doctype/inventory_dimension/test_inventory_dimension.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py index 83854ad53bb..7349838e816 100644 --- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py +++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py @@ -138,7 +138,7 @@ class InventoryDimension(Document): self.source_fieldname = scrub(self.dimension_name) if not self.target_fieldname: - self.target_fieldname = scrub(self.reference_document) + self.target_fieldname = scrub(self.dimension_name) def on_update(self): self.add_custom_fields() diff --git a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py index bfa1d8821ad..96088db1923 100644 --- a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py +++ b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py @@ -118,12 +118,12 @@ class TestInventoryDimension(FrappeTestCase): inward.load_from_db() sle_data = frappe.db.get_value( - "Stock Ledger Entry", {"voucher_no": inward.name}, ["shelf", "warehouse"], as_dict=1 + "Stock Ledger Entry", {"voucher_no": inward.name}, ["to_shelf", "warehouse"], as_dict=1 ) self.assertEqual(inward.items[0].to_shelf, "Shelf 1") self.assertEqual(sle_data.warehouse, warehouse) - self.assertEqual(sle_data.shelf, "Shelf 1") + self.assertEqual(sle_data.to_shelf, "Shelf 1") outward = make_stock_entry( item_code=item_code, From d0a8639a2d697a8222673ad0cb0cd9341347808d Mon Sep 17 00:00:00 2001 From: Pandiyan37 Date: Wed, 4 Feb 2026 22:10:22 +0530 Subject: [PATCH 2/2] test(stock): testcase for different inventory dimension (cherry picked from commit 21d0ee8db15625799ed8c8dc95d80cff3eef7012) --- .../test_stock_reconciliation.py | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py index 63228e5a764..4e81c65a58d 100644 --- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py @@ -1698,6 +1698,101 @@ class TestStockReconciliation(FrappeTestCase, StockTestMixin): self.assertEqual(docstatus, 2) + def test_stock_reco_with_opening_stock_with_diff_inventory(self): + from erpnext.stock.doctype.inventory_dimension.test_inventory_dimension import ( + create_inventory_dimension, + ) + + if frappe.db.exists("DocType", "Plant"): + return + + doctype = frappe.get_doc( + { + "doctype": "DocType", + "name": "Plant", + "module": "Stock", + "custom": 1, + "fields": [ + { + "fieldname": "plant_name", + "fieldtype": "Data", + "label": "Plant Name", + "reqd": 1, + } + ], + "autoname": "field:plant_name", + } + ) + doctype.insert(ignore_permissions=True) + create_inventory_dimension(dimension_name="ID-Plant", reference_document="Plant") + + plant_a = frappe.get_doc( + { + "doctype": "Plant", + "plant_name": "Plant A", + } + ).insert(ignore_permissions=True) + + plant_b = frappe.get_doc( + { + "doctype": "Plant", + "plant_name": "Plant B", + } + ).insert(ignore_permissions=True) + + warehouse = "_Test Warehouse - _TC" + + item_code = "Item-Test" + item = self.make_item(item_code, {"is_stock_item": 1}) + + sr = frappe.new_doc("Stock Reconciliation") + sr.purpose = "Opening Stock" + sr.posting_date = nowdate() + sr.posting_time = nowtime() + sr.company = "_Test Company" + + sr.append( + "items", + { + "item_code": item.name, + "warehouse": warehouse, + "qty": 5, + "valuation_rate": 100, + "id_plant": plant_a.name, + }, + ) + + sr.append( + "items", + { + "item_code": item.name, + "warehouse": warehouse, + "qty": 3, + "valuation_rate": 110, + "id_plant": plant_b.name, + }, + ) + + sr.insert() + sr.submit() + + self.assertEqual(len(sr.items), 2) + sle_count = frappe.db.count( + "Stock Ledger Entry", + {"voucher_type": "Stock Reconciliation", "voucher_no": sr.name, "is_cancelled": 0}, + ) + self.assertEqual(sle_count, 2) + sle = frappe.get_all( + "Stock Ledger Entry", + {"voucher_type": "Stock Reconciliation", "voucher_no": sr.name, "is_cancelled": 0}, + ["item_code", "id_plant", "actual_qty", "valuation_rate"], + ) + for s in sle: + if s.id_plant == plant_a.name: + self.assertEqual(s.actual_qty, 5) + elif s.id_plant == plant_b.name: + self.assertEqual(s.actual_qty, 3) + def create_batch_item_with_batch(item_name, batch_id): batch_item_doc = create_item(item_name, is_stock_item=1)