From 0df513434edf63cb37bc21f919fffc0f779cbda0 Mon Sep 17 00:00:00 2001 From: Mangesh-Khairnar Date: Mon, 19 Aug 2019 10:04:52 +0530 Subject: [PATCH] fix: valuation rate in stock ledger (#18744) * fix: valuation rate in stock ledger * test: allow zero valuation rate for items --- .../doctype/delivery_note/test_delivery_note.py | 1 + erpnext/stock/stock_ledger.py | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py index bc95c965bc..91b6f4c606 100644 --- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py @@ -701,6 +701,7 @@ def create_delivery_note(**args): "qty": args.qty or 1, "rate": args.rate or 100, "conversion_factor": 1.0, + "allow_zero_valuation_rate": args.allow_zero_valuation_rate or 1, "expense_account": "Cost of Goods Sold - _TC", "cost_center": args.cost_center or "_Test Cost Center - _TC", "serial_no": args.serial_no, diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 5fda2a4007..920fc272f7 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -464,16 +464,22 @@ def get_valuation_rate(item_code, warehouse, voucher_type, voucher_no, last_valuation_rate = frappe.db.sql("""select valuation_rate from `tabStock Ledger Entry` - where item_code = %s and warehouse = %s - and valuation_rate >= 0 - order by posting_date desc, posting_time desc, creation desc limit 1""", (item_code, warehouse)) + where + item_code = %s + AND warehouse = %s + AND valuation_rate >= 0 + AND NOT (voucher_no = %s AND voucher_type = %s) + order by posting_date desc, posting_time desc, name desc limit 1""", (item_code, warehouse, voucher_no, voucher_type)) if not last_valuation_rate: # Get valuation rate from last sle for the item against any warehouse last_valuation_rate = frappe.db.sql("""select valuation_rate from `tabStock Ledger Entry` - where item_code = %s and valuation_rate > 0 - order by posting_date desc, posting_time desc, creation desc limit 1""", item_code) + where + item_code = %s + AND valuation_rate > 0 + AND NOT(voucher_no = %s AND voucher_type = %s) + order by posting_date desc, posting_time desc, name desc limit 1""", (item_code, voucher_no, voucher_type)) if last_valuation_rate: return flt(last_valuation_rate[0][0]) # as there is previous records, it might come with zero rate