client-ui
Version:
Testing implementation of nodeJs Backend, angular frontend, and hopefully in a way that this can be deployed to s3/cloudfront
174 lines (156 loc) • 7.06 kB
JavaScript
/* global angular moduleName */
(function () {
"use strict";
angular.module(moduleName).controller("loanOptionsController", loanOptionsController);
loanOptionsController.$inject = ["loan", "$state", "$stateParams", "errorHandler", '$filter', "$scope"];
function loanOptionsController(loan, $state, $stateParams, errorHandler, $filter, $scope) {
var self = this;
self.working = false;
self.true = true; // :)
self.init = function () {
self.errorMessage = "";
self.selectedLoanOffer;
self.selectedMethod;
self.selectedIndex = 0;
self.selectedOfferUnavailable = $stateParams.selectedOfferUnavailable;
loan.getLoanOptions()
.then(function (loanObject) {
self.loan = loan.getCurrentLoan();
var loanOffers = loanObject.loanOfferData.offers;
var durationSort = $filter('orderObjectBy')(loanOffers, 'duration');
self.loanOffers = $filter('orderBy')(durationSort, 'amount', false);
self.totalOffers = self.loanOffers.length;
self.setSpecialOffers();
self.checkCounterOffer();
}, function (error) {
loan.getDenialReasons()
.then(function (reasons) {
errorHandler.checkSorry(reasons, function () {
$state.go("sorry");
});
}, function (denialError) {
$state.go("sorry");
});
});
};
self.setSpecialOffers = function () {
if (self.totalOffers > 0) {
self.maxLoan = self.loanOffers[self.totalOffers - 1];
self.highestOfferAmount = self.maxLoan.amount;
var lowestPaymentLoanFilterArray = $filter('filter')(self.loanOffers, {
amount: self.loan.requestedAmount,
duration: 60
}, true);
if (lowestPaymentLoanFilterArray) {
self.lowestPaymentLoan = lowestPaymentLoanFilterArray[0];
}
var shortestPayoffLoanFilterArray = $filter('filter')(self.loanOffers, {
amount: self.loan.requestedAmount,
duration: 36
}, true);
if (shortestPayoffLoanFilterArray) {
self.shortestPayoffLoan = shortestPayoffLoanFilterArray[0];
}
}
};
self.checkCounterOffer = function () {
if ((self.loan.denialReasons && self.loan.denialReasons[0] === 'REQUESTED_AMOUNT_UNAVAILABLE')
|| (self.loan.denialReasons && self.loan.denialReasons[0] === 'SELECTED_OFFER_UNAVAILABLE')
|| self.selectedOfferUnavailable) {
self.counterOffer = true;
}
};
self.chooseLoanOffer = function (id) {
self.selectedLoanId = id;
self.working = true;
loan.chooseLoanOffer(self.selectedLoanId)
.then(function (loanData) {
self.working = false;
$state.go(loan.getNextStep());
}, function (error) {
self.handleError("There was an error selecting your loan offer.");
});
};
self.getNextStep = function () {
$state.go(loan.getNextStep());
};
self.isSelectedOffer = function (loanOffer) {
if (self.selectedLoanId) {
return self.selectedLoanId === loanOffer.id;
} else if (self.loan.selectedOffer) {
return loanOffer.amount === self.loan.selectedOffer.amount && loanOffer.duration === self.loan.selectedOffer.duration;
}
};
self.specialOfferText = function (loanOfferId) {
// lowest payment requested
if (self.lowestPaymentLoan && self.lowestPaymentLoan.id) {
var lowestPaymentId = self.lowestPaymentLoan.id;
}
if (loanOfferId === lowestPaymentId) {
return 'The lowest monthly payment for the amount you asked for';
}
// lowest payment max
if (loanOfferId === self.maxLoan.id) {
return 'The lowest monthly payment for the most you can borrow';
}
// shortest payoff
if (self.shortestPayoffLoan && self.shortestPayoffLoan.id) {
var shortestPayoftId = self.shortestPayoffLoan.id;
}
if (loanOfferId === shortestPayoftId) {
return 'The fastest way to pay off the loan amount you asked for';
}
return null;
};
self.handleError = function (error) {
self.hasError = true;
self.errorMessage = error;
self.working = false;
};
self.formSubmit = function () {
self.working = true;
loan.updateLoan(self.userInput.loan)
.then(function(loanObj) {
self.working = false;
$state.go('loanApplication.loanOptions');
}, function(errorLoan) {
self.working = false;
error();
});
};
////////////////////////
//MOBILE FUNCTIONALITY//
////////////////////////
self.selectAndContinue = function () {
self.working = true;
var offer = self.loanOffers[self.mobileIndex - 1];
loan.chooseLoanOffer(offer.id)
.then(function (loanData) {
self.working = false;
$state.go(loan.getNextStep());
}, function (error) {
self.handleError("There was an error selecting your loan offer.");
});
};
self.initializeMobileIndex = function () {
if (self.loan.selectedOffer) {
self.loanOffers.forEach(function (offer, index) {
if (offer.amount === self.loan.selectedOffer.amount &&
offer.duration === self.loan.selectedOffer.duration) {
self.initialIndex = index;
}
});
} else {
self.initialIndex = 0;
}
self.mobileIndex = self.initialIndex + 1;
$('.carousel').on('slid.bs.carousel', function () {
self.mobileIndex = $('div.active').index() + 1;
$scope.$digest();
});
};
self.slide = function (direction) {
$('#loanOptionSlider').carousel(direction);
};
}
}());