From 0969877cd7c30d997f5f42de1d8a7197846d07de Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:11:53 +0530 Subject: [PATCH] fix: incoming rate should be zero for rejected items (backport #44857) (#44859) fix: incoming rate should be zero for rejected items (#44857) (cherry picked from commit a515a399cf7778b8a5fa430b11188fe9b677024d) Co-authored-by: rohitwaghchaure --- .../purchase_invoice/test_purchase_invoice.py | 46 +++++++++++++++++++ .../purchase_receipt/purchase_receipt.py | 5 ++ 2 files changed, 51 insertions(+) diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index e353435661c..76fbfd2f4e2 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -1838,6 +1838,52 @@ class TestPurchaseInvoice(FrappeTestCase, StockTestMixin): frappe.db.set_single_value("Buying Settings", "maintain_same_rate", 1) + def test_adjust_incoming_rate_for_rejected_item(self): + frappe.db.set_single_value("Buying Settings", "maintain_same_rate", 0) + + frappe.db.set_single_value("Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate", 1) + + # Cost of Item is zero in Purchase Receipt + pr = make_purchase_receipt(qty=1, rejected_qty=1, rate=0) + + stock_value_difference = frappe.db.get_value( + "Stock Ledger Entry", + {"voucher_type": "Purchase Receipt", "voucher_no": pr.name}, + "stock_value_difference", + ) + self.assertEqual(stock_value_difference, 0) + + pi = create_purchase_invoice_from_receipt(pr.name) + for row in pi.items: + row.qty = 1 + row.rate = 150 + + pi.save() + pi.submit() + + stock_value_difference = frappe.db.get_value( + "Stock Ledger Entry", + {"voucher_type": "Purchase Receipt", "voucher_no": pr.name, "warehouse": pi.items[0].warehouse}, + "stock_value_difference", + ) + self.assertEqual(stock_value_difference, 150) + + stock_value_difference = frappe.db.get_value( + "Stock Ledger Entry", + { + "voucher_type": "Purchase Receipt", + "voucher_no": pr.name, + "warehouse": pi.items[0].rejected_warehouse, + }, + "stock_value_difference", + ) + + self.assertFalse(stock_value_difference) + + frappe.db.set_single_value("Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate", 0) + + frappe.db.set_single_value("Buying Settings", "maintain_same_rate", 1) + def test_item_less_defaults(self): pi = frappe.new_doc("Purchase Invoice") pi.supplier = "_Test Supplier" diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 76ecf0fd596..22d7012cc8b 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -920,12 +920,17 @@ class PurchaseReceipt(BuyingController): ) def enable_recalculate_rate_in_sles(self): + rejected_warehouses = frappe.get_all( + "Purchase Receipt Item", filters={"parent": self.name}, pluck="rejected_warehouse" + ) + sle_table = frappe.qb.DocType("Stock Ledger Entry") ( frappe.qb.update(sle_table) .set(sle_table.recalculate_rate, 1) .where(sle_table.voucher_no == self.name) .where(sle_table.voucher_type == "Purchase Receipt") + .where(sle_table.warehouse.notin(rejected_warehouses)) ).run()