|
@@ -0,0 +1,282 @@
|
|
|
+function widget_balance(widget) {
|
|
|
+ "use strict";
|
|
|
+
|
|
|
+ var model = openerp;
|
|
|
+
|
|
|
+ widget.WidgetBalanceWidget = widget.Base.extend({
|
|
|
+ template: 'WidgetBalance',
|
|
|
+
|
|
|
+ events: {
|
|
|
+ 'click .today': 'showToday',
|
|
|
+ 'click .thisWeek': 'showThisWeek',
|
|
|
+ 'click .thisMonth': 'showThisMonth',
|
|
|
+ },
|
|
|
+
|
|
|
+ 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.fetchAccountInvoice().then(function (AccountInvoice) {
|
|
|
+ return AccountInvoice;
|
|
|
+ }).then(function (AccountInvoice) {
|
|
|
+ self.AccountInvoice = AccountInvoice;
|
|
|
+ return self.fetchPosOrder();
|
|
|
+ }).then(function(PosOrder) {
|
|
|
+ self.PosOrder = PosOrder;
|
|
|
+ return self.fetchResCompany();
|
|
|
+ }).then(function(ResCompany) {
|
|
|
+ self.ResCompany = ResCompany;
|
|
|
+ return self.fetchResCurrecy();
|
|
|
+ }).then(function(ResCurrecy) {
|
|
|
+ self.ResCurrecy = ResCurrecy;
|
|
|
+ return self.showThisMonth();
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ fetchCurrentUser: function() {
|
|
|
+ var self = this;
|
|
|
+ var ResUser = new model.web.Model('res.users');
|
|
|
+ return ResUser.call('get_user', {
|
|
|
+ context: new model.web.CompoundContext()
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ fetchResUser: function(id) {
|
|
|
+ var self = this;
|
|
|
+ var defer = $.Deferred();
|
|
|
+ var fields = ['id','name','chart_ids'];
|
|
|
+ var domain = [['id','=',id]];
|
|
|
+ var ResUser = new model.web.Model('res.users');
|
|
|
+ ResUser.query(fields).filter(domain).all().then(function (results) {
|
|
|
+ defer.resolve(results);
|
|
|
+ });
|
|
|
+
|
|
|
+ return defer;
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ fetchChartList: function(chart_ids) {
|
|
|
+ var self = this;
|
|
|
+ var defer = $.Deferred();
|
|
|
+ var fields = ['id','name'];
|
|
|
+ var domain = [['id','in',chart_ids]];
|
|
|
+ var ChartList = new model.web.Model('chart.list');
|
|
|
+ ChartList.query(fields).filter(domain).all().then(function (results) {
|
|
|
+ defer.resolve(results);
|
|
|
+ });
|
|
|
+ return defer;
|
|
|
+ },
|
|
|
+
|
|
|
+ fetchAccountInvoice: function() {
|
|
|
+ var self = this;
|
|
|
+ var defer = $.Deferred();
|
|
|
+ var fields = ['id', 'name', 'date_invoice', 'amount_total'];
|
|
|
+ var domain = [['state', 'not in', ['draft','cancel']],['type','=','in_invoice']];
|
|
|
+ var AccountInvoice = new model.web.Model('account.invoice');
|
|
|
+ AccountInvoice.query(fields).filter(domain).all().then(function(results) {
|
|
|
+ defer.resolve(results);
|
|
|
+ });
|
|
|
+
|
|
|
+ return defer;
|
|
|
+ },
|
|
|
+
|
|
|
+ fetchPosOrder: function() {
|
|
|
+ var self = this;
|
|
|
+ var defer = $.Deferred();
|
|
|
+ var fields = ['id', 'name', 'date_order', 'amount_total'];
|
|
|
+ var domain = [['state', 'not in', ['draft','cancel']]];
|
|
|
+ var PosOrder = new model.web.Model('pos.order');
|
|
|
+ PosOrder.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', '=', 1]];
|
|
|
+ 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;
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ getTodayAccountInvoice:function() {
|
|
|
+ var self = this;
|
|
|
+ var date = moment().format('YYYY-MM-DD');
|
|
|
+ return _.flatten(_.filter(self.AccountInvoice,function (inv) {
|
|
|
+ return moment(inv.date_invoice).format('YYYY-MM-DD') === date;
|
|
|
+ }));
|
|
|
+ },
|
|
|
+
|
|
|
+ getThisWeekAccountInvoice:function() {
|
|
|
+ var self = this;
|
|
|
+ var week = moment().week();
|
|
|
+ return _.flatten(_.filter(self.AccountInvoice,function (inv) {
|
|
|
+ return moment(inv.date_invoice).week() === week & moment(inv.date_invoice).format('YYYY')=== moment().format('YYYY');
|
|
|
+ }));
|
|
|
+ },
|
|
|
+
|
|
|
+ getThisMonthAccountInvoice:function() {
|
|
|
+ var self = this;
|
|
|
+ return _.flatten(_.filter(self.AccountInvoice,function (inv) {
|
|
|
+ return moment(inv.date_invoice).format('YYYY-MM')=== moment().format('YYYY-MM');
|
|
|
+ }));
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ getTodayPosOrder:function() {
|
|
|
+ var self = this;
|
|
|
+ var date = moment().format('YYYY-MM-DD');
|
|
|
+ return _.flatten(_.filter(self.PosOrder,function (inv) {
|
|
|
+ return moment(inv.date_order).format('YYYY-MM-DD') === date;
|
|
|
+ }));
|
|
|
+ },
|
|
|
+
|
|
|
+ getThisWeekPosOrder:function() {
|
|
|
+ var self = this;
|
|
|
+ var week = moment().week();
|
|
|
+ return _.flatten(_.filter(self.PosOrder,function (inv) {
|
|
|
+ return moment(inv.date_order).week() === week & moment(inv.date_order).format('YYYY')=== moment().format('YYYY');
|
|
|
+ }));
|
|
|
+ },
|
|
|
+
|
|
|
+ getThisMonthPosOrder:function() {
|
|
|
+ var self = this;
|
|
|
+ return _.flatten(_.filter(self.PosOrder,function (inv) {
|
|
|
+ return moment(inv.date_order).format('YYYY-MM')=== moment().format('YYYY-MM');
|
|
|
+ }));
|
|
|
+ },
|
|
|
+
|
|
|
+ showToday: function () {
|
|
|
+ var self = this;
|
|
|
+ var amount_order = 0;
|
|
|
+ var amount_invoice = 0;
|
|
|
+ var balance = 0;
|
|
|
+ var data = [];
|
|
|
+ var order = self.getTodayPosOrder();
|
|
|
+ var invoice = self.getTodayAccountInvoice();
|
|
|
+ var CurrencyBase = self.getResCurrency(self.ResCompany[0].currency_id[0]).shift();
|
|
|
+ if(order.length > 0){
|
|
|
+ amount_order = _.reduce(_.map(order, function (map) {
|
|
|
+ return map.amount_total;
|
|
|
+ }), function (memo, num) {
|
|
|
+ return memo + num;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if(invoice.length > 0){
|
|
|
+ amount_invoice = _.reduce(_.map(invoice, function (map) {
|
|
|
+ return map.amount_total;
|
|
|
+ }), function (memo, num) {
|
|
|
+ return memo + num;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ balance = amount_order - amount_invoice;
|
|
|
+ self.$el.find('.widget-content.widget-loading').css('display','none');
|
|
|
+ self.$el.find('.widget-content').find('a').text(accounting.formatMoney(balance, CurrencyBase.symbol, CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator))
|
|
|
+ },
|
|
|
+
|
|
|
+ showThisWeek: function () {
|
|
|
+ var self = this;
|
|
|
+ var amount_order = 0;
|
|
|
+ var amount_invoice = 0;
|
|
|
+ var balance = 0;
|
|
|
+ var data = [];
|
|
|
+ var order = self.getThisWeekPosOrder();
|
|
|
+ var invoice = self.getThisWeekAccountInvoice();
|
|
|
+ var CurrencyBase = self.getResCurrency(self.ResCompany[0].currency_id[0]).shift();
|
|
|
+ if(order.length > 0){
|
|
|
+ amount_order = _.reduce(_.map(order, function (map) {
|
|
|
+ return map.amount_total;
|
|
|
+ }), function (memo, num) {
|
|
|
+ return memo + num;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if(invoice.length > 0){
|
|
|
+ amount_invoice = _.reduce(_.map(invoice, function (map) {
|
|
|
+ return map.amount_total;
|
|
|
+ }), function (memo, num) {
|
|
|
+ return memo + num;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ balance = amount_order - amount_invoice;
|
|
|
+ self.$el.find('.widget-content.widget-loading').css('display','none');
|
|
|
+ self.$el.find('.widget-content').find('a').text(accounting.formatMoney(balance, CurrencyBase.symbol, CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator))
|
|
|
+ },
|
|
|
+
|
|
|
+ showThisMonth: function () {
|
|
|
+ var self = this;
|
|
|
+ var amount_order = 0;
|
|
|
+ var amount_invoice = 0;
|
|
|
+ var balance = 0;
|
|
|
+ var data = [];
|
|
|
+ var order = self.getThisMonthPosOrder();
|
|
|
+ var invoice = self.getThisMonthAccountInvoice();
|
|
|
+ var CurrencyBase = self.getResCurrency(self.ResCompany[0].currency_id[0]).shift();
|
|
|
+ if(order.length > 0){
|
|
|
+ amount_order = _.reduce(_.map(order, function (map) {
|
|
|
+ return map.amount_total;
|
|
|
+ }), function (memo, num) {
|
|
|
+ return memo + num;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if(invoice.length > 0){
|
|
|
+ amount_invoice = _.reduce(_.map(invoice, function (map) {
|
|
|
+ return map.amount_total;
|
|
|
+ }), function (memo, num) {
|
|
|
+ return memo + num;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ balance = amount_order - amount_invoice;
|
|
|
+ self.$el.find('.widget-content.widget-loading').css('display','none');
|
|
|
+ self.$el.find('.widget-content').find('a').text(accounting.formatMoney(balance, CurrencyBase.symbol, CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator))
|
|
|
+ },
|
|
|
+ });
|
|
|
+}
|