From d5babf4237661a11787db69e41001d6099e785c2 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Sat, 4 Jan 2025 19:59:19 +0530 Subject: [PATCH] fix: invoice against purchase receipt with returned quantity --- .../purchase_invoice/test_purchase_invoice.py | 28 +++++++++++++++++++ .../purchase_receipt/purchase_receipt.py | 3 ++ 2 files changed, 31 insertions(+) diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 64159d7b0ac..025bf60576d 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -2511,6 +2511,34 @@ class TestPurchaseInvoice(IntegrationTestCase, StockTestMixin): item.reload() self.assertEqual(item.last_purchase_rate, 0) + def test_invoice_against_returned_pr(self): + from erpnext.stock.doctype.item.test_item import make_item + from erpnext.stock.doctype.purchase_receipt.purchase_receipt import ( + make_purchase_invoice as make_purchase_invoice_from_pr, + ) + from erpnext.stock.doctype.purchase_receipt.purchase_receipt import ( + make_purchase_return_against_rejected_warehouse, + ) + + item = make_item("_Test Item For Invoice Against Returned PR", properties={"is_stock_item": 1}).name + + original_value = frappe.db.get_single_value( + "Buying Settings", "bill_for_rejected_quantity_in_purchase_invoice" + ) + frappe.db.set_single_value("Buying Settings", "bill_for_rejected_quantity_in_purchase_invoice", 0) + + pr = make_purchase_receipt(item_code=item, qty=5, rejected_qty=5, rate=100) + pr_return = make_purchase_return_against_rejected_warehouse(pr.name) + pr_return.submit() + + pi = make_purchase_invoice_from_pr(pr.name) + pi.save() + self.assertEqual(pi.items[0].qty, 5.0) + + frappe.db.set_single_value( + "Buying Settings", "bill_for_rejected_quantity_in_purchase_invoice", original_value + ) + def set_advance_flag(company, flag, default_account): frappe.db.set_value( diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 6425e8e2dd9..f1b7b077bae 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -1174,6 +1174,9 @@ def make_purchase_invoice(source_name, target_doc=None, args=None): return pending_qty, 0 returned_qty = flt(returned_qty_map.get(item_row.name, 0)) + if item_row.rejected_qty and returned_qty: + returned_qty -= item_row.rejected_qty + if returned_qty: if returned_qty >= pending_qty: pending_qty = 0