ERPNext Conference 2019* ERPNext.com Blog

Wanted total of BOM qty!

customization

#1

code I tried

//setting total qty

frappe.ui.form.on(‘BOM’, ‘validate’, function(frm) {
set_total_qty(frm);
})

frappe.ui.form.on(‘BOM Item’, ‘qty’, function(frm, cdt, cdn) {
set_total_qty(frm);
})

var set_total_qty = function(frm) {
var total_qty = 0.0;
$.each(frm.doc.items, functions(i, row) {
total_qty += flt(row.qty);
})
frm.set_value(‘total_qty’, total_qty);
frm.refresh();
}


#2

Here is an example for getting the total qty
I have done this on the stock entry form and its working fine
Iam on V12

example
stock entry form
stock entry details — child

create a field “total qty” in “stock entry”
go to custom script
select stock entry
enter this code

frappe.ui.form.on(“Stock Entry”, “refresh”, function(frm, cdt, cdn) {
// code for calculate total and set on parent field.
total_qty = 0;
$.each(frm.doc.items || [], function(i, d) {
total_qty += flt(d.qty);
});
frm.set_value(“total_qty”, total_qty);
});
hope this helps
regards
Hemanth


#3

Hi Hemanth,

I tried it unfortunately it still giving errors on my end the qty I want summation of is the child of the parent doctype which is “BOM Item” .


#4

you should try this.

frappe.ui.form.on('BOM Item', {
    qty: function(frm,cdt,cdn) {
	
	set_total_qty(cur_frm)

    },
    item_code: function(frm,cdt,cdn){
	 setTimeout(function(){ 	set_total_qty(cur_frm) },1500);

    }
})
frappe.ui.form.on('BOM', {
    validate: function(frm,cdt,cdn) {

	set_total_qty(frm)
   }

})

function set_total_qty(frm) {
	var doc = locals[frm.doc.doctype][frm.doc.name]
        var total_qty = 0
        $.each(doc.items, function(i, d) {
            total_qty += flt(d.qty)
        });
	frm.set_value("total_qty",total_qty)
}

#5

Hi,

This gives no errors but the value aint computing also.

I have tried this out but the page aint loading and can’t figure out the mistake

frappe.ui.form.on(‘BOM’, {
refresh(frm) {
set_total_qty(frm);
}
});

frappe.ui.form.on(‘BOM Item’, {
refresh(frm) {
set_total_qty(frm);
}
});

var set_total_qty = function(frm){
var total_qty=0.0;
$.each(frm.doc.items, function(i,row){
total_qty += flt(row.qty);
});
frm.set_value(‘total_qty’, total_qty);
frm.refresh();
};


#6

share you custom script screen shot and also check any error in console??


#7

There is no error and but the total value still shows 0.
I have also checked the namingeverything seems fine.


#8

what doctype did you select in custom script??


#9

BOM is the doc type


#10

you try this one … item_code and qty change event necessary which you not added.

frappe.ui.form.on('BOM Item', {
    qty: function(frm,cdt,cdn) {
	
	set_total_qty(cur_frm)

    },
    item_code: function(frm,cdt,cdn){
	 setTimeout(function(){ 	set_total_qty(cur_frm) },1500);

    }
})
frappe.ui.form.on('BOM', {
    validate: function(frm,cdt,cdn) {

	set_total_qty(frm)
   }

})

function set_total_qty(frm) {
	var doc = locals[frm.doc.doctype][frm.doc.name]
        var total_qty = 0
        $.each(doc.items, function(i, d) {
            total_qty += flt(d.qty)
        });
	frm.set_value("total_qty",total_qty)
}

#11

Thanks a lot this worked

Another question:
How will the script for total cost (currency) divided by total qty (float) be like could you help out with this ?

given I want to find rate per kg for the same