function monthly_purchases(widget) { "use strict"; var model= openerp; widget.MonthlyPurchasesWidget = widget.Base.extend({ template: 'MonthlyPurchases', accountVoucher:[], accountInvoice:[], currencyRate :[], resCompany:[], events: { 'click a': 'showCustomers', 'click h2': 'showCustomers', }, init: function (parent) { this._super(parent, { width : 3, height: 2 }); }, start: function () { var self = this; self.fetchInitial(); }, fetchInitial: function(){ var self = this; self.$el.find('#morosidad').block({ message: null, overlayCSS: { backgroundColor: '#FAFAFA' } }); self.$el.find('.widget-content.widget-loading').css('display','flex'); self.fetchAccountVoucher().then(function (accountVoucher) { return accountVoucher; }).then(function (accountVoucher) { self.accountVoucher = accountVoucher; return self.fetchAccountInvoice(accountVoucher); }).then(function(accountInvoice){ self.accountInvoice = accountInvoice; return self.fetchCurrency(); }).then(function(currencyRate){ self.currencyRate = currencyRate; return self.fetchResCompany(); }).then(function(resCompany){ self.resCompany = resCompany; return self.fetchResCurrecy(resCompany); }).then(function(resCurrecy){ self.resCurrecy = resCurrecy; return self.fetchReduceVoucher(); }); }, // Account Voucher Pagos a facturas Proveedores fetchAccountVoucher: function(){ var self = this; var defer = $.Deferred(); var desde =moment().format('YYYY-MM-01'); var hasta =moment().add(1,'months').format('YYYY-MM-01'); var fields = ['id', 'amount', 'currency_id', 'payment_rate_currency_id', 'reference']; var domain= [['type', '=', 'payment'],['state', '=', 'posted'],['date', '>=',desde],['date','<',hasta]]; var accountVoucher = new model.web.Model('account.voucher'); accountVoucher.query(fields).filter(domain).all().then(function(results){ defer.resolve(results); }); return defer; }, // invoice fetchAccountInvoice:function(voucher){ var self = this; var defer = $.Deferred(); var number = _.map(voucher,function(map){return map.reference}); var fields = ['id','number','date_invoice','origin']; var domain = [['type', '=', 'in_invoice'],['origin', '!=', false ],['number', 'in', number]]; var accountInvoice= new model.web.Model('account.invoice'); accountInvoice.query(fields).filter(domain).all().then(function(results){ defer.resolve(results); }); return defer; }, fetchCurrency: function () { var defer = $.Deferred(); var currency_Rate = new model.web.Model('res.currency.rate'); var fields = ['id', 'name', 'currency_id', 'rate', 'create_date']; var domain = [['currency_id', 'in', [166 , 20, 7, 3]]]; currency_Rate.query(fields).filter(domain).all().then(function (results) { defer.resolve(results); }); return defer; }, //Comapnia fetchResCompany: function(){ var self = this; var defer = $.Deferred(); var fields =['id','name', 'currency_id', 'logo']; var domain =[['id', '=', 1]]; var resCompany = new model.web.Model('res.company'); resCompany.query(fields).filter(domain).all().then(function (results) { defer.resolve(results); }); return defer; }, // Res currecy fetchResCurrecy : function(company){ var self = this; var defer = $.Deferred(); var id_curency = _.flatten(_.map(company,function(map){ return map.currency_id[0]; })); var fields =['id','name', 'symbol']; var domain =[['id','in',id_curency]]; var resCurrecy = new model.web.Model('res.currency'); resCurrecy.query(fields).filter(domain).all().then(function(results){ defer.resolve(results); }); return defer; }, fetchReduceVoucher: function () { var self = this; var newVoucher; var voucher=[]; var cat = 0; var itemVoucher; var itemCurrencyRate; var company; var moneda = self.resCurrecy.shift(); newVoucher = self.getVoucherInvoice(); for (var i = 0; i < newVoucher.length; i++) { itemVoucher = newVoucher[i]; itemCurrencyRate = self.getCutrrencyRate(itemVoucher.payment_rate_currency_id[0]); if(!itemCurrencyRate){ itemCurrencyRate={}; itemCurrencyRate.rate=1; } voucher.push({ ammount : itemVoucher.amount, amount_rate :(itemVoucher.amount/itemCurrencyRate.rate) }); } if (voucher.length >0){ cat = _.reduce(_.map(voucher, function (map) { return map.amount_rate; }), function (memo, num) { return memo + num; }); } company = _.map(self.resCompany, function (map) { return map.currency_id[1]; }); if (moneda.id != 166){ cat = accounting.formatNumber(cat,2, ".", ","); }else{ cat = accounting.formatNumber(cat, ",", "."); } self.$el.find('.widget-content.widget-loading').css('display','none'); self.$el.find('.widget-content').find('a').text(cat).append(' '+moneda.symbol+''); // self.$el.find('.widget-footer').find('span').text("Monto en "+ company); self.$el.find('#morosidad').unblock(); }, getCutrrencyRate: function (currency_id) { var self = this; return _.filter(self.currencyRate,function (item) { return item.currency_id[0] == currency_id }).shift(); }, getVoucherInvoice:function(){ var self = this; var number = _.map(self.accountInvoice, function(map){ return map.number; }); return _.flatten(_.filter(self.accountVoucher,function(item){ return _.contains(number,item.reference); })); }, showCustomers: function (e) { var self = this; var hoy =moment().format('YYYY-MM-DD'); var desde =moment().format('YYYY-MM-01'); var hasta =moment().add(1,'months').format('YYYY-MM-01'); var number = _.map(self.accountInvoice,function(map){return map.number}); this.do_action({ name:"Listado de compras del mes", type: 'ir.actions.act_window', res_model: "account.voucher", views: [[false, 'list'],[false,'form']], target: 'new', domain: [['type', '=', 'payment'],['state', '=', 'posted'],['date', '>=',desde],['date','<',hasta],['reference','in',number]], context: {}, flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}}, }); } }); }