From 460acc3e2269966ab031f59381b72f5e0f34debf Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 16:31:06 +0530 Subject: [PATCH] fix: not able to make purchase return (backport #42053) (#42055) fix: not able to make purchase return (#42053) (cherry picked from commit 9738c04ef0e795dbf9b11531fb9a2b42ada935a7) Co-authored-by: rohitwaghchaure (cherry picked from commit 8a91bf315491e6b3b54c1b0f681397bb5acd4a66) --- .../controllers/sales_and_purchase_return.py | 10 +++++-- .../purchase_receipt/test_purchase_receipt.py | 30 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index b61d1773a67..76d04c04d6a 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -146,7 +146,10 @@ def validate_returned_items(doc): def validate_quantity(doc, args, ref, valid_items, already_returned_items): fields = ["stock_qty"] if doc.doctype in ["Purchase Receipt", "Purchase Invoice", "Subcontracting Receipt"]: - fields.extend(["received_qty", "rejected_qty"]) + if not args.get("return_qty_from_rejected_warehouse"): + fields.extend(["received_qty", "rejected_qty"]) + else: + fields.extend(["received_qty"]) already_returned_data = already_returned_items.get(args.item_code) or {} @@ -158,9 +161,12 @@ def validate_quantity(doc, args, ref, valid_items, already_returned_items): for column in fields: returned_qty = flt(already_returned_data.get(column, 0)) if len(already_returned_data) > 0 else 0 - if column == "stock_qty": + if column == "stock_qty" and not args.get("return_qty_from_rejected_warehouse"): reference_qty = ref.get(column) current_stock_qty = args.get(column) + elif args.get("return_qty_from_rejected_warehouse"): + reference_qty = ref.get("rejected_qty") * ref.get("conversion_factor", 1.0) + current_stock_qty = args.get(column) * args.get("conversion_factor", 1.0) else: reference_qty = ref.get(column) * ref.get("conversion_factor", 1.0) current_stock_qty = args.get(column) * args.get("conversion_factor", 1.0) diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py index cae58de9303..16553749d0a 100644 --- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py @@ -2990,6 +2990,36 @@ class TestPurchaseReceipt(FrappeTestCase): self.assertEqual(batch.manufacturing_date, getdate(today())) self.assertEqual(batch.expiry_date, getdate(add_days(today(), 5))) + def test_purchase_return_from_rejected_warehouse(self): + from erpnext.stock.doctype.purchase_receipt.purchase_receipt import ( + make_purchase_return_against_rejected_warehouse, + ) + + item_code = "_Test Item Return from Rejected Warehouse 11" + create_item(item_code) + + warehouse = create_warehouse("_Test Warehouse Return Qty Warehouse 11") + rejected_warehouse = create_warehouse("_Test Rejected Warehouse Return Qty Warehouse 11") + + # Step 1: Create Purchase Receipt with valuation rate 100 + pr = make_purchase_receipt( + item_code=item_code, + warehouse=warehouse, + qty=24, + rate=100, + rejected_qty=31, + rejected_warehouse=rejected_warehouse, + ) + + pr_return = make_purchase_return_against_rejected_warehouse(pr.name) + pr_return.save() + pr_return.submit() + + self.assertEqual(pr_return.items[0].warehouse, rejected_warehouse) + self.assertEqual(pr_return.items[0].qty, 31 * -1) + self.assertEqual(pr_return.items[0].rejected_qty, 0.0) + self.assertEqual(pr_return.items[0].rejected_warehouse, "") + def prepare_data_for_internal_transfer(): from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_internal_supplier