@TimedResource @POST @Consumes(APPLICATION_JSON) @Produces(APPLICATION_JSON) @ApiOperation(value = "Trigger an invoice generation", response = InvoiceJson.class) @ApiResponses(value = {@ApiResponse(code = 201, message = "Created invoice successfully"), @ApiResponse(code = 400, message = "Invalid account id or target datetime supplied")}) public Response createFutureInvoice(@ApiParam(required=true) @QueryParam(QUERY_ACCOUNT_ID) final UUID accountId, @QueryParam(QUERY_TARGET_DATE) final String targetDate, @HeaderParam(HDR_CREATED_BY) final String createdBy, @HeaderParam(HDR_REASON) final String reason, @HeaderParam(HDR_COMMENT) final String comment, @javax.ws.rs.core.Context final HttpServletRequest request, @javax.ws.rs.core.Context final UriInfo uriInfo) throws AccountApiException, InvoiceApiException { final CallContext callContext = context.createCallContextWithAccountId(accountId, createdBy, reason, comment, request); final LocalDate inputDate = toLocalDate(targetDate); try { final Invoice generatedInvoice = invoiceApi.triggerInvoiceGeneration(accountId, inputDate, callContext); return uriBuilder.buildResponse(uriInfo, InvoiceResource.class, "getInvoice", generatedInvoice.getId(), request); } catch (InvoiceApiException e) { if (e.getCode() == ErrorCode.INVOICE_NOTHING_TO_DO.getCode()) { return Response.status(Status.NOT_FOUND).build(); } throw e; } }
@Override public void write(final OutputStream output) throws IOException, WebApplicationException { try { final JsonGenerator generator = mapper.getFactory().createGenerator(output); generator.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false); generator.writeStartObject(); while (iterator.hasNext()) { final Tag tag = iterator.next(); final UUID accountId = tag.getObjectId(); try { invoiceUserApi.triggerInvoiceGeneration(accountId, clock.getUTCToday(), callContext); generator.writeStringField(accountId.toString(), OK); } catch (final InvoiceApiException e) { if (e.getCode() != ErrorCode.INVOICE_NOTHING_TO_DO.getCode()) { log.warn("Unable to trigger invoice generation for accountId='{}'", accountId); } generator.writeStringField(accountId.toString(), ErrorCode.fromCode(e.getCode()).toString()); } } generator.writeEndObject(); generator.close(); } finally { // In case the client goes away (IOException), make sure to close the underlying DB connection tags.close(); } } };
protected void checkNoMoreInvoiceToGenerate(final Account account) { busHandler.pushExpectedEvent(NextEvent.NULL_INVOICE); try { invoiceUserApi.triggerInvoiceGeneration(account.getId(), clock.getUTCToday(), callContext); fail("Should not have generated an extra invoice"); } catch (final InvoiceApiException e) { assertListenerStatus(); assertEquals(e.getCode(), ErrorCode.INVOICE_NOTHING_TO_DO.getCode()); } }
final Invoice firstInvoice = invoiceUserApi.triggerInvoiceGeneration(createdEntitlement.getAccountId(), futureStartDate, callContext); assertListenerStatus();
invoiceUserApi.triggerInvoiceGeneration(account.getId(), clock.getUTCToday(), callContext); assertListenerStatus(); invoiceChecker.checkInvoice(account.getId(), 2, callContext,
invoiceUserApi.triggerInvoiceGeneration(account.getId(), clock.getUTCToday(), callContext); Assert.fail(); } catch (final InvoiceApiException e) { invoiceUserApi.triggerInvoiceGeneration(account.getId(), clock.getUTCToday(), callContext); Assert.fail(); } catch (final InvoiceApiException e) {
invoiceUserApi.triggerInvoiceGeneration(account.getId(), new LocalDate(2012, 5, 1), callContext); invoiceUserApi.triggerInvoiceGeneration(account.getId(), new LocalDate(2012, 5, 1), callContext);
invoiceUserApi.triggerInvoiceGeneration(account.getId(), new LocalDate(2012, 5, 1), callContext); invoiceUserApi.triggerInvoiceGeneration(account.getId(), new LocalDate(2012, 5, 1), callContext);
invoice = invoiceUserApi.triggerInvoiceGeneration(account.getId(), clock.getUTCToday(), callContext); assertListenerStatus();
final Invoice realInvoice = invoiceUserApi.triggerInvoiceGeneration(createdEntitlement.getAccountId(), futureDate, callContext); assertListenerStatus();