openerp.account_bank_statement_print = function (instance, local) { local.widgetInstance = null; local.parentInstance = null; local.PrintStatementWidget = instance.Widget.extend({ template : "account_bank_statement_print.PrintStatement", resStatement:[], jsonDoc:[], // Init init:function(parent){ this._super(parent); }, updateId : function(id){ var self = this; self.id=id; }, start: function () { var self = this; this.$el.click(function (e) { self.fecthInitial(); }); }, fecthInitial: function(){ var id= openerp.webclient._current_state.id; var self = this; self.fecthStatement(id).then(function(statement){ return statement; }).then(function(statement){ self.resStatement = statement; return self.fetchStatementLine(); }).then(function(statementLine){ self.resStatementLine = statementLine; return self.drawPDF(); }); return false; }, // Consultar Statement fecthStatement: function(id){ var defer = $.Deferred(); var fields=['id','name','journal_id','user_id','date','balance_start','total_entry_encoding','balance_end','company_id','closing_date']; var domain=[['id','=', id]]; var Statement = new instance.web.Model('account.bank.statement'); Statement.query(fields).filter(domain).order_by('id').all().then(function(results){ defer.resolve(results); }); return defer; }, // Consultar Statement Line fetchStatementLine: function () { var self = this; var defer = $.Deferred(); var statement_id = _.flatten(_.map(self.resStatement,function(map){ return map.id; })); var fields=['id','partner_id','statement_id','name','ref', 'amount','date']; var domain=[['statement_id','=', statement_id]]; var StatementLine = new instance.web.Model('account.bank.statement.line'); StatementLine.query(fields).filter(domain).order_by('id').all().then(function(results){ defer.resolve(results); }); return defer; }, valorNull:function(dato){ var valor =""; if (dato){ if(dato == true && typeof dato == 'boolean'){ valor=" "; }else{ valor=dato; } } return valor; }, // Generar el PDF drawPDF:function(){ var self = this; var doc=[]; var docItem=[]; var getColumns=[]; var cabecera=['Fecha','Comunicacion','Referencia','Socio','Importe'] var pdfDoc = new jsPDF(); var resStatement = self.resStatement; var resStatementLine = self.resStatementLine; var positive; var negative; var total_ingreso=0; var total_egreso=0; for (var i = 0; i < resStatementLine.length; i++) { if(resStatement[0].id = resStatementLine[i].id){ if(resStatementLine[i].amount>0){ positive = accounting.formatNumber(resStatementLine[i].amount,'0','.',','); total_ingreso+=resStatementLine[i].amount; negative = 0; }else{ negative = accounting.formatNumber(resStatementLine[i].amount*-1,'0','.',','); positive = 0; total_egreso+=resStatementLine[i].amount; } docItem.push({ line_date : moment(resStatementLine[i].date).format("DD/MM/YYYY"), line_name : resStatementLine[i].name, line_ref : self.valorNull(resStatementLine[i].ref), line_partner_id : resStatementLine[i].partner_id[1], line_negative_amount : negative, line_positive_amount : positive }) } } docItem.push({ line_date : '', line_name : 'Totales', line_ref : '', line_partner_id : '', line_negative_amount : accounting.formatNumber(total_egreso*-1,'0','.',','), line_positive_amount : accounting.formatNumber(total_ingreso,'0','.',',') }); doc.push({ name : resStatement[0].name, journal_id : resStatement[0].journal_id[1], date : moment(resStatement[0].date).format("DD/MM/YYYY"), closing_date : moment(resStatement[0].closing_date).format("DD/MM/YYYY"), user_id : resStatement[0].user_id[1], balance_start : accounting.formatNumber(resStatement[0].balance_start,'0','.',','), total_entry_encoding : accounting.formatNumber(resStatement[0].total_entry_encoding,'0','.',','), balance_end : resStatement[0].balance_end, company_id : resStatement[0].company_id[1], }); getColumns.push({ title : 'Fecha', dataKey: 'line_date', }); getColumns.push({ title : 'Comunicacion', dataKey: 'line_name' }); getColumns.push({ title : 'Referencia', dataKey: 'line_ref' }); getColumns.push({ title : 'Nombre', dataKey: 'line_partner_id' }); getColumns.push({ title : 'Egreso', dataKey: 'line_negative_amount' }); getColumns.push({ title : 'Ingreso', dataKey: 'line_positive_amount' }); var rows = docItem; pdfDoc.autoTable(getColumns, rows, { styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'}, columnStyles: { line_date : {columnWidth: '8px'}, line_name : {columnWidth: '8px'}, line_ref : {columnWidth: '8px'}, line_partner_id : {columnWidth: '8px'}, line_negative_amount : {columnWidth: '8px',halign:'right',fontStyle: 'bold'}, line_positive_amount : {columnWidth: '8px',halign:'right',fontStyle: 'bold'}, }, // ,fillColor: [249, 61, 61],textColor:255 margin: { top: 45, horizontal: 7}, addPageContent: function (data) { pdfDoc.setFontSize(15); pdfDoc.setFontStyle('bold'); pdfDoc.setTextColor(40); pdfDoc.text(80,10,'Resumen de caja'); pdfDoc.setFontSize(10); pdfDoc.setFontStyle('normal'); pdfDoc.setTextColor(40); pdfDoc.text('Numero de Registro: ' + doc[0].name, data.settings.margin.left, 20); pdfDoc.setFontSize(10); pdfDoc.setFontStyle('normal'); pdfDoc.setTextColor(40); pdfDoc.text(120,20,'Metodo de Pago: ' + doc[0].journal_id); pdfDoc.setFontSize(10); pdfDoc.setFontStyle('normal'); pdfDoc.setTextColor(40); pdfDoc.text('Fecha de apertura: ' + doc[0].date, data.settings.margin.left, 25); pdfDoc.setFontSize(10); pdfDoc.setFontStyle('normal'); pdfDoc.setTextColor(40); pdfDoc.text(120,25,'Fecha de cierre: ' + doc[0].closing_date); pdfDoc.setFontSize(10); pdfDoc.setFontStyle('normal'); pdfDoc.setTextColor(40); pdfDoc.text(7,30,'Responsable: ' + doc[0].user_id); pdfDoc.setFontSize(10); pdfDoc.setFontStyle('normal'); pdfDoc.setTextColor(40); pdfDoc.text(120,30,'Empresa: ' + doc[0].company_id); pdfDoc.setFontSize(10); pdfDoc.setFontStyle('normal'); pdfDoc.setTextColor(40); pdfDoc.text(7,35,'Saldo de apertura: ' + accounting.formatNumber(doc[0].balance_start,'0','.',',')); pdfDoc.setFontSize(10); pdfDoc.setFontStyle('normal'); pdfDoc.setTextColor(40); pdfDoc.text(120,35,'Saldo Final: ' + accounting.formatNumber(doc[0].balance_end,'0','.',',')); // FOOTER var str = "Página " + data.pageCount; pdfDoc.setFontSize(9); pdfDoc.setFontStyle('bold'); pdfDoc.setTextColor(40); pdfDoc.text(str, data.settings.margin.left, pdfDoc.internal.pageSize.height - 5); } }); pdfDoc.save('Resumen de caja.pdf') }, }); if (instance.web && instance.web.FormView) { instance.web.FormView.include({ load_form: function (record) { this._super.apply(this, arguments); if (this.model !== 'account.bank.statement') return; local.parentInstance = this; if (local.widgetInstance) { local.widgetInstance.updateId(record.id); } local.widgetInstance = new local.PrintStatementWidget(this); var elemento = this.$el.find('.oe_form_sheet.oe_form_sheet_width'); elemento = elemento.find('.oe_right.oe_button_box.print_statement_box'); local.widgetInstance.appendTo(elemento); local.widgetInstance.updateId(record.id); } }); } }