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
JavaScript
(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);
}
}
})();