fix: zero incoming rate for delivery note return (#43642)

This commit is contained in:
rohitwaghchaure
2024-10-15 11:57:02 +05:30
committed by GitHub
parent 7979d3a534
commit 6087a57b0c
3 changed files with 60 additions and 0 deletions

View File

@@ -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"):

View File

@@ -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")

View File

@@ -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,