mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-31 15:32:27 +00:00
fix(manufacturing): use packed row delivery date (#58568)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user