Guest User

Untitled

a guest
Dec 9th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /** @module ProposalCalculations */
  2.  
  3. const LAMBDA_NAME = 'loanpal-getMonthlyPayments'
  4. const LambdaHelper = require('./LambdaHelperV2.js')
  5. const fs = require('fs')
  6. const request = require('request')
  7.  
  8. exports.handler = async (event, context) => {
  9.     const originalEvent = JSON.parse(JSON.stringify(event))
  10.  
  11.     try {
  12.         LambdaHelper.validateEvent(event, ['body', 'alias', 'api_base_url', 'api_environment', 'api_version'])
  13.         LambdaHelper.validateEvent(event.body, ['fundSetup', 'fund'])
  14.         LambdaHelper.validateEvent(event.body.fundSetup, ['Term_In_Months__c', 'Interest_Rate__c'])
  15.         LambdaHelper.validateEvent(event.body.fund, ['System_Price__c'])
  16.  
  17.         let loanpalResults = await getMonthlyPayments(event)
  18.  
  19.         let monthlyPayments = analyzeLoanpalResults(loanpalResults)
  20.        
  21.         if (event.responseType == 'file') {
  22.             await new Promise(function(resolve, reject){
  23.                 fs.writeFile('myjsonfile.json', JSON.stringify(monthlyPayments, null, 4), function(err) {
  24.                     if (err) {
  25.                         reject(err)
  26.                     } else {
  27.                         resolve('Saved JSON')
  28.                     }
  29.                 })
  30.             })
  31.         } else {
  32.             return LambdaHelper.formatResponseData(null, originalEvent, monthlyPayments, LAMBDA_NAME)
  33.         }
  34.  
  35.     } catch (error) {
  36.         return LambdaHelper.formatResponseData(error, originalEvent, null, LAMBDA_NAME)
  37.     }
  38. }
  39.  
  40.  
  41. /**********************************************************************************************
  42. * @description Calls out to genability for the reduced usage savings
  43. * @param {JSON} event - event passed in
  44. * @param {JSON} proposalCalculationData - main proposal data
  45. * @return {JSON} response from genability-reducedUsageSavings lamba function
  46. ***********************************************************************************************/
  47. async function getMonthlyPayments(event) {
  48.     let termInYears = parseInt(event.body.fundSetup.Term_In_Months__c) / 12,
  49.         systemPrice = parseInt(event.body.fund.System_Price__c),
  50.         netSystemPrice = systemPrice - (event.body.fund.Down_Payment__c != null ? parseFloat(event.body.fund.Down_Payment__c) : 0)
  51.    
  52.     let urlParamDict = {
  53.         loanAmount: netSystemPrice,
  54.         term: termInYears,
  55.         rate: event.body.fundSetup.Interest_Rate__c
  56.     }
  57.  
  58.     let urlParams = []
  59.  
  60.     for (let param of Object.keys(urlParamDict)) {
  61.         if (urlParamDict.hasOwnProperty(param)) {
  62.             urlParams.push(param + '=' + urlParamDict[param])
  63.         }
  64.     }
  65.    
  66.     let options = {
  67.         url: 'https://' + event.api_base_url + event.api_environment + event.api_version + '/loanCalc?' + urlParams.join('&') + '&baseItcPct=0.26',
  68.         method: 'GET'
  69.     }
  70.  
  71.     return new Promise(function(resolve, reject) {
  72.         request(options, function (error, response, body) {
  73.             if (error){
  74.                 reject(error)
  75.             } else {
  76.                 resolve(JSON.parse(body))
  77.             }
  78.         })
  79.     })
  80. }
  81.  
  82. function analyzeLoanpalResults(loanpalResults) {
  83.     return {
  84.         fund: {
  85.             Monthly_Payment_1__c: parseFloat(loanpalResults[0].initialMonthlyPayment.replace("$", '').replace(/,/g, '')),
  86.             No_Paydown_Payment__c: parseFloat(loanpalResults[0].adjustedMonthlyPayment.replace("$", '').replace(/,/g, '')),
  87.             Monthly_Payment_2__c: parseFloat(loanpalResults[1].adjustedMonthlyPayment.replace("$", '').replace(/,/g, ''))
  88.         }
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment