Details
diff --git a/api/src/main/java/com/ning/billing/payment/api/Payment.java b/api/src/main/java/com/ning/billing/payment/api/Payment.java
index 9171213..e64d92e 100644
--- a/api/src/main/java/com/ning/billing/payment/api/Payment.java
+++ b/api/src/main/java/com/ning/billing/payment/api/Payment.java
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2010-2011 Ning, Inc.
*
* Ning licenses this file to you under the Apache License, version 2.0
@@ -37,6 +37,8 @@ public interface Payment {
public BigDecimal getAmount();
+ public BigDecimal getPaidAmount();
+
public DateTime getEffectiveDate();
public Currency getCurrency();
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
index 789ccc3..866f64d 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
@@ -109,8 +109,7 @@ public class AccountTimelineJson {
for (final Payment cur : payments) {
final String status = cur.getPaymentStatus().toString();
- final BigDecimal paidAmount = cur.getPaymentStatus() == PaymentStatus.SUCCESS ? cur.getAmount() : BigDecimal.ZERO;
- this.payments.add(new PaymentJsonWithBundleKeys(cur.getAmount(), paidAmount, account.getId().toString(),
+ this.payments.add(new PaymentJsonWithBundleKeys(cur.getAmount(), cur.getPaidAmount(), account.getId().toString(),
cur.getInvoiceId().toString(), cur.getId().toString(),
cur.getEffectiveDate(), cur.getEffectiveDate(),
cur.getAttempts().size(), cur.getCurrency().toString(), status,
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonSimple.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonSimple.java
index a74e005..a075425 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonSimple.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonSimple.java
@@ -86,7 +86,7 @@ public class PaymentJsonSimple {
public PaymentJsonSimple(final Payment src) {
this.amount = src.getAmount();
- this.paidAmount = src.getPaymentStatus() == PaymentStatus.SUCCESS ? src.getAmount() : BigDecimal.ZERO;
+ this.paidAmount = src.getPaidAmount();
this.invoiceId = src.getInvoiceId().toString();
this.accountId = src.getAccountId().toString();
this.paymentId = src.getId().toString();
diff --git a/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java b/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java
index c206d8e..8bb07fd 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2010-2011 Ning, Inc.
*
* Ning licenses this file to you under the Apache License, version 2.0
@@ -28,6 +28,8 @@ import com.google.common.collect.Collections2;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.payment.dao.PaymentAttemptModelDao;
import com.ning.billing.payment.dao.PaymentModelDao;
+import com.ning.billing.payment.dao.RefundModelDao;
+import com.ning.billing.payment.dao.RefundModelDao.RefundStatus;
import com.ning.billing.util.entity.EntityBase;
public class DefaultPayment extends EntityBase implements Payment {
@@ -37,6 +39,7 @@ public class DefaultPayment extends EntityBase implements Payment {
private final UUID invoiceId;
private final UUID paymentMethodId;
private final BigDecimal amount;
+ private final BigDecimal paidAmount;
private final Currency currency;
private final DateTime effectiveDate;
private final Integer paymentNumber;
@@ -45,7 +48,7 @@ public class DefaultPayment extends EntityBase implements Payment {
private DefaultPayment(final UUID id, final UUID accountId, final UUID invoiceId,
- final UUID paymentMethodId, final BigDecimal amount, final Currency currency,
+ final UUID paymentMethodId, final BigDecimal amount, BigDecimal paidAmount, final Currency currency,
final DateTime effectiveDate, final Integer paymentNumber,
final PaymentStatus paymentStatus, final String paymentError, final List<PaymentAttempt> attempts) {
super(id);
@@ -53,6 +56,7 @@ public class DefaultPayment extends EntityBase implements Payment {
this.invoiceId = invoiceId;
this.paymentMethodId = paymentMethodId;
this.amount = amount;
+ this.paidAmount = paidAmount;
this.currency = currency;
this.effectiveDate = effectiveDate;
this.paymentNumber = paymentNumber;
@@ -60,12 +64,13 @@ public class DefaultPayment extends EntityBase implements Payment {
this.attempts = attempts;
}
- public DefaultPayment(final PaymentModelDao src, final List<PaymentAttemptModelDao> attempts) {
+ public DefaultPayment(final PaymentModelDao src, final List<PaymentAttemptModelDao> attempts, final List<RefundModelDao> refunds) {
this(src.getId(),
src.getAccountId(),
src.getInvoiceId(),
src.getPaymentMethodId(),
src.getAmount(),
+ toPaidAmount(src.getPaymentStatus(), src.getAmount(), refunds),
src.getCurrency(),
src.getEffectiveDate(),
src.getPaymentNumber(),
@@ -101,6 +106,11 @@ public class DefaultPayment extends EntityBase implements Payment {
}
@Override
+ public BigDecimal getPaidAmount() {
+ return paidAmount;
+ }
+
+ @Override
public DateTime getEffectiveDate() {
return effectiveDate;
}
@@ -121,6 +131,21 @@ public class DefaultPayment extends EntityBase implements Payment {
return attempts;
}
+ private final static BigDecimal toPaidAmount(final PaymentStatus paymentStatus, final BigDecimal amount, final List<RefundModelDao> refunds) {
+
+ if (paymentStatus != PaymentStatus.SUCCESS) {
+ return BigDecimal.ZERO;
+ }
+
+ BigDecimal result = amount;
+ for (RefundModelDao cur : refunds) {
+ if (cur.getRefundStatus() != RefundStatus.CREATED) {
+ result = result.subtract(cur.getAmount());
+ }
+ }
+ return result;
+ }
+
private static List<PaymentAttempt> toPaymentAttempts(final List<PaymentAttemptModelDao> attempts) {
if (attempts == null || attempts.size() == 0) {
return Collections.emptyList();
diff --git a/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
index ae6e45e..b964bfd 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
@@ -51,6 +51,7 @@ import com.ning.billing.payment.dao.PaymentAttemptModelDao;
import com.ning.billing.payment.dao.PaymentDao;
import com.ning.billing.payment.dao.PaymentModelDao;
import com.ning.billing.payment.dao.PaymentSqlDao;
+import com.ning.billing.payment.dao.RefundModelDao;
import com.ning.billing.payment.dispatcher.PluginDispatcher;
import com.ning.billing.payment.plugin.api.PaymentInfoPlugin;
import com.ning.billing.payment.plugin.api.PaymentPluginApi;
@@ -143,7 +144,8 @@ public class PaymentProcessor extends ProcessorBase {
final List<Payment> result = new LinkedList<Payment>();
for (final PaymentModelDao cur : payments) {
final List<PaymentAttemptModelDao> attempts = paymentDao.getAttemptsForPayment(cur.getId());
- final Payment entry = new DefaultPayment(cur, attempts);
+ final List<RefundModelDao> refunds = paymentDao.getRefundsForPayment(cur.getId());
+ final Payment entry = new DefaultPayment(cur, attempts, refunds);
result.add(entry);
}
return result;
@@ -408,7 +410,7 @@ public class PaymentProcessor extends ProcessorBase {
final PaymentAttemptModelDao attempt = new PaymentAttemptModelDao(account.getId(), invoice.getId(), paymentInfo.getId(), paymentStatus, clock.getUTCNow(), requestedAmount);
paymentDao.insertPaymentWithAttempt(paymentInfo, attempt, context);
- return new DefaultPayment(paymentInfo, Collections.singletonList(attempt));
+ return new DefaultPayment(paymentInfo, Collections.singletonList(attempt), Collections.<RefundModelDao>emptyList());
}
@@ -503,7 +505,7 @@ public class PaymentProcessor extends ProcessorBase {
postPaymentEvent(event, account.getId());
}
}
- return new DefaultPayment(payment, allAttempts);
+ return new DefaultPayment(payment, allAttempts, Collections.<RefundModelDao>emptyList());
}
private PaymentStatus scheduleRetryOnPluginFailure(final UUID paymentId) {