UNPKG

client-ui

Version:

Testing implementation of nodeJs Backend, angular frontend, and hopefully in a way that this can be deployed to s3/cloudfront

198 lines (170 loc) 8.42 kB
(function () { 'use strict'; angular.module(moduleName).controller('verifyBankController', verifyBankController); verifyBankController.$inject = ['$filter', '$state', 'loan', 'client', 'requiredDisclosures', 'util']; function verifyBankController($filter, $state, loanService, clientService, requiredDisclosures, util) { var self = this; self.verifyBank = verifyBank; self.verifyTrialDeposits = verifyTrialDeposits; self.requiredDisclosures = requiredDisclosures; self.hasFundingAcct = loanService.hasFundingAcct; self.hasServicingAcct = loanService.hasServicingAcct; self.goToNextStep = goToNextStep; self.scrollTo = scrollTo; self.setSubmitBtn = setSubmitBtn; self.init = init; self.bankAccount = { accountNo: '', routingNo: '', type: 'bank' }; config.enableBootstrapJsElements(); function init() { self.currentLoan = loanService.getCurrentLoan(); self.currentLoan.validBank = loanService.validBankAcct(); self.errorMessage = ''; self.payMethod = self.currentLoan.payMethod || { name: '', confirmed: false }; if (self.currentLoan.bank && self.currentLoan.bank.trialDeposits) { var plural = self.currentLoan.bank.trialDeposits.count > 1 ? "s" : ""; self.trialDepositLoopCount = new Array(self.currentLoan.bank.trialDeposits.count); self.currentLoan.bank.trialDeposits.amounts = []; for (var i = 0; i < self.currentLoan.bank.trialDeposits.count; i++) { self.currentLoan.bank.trialDeposits.amounts.push(''); } self.trialDepositIntro1 = "To verify that the bank information you provided is correct and your money will go to the right place," + " we sent " + self.currentLoan.bank.trialDeposits.count + " small test deposit" + plural + " to account ****" + self.currentLoan.bank.trialDeposits.accountLast4 + " on " + $filter('date')(self.currentLoan.bank.trialDeposits.initiatedTimestamp, 'M/d/yyyy') + "."; self.trialDepositIntro2 = "We need you to confirm the specific amount" + plural + " deposited. You should see " + (plural ? "them" : "it") + " in your bank transaction history within 1-3 business days. When you find the deposit" + plural + ", please enter the amount" + plural + " in the field" + plural + " below."; } self.Popover = { content: 'Hello, World!', templateUrl: 'templates/bank-popover.html', title: 'Bank Account Details' }; setSubmitBtn(); } function verifyBank() { self.working = true; self.errorMessage = null; loanService.addBankAccount(self.bankAccount, self.currentLoan.payMethod.name) .then(function (loan) { //check to see if last account added is valid and redirect accordingly... var acct = lastAccountAdded(loan); self.working = false; if (acct && acct.valid) { return self.goToNextStep(); } //...otherwise re-init, set loan on scope, and hopefully show trial deposit screen self.init(); if (!(self.currentLoan.bank && self.currentLoan.bank.trialDeposits)) { handleError(); } }, handleError); } function verifyTrialDeposits() { self.working = true; loanService.verifyTrialDeposits(self.currentLoan.bank.trialDeposits.amounts, self.currentLoan.payMethod.name) .then(function (loan) { self.working = false; self.init(); if (!self.currentLoan.bank || !self.currentLoan.bank.fundingAccountNo) { handleError(); } else { self.goToNextStep(); } }, handleError); } function setPayMethod() { self.working = true; loanService.setPayMethod(self.currentLoan.payMethod.name) .then(function (loan) { self.currentLoan = loan; self.working = false; return $state.go(loanService.getNextStep()); }, function (err) { self.working = false; self.errorMessage = 'Sorry, we couldn\'t update your payment method.'; }); } function lastAccountAdded(loan) { var lastAcct = null; if (loan.bank && loan.bank.accounts) { lastAcct = loan.bank.accounts.slice(-1)[0]; } return lastAcct; } function handleError(err) { self.working = false; self.errorMessage = "Oops! We couldn't verify this bank account"; self.errorMessage += errorMessage(err); } function errorMessage(err) { var err = err || {}; var code = err.code || ''; var message = ''; switch(code) { case 'NO_MATCH': message = 'Trial deposit amounts do not match actual deposits on record.'; if (err.remainingAttempts) { message += ' You have ' + err.remainingAttempts; if (err.remainingAttempts > 1) { message += ' attempts remaining.'; } else { message += ' attempt remaining.'; } } break; case 'OVER_MAX_ATTEMPTS': message = 'You have reached the maximum allowed incorrect guesses.'; if (globalConfig.company && globalConfig.company.phone && globalConfig.company.phone.dash) { message += ' Please contact ' + globalConfig.company.phone.dash + ' to proceed'; } break; } if (!message && err.mesg) { message = err.mesg; } message = message ? ': ' + message : '.'; return message; } function goToNextStep() { var nextStep = loanService.getNextStep(); //refresh client here to see if we have to request ID doc clientService.getClient().then(function (client) { if (nextStep.indexOf('loanApplication.verify.income') === 0) { //income may have been verified, refresh here to find out loanService.refreshCurrentLoanFromDB().then(function (loan) { $state.go(loanService.getNextStep()); }, function (err) { $state.go(nextStep); }); } else { $state.go(loanService.getNextStep()); } }, function (err) { $state.go(nextStep); }); } function setSubmitBtn() { if (self.currentLoan.bank && self.currentLoan.bank.trialDeposits) { self.submit = verifyTrialDeposits; self.submitBtnText = 'Verify ' + (self.currentLoan.bank.trialDeposits.count > 1 ? 'Deposits' : 'Deposit'); } else if (self.currentLoan.validBank && !self.payMethod.name) { self.submit = setPayMethod; self.submitBtnText = 'Verify Payment Method'; } else if (self.hasServicingAcct() || (self.currentLoan.validBank && self.payMethod.name)) { self.submit = goToNextStep; self.submitBtnText = 'Continue'; } else { self.submit = verifyBank; self.submitBtnText = 'Continue'; } } function scrollTo(elId) { util.scrollToElement('#'+elId, 100); } } })();