/**
* @module method/generate
*/
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const {has, round} = require('lodash');
const {parse, format} = require('date-fns');
const mustache = require('mustache');
const contractTemplate = require('../template');
/**
* Generate the contract for a loan
*
* @requires template
*
* @param {borrower} borrower - Borrower-related data from Loandisk.
* @param {loan} loan - Loan-related data from Loandisk.
* @param {loanSchedules} loanSchedules - Original loan schedule of the loan
* with only repayment and maturity.
* @param {boolean} isSigned - Statue of whether the contract generated is signed.
*
* @return {string} HTML sting of the full contract
*/
const generate = (borrower, loan, loanSchedules, isSigned) => {
// Default isSigned to false
isSigned = isSigned === true;
// Assign data for html generation
const data = {
borrowerFirstName: borrower.borrower_firstname,
borrowerLastName: borrower.borrower_lastname,
borrowerUniqueNumber: borrower.borrower_unique_number,
borrowerAddress: borrower.borrower_address,
loanNo: loan.loan_application_id,
loanReleaseDate: loan.loan_released_date,
principalAmount: loan.loan_principal_amount,
principalAmountInText: loan.custom_field_2416,
loanInterest: Number(loan.loan_interest),
apr: loan.custom_field_1757,
collateralCollectedAmount: loan.custom_field_2864,
isSigned: isSigned,
signedOn: {
full: format(new Date(), 'PPPPpppp'),
date: format(new Date(), 'dd/MM/yyyy'),
},
};
// Add data that needs calculation back to data object
data['totalInterest'] = round(
Number(loan.loan_principal_amount)
* (data.loanInterest / 100)
* Number(loan.loan_duration),
2
);
data['totalAmount'] = data.totalInterest + Number(loan.loan_principal_amount);
data['loanSchedules'] = loanSchedules.map((schedule) => {
return {
date: format(parse(schedule['Date'], 'dd/MM/yyyy', new Date()), 'PP'),
amount: schedule['Due'],
}
})
// HTML string after inserting data
return mustache.render(contractTemplate, data);
};
module.exports = generate;