pdf.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. function rrhh_pdf(reporting) {
  2. "use strict";
  3. var model = openerp;
  4. reporting.ReportPdfWidget = reporting.Base.extend({
  5. drawAbsencePdf: function (row,ResCompany,pdf_title,pdf_type,pdf_name,pdf_columnStyles,filter) {
  6. var self = this;
  7. var base64Img = 'data:image/png;base64,' + ResCompany.logo;
  8. var hoy = moment().format('DD/MM/YYYY');
  9. var totalPagesExp = "{total_pages_count_string}";
  10. var pdfDoc = new jsPDF(pdf_type);
  11. var title = [];
  12. var currentpage = 0;
  13. var i = 0;
  14. var position = 27;
  15. var y_position2 = 27;
  16. title.push({
  17. title : 'Fecha',
  18. dataKey: 'create_date',
  19. align: 'center',
  20. });
  21. title.push({
  22. title : 'Descripción',
  23. dataKey: 'name',
  24. align: 'center',
  25. });
  26. title.push({
  27. title : 'Nómina',
  28. dataKey: 'payslip',
  29. align: 'center',
  30. });
  31. title.push({
  32. title : 'Días Faltados',
  33. dataKey: 'number_of_days',
  34. align: 'center',
  35. });
  36. //LOGO
  37. pdfDoc.addImage(base64Img, 'png', 7, 2, 0, 15);
  38. //FECHA
  39. pdfDoc.setFontSize(13);
  40. pdfDoc.setFontStyle('normal');
  41. pdfDoc.setTextColor(40)
  42. pdfDoc.text(pdfDoc.internal.pageSize.getWidth() - 35, 12,hoy);
  43. //TITULO
  44. pdfDoc.setFontSize(15);
  45. pdfDoc.setFontStyle('bold');
  46. pdfDoc.setTextColor('#0288d1');
  47. pdfDoc.autoTableText(pdf_title, pdfDoc.internal.pageSize.getWidth() - 12, 18, {
  48. halign: 'right',
  49. valign: 'middle'
  50. });
  51. pdfDoc.setLineWidth(0.5);
  52. pdfDoc.setDrawColor('#424242');
  53. pdfDoc.line(10, 22, pdfDoc.internal.pageSize.getWidth() - 10 , 22);
  54. var ii=0;
  55. if(pdf_type == 'l'){
  56. var col1_title = 15;
  57. var col1_value = 55;
  58. var col2_title = 150;
  59. var col2_value = 190;
  60. }
  61. else{
  62. var col1_title = 10;
  63. var col1_value = 50;
  64. var col2_title = 110;
  65. var col2_value = 150;
  66. }
  67. if(filter.length >0){
  68. _.each(filter,function(item){
  69. if(ii<4){
  70. self.addFilter(pdfDoc,item.title,item.value,col1_title,col1_value,position);
  71. position = position + 5;
  72. }else{
  73. self.addFilter(pdfDoc,item.title,item.value,col2_title,col2_value,y_position2);
  74. y_position2 = y_position2 + 5;
  75. }
  76. ii++;
  77. });
  78. pdfDoc.setLineWidth(0.5);
  79. pdfDoc.setDrawColor('#424242');
  80. if(position >= y_position2){
  81. position = position;
  82. pdfDoc.line(10, position, pdfDoc.internal.pageSize.getWidth() - 10 , position);
  83. }else{
  84. position = y_position2;
  85. pdfDoc.line(10, y_position2, pdfDoc.internal.pageSize.getWidth() - 10 , y_position2);
  86. }
  87. }
  88. _.each(row, function(item){
  89. if(i > 0){
  90. let first = pdfDoc.autoTable.previous;
  91. position = first.finalY + 5;
  92. };
  93. var docItem = [];
  94. if(item.info != 'undefined'){
  95. _.each(item.info, function(index){
  96. docItem.push({
  97. create_date: index.create_date,
  98. name: index.name,
  99. payslip: index.payslip,
  100. number_of_days: index.number_of_days,
  101. })
  102. });
  103. }
  104. pdfDoc.setDrawColor(0);
  105. pdfDoc.setFillColor(76, 133, 248);
  106. pdfDoc.rect(7, position+5, 196, 8, 'F');
  107. pdfDoc.setFontSize(9);
  108. pdfDoc.setTextColor(255,255,255)
  109. pdfDoc.setFontStyle('bold');
  110. pdfDoc.autoTableText('Funcionario: ', 10, position+9, {
  111. halign: 'left',
  112. valign: 'middle'
  113. });
  114. pdfDoc.autoTableText(item.employee_name, 30, position+9, {
  115. halign: 'left',
  116. valign: 'middle'
  117. });
  118. pdfDoc.autoTableText('Días Faltados: ', 100, position+9, {
  119. halign: 'left',
  120. valign: 'middle'
  121. });
  122. pdfDoc.autoTableText(item.total_days, 123, position+9, {
  123. halign: 'left',
  124. valign: 'middle'
  125. });
  126. pdfDoc.autoTableText('Monto Descontado: ', 140, position+9, {
  127. halign: 'left',
  128. valign: 'middle'
  129. });
  130. pdfDoc.autoTableText(item.total_amount, 172, position+9, {
  131. halign: 'left',
  132. valign: 'middle'
  133. });
  134. pdfDoc.autoTable(title, docItem, {
  135. // showHeader: false,
  136. startY: position+15,
  137. theme: 'grid',
  138. styles: {
  139. overflow: 'linebreak',
  140. fontSize: 8,
  141. margin: 50,
  142. lineWidth: 0.3,
  143. lineColor: [132,132,132]
  144. },
  145. headerStyles: {
  146. fillColor: [255,255,255],
  147. fontSize: 9,
  148. textColor: [0,0,0],
  149. lineWidth: 0.3,
  150. lineColor: [132,132,132]
  151. },
  152. columnStyles: pdf_columnStyles,
  153. margin: 'auto',
  154. tableWidth: 'auto',
  155. addPageContent: function (data) {
  156. // FOOTER
  157. if (currentpage < pdfDoc.internal.getNumberOfPages()) {
  158. var str = "Página " + pdfDoc.internal.getNumberOfPages();
  159. str = str + " de " + totalPagesExp;
  160. pdfDoc.setFontSize(9);
  161. pdfDoc.setFontStyle('bold');
  162. pdfDoc.setTextColor(40);
  163. var pageHeight = pdfDoc.internal.pageSize.height || pdfDoc.internal.pageSize.getHeight();
  164. pdfDoc.text(str, pdfDoc.internal.pageSize.getWidth() - 55, pageHeight - 5);
  165. currentpage = pdfDoc.internal.getNumberOfPages();
  166. }
  167. }
  168. });
  169. i++;
  170. });
  171. if (typeof pdfDoc.putTotalPages === 'function') {
  172. pdfDoc.putTotalPages(totalPagesExp);
  173. }
  174. row.pop();
  175. if(model.printer_bridge){
  176. var data = pdfDoc.output('datauristring');
  177. model.printer_bridge.print(data);
  178. return;
  179. }
  180. pdfDoc.save(pdf_name + hoy + '.pdf');
  181. },
  182. addFilter: function(pdfDoc,title,value,x_position_title,x_position_value,y_position){
  183. pdfDoc.setFontSize(10);
  184. pdfDoc.setTextColor('#424242');
  185. pdfDoc.setFontStyle('bold');
  186. pdfDoc.autoTableText(title+':', x_position_title, y_position, {
  187. halign: 'left',
  188. valign: 'middle'
  189. });
  190. pdfDoc.setFontSize(10);
  191. pdfDoc.setTextColor('#424242');
  192. pdfDoc.setFontStyle('normal');
  193. pdfDoc.autoTableText(value, x_position_value, y_position, {
  194. halign: 'left',
  195. valign: 'middle'
  196. });
  197. },
  198. });
  199. }