Details
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
index 73f981f..97eb58c 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
@@ -18,6 +18,7 @@ package com.ning.billing.jaxrs.resources;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
@@ -314,6 +315,30 @@ public class InvoiceResource extends JaxRsResourceBase {
@POST
@Produces(APPLICATION_JSON)
@Consumes(APPLICATION_JSON)
+ @Path("/" + PAYMENTS)
+ public Response payAllInvoices(final PaymentJsonSimple payment,
+ @QueryParam(QUERY_PAYMENT_EXTERNAL) @DefaultValue("false") final Boolean externalPayment,
+ @HeaderParam(HDR_CREATED_BY) final String createdBy,
+ @HeaderParam(HDR_REASON) final String reason,
+ @HeaderParam(HDR_COMMENT) final String comment) throws AccountApiException, PaymentApiException {
+ final Account account = accountApi.getAccountById(UUID.fromString(payment.getAccountId()));
+
+ final CallContext callContext = context.createContext(createdBy, reason, comment);
+ final Collection<Invoice> unpaidInvoices = invoiceApi.getUnpaidInvoicesByAccountId(account.getId(), clock.getUTCToday());
+ for (final Invoice invoice : unpaidInvoices) {
+ if (externalPayment) {
+ paymentApi.createExternalPayment(account, invoice.getId(), invoice.getBalance(), callContext);
+ } else {
+ paymentApi.createPayment(account, invoice.getId(), invoice.getBalance(), callContext);
+ }
+ }
+
+ return Response.status(Status.OK).build();
+ }
+
+ @POST
+ @Produces(APPLICATION_JSON)
+ @Consumes(APPLICATION_JSON)
@Path("/{invoiceId:" + UUID_PATTERN + "}/" + PAYMENTS)
public Response createInstantPayment(final PaymentJsonSimple payment,
@QueryParam(QUERY_PAYMENT_EXTERNAL) @DefaultValue("false") final Boolean externalPayment,
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java b/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
index 712baeb..000c896 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestInvoice.java
@@ -86,6 +86,30 @@ public class TestInvoice extends TestJaxrsBase {
}
@Test(groups = "slow")
+ public void testPayAllInvoices() throws Exception {
+ clock.setTime(new DateTime(2012, 4, 25, 0, 3, 42, 0));
+
+ // No payment method
+ final AccountJson accountJson = createAccountNoPMBundleAndSubscriptionAndWaitForFirstInvoice();
+
+ // Check there was no payment made
+ assertEquals(getPaymentsForAccount(accountJson.getAccountId()).size(), 0);
+
+ // Get the invoices
+ final List<InvoiceJsonSimple> invoices = getInvoicesForAccount(accountJson.getAccountId());
+ assertEquals(invoices.size(), 2);
+ final InvoiceJsonSimple invoiceToPay = invoices.get(1);
+ assertEquals(invoiceToPay.getBalance().compareTo(BigDecimal.ZERO), 1);
+
+ // Pay all invoices
+ payAllInvoices(accountJson, true);
+ for (final InvoiceJsonSimple invoice : getInvoicesForAccount(accountJson.getAccountId())) {
+ assertEquals(invoice.getBalance().compareTo(BigDecimal.ZERO), 0);
+ }
+ assertEquals(getPaymentsForAccount(accountJson.getAccountId()).size(), 1);
+ }
+
+ @Test(groups = "slow")
public void testInvoiceCreatePayment() throws Exception {
clock.setTime(new DateTime(2012, 4, 25, 0, 3, 42, 0));
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
index 0426343..ab631f2 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
@@ -784,6 +784,15 @@ public class TestJaxrsBase extends ServerTestSuiteWithEmbeddedDB {
return objFromJson;
}
+ protected void payAllInvoices(final AccountJson accountJson, final Boolean externalPayment) throws IOException {
+ final PaymentJsonSimple payment = new PaymentJsonSimple(null, null, accountJson.getAccountId(), null, null, null, null,
+ null, 0, null, null, null, null, null, null, null);
+ final String postJson = mapper.writeValueAsString(payment);
+
+ final String uri = JaxrsResource.INVOICES_PATH + "/" + JaxrsResource.PAYMENTS;
+ doPost(uri, postJson, ImmutableMap.<String, String>of("externalPayment", externalPayment.toString()), DEFAULT_HTTP_TIMEOUT_SEC);
+ }
+
protected List<PaymentJsonSimple> createInstaPayment(final AccountJson accountJson, final InvoiceJsonSimple invoice) throws IOException {
final PaymentJsonSimple payment = new PaymentJsonSimple(invoice.getAmount(), BigDecimal.ZERO, accountJson.getAccountId(),
invoice.getInvoiceId(), null, null, null, null, 0, null, null, null, null, null, null, null);