@Override public BigDecimal getAmount() { return MoreObjects.firstNonNull(item.getAmount(), BigDecimal.ZERO); }
/** * Compute the sum of invoice items amount, taking into account adjustments, if any * * @param invoiceItem invoice items to sum * @param adjustmentItems adjustments for that item, if any * @return the adjusted sum of all invoice items amount */ protected BigDecimal netAmount(final InvoiceItem invoiceItem, @Nullable final Iterable<InvoiceItem> adjustmentItems) { final BigDecimal adjustedAmount = sum(adjustmentItems); return invoiceItem.getAmount() != null ? invoiceItem.getAmount().add(adjustedAmount) : adjustedAmount; }
@Override public boolean apply(final InvoiceItem input) { return input.getAmount().compareTo(BigDecimal.ZERO) > 0; } }));
public static boolean isInvoiceAdjustmentItem(final InvoiceItem invoiceItem, final Iterable<InvoiceItem> otherInvoiceItems) { // Invoice level credit, i.e. credit adj, but NOT on its on own invoice return (InvoiceItemType.CREDIT_ADJ.equals(invoiceItem.getInvoiceItemType()) && !(Iterables.size(otherInvoiceItems) == 1 && InvoiceItemType.CBA_ADJ.equals(otherInvoiceItems.iterator().next().getInvoiceItemType()) && otherInvoiceItems.iterator().next().getInvoiceId().equals(invoiceItem.getInvoiceId()) && otherInvoiceItems.iterator().next().getAmount().compareTo(invoiceItem.getAmount().negate()) == 0)); }
@Override public boolean apply(final InvoiceItem input) { return input.getAmount().compareTo(BigDecimal.ZERO) > 0; } }));
public static BigDecimal computeInvoiceAmountCredited(final Currency currency, @Nullable final Iterable<InvoiceItem> invoiceItems) { BigDecimal amountCredited = BigDecimal.ZERO; if (invoiceItems == null || !invoiceItems.iterator().hasNext()) { return KillBillMoney.of(amountCredited, currency); } for (final InvoiceItem invoiceItem : invoiceItems) { if (isAccountCreditItem(invoiceItem)) { amountCredited = amountCredited.add(invoiceItem.getAmount()); } } return KillBillMoney.of(amountCredited, currency); }
public static BigDecimal computeInvoiceOriginalAmountCharged(final DateTime invoiceCreatedDate, final Currency currency, @Nullable final Iterable<InvoiceItem> invoiceItems) { BigDecimal amountCharged = BigDecimal.ZERO; if (invoiceItems == null || !invoiceItems.iterator().hasNext()) { return KillBillMoney.of(amountCharged, currency); } for (final InvoiceItem invoiceItem : invoiceItems) { if (isCharge(invoiceItem) && (invoiceItem.getCreatedDate() != null && invoiceItem.getCreatedDate().equals(invoiceCreatedDate))) { amountCharged = amountCharged.add(invoiceItem.getAmount()); } } return KillBillMoney.of(amountCharged, currency); }
private InvoiceItem createInvoiceItem(final BigDecimal amount, final String networkName, final LocalDate startDate, final LocalDate endDate, final String planName) { final InvoiceItem item = Mockito.mock(InvoiceItem.class); Mockito.when(item.getAmount()).thenReturn(amount); Mockito.when(item.getStartDate()).thenReturn(startDate); Mockito.when(item.getEndDate()).thenReturn(endDate); Mockito.when(item.getPlanName()).thenReturn(planName); Mockito.when(item.getDescription()).thenReturn(networkName); return item; } }
@Test(groups = "slow") public void testAddTaxItems() throws Exception { final BigDecimal taxItemAmount = BigDecimal.TEN; final UUID bundleId = UUID.randomUUID(); final InvoiceItem taxItem = new TaxInvoiceItem(null, accountId, bundleId, UUID.randomUUID().toString(), clock.getUTCToday(), taxItemAmount, accountCurrency); final List<InvoiceItem> resultTaxInvoiceItems = invoiceUserApi.insertTaxItems(accountId, clock.getUTCToday(), ImmutableList.<InvoiceItem>of(taxItem), true, null, callContext); Assert.assertEquals(resultTaxInvoiceItems.size(), 1); Assert.assertEquals(resultTaxInvoiceItems.get(0).getAmount().compareTo(taxItemAmount), 0); Assert.assertEquals(resultTaxInvoiceItems.get(0).getBundleId(), bundleId); }
@Override public BigDecimal getChargedAmount() { BigDecimal result = BigDecimal.ZERO; for (final InvoiceItem i : invoiceItems) { if (!i.getInvoiceItemType().equals(InvoiceItemType.CBA_ADJ)) { result = result.add(i.getAmount()); } } return result; }
@Override public BigDecimal getCreditedAmount() { BigDecimal result = BigDecimal.ZERO; for (final InvoiceItem i : invoiceItems) { if (i.getInvoiceItemType().equals(InvoiceItemType.CBA_ADJ)) { result = result.add(i.getAmount()); } } return result; }
private void createAndVerifyExternalCharge(final BigDecimal amount, final Currency currency) throws EntityPersistenceException { final InvoiceItem externalChargeInvoiceItem = new ExternalChargeInvoiceItem(UUID.randomUUID(), account.getId(), UUID.randomUUID(), UUID.randomUUID().toString(), new LocalDate(2012, 4, 1), new LocalDate(2012, 5, 1), amount, currency, null); invoiceUtil.createInvoiceItem(externalChargeInvoiceItem, context); final InvoiceItemModelDao savedItem = invoiceUtil.getInvoiceItemById(externalChargeInvoiceItem.getId(), context); assertSameInvoiceItem(externalChargeInvoiceItem, savedItem); Assert.assertEquals(externalChargeInvoiceItem.getAmount().compareTo(amount), 0); }
@BeforeMethod(groups = "fast") public void setUp() throws Exception { final InvoiceItem item = Mockito.mock(InvoiceItem.class); Mockito.when(item.getAmount()).thenReturn(BigDecimal.ZERO); root = new ItemsNodeInterval(null, new Item(item, new LocalDate(2016, 1, 1), new LocalDate(2016, 2, 1), null, ItemAction.ADD)); node11 = new ItemsNodeInterval(root, new Item(item, new LocalDate(2016, 1, 10), new LocalDate(2016, 1, 15), null, ItemAction.ADD)); node21 = new ItemsNodeInterval(node11, new Item(item, new LocalDate(2016, 1, 10), new LocalDate(2016, 1, 12), null, ItemAction.ADD)); node22 = new ItemsNodeInterval(node11, new Item(item, new LocalDate(2016, 1, 14), new LocalDate(2016, 1, 15), null, ItemAction.ADD)); node12 = new ItemsNodeInterval(root, new Item(item, new LocalDate(2016, 1, 20), new LocalDate(2016, 1, 25), null, ItemAction.ADD)); node23 = new ItemsNodeInterval(node12, new Item(item, new LocalDate(2016, 1, 22), new LocalDate(2016, 1, 24), null, ItemAction.ADD)); node31 = new ItemsNodeInterval(node23, new Item(item, new LocalDate(2016, 1, 22), new LocalDate(2016, 1, 23), null, ItemAction.ADD)); }
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(); }
@Test(groups = "fast") public void testZeroDollarEvents() throws InvoiceApiException, CatalogApiException { final Plan plan = new MockPlan(); final PlanPhase planPhase = createMockMonthlyPlanPhase(ZERO); final BillingEventSet events = new MockBillingEventSet(); final LocalDate targetDate = invoiceUtil.buildDate(2011, 1, 1); events.add(createBillingEvent(UUID.randomUUID(), UUID.randomUUID(), targetDate, plan, planPhase, 1)); final InvoiceWithMetadata invoiceWithMetadata = generator.generateInvoice(account, events, null, null, targetDate, Currency.USD, internalCallContext); final Invoice invoice = invoiceWithMetadata.getInvoice(); assertNotNull(invoice); assertEquals(invoice.getInvoiceItems().size(), 1); assertEquals(invoice.getInvoiceItems().get(0).getAmount().compareTo(BigDecimal.ZERO), 0); }
@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()); }
@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()); }
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)); }
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()); }