eiru_statement_confirm.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. (function() {
  2. openerp.widgetInstanceStatementConfirm = null;
  3. openerp.parentInstanceStatementConfirm = {};
  4. var QWeb = openerp.web.qweb;
  5. var instanceWeb = openerp.web;
  6. // Abrir caja
  7. openerp.EiruStatementConfirm = openerp.Widget.extend({
  8. template: 'EiruStatementUtility.Confirm',
  9. id: undefined,
  10. buttons: undefined,
  11. bankStatement: [],
  12. statementGeneral: [],
  13. resUser: [],
  14. statementConfig: [],
  15. /* init */
  16. init: function(parent) {
  17. this._super(parent);
  18. this.buttons = parent.$buttons;
  19. },
  20. /* start */
  21. start: function () {
  22. var self = this
  23. this.$el.click(function() {
  24. self.fetchInitial();
  25. });
  26. self.buttons.click(function(e) {
  27. /* C (Crear) */
  28. if (e.target.accessKey === 'C')
  29. self.$el.css('display','none');
  30. /* E (Editar) */
  31. if (e.target.accessKey === 'E')
  32. self.$el.css('display','none');
  33. /* S (Guarrdar) */
  34. if (e.target.accessKey === 'S')
  35. self.$el.css('display','flex');
  36. /* D (Cancelar) */
  37. if (e.target.accessKey === 'D')
  38. self.$el.css('display','flex');
  39. });
  40. },
  41. /* Actualizar Id de la visat actual */
  42. updateId: function(id) {
  43. var self = this;
  44. self.id = id;
  45. },
  46. /* Reload Page*/
  47. reloadPage: function() {
  48. openerp.parentInstanceStatementConfirm.reload();
  49. },
  50. /* Description: Función para remover el modal */
  51. removeModal: function() {
  52. $('.expired-account-modal').remove();
  53. $('.modal-backdrop').remove();
  54. },
  55. /* Método inicial */
  56. fetchInitial: function() {
  57. var self = this;
  58. self.fetchBankStatement(self.id).then(function(bankStatement) {
  59. return bankStatement;
  60. }).then(function(bankStatement) {
  61. self.bankStatement = bankStatement;
  62. return self.fetchBankStatementGeneral(self.id);
  63. }).then(function(statementGeneral) {
  64. self.statementGeneral = statementGeneral;
  65. return self.fetchGetUserLogin();
  66. }).then(function(resUser){
  67. self.resUser = resUser;
  68. return self.fetchStatementConfigTransfer();
  69. }).then(function(statementConfig){
  70. self.statementConfig = statementConfig;
  71. /* Verificar el usuario */
  72. if (!self.resUser.length){
  73. instanceWeb.notification.do_warn("Atencion", "No estas autorizado a realizar esta operación.");
  74. return false;
  75. }
  76. /* Verificar si existe configuracion */
  77. if (!self.statementConfig.length){
  78. instanceWeb.notification.do_warn("Atencion", "No estas autorizado a realizar esta operación, no existe configuración de caja.");
  79. return false;
  80. }
  81. /* Verificar si el usuario tiene autorización para cerrar la caja */
  82. if (!(_.contains(self.statementConfig[0].statement_confirm_user, self.resUser[0].id))){
  83. instanceWeb.notification.do_warn("Atencion", "El usuario no tiene autorización para cerrar la caja.");
  84. return false;
  85. }
  86. return self.showModal();
  87. });
  88. },
  89. /* Account bank Statement */
  90. fetchBankStatement: function(id) {
  91. var bankStatement = new instanceWeb.Model('account.bank.statement');
  92. return bankStatement.call('get_account_bank_statement_utility',[id], {
  93. context: new instanceWeb.CompoundContext()
  94. });
  95. },
  96. /* Get statement General */
  97. fetchBankStatementGeneral: function(id) {
  98. var bankStatementGeneral = new instanceWeb.Model('account.bank.statement');
  99. return bankStatementGeneral.call('get_account_bank_statement_general',[id], {
  100. context: new instanceWeb.CompoundContext()
  101. });
  102. },
  103. /* Confirm Statement */
  104. confirm_statement: function(values) {
  105. var bankStatementTransfer = new instanceWeb.Model('account.bank.statement');
  106. return bankStatementTransfer.call('account_bank_statement_confirm',[values], {
  107. context: new instanceWeb.CompoundContext()
  108. });
  109. },
  110. /*Get User*/
  111. fetchGetUserLogin: function(){
  112. var bankStatementUser = new instanceWeb.Model('account.bank.statement');
  113. return bankStatementUser.call('eiru_transfers_get_user', {
  114. context: new instanceWeb.CompoundContext()
  115. });
  116. },
  117. /* statement Config */
  118. fetchStatementConfigTransfer: function() {
  119. var fields = ['id','name','statement_confirm_user','statement_confirm_transfer_user','statement_confirm_balance','statement_confirm_negative_amount'];
  120. var domain = [['active', '=', true]];
  121. var statementConfig = new openerp.web.Model('account.bank.statement.config');
  122. return statementConfig.query(fields).filter(domain).all();
  123. },
  124. /*Modal */
  125. showModal: function() {
  126. var self = this;
  127. var defer =$.Deferred();
  128. var results = true;
  129. var statementGeneral = self.statementGeneral;
  130. var selectedTrnasfer = false;
  131. if(!!statementGeneral.length){
  132. statementGeneral.unshift({
  133. 'id':' ',
  134. 'statementname':' '
  135. });
  136. }
  137. var modal = QWeb.render('ModalStatementUtility.Confirm',{
  138. 'statement': statementGeneral
  139. });
  140. $('.openerp_webclient_container').after(modal);
  141. $('.expired-account-modal').modal();
  142. /* Balance */
  143. var amountSymbol = $('.expired-account-modal').find('.statement-amount-symbol');
  144. var amountCashbox = $('.expired-account-modal').find('.amount-cashbox');
  145. var amountReal = $('.expired-account-modal').find('.amount-real');
  146. var amountDiffer = $('.expired-account-modal').find('.amount-difference');
  147. var refBalance = $('.expired-account-modal').find('.ref-balance');
  148. /*transfer*/
  149. var transferCasbox = $('.expired-account-modal').find('.confirm-transfer-casbox');
  150. var cashboxTransfer = $('.expired-account-modal').find('.cashbox-transfer');
  151. var amountTransfer = $('.expired-account-modal').find('.amount-transfer');
  152. var refTransfer = $('.expired-account-modal').find('.ref-transfer');
  153. /* Open cashBox*/
  154. var amountOpen = $('.expired-account-modal').find('.amount-cashbox-open');
  155. var buttonSave = $('.expired-account-modal').find('.button-save');
  156. var currency = self.bankStatement[0].currencystatement;
  157. var transferSelected = null;
  158. amountSymbol.text(currency.symbol);
  159. amountCashbox.val(instanceWeb.formatCurrency(self.bankStatement[0].amount, currency));
  160. amountReal.val(instanceWeb.formatCurrency(self.bankStatement[0].amount, currency));
  161. amountOpen.val(instanceWeb.formatCurrency(self.bankStatement[0].amount, currency));
  162. amountDiffer.val(0);
  163. amountTransfer.val('0');
  164. refBalance.val('Balance de cierre correcto.');
  165. $('.expired-account-modal').find('.is-not-transfer').css('display','none');
  166. $('.expired-account-modal').find('.is-not-transfer').text('');
  167. transferCasbox.removeAttr("disabled");
  168. if (!statementGeneral.length) {
  169. $('.expired-account-modal').find('.is-not-transfer').css('display','inline-block');
  170. $('.expired-account-modal').find('.is-not-transfer').text("No tienes ninguna caja general abierta");
  171. transferCasbox.attr("disabled", true);
  172. }
  173. $('.expired-account-modal').find('.is-not-balance').css('display','none');
  174. $('.expired-account-modal').find('.is-not-balance').text("");
  175. amountReal.removeAttr("disabled");
  176. refBalance.removeAttr("disabled");
  177. // Ajsuste de saldo
  178. if (!(_.contains(self.statementConfig[0].statement_confirm_balance, self.resUser[0].id))) {
  179. $('.expired-account-modal').find('.is-not-balance').css('display','inline-block');
  180. $('.expired-account-modal').find('.is-not-balance').text("El usuario no tiene autorización para realizar ajuste de cierre.");
  181. amountReal.attr("disabled", true);
  182. refBalance.attr("disabled", true);
  183. }
  184. // Transferencia
  185. if (!(_.contains(self.statementConfig[0].statement_confirm_transfer_user, self.resUser[0].id))){
  186. $('.expired-account-modal').find('.is-not-transfer').css('display','inline-block');
  187. $('.expired-account-modal').find('.is-not-transfer').text("El usuario no tiene autorización para realizar transferencia.");
  188. transferCasbox.attr("disabled", true);
  189. }
  190. /* Amount Real .keyup*/
  191. amountReal.keyup(function(e) {
  192. if (e.key === currency.decimalSeparator && currency.decimalPlaces > 0)
  193. return false ;
  194. var cashBoxAmount = instanceWeb.unFormatCurrency(amountCashbox.val());
  195. var realAmount = instanceWeb.unFormatCurrency(amountReal.val());
  196. var differenceAmount = (realAmount - cashBoxAmount);
  197. amountReal.val(instanceWeb.formatCurrency(realAmount, currency));
  198. amountDiffer.val(instanceWeb.formatCurrency(differenceAmount, currency));
  199. amountOpen.val(instanceWeb.formatCurrency(realAmount, currency));
  200. amountReal.css('border-color','#ccc');
  201. amountDiffer.css('color','#555');
  202. if (differenceAmount < 0)
  203. amountDiffer.css('color','red');
  204. if (e.keyCode === 13)
  205. refBalance.focus();
  206. });
  207. amountReal.focusout(function(e) {
  208. var realAmount = instanceWeb.unFormatCurrency(amountReal.val());
  209. var cashBoxAmount = instanceWeb.unFormatCurrency(amountCashbox.val());
  210. if ((realAmount <= 0) && !(_.contains(self.statementConfig[0].statement_confirm_negative_amount, self.resUser[0].id))) {
  211. instanceWeb.notification.do_warn("Atencion", "El valor de cierre debes de ser mayo que 0.");
  212. amountReal.css('border-color','red');
  213. amountReal.focus();
  214. return false;
  215. }
  216. if (realAmount !== cashBoxAmount)
  217. refBalance.val('')
  218. var differenceAmount = (realAmount - cashBoxAmount);
  219. amountDiffer.css('color','#555');
  220. if (differenceAmount < 0 )
  221. amountDiffer.css('color','red');
  222. });
  223. /**
  224. * [Transferencia]
  225. */
  226. transferCasbox.click(function(e){
  227. var realAmount = instanceWeb.unFormatCurrency(amountReal.val());
  228. amountOpen.val(instanceWeb.formatCurrency(realAmount,currency));
  229. amountTransfer.val('0');
  230. transferSelected = e.target;
  231. selectedTrnasfer = false
  232. cashboxTransfer.val('');
  233. refTransfer.val("");
  234. $('.expired-account-modal').find('.is-transfer-confirm').css('display','none');
  235. if (this.checked) {
  236. $('.expired-account-modal').find('.is-transfer-confirm').css('display','flex');
  237. selectedTrnasfer = true;
  238. amountTransfer.val(instanceWeb.formatCurrency(realAmount,currency));
  239. amountOpen.val('0');
  240. }
  241. })
  242. cashboxTransfer.change(function(e) {
  243. var realAmount = instanceWeb.unFormatCurrency(amountReal.val());
  244. })
  245. /* amount transfer Keyup */
  246. amountTransfer.keyup(function(e){
  247. if (e.key === currency.decimalSeparator && currency.decimalPlaces > 0)
  248. return false ;
  249. var realAmount = instanceWeb.unFormatCurrency(amountReal.val());
  250. var transferAmount = instanceWeb.unFormatCurrency(amountTransfer.val());
  251. var amount = (realAmount - transferAmount);
  252. amountTransfer.val(instanceWeb.formatCurrency(transferAmount,currency));
  253. amountOpen.val(instanceWeb.formatCurrency(amount,currency));
  254. if (e.keyCode === 13)
  255. buttonSave.focus();
  256. });
  257. /* amount transfer focus */
  258. amountTransfer.focusout(function(e) {
  259. var realAmount = instanceWeb.unFormatCurrency(amountReal.val());
  260. var transferAmount = instanceWeb.unFormatCurrency(amountTransfer.val());
  261. if (transferAmount <= 0) {
  262. instanceWeb.notification.do_warn("Atencion", "El monto a transferir no puede ser 0");
  263. amountTransfer.css('border-color','red');
  264. amountTransfer.focus();
  265. return false;
  266. }
  267. if (transferAmount > realAmount){
  268. instanceWeb.notification.do_warn("Atencion", "El monto a transferir no puede superar el monto de cierre.");
  269. amountTransfer.css('border-color','red');
  270. amountTransfer.focus();
  271. return false;
  272. }
  273. amountTransfer.css('border-color','#ccc');
  274. var amount = (realAmount - transferAmount);
  275. // amountTransfer.val(instanceWeb.formatCurrency(transferAmount,currency));
  276. amountOpen.val(instanceWeb.formatCurrency(amount,currency));
  277. });
  278. /*Click buttonSave*/
  279. buttonSave.click(function(e) {
  280. var cashBoxAmount = instanceWeb.unFormatCurrency(amountCashbox.val());
  281. var realAmount = instanceWeb.unFormatCurrency(amountReal.val());
  282. var transferAmount = instanceWeb.unFormatCurrency(amountTransfer.val());
  283. var amount_negative = _.contains(self.statementConfig[0].statement_confirm_negative_amount, self.resUser[0].id)
  284. // amountReal
  285. if ((realAmount <= 0) && (!amount_negative)) {
  286. instanceWeb.notification.do_warn("Atencion", "El valor de cierre debes de ser mayo que 0.");
  287. amountReal.css('border-color','red');
  288. amountReal.focus();
  289. return false;
  290. }
  291. amountReal.css('border-color','#ccc');
  292. // refBalance
  293. if ((!refBalance.val()) && (cashBoxAmount !== realAmount)) {
  294. instanceWeb.notification.do_warn("Atencion", "Debes de ingresar una observación para el ajuste de saldo de cierre.");
  295. refBalance.css('border-color','red');
  296. refBalance.focus();
  297. return false;
  298. }
  299. refBalance.css('border-color','#ccc');
  300. if (!!selectedTrnasfer){
  301. /* cashboxTransfer */
  302. if (!cashboxTransfer.val()) {
  303. instanceWeb.notification.do_warn("Atencion", "Debes seleccionar una caja general.");
  304. cashboxTransfer.css('border-color','red');
  305. cashboxTransfer.focus();
  306. return false;
  307. }
  308. cashboxTransfer.css('border-color','#ccc');
  309. // amountTransfer
  310. if (transferAmount <= 0) {
  311. instanceWeb.notification.do_warn("Atencion", "El monto a transferir debe ser mayor a 0.");
  312. amountTransfer.css('border-color','red');
  313. amountTransfer.focus();
  314. return false;
  315. }
  316. if (transferAmount > realAmount){
  317. instanceWeb.notification.do_warn("Atencion", "El monto a transferir no puede superar el monto de cierre.");
  318. amountTransfer.css('border-color','red');
  319. amountTransfer.focus();
  320. return false;
  321. }
  322. amountTransfer.css('border-color','#ccc');
  323. /* refTransfer */
  324. if (!refTransfer.val()) {
  325. instanceWeb.notification.do_warn("Atencion", "Debes ingresar el motivo de la transferencia.");
  326. refTransfer.css('border-color','red');
  327. refTransfer.focus();
  328. return false;
  329. }
  330. refTransfer.css('border-color','#ccc');
  331. }
  332. cashBoxConfirm = {
  333. 'statementId': self.id,
  334. 'amountReal': realAmount,
  335. 'refBalance': refBalance.val().trim(),
  336. 'transfer': selectedTrnasfer,
  337. 'statementTransfer': !!selectedTrnasfer ? parseInt(cashboxTransfer.val()) : '',
  338. 'amountTransfer': !!selectedTrnasfer ? transferAmount : 0,
  339. 'refTransfer': !!selectedTrnasfer ? refTransfer.val() : '',
  340. }
  341. /* Confirm Statement */
  342. self.confirm_statement(cashBoxConfirm).then(function(resultsConfirm) {
  343. return resultsConfirm;
  344. }).then(function(resultsConfirm) {
  345. self.reloadPage();
  346. self.removeModal(e);
  347. if (!resultsConfirm)
  348. results = false;
  349. });
  350. defer.resolve(results);
  351. });
  352. /* Click Cerrar */
  353. $('.expired-account-modal').on('hidden.bs.modal', function(e) {
  354. results = false;
  355. defer.resolve(results);
  356. self.removeModal(e);
  357. });
  358. return defer;
  359. },
  360. });
  361. if (openerp.web && openerp.web.FormView) {
  362. openerp.web.FormView.include({
  363. load_record: function(record) {
  364. this._super.apply(this, arguments);
  365. if (this.model !== 'account.bank.statement')
  366. return;
  367. openerp.parentInstanceStatementConfirm = this;
  368. if (openerp.widgetInstanceStatementConfirm) {
  369. openerp.widgetInstanceStatementConfirm.updateId(record.id);
  370. if (this.$el.find('.button-statement-confirm').length !== 0 )
  371. return ;
  372. }
  373. if (this.$el.find('.button-statement-confirm').length !== 0 )
  374. return;
  375. openerp.widgetInstanceStatementConfirm = new openerp.EiruStatementConfirm(this);
  376. var element =this.$el.find('.oe_form').find('.eiru-statement-utility');
  377. openerp.widgetInstanceStatementConfirm.appendTo(element[0]);
  378. openerp.widgetInstanceStatementConfirm.updateId(record.id);
  379. }
  380. });
  381. }
  382. })();