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

Reply via email to