diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
index b6edb8d..34ceac6 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
@@ -101,10 +101,11 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
invoiceItems.add(item);
}
}
- if (mergedCBAItem != null) {
+ // Don't display adjustments of zero
+ if (mergedCBAItem != null && mergedCBAItem.getAmount().compareTo(BigDecimal.ZERO) != 0) {
invoiceItems.add(mergedCBAItem);
}
- if (mergedInvoiceAdjustment != null) {
+ if (mergedInvoiceAdjustment != null && mergedInvoiceAdjustment.getAmount().compareTo(BigDecimal.ZERO) != 0) {
invoiceItems.add(mergedInvoiceAdjustment);
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java b/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java
index 0f12045..b1a6db5 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java
@@ -56,6 +56,39 @@ public class TestDefaultInvoiceFormatter extends InvoiceTestSuite {
}
@Test(groups = "fast")
+ public void testIgnoreZeroAdjustments() throws Exception {
+ // Scenario: single item with payment
+ // * $10 item
+ // * $-10 CBA
+ // * $10 CBA
+ final FixedPriceInvoiceItem fixedItem = new FixedPriceInvoiceItem(UUID.randomUUID(), UUID.randomUUID(), null, null,
+ UUID.randomUUID().toString(), UUID.randomUUID().toString(),
+ new LocalDate(), BigDecimal.TEN, Currency.USD);
+ final CreditBalanceAdjInvoiceItem creditBalanceAdjInvoiceItem = new CreditBalanceAdjInvoiceItem(fixedItem.getInvoiceId(), fixedItem.getAccountId(),
+ fixedItem.getStartDate(), fixedItem.getAmount(),
+ fixedItem.getCurrency());
+ final CreditBalanceAdjInvoiceItem creditBalanceAdjInvoiceItem2 = new CreditBalanceAdjInvoiceItem(fixedItem.getInvoiceId(), fixedItem.getAccountId(),
+ fixedItem.getStartDate(), fixedItem.getAmount().negate(),
+ fixedItem.getCurrency());
+ final Invoice invoice = new DefaultInvoice(fixedItem.getInvoiceId(), fixedItem.getAccountId(), null,
+ new LocalDate(), new LocalDate(), Currency.USD, false);
+ invoice.addInvoiceItem(fixedItem);
+ invoice.addInvoiceItem(creditBalanceAdjInvoiceItem);
+ invoice.addInvoiceItem(creditBalanceAdjInvoiceItem2);
+
+ // Check the scenario
+ Assert.assertEquals(invoice.getBalance().doubleValue(), 10.00);
+ Assert.assertEquals(invoice.getCBAAmount().doubleValue(), 0.00);
+
+ // Verify the merge
+ final InvoiceFormatter formatter = new DefaultInvoiceFormatter(config, invoice, Locale.US);
+ final List<InvoiceItem> invoiceItems = formatter.getInvoiceItems();
+ Assert.assertEquals(invoiceItems.size(), 1);
+ Assert.assertEquals(invoiceItems.get(0).getInvoiceItemType(), InvoiceItemType.FIXED);
+ Assert.assertEquals(invoiceItems.get(0).getAmount().doubleValue(), 10.00);
+ }
+
+ @Test(groups = "fast")
public void testMergeItems() throws Exception {
// Scenario: single item with payment
// * $10 item