|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- _p.PrintQuery = function() {
- this.args = {};
- }
- _p.PrintQuery.prototype.show_dialog = function(args) {
- this.args = args;
- var me = this;
-
- if(!this.dialog) {
- var d = new Dialog(400, 300, "Print");
- d.make_body([
- ['Data', 'Max rows', 'Blank to print all rows'],
- ['Data', 'Rows per page'],
- ['Button', 'Go'],
- ]);
- d.widgets['Go'].onclick = function() {
- d.hide();
- me.render(cint(d.widgets['Max rows'].value), cint(d.widgets['Rows per page'].value))
- }
- d.onshow = function() {
- this.widgets['Rows per page'].value = '35';
- this.widgets['Max rows'].value = '500';
- }
- this.dialog = d;
- }
- this.dialog.show();
- }
-
- _p.PrintQuery.prototype.render = function(max_rows, page_len) {
- //q, title, colnames, colwidths, coltypes, has_index, check_limit, is_simple
- var me = this;
- var args = me.args;
-
- // limit for max rows
- if(cint(max_rows)!=0) args.query += ' LIMIT 0,' + cint(max_rows);
-
- if(!args.query) return;
-
- var callback = function(r,rt) {
-
- if(!r.values) { return; }
- if(!page_len) page_len = r.values.length;
-
- // add serial num column
-
- if(r.colnames && r.colnames.length)
- args.colnames = args.has_index ? add_lists(['Sr'],r.colnames) : r.colnames;
- if(r.colwidths && r.colwidths.length)
- args.colwidths = args.has_index ? add_lists(['25px'],r.colwidths) : r.colwidths;
- if(r.coltypes)
- args.coltypes = args.has_index ? add_lists(['Data'],r.coltypes) : r.coltypes;
-
- if(args.coltypes) {
- for(var i in args.coltypes)
- if(args.coltypes[i]=='Link') args.coltypes[i]='Data';
- }
-
- // fix widths to %
- if(args.colwidths) {
- var tw = 0;
- for(var i=0; i<args.colwidths.length; i++) tw+=cint(args.colwidths[i] ? args.colwidths[i]: 100);
- for(var i=0; i<args.colwidths.length; i++) args.colwidths[i]= cint(cint(args.colwidths[i] ? args.colwidths[i] : 100) / tw * 100) + '%';
- }
-
-
- var has_heading = args.colnames ? 1 : 0;
- if(!args.has_headings) has_heading = 0;
-
- var tl = []
- for(var st=0; st< r.values.length; st = st + page_len) {
- tl.push(me.build_table(r, st, page_len, has_heading, args.rb))
- }
-
- var html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
- + '<html><head>'
- +'<title>'+args.title+'</title>'
- +'<style>'+_p.def_print_style_body + _p.def_print_style_other+'</style>'
- +'</head><body>'
- + (r.header_html ? r.header_html : '')
- + tl.join('\n<div style="page-break-after: always;"></div>\n')
- + (r.footer_html ? r.footer_html : '')
- +'</body></html>';
- _p.preview(html);
- }
- var out_args = copy_dict(args);
- if(args.is_simple) {
- out_args.simple_query = args.query;
- delete out_args.query;
- }
- // add filter values
- if(args.filter_values)
- out_args.filter_values = args.filter_values;
- $c('webnotes.widgets.query_builder.runquery', out_args, callback);
- }
-
- _p.PrintQuery.prototype.build_table = function(r, start, page_len, has_heading, rb) {
- // print a table
- var div = document.createElement('div');
-
- if(!r.page_template) {
- var head = $a(div,'div',null,{fontSize:'20px', fontWeight:'bold', margin:'16px 0px', borderBottom: '1px solid #CCC', paddingBottom:'8px'});
- head.innerHTML = args.title;
- }
-
- var m = start + page_len;
- if(m>r.values.length) m = r.values.length
-
- var t = make_table(div, m + has_heading - start, r.values[0].length + args.has_index, '100%', null);
- t.className = 'simpletable';
- if(args.colwidths)
- $y(t,{tableLayout:'fixed'});
-
- if(has_heading) {
- for(var i=0; i < args.colnames.length; i++) {
- $td(t,0,i).innerHTML = args.colnames[i].bold();
- if(args.colwidths && args.colwidths[i]) {
- $w($td(t,0,i),args.colwidths[i]);
- }
- }
- }
-
- for(var ri=start; ri<m; ri++) {
- // Sr No
- if(args.has_index)
- $td(t,ri+has_heading-start,0).innerHTML=ri+1;
- for(var ci=0; ci<r.values[0].length; ci++) {
- if(ri-start==0 && args.colwidths && args.colwidths[i]){
- $w($td(t,0,i), args.colwidths[i]); // colwidths for all
- }
- var c = $td(t,ri+has_heading-start,ci + args.has_index)
- c.div = $a(c, 'div','', {whiteSpace:'normal'});
- $s(
- c.div,
- r.values[ri][ci],
- args.coltypes ? args.coltypes[ci + args.has_index] : null
- );
- }
- }
-
- // user style
- if(r.style) {
- for(var i=0;i<r.style.length;i++) {
- $yt(t,r.style[i][0],r.style[i][1],r.style[i][2]);
- }
- }
-
- if(rb && rb.aftertableprint) {
- rb.aftertableprint(t);
- }
-
- if(r.page_template) return repl(r.page_template, {table:div.innerHTML});
- else return div.innerHTML;
-
- }
-
|