Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentRecorder.java
index aa5bb1b..fa66c97 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentRecorder.java
@@ -84,8 +84,7 @@ public class BusinessInvoicePaymentRecorder {
return;
}
- final InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePayment(paymentId);
-
+ final InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePaymentForAttempt(paymentId);
final PaymentMethod paymentMethod;
try {
paymentMethod = paymentApi.getPaymentMethod(account, payment.getPaymentMethodId(), true);
diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
index fa0e738..545e04d 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
@@ -38,7 +38,9 @@ public interface InvoicePaymentApi {
public Invoice getInvoiceForPaymentId(UUID paymentId);
- public InvoicePayment getInvoicePayment(UUID paymentId);
+ public List<InvoicePayment> getInvoicePayments(UUID paymentId);
+
+ public InvoicePayment getInvoicePaymentForAttempt(UUID paymentId);
public void notifyOfPayment(InvoicePayment invoicePayment, CallContext context);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
index 0bd3a5c..e6bb878 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
@@ -18,6 +18,7 @@
package com.ning.billing.invoice.api.invoice;
import java.math.BigDecimal;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -36,6 +37,8 @@ import com.ning.billing.invoice.dao.InvoiceDao;
import com.ning.billing.invoice.model.DefaultInvoicePayment;
import com.ning.billing.util.callcontext.CallContext;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
import com.google.inject.Inject;
public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
@@ -71,10 +74,26 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
}
@Override
- public InvoicePayment getInvoicePayment(final UUID paymentId) {
- return dao.getInvoicePayment(paymentId);
+ public List<InvoicePayment> getInvoicePayments(final UUID paymentId) {
+ return dao.getInvoicePayments(paymentId);
}
+
+ @Override
+ public InvoicePayment getInvoicePaymentForAttempt(UUID paymentId) {
+ List<InvoicePayment> invoicePayments = dao.getInvoicePayments(paymentId);
+ if (invoicePayments.size() == 0) {
+ return null;
+ }
+ return Collections2.filter(invoicePayments, new Predicate<InvoicePayment>() {
+ @Override
+ public boolean apply(InvoicePayment input) {
+ return input.getType() == InvoicePaymentType.ATTEMPT;
+ }
+ }).iterator().next();
+ }
+
+
@Override
public void notifyOfPayment(final UUID invoiceId, final BigDecimal amount, final Currency currency, final UUID paymentId, final DateTime paymentDate, final CallContext context) {
final InvoicePayment invoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, paymentDate, amount, currency);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
index 5f7b71f..1abfe3d 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
@@ -295,8 +295,8 @@ public class AuditedInvoiceDao implements InvoiceDao {
}
@Override
- public InvoicePayment getInvoicePayment(final UUID paymentId) {
- return invoicePaymentSqlDao.getInvoicePayment(paymentId.toString());
+ public List<InvoicePayment> getInvoicePayments(final UUID paymentId) {
+ return invoicePaymentSqlDao.getInvoicePayments(paymentId.toString());
}
@Override
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
index ecbda77..dbf2edb 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceDao.java
@@ -51,7 +51,7 @@ public interface InvoiceDao {
UUID getInvoiceIdByPaymentId(final UUID paymentId);
- InvoicePayment getInvoicePayment(final UUID paymentId);
+ List<InvoicePayment> getInvoicePayments(final UUID paymentId);
void notifyOfPayment(final InvoicePayment invoicePayment, final CallContext context);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
index 31e85cd..1ea5cb3 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
@@ -80,7 +80,7 @@ public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePayment>, Tran
public List<InvoicePayment> getPaymentsForInvoice(@Bind("invoiceId") final String invoiceId);
@SqlQuery
- InvoicePayment getInvoicePayment(@Bind("paymentId") final String paymentId);
+ List<InvoicePayment> getInvoicePayments(@Bind("paymentId") final String paymentId);
@SqlQuery
InvoicePayment getPaymentsForCookieId(@Bind("paymentCookieId") final String paymentCookieId);
diff --git a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
index a4ee86c..0ba9369 100644
--- a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
+++ b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
@@ -61,7 +61,7 @@ notifyOfPayment() ::= <<
:paymentCookieId, :linkedInvoicePaymentId, :userName, :createdDate);
>>
-getInvoicePayment() ::= <<
+getInvoicePayments() ::= <<
SELECT <invoicePaymentFields()>
FROM invoice_payments
WHERE payment_id = :paymentId;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
index f229e4a..18a4ce9 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
@@ -18,6 +18,7 @@ package com.ning.billing.invoice.api;
import java.math.BigDecimal;
import java.util.ArrayList;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -82,15 +83,27 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi {
}
@Override
- public InvoicePayment getInvoicePayment(final UUID paymentId) {
+ public List<InvoicePayment> getInvoicePayments(final UUID paymentId) {
+ List<InvoicePayment> result = new LinkedList<InvoicePayment>();
for (final InvoicePayment invoicePayment : invoicePayments) {
if (paymentId.equals(invoicePayment.getPaymentId())) {
+ result.add(invoicePayment);
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public InvoicePayment getInvoicePaymentForAttempt(UUID paymentId) {
+ for (final InvoicePayment invoicePayment : invoicePayments) {
+ if (paymentId.equals(invoicePayment.getPaymentId()) && invoicePayment.getType() == InvoicePaymentType.ATTEMPT) {
return invoicePayment;
}
}
return null;
}
+
@Override
public void notifyOfPayment(final UUID invoiceId, final BigDecimal amountOutstanding, final Currency currency, final UUID paymentId, final DateTime paymentDate, final CallContext context) {
final InvoicePayment invoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, paymentDate, amountOutstanding, currency);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
index 8ea4553..5a6b3a4 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
@@ -19,6 +19,7 @@ package com.ning.billing.invoice.dao;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashMap;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -155,18 +156,18 @@ public class MockInvoiceDao implements InvoiceDao {
}
@Override
- public InvoicePayment getInvoicePayment(final UUID paymentId) {
+ public List<InvoicePayment> getInvoicePayments(final UUID paymentId) {
+ List<InvoicePayment> result = new LinkedList<InvoicePayment>();
synchronized (monitor) {
for (final Invoice invoice : invoices.values()) {
for (final InvoicePayment payment : invoice.getPayments()) {
if (paymentId.equals(payment.getPaymentId())) {
- return payment;
+ result.add(payment);
}
}
}
}
-
- return null;
+ return result;
}
@Override
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java
index 4fac93c..9deb48d 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java
@@ -109,7 +109,7 @@ public class ChargebackResource extends JaxRsResourceBase {
@HeaderParam(HDR_CREATED_BY) final String createdBy,
@HeaderParam(HDR_REASON) final String reason,
@HeaderParam(HDR_COMMENT) final String comment) throws InvoiceApiException {
- final InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePayment(UUID.fromString(json.getPaymentId()));
+ final InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePaymentForAttempt(UUID.fromString(json.getPaymentId()));
if (invoicePayment == null) {
throw new InvoiceApiException(ErrorCode.INVOICE_PAYMENT_NOT_FOUND, json.getPaymentId());
}