fix: zero incoming rate for delivery note return (#43642)
This commit is contained in:
@@ -470,6 +470,16 @@ class SellingController(StockController):
|
|||||||
raise_error_if_no_rate=False,
|
raise_error_if_no_rate=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (
|
||||||
|
not d.incoming_rate
|
||||||
|
and self.get("return_against")
|
||||||
|
and self.get("is_return")
|
||||||
|
and get_valuation_method(d.item_code) == "Moving Average"
|
||||||
|
):
|
||||||
|
d.incoming_rate = get_rate_for_return(
|
||||||
|
self.doctype, self.name, d.item_code, self.return_against, item_row=d
|
||||||
|
)
|
||||||
|
|
||||||
# For internal transfers use incoming rate as the valuation rate
|
# For internal transfers use incoming rate as the valuation rate
|
||||||
if self.is_internal_transfer():
|
if self.is_internal_transfer():
|
||||||
if self.doctype == "Delivery Note" or self.get("update_stock"):
|
if self.doctype == "Delivery Note" or self.get("update_stock"):
|
||||||
|
|||||||
@@ -2075,6 +2075,47 @@ class TestDeliveryNote(IntegrationTestCase):
|
|||||||
self.assertEqual(sn.status, "Delivered")
|
self.assertEqual(sn.status, "Delivered")
|
||||||
self.assertEqual(sn.warranty_period, 100)
|
self.assertEqual(sn.warranty_period, 100)
|
||||||
|
|
||||||
|
def test_batch_return_dn(self):
|
||||||
|
from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_return
|
||||||
|
|
||||||
|
item_code = make_item(
|
||||||
|
"Test Batch Return DN Item 1",
|
||||||
|
properties={
|
||||||
|
"has_batch_no": 1,
|
||||||
|
"valuation_method": "Moving Average",
|
||||||
|
"create_new_batch": 1,
|
||||||
|
"batch_number_series": "TBRDN1-.#####",
|
||||||
|
"is_stock_item": 1,
|
||||||
|
},
|
||||||
|
).name
|
||||||
|
|
||||||
|
se = make_stock_entry(item_code=item_code, target="_Test Warehouse - _TC", qty=5, basic_rate=100)
|
||||||
|
|
||||||
|
batch_no = get_batch_from_bundle(se.items[0].serial_and_batch_bundle)
|
||||||
|
dn = create_delivery_note(
|
||||||
|
item_code=item_code,
|
||||||
|
qty=5,
|
||||||
|
rate=500,
|
||||||
|
use_serial_batch_fields=1,
|
||||||
|
batch_no=batch_no,
|
||||||
|
)
|
||||||
|
|
||||||
|
dn_return = make_sales_return(dn.name)
|
||||||
|
dn_return.save().submit()
|
||||||
|
|
||||||
|
self.assertEqual(dn_return.items[0].qty, 5 * -1)
|
||||||
|
|
||||||
|
returned_batch_no = get_batch_from_bundle(dn_return.items[0].serial_and_batch_bundle)
|
||||||
|
self.assertEqual(batch_no, returned_batch_no)
|
||||||
|
|
||||||
|
stock_value_difference = frappe.db.get_value(
|
||||||
|
"Stock Ledger Entry",
|
||||||
|
{"voucher_no": dn_return.name, "voucher_type": "Delivery Note"},
|
||||||
|
"stock_value_difference",
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(stock_value_difference, 100.0 * 5)
|
||||||
|
|
||||||
|
|
||||||
def create_delivery_note(**args):
|
def create_delivery_note(**args):
|
||||||
dn = frappe.new_doc("Delivery Note")
|
dn = frappe.new_doc("Delivery Note")
|
||||||
|
|||||||
@@ -1075,6 +1075,15 @@ class update_entries_after:
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if not rate and sle.voucher_type in ["Delivery Note", "Sales Invoice"]:
|
||||||
|
rate = get_rate_for_return(
|
||||||
|
sle.voucher_type,
|
||||||
|
sle.voucher_no,
|
||||||
|
sle.item_code,
|
||||||
|
voucher_detail_no=sle.voucher_detail_no,
|
||||||
|
sle=sle,
|
||||||
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
rate = get_rate_for_return(
|
rate = get_rate_for_return(
|
||||||
sle.voucher_type,
|
sle.voucher_type,
|
||||||
|
|||||||
Reference in New Issue
Block a user