myrle-krantz closed pull request #8: Removing dependency to java money library. URL: https://github.com/apache/fineract-cn-portfolio/pull/8
This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/service/build.gradle b/service/build.gradle index 7fe4315..adf4a9a 100644 --- a/service/build.gradle +++ b/service/build.gradle @@ -63,9 +63,6 @@ dependencies { [group: 'org.apache.fineract.cn', name: 'mariadb', version: versions.frameworkmariadb], [group: 'org.apache.fineract.cn', name: 'command', version: versions.frameworkcommand], [group: 'org.hibernate', name: 'hibernate-validator', version: versions.validator], - [group: 'org.javamoney.lib', name: 'javamoney-calc', version: versions.javamoneylib], - [group: 'javax.money', name: 'money-api', version: '1.0.1'], - [group: 'org.javamoney', name: 'moneta', version: '1.0.1'], [group: 'net.jodah', name: 'expiringmap', version: versions.expiringmap], ) } diff --git a/service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/AnnuityPayment.java b/service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/AnnuityPayment.java index 581aa5f..15abe0e 100644 --- a/service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/AnnuityPayment.java +++ b/service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/AnnuityPayment.java @@ -18,21 +18,18 @@ */ package org.apache.fineract.cn.individuallending.internal.service; -import org.javamoney.calc.CalculationContext; -import org.javamoney.calc.common.Rate; +import java.math.MathContext; import javax.annotation.Nonnegative; import javax.annotation.Nonnull; -import javax.money.MonetaryAmount; -import javax.money.MonetaryOperator; import java.math.BigDecimal; import java.util.Objects; /** * @author Myrle Krantz */ -public final class AnnuityPayment implements MonetaryOperator { - private Rate rate; +public final class AnnuityPayment { + private BigDecimal rate; private int periods; /** @@ -41,7 +38,7 @@ * @param rate the target rate, not null. * @param periods the periods, >= 0. */ - private AnnuityPayment(final @Nonnull Rate rate, final @Nonnegative int periods) + private AnnuityPayment(final @Nonnull BigDecimal rate, final @Nonnegative int periods) { this.rate = Objects.requireNonNull(rate); if (periods < 0) { @@ -50,31 +47,35 @@ private AnnuityPayment(final @Nonnull Rate rate, final @Nonnegative int periods) this.periods = periods; } - public static AnnuityPayment of(final @Nonnull Rate rate, final @Nonnegative int periods) + public static AnnuityPayment of(final @Nonnull BigDecimal rate, final @Nonnegative int periods) { return new AnnuityPayment(rate, periods); } - public static MonetaryAmount calculate( - final @Nonnull MonetaryAmount amount, - final @Nonnull Rate rate, - final @Nonnegative int periods) + public static BigDecimal calculate( + final @Nonnull BigDecimal amount, + final @Nonnull BigDecimal rate, + final @Nonnegative int periods, + final @Nonnegative int precision) { Objects.requireNonNull(amount, "Amount required"); Objects.requireNonNull(rate, "Rate required"); - if (rate.get().compareTo(BigDecimal.ZERO) == 0) - return amount.divide(periods); + if (rate.compareTo(BigDecimal.ZERO) == 0) + return amount.divide(BigDecimal.valueOf(periods), precision, BigDecimal.ROUND_HALF_EVEN); // AP(m) = m*r / [ (1-((1 + r).pow(-n))) ] - return amount.multiply(rate.get()).divide( - BigDecimal.ONE.subtract((BigDecimal.ONE.add(rate.get()) - .pow(-1 * periods, CalculationContext.mathContext())))); + return amount.multiply(rate).divide( + BigDecimal.ONE.subtract((BigDecimal.ONE.add(rate) + .pow(-1 * periods, MathContext.DECIMAL64))), + precision, BigDecimal.ROUND_HALF_EVEN); } - @Override - public MonetaryAmount apply(final @Nonnull MonetaryAmount amount) { - return calculate(amount, rate, periods); + public BigDecimal apply( + final @Nonnull BigDecimal amount, + final @Nonnegative int precision) + { + return calculate(amount, rate, periods, precision); } @Override diff --git a/service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/costcomponent/CostComponentService.java b/service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/costcomponent/CostComponentService.java index 25a943a..e01629a 100644 --- a/service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/costcomponent/CostComponentService.java +++ b/service/src/main/java/org/apache/fineract/cn/individuallending/internal/service/costcomponent/CostComponentService.java @@ -26,10 +26,6 @@ import org.apache.fineract.cn.individuallending.internal.service.schedule.Period; import org.apache.fineract.cn.individuallending.internal.service.schedule.ScheduledCharge; import org.apache.fineract.cn.portfolio.api.v1.domain.ChargeDefinition; -import org.javamoney.calc.common.Rate; -import org.javamoney.moneta.Money; - -import javax.money.MonetaryAmount; import java.math.BigDecimal; import java.time.Clock; import java.time.LocalDate; @@ -214,11 +210,12 @@ public static BigDecimal getLoanPaymentSize( AccountDesignators.CUSTOMER_LOAN_PRINCIPAL, AccountDesignators.CUSTOMER_LOAN_FEES).negate(); - final MonetaryAmount presentValue = AnnuityPayment.calculate( - Money.of(finalDisbursementSize, "XXX"), - Rate.of(geometricMeanAccrualRate), - periodCount); - return BigDecimal.valueOf(presentValue.getNumber().doubleValueExact()).setScale(minorCurrencyUnitDigits, BigDecimal.ROUND_HALF_EVEN); + final BigDecimal presentValue = AnnuityPayment.calculate( + finalDisbursementSize, + geometricMeanAccrualRate, + periodCount, + minorCurrencyUnitDigits); + return presentValue.setScale(minorCurrencyUnitDigits, BigDecimal.ROUND_HALF_EVEN); } private static boolean isIncurralActionForAccruedCharge(final ChargeDefinition chargeDefinition, final Action action) { ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services