function report_vouchers (reporting){ "use strict"; var instance = openerp; reporting.ReportVoucherWidget = reporting.Base.extend({ template: 'ReportVoucher', AccountVoucher: [], content:[], rowsData :[], events:{ 'click #toolbar > button' : 'clickOnAction', 'click #X' : 'factSearch', 'click #A' : 'factSearch', 'click #B' : 'factSearch', 'click #C' : 'factSearch', 'click #D' : 'factSearch', 'click #Z' : 'factSearch', 'click #Y' : 'factSearch', 'click #customer' : 'factSearch', 'click #supplier' : 'factSearch', 'change #current-journal' : 'factSearch', 'change #from' : 'factSearch', 'change #to' : 'factSearch', 'click-row.bs.table #table ' : 'clickAnalysisDetail', }, init : function(parent){ this._super(parent); }, start: function () { var self = this; var table = this.$el.find('#table'); table.bootstrapTable({data : self.rowsData}); this.fecthFecha(); this.submitForm(); }, valorNull:function(dato){ var valor =""; if (dato){ valor=dato; } return valor; }, clickAnalysisDetail: function(e, row, $element, field){ if (field == 'reference'){ this.do_action({ name:"Factura", type: 'ir.actions.act_window', res_model: "account.invoice", views: [[false,'form']], target: 'new', domain: [['id','=', row.invoice_id]], context: {}, flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}}, res_id: row.invoice_id, }); } if (field === 'partner'){ this.do_action({ name:"Registro", type: 'ir.actions.act_window', res_model: "res.partner", views: [[false,'form']], target: 'new', domain: [['id','=', row.partner_id]], context: {}, flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}}, res_id: row.partner_id, }); } e.stopImmediatePropagation(); }, submitForm: function () { var self = this; self.fetchAccountVoucher().then(function(AccountVoucher) { return AccountVoucher; }).then(function (AccountVoucher) { self.AccountVoucher = AccountVoucher; return self.fetchResPartner(); }).then(function(ResPartner){ self.ResPartner = ResPartner; return self.fetchAccountInvoice(); }).then(function(AccountInvoice){ self.AccountInvoice = AccountInvoice; return self.fetchAccountJournal(); }).then(function (AccountJournal) { self.AccountJournal =AccountJournal; self.$el.find('#current-journal').append(''); _.each(AccountJournal, function (item) { self.$el.find('#current-journal').append(''); }); self.search(); return self.BuildTable(); }); }, fecthFecha: function() { var to; var dateFormat1 = "mm/dd/yy", from = $( "#from" ) .datepicker({ dateFormat: "dd/mm/yy", changeMonth: true, numberOfMonths: 1, }) .on( "change", function() { to.datepicker( "option", "minDate", getDate(this), "dd/mm/yyyy"); }); to = $( "#to" ).datepicker({ dateFormat: "dd/mm/yy", defaultDate: "+7d", changeMonth: true, numberOfMonths: 1, }) .on( "change", function() { from.datepicker( "option", "maxDate", getDate(this)); }); function getDate( element ) { var fechaSel =element.value.split('/'); var date; try { date = $.datepicker.parseDate( dateFormat1, (fechaSel[1]+"/"+fechaSel[0]+"/"+fechaSel[2])); } catch( error ) { date = null; } return date; } }, fetchAccountVoucher: function () { var self = this; var defer = $.Deferred(); var AccountVoucher = new instance.web.Model('account.voucher'); AccountVoucher.query(['id', 'number','reference','partner_id','journal_id','amount','date','number','type']).filter([['state', '=', 'posted']]).all().then(function(results){ defer.resolve(results); }); return defer; }, fetchResPartner: function () { var self = this; var defer = $.Deferred(); var ResPartner = new instance.web.Model('res.partner'); ResPartner.query(['id','name','ruc']).filter([['active', '=', true]]).all().then(function(results){ defer.resolve(results); }); return defer; }, fetchAccountInvoice: function () { var self = this; var defer = $.Deferred(); var AccountInvoice = new instance.web.Model('account.invoice'); AccountInvoice.query(['id','number']).filter([['state', 'in', ['open','paid']]]).all().then(function(results){ defer.resolve(results); }); return defer; }, fetchAccountJournal: function () { var self = this; var defer = $.Deferred(); var AccountJournal = new instance.web.Model('account.journal'); AccountJournal.query(['id','name']).filter([['active','=',true],['type', 'in', ['bank','cash']]]).all().then(function(results){ defer.resolve(results); }); return defer; }, getAccountInvoice: function (number) { var self = this; return _.filter(self.AccountInvoice,function (item) { return item.number == number; }); }, search: function () { var self = this; var results = self.ResPartner; results = _.map(results, function (item) { return { label: item.id + '-'+ item.name + ' ' + self.valorNull(item.ruc), value: item.id + '-'+ item.name + ' ' + self.valorNull(item.ruc) } }); self.$('#partner').autocomplete({ source: results, minLength:0, search: function(event, ui) { if (!(self.$('#partner').val())){ self.factSearch(); } }, close: function( event, ui ) { self.factSearch(); }, select: function(event, ui) { self.factSearch(); } }); }, BuildTable: function(){ var self = this; var AccountVoucher = self.AccountVoucher; var invoice; var amount_in; var amount_out; var data = []; _.each(AccountVoucher, function(item){ invoice = self.getAccountInvoice(item.reference).shift(); if (item.type == 'payment') { amount_in = 0; amount_out = item.amount; }else{ amount_in = item.amount; amount_out = 0; } data.push({ id : item.id, reference: item.reference, number: item.number, journal: item.journal_id[1], date_voucher: moment(item.date).format("DD/MM/YYYY"), partner: item.partner_id[1], amount_in: accounting.formatNumber(amount_in,2,".",","), amount_out: accounting.formatNumber(amount_out,2,".",","), type: item.type, date: item.date, journal_id: item.journal_id[0], partner_id: item.partner_id[0], invoice_id: invoice.id, in_amount:amount_in, out_amount:amount_out }); }); self.content = data; this.loadTable(data); }, factSearch: function(){ var self = this; var hoy = moment().format('YYYY-MM-DD'); var journal = this.$el.find('#current-journal').val(); var desde = this.$el.find('#from').val(); var hasta = this.$el.find('#to').val(); var partner= this.$el.find('#partner').val().split('-'); var content = self.content; if ($('#A').is(":checked")){ content = _.filter(content, function (inv){ return inv.date == hoy; }); } if ($('#B').is(":checked")){ var date = hoy.split('-'); var ayer = date[2] - 1; date.splice(2,0); if(date[2] < 10){ date[2] = '0'+ayer; }else{ date[2] = ayer; } content = _.filter(content, function (inv){ return inv.date == date[0]+'-'+date[1]+'-'+date[2]; }); } if ($('#C').is(":checked")){ var date = hoy.split('-'); content = _.filter(content, function (inv){ var mes = inv.date.split('-'); return mes[0]+'-'+mes[1] == date[0]+'-'+date[1]; }); } if ($('#D').is(":checked")){ var date = hoy.split('-'); var mes = date[1] - 1; var year; date.splice(1,0); if(date[1] == 1){ date[1] = '12'; year = date[0] - 1; date[0] = year; }else{ if(date[1] < 10){ date[1] = '0'+mes; }else{ date[1] = mes; } } content = _.filter(content, function (inv){ var mes = inv.date.split('-'); return mes[0]+'-'+mes[1] == date[0]+'-'+date[1]; }); } if ($('#Z').is(":checked")){ $('#datepicker').css('display','block'); if (desde.length > 0){ var date= desde.split('/'); content = _.filter(content, function (inv){ return inv.date >= (date[2]+"-"+date[1]+"-"+date[0]); }); } if (hasta.length > 0){ var date= hasta.split('/'); content = _.filter(content, function (inv){ return inv.date <= (date[2]+"-"+date[1]+"-"+date[0]); }); } }else{ $('#datepicker').css('display','none'); } if ($('#customer').is(":checked")){ content = _.filter(content, function (inv){ return inv.type == 'receipt'; }); } if ($('#supplier').is(":checked")){ content = _.filter(content, function (inv){ return inv.type == 'payment'; }); } if(journal != 9999999){ content = _.filter(content,function(inv){ return inv.journal_id == journal; }); } if (partner != ""){ content = _.filter(content, function(inv){ return inv.partner_id == partner[0]; }); } var amount_in_amount = _.reduce(_.map(content,function(map){ return(map.in_amount); }),function(memo, num){ return memo + num; },0); var amount_out_amount = _.reduce(_.map(content,function(map){ return(map.out_amount); }),function(memo, num){ return memo + num; },0); content.push({ number: "Total", amount_in: accounting.formatNumber((amount_in_amount),0,".",","), amount_out: accounting.formatNumber((amount_out_amount),0,".",","), }); self.loadTable(content) }, loadTable:function(rowsTable){ var self = this; self.rowsData = rowsTable; var table = this.$el.find('#table'); table.bootstrapTable('load',rowsTable); }, getObjetPdf: function(rowsTable){ var self = this; var rowsPdf=[]; var rows=[]; var rows = self.rowsData; var total_in = _.reduce(_.map(rows,function(map){ return(map.in_amount); }),function(memo, num){ return memo + num; },0); var total_out = _.reduce(_.map(rows,function(map){ return(map.out_amount); }),function(memo, num){ return memo + num; },0); if (rows.length > 0){ rows.push({ reference: "Totales ", amount_in: accounting.formatNumber(total_in,2,".",","), amount_out: accounting.formatNumber(total_out,2,".",","), }); } return rows; }, clickOnAction: function (e) { var self = this; var rowsNew; var action = self.$el.find(e.target).val(); var table = self.$el.find("#table"); var data2 = table.bootstrapTable('getVisibleColumns'); var getColumns=[]; var rows=[]; rowsNew = self.getObjetPdf(); if (action === 'pdf') { var dataNEW = _.map(data2, function (val){ return val.field; }); _.each(rowsNew,function (item){ rows.push(_.pick(item, dataNEW)); }); // Obtener los nombre de la Cabezera _.each(_.map(data2,function(val){ return val; }), function(item){ getColumns.push([{ title: item.title, dataKey: item.field }]); }); this.drawPDF(_.flatten(getColumns),rows); } }, drawPDF: function (getColumns,rows) { var self = this; var desde =(this.$el.find('#from').val()); var hasta =(this.$el.find('#to').val()); var totalPagesExp = "{total_pages_count_string}"; var pdfDoc = new jsPDF(); pdfDoc.autoTable(getColumns, rows, { styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'}, columnStyles: { reference : {columnWidth: '10px'}, number : {columnWidth: '7px'}, journal_id : {columnWidth: '6px'}, date_voucher : {columnWidth: '6px'}, partner : {columnWidth: '8px'}, amount_in : {halign:'right',columnWidth: '8px'}, amount_out: {halign:'right',columnWidth: '8px'} }, margin: { top: 16, horizontal: 7}, addPageContent: function (data) { pdfDoc.setFontSize(12); pdfDoc.setFontStyle('bold'); pdfDoc.setTextColor(40); pdfDoc.text('Histórico de pagos ', data.settings.margin.left, 10); if(desde.length > 0 || hasta.length > 0){ var fecha=''; if(desde){ fecha=fecha.concat(' Desde '+desde); } if (hasta){ fecha=fecha.concat(' Hasta '+hasta); } pdfDoc.setFontSize(10); pdfDoc.setFontStyle('bold'); pdfDoc.setTextColor(40) pdfDoc.text(fecha, data.settings.margin.left,14); } // FOOTER var str = "Pagina " + data.pageCount; // Total page number plugin only available in jspdf v1.0+ if (typeof pdfDoc.putTotalPages === 'function') { str = str + " de " + totalPagesExp; } pdfDoc.setFontSize(9); pdfDoc.setFontStyle('bold'); pdfDoc.setTextColor(40); pdfDoc.text(str, data.settings.margin.left, pdfDoc.internal.pageSize.height - 5); } }); if (typeof pdfDoc.putTotalPages === 'function') { pdfDoc.putTotalPages(totalPagesExp); } pdfDoc.save('Histórico de pagos.pdf') }, }); }