fix(manufacturing): use packed row delivery date (#58568)

This commit is contained in:
Mihir Kandoi
2026-08-30 16:14:23 +05:30
committed by GitHub
parent 8b43394533
commit db56080285
2 changed files with 68 additions and 3 deletions

View File

@@ -552,12 +552,15 @@ class WorkOrder(Document):
so = so_query.run(as_dict=1)
if not so:
so = (
packed_so_query = (
frappe.qb.from_(SalesOrder)
.inner_join(SalesOrderItem)
.on(SalesOrderItem.parent == SalesOrder.name)
.inner_join(PackedItem)
.on(PackedItem.parent == SalesOrder.name)
.on(
(PackedItem.parent == SalesOrder.name)
& (PackedItem.parent_detail_docname == SalesOrderItem.name)
)
.select(SalesOrder.name, SalesOrder.project, SalesOrderItem.delivery_date)
.where(
(SalesOrder.name == self.sales_order)
@@ -567,9 +570,16 @@ class WorkOrder(Document):
& (SalesOrder.docstatus == 1)
& (PackedItem.item_code == production_item)
)
.run(as_dict=1)
)
if self.sales_order_item:
packed_so_query = packed_so_query.where(
(PackedItem.name == self.sales_order_item)
| (SalesOrderItem.name == self.sales_order_item)
)
so = packed_so_query.run(as_dict=1)
if len(so):
if not self.expected_delivery_date:
self.expected_delivery_date = so[0].delivery_date

View File

@@ -1941,6 +1941,61 @@ class TestSalesOrder(ERPNextTestSuite):
).run()
self.assertEqual(wo_qty[0][0], so_item_name.get(item))
@ERPNextTestSuite.change_settings("Selling Settings", {"allow_multiple_items": 1})
def test_make_work_order_for_duplicate_product_bundle_rows(self):
from erpnext.selling.doctype.sales_order.sales_order import get_work_order_items
bundle_item = make_item("_Test Work Order Product Bundle", {"is_stock_item": 0}).name
make_product_bundle(bundle_item, ["_Test FG Item"])
first_delivery_date = add_days(today(), 5)
second_delivery_date = add_days(today(), 10)
so = make_sales_order(
item_list=[
{
"item_code": bundle_item,
"qty": 1,
"rate": 100,
"warehouse": "_Test Warehouse - _TC",
"delivery_date": first_delivery_date,
},
{
"item_code": bundle_item,
"qty": 1,
"rate": 100,
"warehouse": "_Test Warehouse - _TC",
"delivery_date": second_delivery_date,
},
]
)
items = [
{
"warehouse": item.get("warehouse"),
"item_code": item.get("item_code"),
"pending_qty": item.get("pending_qty"),
"sales_order_item": item.get("sales_order_item"),
"bom": item.get("bom"),
"description": item.get("description"),
}
for item in get_work_order_items(so.name)
]
work_orders = make_work_orders(json.dumps({"items": items}), so.name, so.company)
expected_delivery_dates = {
packed_item.name: next(
item.delivery_date for item in so.items if item.name == packed_item.parent_detail_docname
)
for packed_item in so.packed_items
}
self.assertEqual(len(work_orders), 2)
for work_order_name in work_orders:
work_order = frappe.get_doc("Work Order", work_order_name)
self.assertEqual(
getdate(work_order.expected_delivery_date),
getdate(expected_delivery_dates[work_order.sales_order_item]),
)
def test_advance_payment_entry_unlink_against_sales_order(self):
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry