@Override public String getItemDetails() { return item.getItemDetails(); }
@Override public boolean apply(final InvoiceItem input) { return input.getItemDetails() == null || input.getItemDetails().isEmpty(); } });
@VisibleForTesting List<UsageConsumableInArrearTierUnitAggregate> getBilledDetailsForUnitType(final Iterable<InvoiceItem> billedItems, final String unitType) { // Aggregate on a per-tier level, will return a list with item per level -- for this 'unitType' final Map<Integer, UsageConsumableInArrearTierUnitAggregate> resultMap = new TreeMap<Integer, UsageConsumableInArrearTierUnitAggregate>(Ordering.<Integer>natural()); List<UsageConsumableInArrearTierUnitAggregate> tierDetails = new ArrayList<UsageConsumableInArrearTierUnitAggregate>(); for (final InvoiceItem bi : billedItems) { if (usageDetailMode == UsageDetailMode.DETAIL) { final UsageConsumableInArrearTierUnitAggregate targetTierUnitDetail = fromJson(bi.getItemDetails(), new TypeReference<UsageConsumableInArrearTierUnitAggregate>() {}); if (targetTierUnitDetail.getTierUnit().equals(unitType)) { tierDetails.add(new UsageConsumableInArrearTierUnitAggregate(targetTierUnitDetail.getTier(), targetTierUnitDetail.getTierUnit(), bi.getRate(), targetTierUnitDetail.getQuantity(), bi.getQuantity(), bi.getAmount())); } } else { final UsageConsumableInArrearAggregate usageDetail = fromJson(bi.getItemDetails(), new TypeReference<UsageConsumableInArrearAggregate>() {}); for (final UsageConsumableInArrearTierUnitAggregate unitAgg : usageDetail.getTierDetails()) { if (unitAgg.getTierUnit().equals(unitType)) { tierDetails.add(unitAgg); } } } } for (final UsageConsumableInArrearTierUnitAggregate curDetail : tierDetails) { if (!resultMap.containsKey(curDetail.getTier())) { resultMap.put(curDetail.getTier(), curDetail); } else { final UsageConsumableInArrearTierUnitAggregate perTierDetail = resultMap.get(curDetail.getTier()); perTierDetail.updateQuantityAndAmount(curDetail.getQuantity()); } } return ImmutableList.copyOf(resultMap.values()); }
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 InvoiceItem mergeInvoiceAdjustmentItem(final List<InvoiceItem> invoiceItems, InvoiceItem mergedInvoiceAdjustment, final InvoiceItem item) { if (mergedInvoiceAdjustment == null) { mergedInvoiceAdjustment = item; } else { // This is really just to be safe - they should always have the same currency if (!mergedInvoiceAdjustment.getCurrency().equals(item.getCurrency())) { invoiceItems.add(item); } else { mergedInvoiceAdjustment = new CreditAdjInvoiceItem(invoice.getId(), invoice.getAccountId(), invoice.getInvoiceDate(), mergedInvoiceAdjustment.getDescription(), mergedInvoiceAdjustment.getAmount().add(item.getAmount()), mergedInvoiceAdjustment.getCurrency(), mergedInvoiceAdjustment.getItemDetails()); } } return mergedInvoiceAdjustment; }
assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("90.00")), 0, String.format("%s != 90.0", result.get(0).getAmount())); UsageCapacityInArrearAggregate itemDetails = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageCapacityInArrearAggregate>() {}); assertEquals(itemDetails.getAmount().compareTo(new BigDecimal("100.00")), 0); assertEquals(itemDetails.getTierDetails().size(), 2);
final UsageConsumableInArrearTierUnitAggregate resultUsageInArrearDetail0 = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearTierUnitAggregate>() {}); assertEquals(resultUsageInArrearDetail0.getTierUnit(), "BAR"); assertEquals(resultUsageInArrearDetail0.getTier(), 1); assertEquals(result.get(0).getQuantity().intValue(), 20); final UsageConsumableInArrearTierUnitAggregate resultUsageInArrearDetail1 = objectMapper.readValue(result.get(1).getItemDetails(), new TypeReference<UsageConsumableInArrearTierUnitAggregate>() {}); assertEquals(resultUsageInArrearDetail1.getTierUnit(), "BAR"); assertEquals(resultUsageInArrearDetail1.getTier(), 2); assertEquals(result.get(1).getQuantity().intValue(), 100); final UsageConsumableInArrearTierUnitAggregate resultUsageInArrearDetail2 = objectMapper.readValue(result.get(2).getItemDetails(), new TypeReference<UsageConsumableInArrearTierUnitAggregate>() {}); assertEquals(resultUsageInArrearDetail2.getTierUnit(), "FOO"); assertEquals(resultUsageInArrearDetail2.getTier(), 2); final UsageConsumableInArrearTierUnitAggregate resultUsageInArrearDetail3 = objectMapper.readValue(result.get(3).getItemDetails(), new TypeReference<UsageConsumableInArrearTierUnitAggregate>() {}); assertEquals(resultUsageInArrearDetail3.getTierUnit(), "FOO"); assertEquals(resultUsageInArrearDetail3.getTier(), 3);
assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("3140.00")), 0, String.format("%s != 3140.0", result.get(0).getAmount())); UsageConsumableInArrearAggregate usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearAggregate>() {}); List<UsageConsumableInArrearTierUnitAggregate> itemDetails = usageDetail.getTierDetails();
assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("203")), 0); UsageConsumableInArrearAggregate usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearAggregate>() {}); List<UsageConsumableInArrearTierUnitAggregate> itemDetails = usageDetail.getTierDetails(); assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("2025")), 0); usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearAggregate>() {}); itemDetails = usageDetail.getTierDetails(); assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("9620")), 0); usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearAggregate>() {}); itemDetails = usageDetail.getTierDetails();
assertEquals(result.get(0).getAmount().compareTo(BigDecimal.ONE), 0, String.format("%s != 1.0", result.get(0).getAmount())); UsageCapacityInArrearAggregate itemDetails = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageCapacityInArrearAggregate>() {}); assertEquals(itemDetails.getAmount().compareTo(BigDecimal.ONE), 0); assertEquals(itemDetails.getTierDetails().size(), 2); assertEquals(result.get(0).getAmount().compareTo(BigDecimal.TEN), 0, String.format("%s != 10.0", result.get(0).getAmount())); itemDetails = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageCapacityInArrearAggregate>() {}); assertEquals(itemDetails.getAmount().compareTo(BigDecimal.TEN), 0); assertEquals(itemDetails.getTierDetails().size(), 2); assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("100.0")), 0, String.format("%s != 100.0", result.get(0).getAmount())); itemDetails = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageCapacityInArrearAggregate>() {}); assertEquals(itemDetails.getAmount().compareTo(new BigDecimal("100.0")), 0); assertEquals(itemDetails.getTierDetails().size(), 2);
assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("203")), 0); UsageConsumableInArrearAggregate usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearAggregate>() {}); List<UsageConsumableInArrearTierUnitAggregate> itemDetails = usageDetail.getTierDetails(); assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("225")), 0); usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearAggregate>() {}); itemDetails = usageDetail.getTierDetails(); assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("2230")), 0); usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearAggregate>() {}); itemDetails = usageDetail.getTierDetails();
@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()); }
assertTrue(result.get(0).getEndDate().compareTo(firstBCDDate) == 0); assertNotNull(result.get(0).getItemDetails()); UsageConsumableInArrearAggregate usageDetail = objectMapper.readValue(result.get(0).getItemDetails(), new TypeReference<UsageConsumableInArrearAggregate>() {}); List<UsageConsumableInArrearTierUnitAggregate> itemDetails = usageDetail.getTierDetails(); assertEquals(itemDetails.size(), 1); assertTrue(result.get(1).getStartDate().compareTo(firstBCDDate) == 0); assertTrue(result.get(1).getEndDate().compareTo(endDate) == 0); assertNotNull(result.get(1).getItemDetails()); usageDetail = objectMapper.readValue(result.get(1).getItemDetails(), new TypeReference<UsageConsumableInArrearAggregate>() {}); itemDetails = usageDetail.getTierDetails(); assertEquals(itemDetails.size(), 1);
assertEquals(invoiceItemAdjustment.getItemDetails(), itemDetails);
@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()); }
inputItem.getLinkedItemId(), inputItem.getQuantity(), inputItem.getItemDetails()); inputItem.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()); }
model.getPrettyUsageName(), model.getQuantity(), model.getItemDetails(), model.getCreatedDate(), model.getUpdatedDate());
immutableField("linkedItemId", existingItem, existingItem != null ? existingItem.getLinkedItemId() : null, additionalInvoiceItem.getLinkedItemId(), invoicePlugin), immutableField("quantity", existingItem, existingItem != null ? existingItem.getQuantity() : null, additionalInvoiceItem.getQuantity(), invoicePlugin), mutableField("itemDetails", existingItem != null ? existingItem.getItemDetails() : null, additionalInvoiceItem.getItemDetails(), invoicePlugin), immutableField("invoiceItemType", existingItem, existingItem != null ? existingItem.getInvoiceItemType() : null, additionalInvoiceItem.getInvoiceItemType(), invoicePlugin));