diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js index d345c0bf3f..c1f64ed0da 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.js +++ b/erpnext/manufacturing/doctype/work_order/work_order.js @@ -161,13 +161,6 @@ frappe.ui.form.on("Work Order", { frm.add_custom_button(__('Create BOM'), () => { frm.trigger("make_bom"); }); - - frm.add_custom_button(__('Pick List'), () => { - frappe.model.open_mapped_doc({ - method: "erpnext.manufacturing.doctype.work_order.work_order.make_pick_list", - frm - }); - }, __('Make')); } }, @@ -553,31 +546,46 @@ erpnext.work_order = { var max = (purpose === "Manufacture") ? flt(frm.doc.material_transferred_for_manufacturing) - flt(frm.doc.produced_qty) : flt(frm.doc.qty) - flt(frm.doc.material_transferred_for_manufacturing); - } else { - var max = flt(frm.doc.qty) - flt(frm.doc.produced_qty); } + max = flt(max, precision('qty')); - max = flt(max, precision("qty")); - frappe.prompt({fieldtype:"Float", label: __("Qty for {0}", [purpose]), fieldname:"qty", - description: __("Max: {0}", [max]), 'default': max }, function(data) - { - if(data.qty > max) { - frappe.msgprint(__("Quantity must not be more than {0}", [max])); + frappe.prompt([{ + fieldtype: 'Float', + label: __('Qty for {0}', [purpose]), + fieldname: 'qty', + description: __('Max: {0}',[max]), + default: max + }, { + fieldtype: 'Select', + label: __('Create'), + fieldname: 'create', + default: 'Stock Entry', + options: 'Stock Entry\nPick List' + }], function (data) { + if (data.qty > max) { + frappe.msgprint(__('Quantity must not be more than {0}', [max])); return; } - frappe.call({ - method:"erpnext.manufacturing.doctype.work_order.work_order.make_stock_entry", - args: { - "work_order_id": frm.doc.name, - "purpose": purpose, - "qty": data.qty - }, - callback: function(r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - } - }); - }, __("Select Quantity"), __('Create')); + if (data.create === 'Stock Entry') { + frappe.xcall('erpnext.manufacturing.doctype.work_order.work_order.make_stock_entry', { + 'work_order_id': frm.doc.name, + 'purpose': purpose, + 'qty': data.qty + }).then(stock_entry => { + frappe.model.sync(stock_entry); + frappe.set_route('Form', stock_entry.doctype, stock_entry.name); + }); + } else { + frappe.xcall('erpnext.manufacturing.doctype.work_order.work_order.create_pick_list', { + 'source_name': frm.doc.name, + 'for_qty': data.qty + }).then(pick_list => { + frappe.model.sync(pick_list); + frappe.set_route('Form', pick_list.doctype, pick_list.name); + }); + } + + }, __('Select Quantity'), __('Create')); }, make_consumption_se: function(frm, backflush_raw_materials_based_on) { diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index 804d22ce6b..d3ce1b8533 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -710,15 +710,15 @@ def get_work_order_operation_data(work_order, operation, workstation): return d @frappe.whitelist() -def create_pick_list(source_name, target_doc=None): - pick_list = json.loads(target_doc) +def create_pick_list(source_name, target_doc=None, for_qty=None): + pick_list = for_qty or json.loads(target_doc).get('for_qty') max_finished_goods_qty = frappe.db.get_value('Work Order', source_name, 'qty') def update_item_quantity(source, target, source_parent): # qty = source.required_qty - source.transferred_qty # target.qty = qty pending_to_issue = flt(source.required_qty) - flt(source.transferred_qty) - desire_to_transfer = flt(source.required_qty) / max_finished_goods_qty * flt(pick_list.get('for_qty')) + desire_to_transfer = flt(source.required_qty) / max_finished_goods_qty * flt(for_qty) qty = 0 if desire_to_transfer <= pending_to_issue: @@ -762,4 +762,6 @@ def create_pick_list(source_name, target_doc=None): # doc.delete_key('items') # doc.set('items', item_map.values()) + doc.for_qty = for_qty + return doc \ No newline at end of file