killbill-memoizeit

payment: use KillBillMoney to format amounts Similar to

6/24/2016 10:10:09 PM

Details

diff --git a/payment/src/main/java/org/killbill/billing/payment/api/DefaultPayment.java b/payment/src/main/java/org/killbill/billing/payment/api/DefaultPayment.java
index 7303f80..562889a 100644
--- a/payment/src/main/java/org/killbill/billing/payment/api/DefaultPayment.java
+++ b/payment/src/main/java/org/killbill/billing/payment/api/DefaultPayment.java
@@ -29,6 +29,7 @@ import javax.annotation.Nullable;
 import org.joda.time.DateTime;
 import org.killbill.billing.catalog.api.Currency;
 import org.killbill.billing.entity.EntityBase;
+import org.killbill.billing.util.currency.KillBillMoney;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
@@ -192,6 +193,8 @@ public class DefaultPayment extends EntityBase implements Payment {
                                                        final Currency chargebackProcessedCurrency,
                                                        final BigDecimal chargebackAmount,
                                                        final Currency chargebackCurrency) {
+        BigDecimal unformattedAmountForTransactions = null;
+
         final Collection<PaymentTransaction> candidateTransactions = Collections2.<PaymentTransaction>filter(transactions,
                                                                                                              new Predicate<PaymentTransaction>() {
                                                                                                                  @Override
@@ -206,32 +209,34 @@ public class DefaultPayment extends EntityBase implements Payment {
             currencyForTransactions = getCurrencyForTransactions(candidateTransactions, false);
             if (currencyForTransactions == null) {
                 // Multiple currencies - cannot compute the total
-                return BigDecimal.ZERO;
+                unformattedAmountForTransactions = BigDecimal.ZERO;
             } else if (currencyForTransactions != paymentCurrency) {
                 // Different currency than the main payment currency
-                return BigDecimal.ZERO;
+                unformattedAmountForTransactions = BigDecimal.ZERO;
             } else {
                 final BigDecimal amountForTransactions = getAmountForTransactions(candidateTransactions, false);
-                return getAmountForTransactions(amountForTransactions,
-                                                takeChargebacksIntoAccount,
-                                                currencyForTransactions,
-                                                chargebackTransactions,
-                                                chargebackProcessedAmount,
-                                                chargebackProcessedCurrency,
-                                                chargebackAmount,
-                                                chargebackCurrency);
+                unformattedAmountForTransactions = getAmountForTransactions(amountForTransactions,
+                                                                            takeChargebacksIntoAccount,
+                                                                            currencyForTransactions,
+                                                                            chargebackTransactions,
+                                                                            chargebackProcessedAmount,
+                                                                            chargebackProcessedCurrency,
+                                                                            chargebackAmount,
+                                                                            chargebackCurrency);
             }
         } else {
             final BigDecimal amountForTransactions = getAmountForTransactions(candidateTransactions, true);
-            return getAmountForTransactions(amountForTransactions,
-                                            takeChargebacksIntoAccount,
-                                            currencyForTransactions,
-                                            chargebackTransactions,
-                                            chargebackProcessedAmount,
-                                            chargebackProcessedCurrency,
-                                            chargebackAmount,
-                                            chargebackCurrency);
+            unformattedAmountForTransactions = getAmountForTransactions(amountForTransactions,
+                                                                        takeChargebacksIntoAccount,
+                                                                        currencyForTransactions,
+                                                                        chargebackTransactions,
+                                                                        chargebackProcessedAmount,
+                                                                        chargebackProcessedCurrency,
+                                                                        chargebackAmount,
+                                                                        chargebackCurrency);
         }
+
+        return unformattedAmountForTransactions == null || currencyForTransactions == null ? unformattedAmountForTransactions : KillBillMoney.of(unformattedAmountForTransactions, currencyForTransactions);
     }
 
     private static BigDecimal getAmountForTransactions(final BigDecimal amountForTransactions,
diff --git a/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentTransaction.java b/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentTransaction.java
index 74710f0..7e28bdb 100644
--- a/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentTransaction.java
+++ b/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentTransaction.java
@@ -1,5 +1,6 @@
 /*
- * Copyright 2014 Groupon, Inc
+ * Copyright 2014-2016 Groupon, Inc
+ * Copyright 2014-2016 The Billing Project, LLC
  *
  * The Billing Project licenses this file to you under the Apache License, version 2.0
  * (the "License"); you may not use this file except in compliance with the
@@ -23,6 +24,7 @@ import org.joda.time.DateTime;
 import org.killbill.billing.catalog.api.Currency;
 import org.killbill.billing.entity.EntityBase;
 import org.killbill.billing.payment.plugin.api.PaymentTransactionInfoPlugin;
+import org.killbill.billing.util.currency.KillBillMoney;
 
 public class DefaultPaymentTransaction extends EntityBase implements PaymentTransaction {
 
@@ -50,9 +52,9 @@ public class DefaultPaymentTransaction extends EntityBase implements PaymentTran
         this.transactionType = transactionType;
         this.effectiveDate = effectiveDate;
         this.status = status;
-        this.amount = amount;
+        this.amount = amount == null || currency == null ? amount : KillBillMoney.of(amount, currency);
         this.currency = currency;
-        this.processedAmount = processedAmount;
+        this.processedAmount = processedAmount == null || processedCurrency == null ? processedAmount : KillBillMoney.of(processedAmount, processedCurrency);
         this.processedCurrency = processedCurrency;
         this.gatewayErrorCode = gatewayErrorCode;
         this.gatewayErrorMsg = gatewayErrorMsg;
diff --git a/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApiNoDB.java b/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApiNoDB.java
index c19453b..729e49a 100644
--- a/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApiNoDB.java
+++ b/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApiNoDB.java
@@ -88,7 +88,7 @@ public class TestPaymentApiNoDB extends PaymentTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testSimpleInvoicePaymentWithInvoiceAmount() throws Exception {
-        final BigDecimal invoiceAmount = new BigDecimal("10.0011");
+        final BigDecimal invoiceAmount = BigDecimal.TEN;
         final BigDecimal requestedAmount = invoiceAmount;
         final BigDecimal expectedAmount = invoiceAmount;
 
@@ -97,8 +97,8 @@ public class TestPaymentApiNoDB extends PaymentTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testSimpleInvoicePaymentWithLowerAmount() throws Exception {
-        final BigDecimal invoiceAmount = new BigDecimal("10.0011");
-        final BigDecimal requestedAmount = new BigDecimal("8.0091");
+        final BigDecimal invoiceAmount = BigDecimal.TEN;
+        final BigDecimal requestedAmount = BigDecimal.ONE;
         final BigDecimal expectedAmount = requestedAmount;
 
         testSimplePayment(invoiceAmount, requestedAmount, expectedAmount);
@@ -106,8 +106,8 @@ public class TestPaymentApiNoDB extends PaymentTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testSimpleInvoicePaymentWithInvalidAmount() throws Exception {
-        final BigDecimal invoiceAmount = new BigDecimal("10.0011");
-        final BigDecimal requestedAmount = new BigDecimal("80.0091");
+        final BigDecimal invoiceAmount = BigDecimal.ONE;
+        final BigDecimal requestedAmount = BigDecimal.TEN;
         final BigDecimal expectedAmount = null;
 
         testSimplePayment(invoiceAmount, requestedAmount, expectedAmount);