function report_sales(reporting){ "use strict"; var instance = openerp; reporting.ReportSaleWidget = reporting.Base.extend({ template: 'ReportSale', 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', 'change #from' : 'factSearch', 'change #to' : 'factSearch', 'click-row.bs.table #table ' : 'ckickAnalysisDetail', }, 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(); }, ckickAnalysisDetail: function(e, row, $element, field){ if (field == 'number'){ this.do_action({ name:"Factura de proveedor", type: 'ir.actions.act_window', res_model: "account.invoice", views: [[false,'form']], target: 'new', domain: [['type', '=', 'in_invoice'],['id','=', row.id]], context: {}, flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}}, res_id: row.id, }); } e.stopImmediatePropagation(); }, submitForm: function () { var self = this; self.fetchAccountInvoice().then(function(AccountInvoice) { return AccountInvoice; }).then(function (AccountInvoice){ self.AccountInvoice = AccountInvoice; return self.fetchResPartner(); }).then(function(ResPartner){ self.ResPartner=ResPartner; 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; } }, fetchAccountInvoice: function () { var filter =[['state', 'in',['open','paid']],['type', '=', 'out_invoice']]; var field =['id', 'type', 'number', 'origin', 'state', 'journal_id', 'currency_id', 'supplier_invoice_number','date_invoice','partner_id','amount_total','user_id','residual']; var defer = $.Deferred(); var AccountInvoice = new instance.web.Model('account.invoice'); AccountInvoice.query(field).filter(filter).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], ['customer', '=', true]]).all().then(function (results) { defer.resolve(results); }); return defer; }, valorNull:function(dato){ var valor =""; if (dato){ valor=dato; } return valor; }, 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(invoices){ var self = this; var AccountInvoice = self.AccountInvoice; var data = []; _.each(AccountInvoice, function(item){ data.push({ id : item.id, number: item.number, origin: self.valorNull(item.origin), partner: item.partner_id[1], date_invoice: moment(item.date_invoice).format("DD/MM/YYYY"), amount_total: accounting.formatNumber(item.amount_total,2,".",","), residual: accounting.formatNumber(item.residual,2,".",","), date: item.date_invoice, partner_id : item.partner_id[0], amount : item.amount_total, total_residual : item.residual }); }); self.content = data; this.loadTable(data); }, factSearch: function(){ var self = this; var hoy = moment().format('YYYY-MM-DD'); 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); date[2] = '0'+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; date.splice(1,0); 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 (partner != ""){ content = _.filter(content, function(inv){ return inv.partner_id == partner[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 rows=self.rowsData; var amount = _.reduce(_.map(rows,function(map){ return(map.amount); }),function(memo, num){ return memo + num; },0); var total_residual = _.reduce(_.map(rows,function(map){ return(map.total_residual); }),function(memo, num){ return memo + num; },0); if (rows.length > 0){ rows.push({ number: "Total", amount_total: accounting.formatNumber((amount),2,".",","), residual: accounting.formatNumber((total_residual),2,".",","), }); } // console.log(rows); 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: { number : {columnWidth: '8px'}, origin : {columnWidth: '8px'}, partner : {columnWidth: '8px'}, date_invoice : {columnWidth: '8px'}, amount_total : {halign:'right',columnWidth: '8px'}, residual : {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 Ventas ', 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 ventas.pdf') }, }); }