function report_puchases (reporting){ "use strict"; var instance = openerp; reporting.AllPurchasesWidget = reporting.Base.extend({ template: 'AllPurchases', invoice: [], Currency:[], resCurrency :[], resCompany:[], accountJournal:[], supplier:[], newInvoice:[], rowsData :[], // event events:{ 'click #toolbar > button' : 'clickOnAction', 'change #current-journal' : 'factSearch', 'change #current-currency' : 'factSearch', 'change #from' : 'factSearch', 'change #to' : 'factSearch', 'click #volver_btn' : 'volver', 'click-row.bs.table #table ' : 'ckickAnalysisDetail', }, // Initil init : function(parent){ this._super(parent); }, // start start: function () { var self = this; var table = this.$el.find('#table'); table.bootstrapTable({data : self.rowsData}); this.fecthFecha(); this.submitForm(); }, // Analisis Detallado 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(); }, // volver volver: function(){ this.$el.find('#volver').empty(); this.$el.find('.bootstrap-table').show({ effect: 'drop', direction: 'down', duration: 200, }); }, // Consultar submitForm: function () { var self = this; self.fetchResCurency().then(function(resCurrency) { return resCurrency; }).then(function (resCurrency) { self.resCurrency = resCurrency; self.$el.find('#current-currency').append(''); _.each(resCurrency, function (item) { self.$el.find('#current-currency').append(''); }); return self.fetchCurency(resCurrency); }).then(function(Currency){ self.Currency = Currency; return self.fetchJournal(); }).then(function (journal) { self.accountJournal =journal; self.$el.find('#current-journal').append(''); _.each(journal, function (item) { self.$el.find('#current-journal').append(''); }); return self.fetchInvoiceP2(); }).then(function (invoice){ self.invoice = invoice; return self.fetchSupplier(invoice); }).then(function(supplier){ self.supplier=supplier; return self.fecthComanyCurrency(); }).then(function(resCompany){ self.resCompany = resCompany; self.inicializarBuscadorsup(); return self.fect_generar(self.invoice); }); }, // Fecha 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; } }, // Buscar Diario fetchJournal: function () { var self = this; var defer = $.Deferred(); var Journal = new instance.web.Model('account.journal'); Journal.query(['id', 'name']).filter([['type', '=', 'purchase']]).all().then(function(results){ defer.resolve(results); }); return defer; }, // Buscar Cambio de Monedas USD,PYG,ARG,BRL fetchCurency: function (currency) { var defer = $.Deferred(); var currency_id = _.flatten(_.map(currency,function(map){ return map.id; })) var currency_Rate = new instance.web.Model('res.currency.rate'); var fields = ['id', 'name', 'currency_id', 'rate', 'create_date']; var domain = [['currency_id', 'in', currency_id]]; currency_Rate.query(fields).filter(domain).all().then(function (results) { defer.resolve(results); }); return defer; }, // Moneda fetchResCurency: function () { var defer = $.Deferred(); var currency = new instance.web.Model('res.currency'); var fields = ['id', 'name']; var domain = [['active', '=', true]]; currency.query(fields).filter(domain).all().then(function (results) { defer.resolve(results); }); return defer; }, // Invoice (FACTURAS) fetchInvoiceP2: function () { var journal_ids = _.flatten(_.map(this.accountJournal, function (item) { return item.id; })); var filter =[['state', 'in',['open','paid']],['type', '=', 'in_invoice'],['origin', '!=', false],['journal_id', 'in',journal_ids]]; var field =['id', 'type', 'number', 'origin', 'state', 'journal_id', 'currency_id', 'supplier_invoice_number','date_invoice','partner_id','amount_total','user_id']; var defer = $.Deferred(); var Invoice = new instance.web.Model('account.invoice'); Invoice.query(field).filter(filter).all().then(function (results) { defer.resolve(results); }); return defer; }, // company_curency fecthComanyCurrency: function(){ var self = this; var defer = $.Deferred(); var currency = new instance.web.Model('res.company'); var field=['id', 'currency_id']; var domain=[['id','=',1]]; currency.query(field).filter(domain).all().then(function(results){ defer.resolve(results); }); return defer; }, // Partner (Proveeedor) fetchSupplier: function() { var self = this; var defer = $.Deferred(); var supplier = new instance.web.Model('res.partner'); supplier.query(['id', 'name', 'ruc', 'active', 'supplier']).filter([['active', '=', true], ['supplier', '=', true]]).all().then(function (results) { defer.resolve(results); }); return defer; }, // Obtener el Cambio de la Moneda getCurrency: function (id){ return _.find(this.Currency,function (curr) { return _.contains(curr.currency_id,id); }); }, // Verificar si los Valores no son nulos valorNull:function(dato){ var valor =""; if (dato){ valor=dato; } return valor; }, // Buscador inicializarBuscadorsup: function () { var self = this; var results = self.supplier; 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.$('#customer').autocomplete({ source: results, minLength:0, search: function(event, ui) { if (!(self.$('#customer').val())){ self.factSearch(); } }, close: function( event, ui ) { self.factSearch(); }, select: function(event, ui) { self.factSearch(); } }); }, // unir los objetos fect_generar: function(invoices){ var self = this; var data = []; _.each(invoices, function(invoice){ data.push({ id : invoice.id, number: invoice.number, supplier_invoice_number: self.valorNull(invoice.supplier_invoice_number), partner: invoice.partner_id[1], date: moment(invoice.date_invoice).format("DD/MM/YYYY"), date_invoice: invoice.date_invoice, user: invoice.user_id[1], currency: invoice.currency_id[1], amount_total: accounting.formatNumber(invoice.amount_total,2,".",","), amount: invoice.amount_total, journal_id : invoice.journal_id[0], currency_id : invoice.currency_id[0], partner_id : invoice.partner_id[0], origin: invoice.origin }); }); self.newInvoice = data; this.loadTable(data); }, // Buscar factSearch: function(){ var self = this; var desde =this.$el.find('#from').val(); var hasta =this.$el.find('#to').val(); var suc =this.$el.find('#current-journal').val(); var currency =this.$el.find('#current-currency').val(); var prov= this.$el.find('#customer').val().split('-'); var newInvoice = self.newInvoice; // Buscar por Sucursales if (suc != 9999999){ newInvoice=_.filter(newInvoice, function (inv){ return inv.journal_id == suc; }); } // Buscar por fecha Desde if (desde.length > 0){ var date= desde.split('/'); newInvoice = _.filter(newInvoice, function (inv){ return inv.date_invoice >= (date[2]+"-"+date[1]+"-"+date[0]); }); } // Buscar por Fechas Hasta if (hasta.length > 0){ var date= hasta.split('/'); newInvoice = _.filter(newInvoice, function (inv){ return inv.date_invoice <= (date[2]+"-"+date[1]+"-"+date[0]); }); } // Busacar por moneda if(currency != 9999999){ newInvoice = _.filter(newInvoice,function(inv){ return inv.currency_id == currency; }); } // Buscar por proveedor if (prov != ""){ newInvoice = _.filter(newInvoice, function(inv){ return inv.partner_id == prov[0]; }); } self.loadTable(newInvoice) }, // cargara la tabla loadTable:function(rowsTable){ var self = this; self.rowsData = rowsTable; var table = this.$el.find('#table'); table.bootstrapTable('load',rowsTable); }, // Obtener Invoice por Monedad getInvoice : function(currency_id){ var self = this; return _.filter(self.rowsData, function(item){ return item.currency_id === currency_id; }); }, // Crear Objete PDF getObjetPdf: function(rowsTable){ var self = this; var rowsPdf=[]; var rows=[]; var itemCurrecy; var itenRow; var item; var curreRate; var amount_total=0; var amount=0; var company = _.map(self.resCompany,function(map){return map.currency_id[1]}); for (var i = 0; i < self.resCurrency.length; i++) { itemCurrecy = self.resCurrency[i]; itenRow = self.getInvoice(itemCurrecy.id); rowsPdf=[]; if (itenRow.length > 0){ rowsPdf.push({number: itemCurrecy.name, supplier_invoice_number: "", partner: "", date: "", date_invoice: "", user: "", currency: "", amount_total: "", journal_id : "", currency_id : "", partner_id : ""}); _.each(itenRow, function(item){ rowsPdf.push({ number: item.number, supplier_invoice_number: self.valorNull(item.supplier_invoice_number), partner: item.partner, date: moment(item.date_invoice).format("DD/MM/YYYY"), date_invoice: item.date_invoice, user: item.user, currency: item.currency, amount_total: accounting.formatNumber((item.amount),2,".",","), amount: item.amount, journal_id : item.journal_id, currency_id : item.currency_id, partner_id : item.partner_id }); }); curreRate = self.getCurrency(itemCurrecy.id); if (!curreRate){ curreRate={}; curreRate.rate=1; } amount_total= _.reduce(_.map(itenRow,function(map){ return(map.amount); }),function(memo, num){ return memo + num; },0); amount = amount+(amount_total/curreRate.rate); rowsPdf.push({ number: "Sub - Total "+itemCurrecy.name, supplier_invoice_number: "", partner: "", date: "", date_invoice: "", user: "", currency: "", amount_total: accounting.formatNumber((amount_total),2,".",","), journal_id : "", currency_id : "", partner_id : "" }); } if (rowsPdf.length >0){ rows = rows.concat(rowsPdf); } } if (rows.length > 0){ rows.push({ number: "Total en "+company, supplier_invoice_number: "", partner: "", date: "", date_invoice: "", user: "", currency: "", amount_total: accounting.formatNumber((amount),2,".",","), journal_id : "", currency_id : "", partner_id : "" }); } return rows; }, // imprimir PDF 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); } }, // Generar pdfDoc drawPDF: function (getColumns,rows) { var self = this; var sucusal = this.sucDescrip = this.$el.find('#current-journal option:selected').text(); 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'}, supplier_invoice_number : {columnWidth: '8px'}, partner : {columnWidth: '8px'}, date : {columnWidth: '8px'}, user : {columnWidth: '8px'}, currency : {columnWidth: '8px'}, amount_total: {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 compras de '+ sucusal, 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 compras.pdf') }, }); }