mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-07 15:12:51 +00:00
feat: Add option to create pick list from material request
This commit is contained in:
@@ -502,3 +502,24 @@ def raise_work_orders(material_request):
|
|||||||
frappe.throw(_("Productions Orders cannot be raised for:") + '\n' + new_line_sep(errors))
|
frappe.throw(_("Productions Orders cannot be raised for:") + '\n' + new_line_sep(errors))
|
||||||
|
|
||||||
return work_orders
|
return work_orders
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def create_pick_list(source_name, target_doc=None):
|
||||||
|
doc = get_mapped_doc('Material Request', source_name, {
|
||||||
|
'Material Request': {
|
||||||
|
'doctype': 'Pick List',
|
||||||
|
'validation': {
|
||||||
|
'docstatus': ['=', 1]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'Material Request Item': {
|
||||||
|
'doctype': 'Pick List Reference Item',
|
||||||
|
'field_map': {
|
||||||
|
'name': 'material_request_item',
|
||||||
|
'qty': 'stock_qty'
|
||||||
|
},
|
||||||
|
# 'condition': lambda doc: abs(doc.transferred_qty) < abs(doc.required_qty)
|
||||||
|
},
|
||||||
|
}, target_doc)
|
||||||
|
|
||||||
|
return doc
|
||||||
@@ -19,6 +19,13 @@ frappe.ui.form.on('Pick List', {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
frm.set_query('material_request', () => {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
'material_request_type': ['=', frm.doc.purpose]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
},
|
},
|
||||||
refresh: (frm) => {
|
refresh: (frm) => {
|
||||||
frm.trigger('add_get_items_button');
|
frm.trigger('add_get_items_button');
|
||||||
@@ -70,6 +77,15 @@ frappe.ui.form.on('Pick List', {
|
|||||||
}, __("Select Quantity"), __('Get Items'));
|
}, __("Select Quantity"), __('Get Items'));
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
material_request: (frm) => {
|
||||||
|
frm.clear_table('items');
|
||||||
|
frm.clear_table('locations');
|
||||||
|
erpnext.utils.map_current_doc({
|
||||||
|
method: 'erpnext.stock.doctype.material_request.material_request.create_pick_list',
|
||||||
|
target: frm,
|
||||||
|
source_name: frm.doc.material_request
|
||||||
|
});
|
||||||
|
},
|
||||||
purpose: (frm) => {
|
purpose: (frm) => {
|
||||||
frm.clear_table('items');
|
frm.clear_table('items');
|
||||||
frm.clear_table('locations');
|
frm.clear_table('locations');
|
||||||
@@ -117,13 +133,3 @@ frappe.ui.form.on('Pick List', {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// frappe.ui.form.on('Pick List Reference Item', {
|
|
||||||
// item_code: (frm, cdt, cdn) => {
|
|
||||||
// let row = locals[cdt][cdn];
|
|
||||||
// if (row.item_code) {
|
|
||||||
// frappe.xcall('');
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
"purpose",
|
"purpose",
|
||||||
"customer",
|
"customer",
|
||||||
"work_order",
|
"work_order",
|
||||||
|
"material_request",
|
||||||
"for_qty",
|
"for_qty",
|
||||||
"column_break_4",
|
"column_break_4",
|
||||||
"parent_warehouse",
|
"parent_warehouse",
|
||||||
@@ -97,10 +98,17 @@
|
|||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"label": "Purpose",
|
"label": "Purpose",
|
||||||
"options": "Material Transfer for Manufacture\nMaterial Issue\nMaterial Transfer\nDelivery against Sales Order"
|
"options": "Material Transfer for Manufacture\nMaterial Issue\nMaterial Transfer\nDelivery against Sales Order"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"depends_on": "eval:['Material Transfer', 'Material Issue'].includes(doc.purpose)",
|
||||||
|
"fieldname": "material_request",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Material Request",
|
||||||
|
"options": "Material Request"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"modified": "2019-08-22 16:58:07.270447",
|
"modified": "2019-08-23 12:34:00.223445",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Pick List",
|
"name": "Pick List",
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ class PickList(Document):
|
|||||||
'item_code': item_code,
|
'item_code': item_code,
|
||||||
'sales_order': item_doc.sales_order,
|
'sales_order': item_doc.sales_order,
|
||||||
'sales_order_item': item_doc.sales_order_item,
|
'sales_order_item': item_doc.sales_order_item,
|
||||||
|
'material_request': item_doc.material_request,
|
||||||
|
'material_request_item': item_doc.material_request_item,
|
||||||
'uom': item_doc.uom,
|
'uom': item_doc.uom,
|
||||||
'stock_uom': item_doc.stock_uom,
|
'stock_uom': item_doc.stock_uom,
|
||||||
'conversion_factor': item_doc.conversion_factor,
|
'conversion_factor': item_doc.conversion_factor,
|
||||||
@@ -231,7 +233,6 @@ def set_delivery_note_missing_values(target):
|
|||||||
target.run_method('set_po_nos')
|
target.run_method('set_po_nos')
|
||||||
target.run_method('calculate_taxes_and_totals')
|
target.run_method('calculate_taxes_and_totals')
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def create_stock_entry(pick_list):
|
def create_stock_entry(pick_list):
|
||||||
pick_list = frappe.get_doc(json.loads(pick_list))
|
pick_list = frappe.get_doc(json.loads(pick_list))
|
||||||
@@ -282,6 +283,28 @@ def create_stock_entry(pick_list):
|
|||||||
|
|
||||||
return stock_entry.as_dict()
|
return stock_entry.as_dict()
|
||||||
|
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def create_stock_entry_with_material_request_items(pick_list):
|
||||||
|
stock_entry = frappe.new_doc('Stock Entry')
|
||||||
|
stock_entry.pick_list = pick_list.get('name')
|
||||||
|
stock_entry.purpose = pick_list.get('purpose')
|
||||||
|
stock_entry.set_stock_entry_type()
|
||||||
|
|
||||||
|
doc = get_mapped_doc("Work Order", source_name, {
|
||||||
|
"Work Order": {
|
||||||
|
"doctype": "Pick List",
|
||||||
|
"validation": {
|
||||||
|
"docstatus": ["=", 1]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Work Order Item": {
|
||||||
|
"doctype": "Pick List Reference Item",
|
||||||
|
"postprocess": update_item_quantity,
|
||||||
|
"condition": lambda doc: abs(doc.transferred_qty) < abs(doc.required_qty)
|
||||||
|
},
|
||||||
|
}, target_doc)
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_pending_work_orders(doctype, txt, searchfield, start, page_length, filters, as_dict):
|
def get_pending_work_orders(doctype, txt, searchfield, start, page_length, filters, as_dict):
|
||||||
return frappe.db.sql("""
|
return frappe.db.sql("""
|
||||||
|
|||||||
@@ -24,7 +24,9 @@
|
|||||||
"batch_no",
|
"batch_no",
|
||||||
"column_break_15",
|
"column_break_15",
|
||||||
"sales_order",
|
"sales_order",
|
||||||
"sales_order_item"
|
"sales_order_item",
|
||||||
|
"material_request",
|
||||||
|
"material_request_item"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
@@ -152,10 +154,21 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "column_break_20",
|
"fieldname": "column_break_20",
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "material_request",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Material Request",
|
||||||
|
"options": "Material Request"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "material_request_item",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"label": "Material Request Item"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"modified": "2019-08-14 18:41:37.727388",
|
"modified": "2019-08-23 14:13:11.088354",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Pick List Item",
|
"name": "Pick List Item",
|
||||||
|
|||||||
Reference in New Issue
Block a user