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);