account_bank_statement.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. openerp.account_bank_statement_print = function (instance, local) {
  2. local.widgetInstance = null;
  3. local.parentInstance = null;
  4. local.PrintStatementWidget = instance.Widget.extend({
  5. template : "account_bank_statement_print.PrintStatement",
  6. resStatement:[],
  7. jsonDoc:[],
  8. // Init
  9. init:function(parent){
  10. this._super(parent);
  11. },
  12. updateId : function(id){
  13. var self = this;
  14. self.id=id;
  15. },
  16. start: function () {
  17. var self = this;
  18. this.$el.click(function (e) {
  19. self.fecthInitial();
  20. });
  21. },
  22. fecthInitial: function(){
  23. var id= openerp.webclient._current_state.id;
  24. var self = this;
  25. self.fecthStatement(id).then(function(statement){
  26. return statement;
  27. }).then(function(statement){
  28. self.resStatement = statement;
  29. return self.fetchStatementLine();
  30. }).then(function(statementLine){
  31. self.resStatementLine = statementLine;
  32. return self.drawPDF();
  33. });
  34. return false;
  35. },
  36. // Consultar Statement
  37. fecthStatement: function(id){
  38. var defer = $.Deferred();
  39. var fields=['id','name','journal_id','user_id','date','balance_start','total_entry_encoding','balance_end','company_id','closing_date'];
  40. var domain=[['id','=', id]];
  41. var Statement = new instance.web.Model('account.bank.statement');
  42. Statement.query(fields).filter(domain).order_by('id').all().then(function(results){
  43. defer.resolve(results);
  44. });
  45. return defer;
  46. },
  47. // Consultar Statement Line
  48. fetchStatementLine: function () {
  49. var self = this;
  50. var defer = $.Deferred();
  51. var statement_id = _.flatten(_.map(self.resStatement,function(map){
  52. return map.id;
  53. }));
  54. var fields=['id','partner_id','statement_id','name','ref', 'amount','date'];
  55. var domain=[['statement_id','=', statement_id]];
  56. var StatementLine = new instance.web.Model('account.bank.statement.line');
  57. StatementLine.query(fields).filter(domain).order_by('id').all().then(function(results){
  58. defer.resolve(results);
  59. });
  60. return defer;
  61. },
  62. valorNull:function(dato){
  63. var valor ="";
  64. if (dato){
  65. if(dato == true && typeof dato == 'boolean'){
  66. valor=" ";
  67. }else{
  68. valor=dato;
  69. }
  70. }
  71. return valor;
  72. },
  73. // Generar el PDF
  74. drawPDF:function(){
  75. var self = this;
  76. var doc=[];
  77. var docItem=[];
  78. var getColumns=[];
  79. var cabecera=['Fecha','Comunicacion','Referencia','Socio','Importe']
  80. var pdfDoc = new jsPDF();
  81. var resStatement = self.resStatement;
  82. var resStatementLine = self.resStatementLine;
  83. var positive;
  84. var negative;
  85. var total_ingreso=0;
  86. var total_egreso=0;
  87. for (var i = 0; i < resStatementLine.length; i++) {
  88. if(resStatement[0].id = resStatementLine[i].id){
  89. if(resStatementLine[i].amount>0){
  90. positive = accounting.formatNumber(resStatementLine[i].amount,'0','.',',');
  91. total_ingreso+=resStatementLine[i].amount;
  92. negative = 0;
  93. }else{
  94. negative = accounting.formatNumber(resStatementLine[i].amount*-1,'0','.',',');
  95. positive = 0;
  96. total_egreso+=resStatementLine[i].amount;
  97. }
  98. docItem.push({
  99. line_date : moment(resStatementLine[i].date).format("DD/MM/YYYY"),
  100. line_name : resStatementLine[i].name,
  101. line_ref : self.valorNull(resStatementLine[i].ref),
  102. line_partner_id : resStatementLine[i].partner_id[1],
  103. line_negative_amount : negative,
  104. line_positive_amount : positive
  105. })
  106. }
  107. }
  108. docItem.push({
  109. line_date : '',
  110. line_name : 'Totales',
  111. line_ref : '',
  112. line_partner_id : '',
  113. line_negative_amount : accounting.formatNumber(total_egreso*-1,'0','.',','),
  114. line_positive_amount : accounting.formatNumber(total_ingreso,'0','.',',')
  115. });
  116. doc.push({
  117. name : resStatement[0].name,
  118. journal_id : resStatement[0].journal_id[1],
  119. date : moment(resStatement[0].date).format("DD/MM/YYYY"),
  120. closing_date : moment(resStatement[0].closing_date).format("DD/MM/YYYY"),
  121. user_id : resStatement[0].user_id[1],
  122. balance_start : accounting.formatNumber(resStatement[0].balance_start,'0','.',','),
  123. total_entry_encoding : accounting.formatNumber(resStatement[0].total_entry_encoding,'0','.',','),
  124. balance_end : resStatement[0].balance_end,
  125. company_id : resStatement[0].company_id[1],
  126. });
  127. getColumns.push({
  128. title : 'Fecha',
  129. dataKey: 'line_date',
  130. });
  131. getColumns.push({
  132. title : 'Comunicacion',
  133. dataKey: 'line_name'
  134. });
  135. getColumns.push({
  136. title : 'Referencia',
  137. dataKey: 'line_ref'
  138. });
  139. getColumns.push({
  140. title : 'Nombre',
  141. dataKey: 'line_partner_id'
  142. });
  143. getColumns.push({
  144. title : 'Egreso',
  145. dataKey: 'line_negative_amount'
  146. });
  147. getColumns.push({
  148. title : 'Ingreso',
  149. dataKey: 'line_positive_amount'
  150. });
  151. var rows = docItem;
  152. pdfDoc.autoTable(getColumns, rows, {
  153. styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'},
  154. columnStyles: {
  155. line_date : {columnWidth: '8px'},
  156. line_name : {columnWidth: '8px'},
  157. line_ref : {columnWidth: '8px'},
  158. line_partner_id : {columnWidth: '8px'},
  159. line_negative_amount : {columnWidth: '8px',halign:'right',fontStyle: 'bold'},
  160. line_positive_amount : {columnWidth: '8px',halign:'right',fontStyle: 'bold'},
  161. },
  162. // ,fillColor: [249, 61, 61],textColor:255
  163. margin: { top: 45, horizontal: 7},
  164. addPageContent: function (data) {
  165. pdfDoc.setFontSize(15);
  166. pdfDoc.setFontStyle('bold');
  167. pdfDoc.setTextColor(40);
  168. pdfDoc.text(80,10,'Resumen de caja');
  169. pdfDoc.setFontSize(10);
  170. pdfDoc.setFontStyle('normal');
  171. pdfDoc.setTextColor(40);
  172. pdfDoc.text('Numero de Registro: ' + doc[0].name, data.settings.margin.left, 20);
  173. pdfDoc.setFontSize(10);
  174. pdfDoc.setFontStyle('normal');
  175. pdfDoc.setTextColor(40);
  176. pdfDoc.text(120,20,'Metodo de Pago: ' + doc[0].journal_id);
  177. pdfDoc.setFontSize(10);
  178. pdfDoc.setFontStyle('normal');
  179. pdfDoc.setTextColor(40);
  180. pdfDoc.text('Fecha de apertura: ' + doc[0].date, data.settings.margin.left, 25);
  181. pdfDoc.setFontSize(10);
  182. pdfDoc.setFontStyle('normal');
  183. pdfDoc.setTextColor(40);
  184. pdfDoc.text(120,25,'Fecha de cierre: ' + doc[0].closing_date);
  185. pdfDoc.setFontSize(10);
  186. pdfDoc.setFontStyle('normal');
  187. pdfDoc.setTextColor(40);
  188. pdfDoc.text(7,30,'Responsable: ' + doc[0].user_id);
  189. pdfDoc.setFontSize(10);
  190. pdfDoc.setFontStyle('normal');
  191. pdfDoc.setTextColor(40);
  192. pdfDoc.text(120,30,'Empresa: ' + doc[0].company_id);
  193. pdfDoc.setFontSize(10);
  194. pdfDoc.setFontStyle('normal');
  195. pdfDoc.setTextColor(40);
  196. pdfDoc.text(7,35,'Saldo de apertura: ' + accounting.formatNumber(doc[0].balance_start,'0','.',','));
  197. pdfDoc.setFontSize(10);
  198. pdfDoc.setFontStyle('normal');
  199. pdfDoc.setTextColor(40);
  200. pdfDoc.text(120,35,'Saldo Final: ' + accounting.formatNumber(doc[0].balance_end,'0','.',','));
  201. // FOOTER
  202. var str = "Página " + data.pageCount;
  203. pdfDoc.setFontSize(9);
  204. pdfDoc.setFontStyle('bold');
  205. pdfDoc.setTextColor(40);
  206. pdfDoc.text(str, data.settings.margin.left, pdfDoc.internal.pageSize.height - 5);
  207. }
  208. });
  209. pdfDoc.save('Resumen de caja.pdf')
  210. },
  211. });
  212. if (instance.web && instance.web.FormView) {
  213. instance.web.FormView.include({
  214. load_form: function (record) {
  215. this._super.apply(this, arguments);
  216. if (this.model !== 'account.bank.statement') return;
  217. local.parentInstance = this;
  218. if (local.widgetInstance) {
  219. local.widgetInstance.updateId(record.id);
  220. }
  221. local.widgetInstance = new local.PrintStatementWidget(this);
  222. var elemento = this.$el.find('.oe_form_sheet.oe_form_sheet_width');
  223. elemento = elemento.find('.oe_right.oe_button_box.print_statement_box');
  224. local.widgetInstance.appendTo(elemento);
  225. local.widgetInstance.updateId(record.id);
  226. }
  227. });
  228. }
  229. }