mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-25 16:04:46 +00:00
Merge pull request #37058 from frappe/mergify/bp/version-14-hotfix/pr-37057
fix: Packed item incorrectly picks expired price on Sales Order (backport #37057)
This commit is contained in:
@@ -1998,6 +1998,61 @@ class TestSalesOrder(FrappeTestCase):
|
|||||||
self.assertEqual(len(dn.packed_items), 1)
|
self.assertEqual(len(dn.packed_items), 1)
|
||||||
self.assertEqual(dn.items[0].item_code, "_Test Product Bundle Item Partial 2")
|
self.assertEqual(dn.items[0].item_code, "_Test Product Bundle Item Partial 2")
|
||||||
|
|
||||||
|
@change_settings("Selling Settings", {"editable_bundle_item_rates": 1})
|
||||||
|
def test_expired_rate_for_packed_item(self):
|
||||||
|
bundle = "_Test Product Bundle 1"
|
||||||
|
packed_item = "_Packed Item 1"
|
||||||
|
|
||||||
|
# test Update Items with product bundle
|
||||||
|
for product_bundle in [bundle]:
|
||||||
|
if not frappe.db.exists("Item", product_bundle):
|
||||||
|
bundle_item = make_item(product_bundle, {"is_stock_item": 0})
|
||||||
|
bundle_item.append(
|
||||||
|
"item_defaults", {"company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC"}
|
||||||
|
)
|
||||||
|
bundle_item.save(ignore_permissions=True)
|
||||||
|
|
||||||
|
for product_bundle in [packed_item]:
|
||||||
|
if not frappe.db.exists("Item", product_bundle):
|
||||||
|
make_item(product_bundle, {"is_stock_item": 0, "stock_uom": "Nos"})
|
||||||
|
|
||||||
|
make_product_bundle(bundle, [packed_item], 1)
|
||||||
|
|
||||||
|
for scenario in [
|
||||||
|
{"valid_upto": add_days(nowdate(), -1), "expected_rate": 0.0},
|
||||||
|
{"valid_upto": add_days(nowdate(), 1), "expected_rate": 111.0},
|
||||||
|
]:
|
||||||
|
with self.subTest(scenario=scenario):
|
||||||
|
frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "Item Price",
|
||||||
|
"item_code": packed_item,
|
||||||
|
"selling": 1,
|
||||||
|
"price_list": "_Test Price List",
|
||||||
|
"valid_from": add_days(nowdate(), -1),
|
||||||
|
"valid_upto": scenario.get("valid_upto"),
|
||||||
|
"price_list_rate": 111,
|
||||||
|
}
|
||||||
|
).save()
|
||||||
|
|
||||||
|
so = frappe.new_doc("Sales Order")
|
||||||
|
so.transaction_date = nowdate()
|
||||||
|
so.delivery_date = nowdate()
|
||||||
|
so.set_warehouse = ""
|
||||||
|
so.company = "_Test Company"
|
||||||
|
so.customer = "_Test Customer"
|
||||||
|
so.currency = "INR"
|
||||||
|
so.selling_price_list = "_Test Price List"
|
||||||
|
so.append("items", {"item_code": bundle, "qty": 1})
|
||||||
|
so.save()
|
||||||
|
|
||||||
|
self.assertEqual(len(so.items), 1)
|
||||||
|
self.assertEqual(len(so.packed_items), 1)
|
||||||
|
self.assertEqual(so.items[0].item_code, bundle)
|
||||||
|
self.assertEqual(so.packed_items[0].item_code, packed_item)
|
||||||
|
self.assertEqual(so.items[0].rate, scenario.get("expected_rate"))
|
||||||
|
self.assertEqual(so.packed_items[0].rate, scenario.get("expected_rate"))
|
||||||
|
|
||||||
|
|
||||||
def automatically_fetch_payment_terms(enable=1):
|
def automatically_fetch_payment_terms(enable=1):
|
||||||
accounts_settings = frappe.get_doc("Accounts Settings")
|
accounts_settings = frappe.get_doc("Accounts Settings")
|
||||||
|
|||||||
@@ -207,6 +207,9 @@ def update_packed_item_price_data(pi_row, item_data, doc):
|
|||||||
"conversion_rate": doc.get("conversion_rate"),
|
"conversion_rate": doc.get("conversion_rate"),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
if not row_data.get("transaction_date"):
|
||||||
|
row_data.update({"transaction_date": doc.get("transaction_date")})
|
||||||
|
|
||||||
rate = get_price_list_rate(row_data, item_doc).get("price_list_rate")
|
rate = get_price_list_rate(row_data, item_doc).get("price_list_rate")
|
||||||
|
|
||||||
pi_row.rate = rate or item_data.get("valuation_rate") or 0.0
|
pi_row.rate = rate or item_data.get("valuation_rate") or 0.0
|
||||||
|
|||||||
Reference in New Issue
Block a user