69 lines
2 KiB
JavaScript
69 lines
2 KiB
JavaScript
// Calculator
|
|
// ----------
|
|
_r.calc_dialog = null;
|
|
_r.show_calc = function(tab, colnames, coltypes, add_idx) {
|
|
if(!add_idx) add_idx = 0;
|
|
if(!tab || !tab.rows.length) { msgprint("No Data"); return; }
|
|
|
|
if(!_r.calc_dialog) {
|
|
var d = new Dialog(400,400,"Calculator")
|
|
d.make_body([
|
|
['Select','Column']
|
|
,['Data','Sum']
|
|
,['Data','Average']
|
|
,['Data','Min']
|
|
,['Data','Max']
|
|
])
|
|
d.widgets['Sum'].readonly = 'readonly';
|
|
d.widgets['Average'].readonly = 'readonly';
|
|
d.widgets['Min'].readonly = 'readonly';
|
|
d.widgets['Max'].readonly = 'readonly';
|
|
d.widgets['Column'].onchange = function() {
|
|
d.set_calc();
|
|
}
|
|
d.set_calc = function() {
|
|
// get the current column of the data table
|
|
var cn = sel_val(this.widgets['Column']);
|
|
var cidx = 0; var sum=0; var avg=0; var minv = null; var maxv = null;
|
|
for(var i=0;i<this.colnames.length;i++) {if(this.colnames[i]==cn){ cidx=i+add_idx; break; } }
|
|
for(var i=0; i<this.datatab.rows.length; i++) {
|
|
var c = this.datatab.rows[i].cells[cidx];
|
|
var v = c.div ? flt(c.div.innerHTML) : flt(c.innerHTML);
|
|
sum += v;
|
|
if(minv == null) minv = v;
|
|
if(maxv == null) maxv = v;
|
|
if(v > maxv)maxv = v;
|
|
if(v < minv)minv = v;
|
|
}
|
|
d.widgets['Sum'].value = fmt_money(sum);
|
|
d.widgets['Average'].value = fmt_money(sum / this.datatab.rows.length);
|
|
d.widgets['Min'].value = fmt_money(minv);
|
|
d.widgets['Max'].value = fmt_money(maxv);
|
|
_r.calc_dialog = d;
|
|
}
|
|
d.onshow = function() {
|
|
// set columns
|
|
var cl = [];
|
|
for(var i in _r.calc_dialog.colnames) {
|
|
if(in_list(['Currency','Int','Float'],_r.calc_dialog.coltypes[i]))
|
|
cl.push(_r.calc_dialog.colnames[i]);
|
|
}
|
|
if(!cl.length) {
|
|
this.hide();
|
|
alert("No Numeric Column");
|
|
return;
|
|
}
|
|
var s = this.widgets['Column'];
|
|
empty_select(s);
|
|
add_sel_options(s, cl);
|
|
if(s.inp)s.inp.value = cl[0];
|
|
else s.value = cl[0];
|
|
this.set_calc();
|
|
}
|
|
_r.calc_dialog = d;
|
|
}
|
|
_r.calc_dialog.datatab = tab;
|
|
_r.calc_dialog.colnames = colnames;
|
|
_r.calc_dialog.coltypes = coltypes;
|
|
_r.calc_dialog.show();
|
|
}
|