mirror of
https://github.com/frappe/erpnext.git
synced 2026-09-01 07:37:04 +00:00
fix(manufacturing): use packed row delivery date (#58569)
This commit is contained in:
@@ -282,12 +282,15 @@ class WorkOrder(Document):
|
|||||||
so = so_query.run(as_dict=1)
|
so = so_query.run(as_dict=1)
|
||||||
|
|
||||||
if not so:
|
if not so:
|
||||||
so = (
|
packed_so_query = (
|
||||||
frappe.qb.from_(SalesOrder)
|
frappe.qb.from_(SalesOrder)
|
||||||
.inner_join(SalesOrderItem)
|
.inner_join(SalesOrderItem)
|
||||||
.on(SalesOrderItem.parent == SalesOrder.name)
|
.on(SalesOrderItem.parent == SalesOrder.name)
|
||||||
.inner_join(PackedItem)
|
.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)
|
.select(SalesOrder.name, SalesOrder.project, SalesOrderItem.delivery_date)
|
||||||
.where(
|
.where(
|
||||||
(SalesOrder.name == self.sales_order)
|
(SalesOrder.name == self.sales_order)
|
||||||
@@ -296,9 +299,16 @@ class WorkOrder(Document):
|
|||||||
& (SalesOrder.docstatus == 1)
|
& (SalesOrder.docstatus == 1)
|
||||||
& (PackedItem.item_code == production_item)
|
& (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 len(so):
|
||||||
if not self.expected_delivery_date:
|
if not self.expected_delivery_date:
|
||||||
self.expected_delivery_date = so[0].delivery_date
|
self.expected_delivery_date = so[0].delivery_date
|
||||||
|
|||||||
@@ -1730,6 +1730,61 @@ class TestSalesOrder(AccountsTestMixin, FrappeTestCase):
|
|||||||
)
|
)
|
||||||
self.assertEqual(wo_qty[0][0], so_item_name.get(item))
|
self.assertEqual(wo_qty[0][0], so_item_name.get(item))
|
||||||
|
|
||||||
|
@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):
|
def test_advance_payment_entry_unlink_against_sales_order(self):
|
||||||
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
|
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user