diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js index c58c89cd5d49..32c357f25c3f 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -5,7 +5,10 @@ frappe.provide("erpnext.bom"); frappe.ui.form.on("BOM", { setup: function(frm) { - frm.add_fetch('buying_price_list', 'currency', 'currency'); + frm.add_fetch("item", "description", "description"); + frm.add_fetch("item", "image", "image"); + frm.add_fetch("item", "item_name", "item_name"); + frm.add_fetch("item", "stock_uom", "uom"); frm.set_query("bom_no", "items", function() { return { @@ -23,6 +26,38 @@ frappe.ui.form.on("BOM", { } }; }); + + frm.set_query("item", function() { + return { + query: "erpnext.controllers.queries.item_query" + }; + }); + + frm.set_query("project", function() { + return{ + filters:[ + ['Project', 'status', 'not in', 'Completed, Cancelled'] + ] + }; + }); + + frm.set_query("item_code", "items", function() { + return { + query: "erpnext.controllers.queries.item_query", + filters: [["Item", "name", "!=", cur_frm.doc.item]] + }; + }); + + frm.set_query("bom_no", "items", function(doc, cdt, cdn) { + var d = locals[cdt][cdn]; + return { + filters: { + 'item': d.item_code, + 'is_active': 1, + 'docstatus': 1 + } + }; + }); }, onload_post_render: function(frm) { @@ -69,14 +104,14 @@ frappe.ui.form.on("BOM", { }); erpnext.bom.BomController = erpnext.TransactionController.extend({ - conversion_rate: function(doc, cdt, cdn) { + conversion_rate: function(doc) { if(this.frm.doc.currency === this.get_company_currency()) { this.frm.set_value("conversion_rate", 1.0); } else { erpnext.bom.update_cost(doc); } }, - + item_code: function(doc, cdt, cdn){ var scrap_items = false; var child = locals[cdt][cdn]; @@ -90,39 +125,34 @@ erpnext.bom.BomController = erpnext.TransactionController.extend({ get_bom_material_detail(doc, cdt, cdn, scrap_items); }, - conversion_factor: function(doc, cdt, cdn, dont_fetch_price_list_rate) { + conversion_factor: function(doc, cdt, cdn) { if(frappe.meta.get_docfield(cdt, "stock_qty", cdn)) { var item = frappe.get_doc(cdt, cdn); frappe.model.round_floats_in(item, ["qty", "conversion_factor"]); item.stock_qty = flt(item.qty * item.conversion_factor, precision("stock_qty", item)); refresh_field("stock_qty", item.name, item.parentfield); this.toggle_conversion_factor(item); + this.frm.events.update_cost(this.frm); } }, -}) +}); $.extend(cur_frm.cscript, new erpnext.bom.BomController({frm: cur_frm})); -cur_frm.add_fetch("item", "description", "description"); -cur_frm.add_fetch("item", "image", "image"); -cur_frm.add_fetch("item", "item_name", "item_name"); -cur_frm.add_fetch("item", "stock_uom", "uom"); - - -cur_frm.cscript.hour_rate = function(doc, dt, dn) { +cur_frm.cscript.hour_rate = function(doc) { erpnext.bom.calculate_op_cost(doc); erpnext.bom.calculate_total(doc); -} +}; cur_frm.cscript.time_in_mins = cur_frm.cscript.hour_rate; cur_frm.cscript.bom_no = function(doc, cdt, cdn) { get_bom_material_detail(doc, cdt, cdn, false); -} +}; cur_frm.cscript.is_default = function(doc) { if (doc.is_default) cur_frm.set_value("is_active", 1); -} +}; var get_bom_material_detail= function(doc, cdt, cdn, scrap_items) { var d = locals[cdt][cdn]; @@ -141,6 +171,7 @@ var get_bom_material_detail= function(doc, cdt, cdn, scrap_items) { $.extend(d, r.message); refresh_field("items"); refresh_field("scrap_items"); + doc = locals[doc.doctype][doc.name]; erpnext.bom.calculate_rm_cost(doc); erpnext.bom.calculate_scrap_materials_cost(doc); @@ -149,13 +180,13 @@ var get_bom_material_detail= function(doc, cdt, cdn, scrap_items) { freeze: true }); } -} +}; -cur_frm.cscript.qty = function(doc, cdt, cdn) { +cur_frm.cscript.qty = function(doc) { erpnext.bom.calculate_rm_cost(doc); erpnext.bom.calculate_scrap_materials_cost(doc); erpnext.bom.calculate_total(doc); -} +}; cur_frm.cscript.rate = function(doc, cdt, cdn) { var d = locals[cdt][cdn]; @@ -173,14 +204,14 @@ cur_frm.cscript.rate = function(doc, cdt, cdn) { erpnext.bom.calculate_scrap_materials_cost(doc); erpnext.bom.calculate_total(doc); } -} +}; erpnext.bom.update_cost = function(doc) { erpnext.bom.calculate_op_cost(doc); erpnext.bom.calculate_rm_cost(doc); erpnext.bom.calculate_scrap_materials_cost(doc); erpnext.bom.calculate_total(doc); -} +}; erpnext.bom.calculate_op_cost = function(doc) { var op = doc.operations || []; @@ -189,7 +220,7 @@ erpnext.bom.calculate_op_cost = function(doc) { for(var i=0;i