killbill-aplcache

invoice: add API and endpoint to retrieve invoices as HTML Signed-off-by:

6/16/2012 6:40:57 PM

Details

diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
index 0414c25..9c32e46 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.invoice.api;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.List;
@@ -23,6 +24,7 @@ import java.util.UUID;
 
 import org.joda.time.DateTime;
 
+import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.callcontext.CallContext;
@@ -50,4 +52,6 @@ public interface InvoiceUserApi {
 
     public InvoiceItem insertCredit(UUID accountId, BigDecimal amount, DateTime effectiveDate,
                                     Currency currency, CallContext context) throws InvoiceApiException;
+
+    public String getInvoiceAsHTML(UUID invoiceId) throws AccountApiException, IOException;
 }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
index e6dc189..d13e740 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.invoice.api.user;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.UUID;
@@ -23,6 +24,9 @@ import java.util.UUID;
 import org.joda.time.DateTime;
 
 import com.google.inject.Inject;
+import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.AccountApiException;
+import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.invoice.InvoiceDispatcher;
 import com.ning.billing.invoice.api.Invoice;
@@ -31,17 +35,22 @@ import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoicePayment;
 import com.ning.billing.invoice.api.InvoiceUserApi;
 import com.ning.billing.invoice.dao.InvoiceDao;
+import com.ning.billing.invoice.template.HtmlInvoiceGenerator;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.callcontext.CallContext;
 
 public class DefaultInvoiceUserApi implements InvoiceUserApi {
     private final InvoiceDao dao;
     private final InvoiceDispatcher dispatcher;
+    private final AccountUserApi accountUserApi;
+    private final HtmlInvoiceGenerator generator;
 
     @Inject
-    public DefaultInvoiceUserApi(final InvoiceDao dao, final InvoiceDispatcher dispatcher) {
+    public DefaultInvoiceUserApi(final InvoiceDao dao, final InvoiceDispatcher dispatcher, final AccountUserApi accountUserApi, final HtmlInvoiceGenerator generator) {
         this.dao = dao;
         this.dispatcher = dispatcher;
+        this.accountUserApi = accountUserApi;
+        this.generator = generator;
     }
 
     @Override
@@ -102,4 +111,11 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
                                     final Currency currency, final CallContext context) throws InvoiceApiException {
         return dao.insertCredit(accountId, amount, effectiveDate, currency, context);
     }
+
+    @Override
+    public String getInvoiceAsHTML(final UUID invoiceId) throws AccountApiException, IOException {
+        final Invoice invoice = getInvoice(invoiceId);
+        final Account account = accountUserApi.getAccountById(invoice.getAccountId());
+        return generator.generateInvoice(account, invoice, "HtmlInvoiceTemplate");
+    }
 }
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 3cce218..d70840d 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
@@ -28,6 +28,7 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
@@ -61,6 +62,7 @@ import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.dao.ObjectType;
 
 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
+import static javax.ws.rs.core.MediaType.TEXT_HTML;
 
 
 @Path(JaxrsResource.INVOICES_PATH)
@@ -129,6 +131,19 @@ public class InvoiceResource extends JaxRsResourceBase {
         }
     }
 
+    @GET
+    @Path("/{invoiceId:" + UUID_PATTERN + "}/html")
+    @Produces(TEXT_HTML)
+    public Response getInvoiceAsHTML(@PathParam("invoiceId") final String invoiceId) {
+        try {
+            return Response.status(Status.OK).entity(invoiceApi.getInvoiceAsHTML(UUID.fromString(invoiceId))).build();
+        } catch (AccountApiException e) {
+            return Response.status(Status.NO_CONTENT).build();
+        } catch (IOException e) {
+            return Response.status(Status.INTERNAL_SERVER_ERROR).build();
+        }
+    }
+
     @POST
     @Consumes(APPLICATION_JSON)
     @Produces(APPLICATION_JSON)