(function() { openerp.widgetInstanceStatementTransfer = null; openerp.parentInstanceStatementTransfer = {}; var QWeb = openerp.web.qweb; var instanceWeb = openerp.web; openerp.EiruStatementTransfer = openerp.Widget.extend({ template: 'EiruStatementUtility.Transfer', id: undefined, buttons: undefined, bankStatement: [], accountJournal :[], statementOpen: [], /** config */ statementConfig: [], resUser: [], statementUser: [], /* init */ init: function(parent) { this._super(parent); this.buttons = parent.$buttons; }, /* start */ start: function () { var self = this this.$el.click(function() { self.fetchInitial(); }); self.buttons.click(function(e) { /* C (Crear) */ if (e.target.accessKey === 'C') self.$el.css('display','none'); /* E (Editar) */ if (e.target.accessKey === 'E') self.$el.css('display','none'); /* S (Guarrdar) */ if (e.target.accessKey === 'S') self.$el.css('display','flex'); /* D (Cancelar) */ if (e.target.accessKey === 'D') self.$el.css('display','flex'); }); }, /* Actualizar Id de la visat actual */ updateId: function(id) { var self = this; self.id = id; }, /* Reload Page*/ reloadPage: function() { openerp.parentInstanceStatementTransfer.reload(); }, /* Description: Función para remover el modal */ removeModal: function() { $('.expired-account-modal').remove(); $('.modal-backdrop').remove(); }, /*Get User*/ fetchGetUserLogin: function(){ var bankStatementUser = new instanceWeb.Model('account.bank.statement'); return bankStatementUser.call('eiru_transfers_get_user', { context: new instanceWeb.CompoundContext() }); }, /* statement Config */ fetchStatementConfigTransfer: function() { var fields = ['id','name','transfer_user_ids','transfer_statement_ids','transfer_negative_amount']; var domain = [['active', '=', true]]; var statementConfig = new openerp.web.Model('account.bank.statement.config'); return statementConfig.query(fields).filter(domain).all(); }, /* Método inicial */ fetchInitial: function() { var self = this; self.fetchBankStatement(self.id).then(function(bankStatement) { return bankStatement; }).then(function(bankStatement) { self.bankStatement = bankStatement; return self.fetchStatementConfigTransfer(); }).then(function(statementConfig){ self.statementConfig = statementConfig; return self.fetchGetUserLogin(); }).then(function(resUser) { self.resUser = resUser; if (!self.statementConfig.length){ instanceWeb.notification.do_warn("Atencion", "No estas autorizado a realizar transferencia, no existe configuración de caja."); return false; } if (!self.resUser.length) { instanceWeb.notification.do_warn("Atencion", "No estas autorizado a realizar transferencia."); return false; } // if (!!self.statementConfig.length && !!self.resUser.length && !!self.bankStatement.length) { if (!!self.bankStatement.length) { var statementConfig = self.statementConfig[0]; var resUser = self.resUser[0]; var statementUser = self.bankStatement[0]; /* Verificar si el tipo caja tiene permiso para la transferencia */ if (!(_.contains(statementConfig.transfer_statement_ids, statementUser.typeStatement))) { instanceWeb.notification.do_warn("Atencion", "El tipo de caja no tiene autorización para realizar transferencia."); return false; } /* Verificar si el usuario tiene permiso para la transferencia*/ if (!(_.contains(statementConfig.transfer_user_ids, resUser.id))) { instanceWeb.notification.do_warn("Atencion", "El usuario no tiene autorización para realizar transferencia."); return false; } } if (self.bankStatement[0].amount <= 0) { if (!self.statementConfig.length){ instanceWeb.notification.do_warn("Atencion", "Caja sin saldo."); return false; } if (!self.statementConfig[0].transfer_negative_amount){ instanceWeb.notification.do_warn("Atencion", "Caja sin saldo."); return false; } } self.fetchAccountJournal(self.id).then(function(accountJournal) { return accountJournal; }).then(function(accountJournal) { self.accountJournal = accountJournal; if (!accountJournal[0].statementJournal.length){ instanceWeb.notification.do_warn("Atencion", "No tienes otra caja abierta para realizar la transferencia."); return false; } return self.showModalTransfer(); }); }); }, /* Account bank Statement */ fetchBankStatement: function(id) { var bankStatement = new instanceWeb.Model('account.bank.statement'); return bankStatement.call('get_account_bank_statement_utility',[id], { context: new instanceWeb.CompoundContext() }); }, /* Account Journal*/ fetchAccountJournal: function(id) { var accountJournal = new instanceWeb.Model('account.bank.statement'); return accountJournal.call('get_account_journal_utility',[id], { context: new instanceWeb.CompoundContext() }); }, /* Get statement Journal */ getStatementJournal(id) { var self = this; var journal = _.filter(self.accountJournal, function(item) { return item.id === id ; }); return _.flatten(_.map(journal, function(map) { return map.statementJournal; })); }, /* Save Statement transfer */ statementCompletTransfers: function(values) { var bankStatementTransfer = new instanceWeb.Model('account.bank.statement'); return bankStatementTransfer.call('statement_complet_transfers',[values], { context: new instanceWeb.CompoundContext() }); }, /*Modal Transfer */ showModalTransfer: function() { var self = this; var defer =$.Deferred(); var results = true; var accountJournal = self.accountJournal; accountJournal.unshift({'name': '', 'id': ''}); var modal = QWeb.render('ModalStatementUtility.Transfer',{ 'journal': accountJournal }); $('.openerp_webclient_container').after(modal); $('.expired-account-modal').modal(); var statementAmount = $('.expired-account-modal').find('.statement-amount'); var statementAmountSymbol = $('.expired-account-modal').find('.statement-amount-symbol'); var selectedJournal = $('.expired-account-modal').find('.selected-Journal'); var statementOpen = $('.expired-account-modal').find('.statement-open-selected'); var amountTransfer = $('.expired-account-modal').find('.amount-transfer'); var amountTransferSymbol = $('.expired-account-modal').find('.amount-transfer-symbol'); var refTransfer = $('.expired-account-modal').find('.ref-transfer'); /* Button */ var buttonSave = $('.expired-account-modal').find('.button-save'); var currency = self.bankStatement[0].currencystatement; /* Monto */ statementAmount.val(instanceWeb.formatCurrency(self.bankStatement[0].amount,currency)); /* Symbol */ statementAmountSymbol.text(currency.symbol); amountTransferSymbol.text(currency.symbol); /*select Journal */ selectedJournal.focus(); selectedJournal.change(function(e) { statementOpen.empty(); var statementJournal = self.getStatementJournal(parseInt(selectedJournal.val())); if (!!statementJournal.length) statementOpen.append(''); _.each(statementJournal, function(item) { statementOpen.append(''); }); }); /* amountTransfer.keyup */ amountTransfer.keyup(function(e) { if (e.key === currency.decimalSeparator && currency.decimalPlaces > 0) return false ; var amount = instanceWeb.unFormatCurrency(amountTransfer.val()); amount = instanceWeb.formatCurrency(amount,currency) amountTransfer.val(amount); amountTransfer.css('border-color','#ccc'); if (e.keyCode === 13) refTransfer.focus(); }); /* amountTransfer.focusout*/ amountTransfer.focusout(function(e) { var amountAvailable = instanceWeb.unFormatCurrency(statementAmount.val()); var amount = Math.abs(instanceWeb.unFormatCurrency(amountTransfer.val())); if (amountAvailable < amount && !self.statementConfig[0].transfer_negative_amount) { instanceWeb.notification.do_warn("Atencion", "El valor a transferir supera el saldo disponible de la caja."); amountTransfer.css('border-color','red'); amountTransfer.focus(); return false; } amountTransfer.css('border-color','#ccc'); amountTransfer.val(instanceWeb.formatCurrency(amount,currency)) }); /* Click buttonSave */ buttonSave.click(function(e){ var amountAvailable = instanceWeb.unFormatCurrency(statementAmount.val()); var amount = instanceWeb.unFormatCurrency(amountTransfer.val()); /* Journal */ if (!selectedJournal.val()) { instanceWeb.notification.do_warn("Atencion", "Debes seleccionar un tipo de pago para continuar."); selectedJournal.css('border-color','red'); selectedJournal.focus(); return false; } selectedJournal.css('border-color','#ccc'); /* Statement Open */ if (!statementOpen.val()) { instanceWeb.notification.do_warn("Atencion", "Debes seleccionar la caja donde vas a transferir."); statementOpen.css('border-color','red'); statementOpen.focus(); return false; } statementOpen.css('border-color','#ccc'); /* ammount transfer*/ if (amount <= 0.00) { instanceWeb.notification.do_warn("Atencion", "El valor a transferir debe ser mayor a cero."); amountTransfer.css('border-color','red'); amountTransfer.focus(); return false; } if (amountAvailable < amount) { if (!self.statementConfig.length){ instanceWeb.notification.do_warn("Atencion", "El valor a transferir supera el saldo disponible de la caja ."); amountTransfer.css('border-color','red'); amountTransfer.focus(); return false; } if (!self.statementConfig[0].transfer_negative_amount){ instanceWeb.notification.do_warn("Atencion", "El valor a transferir supera el saldo disponible de la caja ."); amountTransfer.css('border-color','red'); amountTransfer.focus(); return false; } } amountTransfer.css('border-color','#ccc'); /* Ref transfer */ if (!refTransfer.val()) { instanceWeb.notification.do_warn("Atencion", "Debes de ingresar un motivo para la transferencia."); refTransfer.css('border-color','red'); refTransfer.focus(); return false; } refTransfer.css('border-color','#ccc'); statementTransfer = { 'statementOriginId': self.bankStatement[0].id, 'statementDestinyId': parseInt(statementOpen.val()), 'amountTransfer': amount, 'refTransfer': refTransfer.val().trim(), 'journalID': parseInt(selectedJournal.val()) } /* Save Payments */ self.statementCompletTransfers(statementTransfer).then(function(resultsTransfer) { return resultsTransfer; }).then(function(resultsTransfer) { self.reloadPage(); self.removeModal(e); if (!resultsTransfer) results = false; }); defer.resolve(results); }); /* Click Cerrar */ $('.expired-account-modal').on('hidden.bs.modal', function(e) { results = false; defer.resolve(results); self.removeModal(e); }); return defer; }, }); if (openerp.web && openerp.web.FormView) { openerp.web.FormView.include({ load_record: function(record) { this._super.apply(this, arguments); if (this.model !== 'account.bank.statement') return; openerp.parentInstanceStatementTransfer = this; if (openerp.widgetInstanceStatementTransfer) { openerp.widgetInstanceStatementTransfer.updateId(record.id); if (this.$el.find('.button-statement-transfer').length !== 0 ) return ; } if (this.$el.find('.button-statement-transfer').length !== 0 ) return; openerp.widgetInstanceStatementTransfer = new openerp.EiruStatementTransfer(this); var element =this.$el.find('.oe_form').find('.eiru-statement-utility'); openerp.widgetInstanceStatementTransfer.appendTo(element[0]); openerp.widgetInstanceStatementTransfer.updateId(record.id); } }); } })();