eiru_statement_transfer.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. (function() {
  2. openerp.widgetInstanceStatementTransfer = null;
  3. openerp.parentInstanceStatementTransfer = {};
  4. var QWeb = openerp.web.qweb;
  5. var instanceWeb = openerp.web;
  6. openerp.EiruStatementTransfer = openerp.Widget.extend({
  7. template: 'EiruStatementUtility.Transfer',
  8. id: undefined,
  9. buttons: undefined,
  10. bankStatement: [],
  11. accountJournal :[],
  12. statementOpen: [],
  13. /** config */
  14. statementConfig: [],
  15. resUser: [],
  16. statementUser: [],
  17. /* init */
  18. init: function(parent) {
  19. this._super(parent);
  20. this.buttons = parent.$buttons;
  21. },
  22. /* start */
  23. start: function () {
  24. var self = this
  25. this.$el.click(function() {
  26. self.fetchInitial();
  27. });
  28. self.buttons.click(function(e) {
  29. /* C (Crear) */
  30. if (e.target.accessKey === 'C')
  31. self.$el.css('display','none');
  32. /* E (Editar) */
  33. if (e.target.accessKey === 'E')
  34. self.$el.css('display','none');
  35. /* S (Guarrdar) */
  36. if (e.target.accessKey === 'S')
  37. self.$el.css('display','flex');
  38. /* D (Cancelar) */
  39. if (e.target.accessKey === 'D')
  40. self.$el.css('display','flex');
  41. });
  42. },
  43. /* Actualizar Id de la visat actual */
  44. updateId: function(id) {
  45. var self = this;
  46. self.id = id;
  47. },
  48. /* Reload Page*/
  49. reloadPage: function() {
  50. openerp.parentInstanceStatementTransfer.reload();
  51. },
  52. /* Description: Función para remover el modal */
  53. removeModal: function() {
  54. $('.expired-account-modal').remove();
  55. $('.modal-backdrop').remove();
  56. },
  57. /*Get User*/
  58. fetchGetUserLogin: function(){
  59. var bankStatementUser = new instanceWeb.Model('account.bank.statement');
  60. return bankStatementUser.call('eiru_transfers_get_user', {
  61. context: new instanceWeb.CompoundContext()
  62. });
  63. },
  64. /* statement Config */
  65. fetchStatementConfigTransfer: function() {
  66. var fields = ['id','name','transfer_user_ids','transfer_statement_ids','transfer_negative_amount'];
  67. var domain = [['active', '=', true]];
  68. var statementConfig = new openerp.web.Model('account.bank.statement.config');
  69. return statementConfig.query(fields).filter(domain).all();
  70. },
  71. /* Método inicial */
  72. fetchInitial: function() {
  73. var self = this;
  74. self.fetchBankStatement(self.id).then(function(bankStatement) {
  75. return bankStatement;
  76. }).then(function(bankStatement) {
  77. self.bankStatement = bankStatement;
  78. return self.fetchStatementConfigTransfer();
  79. }).then(function(statementConfig){
  80. self.statementConfig = statementConfig;
  81. return self.fetchGetUserLogin();
  82. }).then(function(resUser) {
  83. self.resUser = resUser;
  84. if (!self.statementConfig.length){
  85. instanceWeb.notification.do_warn("Atencion", "No estas autorizado a realizar transferencia, no existe configuración de caja.");
  86. return false;
  87. }
  88. if (!self.resUser.length) {
  89. instanceWeb.notification.do_warn("Atencion", "No estas autorizado a realizar transferencia.");
  90. return false;
  91. }
  92. // if (!!self.statementConfig.length && !!self.resUser.length && !!self.bankStatement.length) {
  93. if (!!self.bankStatement.length) {
  94. var statementConfig = self.statementConfig[0];
  95. var resUser = self.resUser[0];
  96. var statementUser = self.bankStatement[0];
  97. /* Verificar si el tipo caja tiene permiso para la transferencia */
  98. if (!(_.contains(statementConfig.transfer_statement_ids, statementUser.typeStatement))) {
  99. instanceWeb.notification.do_warn("Atencion", "El tipo de caja no tiene autorización para realizar transferencia.");
  100. return false;
  101. }
  102. /* Verificar si el usuario tiene permiso para la transferencia*/
  103. if (!(_.contains(statementConfig.transfer_user_ids, resUser.id))) {
  104. instanceWeb.notification.do_warn("Atencion", "El usuario no tiene autorización para realizar transferencia.");
  105. return false;
  106. }
  107. }
  108. if (self.bankStatement[0].amount <= 0) {
  109. if (!self.statementConfig.length){
  110. instanceWeb.notification.do_warn("Atencion", "Caja sin saldo.");
  111. return false;
  112. }
  113. if (!self.statementConfig[0].transfer_negative_amount){
  114. instanceWeb.notification.do_warn("Atencion", "Caja sin saldo.");
  115. return false;
  116. }
  117. }
  118. self.fetchAccountJournal(self.id).then(function(accountJournal) {
  119. return accountJournal;
  120. }).then(function(accountJournal) {
  121. self.accountJournal = accountJournal;
  122. if (!accountJournal[0].statementJournal.length){
  123. instanceWeb.notification.do_warn("Atencion", "No tienes otra caja abierta para realizar la transferencia.");
  124. return false;
  125. }
  126. return self.showModalTransfer();
  127. });
  128. });
  129. },
  130. /* Account bank Statement */
  131. fetchBankStatement: function(id) {
  132. var bankStatement = new instanceWeb.Model('account.bank.statement');
  133. return bankStatement.call('get_account_bank_statement_utility',[id], {
  134. context: new instanceWeb.CompoundContext()
  135. });
  136. },
  137. /* Account Journal*/
  138. fetchAccountJournal: function(id) {
  139. var accountJournal = new instanceWeb.Model('account.bank.statement');
  140. return accountJournal.call('get_account_journal_utility',[id], {
  141. context: new instanceWeb.CompoundContext()
  142. });
  143. },
  144. /* Get statement Journal */
  145. getStatementJournal(id) {
  146. var self = this;
  147. var journal = _.filter(self.accountJournal, function(item) {
  148. return item.id === id ;
  149. });
  150. return _.flatten(_.map(journal, function(map) {
  151. return map.statementJournal;
  152. }));
  153. },
  154. /* Save Statement transfer */
  155. statementCompletTransfers: function(values) {
  156. var bankStatementTransfer = new instanceWeb.Model('account.bank.statement');
  157. return bankStatementTransfer.call('statement_complet_transfers',[values], {
  158. context: new instanceWeb.CompoundContext()
  159. });
  160. },
  161. /*Modal Transfer */
  162. showModalTransfer: function() {
  163. var self = this;
  164. var defer =$.Deferred();
  165. var results = true;
  166. var accountJournal = self.accountJournal;
  167. accountJournal.unshift({'name': '', 'id': ''});
  168. var modal = QWeb.render('ModalStatementUtility.Transfer',{
  169. 'journal': accountJournal
  170. });
  171. $('.openerp_webclient_container').after(modal);
  172. $('.expired-account-modal').modal();
  173. var statementAmount = $('.expired-account-modal').find('.statement-amount');
  174. var statementAmountSymbol = $('.expired-account-modal').find('.statement-amount-symbol');
  175. var selectedJournal = $('.expired-account-modal').find('.selected-Journal');
  176. var statementOpen = $('.expired-account-modal').find('.statement-open-selected');
  177. var amountTransfer = $('.expired-account-modal').find('.amount-transfer');
  178. var amountTransferSymbol = $('.expired-account-modal').find('.amount-transfer-symbol');
  179. var refTransfer = $('.expired-account-modal').find('.ref-transfer');
  180. /* Button */
  181. var buttonSave = $('.expired-account-modal').find('.button-save');
  182. var currency = self.bankStatement[0].currencystatement;
  183. /* Monto */
  184. statementAmount.val(instanceWeb.formatCurrency(self.bankStatement[0].amount,currency));
  185. /* Symbol */
  186. statementAmountSymbol.text(currency.symbol);
  187. amountTransferSymbol.text(currency.symbol);
  188. /*select Journal */
  189. selectedJournal.focus();
  190. selectedJournal.change(function(e) {
  191. statementOpen.empty();
  192. var statementJournal = self.getStatementJournal(parseInt(selectedJournal.val()));
  193. if (!!statementJournal.length)
  194. statementOpen.append('<option value=""></option>');
  195. _.each(statementJournal, function(item) {
  196. statementOpen.append('<option value="' + item.id + '">' + item.statementname + '</option>');
  197. });
  198. });
  199. /* amountTransfer.keyup */
  200. amountTransfer.keyup(function(e) {
  201. if (e.key === currency.decimalSeparator && currency.decimalPlaces > 0)
  202. return false ;
  203. var amount = instanceWeb.unFormatCurrency(amountTransfer.val());
  204. amount = instanceWeb.formatCurrency(amount,currency)
  205. amountTransfer.val(amount);
  206. amountTransfer.css('border-color','#ccc');
  207. if (e.keyCode === 13)
  208. refTransfer.focus();
  209. });
  210. /* amountTransfer.focusout*/
  211. amountTransfer.focusout(function(e) {
  212. var amountAvailable = instanceWeb.unFormatCurrency(statementAmount.val());
  213. var amount = Math.abs(instanceWeb.unFormatCurrency(amountTransfer.val()));
  214. if (amountAvailable < amount && !self.statementConfig[0].transfer_negative_amount) {
  215. instanceWeb.notification.do_warn("Atencion", "El valor a transferir supera el saldo disponible de la caja.");
  216. amountTransfer.css('border-color','red');
  217. amountTransfer.focus();
  218. return false;
  219. }
  220. amountTransfer.css('border-color','#ccc');
  221. amountTransfer.val(instanceWeb.formatCurrency(amount,currency))
  222. });
  223. /* Click buttonSave */
  224. buttonSave.click(function(e){
  225. var amountAvailable = instanceWeb.unFormatCurrency(statementAmount.val());
  226. var amount = instanceWeb.unFormatCurrency(amountTransfer.val());
  227. /* Journal */
  228. if (!selectedJournal.val()) {
  229. instanceWeb.notification.do_warn("Atencion", "Debes seleccionar un tipo de pago para continuar.");
  230. selectedJournal.css('border-color','red');
  231. selectedJournal.focus();
  232. return false;
  233. }
  234. selectedJournal.css('border-color','#ccc');
  235. /* Statement Open */
  236. if (!statementOpen.val()) {
  237. instanceWeb.notification.do_warn("Atencion", "Debes seleccionar la caja donde vas a transferir.");
  238. statementOpen.css('border-color','red');
  239. statementOpen.focus();
  240. return false;
  241. }
  242. statementOpen.css('border-color','#ccc');
  243. /* ammount transfer*/
  244. if (amount <= 0.00) {
  245. instanceWeb.notification.do_warn("Atencion", "El valor a transferir debe ser mayor a cero.");
  246. amountTransfer.css('border-color','red');
  247. amountTransfer.focus();
  248. return false;
  249. }
  250. if (amountAvailable < amount) {
  251. if (!self.statementConfig.length){
  252. instanceWeb.notification.do_warn("Atencion", "El valor a transferir supera el saldo disponible de la caja .");
  253. amountTransfer.css('border-color','red');
  254. amountTransfer.focus();
  255. return false;
  256. }
  257. if (!self.statementConfig[0].transfer_negative_amount){
  258. instanceWeb.notification.do_warn("Atencion", "El valor a transferir supera el saldo disponible de la caja .");
  259. amountTransfer.css('border-color','red');
  260. amountTransfer.focus();
  261. return false;
  262. }
  263. }
  264. amountTransfer.css('border-color','#ccc');
  265. /* Ref transfer */
  266. if (!refTransfer.val()) {
  267. instanceWeb.notification.do_warn("Atencion", "Debes de ingresar un motivo para la transferencia.");
  268. refTransfer.css('border-color','red');
  269. refTransfer.focus();
  270. return false;
  271. }
  272. refTransfer.css('border-color','#ccc');
  273. statementTransfer = {
  274. 'statementOriginId': self.bankStatement[0].id,
  275. 'statementDestinyId': parseInt(statementOpen.val()),
  276. 'amountTransfer': amount,
  277. 'refTransfer': refTransfer.val().trim(),
  278. 'journalID': parseInt(selectedJournal.val())
  279. }
  280. /* Save Payments */
  281. self.statementCompletTransfers(statementTransfer).then(function(resultsTransfer) {
  282. return resultsTransfer;
  283. }).then(function(resultsTransfer) {
  284. self.reloadPage();
  285. self.removeModal(e);
  286. if (!resultsTransfer)
  287. results = false;
  288. });
  289. defer.resolve(results);
  290. });
  291. /* Click Cerrar */
  292. $('.expired-account-modal').on('hidden.bs.modal', function(e) {
  293. results = false;
  294. defer.resolve(results);
  295. self.removeModal(e);
  296. });
  297. return defer;
  298. },
  299. });
  300. if (openerp.web && openerp.web.FormView) {
  301. openerp.web.FormView.include({
  302. load_record: function(record) {
  303. this._super.apply(this, arguments);
  304. if (this.model !== 'account.bank.statement')
  305. return;
  306. openerp.parentInstanceStatementTransfer = this;
  307. if (openerp.widgetInstanceStatementTransfer) {
  308. openerp.widgetInstanceStatementTransfer.updateId(record.id);
  309. if (this.$el.find('.button-statement-transfer').length !== 0 )
  310. return ;
  311. }
  312. if (this.$el.find('.button-statement-transfer').length !== 0 )
  313. return;
  314. openerp.widgetInstanceStatementTransfer = new openerp.EiruStatementTransfer(this);
  315. var element =this.$el.find('.oe_form').find('.eiru-statement-utility');
  316. openerp.widgetInstanceStatementTransfer.appendTo(element[0]);
  317. openerp.widgetInstanceStatementTransfer.updateId(record.id);
  318. }
  319. });
  320. }
  321. })();