@TimedResource @PUT @Path("/{invoiceId:" + UUID_PATTERN + "}/" + COMMIT_INVOICE) @Consumes(APPLICATION_JSON) @Produces(APPLICATION_JSON) @ApiOperation(value = "Perform the invoice status transition from DRAFT to COMMITTED") @ApiResponses(value = {@ApiResponse(code = 204, message = "Successful operation"), @ApiResponse(code = 404, message = "Invoice not found")}) public Response commitInvoice(@PathParam("invoiceId") final UUID invoiceId, @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 InvoiceApiException { final CallContext callContext = context.createCallContextNoAccountId(createdBy, reason, comment, request); invoiceApi.commitInvoice(invoiceId, callContext); return Response.status(Status.NO_CONTENT).build(); }
@Test(groups = "slow", description = "Verify invoice/account balance with DRAFT invoice. Verify that invoice/account balance are ZERO in DRAFT mode but becomes visible after it hasa been COMMITTED." ) public void testDraftInvoiceWithAccountCredit() throws Exception { // Add credit on the account invoiceUserApi.insertCredit(accountId, BigDecimal.TEN, null, accountCurrency, true, null, null, null, callContext); // Create new invoice with one charge and expect account credit to be used final List<InvoiceItem> items = invoiceUserApi.insertExternalCharges(accountId, clock.getUTCToday(), ImmutableList.<InvoiceItem>of(new ExternalChargeInvoiceItem(UUID.randomUUID(), clock.getUTCNow(), null, accountId, null, null, null, null, new BigDecimal("4.0"), accountCurrency, null)), false, null, callContext); assertEquals(items.size(), 1); final UUID invoiceId = items.get(0).getInvoiceId(); final Invoice invoice1 = invoiceUserApi.getInvoice(invoiceId, callContext); assertEquals(invoice1.getStatus(), InvoiceStatus.DRAFT); // Verify CBA was *NOT* applied against DRAFT invoice assertEquals(invoice1.getInvoiceItems().size(), 1); // And balance is ZERO because DRAFT mode assertEquals(invoice1.getBalance().compareTo(BigDecimal.ZERO), 0); // Verify credit is not applied against migration invoice final BigDecimal accountBalance0 = invoiceUserApi.getAccountBalance(accountId, callContext); assertEquals(accountBalance0.compareTo(new BigDecimal("-10.0")), 0); final BigDecimal accountCBA0 = invoiceUserApi.getAccountCBA(accountId, callContext); assertEquals(accountCBA0.compareTo(BigDecimal.TEN), 0); invoiceUserApi.commitInvoice(invoiceId, callContext); final Invoice invoice2 = invoiceUserApi.getInvoice(invoiceId, callContext); assertEquals(invoice2.getStatus(), InvoiceStatus.COMMITTED); // Verify this time credit was applied against COMMITTED invoice assertEquals(invoice2.getBalance().compareTo(BigDecimal.ZERO), 0); final BigDecimal accountBalance1 = invoiceUserApi.getAccountBalance(accountId, callContext); assertEquals(accountBalance1.compareTo(new BigDecimal("-6.0")), 0); final BigDecimal accountCBA1 = invoiceUserApi.getAccountCBA(accountId, callContext); assertEquals(accountCBA1.compareTo(new BigDecimal("6.0")), 0); }
invoiceApi.commitInvoice(trialInvoice.getId(), callContext); assertListenerStatus(); invoiceApi.commitInvoice(firstNonTrialInvoice.getId(), callContext); assertListenerStatus();
invoiceUserApi.commitInvoice(accountInvoices.get(1).getId(), callContext); assertListenerStatus();
invoiceUserApi.commitInvoice(draftInvoiceItems.get(0).getInvoiceId(), callContext); assertListenerStatus();
invoiceUserApi.commitInvoice(childInvoices.get(1).getId(), callContext); assertListenerStatus();
invoiceUserApi.commitInvoice(creditInvoice.getId(), callContext); creditInvoice = invoiceUserApi.getInvoice(invoiceId, callContext); Assert.assertEquals(creditInvoice.getStatus(), InvoiceStatus.COMMITTED);
invoiceUserApi.commitInvoice(parentInvoice.getId(), callContext); assertListenerStatus();
invoiceApi.commitInvoice(trialInvoice.getId(), callContext); assertListenerStatus(); invoiceApi.commitInvoice(firstNonTrialInvoice.getId(), callContext); assertListenerStatus();