Skip to content

Commit 2daf9f4

Browse files
Sudharsanan11mergify[bot]
authored andcommitted
fix(manufacturing): ignore sales order validation for subassembly item
(cherry picked from commit 6b1aac4)
1 parent d74833d commit 2daf9f4

1 file changed

Lines changed: 49 additions & 31 deletions

File tree

erpnext/manufacturing/doctype/work_order/work_order.py

Lines changed: 49 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,12 @@ def validate_dates(self):
225225
frappe.throw(_("Actual End Date cannot be before Actual Start Date"))
226226

227227
def validate_fg_warehouse_for_reservation(self):
228-
if self.reserve_stock and self.sales_order and not self.subcontracting_inward_order:
228+
if (
229+
self.reserve_stock
230+
and self.sales_order
231+
and not self.subcontracting_inward_order
232+
and not self.production_plan_sub_assembly_item
233+
):
229234
warehouses = frappe.get_all(
230235
"Sales Order Item",
231236
filters={"parent": self.sales_order, "item_code": self.production_item},
@@ -413,39 +418,52 @@ def validate_workstation_type(self):
413418
)
414419

415420
def validate_sales_order(self):
421+
if self.production_plan_sub_assembly_item:
422+
return
423+
416424
if self.sales_order:
417425
self.check_sales_order_on_hold_or_close()
418-
so = frappe.db.sql(
419-
"""
420-
select so.name, so_item.delivery_date, so.project
421-
from `tabSales Order` so
422-
inner join `tabSales Order Item` so_item on so_item.parent = so.name
423-
left join `tabProduct Bundle Item` pk_item on so_item.item_code = pk_item.parent
424-
where so.name=%s and so.docstatus = 1
425-
and so.skip_delivery_note = 0 and (
426-
so_item.item_code=%s or
427-
pk_item.item_code=%s )
428-
""",
429-
(self.sales_order, self.production_item, self.production_item),
430-
as_dict=1,
426+
427+
SalesOrder = frappe.qb.DocType("Sales Order")
428+
SalesOrderItem = frappe.qb.DocType("Sales Order Item")
429+
PackedItem = frappe.qb.DocType("Packed Item")
430+
ProductBundleItem = frappe.qb.DocType("Product Bundle Item")
431+
432+
so = (
433+
frappe.qb.from_(SalesOrder)
434+
.inner_join(SalesOrderItem)
435+
.on(SalesOrderItem.parent == SalesOrder.name)
436+
.left_join(ProductBundleItem)
437+
.on(ProductBundleItem.parent == SalesOrderItem.item_code)
438+
.select(SalesOrder.name, SalesOrder.project, SalesOrderItem.delivery_date)
439+
.where(
440+
(SalesOrder.skip_delivery_note == 0)
441+
& (SalesOrder.docstatus == 1)
442+
& (SalesOrder.name == self.sales_order)
443+
& (
444+
(SalesOrderItem.item_code == self.production_item)
445+
| (ProductBundleItem.item_code == self.production_item)
446+
)
447+
)
448+
.run(as_dict=1)
431449
)
432450

433451
if not so:
434-
so = frappe.db.sql(
435-
"""
436-
select
437-
so.name, so_item.delivery_date, so.project
438-
from
439-
`tabSales Order` so, `tabSales Order Item` so_item, `tabPacked Item` packed_item
440-
where so.name=%s
441-
and so.name=so_item.parent
442-
and so.name=packed_item.parent
443-
and so.skip_delivery_note = 0
444-
and so_item.item_code = packed_item.parent_item
445-
and so.docstatus = 1 and packed_item.item_code=%s
446-
""",
447-
(self.sales_order, self.production_item),
448-
as_dict=1,
452+
so = (
453+
frappe.qb.from_(SalesOrder)
454+
.inner_join(SalesOrderItem)
455+
.on(SalesOrderItem.parent == SalesOrder.name)
456+
.inner_join(PackedItem)
457+
.on(PackedItem.parent == SalesOrder.name)
458+
.select(SalesOrder.name, SalesOrder.project, SalesOrderItem.delivery_date)
459+
.where(
460+
(SalesOrder.name == self.sales_order)
461+
& (SalesOrder.skip_delivery_note == 0)
462+
& (SalesOrderItem.item_code == PackedItem.parent_item)
463+
& (SalesOrder.docstatus == 1)
464+
& (PackedItem.item_code == self.production_item)
465+
)
466+
.run(as_dict=1)
449467
)
450468

451469
if len(so):
@@ -651,7 +669,7 @@ def update_work_order_qty(self):
651669

652670
from erpnext.selling.doctype.sales_order.sales_order import update_produced_qty_in_so_item
653671

654-
if self.sales_order and self.sales_order_item:
672+
if self.sales_order and self.sales_order_item and not self.production_plan_sub_assembly_item:
655673
update_produced_qty_in_so_item(self.sales_order, self.sales_order_item)
656674

657675
if self.production_plan:
@@ -1159,7 +1177,7 @@ def update_ordered_qty(self):
11591177
doc.db_set("status", doc.status)
11601178

11611179
def update_work_order_qty_in_so(self):
1162-
if not self.sales_order and not self.sales_order_item:
1180+
if (not self.sales_order and not self.sales_order_item) or self.production_plan_sub_assembly_item:
11631181
return
11641182

11651183
total_bundle_qty = 1

0 commit comments

Comments
 (0)