function widget_cash(widget) { "use strict"; var model = openerp; widget.WidgetCashWidget = widget.Base.extend({ template: 'WidgetCash', events: {}, init: function (parent) { this._super(parent, { width: 3, height: 2 }); }, start: function () { var self = this; self.fetchInitial(); }, fetchInitial: function(){ var self = this; self.fetchResUser().then(function (ResUser) { return ResUser; }).then(function (ResUser) { self.ResUser = ResUser; return self.fetchAccountJournal(); }).then(function(AccountJournal) { self.AccountJournal = AccountJournal; return self.fetchAccountBankStatement(); }).then(function(AccountBankStatement) { self.AccountBankStatement = AccountBankStatement; return self.fetchResCompany(); }).then(function(ResCompany) { self.ResCompany = ResCompany; return self.fetchResCurrecy(); }).then(function(ResCurrecy) { self.ResCurrecy = ResCurrecy; return self.show(); }); }, fetchResUser: function() { var self = this; var defer = $.Deferred(); var fields = ['id','name','store_id']; var domain = [['id','=',self.session.uid]]; var ResUser = new model.web.Model('res.users'); ResUser.query(fields).filter(domain).all().then(function (results) { defer.resolve(results); }); return defer; }, fetchAccountJournal: function() { var self = this; var defer = $.Deferred(); var store_ids = self.ResUser[0].store_id[0]; var fields = ['id', 'name']; var domain = [['type', '=', 'cash'],['store_ids','in',store_ids]]; var AccountJournal = new model.web.Model('account.journal'); AccountJournal.query(fields).filter(domain).all().then(function(results) { defer.resolve(results); }); return defer; }, fetchAccountBankStatement: function() { var self = this; var defer = $.Deferred(); var journal_ids = _.flatten(_.map(self.AccountJournal, function (item) { return item.id; })); var fields = ['id', 'name', 'date', 'balance_end','currency']; var domain = [['state', 'in', ['open']],['journal_id','in',journal_ids]]; var AccountBankStatement = new model.web.Model('account.bank.statement'); AccountBankStatement.query(fields).filter(domain).all().then(function(results) { defer.resolve(results); }); return defer; }, fetchResCompany: function() { var self = this; var defer = $.Deferred(); var fields = ['id','name', 'currency_id']; var domain = [['id', '=', self.session.company_id]]; var ResCompany = new model.web.Model('res.company'); ResCompany.query(fields).filter(domain).all().then(function (results) { defer.resolve(results); }); return defer; }, fetchResCurrecy : function(){ var self = this; var defer = $.Deferred(); var fields = ['id','name', 'symbol', 'rate_silent', 'base', 'decimal_separator', 'decimal_places', 'thousands_separator', 'symbol_position']; var domain = [['active', '=', true]]; var ResCurrecy = new model.web.Model('res.currency'); ResCurrecy.query(fields).filter(domain).all().then(function(results) { defer.resolve(results); }); return defer; }, getResCurrency: function (id) { var self = this; return _.filter(self.ResCurrecy,function (item) { return item.id === id; }) }, show: function () { var self = this; var amount = 0; var data = []; var statement = self.AccountBankStatement; var CurrencyBase = self.getResCurrency(self.ResCompany[0].currency_id[0]).shift(); if(statement.length > 0){ var array = []; _.each(statement, function (item) { var currency = self.getResCurrency(item.currency[0]).shift(); array.push({ amount: item.balance_end * (CurrencyBase.rate_silent / currency.rate_silent), }) }); var invoice_total = 0; amount = _.reduce(_.map(array, function (map) { return map.amount; }), function (memo, num) { return memo + num; }); } self.$el.find('.widget-content').find('a').text(accounting.formatMoney(amount, CurrencyBase.symbol, CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator)) }, }); }