|
19 | 19 | package org.apache.fineract.portfolio.loanaccount.serialization; |
20 | 20 |
|
21 | 21 | import java.math.BigDecimal; |
| 22 | +import java.util.Locale; |
22 | 23 | import java.time.LocalDate; |
23 | 24 | import lombok.RequiredArgsConstructor; |
24 | 25 | import org.apache.fineract.infrastructure.core.service.DateUtils; |
25 | 26 | import org.apache.fineract.infrastructure.core.service.MathUtil; |
| 27 | +import org.apache.fineract.organisation.monetary.domain.MoneyHelper; |
26 | 28 | import org.apache.fineract.portfolio.loanaccount.domain.Loan; |
27 | 29 | import org.apache.fineract.portfolio.loanaccount.domain.LoanOverAppliedCalculationType; |
28 | 30 | import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; |
@@ -64,16 +66,17 @@ public void validateOverMaximumAmount(final Loan loan, final BigDecimal totalDis |
64 | 66 |
|
65 | 67 | private BigDecimal calculateMaxAllowedDisbursement(final Loan loan) { |
66 | 68 | final LoanProduct loanProduct = loan.getLoanProduct(); |
67 | | - final BigDecimal approvedPrincipal = loan.getApprovedPrincipal() != null ? loan.getApprovedPrincipal() : loan.getProposedPrincipal(); |
| 69 | + final BigDecimal approvedPrincipal = loan.getApprovedPrincipal() != null ? loan.getApprovedPrincipal() |
| 70 | + : loan.getProposedPrincipal() != null ? loan.getProposedPrincipal() : BigDecimal.ZERO; |
68 | 71 | BigDecimal maxAllowed = approvedPrincipal; |
69 | 72 |
|
70 | 73 | if (loanProduct.getOverAppliedCalculationType() != null && loanProduct.getOverAppliedNumber() != null) { |
71 | 74 | final BigDecimal overAppliedMax = BigDecimal.valueOf(loanProduct.getOverAppliedNumber()); |
72 | 75 | final LoanOverAppliedCalculationType calculationType = LoanOverAppliedCalculationType |
73 | | - .valueOf(loanProduct.getOverAppliedCalculationType().toUpperCase()); |
| 76 | + .valueOf(loanProduct.getOverAppliedCalculationType().toUpperCase(Locale.ROOT)); |
74 | 77 |
|
75 | 78 | if (calculationType.isPercentage()) { |
76 | | - final BigDecimal extra = approvedPrincipal.multiply(overAppliedMax).divide(BigDecimal.valueOf(100)); |
| 79 | + final BigDecimal extra = MathUtil.percentageOf(approvedPrincipal, overAppliedMax, MoneyHelper.getMathContext()); |
77 | 80 | maxAllowed = approvedPrincipal.add(extra); |
78 | 81 | } else { |
79 | 82 | maxAllowed = approvedPrincipal.add(overAppliedMax); |
|
0 commit comments