chart_ingreso_egreso.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. function chart_ingreso_egreso (widget) {
  2. "use strict";
  3. var model = openerp;
  4. widget.ChartIngresoEgresoWidget = widget.Base.extend({
  5. template: 'ChartIngresoEgreso',
  6. data: [],
  7. events: {
  8. 'click .week': 'showWeeks',
  9. 'click .days': 'showDays',
  10. 'click .month': 'showMonths',
  11. },
  12. init: function (parent) {
  13. this._super(parent, {
  14. width: 6,
  15. height: 4
  16. });
  17. },
  18. start: function () {
  19. var self = this;
  20. self.fetchInitial();
  21. },
  22. fetchInitial:function() {
  23. var self = this;
  24. self.$el.block({
  25. message: null,
  26. overlayCSS: {
  27. backgroundColor: '#FAFAFA'
  28. }
  29. });
  30. self.$el.find('.widget-content.widget-loading').css('display','flex');
  31. self.fecthAccountBankStatementLine().then(function (AccountBankStatementLine) {
  32. return AccountBankStatementLine;
  33. }).then(function (AccountBankStatementLine) {
  34. self.AccountBankStatementLine = AccountBankStatementLine;
  35. return self.showMonths();
  36. });
  37. },
  38. fecthAccountBankStatementLine: function() {
  39. var self = this;
  40. var defer = $.Deferred();
  41. var fields = ['id','date','partner_id','amount'];
  42. // var domain = [['state','in',['paid','open']]];
  43. var AccountBankStatementLine = new model.web.Model('account.bank.statement.line');
  44. AccountBankStatementLine.query(fields).filter().all().then(function (results) {
  45. defer.resolve(results);
  46. });
  47. return defer;
  48. },
  49. // Obtener Lineas de caja por mes
  50. getInAccountBankStatementLine:function(mes) {
  51. var self = this;
  52. if (mes < 10){
  53. var fecha = moment().format('YYYY')+'-'+'0'+mes;
  54. }else{
  55. var fecha = moment().format('YYYY')+'-'+mes;
  56. }
  57. return _.flatten(_.filter(self.AccountBankStatementLine,function (inv) {
  58. return moment(inv.date).format('YYYY-MM') === fecha & inv.amount > 0;
  59. }));
  60. },
  61. getOutAccountBankStatementLine:function(mes) {
  62. var self = this;
  63. if (mes < 10){
  64. var fecha = moment().format('YYYY')+'-'+'0'+mes;
  65. }else{
  66. var fecha = moment().format('YYYY')+'-'+mes;
  67. }
  68. return _.flatten(_.filter(self.AccountBankStatementLine,function (inv) {
  69. return moment(inv.date).format('YYYY-MM') === fecha & inv.amount < 0;
  70. }));
  71. },
  72. // Obtener lineas de caja por esta semana
  73. getInWeekAccountBankStatementLine:function(day) {
  74. var self = this;
  75. var week = moment().week();
  76. return _.flatten(_.filter(self.AccountBankStatementLine,function (inv) {
  77. return moment(inv.date).week() === week & moment(inv.date).isoWeekday() === day & inv.amount > 0;
  78. }));
  79. },
  80. getOutWeekAccountBankStatementLine:function(day) {
  81. var self = this;
  82. var week = moment().week();
  83. return _.flatten(_.filter(self.AccountBankStatementLine,function (inv) {
  84. return moment(inv.date).week() === week & moment(inv.date).isoWeekday() === day & inv.amount < 0;
  85. }));
  86. },
  87. // Obtener lineas de caja por dias
  88. getInDaysAccountBankStatementLine:function(day) {
  89. var self = this;
  90. var date = moment().subtract(day, 'days').format('YYYY-MM-DD');
  91. return _.flatten(_.filter(self.AccountBankStatementLine,function (inv) {
  92. return moment(inv.date).format('YYYY-MM-DD') === date & inv.amount > 0;
  93. }));
  94. },
  95. getOutDaysAccountBankStatementLine:function(day) {
  96. var self = this;
  97. var date = moment().subtract(day, 'days').format('YYYY-MM-DD');
  98. return _.flatten(_.filter(self.AccountBankStatementLine,function (inv) {
  99. return moment(inv.date).format('YYYY-MM-DD') === date & inv.amount < 0;
  100. }));
  101. },
  102. // Mostrar por meses
  103. showMonths: function() {
  104. var self = this;
  105. var title = ['Enero', 'Febrero', 'Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];
  106. var inStatement;
  107. var OutStatement;
  108. var mes = 0;
  109. var dataIn = [];
  110. var dataOut = [];
  111. for (var i = 1; i <= 12; i++) {
  112. inStatement = self.getInAccountBankStatementLine(i);
  113. var total = _.reduce(_.map(inStatement,function(item) {
  114. return item.amount;
  115. }),function(memo, num) {
  116. return memo + num;
  117. },0);
  118. dataIn.push(total);
  119. }
  120. for (var i = 1; i <= 12; i++) {
  121. OutStatement = self.getOutAccountBankStatementLine(i);
  122. var total = _.reduce(_.map(OutStatement,function(item) {
  123. return item.amount;
  124. }),function(memo, num) {
  125. return memo + num;
  126. },0);
  127. dataOut.push(Math.abs(total));
  128. }
  129. self.$el.unblock();
  130. self.$el.find('.widget-content.widget-loading').css('display','none');
  131. self.fetchChart(dataIn, dataOut, title);
  132. },
  133. // Mostrar por semana Actual
  134. showWeeks: function() {
  135. var self = this;
  136. var title = ['Lunes', 'Martes', 'Miercoles','Jueves','Viernes','Sabado','Domingo'];
  137. var inStatement;
  138. var OutStatement;
  139. var mes = 0;
  140. var dataIn = [];
  141. var dataOut = [];
  142. for (var i = 1; i <= 12; i++) {
  143. inStatement = self.getInWeekAccountBankStatementLine(i);
  144. var total = _.reduce(_.map(inStatement,function(item) {
  145. return item.amount;
  146. }),function(memo, num) {
  147. return memo + num;
  148. },0);
  149. dataIn.push(total);
  150. }
  151. for (var i = 1; i <= 12; i++) {
  152. OutStatement = self.getOutWeekAccountBankStatementLine(i);
  153. var total = _.reduce(_.map(OutStatement,function(item) {
  154. return item.amount;
  155. }),function(memo, num) {
  156. return memo + num;
  157. },0);
  158. dataOut.push(Math.abs(total));
  159. }
  160. self.$el.unblock();
  161. self.$el.find('.widget-content.widget-loading').css('display','none');
  162. self.fetchChart(dataIn, dataOut, title);
  163. },
  164. // Mostrar grafico por dias
  165. showDays: function() {
  166. var self = this;
  167. var title = [];
  168. var inStatement;
  169. var OutStatement;
  170. var mes = 0;
  171. var dataIn = [];
  172. var dataOut = [];
  173. for (var i = 15; i >= 0; i--) {
  174. inStatement = self.getInDaysAccountBankStatementLine(i);
  175. var total = _.reduce(_.map(inStatement,function(item) {
  176. return item.amount;
  177. }),function(memo, num) {
  178. return memo + num;
  179. },0);
  180. dataIn.push(total);
  181. title.push(moment().subtract(i, 'days').format('DD / MM'));
  182. }
  183. for (var i = 15; i >= 0; i--) {
  184. OutStatement = self.getOutDaysAccountBankStatementLine(i);
  185. var total = _.reduce(_.map(OutStatement,function(item) {
  186. return item.amount;
  187. }),function(memo, num) {
  188. return memo + num;
  189. },0);
  190. dataOut.push(Math.abs(total));
  191. }
  192. self.$el.unblock();
  193. self.$el.find('.widget-content.widget-loading').css('display','none');
  194. self.fetchChart(dataIn, dataOut, title);
  195. },
  196. // Generar Grafico
  197. fetchChart: function (dataIn,dataOut,title) {
  198. var self = this;
  199. var label = title;
  200. var bodyIn = dataIn;
  201. var bodyOut = dataOut;
  202. var item;
  203. // Global method for setting Y axis number format.
  204. Chart.scaleService.updateScaleDefaults('linear', {
  205. ticks: {
  206. callback: function(tick) {
  207. return tick.toLocaleString('de-DE');
  208. }
  209. }
  210. });
  211. Chart.defaults.global.tooltips.callbacks.label = function(tooltipItem, data) {
  212. var dataset = data.datasets[tooltipItem.datasetIndex];
  213. var datasetLabel = dataset.label || '';
  214. return datasetLabel + dataset.data[tooltipItem.index].toLocaleString('de-DE');
  215. };
  216. var chart = new Chart(this.$el.find(".widget-content").find('canvas'), {
  217. type: 'line',
  218. data: {
  219. labels: label,
  220. datasets: [
  221. {
  222. label: 'Ingreso ',
  223. data: bodyIn,
  224. backgroundColor: '#e3f2fd',
  225. borderColor: '#64b5f6',
  226. borderWidth: 2,
  227. fill: false,
  228. },
  229. {
  230. label: 'Egreso ',
  231. borderDash: [5, 5],
  232. data: bodyOut,
  233. backgroundColor: '#c8e6c9',
  234. borderColor: '#66bb6a',
  235. borderWidth: 2,
  236. fill: false,
  237. }
  238. ]
  239. },
  240. options: {
  241. responsive: true,
  242. title: {
  243. display: true,
  244. },
  245. hover: {
  246. mode: 'nearest',
  247. intersect: true
  248. },
  249. layout: {
  250. padding: {
  251. top: 0,
  252. bottom: 15,
  253. left : 0,
  254. rigth: 0,
  255. }
  256. },
  257. }
  258. });
  259. },
  260. });
  261. }