Added make Production Order button against Material Request

This commit is contained in:
Neil Trini Lasrado 2016-01-27 12:19:51 +05:30
parent cc23bc0549
commit 9739dc3639
3 changed files with 93 additions and 9 deletions

View File

@ -139,16 +139,18 @@ erpnext.production_order = {
},
set_default_warehouse: function(frm) {
frappe.call({
method: "erpnext.manufacturing.doctype.production_order.production_order.get_default_warehouse",
if (!(frm.doc.wip_warehouse || frm.doc.fg_warehouse)) {
frappe.call({
method: "erpnext.manufacturing.doctype.production_order.production_order.get_default_warehouse",
callback: function(r) {
if(!r.exe) {
frm.set_value("wip_warehouse", r.message.wip_warehouse);
frm.set_value("fg_warehouse", r.message.fg_warehouse)
callback: function(r) {
if(!r.exe) {
frm.set_value("wip_warehouse", r.message.wip_warehouse);
frm.set_value("fg_warehouse", r.message.fg_warehouse)
}
}
}
});
});
}
}
}

View File

@ -52,7 +52,11 @@ erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.exten
if(doc.material_request_type === "Purchase")
cur_frm.add_custom_button(__("Supplier Quotation"),
this.make_supplier_quotation, __("Make"));
if(doc.material_request_type === "Manufacture" && doc.status === "Submitted")
cur_frm.add_custom_button(__("Production Order"),
this.make_production_order, __("Make"));
cur_frm.page.set_inner_btn_group_as_primary(__("Make"));
// stop
@ -165,6 +169,64 @@ erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.exten
method: "erpnext.stock.doctype.material_request.material_request.make_stock_entry",
frm: cur_frm
});
},
make_production_order: function() {
var items = []
$.each(cur_frm.doc["items"] || [], function(i, d) {
items.push(d.item_code);
});
var d = new frappe.ui.Dialog({
title: __("Production Order"),
fields: [
{
"fieldtype": "Link",
"label": __("Production Item"),
"fieldname": "item",
"options": "Item",
"reqd": 1,
"get_query": function() {
return {
"filters": [
['item_code', 'in', items],
]
}
}
}
]
});
d.set_primary_action(__("Make"), function() {
frappe.call({
method:"erpnext.stock.doctype.material_request.material_request.validate_production_item",
args: {
"item_code": d.get_values().item
},
callback: function(r) {
if(!r.message) {
msgprint("Cannot create Production Order for selected Item.")
}
else {
frappe.call({
method:"erpnext.stock.doctype.material_request.material_request.make_production_order",
args: {
"source_name": cur_frm.doc.name,
"item_code": d.get_values().item,
},
callback: function(r) {
if(!r.exe) {
var doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
}
}
});
}
}
});
});
d.show();
}
});

View File

@ -327,3 +327,23 @@ def make_stock_entry(source_name, target_doc=None):
}, target_doc, set_missing_values)
return doclist
@frappe.whitelist()
def validate_production_item(item_code):
return frappe.db.get_value("Item", item_code, "is_pro_applicable")
@frappe.whitelist()
def make_production_order(source_name, item_code):
material_request= frappe.get_doc("Material Request", source_name)
prod_order = frappe.new_doc("Production Order")
prod_order.production_item = item_code
prod_order.qty = 0
for d in material_request.items:
if d.item_code == item_code:
prod_order.qty = d.qty - d.ordered_qty
prod_order.fg_warehouse = d.warehouse
prod_order.expected_delivery_date = d.schedule_date
prod_order.sales_order = d.sales_order_no
prod_order.material_request = material_request.name
return prod_order