Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

155 rader
4.3 KiB

  1. _p.PrintQuery = function() {
  2. this.args = {};
  3. }
  4. _p.PrintQuery.prototype.show_dialog = function(args) {
  5. this.args = args;
  6. var me = this;
  7. if(!this.dialog) {
  8. var d = new Dialog(400, 300, "Print");
  9. d.make_body([
  10. ['Data', 'Max rows', 'Blank to print all rows'],
  11. ['Data', 'Rows per page'],
  12. ['Button', 'Go'],
  13. ]);
  14. d.widgets['Go'].onclick = function() {
  15. d.hide();
  16. me.render(cint(d.widgets['Max rows'].value), cint(d.widgets['Rows per page'].value))
  17. }
  18. d.onshow = function() {
  19. this.widgets['Rows per page'].value = '35';
  20. this.widgets['Max rows'].value = '500';
  21. }
  22. this.dialog = d;
  23. }
  24. this.dialog.show();
  25. }
  26. _p.PrintQuery.prototype.render = function(max_rows, page_len) {
  27. //q, title, colnames, colwidths, coltypes, has_index, check_limit, is_simple
  28. var me = this;
  29. var args = me.args;
  30. // limit for max rows
  31. if(cint(max_rows)!=0) args.query += ' LIMIT 0,' + cint(max_rows);
  32. if(!args.query) return;
  33. var callback = function(r,rt) {
  34. if(!r.values) { return; }
  35. if(!page_len) page_len = r.values.length;
  36. // add serial num column
  37. if(r.colnames && r.colnames.length)
  38. args.colnames = args.has_index ? add_lists(['Sr'],r.colnames) : r.colnames;
  39. if(r.colwidths && r.colwidths.length)
  40. args.colwidths = args.has_index ? add_lists(['25px'],r.colwidths) : r.colwidths;
  41. if(r.coltypes)
  42. args.coltypes = args.has_index ? add_lists(['Data'],r.coltypes) : r.coltypes;
  43. if(args.coltypes) {
  44. for(var i in args.coltypes)
  45. if(args.coltypes[i]=='Link') args.coltypes[i]='Data';
  46. }
  47. // fix widths to %
  48. if(args.colwidths) {
  49. var tw = 0;
  50. for(var i=0; i<args.colwidths.length; i++) tw+=cint(args.colwidths[i] ? args.colwidths[i]: 100);
  51. for(var i=0; i<args.colwidths.length; i++) args.colwidths[i]= cint(cint(args.colwidths[i] ? args.colwidths[i] : 100) / tw * 100) + '%';
  52. }
  53. var has_heading = args.colnames ? 1 : 0;
  54. if(!args.has_headings) has_heading = 0;
  55. var tl = []
  56. for(var st=0; st< r.values.length; st = st + page_len) {
  57. tl.push(me.build_table(r, st, page_len, has_heading, args.rb))
  58. }
  59. var html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
  60. + '<html><head>'
  61. +'<title>'+args.title+'</title>'
  62. +'<style>'+_p.def_print_style_body + _p.def_print_style_other+'</style>'
  63. +'</head><body>'
  64. + (r.header_html ? r.header_html : '')
  65. + tl.join('\n<div style="page-break-after: always;"></div>\n')
  66. + (r.footer_html ? r.footer_html : '')
  67. +'</body></html>';
  68. _p.preview(html);
  69. }
  70. var out_args = copy_dict(args);
  71. if(args.is_simple) {
  72. out_args.simple_query = args.query;
  73. delete out_args.query;
  74. }
  75. // add filter values
  76. if(args.filter_values)
  77. out_args.filter_values = args.filter_values;
  78. $c('webnotes.widgets.query_builder.runquery', out_args, callback);
  79. }
  80. _p.PrintQuery.prototype.build_table = function(r, start, page_len, has_heading, rb) {
  81. // print a table
  82. var div = document.createElement('div');
  83. if(!r.page_template) {
  84. var head = $a(div,'div',null,{fontSize:'20px', fontWeight:'bold', margin:'16px 0px', borderBottom: '1px solid #CCC', paddingBottom:'8px'});
  85. head.innerHTML = args.title;
  86. }
  87. var m = start + page_len;
  88. if(m>r.values.length) m = r.values.length
  89. var t = make_table(div, m + has_heading - start, r.values[0].length + args.has_index, '100%', null);
  90. t.className = 'simpletable';
  91. if(args.colwidths)
  92. $y(t,{tableLayout:'fixed'});
  93. if(has_heading) {
  94. for(var i=0; i < args.colnames.length; i++) {
  95. $td(t,0,i).innerHTML = args.colnames[i].bold();
  96. if(args.colwidths && args.colwidths[i]) {
  97. $w($td(t,0,i),args.colwidths[i]);
  98. }
  99. }
  100. }
  101. for(var ri=start; ri<m; ri++) {
  102. // Sr No
  103. if(args.has_index)
  104. $td(t,ri+has_heading-start,0).innerHTML=ri+1;
  105. for(var ci=0; ci<r.values[0].length; ci++) {
  106. if(ri-start==0 && args.colwidths && args.colwidths[i]){
  107. $w($td(t,0,i), args.colwidths[i]); // colwidths for all
  108. }
  109. var c = $td(t,ri+has_heading-start,ci + args.has_index)
  110. c.div = $a(c, 'div','', {whiteSpace:'normal'});
  111. $s(
  112. c.div,
  113. r.values[ri][ci],
  114. args.coltypes ? args.coltypes[ci + args.has_index] : null
  115. );
  116. }
  117. }
  118. // user style
  119. if(r.style) {
  120. for(var i=0;i<r.style.length;i++) {
  121. $yt(t,r.style[i][0],r.style[i][1],r.style[i][2]);
  122. }
  123. }
  124. if(rb && rb.aftertableprint) {
  125. rb.aftertableprint(t);
  126. }
  127. if(r.page_template) return repl(r.page_template, {table:div.innerHTML});
  128. else return div.innerHTML;
  129. }