Merge pull request #35747 from rohitwaghchaure/fixed-incorrect-stock-value-for-pr-return
fix: incorrect stock value for purchase returned with rejected qty
diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py
index 11cee28..818c789 100644
--- a/erpnext/controllers/sales_and_purchase_return.py
+++ b/erpnext/controllers/sales_and_purchase_return.py
@@ -660,6 +660,9 @@
if reference_voucher_detail_no:
filters["voucher_detail_no"] = reference_voucher_detail_no
+ if item_row and item_row.get("warehouse"):
+ filters["warehouse"] = item_row.get("warehouse")
+
return filters
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index 92235b0..ddc0556 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -1781,6 +1781,52 @@
pr.items[0].delivery_note_item = delivery_note_item
pr.save()
+ def test_purchase_return_valuation_with_rejected_qty(self):
+ item_code = "_Test Item Return Valuation"
+ create_item(item_code)
+
+ warehouse = create_warehouse("_Test Warehouse Return Valuation")
+ rejected_warehouse = create_warehouse("_Test Rejected Warehouse Return Valuation")
+
+ # Step 1: Create Purchase Receipt with valuation rate 100
+ make_purchase_receipt(
+ item_code=item_code,
+ warehouse=warehouse,
+ qty=10,
+ rate=100,
+ rejected_qty=2,
+ rejected_warehouse=rejected_warehouse,
+ )
+
+ # Step 2: Create One more Purchase Receipt with valuation rate 200
+ pr = make_purchase_receipt(
+ item_code=item_code,
+ warehouse=warehouse,
+ qty=10,
+ rate=200,
+ rejected_qty=2,
+ rejected_warehouse=rejected_warehouse,
+ )
+
+ # Step 3: Create Purchase Return for 2 qty
+ from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_return
+
+ pr_return = make_purchase_return(pr.name)
+ pr_return.items[0].qty = 2 * -1
+ pr_return.items[0].received_qty = 2 * -1
+ pr_return.items[0].rejected_qty = 0
+ pr_return.items[0].rejected_warehouse = ""
+ pr_return.save()
+ pr_return.submit()
+
+ data = frappe.get_all(
+ "Stock Ledger Entry",
+ filters={"voucher_no": pr_return.name, "docstatus": 1},
+ fields=["SUM(stock_value_difference) as stock_value_difference"],
+ )[0]
+
+ self.assertEqual(abs(data["stock_value_difference"]), 400.00)
+
def prepare_data_for_internal_transfer():
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_internal_supplier