widget_cash.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. function widget_cash(widget) {
  2. "use strict";
  3. var model = openerp;
  4. widget.WidgetCashWidget = widget.Base.extend({
  5. template: 'WidgetCash',
  6. events: {},
  7. init: function (parent) {
  8. this._super(parent, {
  9. width: 3,
  10. height: 2
  11. });
  12. },
  13. start: function () {
  14. var self = this;
  15. self.fetchInitial();
  16. },
  17. fetchInitial: function(){
  18. var self = this;
  19. self.fetchResUser().then(function (ResUser) {
  20. return ResUser;
  21. }).then(function (ResUser) {
  22. self.ResUser = ResUser;
  23. return self.fetchAccountJournal();
  24. }).then(function(AccountJournal) {
  25. self.AccountJournal = AccountJournal;
  26. return self.fetchAccountBankStatement();
  27. }).then(function(AccountBankStatement) {
  28. self.AccountBankStatement = AccountBankStatement;
  29. return self.fetchResCompany();
  30. }).then(function(ResCompany) {
  31. self.ResCompany = ResCompany;
  32. return self.fetchResCurrecy();
  33. }).then(function(ResCurrecy) {
  34. self.ResCurrecy = ResCurrecy;
  35. return self.show();
  36. });
  37. },
  38. fetchResUser: function() {
  39. var self = this;
  40. var defer = $.Deferred();
  41. var fields = ['id','name','store_id'];
  42. var domain = [['id','=',self.session.uid]];
  43. var ResUser = new model.web.Model('res.users');
  44. ResUser.query(fields).filter(domain).all().then(function (results) {
  45. defer.resolve(results);
  46. });
  47. return defer;
  48. },
  49. fetchAccountJournal: function() {
  50. var self = this;
  51. var defer = $.Deferred();
  52. var store_ids = self.ResUser[0].store_id[0];
  53. var fields = ['id', 'name'];
  54. var domain = [['type', '=', 'cash'],['store_ids','in',store_ids]];
  55. var AccountJournal = new model.web.Model('account.journal');
  56. AccountJournal.query(fields).filter(domain).all().then(function(results) {
  57. defer.resolve(results);
  58. });
  59. return defer;
  60. },
  61. fetchAccountBankStatement: function() {
  62. var self = this;
  63. var defer = $.Deferred();
  64. var journal_ids = _.flatten(_.map(self.AccountJournal, function (item) {
  65. return item.id;
  66. }));
  67. var fields = ['id', 'name', 'date', 'balance_end','currency'];
  68. var domain = [['state', 'in', ['open']],['journal_id','in',journal_ids]];
  69. var AccountBankStatement = new model.web.Model('account.bank.statement');
  70. AccountBankStatement.query(fields).filter(domain).all().then(function(results) {
  71. defer.resolve(results);
  72. });
  73. return defer;
  74. },
  75. fetchResCompany: function() {
  76. var self = this;
  77. var defer = $.Deferred();
  78. var fields = ['id','name', 'currency_id'];
  79. var domain = [['id', '=', self.session.company_id]];
  80. var ResCompany = new model.web.Model('res.company');
  81. ResCompany.query(fields).filter(domain).all().then(function (results) {
  82. defer.resolve(results);
  83. });
  84. return defer;
  85. },
  86. fetchResCurrecy : function(){
  87. var self = this;
  88. var defer = $.Deferred();
  89. var fields = ['id','name', 'symbol', 'rate_silent', 'base', 'decimal_separator', 'decimal_places', 'thousands_separator', 'symbol_position'];
  90. var domain = [['active', '=', true]];
  91. var ResCurrecy = new model.web.Model('res.currency');
  92. ResCurrecy.query(fields).filter(domain).all().then(function(results) {
  93. defer.resolve(results);
  94. });
  95. return defer;
  96. },
  97. getResCurrency: function (id) {
  98. var self = this;
  99. return _.filter(self.ResCurrecy,function (item) {
  100. return item.id === id;
  101. })
  102. },
  103. show: function () {
  104. var self = this;
  105. var amount = 0;
  106. var data = [];
  107. var statement = self.AccountBankStatement;
  108. var CurrencyBase = self.getResCurrency(self.ResCompany[0].currency_id[0]).shift();
  109. if(statement.length > 0){
  110. var array = [];
  111. _.each(statement, function (item) {
  112. var currency = self.getResCurrency(item.currency[0]).shift();
  113. array.push({
  114. amount: item.balance_end * (CurrencyBase.rate_silent / currency.rate_silent),
  115. })
  116. });
  117. var invoice_total = 0;
  118. amount = _.reduce(_.map(array, function (map) {
  119. return map.amount;
  120. }), function (memo, num) {
  121. return memo + num;
  122. });
  123. }
  124. self.$el.find('.widget-content').find('a').text(accounting.formatMoney(amount, CurrencyBase.symbol, CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator))
  125. },
  126. });
  127. }