Details
diff --git a/api/src/main/java/com/ning/billing/ErrorCode.java b/api/src/main/java/com/ning/billing/ErrorCode.java
index 9e17323..0cda076 100644
--- a/api/src/main/java/com/ning/billing/ErrorCode.java
+++ b/api/src/main/java/com/ning/billing/ErrorCode.java
@@ -183,7 +183,8 @@ public enum ErrorCode {
INVOICE_INVALID_DATE_SEQUENCE(4004, "Date sequence was invalid. Start Date: %s; End Date: %s; Target Date: %s"),
INVOICE_TARGET_DATE_TOO_FAR_IN_THE_FUTURE(4005, "The target date was too far in the future. Target Date: %s"),
INVOICE_NOT_FOUND(4006, "No invoice could be found for id %s."),
-
+ INVOICE_NOTHING_TO_DO(4007, "No invoice to generate for account %s and date %s"),
+
/*
*
* Range 4900: Invoice payment
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 850f2c4..4245ba8 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
@@ -89,7 +89,12 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
public Invoice triggerInvoiceGeneration(final UUID accountId,
final DateTime targetDate, final boolean dryRun,
final CallContext context) throws InvoiceApiException {
- return dispatcher.processAccount(accountId, targetDate, dryRun, context);
+ Invoice result = dispatcher.processAccount(accountId, targetDate, dryRun, context);
+ if (result == null) {
+ throw new InvoiceApiException(ErrorCode.INVOICE_NOTHING_TO_DO, accountId, targetDate);
+ } else {
+ return result;
+ }
}
@Override
diff --git a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
index af6dad1..7d94daa 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
@@ -126,7 +126,6 @@ public class InvoiceDispatcher {
lock = locker.lockWithNumberOfTries(LockerService.INVOICE, accountId.toString(), NB_LOCK_TRY);
return processAccountWithLock(accountId, targetDate, dryRun, context);
-
} catch (LockFailedException e) {
// Not good!
log.error(String.format("Failed to process invoice for account %s, targetDate %s",
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 dc2d8e9..822e0ab 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
@@ -40,6 +40,7 @@ import org.joda.time.format.ISODateTimeFormat;
import com.google.common.base.Preconditions;
import com.google.inject.Inject;
+import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.AccountUserApi;
@@ -149,8 +150,7 @@ public class InvoiceResource extends JaxRsResourceBase {
@POST
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
- public Response createFutureInvoice(final InvoiceJsonSimple invoice,
- @QueryParam(QUERY_ACCOUNT_ID) final String accountId,
+ public Response createFutureInvoice(@QueryParam(QUERY_ACCOUNT_ID) final String accountId,
@QueryParam(QUERY_TARGET_DATE) final String targetDate,
@QueryParam(QUERY_DRY_RUN) @DefaultValue("false") final Boolean dryRun,
@HeaderParam(HDR_CREATED_BY) final String createdBy,
@@ -173,7 +173,11 @@ public class InvoiceResource extends JaxRsResourceBase {
} catch (AccountApiException e) {
return Response.status(Status.BAD_REQUEST).entity(e.getMessage()).build();
} catch (InvoiceApiException e) {
- return Response.status(Status.BAD_REQUEST).entity(e.getMessage()).build();
+ if (e.getCode() == ErrorCode.INVOICE_NOTHING_TO_DO.getCode()) {
+ return Response.status(Status.NO_CONTENT).build();
+ } else {
+ return Response.status(Status.BAD_REQUEST).entity(e.getMessage()).build();
+ }
} catch (NullPointerException e) {
return Response.status(Status.BAD_REQUEST).entity(e.getMessage()).build();
}