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)