fix: Add option to get items from work order

This commit is contained in:
Suraj Shetty 2019-08-02 08:12:30 +05:30
parent a7dc3735ae
commit b35c0410b1
4 changed files with 50 additions and 4 deletions

View File

@ -161,6 +161,10 @@ frappe.ui.form.on("Work Order", {
frm.add_custom_button(__('Create BOM'), () => { frm.add_custom_button(__('Create BOM'), () => {
frm.trigger("make_bom"); frm.trigger("make_bom");
}); });
frm.add_custom_button(__('Pick List'), () => {
frm.trigger("make_bom");
}, __('Make'));
} }
}, },
@ -264,6 +268,10 @@ frappe.ui.form.on("Work Order", {
}); });
}, },
make_pick_list() {
},
show_progress: function(frm) { show_progress: function(frm) {
var bars = []; var bars = [];
var message = ''; var message = '';

View File

@ -19,6 +19,7 @@ from erpnext.stock.stock_balance import get_planned_qty, update_bin_qty
from frappe.utils.csvutils import getlink from frappe.utils.csvutils import getlink
from erpnext.stock.utils import get_bin, validate_warehouse_company, get_latest_stock_qty from erpnext.stock.utils import get_bin, validate_warehouse_company, get_latest_stock_qty
from erpnext.utilities.transaction_base import validate_uom_is_integer from erpnext.utilities.transaction_base import validate_uom_is_integer
from frappe.model.mapper import get_mapped_doc
class OverProductionError(frappe.ValidationError): pass class OverProductionError(frappe.ValidationError): pass
class StockOverProductionError(frappe.ValidationError): pass class StockOverProductionError(frappe.ValidationError): pass
@ -707,3 +708,26 @@ def get_work_order_operation_data(work_order, operation, workstation):
for d in work_order.operations: for d in work_order.operations:
if d.operation == operation and d.workstation == workstation: if d.operation == operation and d.workstation == workstation:
return d return d
@frappe.whitelist()
def make_pick_list(source_name, target_doc=None):
doc = get_mapped_doc("Work Order", source_name, {
"Work Order": {
"doctype": "Pick List",
"validation": {
"docstatus": ["=", 1]
}
},
"Work Order Item": {
"doctype": "Pick List Reference Item",
"field_map": {
"item_code": "item",
"required_qty": "qty",
"parenttype": "reference_doctype",
"parent": "reference_name",
"name": "reference_document_item"
},
},
}, target_doc)
return doc

View File

@ -14,13 +14,13 @@ frappe.ui.form.on('Pick List', {
}, },
refresh: (frm) => { refresh: (frm) => {
frm.add_custom_button(__('Delivery Note'), () => frm.trigger('make_delivery_note'), __('Create')); frm.add_custom_button(__('Delivery Note'), () => frm.trigger('make_delivery_note'), __('Create'));
frm.add_custom_button(__('Sales Order'), function() { frm.add_custom_button(__('Sales Order'), () => {
erpnext.utils.map_current_doc({ erpnext.utils.map_current_doc({
method: "erpnext.selling.doctype.sales_order.sales_order.make_pick_list", method: "erpnext.selling.doctype.sales_order.sales_order.make_pick_list",
source_doctype: "Sales Order", source_doctype: "Sales Order",
target: frm, target: frm,
setters: { setters: {
company: frm.doc.company || undefined, company: frm.doc.company,
}, },
get_query_filters: { get_query_filters: {
docstatus: 1, docstatus: 1,
@ -28,6 +28,21 @@ frappe.ui.form.on('Pick List', {
}); });
}, __("Get items from")); }, __("Get items from"));
frm.add_custom_button(__('Work Order'), () => {
erpnext.utils.map_current_doc({
method: "erpnext.manufacturing.doctype.work_order.work_order.make_pick_list",
source_doctype: "Work Order",
target: frm,
setters: {
company: frm.doc.company,
},
date_field: 'creation',
get_query_filters: {
docstatus: 1,
}
});
}, __("Get items from"));
if (frm.doc.reference_items && frm.doc.reference_items.length) { if (frm.doc.reference_items && frm.doc.reference_items.length) {
frm.add_custom_button(__('Get Item Locations'), () => { frm.add_custom_button(__('Get Item Locations'), () => {
frm.call('set_item_locations'); frm.call('set_item_locations');

View File

@ -97,7 +97,6 @@ def set_batch_no(item_doc, parent_doc):
'item_code': item_doc.item, 'item_code': item_doc.item,
'warehouse': item_doc.warehouse, 'warehouse': item_doc.warehouse,
}, as_dict=1) }, as_dict=1)
print(batches)
required_qty = item_doc.qty required_qty = item_doc.qty
while required_qty > 0 and batches: while required_qty > 0 and batches:
@ -114,8 +113,8 @@ def set_batch_no(item_doc, parent_doc):
# split item if quantity of item in batch is less that required # split item if quantity of item in batch is less that required
# Look for another batch # Look for another batch
# set quantity of of item equal to batch quantity
required_qty -= batch.qty required_qty -= batch.qty
# set quantity of current item equal to batch quantity
item_doc.set('qty', batch.qty) item_doc.set('qty', batch.qty)
item_doc = parent_doc.append('items', { item_doc = parent_doc.append('items', {
'item': item_doc.item, 'item': item_doc.item,