/** * Compare two items to check whether there are the same kind; that is whether or not they build for the same product/plan. * * @param other item to compare with * @return */ public boolean isSameKind(final Item other) { final InvoiceItem otherItem = other.toInvoiceItem(); // See https://github.com/killbill/killbill/issues/286 return otherItem != null && !id.equals(otherItem.getId()) && // Finally, for the tricky part... In case of complete repairs, the new invoiceItem will always meet all of the // following conditions: same type, subscription, start date. Depending on the catalog configuration, the end // date check could also match (e.g. repair from annual to monthly). For that scenario, we need to default // to catalog checks (the rate check is a lame check for versioned catalogs). MoreObjects.firstNonNull(planName, "").equals(MoreObjects.firstNonNull(otherItem.getPlanName(), "")) && MoreObjects.firstNonNull(phaseName, "").equals(MoreObjects.firstNonNull(otherItem.getPhaseName(), "")) && MoreObjects.firstNonNull(rate, BigDecimal.ZERO).compareTo(MoreObjects.firstNonNull(otherItem.getRate(), BigDecimal.ZERO)) == 0; }
@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()); }
assertEquals(result.get(0).getRate().compareTo(new BigDecimal("2.0")), 0); assertEquals(result.get(1).getRate().compareTo(BigDecimal.ONE), 0); assertEquals(result.get(0).getRate().compareTo(new BigDecimal("20.0")), 0); assertEquals(result.get(1).getRate().compareTo(BigDecimal.ONE), 0); assertEquals(result.get(0).getRate().compareTo(new BigDecimal("20.0")), 0); assertEquals(result.get(1).getRate().compareTo(new BigDecimal("100.0")), 0);
assertEquals(result.get(0).getRate().compareTo(new BigDecimal("2.0")), 0); assertEquals(result.get(1).getRate().compareTo(BigDecimal.ONE), 0); assertEquals(result.get(0).getRate().compareTo(new BigDecimal("2.0")), 0); assertEquals(result.get(1).getRate().compareTo(new BigDecimal("20.0")), 0); assertEquals(result.get(2).getRate().compareTo(BigDecimal.ONE), 0); assertEquals(result.get(0).getRate().compareTo(new BigDecimal("2.0")), 0); assertEquals(result.get(1).getRate().compareTo(new BigDecimal("20.0")), 0); assertEquals(result.get(2).getRate().compareTo(BigDecimal.ONE), 0); assertEquals(result.get(3).getRate().compareTo(BigDecimal.TEN), 0); assertEquals(result.get(4).getRate().compareTo(new BigDecimal("100.0")), 0);
assertEquals(resultUsageInArrearDetail0.getTierPrice().compareTo(new BigDecimal("2.00")), 0); assertEquals(result.get(0).getRate().compareTo(new BigDecimal("2.00")), 0); assertEquals(result.get(0).getAmount().compareTo(new BigDecimal("40.00")), 0); assertEquals(result.get(0).getQuantity().intValue(), 20); assertEquals(resultUsageInArrearDetail1.getTierPrice().compareTo(new BigDecimal("20.00")), 0); assertEquals(result.get(1).getRate().compareTo(new BigDecimal("20.00")), 0); assertEquals(result.get(1).getAmount().compareTo(new BigDecimal("2000.00")), 0); assertEquals(result.get(1).getQuantity().intValue(), 100); assertEquals(resultUsageInArrearDetail2.getTierPrice().compareTo(new BigDecimal("10.00")), 0); assertEquals(result.get(2).getRate().compareTo(new BigDecimal("10.00")), 0); assertEquals(result.get(2).getAmount().compareTo(new BigDecimal("100.00")), 0); assertEquals(result.get(2).getQuantity().intValue(), 10); assertEquals(resultUsageInArrearDetail3.getTierPrice().compareTo(new BigDecimal("100.00")), 0); assertEquals(result.get(3).getRate().compareTo(new BigDecimal("100.00")), 0); assertEquals(result.get(3).getAmount().compareTo(new BigDecimal("1000.00")), 0); assertEquals(result.get(3).getQuantity().intValue(), 10);
@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()); } }
Assert.assertNull(invoiceItems.get(0).getEndDate()); Assert.assertEquals(invoiceItems.get(0).getAmount().compareTo(BigDecimal.ZERO), 0); Assert.assertNull(invoiceItems.get(0).getRate()); Assert.assertEquals(invoiceItems.get(1).getEndDate(), new LocalDate("2012-06-30")); Assert.assertEquals(invoiceItems.get(1).getAmount(), new BigDecimal("249.95")); Assert.assertEquals(invoiceItems.get(1).getRate(), new BigDecimal("249.95")); Assert.assertEquals(invoiceItems.get(2).getEndDate(), new LocalDate("2012-07-15")); Assert.assertEquals(invoiceItems.get(2).getAmount(), new BigDecimal("124.98")); Assert.assertEquals(invoiceItems.get(2).getRate(), new BigDecimal("249.95")); Assert.assertEquals(invoiceItems.get(3).getEndDate(), new LocalDate("2012-07-31")); Assert.assertEquals(invoiceItems.get(3).getAmount(), new BigDecimal("193.55")); Assert.assertEquals(invoiceItems.get(3).getRate(), new BigDecimal("1000"));
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; }
inputItem.getEndDate(), inputItem.getAmount(), inputItem.getRate(), accountCurrency, inputItem.getLinkedItemId(),
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.getPhaseName(), model.getPrettyPhaseName(), model.getRate(), model.getId(), model.getUsageName(),
@Override public InvoiceItemModelDao apply(final InvoiceItem input) { return new InvoiceItemModelDao(internalCallContext.getCreatedDate(), input.getInvoiceItemType(), migrationInvoice.getId(), accountId, input.getBundleId(), input.getSubscriptionId(), input.getDescription(), input.getProductName(), input.getPlanName(), input.getPhaseName(), input.getUsageName(), input.getStartDate(), input.getEndDate(), input.getAmount(), input.getRate(), input.getCurrency(), input.getLinkedItemId()); } }));
immutableField("endDate", existingItem, existingItem != null ? existingItem.getEndDate() : null, additionalInvoiceItem.getEndDate(), invoicePlugin), mutableField("amount", existingItem != null ? existingItem.getAmount() : null, additionalInvoiceItem.getAmount(), invoicePlugin), immutableField("rate", existingItem, existingItem != null ? existingItem.getRate() : null, additionalInvoiceItem.getRate(), invoicePlugin), immutableField("currency", existingItem, existingItem != null ? existingItem.getCurrency() : null, additionalInvoiceItem.getCurrency(), invoicePlugin), immutableField("linkedItemId", existingItem, existingItem != null ? existingItem.getLinkedItemId() : null, additionalInvoiceItem.getLinkedItemId(), invoicePlugin),