Skip to content

Commit

Permalink
Merge branch 'bom_currency' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
rohitwaghchaure committed Sep 5, 2017
2 parents 8054d96 + c872095 commit 2967d7e
Show file tree
Hide file tree
Showing 9 changed files with 349 additions and 196 deletions.
168 changes: 87 additions & 81 deletions erpnext/manufacturing/doctype/bom/bom.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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) {
Expand Down Expand Up @@ -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];
Expand All @@ -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];
Expand All @@ -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);
Expand All @@ -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];
Expand All @@ -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 || [];
Expand All @@ -189,15 +220,15 @@ erpnext.bom.calculate_op_cost = function(doc) {

for(var i=0;i<op.length;i++) {
var operating_cost = flt(flt(op[i].hour_rate) * flt(op[i].time_in_mins) / 60, 2);
var base_operating_cost = flt(flt(op[i].base_hour_rate) * flt(op[i].time_in_mins) / 60, 2);
var base_operating_cost = flt(operating_cost * doc.conversion_rate, 2);
frappe.model.set_value('BOM Operation',op[i].name, "operating_cost", operating_cost);
frappe.model.set_value('BOM Operation',op[i].name, "base_operating_cost", base_operating_cost);

doc.operating_cost += operating_cost;
doc.base_operating_cost += base_operating_cost;
}
refresh_field(['operating_cost', 'base_operating_cost']);
}
};

// rm : raw material
erpnext.bom.calculate_rm_cost = function(doc) {
Expand All @@ -206,84 +237,58 @@ erpnext.bom.calculate_rm_cost = function(doc) {
var base_total_rm_cost = 0;
for(var i=0;i<rm.length;i++) {
var amount = flt(rm[i].rate) * flt(rm[i].qty);
var base_amount = flt(rm[i].rate) * flt(doc.conversion_rate) * flt(rm[i].qty);
frappe.model.set_value('BOM Item', rm[i].name, 'base_rate', flt(rm[i].rate) * flt(doc.conversion_rate))
frappe.model.set_value('BOM Item', rm[i].name, 'amount', amount)
frappe.model.set_value('BOM Item', rm[i].name, 'qty_consumed_per_unit', flt(rm[i].qty)/flt(doc.quantity))
frappe.model.set_value('BOM Item', rm[i].name, 'base_amount', base_amount)
var base_amount = amount * flt(doc.conversion_rate);

frappe.model.set_value('BOM Item', rm[i].name, 'base_rate',
flt(rm[i].rate) * flt(doc.conversion_rate));
frappe.model.set_value('BOM Item', rm[i].name, 'amount', amount);
frappe.model.set_value('BOM Item', rm[i].name, 'base_amount', base_amount);
frappe.model.set_value('BOM Item', rm[i].name,
'qty_consumed_per_unit', flt(rm[i].stock_qty)/flt(doc.quantity));

total_rm_cost += amount;
base_total_rm_cost += base_amount;
}
cur_frm.set_value("raw_material_cost", total_rm_cost);
cur_frm.set_value("base_raw_material_cost", base_total_rm_cost);
}
};

//sm : scrap material
// sm : scrap material
erpnext.bom.calculate_scrap_materials_cost = function(doc) {
var sm = doc.scrap_items || [];
var total_sm_cost = 0;
var base_total_sm_cost = 0;

for(var i=0;i<sm.length;i++) {
var base_rate = flt(sm[i].rate) * flt(doc.conversion_rate);
var amount = flt(sm[i].rate) * flt(sm[i].qty);
var base_amount = flt(sm[i].rate) * flt(sm[i].qty) * flt(doc.conversion_rate);
var amount = flt(sm[i].rate) * flt(sm[i].stock_qty);
var base_amount = amount * flt(doc.conversion_rate);

frappe.model.set_value('BOM Scrap Item',sm[i].name, 'base_rate', base_rate);
frappe.model.set_value('BOM Scrap Item',sm[i].name, 'amount', amount);
frappe.model.set_value('BOM Scrap Item',sm[i].name, 'base_amount', base_amount);

total_sm_cost += amount;
base_total_sm_cost += base_amount;
}

cur_frm.set_value("scrap_material_cost", total_sm_cost);
cur_frm.set_value("base_scrap_material_cost", base_total_sm_cost);
}
};

// Calculate Total Cost
erpnext.bom.calculate_total = function(doc) {
var total_cost = flt(doc.operating_cost) + flt(doc.raw_material_cost) - flt(doc.scrap_material_cost);
var base_total_cost = flt(doc.base_operating_cost) + flt(doc.base_raw_material_cost) - flt(doc.base_scrap_material_cost);
var base_total_cost = flt(doc.base_operating_cost) + flt(doc.base_raw_material_cost)
- flt(doc.base_scrap_material_cost);

cur_frm.set_value("total_cost", total_cost);
cur_frm.set_value("base_total_cost", base_total_cost);
}


cur_frm.fields_dict['item'].get_query = function(doc) {
return{
query: "erpnext.controllers.queries.item_query"
}
}
};

cur_frm.fields_dict['project'].get_query = function(doc, dt, dn) {
return{
filters:[
['Project', 'status', 'not in', 'Completed, Cancelled']
]
}
}

cur_frm.fields_dict['items'].grid.get_field('item_code').get_query = function(doc) {
return{
query: "erpnext.controllers.queries.item_query",
filters: [["Item", "name", "!=", cur_frm.doc.item]]
}
}

cur_frm.fields_dict['items'].grid.get_field('bom_no').get_query = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
return{
filters:{
'item': d.item_code,
'is_active': 1,
'docstatus': 1
}
}
}

cur_frm.cscript.validate = function(doc, dt, dn) {
erpnext.bom.update_cost(doc)
}
cur_frm.cscript.validate = function(doc) {
erpnext.bom.update_cost(doc);
};

frappe.ui.form.on("BOM Operation", "operation", function(frm, cdt, cdn) {
var d = locals[cdt][cdn];
Expand All @@ -304,7 +309,7 @@ frappe.ui.form.on("BOM Operation", "operation", function(frm, cdt, cdn) {
frappe.model.set_value(d.doctype, d.name, "workstation", data.message.workstation);
}
}
})
});
});

frappe.ui.form.on("BOM Operation", "workstation", function(frm, cdt, cdn) {
Expand All @@ -317,21 +322,22 @@ frappe.ui.form.on("BOM Operation", "workstation", function(frm, cdt, cdn) {
name: d.workstation
},
callback: function (data) {
frappe.model.set_value(d.doctype, d.name, "hour_rate", data.message.hour_rate);
frappe.model.set_value(d.doctype, d.name, "base_hour_rate", flt(data.message.hour_rate) * flt(frm.doc.conversion_rate));
frappe.model.set_value(d.doctype, d.name, "base_hour_rate", data.message.hour_rate);
frappe.model.set_value(d.doctype, d.name, "hour_rate",
flt(flt(data.message.hour_rate) / flt(frm.doc.conversion_rate)), 2);

erpnext.bom.calculate_op_cost(frm.doc);
erpnext.bom.calculate_total(frm.doc);
}
})
});
});

frappe.ui.form.on("BOM Item", "qty", function(frm, cdt, cdn) {
var d = locals[cdt][cdn];
d.stock_qty = d.qty * d.conversion_factor;
refresh_field("items");
refresh_field("stock_qty", d.name, d.parentfield);
});



frappe.ui.form.on("BOM Operation", "operations_remove", function(frm) {
erpnext.bom.calculate_op_cost(frm.doc);
erpnext.bom.calculate_total(frm.doc);
Expand All @@ -344,7 +350,7 @@ frappe.ui.form.on("BOM Item", "items_remove", function(frm) {

var toggle_operations = function(frm) {
frm.toggle_display("operations_section", cint(frm.doc.with_operations) == 1);
}
};

frappe.ui.form.on("BOM", "with_operations", function(frm) {
if(!cint(frm.doc.with_operations)) {
Expand All @@ -355,4 +361,4 @@ frappe.ui.form.on("BOM", "with_operations", function(frm) {

cur_frm.cscript.image = function() {
refresh_field("image_view");
}
};
Loading

0 comments on commit 2967d7e

Please sign in to comment.