expired_account_counters.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. function expired_account_counters (widget) {
  2. "use strict";
  3. var model = openerp;
  4. var Qweb = openerp.web.qweb;
  5. widget.ExpiredAccountCountersWidget = widget.Base.extend({
  6. template: 'ExpiredAccountCounters',
  7. moveLine: [],
  8. resCompany: [],
  9. resCurrecy: [],
  10. modelId: [],
  11. accountInvoice: [],
  12. module_list: ['point_of_sale'],
  13. newModule: [],
  14. events: {
  15. 'click a': 'showCustomers',
  16. 'click h2': 'showCustomers',
  17. },
  18. init: function (parent) {
  19. var self = this;
  20. this._super(parent, {
  21. width: 3,
  22. height: 2,
  23. });
  24. },
  25. start: function () {
  26. var self = this;
  27. self.fetchInitial();
  28. },
  29. // Consulta Inicial
  30. fetchInitial: function() {
  31. var self = this;
  32. self.$el.find('.grid-stack-item-content dashboard').block({
  33. message: null,
  34. overlayCSS: {
  35. backgroundColor: '#FAFAFA'
  36. }
  37. });
  38. self.$el.find('.widget-content.widget-loading').css('display','flex');
  39. self.fecthIrModuleModule().then(function(modules){
  40. self.modules = modules;
  41. return modules;
  42. }).then(function(modules){
  43. return self.fetchMoveLine()
  44. }).then(function (moveLine) {
  45. return moveLine;
  46. }).then(function (moveLine) {
  47. self.moveLine = _.filter(moveLine, function(item) {
  48. return item.amount_residual > 0;
  49. });
  50. return self.fetchInvoice(moveLine);
  51. }).then(function(accountInvoice) {
  52. self.accountInvoice = accountInvoice;
  53. return self.fetchResCompany();
  54. }).then(function (resCompany) {
  55. self.resCompany = resCompany;
  56. return self.fetchResCurrecy();
  57. }).then(function (resCurrecy) {
  58. self.resCurrecy = resCurrecy;
  59. return self.fetchGetModelId();
  60. }).then(function(modelId) {
  61. self.modelId= modelId;
  62. return self.fetchReduceMoveLine();
  63. });
  64. },
  65. // Verificar Modelos Instalados
  66. fecthIrModuleModule: function(){
  67. var self = this;
  68. var defer = $.Deferred();
  69. var fields = ['name','id'];
  70. var domain=[['state','=','installed'],['name','in',self.module_list]];
  71. var irModule = new model.web.Model('ir.module.module');
  72. irModule.query(fields).filter(domain).all().then(function(results){
  73. defer.resolve(results);
  74. })
  75. return defer;
  76. },
  77. // getModelId
  78. fetchGetModelId: function() {
  79. var self = this;
  80. var defer = $.Deferred();
  81. var irModelData = new model.web.Model('ir.model.data');
  82. var getObtjectReference = irModelData.get_func('get_object_reference');
  83. this.alive(getObtjectReference('account', 'invoice_form')).then(function(results) {
  84. defer.resolve(results);
  85. });
  86. return defer;
  87. },
  88. // Move line
  89. fetchMoveLine: function () {
  90. var self = this;
  91. var hoy = moment().format('YYYY-MM-DD');
  92. var defer = $.Deferred();
  93. var field = ['id', 'partner_id', 'amount_residual', 'credit', 'debit', 'date_maturity', 'invoice', 'ref', 'invoice', 'amount_residual_currency','state'];
  94. var domain = [['credit', '<=', 0], ['date_maturity', '<', hoy]];
  95. var moveLine = new model.web.Model('account.move.line');
  96. moveLine.query(field).filter(domain).all().then(function(results) {
  97. defer.resolve(results);
  98. });
  99. return defer;
  100. },
  101. // invoice
  102. fetchInvoice: function(moveline) {
  103. var self = this ;
  104. var defer = $.Deferred()
  105. var ref = _.map(moveline, function(map) {
  106. return map.invoice[0];
  107. });
  108. var fields = ['id', 'currency_id', 'number', 'currency_id'];
  109. var domain = [['id', 'in', ref]];
  110. var accountInvoice = new model.web.Model('account.invoice');
  111. accountInvoice.query(fields).filter(domain).all().then(function(results) {
  112. defer.resolve(results);
  113. });
  114. return defer;
  115. },
  116. //Comapnia
  117. fetchResCompany: function() {
  118. var self = this;
  119. var defer = $.Deferred();
  120. var fields = ['id','name', 'currency_id', 'logo'];
  121. var domain = [['id', '=', 1]];
  122. var resCompanyIds = new model.web.Model('res.company');
  123. resCompanyIds.query(fields).filter(domain).all().then(function (results) {
  124. defer.resolve(results);
  125. });
  126. return defer;
  127. },
  128. // Res currecy
  129. fetchResCurrecy : function() {
  130. var self = this;
  131. var defer = $.Deferred();
  132. var fields = ['id','name', 'symbol', 'rate_silent', 'base', 'decimal_separator', 'decimal_places', 'thousands_separator', 'symbol_position'];
  133. var domain = [['active','=', true]];
  134. var resCurrecy = new model.web.Model('res.currency');
  135. resCurrecy.query(fields).filter(domain).all().then(function(results) {
  136. defer.resolve(results);
  137. });
  138. return defer;
  139. },
  140. // Obtener moneda
  141. getCurrency: function (id) {
  142. var self = this;
  143. return _.filter(self.resCurrecy,function (item) {
  144. return item.id === id;
  145. });
  146. },
  147. // Moneda de la factura
  148. getInvoiceCurrency: function(id) {
  149. var self = this;
  150. var currency_invoice = _.filter(self.accountInvoice, function(filter) {
  151. return filter.id === id;
  152. }).shift();
  153. return self.getCurrency(currency_invoice.currency_id[0]);
  154. },
  155. // Reduce Move line
  156. fetchReduceMoveLine: function () {
  157. var self = this;
  158. var newmoveLine = [];
  159. var inteMove;
  160. var residual = 0;
  161. var currencyInvoice;
  162. var company = self.resCompany.shift();
  163. var currencyBase = self.getCurrency(company.currency_id[0]).shift();
  164. for (var i = 0; i < self.moveLine.length; i++) {
  165. inteMove = self.moveLine[i];
  166. currencyInvoice = self.getInvoiceCurrency(inteMove.invoice[0]).shift();
  167. if(!currencyInvoice) {
  168. currencyInvoice = {};
  169. currencyInvoice.rate=currencyBase.rate_silent;
  170. }
  171. newmoveLine.push({
  172. amount_residual: inteMove.amount_residual,
  173. amount_residual_currency: (inteMove.amount_residual_currency * (currencyBase.rate_silent / currencyInvoice.rate_silent))
  174. });
  175. }
  176. if (newmoveLine.length > 0) {
  177. residual = _.reduce(_.map(newmoveLine, function (map) {
  178. return map.amount_residual_currency;
  179. }), function (memo, num) {
  180. return memo + num;
  181. });
  182. }
  183. self.$el.find('.widget-content.widget-loading').css('display','none');
  184. self.$el.find('.widget-content').find('a').text(accounting.formatMoney(residual, currencyBase.symbol, currencyBase.decimal_places, currencyBase.thousands_separator, currencyBase.decimal_separator));
  185. self.$el.find('.grid-stack-item-content dashboard').unblock();
  186. },
  187. showCustomers: function (e) {
  188. var self = this;
  189. if (self.moveLine <=0) {
  190. model.web.notification.do_warn("Atención","Sin datos");
  191. return
  192. }
  193. var moneda = self.resCurrecy.shift();
  194. var newmoveLine = self.moveLine;
  195. var titleData = [
  196. {
  197. title: "Deudas atrasadas"
  198. }
  199. ];
  200. var headerModal = [
  201. {
  202. title: "id"
  203. },
  204. {
  205. title: "Cliente"
  206. },
  207. {
  208. title: "Numero de Factura"
  209. },
  210. {
  211. title: "Vencimiento"
  212. },
  213. {
  214. title: "Monto "
  215. }
  216. ];
  217. var modal = Qweb.render('ExpiredAccountCountersModal', {
  218. data: newmoveLine,
  219. dataThead: headerModal,
  220. modalTitle: titleData
  221. });
  222. $('.openerp_webclient_container').after(modal);
  223. $('.expired-account-modal').modal()
  224. $('.expired-account-modal').on('hidden.bs.modal', function (e) {
  225. self.removeModal(e);
  226. })
  227. var contenido = $('.expired-account-modal').find('.table-tbody');
  228. contenido.click(function (e) {
  229. $(contenido).find('tr').removeClass('table-row-select');
  230. $(e.target).closest('tr').addClass('table-row-select');
  231. var chirdren_id =$(e.target).closest('tr').children()[0].textContent;
  232. self.renderForm(chirdren_id);
  233. });
  234. },
  235. // Remover <Modal></Modal>
  236. removeModal: function (e) {
  237. $('.expired-account-modal').remove();
  238. $('.modal-backdrop').remove();
  239. },
  240. // Llamar form
  241. renderForm: function(id){
  242. var self = this;
  243. id = parseInt(id);
  244. this.do_action({
  245. type: "ir.actions.act_window",
  246. res_model: "account.invoice",
  247. views: [[self.modelId[1], 'form']],
  248. target: 'current',
  249. domain: [['id', '=', id]],
  250. context: {},
  251. res_id: id,
  252. }).then(function() {
  253. self.removeModal();
  254. });
  255. }
  256. });
  257. }