killbill-uncached

invoice: add default rounder for BigDecimal values This

7/25/2012 5:29:19 PM

Details

diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultAmountFormatter.java b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultAmountFormatter.java
new file mode 100644
index 0000000..e71ef4f
--- /dev/null
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultAmountFormatter.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.invoice.template.formatters;
+
+import java.math.BigDecimal;
+
+public class DefaultAmountFormatter {
+
+    public static final int SCALE = 2;
+
+    // Static only
+    private DefaultAmountFormatter() {
+    }
+
+    public static BigDecimal round(final BigDecimal decimal) {
+        if (decimal == null) {
+            return BigDecimal.ZERO.setScale(SCALE, BigDecimal.ROUND_HALF_UP);
+        } else {
+            return decimal.setScale(SCALE, BigDecimal.ROUND_HALF_UP);
+        }
+    }
+}
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 286b189..f9ef212 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
@@ -53,6 +53,8 @@ import com.google.common.base.Objects;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 
+import static com.ning.billing.invoice.template.formatters.DefaultAmountFormatter.round;
+
 /**
  * Format invoice fields. Note that the Mustache engine won't accept null values.
  */
@@ -131,17 +133,17 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
 
     @Override
     public BigDecimal getChargedAmount() {
-        return Objects.firstNonNull(invoice.getChargedAmount(), BigDecimal.ZERO);
+        return round(Objects.firstNonNull(invoice.getChargedAmount(), BigDecimal.ZERO));
     }
 
     @Override
     public BigDecimal getCBAAmount() {
-        return Objects.firstNonNull(invoice.getCBAAmount(), BigDecimal.ZERO);
+        return round(Objects.firstNonNull(invoice.getCBAAmount(), BigDecimal.ZERO));
     }
 
     @Override
     public BigDecimal getBalance() {
-        return Objects.firstNonNull(invoice.getBalance(), BigDecimal.ZERO);
+        return round(Objects.firstNonNull(invoice.getBalance(), BigDecimal.ZERO));
     }
 
     @Override
@@ -166,7 +168,7 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
 
     @Override
     public BigDecimal getPaidAmount() {
-        return Objects.firstNonNull(invoice.getPaidAmount(), BigDecimal.ZERO);
+        return round(Objects.firstNonNull(invoice.getPaidAmount(), BigDecimal.ZERO));
     }
 
     @Override
@@ -204,16 +206,16 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
 
     @Override
     public BigDecimal getTotalAdjAmount() {
-        return Objects.firstNonNull(invoice.getTotalAdjAmount(), BigDecimal.ZERO);
+        return round(Objects.firstNonNull(invoice.getTotalAdjAmount(), BigDecimal.ZERO));
     }
 
     @Override
     public BigDecimal getCreditAdjAmount() {
-        return Objects.firstNonNull(invoice.getCreditAdjAmount(), BigDecimal.ZERO);
+        return round(Objects.firstNonNull(invoice.getCreditAdjAmount(), BigDecimal.ZERO));
     }
 
     @Override
     public BigDecimal getRefundAdjAmount() {
-        return Objects.firstNonNull(invoice.getRefundAdjAmount(), BigDecimal.ZERO);
+        return round(Objects.firstNonNull(invoice.getRefundAdjAmount(), BigDecimal.ZERO));
     }
 }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
index bb98c74..04982f4 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceItemFormatter.java
@@ -34,6 +34,8 @@ import com.ning.billing.util.template.translation.DefaultCatalogTranslator;
 import com.ning.billing.util.template.translation.Translator;
 import com.ning.billing.util.template.translation.TranslatorConfig;
 
+import static com.ning.billing.invoice.template.formatters.DefaultAmountFormatter.round;
+
 /**
  * Format invoice item fields. Note that the Mustache engine won't accept null values.
  */
@@ -54,7 +56,7 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
 
     @Override
     public BigDecimal getAmount() {
-        return Objects.firstNonNull(item.getAmount(), BigDecimal.ZERO);
+        return round(Objects.firstNonNull(item.getAmount(), BigDecimal.ZERO));
     }
 
     @Override
@@ -134,7 +136,7 @@ public class DefaultInvoiceItemFormatter implements InvoiceItemFormatter {
 
     @Override
     public BigDecimal getRate() {
-        return BigDecimal.ZERO;
+        return round(BigDecimal.ZERO);
     }
 
     @Override