From 28dd758aa3e7f2cd68f4658d1c4ca6f591c6df07 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 16 Jun 2023 16:44:56 +0530 Subject: [PATCH] fix: incorrect stock value for purchase returned with rejected qty --- .../controllers/sales_and_purchase_return.py | 3 ++ .../purchase_receipt/test_purchase_receipt.py | 46 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index 11cee28a579..818c7894b7d 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -660,6 +660,9 @@ def get_filters( 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 92235b0845d..ddc055656f2 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 @@ class TestPurchaseReceipt(FrappeTestCase): 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