FINERACT-158 FINERACT-166 Fix
This commit is contained in:
+4
-1
@@ -3196,7 +3196,7 @@ public class Loan extends AbstractPersistableCustom<Long> {
|
|||||||
|
|
||||||
boolean isAllChargesPaid = true;
|
boolean isAllChargesPaid = true;
|
||||||
for (final LoanCharge loanCharge : this.charges) {
|
for (final LoanCharge loanCharge : this.charges) {
|
||||||
if (loanCharge.isActive() && !(loanCharge.isPaid() || loanCharge.isWaived())) {
|
if (loanCharge.isActive() && loanCharge.amount().compareTo(BigDecimal.ZERO) == 1 && !(loanCharge.isPaid() || loanCharge.isWaived())) {
|
||||||
isAllChargesPaid = false;
|
isAllChargesPaid = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -4744,6 +4744,9 @@ public class Loan extends AbstractPersistableCustom<Long> {
|
|||||||
if (loanCharge.isInstalmentFee()) {
|
if (loanCharge.isInstalmentFee()) {
|
||||||
List<LoanRepaymentScheduleInstallment> installments = getRepaymentScheduleInstallments() ;
|
List<LoanRepaymentScheduleInstallment> installments = getRepaymentScheduleInstallments() ;
|
||||||
for (final LoanRepaymentScheduleInstallment installment : installments) {
|
for (final LoanRepaymentScheduleInstallment installment : installments) {
|
||||||
|
if(installment.isRecalculatedInterestComponent()){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
BigDecimal amount = BigDecimal.ZERO;
|
BigDecimal amount = BigDecimal.ZERO;
|
||||||
if (loanCharge.getChargeCalculation().isFlat()) {
|
if (loanCharge.getChargeCalculation().isFlat()) {
|
||||||
amount = loanCharge.amountOrPercentage();
|
amount = loanCharge.amountOrPercentage();
|
||||||
|
|||||||
+18
-3
@@ -210,10 +210,15 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
|||||||
|
|
||||||
// this block is to generate the schedule till the specified
|
// this block is to generate the schedule till the specified
|
||||||
// date(used for calculating preclosure)
|
// date(used for calculating preclosure)
|
||||||
|
boolean isCompletePeriod = true;
|
||||||
if (scheduleParams.getScheduleTillDate() != null && !scheduledDueDate.isBefore(scheduleParams.getScheduleTillDate())) {
|
if (scheduleParams.getScheduleTillDate() != null && !scheduledDueDate.isBefore(scheduleParams.getScheduleTillDate())) {
|
||||||
|
if(!scheduledDueDate.isEqual(scheduleParams.getScheduleTillDate())){
|
||||||
|
isCompletePeriod = false;
|
||||||
|
}
|
||||||
scheduledDueDate = scheduleParams.getScheduleTillDate();
|
scheduledDueDate = scheduleParams.getScheduleTillDate();
|
||||||
isNextRepaymentAvailable = false;
|
isNextRepaymentAvailable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (loanApplicationTerms.isInterestRecalculationEnabled()) {
|
if (loanApplicationTerms.isInterestRecalculationEnabled()) {
|
||||||
populateCompoundingDatesInPeriod(scheduleParams.getPeriodStartDate(), scheduledDueDate, loanApplicationTerms,
|
populateCompoundingDatesInPeriod(scheduleParams.getPeriodStartDate(), scheduledDueDate, loanApplicationTerms,
|
||||||
holidayDetailDTO, scheduleParams, loanCharges, currency);
|
holidayDetailDTO, scheduleParams, loanCharges, currency);
|
||||||
@@ -313,7 +318,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
|||||||
scheduleParams.getPeriodStartDate(), scheduledDueDate, currentPeriodParams.getPrincipalForThisPeriod(),
|
scheduleParams.getPeriodStartDate(), scheduledDueDate, currentPeriodParams.getPrincipalForThisPeriod(),
|
||||||
scheduleParams.getOutstandingBalance(), currentPeriodParams.getInterestForThisPeriod(),
|
scheduleParams.getOutstandingBalance(), currentPeriodParams.getInterestForThisPeriod(),
|
||||||
currentPeriodParams.getFeeChargesForInstallment(), currentPeriodParams.getPenaltyChargesForInstallment(),
|
currentPeriodParams.getFeeChargesForInstallment(), currentPeriodParams.getPenaltyChargesForInstallment(),
|
||||||
totalInstallmentDue, false);
|
totalInstallmentDue, !isCompletePeriod);
|
||||||
|
|
||||||
addLoanRepaymentScheduleInstallment(scheduleParams.getInstallments(), installment);
|
addLoanRepaymentScheduleInstallment(scheduleParams.getInstallments(), installment);
|
||||||
// apply loan transactions on installments to identify early/late
|
// apply loan transactions on installments to identify early/late
|
||||||
@@ -530,8 +535,18 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
|||||||
LocalDate periodStartDateApplicableForInterest, final double interestCalculationGraceOnRepaymentPeriodFraction,
|
LocalDate periodStartDateApplicableForInterest, final double interestCalculationGraceOnRepaymentPeriodFraction,
|
||||||
final ScheduleCurrentPeriodParams currentPeriodParams, final Money lastTotalOutstandingInterestPaymentDueToGrace,
|
final ScheduleCurrentPeriodParams currentPeriodParams, final Money lastTotalOutstandingInterestPaymentDueToGrace,
|
||||||
final LocalDate transactionDate, final LoanScheduleModelPeriod installment, Set<LoanCharge> loanCharges) {
|
final LocalDate transactionDate, final LoanScheduleModelPeriod installment, Set<LoanCharge> loanCharges) {
|
||||||
LoanScheduleModelPeriod modifiedInstallment = installment;
|
LoanScheduleModelPeriod modifiedInstallment = installment;
|
||||||
if (!scheduleParams.getOutstandingBalance().isGreaterThan(currentPeriodParams.getInterestForThisPeriod())
|
Money oustanding = scheduleParams.getOutstandingBalance();
|
||||||
|
PrincipalInterest tempPrincipalInterest = new PrincipalInterest(currentPeriodParams.getPrincipalForThisPeriod(),
|
||||||
|
currentPeriodParams.getInterestForThisPeriod(), null);
|
||||||
|
oustanding = oustanding.minus(cumulativeFeeChargesDueWithin(transactionDate,
|
||||||
|
scheduledDueDate, loanCharges, totalInterestChargedForFullLoanTerm.getCurrency(), tempPrincipalInterest, scheduleParams.getPrincipalToBeScheduled(),
|
||||||
|
scheduleParams.getTotalCumulativeInterest(), true));
|
||||||
|
oustanding = oustanding.minus(cumulativePenaltyChargesDueWithin(transactionDate,
|
||||||
|
scheduledDueDate, loanCharges, totalInterestChargedForFullLoanTerm.getCurrency(), tempPrincipalInterest, scheduleParams.getPrincipalToBeScheduled(),
|
||||||
|
scheduleParams.getTotalCumulativeInterest(), true));
|
||||||
|
|
||||||
|
if (!oustanding.isGreaterThan(currentPeriodParams.getInterestForThisPeriod())
|
||||||
&& !scheduledDueDate.equals(transactionDate)) {
|
&& !scheduledDueDate.equals(transactionDate)) {
|
||||||
final Collection<LoanTermVariationsData> interestRates = loanApplicationTerms.getLoanTermVariations().getInterestRateChanges();
|
final Collection<LoanTermVariationsData> interestRates = loanApplicationTerms.getLoanTermVariations().getInterestRateChanges();
|
||||||
LocalDate calculateTill = transactionDate;
|
LocalDate calculateTill = transactionDate;
|
||||||
|
|||||||
+2
-2
@@ -436,7 +436,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
|
|||||||
|
|
||||||
private BigDecimal adjustPrepayInstallmentCharge(Loan loan, final LocalDate onDate) {
|
private BigDecimal adjustPrepayInstallmentCharge(Loan loan, final LocalDate onDate) {
|
||||||
BigDecimal chargeAmount = BigDecimal.ZERO;
|
BigDecimal chargeAmount = BigDecimal.ZERO;
|
||||||
for(LoanCharge loanCharge: loan.charges()){
|
/*for(LoanCharge loanCharge: loan.charges()){
|
||||||
if(loanCharge.isInstalmentFee() && loanCharge.getCharge().getChargeCalculation()==ChargeCalculationType.FLAT.getValue()){
|
if(loanCharge.isInstalmentFee() && loanCharge.getCharge().getChargeCalculation()==ChargeCalculationType.FLAT.getValue()){
|
||||||
for (LoanRepaymentScheduleInstallment installment : loan.getRepaymentScheduleInstallments()) {
|
for (LoanRepaymentScheduleInstallment installment : loan.getRepaymentScheduleInstallments()) {
|
||||||
if(onDate.isBefore(installment.getDueDate())){
|
if(onDate.isBefore(installment.getDueDate())){
|
||||||
@@ -449,7 +449,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
return chargeAmount;
|
return chargeAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user