Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Helper Method 1
- calculateSegmentsAmounts : function(component, event, helper) {
- var prepayRecord = component.get("v.prepaymentRecord");
- var segmentsList = component.get("v.prepaymentSegmentsList");
- var calculatedTotalPercentage = 0;
- var calculatedTotalPrincipal = 0;
- var calculatedTotalInterest = 0;
- var calculatedTotalPremium = 0;
- var calculatedTotalBreakage = 0;
- var calculatedTotalOther = 0;
- for(var i=0; i < segmentsList.length; i++) {
- var percentage = 0;
- var principal = 0;
- if(segmentsList[i].Selected__c) {
- percentage = segmentsList[i].PAR_Percentage__c / 100;
- principal = percentage * prepayRecord.Native_Principal__c;
- segmentsList[i].Interest__c = percentage * prepayRecord.Native_Interest__c;
- segmentsList[i].Premium__c = percentage * prepayRecord.Native_Premium__c;
- segmentsList[i].Breakage__c = percentage * prepayRecord.Native_Breakage__c;
- segmentsList[i].Other__c = percentage * prepayRecord.Native_Other__c;
- segmentsList[i].Total_Segment__c = principal + segmentsList[i].Interest__c + segmentsList[i].Premium__c + segmentsList[i].Breakage__c + segmentsList[i].Other__c;
- }
- percentage = percentage * 100;
- calculatedTotalPercentage += percentage;
- segmentsList[i].Principal__c = principal;
- calculatedTotalPrincipal += segmentsList[i].Principal__c;
- calculatedTotalInterest += segmentsList[i].Interest__c;
- calculatedTotalPremium += segmentsList[i].Premium__c;
- calculatedTotalBreakage += segmentsList[i].Breakage__c;
- calculatedTotalOther += segmentsList[i].Other__c;
- } // Loop ends
- // Update attribute value because it will be referred in below Helper methods
- component.set("v.prepaymentSegmentsList", segmentsList);
- var reCalcTotal = false;
- if(calculatedTotalPercentage == 100.00000000000) {
- if(calculatedTotalPrincipal != 0 && calculatedTotalPrincipal != prepayRecord.Native_Principal__c) {
- helper.adjustExtraAmount(component, event, helper, prepayRecord.Native_Principal__c, calculatedTotalPrincipal, "Principal__c"); // Passing Field name as String
- reCalcTotal = true;
- }
- if(calculatedTotalInterest != 0 && calculatedTotalInterest != prepayRecord.Native_Interest__c) {
- helper.adjustExtraAmount(component, event, helper, prepayRecord.Native_Interest__c, calculatedTotalInterest, "Interest__c"); // Passing Field name as String
- reCalcTotal = true;
- }
- if(calculatedTotalPremium != 0 && calculatedTotalPremium != prepayRecord.Native_Premium__c) {
- helper.adjustExtraAmount(component, event, helper, prepayRecord.Native_Premium__c, calculatedTotalPremium, "Premium__c"); // Passing Field name as String
- reCalcTotal = true;
- }
- if(calculatedTotalBreakage != 0 && calculatedTotalBreakage != prepayRecord.Native_Breakage__c) {
- helper.adjustExtraAmount(component, event, helper, prepayRecord.Native_Breakage__c, calculatedTotalBreakage, "Breakage__c"); // Passing Field name as String
- reCalcTotal = true;
- }
- if(calculatedTotalOther != 0 && calculatedTotalOther != prepayRecord.Native_Other__c) {
- helper.adjustExtraAmount(component, event, helper, prepayRecord.Native_Other__c, calculatedTotalOther, "Other__c"); // Passing Field name as String
- reCalcTotal = true;
- }
- if(reCalcTotal) {
- helper.reCalculateSegmentsRowTotal();
- }
- }
- component.set("v.prepaymentRecord", prepayRecord);
- component.set("v.prepaymentSegmentsList", segmentsList);
- },
- //Helper Method 2
- adjustExtraAmount : function(component, event, helper, nativeAmount, calculatedTotal, fieldName) {
- var segmentsList = component.get("v.prepaymentSegmentsList");
- var multiplier = 100;
- var difference = (Math.round(multiplier * nativeAmount) - Math.round(multiplier * calculatedTotal)) / multiplier;
- var absdiff = Math.abs(difference);
- var calculatedMoreThanActual;
- if(nativeAmount < calculatedTotal) {
- calculatedMoreThanActual = true;
- }
- else {
- calculatedMoreThanActual = false;
- }
- if (absdiff >= 0.01 && absdiff < 1) {
- var affliatedInvIndex = helper.getLargestaffiliatedINVIndex(component, event, helper, fieldName); // Another Helper to which fieldName is passed
- if (affliatedInvIndex == -1) {
- affliatedInvIndex = helper.getLargestSegmentIndex(component, event, helper, fieldName); // Another Helper to which fieldName is passed
- }
- var nonAffliatedInvIndex = helper.getLowestNonAffiliatedINVIndex(component, event, helper, fieldName); // Another Helper to which fieldName is passed
- if (nonAffliatedInvIndex == -1) {
- nonAffliatedInvIndex = helper.getLowestSegmentIndex(component, event, helper, fieldName); // Another Helper to which fieldName is passed
- }
- var runOnce = false;
- console.log('>>>> Recalculating ' + fieldName);
- for(var i=0; i < segmentsList.length; i++) {
- if(segmentsList[i].Selected__c) {
- var oldValue = 0;
- oldValue = segmentsList[i].fieldName; // Need to dynamically fetch the value
- if(calculatedMoreThanActual) {
- if (i == nonAffliatedInvIndex && !runOnce) {
- var delta = oldValue + difference;
- segmentsList[i].fieldName = delta; // Need to dynamically Update the value
- runOnce = true;
- }
- }
- else {
- if (i == affliatedInvIndex && !runOnce ) {
- var delta = oldValue + difference;
- segmentsList[i].fieldName = delta; // Need to dynamically Update the value
- runOnce = true;
- }
- }
- }
- }
- }
- component.set("v.prepaymentSegmentsList", segmentsList);
- },
Add Comment
Please, Sign In to add comment