Guest User

Untitled

a guest
Oct 18th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.05 KB | None | 0 0
  1. //Helper Method 1
  2. calculateSegmentsAmounts : function(component, event, helper) {
  3.  
  4. var prepayRecord = component.get("v.prepaymentRecord");
  5. var segmentsList = component.get("v.prepaymentSegmentsList");
  6. var calculatedTotalPercentage = 0;
  7. var calculatedTotalPrincipal = 0;
  8. var calculatedTotalInterest = 0;
  9. var calculatedTotalPremium = 0;
  10. var calculatedTotalBreakage = 0;
  11. var calculatedTotalOther = 0;
  12.  
  13. for(var i=0; i < segmentsList.length; i++) {
  14.  
  15. var percentage = 0;
  16. var principal = 0;
  17.  
  18. if(segmentsList[i].Selected__c) {
  19.  
  20. percentage = segmentsList[i].PAR_Percentage__c / 100;
  21. principal = percentage * prepayRecord.Native_Principal__c;
  22.  
  23. segmentsList[i].Interest__c = percentage * prepayRecord.Native_Interest__c;
  24. segmentsList[i].Premium__c = percentage * prepayRecord.Native_Premium__c;
  25. segmentsList[i].Breakage__c = percentage * prepayRecord.Native_Breakage__c;
  26. segmentsList[i].Other__c = percentage * prepayRecord.Native_Other__c;
  27. segmentsList[i].Total_Segment__c = principal + segmentsList[i].Interest__c + segmentsList[i].Premium__c + segmentsList[i].Breakage__c + segmentsList[i].Other__c;
  28. }
  29. percentage = percentage * 100;
  30. calculatedTotalPercentage += percentage;
  31. segmentsList[i].Principal__c = principal;
  32.  
  33. calculatedTotalPrincipal += segmentsList[i].Principal__c;
  34. calculatedTotalInterest += segmentsList[i].Interest__c;
  35. calculatedTotalPremium += segmentsList[i].Premium__c;
  36. calculatedTotalBreakage += segmentsList[i].Breakage__c;
  37. calculatedTotalOther += segmentsList[i].Other__c;
  38. } // Loop ends
  39.  
  40. // Update attribute value because it will be referred in below Helper methods
  41. component.set("v.prepaymentSegmentsList", segmentsList);
  42.  
  43. var reCalcTotal = false;
  44. if(calculatedTotalPercentage == 100.00000000000) {
  45. if(calculatedTotalPrincipal != 0 && calculatedTotalPrincipal != prepayRecord.Native_Principal__c) {
  46. helper.adjustExtraAmount(component, event, helper, prepayRecord.Native_Principal__c, calculatedTotalPrincipal, "Principal__c"); // Passing Field name as String
  47. reCalcTotal = true;
  48. }
  49. if(calculatedTotalInterest != 0 && calculatedTotalInterest != prepayRecord.Native_Interest__c) {
  50. helper.adjustExtraAmount(component, event, helper, prepayRecord.Native_Interest__c, calculatedTotalInterest, "Interest__c"); // Passing Field name as String
  51. reCalcTotal = true;
  52. }
  53. if(calculatedTotalPremium != 0 && calculatedTotalPremium != prepayRecord.Native_Premium__c) {
  54. helper.adjustExtraAmount(component, event, helper, prepayRecord.Native_Premium__c, calculatedTotalPremium, "Premium__c"); // Passing Field name as String
  55. reCalcTotal = true;
  56. }
  57. if(calculatedTotalBreakage != 0 && calculatedTotalBreakage != prepayRecord.Native_Breakage__c) {
  58. helper.adjustExtraAmount(component, event, helper, prepayRecord.Native_Breakage__c, calculatedTotalBreakage, "Breakage__c"); // Passing Field name as String
  59. reCalcTotal = true;
  60. }
  61. if(calculatedTotalOther != 0 && calculatedTotalOther != prepayRecord.Native_Other__c) {
  62. helper.adjustExtraAmount(component, event, helper, prepayRecord.Native_Other__c, calculatedTotalOther, "Other__c"); // Passing Field name as String
  63. reCalcTotal = true;
  64. }
  65. if(reCalcTotal) {
  66. helper.reCalculateSegmentsRowTotal();
  67. }
  68. }
  69.  
  70. component.set("v.prepaymentRecord", prepayRecord);
  71. component.set("v.prepaymentSegmentsList", segmentsList);
  72. },
  73.  
  74. //Helper Method 2
  75. adjustExtraAmount : function(component, event, helper, nativeAmount, calculatedTotal, fieldName) {
  76.  
  77. var segmentsList = component.get("v.prepaymentSegmentsList");
  78. var multiplier = 100;
  79. var difference = (Math.round(multiplier * nativeAmount) - Math.round(multiplier * calculatedTotal)) / multiplier;
  80. var absdiff = Math.abs(difference);
  81. var calculatedMoreThanActual;
  82. if(nativeAmount < calculatedTotal) {
  83. calculatedMoreThanActual = true;
  84. }
  85. else {
  86. calculatedMoreThanActual = false;
  87. }
  88. if (absdiff >= 0.01 && absdiff < 1) {
  89.  
  90. var affliatedInvIndex = helper.getLargestaffiliatedINVIndex(component, event, helper, fieldName); // Another Helper to which fieldName is passed
  91. if (affliatedInvIndex == -1) {
  92. affliatedInvIndex = helper.getLargestSegmentIndex(component, event, helper, fieldName); // Another Helper to which fieldName is passed
  93. }
  94. var nonAffliatedInvIndex = helper.getLowestNonAffiliatedINVIndex(component, event, helper, fieldName); // Another Helper to which fieldName is passed
  95. if (nonAffliatedInvIndex == -1) {
  96. nonAffliatedInvIndex = helper.getLowestSegmentIndex(component, event, helper, fieldName); // Another Helper to which fieldName is passed
  97. }
  98. var runOnce = false;
  99. console.log('>>>> Recalculating ' + fieldName);
  100. for(var i=0; i < segmentsList.length; i++) {
  101.  
  102. if(segmentsList[i].Selected__c) {
  103.  
  104. var oldValue = 0;
  105. oldValue = segmentsList[i].fieldName; // Need to dynamically fetch the value
  106. if(calculatedMoreThanActual) {
  107. if (i == nonAffliatedInvIndex && !runOnce) {
  108. var delta = oldValue + difference;
  109. segmentsList[i].fieldName = delta; // Need to dynamically Update the value
  110. runOnce = true;
  111. }
  112. }
  113. else {
  114. if (i == affliatedInvIndex && !runOnce ) {
  115. var delta = oldValue + difference;
  116. segmentsList[i].fieldName = delta; // Need to dynamically Update the value
  117. runOnce = true;
  118. }
  119. }
  120. }
  121. }
  122. }
  123. component.set("v.prepaymentSegmentsList", segmentsList);
  124. },
Add Comment
Please, Sign In to add comment