fix: multiple Work Orders agaist same production plan
diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.js b/erpnext/manufacturing/doctype/production_plan/production_plan.js
index 45a59cf..4898691 100644
--- a/erpnext/manufacturing/doctype/production_plan/production_plan.js
+++ b/erpnext/manufacturing/doctype/production_plan/production_plan.js
@@ -99,7 +99,7 @@
}, __('Create'));
}
- if (frm.doc.mr_items && !in_list(['Material Requested', 'Closed'], frm.doc.status)) {
+ if (frm.doc.mr_items && frm.doc.mr_items.length && !in_list(['Material Requested', 'Closed'], frm.doc.status)) {
frm.add_custom_button(__("Material Request"), ()=> {
frm.trigger("make_material_request");
}, __('Create'));
diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py
index 0800bdd..6dc1ff6 100644
--- a/erpnext/manufacturing/doctype/production_plan/production_plan.py
+++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py
@@ -515,6 +515,9 @@
self.show_list_created_message("Work Order", wo_list)
self.show_list_created_message("Purchase Order", po_list)
+ if not wo_list:
+ frappe.msgprint(_("No Work Orders were created"))
+
def make_work_order_for_finished_goods(self, wo_list, default_warehouses):
items_data = self.get_production_items()
@@ -618,6 +621,9 @@
def create_work_order(self, item):
from erpnext.manufacturing.doctype.work_order.work_order import OverProductionError
+ if item.get("qty") <= 0:
+ return
+
wo = frappe.new_doc("Work Order")
wo.update(item)
wo.planned_start_date = item.get("planned_start_date") or item.get("schedule_date")
diff --git a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py
index 75b43ec..fcfba7f 100644
--- a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py
+++ b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py
@@ -76,6 +76,13 @@
"Work Order", fields=["name"], filters={"production_plan": pln.name}, as_list=1
)
+ pln.make_work_order()
+ nwork_orders = frappe.get_all(
+ "Work Order", fields=["name"], filters={"production_plan": pln.name}, as_list=1
+ )
+
+ self.assertTrue(len(work_orders), len(nwork_orders))
+
self.assertTrue(len(work_orders), len(pln.po_items))
for name in material_requests: