function widget_balance(widget) { "use strict"; var model = openerp; var Qweb = openerp.web.qweb; widget.WidgetBalance = widget.Base.extend({ template: 'WidgetBalance', ContentSale: [], ContentPurchase: [], ContentExpense: [], init: function (parent) { this._super(parent, { width: 12, height: 5 }); }, start: function () { var self = this; self.fetchInitial(); }, fetchInitial: function(){ var self = this; self.fetchDataSQL().then(function (DataSQL) { return DataSQL; }).then(function(DataSQL) { self.ResCompany = DataSQL.company; self.PosOrder = DataSQL.orders; self.AccountInvoice = DataSQL.invoices; self.HrPayslip = DataSQL.payslips; return self.showThisMonth(); }); }, fetchDataSQL: function() { var self = this; var data = $.get('/dashboard-Balance'); return data; }, getContentByDate:function(date, content) { var self = this; return _.flatten(_.filter(content,function (inv) { return moment(inv.date).format('YYYY-MM-DD') === date; })); }, showThisMonth: function () { var self = this; var ContentSale = []; var ContentPurchase = []; var ContentExpense = []; /* ============== VENTAS ============== */ _.each(self.PosOrder,function(item){ var utc = moment.utc(item.date,'YYYY-MM-DD h:mm:ss A'); ContentSale.push({ date: moment(utc._d).format('YYYY-MM-DD'), amount: item.amount, }); }); _.each(self.AccountInvoice,function(item){ if(item.type == "out_invoice" && item.origin.match(/SO/) != null){ ContentSale.push({ date: item.date, amount: item.amount, }); } if(item.type == "out_refund"){ ContentSale.push({ date: item.date, amount: item.amount * -1, }); } }); /* ============== COMPRAS ============== */ _.each(self.AccountInvoice,function(item){ var origin = item.origin; if(item.type == "in_invoice" && item.origin != null){ if(origin.match(/PO/) != null){ ContentPurchase.push({ date: item.date, amount: item.amount, }); } } }); /* ============== GASTOS ============== */ _.each(self.AccountInvoice,function(item){ var origin = item.origin; if(item.type == "in_invoice"){ if(origin == null){ ContentExpense.push({ date: item.date, amount: item.amount, }); }else{ if(origin != null){ if(origin.match(/PO/) == null){ ContentExpense.push({ date: item.date, amount: item.amount, }); } } } } }); /* ===================== RECURSOS HUMANOS ===================== */ var net = _.reduce(_.map(self.HrPayslip,function(item) { ContentExpense.push({ date: item.date, amount: item.net, }); return item.net; }),function(memo, num) { return memo + num; },0); var ipsc = _.reduce(_.map(self.HrPayslip,function(item) { if(item.code == 'IPSC' && item.ipsc != null){ ContentExpense.push({ date: item.date, amount: item.ipsc, }); return item.ipsc; }else{ return 0; } }),function(memo, num) { return memo + num; },0); var ipse = _.reduce(_.map(self.HrPayslip,function(item) { if(item.code == 'IPSE' && item.ipse != null){ ContentExpense.push({ date: item.date, amount: item.ipse * -1, }); return item.ipse * -1; }else{ return 0; } }),function(memo, num) { return memo + num; },0); self.ContentSale = ContentSale; self.ContentPurchase = ContentPurchase; self.ContentExpense = ContentExpense; self.BuildChartMonth(); }, /* ===================================================== BUILD CHART - MONTH ===================================================== */ BuildChartMonth: function(){ var self = this; var data = []; var CurrencyBase = self.ResCompany[0].currency_id; var label = []; var bodySale = []; var bodyPurchase = []; var bodyExpense = []; var name = '.month-dashboard-chart'; var date_start = moment().format('YYYY-MM-01'); var date_stop = moment().add(1,'months').format('YYYY-MM-01'); var date = date_start; var total, i; /* =================== VENTAS =================== */ for (i = 0; i < 32; i++) { total = 0; if(i > 0){ date = moment(date).add(1,'days').format('YYYY-MM-DD'); } if(date == date_stop){ break; } data = self.getContentByDate(date, self.ContentSale); if(data.length > 0){ total = _.reduce(_.map(data,function(item) { return item.amount; }),function(memo, num) { return memo + num; },0); } label.push(moment(date).format('DD')); bodySale.push(total); } /* =================== COMPRAS =================== */ date = date_start; for (i = 0; i < 32; i++) { total = 0; if(i > 0){ date = moment(date).add(1,'days').format('YYYY-MM-DD'); } if(date == date_stop){ break; } data = self.getContentByDate(date, self.ContentPurchase); if(data.length > 0){ total = _.reduce(_.map(data,function(item) { return item.amount; }),function(memo, num) { return memo + num; },0); } bodyPurchase.push(total); } /* =================== GASTOS =================== */ date = date_start; for (i = 0; i < 32; i++) { total = 0; if(i > 0){ date = moment(date).add(1,'days').format('YYYY-MM-DD'); } if(date == date_stop){ break; } data = self.getContentByDate(date, self.ContentExpense); if(data.length > 0){ total = _.reduce(_.map(data,function(item) { return item.amount; }),function(memo, num) { return memo + num; },0); } bodyExpense.push(total); } var chart = new widget.DashboardChartWidget(self); chart.BuildBalanceLineChart(name,label,bodySale,bodyPurchase,bodyExpense,CurrencyBase); }, }); }