(function() { openerp.widgetInstancePaymentsInvoices = null; openerp.parentInstancePaymentsInvoices = {}; var QWeb = openerp.web.qweb; var instanceWeb = openerp.web; openerp.EiruPaymentsInvoices = openerp.Widget.extend({ template: 'eiruPaymentsInvoices.Invoices', id: undefined, buttons: undefined, accountInvoice: [], resPartner: [], accountJournal: [], resCompany: [], resCurrency: [], currencySelect: [], ResUser: [], statementOpen: [], /*Move*/ accountMoveLine: [], moveLine:[], movePayments: [], /* bank */ resBankType: [], resBank: [], bankPayments: [], resBankChequeType: [], fieldsAllowed: [], /* account interes */ interestLine: [], interestConfig: [], /* statementConfig */ statementConfig: [], /* Module Cheque */ eiruBankPaymentsReferences: [], eiruAccountBankStatementUtility: [], eiruAccountInterest: [], /* 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.parentInstancePaymentsInvoices.reload(); }, /* Description: Función para remover el modal */ removeModal: function() { $('.expired-account-modal').remove(); $('.modal-backdrop').remove(); }, /* Método inicial */ fetchInitial: function() { var self = this; self.fetchAccountInvoice(self.id).then(function(accountInvoice) { return accountInvoice; }).then(function(accountInvoice) { self.accountInvoice = accountInvoice; console.log(accountInvoice); return self.fetchVerifyModule('eiru_bank_payments_references'); }).then(function(eiruBankPaymentsReferences) { self.eiruBankPaymentsReferences = eiruBankPaymentsReferences; return self.fetchResPartner(); }).then(function(resPartner) { self.resPartner = resPartner; return self.fetchAccountjournal(); }).then(function(accountJournal) { self.accountJournal = accountJournal; return self.fetchResCompany(); }).then(function(resCompany) { self.resCompany = resCompany; return self.fetchResCurrency(); }).then(function(resCurrency) { self.resCurrency = resCurrency; return self.fetchResBanktype(); }).then(function(resBankType) { self.resBankType= resBankType; return self.fetchResBankChecktype(); }).then(function(resBankChequeType) { self.resBankChequeType = resBankChequeType; return self.fetchResBank(); }).then(function(resBank) { self.resBank = resBank; return self.fetchBankPayments(); }).then(function(bankPayments) { self.bankPayments = bankPayments; return self.fetchMoveLine(); }).then(function(accountMoveLine) { self.accountMoveLine = accountMoveLine; return self.fetchVerifyModule('eiru_account_interest'); }).then(function(eiruAccountInterest) { self.eiruAccountInterest = eiruAccountInterest; return self.fetchInterestLine(); }).then(function(interestLine) { self.interestLine = interestLine; return self.fetchInterestConfig() }).then(function(interestConfig) { self.interestConfig = interestConfig; return self.fetchVerifyModule('eiru_account_bank_statement_utility'); }).then(function(eiruAccountBankStatementUtility) { self.eiruAccountBankStatementUtility = eiruAccountBankStatementUtility; return self.fetchStatementConfig(); }).then(function(statementConfig) { self.statementConfig = statementConfig; return self.fetchStatement(); }).then(function(statementOpen) { self.statementOpen = statementOpen; return self.generateMoveLine(); }).then(function(moveLine) { self.moveLine = moveLine; return self.showModalPayments(); }); }, /* Verificar modulo instalados */ fetchVerifyModule: function(module) { if (!module) return []; var moduleModule =new openerp.web.Model('ir.module.module'); var fields = ['id', 'name', 'state']; var domain = [['name', '=', module], ['state', '=', 'installed']]; return moduleModule.query(fields).filter(domain).all(); }, /* Account Invoice */ fetchAccountInvoice: function(ids) { var accountInvoice = new openerp.web.Model('account.invoice'); var fields = ['id', 'number', 'date_invoice', 'amount_total', 'residual', 'partner_id', 'currency_id', 'type' ,'seq_invoice']; var domain = [['id', '=', ids],['state', '=', 'open']]; return accountInvoice.query(fields).filter(domain).all(); }, /* Res partnes */ fetchResPartner: function() { var self = this; if (!self.accountInvoice || !self.accountInvoice.length) return; var partnerId = self.accountInvoice[0].partner_id[0]; var resPartner = new openerp.web.Model('res.partner'); var fields = ['id', 'name','commercial_partner_id']; var domain = [['id', '=', partnerId]]; return resPartner.query(fields).filter(domain).all(); }, /* Account Move Line */ fetchMoveLine: function() { var self = this; var invoiceMoveLine = new openerp.web.Model('account.invoice'); return invoiceMoveLine.call('get_moveline_invoice',[self.id], { context: new openerp.web.CompoundContext() }); }, /* Account Interest Line */ fetchInterestLine: function() { var self = this; if (!self.eiruAccountInterest.length) return []; var moveLineIDS = _.map(self.accountMoveLine, function(map) { return map.id }); var self = this; var invoiceMoveLine = new openerp.web.Model('account.invoice'); return invoiceMoveLine.call('eiru_payments_account_interest_line',[moveLineIDS], { context: new openerp.web.CompoundContext() }); }, /* GET Interets configurations */ fetchInterestConfig: function() { var self = this; if (!self.eiruAccountInterest.length) return []; var fields = ['id','name', 'lock_move_line']; var domain = [['active', '=', true]]; var accountInterestConfig = new openerp.web.Model('account.interest.config'); return accountInterestConfig.query(fields).filter(domain).all(); }, /* Res bank Paymnets */ fetchBankPayments: function() { var self = this; if (!self.eiruBankPaymentsReferences.length) return []; var invoiceBankPayments = new openerp.web.Model('account.invoice'); return invoiceBankPayments.call('get_bank_payments', { context: new openerp.web.CompoundContext() }); }, /* Account Journal Type[BANK, CASH]*/ fetchAccountjournal: function() { var fields = ['id', 'name', 'code', 'type', 'currency', 'default_debit_account_id', 'default_credit_account_id']; var domain = [['active', '=', true], ['type', 'in', ['bank', 'cash']]]; var journalSalario = new openerp.web.Model('account.journal'); return journalSalario.query(fields).filter(domain).all(); }, /* Consultar Compania */ fetchResCompany: function() { var fields = ['id','name', 'currency_id']; var domain = [['id', '=', 1]]; var resCompanyIds = new openerp.web.Model('res.company'); return resCompanyIds.query(fields).filter(domain).all(); }, /* Consultar Bank Type */ fetchResBanktype: function() { var self = this; if (!self.eiruBankPaymentsReferences.length) return []; var invoiceBankPayments = new openerp.web.Model('account.invoice'); return invoiceBankPayments.call('get_bank_payment_type', { context: new openerp.web.CompoundContext() }); }, /* Consultar Bank Check Type */ fetchResBankChecktype: function() { var self = this; if (!self.eiruBankPaymentsReferences.length) return []; var fields = ['id','name', 'code']; var resBnakCheckType = new openerp.web.Model('res.bank.cheque.type'); return resBnakCheckType.query(fields).all(); }, /*Consultar Res Bank */ fetchResBank: function() { var self = this; if (!self.eiruBankPaymentsReferences.length) return []; var fields = ['id', 'name', 'ruc']; var resBank = new openerp.web.Model('res.bank'); return resBank.query(fields).all(); }, /* Consultar Moneda Activas */ fetchResCurrency: function() { var invoicesCurrencyPayments = new openerp.web.Model('account.invoice'); return invoicesCurrencyPayments.call('get_currency_payments_invoices', { context: new openerp.web.CompoundContext() }); }, /* statement Config */ fetchStatementConfig: function() { var self = this; if (!self.eiruAccountBankStatementUtility.length) return []; var fields = ['id','name', 'active', 'import_statement_payments']; var domain = [['active', '=', true]]; var statementConfig = new openerp.web.Model('account.bank.statement.config'); return statementConfig.query(fields).filter(domain).all(); }, /* Get User */ fetchStatement: function(){ var invoiceStatement = new openerp.web.Model('account.invoice'); return invoiceStatement.call('get_statement', { context: new openerp.web.CompoundContext() }); }, /* Generar las cuotas a pagar */ generateMoveLine: function() { var self = this; var moveLine = []; var newMoveLine= []; var defer = $.Deferred(); var currencyInvoice = self.getCurrency(self.accountInvoice[0].currency_id[0]).shift(); _.each(self.accountMoveLine, function(line){ moveLine.push({ 'id': line.id, 'dateMaturity': moment(line.dateMaturity).format('DD/MM/YYYY'), 'debit': line.amountCurrency, 'residual': line.amountResidualCurrency, 'currencyAmount': line.currencyAmount, 'debitFormat': accounting.formatMoney((line.amountCurrency), currencyInvoice.symbol,currencyInvoice.decimalPlaces, currencyInvoice.thousandsSeparator, currencyInvoice.decimalSeparator), 'residualFormat': accounting.formatMoney((line.amountResidualCurrency), currencyInvoice.symbol, currencyInvoice.decimalPlaces, currencyInvoice.thousandsSeparator, currencyInvoice.decimalSeparator) }); }); newMoveLine = _.sortBy(moveLine, function(item){return new Date(item.dateMaturity.trim())}); defer.resolve(newMoveLine); return defer; }, /* Get Move Line */ getMoveLine: function(ids) { var self = this; return _.filter(self.moveLine, function(line){ return _.contains(ids, line.id); }); }, /* Get Move Line Currency */ getMoveLineCurrency: function(currencyAmount, idCurrency) { return _.filter(currencyAmount, function(currency){ return currency.id === idCurrency; }); }, /* Generar lista de cuotas seleccionadas */ generateSelectTotal:function(idSelect, idCurrency){ var self = this; var movePayments = []; var moveCurrency = []; var residual = 0; var move = self.getMoveLine(idSelect); if (!move.length){ return movePayments; } _.each(move, function(line){ moveCurrency = self.getMoveLineCurrency(line.currencyAmount, idCurrency.id).shift(); residual += moveCurrency.amountCurencyResidual; }); movePayments.push({ 'ids': idSelect, 'amountResidual': residual, 'amountResidualFormat': instanceWeb.formatCurrency(residual, idCurrency), 'currencySymbol': idCurrency.symbol, 'currencyRate': idCurrency.rate }); return movePayments; }, /* getCurrency ['filtra la moneda por id'']*/ getCurrency: function(id) { var self = this; return _.filter(self.resCurrency, function(item) { return item.id === id; }); }, /* Obtener la monedad sobre el diario seleccionada */ getCurrencySelect: function(id) { var self = this; var currency = []; if (!id) id = self.resCompany[0].currency_id[0]; currency = self.getCurrency(id); return currency; }, /* Get Journal*/ getJournal: function(code) { var self = this; return _.filter(self.accountJournal, function(item) { return item.code === code; }); }, /* GET fields filter */ getBankTypeFieldsAllowed: function(name) { var self = this; return _.contains(self.fieldsAllowed, name); }, /*Get Bnak */ getResBank: function(id) { var self= this; return _.filter(self.resBank, function(bank) { return bank.id === id; }); }, /* Select Journal Change */ getSelectedJournal: function(code) { var self = this; var currencySelect = [] var journal = self.getJournal(code).shift(); var company = self.resCompany; if (!journal) return []; if (!journal.currency) { currencySelect = self.getCurrency(company[0].currency_id[0]); }else { currencySelect = self.getCurrency(journal.currency[0]); } self.currencySelect = currencySelect; return currencySelect; }, /* verificar si existe el numero de chueque */ checkNumber: function(bankId, numberCta, number) { /** * [verificar si existe el numero de cheque en 'res.bank.paymnets' ] * :param bankId: id de banco (res_bank.id). * :param numberCta: numero de cuneta(res_bank_payments.number_cta). * :param number: numero de cheque/boleta/vale (res_bank_payments.number) * :return : [Objeto] si existe datos que satisfacer el filtro, vacio si no. */ var self = this; if (!self.bankPayments) return []; /* filtar bank Payments */ return _.filter(self.bankPayments, function(item) { return item.bankId === bankId && item.numberCta === numberCta && item.number === number; }); }, /*Obtener cajas del diario seleccionado */ getStatementeJournal: function(journalId) { var self = this; return _.filter(self.statementOpen, function(item){ return item.journalID === journalId; }); }, /* filter type bank operation */ filterTypeOperationBank: function(journal_id){ var self = this; return _.filter(self.resBankType, function(item){ return _.contains(item.journal_ids, journal_id) }); }, /* Get bank */ getTypeOperation(id){ var self = this; return _.filter(self.resBankType, function(item){ return item.id === id; }); }, /* get cheque type */ getBankChequeType: function(id){ var self= this; return _.filter(self.resBankChequeType, function(item){ return item.id === id; }); }, /* FIlter Line interest */ filterInterestLineId:function(moveId){ var self = this; return _.filter(self.interestLine, function(item) { return item.moveLineId === moveId; }); }, /** * [ showModalPayments ] */ showModalPayments: function() { var self = this; var defer =$.Deferred(); var results = true; var accountJournal = self.accountJournal; var moveSelected = []; var selectTotal = []; var currencyId = []; var idRow = []; var bankId = undefined; var numberName = 'Nº Comprobante'; var amountBalanceBank = undefined; var typePayments = undefined; accountJournal.unshift({ 'name': "", 'code': "" }); var modal = QWeb.render('eiruPaymentsInvoices.Modal',{ moveLine: self.moveLine, journal: accountJournal, }); $('.openerp_webclient_container').after(modal); $('.expired-account-modal').modal(); /* Button */ var savePaymentsButton = $('.expired-account-modal').find('.save-payments-button'); /* Table */ var tableRow = $('.expired-account-modal').find('.table-tbody').find('tr'); /* Monto total a pagar - symbol*/ var amountTotal = $('.expired-account-modal').find('.amount-total'); var amountTotalSymbol = $('.expired-account-modal').find('.amount-total-symbol'); /* fecha de operación*/ var dateOperation = $('.expired-account-modal').find('.date-operation'); /* Diario */ var journalSelect = $('.expired-account-modal').find('.journal-select'); /* Monto a pagar - symbolo */ var amountPayments = $('.expired-account-modal').find('.amount-payments'); var amountPaymentsSymbol = $('.expired-account-modal').find('.amount-payments-symbol'); /* Caja */ var statementSelect = $('.expired-account-modal').find('.statement-select'); /* Tipo de operación bancaria */ var bankTypeSelect = $('.expired-account-modal').find('.bank-type-select'); /* banking operation */ var bankingOperation = $('.expired-account-modal').find('.eiru-banking-operation'); /* Disabled paymentsAmount */ amountPayments.attr("disabled", true); /* Date Now */ dateOperation.val(moment().format("YYYY-MM-DD")); /* Desabilitar Chech de la Table */ var dateMin = undefined; var rowselect = undefined; var dateSelect = undefined; /*get currency invoices*/ var currencyInvoice = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift(); if (currencyInvoice) { amountTotalSymbol.text(currencyInvoice.symbol); amountPaymentsSymbol.text(currencyInvoice.symbol); } /* Disabled Chech Moveline */ _.each(tableRow, function(tr) { var ckechk = ($($(tr).children()[1]).find('.select-move-payments'))[0].checked; var dateMatu = new Date(($(tr).children()[2].textContent).trim()); if (!ckechk) { if (!dateMin) { dateMin = dateMatu.getTime(); } else { $($(tr).children()[1]).find('.select-move-payments').attr("disabled", true); } } var idMove = parseInt(($(tr).children()[0].textContent).trim()); if (!!self.interestConfig.length && self.interestConfig[0].lock_move_line) { var move = self.filterInterestLineId(idMove); var moveState = _.map(move, function(map) { return map.state }) if (_.contains(moveState, 'open')) { ($($(tr).children()[1]).find('.select-move-payments'))[0].checked = false; $($(tr).children()[1]).find('.select-move-payments').attr("disabled", true); $($(tr).children()[3]).text("Existe interés sobre la cuota vencida REF("+move[0].interest[0].name+").") } } }); /* Selecionar las cuotas */ tableRow.click(function(e) { if ($(e.target).index() !== 0) return; idRow = parseInt(($(e.target).closest('tr').children()[0].textContent).trim()); if (e.target.checked === true) { moveSelected.push(idRow); currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift(); if (journalSelect.val()) { currencyId = self.getSelectedJournal(journalSelect.val()).shift(); } self.movePayments = self.generateSelectTotal(moveSelected,currencyId); selectTotal = self.movePayments[0]; if (selectTotal) { /*total a pagar*/ amountTotal.val(selectTotal.amountResidualFormat); amountTotalSymbol.text(selectTotal.currencySymbol); /*Monto a pagar */ amountPayments.val(selectTotal.amountResidualFormat); amountPaymentsSymbol.text(selectTotal.currencySymbol); } dateMin = undefined; rowselect = undefined; dateSelect = undefined; _.each(tableRow, function(tr) { var dateMatu = new Date(($(tr).children()[2].textContent).trim()); var ckechk = ($($(tr).children()[1]).find('.select-move-payments'))[0].checked; if (ckechk) { if (!rowselect) { rowselect = $($(tr).children()[1]).find('.select-move-payments'); dateSelect = dateMatu.getTime(); } else { if (dateMatu.getTime() > dateSelect) { rowselect.attr("disabled", true); rowselect = $($(tr).children()[1]).find('.select-move-payments'); dateSelect = dateMatu.getTime(); } else { $($(tr).children()[1]).find('.select-move-payments').attr("disabled", true); } } } else { if (!dateMin) { dateMin = dateMatu.getTime(); var moveId = parseInt(($(tr).children()[0].textContent).trim()); $($(tr).children()[1]).find('.select-move-payments').removeAttr("disabled"); if (!!self.interestConfig.length && self.interestConfig[0].lock_move_line) { var move = self.filterInterestLineId(moveId); var moveState = _.map(move, function(map) { return map.state; }); if ((_.contains(moveState, 'open'))) { $($(tr).children()[1]).find('.select-move-payments').attr("disabled", true); } } } } }); } else { var indexRow = undefined; _.each(moveSelected, function(input, index) { if (input === idRow) { indexRow = index; } }); moveSelected.splice(indexRow,1); if (journalSelect.val()) { currencyId = self.getSelectedJournal(journalSelect.val()).shift(); }else { currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift(); } self.movePayments = self.generateSelectTotal(moveSelected,currencyId); selectTotal = self.movePayments[0]; if (selectTotal) { amountTotal.val(selectTotal.amountResidualFormat); amountTotalSymbol.text(selectTotal.currencySymbol); /*Monto a pagar */ amountPayments.val(selectTotal.amountResidualFormat); amountPaymentsSymbol.text(selectTotal.currencySymbol); } else { amountTotal.val(0); amountTotalSymbol.text(currencyId.symbol); /*Monto a pagar */ amountPayments.val(0); amountPaymentsSymbol.text(currencyId.symbol); } dateMin = undefined; rowselect = undefined; dateSelect = undefined; _.each(tableRow, function(tr) { var dateMatu = new Date(($(tr).children()[2].textContent).trim()); var ckechk = ($($(tr).children()[1]).find('.select-move-payments'))[0].checked; if (ckechk) { rowselect = $($(tr).children()[1]).find('.select-move-payments'); dateSelect = dateMatu.getTime(); } else { if (rowselect) rowselect.removeAttr("disabled"); if (!dateMin) { dateMin = dateMatu.getTime(); } else { $($(tr).children()[1]).find('.select-move-payments').attr("disabled", true); } } }); } }); /* Cambio en el método de pago */ journalSelect.change(function(e) { var journal = []; bankingOperation.empty(); statementSelect.val(''); if (journalSelect.val()) { journal = self.getJournal(journalSelect.val()).shift(); if (!!journal) { amountPayments.removeAttr("disabled"); /* statement Open */ if (!!self.eiruAccountBankStatementUtility.length) { if(!!self.statementConfig.length) { if (self.statementConfig[0].import_statement_payments === 'manual_import') { var statement = self.getStatementeJournal(journal.id); /* Generar lista de caja abiertas. */ $('.expired-account-modal').find('.statement-config').css('display','none'); statementSelect.empty(); if (!!statement.length) { $('.expired-account-modal').find('.statement-config').css('display','flex'); var cashboxOpen = ''; _.each(statement, function(item) { cashboxOpen += ''; }); statementSelect.append(cashboxOpen); } } } } /* Type operación bank */ typeOperationBank = self.filterTypeOperationBank(journal.id); bankTypeSelect.empty(); self.fieldsBank = []; $('.expired-account-modal').find('.type-select-bank').css('display','none'); if (!!typeOperationBank.length) { $('.expired-account-modal').find('.type-select-bank').css('display','flex'); var typeOperation = ''; _.each(typeOperationBank, function(item) { typeOperation += ''; }); bankTypeSelect.append(typeOperation); } } currencyId = self.getSelectedJournal(journalSelect.val()).shift(); } else { amountPayments.attr("disabled", true); currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift(); } self.movePayments = self.generateSelectTotal(moveSelected,currencyId); selectTotal = self.movePayments[0]; if (selectTotal) { /*total a pagar*/ amountTotal.val(selectTotal.amountResidualFormat); amountTotalSymbol.text(selectTotal.currencySymbol); /*Monto a pagar */ amountPayments.val(selectTotal.amountResidualFormat); amountPaymentsSymbol.text(selectTotal.currencySymbol); } }); /* Typo de pago */ bankTypeSelect.change(function(e) { bankingOperation.empty(); if (!bankTypeSelect.val()) return false; var typeBank = self.getTypeOperation(parseInt(bankTypeSelect.val())).shift(); typePayments = typeBank; var fields = ''; var cont = 0; var fieldsBank = []; _.each(typeBank.fields_allowed, function(item, index) { if (cont === 0) fields += '
'; cont ++; var fieldModel = []; var typeText ="text"; var select = "payments-"; var classField = select.concat(item.name.replace(/_/g, '-')); if (item.string.typeField === 'date') typeText = "date"; fields += '
'; fields += ''; fields += '
'; if (item.string.type === 'normal') { if (item.string.typeField === 'float') { fields += ''; fields += '
'; fields += ''+currencyId.symbol+''; fields += '
'; } else { fields += ''; } } else { var test = item.string.model.split("."); var newModel = ""; _.each(test, function(item, index) { if (index === 0 ){ newModel = item; } else { var newLetter = ""; _.each(item, function(inv, index) { if (index === 0) { newLetter = inv.toUpperCase(); }else { newLetter = newLetter.concat(inv); } }); newModel = newModel.concat(newLetter); } }) fieldModel = _.flatten(_.filter(self, function(element, index) { return index === newModel; })); if (item.string.searchType === 'selection') { fields += ''; } else { fields += ''; } } fields += '
'; fields += '
'; if (cont === 2 || (index +1 ) === typeBank.fields_allowed.length) { fields += '
'; cont = 0; } /* Tyoe Field */ fieldsBank.push({ 'field': classField, 'name': item.name, 'required': item.string.required, 'label': item.label, 'type': item.string.typeField, 'model': fieldModel, 'modelAutoComplete': _.map(fieldModel, function(item) { return { label: item.id +" - "+ item.name, value: item.id +" - "+ item.name }; }), 'searchType': item.string.searchType, }); }); self.fieldsBank = fieldsBank; bankingOperation.append(fields); /* AutoComplete*/ _.each(_.filter(fieldsBank, function(item){return item.searchType === 'autocomplete'}), function(autoComplete) { var fieldComplete = $('.expired-account-modal').find('.'+autoComplete.field); fieldComplete.autocomplete({ source: autoComplete.model, minLength:0, }) }) }); /** * [Keyup] */ $('.expired-account-modal').keyup(function(e){ var nameClas = (($(e.target)[0].className).trim()).split(" "); /* fields Amount Currency */ if (_.contains(nameClas, 'amount-currency')) { var ammountBank = $('.expired-account-modal').find('.'+nameClas[nameClas.length -1]); if (journalSelect.val()) { currencyId = self.getSelectedJournal(journalSelect.val()).shift(); } else { currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift(); } var amount_add = instanceWeb.unFormatCurrency(ammountBank.val()); ammountBank.val(instanceWeb.formatCurrency(amount_add,currencyId)); ammountBank.css('border-color','#ccc'); } /* AutoComplete */ if (_.contains(nameClas, 'ui-autocomplete-input')) { _.each(_.filter(self.fieldsBank, function(item){return item.searchType === 'autocomplete'}), function(autoComplete) { if (nameClas[nameClas.length -1] === autoComplete.field) { var fieldComplete = $('.expired-account-modal').find('.'+autoComplete.field); fieldComplete.autocomplete({ source: autoComplete.modelAutoComplete, minLength:0, select: function(e, ui) { var id = undefined; if (!!ui.item.value) id = ui.item.value.split('-'); }, }) } }); } }); /** * [focusout] */ $('.expired-account-modal').focusout(function(e){ var nameClas = (($(e.target)[0].className).trim()).split(" "); /** * [Verify amount-total] */ if (_.contains(nameClas, 'payments-amount-total')){ var ammountBank = $('.expired-account-modal').find('.'+nameClas[nameClas.length -1]) currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift(); if (journalSelect.val()) currencyId = self.getSelectedJournal(journalSelect.val()).shift(); var amount_add = instanceWeb.unFormatCurrency(ammountBank.val()); var paymentsAmount = instanceWeb.unFormatCurrency(amountPayments.val()); var paymentsTotal = instanceWeb.unFormatCurrency(amountTotal.val()); if (amount_add <= 0){ openerp.web.notification.do_warn("Atencion", "El valor debe ser mayor que 0"); ammountBank.css('border-color','red'); ammountBank.focus(); return false; } if (amount_add < paymentsAmount) { amountPayments.val(instanceWeb.formatCurrency(amount_add, currencyId)); } ammountBank.val(instanceWeb.formatCurrency(amount_add, currencyId)); } /** * [Verify Bank Selected] */ if (_.contains(nameClas, 'payments-bank-id')) { var bankSelected = $('.expired-account-modal').find('.'+nameClas[nameClas.length -1]); var valueBank = bankSelected.val(); if (_.contains(nameClas, 'ui-autocomplete-input')) valueBank = (valueBank.split('-'))[0]; if (!bankSelected.val()) { openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar un banco para continuar."); bankSelected.css('border-color','red'); bankSelected.focus(); return false; } var bankValue = self.getResBank(parseInt(valueBank)).shift(); if (!bankValue) { openerp.web.notification.do_warn("Atencion", "El banco no existe, ingrese un banco valido."); bankSelected.css('border-color','red'); bankSelected.focus(); return false; } bankSelected.css('border-color','#ccc'); bankId = bankValue.id } /** * [Verify Cheque type] */ if (_.contains(nameClas, 'payments-cheque-type-id')){ var typeChequeSelected = $('.expired-account-modal').find('.'+nameClas[nameClas.length -1]); var valuetype = typeChequeSelected.val(); if (_.contains(nameClas, 'ui-autocomplete-input')) valuetype = (valuetype.split('-'))[0]; if (!typeChequeSelected.val()) { openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar el tipo de cheque para continuar."); typeChequeSelected.css('border-color','red'); typeChequeSelected.focus(); return false; } var chequeTypeValue = self.getBankChequeType(parseInt(valuetype)).shift(); if (!chequeTypeValue) { openerp.web.notification.do_warn("Atencion", "Tipo de cheque no existe , ingrese un tipo de cheque valido."); typeChequeSelected.css('border-color','red'); typeChequeSelected.focus(); return false; } typeChequeSelected.css('border-color','#ccc'); } /** * [Verify Bank Paymnets] */ if ((_.contains(nameClas, 'payments-bank-id')) || (_.contains(nameClas, 'payments-number')) || (_.contains(nameClas, 'payments-number-cta'))){ var fieldsPayments = _.map(self.fieldsBank, function(map){ return map.field }); if ((_.contains(fieldsPayments, 'payments-bank-id')) && (_.contains(fieldsPayments, 'payments-number')) && (_.contains(fieldsPayments, 'payments-number-cta'))){ var paymentsBankId = $('.expired-account-modal').find('.payments-bank-id'); var paymentsNumber = $('.expired-account-modal').find('.payments-number'); var paymentsNumberCta = $('.expired-account-modal').find('.payments-number-cta'); if (!!bankId && !!paymentsNumber.val() && paymentsNumberCta.val() && !(typePayments.allow_duplicate_operation)) { var chechNumberCh = self.checkNumber(bankId, paymentsNumberCta.val().trim(), paymentsNumber.val().trim()).shift(); self.verifyOperacionBank(chechNumberCh, amountPayments, currencyId, typePayments); } } } }); /* Total a pagar keyup */ amountPayments.keyup(function(e) { currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift(); if (journalSelect.val()) { currencyId = self.getSelectedJournal(journalSelect.val()).shift(); } if (e.key === currencyId.decimalSeparator && currencyId.decimalPlaces > 0) return false ; var amount_add = instanceWeb.unFormatCurrency(amountPayments.val()); amountPayments.val(instanceWeb.formatCurrency(amount_add, currencyId)); amountPayments.css('border-color','#ccc'); if (e.keyCode === 13) savePaymentsButton.focus(); }); /* focusout */ amountPayments.focusout(function(e) { currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift(); if (journalSelect.val()) { currencyId = self.getSelectedJournal(journalSelect.val()).shift(); } var amountTotalPayments = instanceWeb.unFormatCurrency(amountPayments.val()); var paymentsTotal = instanceWeb.unFormatCurrency(amountTotal.val()); if (amountTotalPayments <= 0) { openerp.web.notification.do_warn("Atencion", "El monto a pagar no puede ser 0."); amountPayments.css('border-color','red'); amountPayments.focus(); } var fields = ""; $('.expired-account-modal').find('.ammount-returned').css('display','none'); $('.expired-account-modal').find('.ammount-returned').empty(); if (amountTotalPayments > paymentsTotal) { var returned = (instanceWeb.formatCurrency((amountTotalPayments - paymentsTotal), currencyId)); $('.expired-account-modal').find('.ammount-returned').css('display','flex'); fields += ''; fields += '
'; fields += ''; fields += '
'; fields += ''+currencyId.symbol+''; fields += '
'; fields += '
'; $('.expired-account-modal').find('.ammount-returned').append(fields); } }); /* Save Payments */ savePaymentsButton.click(function(e) { var savePayments = []; var paymentsAmount = 0; var currencyJournal = []; var journal = []; var chechNumberCh = []; /* Verificar si se selecciono algunas cuotas */ if (!self.movePayments ||!self.movePayments.length) { openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar al menos una cuota para continuar."); return false; } /* Verificar si se seleccionado el método de pago */ if (!journalSelect.val()) { openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar un método de pago para continuar."); journalSelect.css('border-color','red'); journalSelect.focus(); return false; } journalSelect.css('border-color','#ccc'); journal = self.getJournal(journalSelect.val()); currencyJournal = self.getSelectedJournal(journalSelect.val()).shift(); paymentsAmount = instanceWeb.unFormatCurrency(amountPayments.val()); /* verificar si fue ingresado el monto a pagar */ if (paymentsAmount <= 0 ) { openerp.web.notification.do_warn("Atencion", "El monto a pagar no debe ser 0."); amountPayments.css('border-color','red'); amountPayments.focus(); return false; } amountPayments.css('border-color','#ccc'); /* Verificar Caja */ var statement = self.getStatementeJournal(journal[0].id); if (!!self.eiruAccountBankStatementUtility.length){ if (!!self.statementConfig.length) { if (!!statement.length && !statementSelect.val() && self.statementConfig[0].import_statement_payments === 'manual_import'){ openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar una caja para continuar."); statementSelect.css('border-color','red'); statementSelect.val(); return false; } } } statementSelect.css('border-color','#ccc'); typeOperationBank = self.filterTypeOperationBank(journal[0].id); if (!!typeOperationBank.length && !bankTypeSelect.val()){ openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar el tipo de pago para continuar ."); bankTypeSelect.css('border-color','red'); bankTypeSelect.focus(); return false; } bankTypeSelect.css('border-color','#ccc'); /** * [Verificar Datos de Operación bancarias] */ var fieldsBankRequired = self.verifyFields().shift(); if (fieldsBankRequired) { var fields = $('.expired-account-modal').find('.'+fieldsBankRequired.field); if (fieldsBankRequired.required) { openerp.web.notification.do_warn("Atencion", "El campo "+fieldsBankRequired.label+" es obligatorio."); fields.css('border-color','red'); fields.focus(); return false; } } /** * [Verificar Operacion bancarias] */ var fieldsPayments = _.map(self.fieldsBank, function(map){ return map.field }); if ((_.contains(fieldsPayments, 'payments-bank-id')) && (_.contains(fieldsPayments, 'payments-number')) && (_.contains(fieldsPayments, 'payments-number-cta'))){ var paymentsBankId = $('.expired-account-modal').find('.payments-bank-id'); var paymentsNumber = $('.expired-account-modal').find('.payments-number'); var paymentsNumberCta = $('.expired-account-modal').find('.payments-number-cta'); if (!!bankId && !!paymentsNumber.val() && paymentsNumberCta.val() && !(typePayments.allow_duplicate_operation)) { var chechNumberCh = self.checkNumber(bankId, paymentsNumberCta.val().trim(), paymentsNumber.val().trim()).shift(); if (! self.verifyOperacionBank(chechNumberCh, amountPayments, currencyId, typePayments)) return false; } } /* */ var bankOperation = {}; var fiedsConcat = '{'; var contobjetc=0 _.each(self.fieldsBank, function(item, index, list) { var fieldwidget = $('.expired-account-modal').find('.'+item.field); var fieldsValue = undefined; if(!!fieldwidget.val()) fieldsValue = '"'+fieldwidget.val()+'"'; if (_.contains(['many2one', 'many2many', 'one2many'], item.type)) { fieldsValue = parseInt(fieldwidget.val().trim()); if (item.searchType === 'autocomplete') { var valueFieds = fieldwidget.val().split('-'); fieldsValue = parseInt(valueFieds[0].trim()); } } if (_.contains(['float','int'], item.type)){ fieldsValue = instanceWeb.unFormatCurrency(fieldwidget.val()); if (fieldsValue <= 0) fieldsValue = ""; } if (!!fieldsValue){ if(contobjetc > 0) fiedsConcat = fiedsConcat.concat(','); fiedsConcat = fiedsConcat.concat('"'+item.name+'": '+fieldsValue); contobjetc++ } }); fiedsConcat = fiedsConcat.concat('}'); bankOperation = JSON.parse(fiedsConcat) if (bankOperation) { bankOperation.bank_payments_type_id = parseInt(bankTypeSelect.val()) } /* Save object */ savePayments = { 'invoiceId': self.accountInvoice[0].id, 'JournalId': journal[0].id, 'partnerId': self.resPartner[0].id , 'amountPayments': self.movePayments[0].amountResidual < paymentsAmount ? self.movePayments[0].amountResidual : paymentsAmount, 'moveLines': self.movePayments[0].ids, 'JournalType': journal[0].type, 'statementId': !!statementSelect.val() ? parseInt(statementSelect.val()) : '', 'bankPayments': bankOperation, 'voucherName' : !!($('.expired-account-modal').find('.voucher-name').val()).trim() ?$('.expired-account-modal').find('.voucher-name').val() : '', 'voucherObs' : !!($('.expired-account-modal').find('.voucher-obs').val()).trim() ?$('.expired-account-modal').find('.voucher-obs').val() : '', 'voucherSeq': self.accountInvoice[0].seq_invoice, 'datePayments': dateOperation.val(), }; /* Save Payments */ $('.expired-account-modal').find('.widget-content.widget-loading-payments').css('display','flex'); self.savePaymentsInvoice(savePayments).then(function(resultsPayments) { return resultsPayments; }).then(function(resultsPayments) { self.reloadPage(); $('.expired-account-modal').find('.widget-content.widget-loading-payments').css('display','none'); self.removeModal(e); if (!resultsPayments) results = false; }); defer.resolve(results); }); /* Cerrar */ $('.expired-account-modal').on('hidden.bs.modal', function(e) { results = false; defer.resolve(results); self.removeModal(e); }); return defer; }, /* Verificar Operation Bank */ verifyOperacionBank: function(chechNumberCh, amountPayments, currencyId, typePayments){ var self = this; var paymentsChequeTypeId = $('.expired-account-modal').find('.payments-cheque-type-id'); var paymentsNameHolder = $('.expired-account-modal').find('.payments-name-holder'); var paymentsAmountTotal = $('.expired-account-modal').find('.payments-amount-total'); var paymentsDateMaturity = $('.expired-account-modal').find('.payments-date-maturity'); /* Clear */ if (!chechNumberCh) { if (paymentsChequeTypeId.length) { paymentsChequeTypeId.removeAttr("disabled"); paymentsChequeTypeId.css('background-color', 'white'); } if (paymentsNameHolder.length) { paymentsNameHolder.removeAttr("disabled"); paymentsNameHolder.css('background-color', 'white'); } if (paymentsAmountTotal.length) { paymentsAmountTotal.removeAttr("disabled"); paymentsAmountTotal.css('background-color', 'white'); } if (paymentsDateMaturity.length) { paymentsDateMaturity.val(moment().format("YYYY-MM-DD")); paymentsDateMaturity.removeAttr("disabled"); paymentsDateMaturity.css('background-color', 'white'); } return true } if(chechNumberCh.state !== 'available') { openerp.web.notification.do_warn("Atencion", ""+typePayments.name+" no disponible "); return false; } if (paymentsChequeTypeId.length) { var classPayments =((paymentsChequeTypeId[0].className).trim()).split(" "); var typeCheque = chechNumberCh.chequeTypeId; if (_.contains(classPayments, 'ui-autocomplete-input')){ var chequeTypeValue = self.getBankChequeType(parseInt(chechNumberCh.chequeTypeId)).shift(); if (chequeTypeValue) typeCheque = chequeTypeValue.id+" - "+chequeTypeValue.name; } paymentsChequeTypeId.val(typeCheque); paymentsChequeTypeId.attr("disabled", true); paymentsChequeTypeId.css('background', '#eee'); } if (paymentsNameHolder.length) { paymentsNameHolder.val(chechNumberCh.nameHolder); paymentsNameHolder.attr("disabled", true); paymentsNameHolder.css('background', '#eee'); } if (paymentsAmountTotal.length) { paymentsAmountTotal.val(instanceWeb.formatCurrency(chechNumberCh.amountTotal, currencyId)); paymentsAmountTotal.attr("disabled", true); paymentsAmountTotal.css('background', '#eee'); } if (paymentsDateMaturity.length) { paymentsDateMaturity.val(chechNumberCh.dateMaturity); paymentsDateMaturity.attr("disabled", true); paymentsDateMaturity.css('background', '#eee'); } var paymentsAmount = instanceWeb.unFormatCurrency(amountPayments.val()); var totalBank = 0; var amountBank = 0; var amountRefund = 0; totalBank = chechNumberCh.amountTotal; /* factura ventas */ if ((self.accountInvoice[0].type === 'out_invoice') || (self.accountInvoice[0].type === 'in_refund')) { amountBank = chechNumberCh.amountReceipt; if (self.accountInvoice[0].type === 'in_refund') amountRefund = chechNumberCh.amountReceipt; } /*factura compras/gastos */ if ((self.accountInvoice[0].type === 'in_invoice') || (self.accountInvoice[0].type === 'out_refund')) { amountBank = chechNumberCh.amountPayment; if (self.accountInvoice[0].type === 'out_refund') amountRefund = chechNumberCh.amountPayment; } /* verificar saldo disponible */ if (totalBank <= amountBank) { openerp.web.notification.do_warn("Atencion", typePayments.name + " sin saldo disponible."); return false; } /* verificar si el monto a pagar no es mayor al monto disponible */ amountBalanceBank = (totalBank - amountBank); var amountBalanceBankFoirmat = instanceWeb.formatCurrency(amountBalanceBank, currencyId); if (paymentsAmount > amountBalanceBank) { openerp.web.notification.do_warn("Atencion", "El monto a pagar supera al saldo disponible del.\n Saldo disponible = "+amountBalanceBankFoirmat); amountPayments.css('border-color','red'); amountPayments.focus(); return false; } /* Focus button 'Guaradar' */ $('.expired-account-modal').find('.save-payments-button').focus(); return true }, /* Verify Bank Field */ verifyFields: function(){ var self = this; return _.filter(self.fieldsBank, function(item) { var field = $('.expired-account-modal').find('.'+item.field); field.css('border-color','#ccc'); return item.required && !(field.val().trim()); }); }, /* Guaradar Pagos */ savePaymentsInvoice: function(savePayments) { var self = this; var invoiceUpdate = new openerp.web.Model('account.invoice'); return invoiceUpdate.call('save_payments_invoice',[savePayments], { context: new openerp.web.CompoundContext() }); }, }); if (openerp.web && openerp.web.FormView) { openerp.web.FormView.include({ load_record: function(record) { this._super.apply(this, arguments); if (this.model !== 'account.invoice') return; openerp.parentInstancePaymentsInvoices = this; if (record.state !== 'open') return; if (openerp.widgetInstancePaymentsInvoices) { openerp.widgetInstancePaymentsInvoices.updateId(record.id); if (this.$el.find('.button-payments-invoices').length !== 0 ) return ; } if (this.$el.find('.button-payments-invoices').length !== 0 ) return; openerp.widgetInstancePaymentsInvoices = new openerp.EiruPaymentsInvoices(this); var element =this.$el.find('.oe_form').find('.eiru-payments-invoices'); openerp.widgetInstancePaymentsInvoices.appendTo(element[0]); openerp.widgetInstancePaymentsInvoices.updateId(record.id); } }); } })();