@Override public UUID getAccountId() { return item.getAccountId(); }
@Override public boolean apply(@Nullable final InvoiceItem invoice) { return invoice.getAccountId().equals(item.getChildAccountId()); } }));
public ItemAdjInvoiceItem(final InvoiceItem linkedInvoiceItem, final LocalDate effectiveDate, final BigDecimal amount, final Currency currency) { this(UUIDs.randomUUID(), null, linkedInvoiceItem.getInvoiceId(), linkedInvoiceItem.getAccountId(), effectiveDate, linkedInvoiceItem.getDescription(), amount, currency, linkedInvoiceItem.getId(), null); }
public static InvoiceItem buildInvoiceItem(final Invoice invoice, final InvoiceItemType invoiceItemType, final BigDecimal amount, @Nullable final UUID linkedItemID) { final InvoiceItem invoiceItem = Mockito.mock(InvoiceItem.class); Mockito.when(invoiceItem.getId()).thenReturn(UUID.randomUUID()); Mockito.when(invoiceItem.getInvoiceItemType()).thenReturn(invoiceItemType); // To work-around org.mockito.exceptions.misusing.UnfinishedStubbingException final UUID accountId = invoice.getAccountId(); final UUID invoiceId = invoice.getId(); final Currency currency = invoice.getCurrency(); Mockito.when(invoiceItem.getAccountId()).thenReturn(accountId); Mockito.when(invoiceItem.getInvoiceId()).thenReturn(invoiceId); Mockito.when(invoiceItem.getLinkedItemId()).thenReturn(linkedItemID); Mockito.when(invoiceItem.getBundleId()).thenReturn(UUID.randomUUID()); Mockito.when(invoiceItem.getSubscriptionId()).thenReturn(UUID.randomUUID()); Mockito.when(invoiceItem.getPlanName()).thenReturn(UUID.randomUUID().toString()); Mockito.when(invoiceItem.getPhaseName()).thenReturn(UUID.randomUUID().toString()); Mockito.when(invoiceItem.getUsageName()).thenReturn(UUID.randomUUID().toString()); Mockito.when(invoiceItem.getAmount()).thenReturn(amount); Mockito.when(invoiceItem.getCurrency()).thenReturn(currency); return invoiceItem; }
public CreditJson(final Invoice invoice, final InvoiceItem credit, final List<AuditLog> auditLogs) { super(toAuditLogJson(auditLogs)); this.creditId = credit.getId(); this.accountId = credit.getAccountId(); this.creditAmount = credit.getAmount(); this.currency = credit.getCurrency(); this.invoiceId = credit.getInvoiceId(); this.invoiceNumber = invoice.getInvoiceNumber().toString(); this.effectiveDate = credit.getStartDate(); this.description = credit.getDescription(); this.itemDetails = credit.getItemDetails(); }
private void verifyExternalChargeOnNewInvoice(final BigDecimal initialAccountBalance, @Nullable final UUID bundleId, final BigDecimal externalChargeAmount, final InvoiceItem externalChargeInvoiceItem) throws InvoiceApiException { Assert.assertNotNull(externalChargeInvoiceItem.getInvoiceId()); Assert.assertNotEquals(externalChargeInvoiceItem.getInvoiceId(), invoiceId); Assert.assertEquals(externalChargeInvoiceItem.getBundleId(), bundleId); Assert.assertEquals(externalChargeInvoiceItem.getInvoiceItemType(), InvoiceItemType.EXTERNAL_CHARGE); Assert.assertEquals(externalChargeInvoiceItem.getAccountId(), accountId); Assert.assertEquals(externalChargeInvoiceItem.getAmount().compareTo(externalChargeAmount), 0); Assert.assertEquals(externalChargeInvoiceItem.getCurrency(), accountCurrency); Assert.assertNull(externalChargeInvoiceItem.getLinkedItemId()); // Verify the adjusted invoice balance final BigDecimal adjustedInvoiceBalance = invoiceUserApi.getInvoice(externalChargeInvoiceItem.getInvoiceId(), callContext).getBalance(); Assert.assertEquals(adjustedInvoiceBalance.compareTo(externalChargeAmount), 0); // Verify the adjusted account balance final BigDecimal adjustedAccountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(adjustedAccountBalance, initialAccountBalance.add(externalChargeAmount)); }
private List<AuditLog> getAuditLogForInvoiceItem(final InvoiceItem invoiceItem, final TenantContext context) { return auditUserApi.getAccountAuditLogs(invoiceItem.getAccountId(), AuditLevel.FULL, context).getAuditLogsForInvoiceItem(invoiceItem.getId()); }
@Override public OnSuccessInvoiceResult onSuccessCall(final InvoiceContext invoiceContext, final Iterable<PluginProperty> pluginProperties) { Assert.assertFalse(invoiceContext.isRescheduled()); final Invoice invoice = invoiceContext.getInvoice(); Assert.assertNotNull(invoice); for (final TaxInvoiceItem taxInvoiceItem : taxItems) { final InvoiceItem createdTaxInvoiceItem = Iterables.<InvoiceItem>find(invoice.getInvoiceItems(), new Predicate<InvoiceItem>() { @Override public boolean apply(final InvoiceItem invoiceItem) { return invoiceItem.getId().compareTo(taxInvoiceItem.getId()) == 0; } }); Assert.assertEquals(createdTaxInvoiceItem.getAccountId(), taxInvoiceItem.getAccountId()); } reset(); return null; }
@Test(groups = "slow", expectedExceptions = InvoiceApiException.class, expectedExceptionsMessageRegExp = ".*it is already in COMMITTED status") public void testAdjustCommittedInvoice() throws Exception { // Verify the initial invoice balance final BigDecimal invoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); Assert.assertEquals(invoiceBalance.compareTo(BigDecimal.ZERO), 1); // Verify the initial account balance final BigDecimal accountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(accountBalance, invoiceBalance); // Adjust the invoice for the full amount final InvoiceItem creditInvoiceItem = invoiceUserApi.insertCreditForInvoice(accountId, invoiceId, invoiceBalance, clock.getUTCToday(), accountCurrency, "some description", null, null, callContext); Assert.assertEquals(creditInvoiceItem.getInvoiceId(), invoiceId); Assert.assertEquals(creditInvoiceItem.getInvoiceItemType(), InvoiceItemType.CREDIT_ADJ); Assert.assertEquals(creditInvoiceItem.getAccountId(), accountId); Assert.assertEquals(creditInvoiceItem.getAmount().compareTo(invoiceBalance.negate()), 0); Assert.assertEquals(creditInvoiceItem.getCurrency(), accountCurrency); Assert.assertEquals(creditInvoiceItem.getDescription(), "some description"); Assert.assertNull(creditInvoiceItem.getLinkedItemId()); // Verify the adjusted invoice balance final BigDecimal adjustedInvoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); Assert.assertEquals(adjustedInvoiceBalance.compareTo(BigDecimal.ZERO), 0); // Verify the adjusted account balance final BigDecimal adjustedAccountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(adjustedAccountBalance, adjustedInvoiceBalance); }
@Test(groups = "fast") public void testBuildTaxItem() throws Exception { // Overrides Assert.assertEquals(invoice1TaxItem.getInvoiceItemType(), InvoiceItemType.TAX); Assert.assertEquals(invoice1TaxItem.getStartDate(), invoice1TaxableItem.getStartDate()); Assert.assertNull(invoice1TaxItem.getEndDate()); Assert.assertEquals(invoice1TaxItem.getAmount().compareTo(BigDecimal.ONE), 0); Assert.assertEquals(invoice1TaxItem.getDescription(), "TestNG tax"); Assert.assertEquals(invoice1TaxItem.getLinkedItemId(), invoice1TaxableItem.getId()); Assert.assertNull(invoice1TaxItem.getRate()); // Copies Assert.assertEquals(invoice1TaxItem.getInvoiceId(), invoice1TaxableItem.getInvoiceId()); Assert.assertEquals(invoice1TaxItem.getAccountId(), invoice1TaxableItem.getAccountId()); Assert.assertEquals(invoice1TaxItem.getCurrency(), invoice1TaxableItem.getCurrency()); Assert.assertEquals(invoice1TaxItem.getBundleId(), invoice1TaxableItem.getBundleId()); Assert.assertEquals(invoice1TaxItem.getSubscriptionId(), invoice1TaxableItem.getSubscriptionId()); Assert.assertEquals(invoice1TaxItem.getPlanName(), invoice1TaxableItem.getPlanName()); Assert.assertEquals(invoice1TaxItem.getPhaseName(), invoice1TaxableItem.getPhaseName()); Assert.assertEquals(invoice1TaxItem.getUsageName(), invoice1TaxableItem.getUsageName()); } }
@Override public InvoiceItem getCreditById(final UUID creditId, final TenantContext context) throws InvoiceApiException { final InvoiceItem creditItem = InvoiceItemFactory.fromModelDao(dao.getCreditById(creditId, internalCallContextFactory.createInternalTenantContext(creditId, ObjectType.INVOICE_ITEM, context))); if (creditItem == null) { throw new InvoiceApiException(ErrorCode.INVOICE_NO_SUCH_CREDIT, creditId); } return new CreditAdjInvoiceItem(creditItem.getId(), creditItem.getCreatedDate(), creditItem.getInvoiceId(), creditItem.getAccountId(), creditItem.getStartDate(), creditItem.getDescription(), creditItem.getAmount().negate(), creditItem.getCurrency(), creditItem.getItemDetails()); }
public Item(final InvoiceItem item, final LocalDate startDate, final LocalDate endDate, final UUID targetInvoiceId, final ItemAction action) { this.id = item.getId(); this.accountId = item.getAccountId(); this.bundleId = item.getBundleId(); this.subscriptionId = item.getSubscriptionId(); this.targetInvoiceId = targetInvoiceId; this.invoiceId = item.getInvoiceId(); this.productName = item.getProductName(); this.planName = item.getPlanName(); this.phaseName = item.getPhaseName(); this.startDate = startDate; this.endDate = endDate; this.amount = item.getAmount().abs(); this.rate = item.getRate(); this.currency = item.getCurrency(); this.linkedId = item.getLinkedItemId(); this.createdDate = item.getCreatedDate(); this.action = action; this.currentRepairedAmount = BigDecimal.ZERO; this.adjustedAmount = BigDecimal.ZERO; }
@Test(groups = "slow") public void testAdjustFullInvoiceItem() throws Exception { final InvoiceItem invoiceItem = invoiceUserApi.getInvoice(invoiceId, callContext).getInvoiceItems().get(0); // Verify we picked a non zero item Assert.assertEquals(invoiceItem.getAmount().compareTo(BigDecimal.ZERO), 1); // Verify the initial invoice balance final BigDecimal invoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); Assert.assertEquals(invoiceBalance.compareTo(BigDecimal.ZERO), 1); // Verify the initial account balance final BigDecimal accountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(accountBalance, invoiceBalance); // Adjust the invoice for the full amount final InvoiceItem adjInvoiceItem = invoiceUserApi.insertInvoiceItemAdjustment(accountId, invoiceId, invoiceItem.getId(), clock.getUTCToday(), null, null, null, callContext); Assert.assertEquals(adjInvoiceItem.getInvoiceId(), invoiceId); Assert.assertEquals(adjInvoiceItem.getInvoiceItemType(), InvoiceItemType.ITEM_ADJ); Assert.assertEquals(adjInvoiceItem.getAccountId(), accountId); Assert.assertEquals(adjInvoiceItem.getAmount(), invoiceItem.getAmount().negate()); Assert.assertEquals(adjInvoiceItem.getCurrency(), accountCurrency); Assert.assertEquals(adjInvoiceItem.getLinkedItemId(), invoiceItem.getId()); // Verify the adjusted invoice balance final BigDecimal adjustedInvoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); verifyAdjustedInvoiceBalance(invoiceBalance, invoiceItem.getAmount(), invoiceItem.getCurrency(), adjustedInvoiceBalance); // Verify the adjusted account balance final BigDecimal adjustedAccountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(adjustedAccountBalance, adjustedInvoiceBalance); // Verify idempotency Assert.assertNull(invoiceUserApi.insertInvoiceItemAdjustment(accountId, invoiceId, invoiceItem.getId(), clock.getUTCToday(), null, null, null, callContext)); }
@Override public InvoiceItem getExternalChargeById(final UUID externalChargeId, final TenantContext context) throws InvoiceApiException { final InvoiceItem externalChargeItem = InvoiceItemFactory.fromModelDao(dao.getExternalChargeById(externalChargeId, internalCallContextFactory.createInternalTenantContext(externalChargeId, ObjectType.INVOICE_ITEM, context))); if (externalChargeItem == null) { throw new InvoiceApiException(ErrorCode.INVOICE_NO_SUCH_EXTERNAL_CHARGE, externalChargeId); } return new ExternalChargeInvoiceItem(externalChargeItem.getId(), externalChargeItem.getInvoiceId(), externalChargeItem.getAccountId(), externalChargeItem.getDescription(), externalChargeItem.getStartDate(), externalChargeItem.getEndDate(), externalChargeItem.getAmount(), externalChargeItem.getCurrency(), externalChargeItem.getItemDetails()); }
Assert.assertEquals(adjInvoiceItem.getInvoiceId(), invoiceId); Assert.assertEquals(adjInvoiceItem.getInvoiceItemType(), InvoiceItemType.ITEM_ADJ); Assert.assertEquals(adjInvoiceItem.getAccountId(), accountId); Assert.assertEquals(adjInvoiceItem.getAmount(), adjAmount.negate()); Assert.assertEquals(adjInvoiceItem.getCurrency(), accountCurrency);
public InvoiceItemJson(final InvoiceItem item, final List<InvoiceItem> childItems, @Nullable final List<AuditLog> auditLogs) { this(item.getId(), item.getInvoiceId(), item.getLinkedItemId(), item.getAccountId(), item.getChildAccountId(), item.getBundleId(), item.getSubscriptionId(), item.getProductName(), item.getPlanName(), item.getPhaseName(), item.getUsageName(), item.getPrettyProductName(), item.getPrettyPlanName(), item.getPrettyPhaseName(), item.getPrettyUsageName(), item.getInvoiceItemType(), item.getDescription(), item.getStartDate(), item.getEndDate(), item.getAmount(), item.getRate(), item.getCurrency(), item.getQuantity(), item.getItemDetails(), toInvoiceItemJson(childItems), toAuditLogJson(auditLogs)); }
final InvoiceItem fixedItem1 = new FixedPriceInvoiceItem(invoice1.getId(), invoice1.getAccountId(), null, null, null, UUID.randomUUID().toString(), UUID.randomUUID().toString(), clock.getUTCToday(), BigDecimal.TEN, Currency.USD); final RepairAdjInvoiceItem repairAdjInvoiceItem = new RepairAdjInvoiceItem(fixedItem1.getInvoiceId(), fixedItem1.getAccountId(), fixedItem1.getStartDate(), fixedItem1.getEndDate(), fixedItem1.getAmount().negate(), fixedItem1.getCurrency(), fixedItem1.getId()); final CreditBalanceAdjInvoiceItem creditBalanceAdjInvoiceItem1 = new CreditBalanceAdjInvoiceItem(fixedItem1.getInvoiceId(), fixedItem1.getAccountId(), fixedItem1.getStartDate(), fixedItem1.getAmount(), fixedItem1.getCurrency());
public InvoiceItemModelDao(final InvoiceItem invoiceItem) { this(invoiceItem.getId(), invoiceItem.getCreatedDate(), invoiceItem.getInvoiceItemType(), invoiceItem.getInvoiceId(), invoiceItem.getAccountId(), invoiceItem.getChildAccountId(), invoiceItem.getBundleId(), invoiceItem.getSubscriptionId(), invoiceItem.getDescription(), invoiceItem.getProductName(), invoiceItem.getPlanName(), invoiceItem.getPhaseName(), invoiceItem.getUsageName(), invoiceItem.getStartDate(), invoiceItem.getEndDate(), invoiceItem.getAmount(), invoiceItem.getRate(), invoiceItem.getCurrency(), invoiceItem.getLinkedItemId(), invoiceItem.getQuantity(), invoiceItem.getItemDetails()); }
invoiceItemType, invoiceId, model.getAccountId(), model.getChildAccountId(), startDate,
mutableField("createdDate", existingItem != null ? existingItem.getCreatedDate() : null, additionalInvoiceItem.getCreatedDate(), invoicePlugin), invoiceId, immutableField("accountId", existingItem, existingItem != null ? existingItem.getAccountId() : null, additionalInvoiceItem.getAccountId(), invoicePlugin), immutableField("bundleId", existingItem, existingItem != null ? existingItem.getBundleId() : null, additionalInvoiceItem.getBundleId(), invoicePlugin), immutableField("subscriptionId", existingItem, existingItem != null ? existingItem.getSubscriptionId() : null, additionalInvoiceItem.getSubscriptionId(), invoicePlugin),