Author: lektran
Date: Sat Jun 23 07:03:20 2007 New Revision: 550044 URL: http://svn.apache.org/viewvc?view=rev&rev=550044 Log: Fixed a sales order rounding bug, reported by Jacopo Cappellato Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java?view=diff&rev=550044&r1=550043&r2=550044 ============================================================================== --- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java (original) +++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java Sat Jun 23 07:03:20 2007 @@ -68,7 +68,7 @@ public static final int scale = UtilNumber.getBigDecimalScale("order.decimals"); public static final int rounding = UtilNumber.getBigDecimalRoundingMode("order.rounding"); public static final int taxCalcScale = UtilNumber.getBigDecimalScale("salestax.calc.decimals"); - public static final int taxFinalScale = UtilNumber.getBigDecimalRoundingMode("salestax.final.decimals"); + public static final int taxFinalScale = UtilNumber.getBigDecimalScale("salestax.final.decimals"); public static final int taxRounding = UtilNumber.getBigDecimalRoundingMode("salestax.rounding"); public static final BigDecimal ZERO = (new BigDecimal("0")).setScale(scale, rounding); public static final BigDecimal percentage = (new BigDecimal("0.01")).setScale(scale, rounding); @@ -2677,7 +2677,7 @@ Iterator itemIter = UtilMisc.toIterator(orderItems); while (itemIter != null && itemIter.hasNext()) { - result = result.add(getOrderItemAdjustmentsTotalBd((GenericValue) itemIter.next(), adjustments, includeOther, includeTax, includeShipping)); + result = result.add(getOrderItemAdjustmentsTotalBd((GenericValue) itemIter.next(), adjustments, includeOther, includeTax, includeShipping)).setScale(scale, rounding); } return result; } Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java?view=diff&rev=550044&r1=550043&r2=550044 ============================================================================== --- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java (original) +++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java Sat Jun 23 07:03:20 2007 @@ -32,6 +32,7 @@ import org.ofbiz.base.util.UtilDateTime; import org.ofbiz.base.util.UtilFormatOut; import org.ofbiz.base.util.UtilMisc; +import org.ofbiz.base.util.UtilNumber; import org.ofbiz.base.util.UtilProperties; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.entity.GenericDelegator; @@ -60,6 +61,15 @@ public static final String module = ShoppingCart.class.getName(); public static final String resource_error = "OrderErrorUiLabels"; + // scales and rounding modes for BigDecimal math + public static final int scale = UtilNumber.getBigDecimalScale("order.decimals"); + public static final int rounding = UtilNumber.getBigDecimalRoundingMode("order.rounding"); + public static final int taxCalcScale = UtilNumber.getBigDecimalScale("salestax.calc.decimals"); + public static final int taxFinalScale = UtilNumber.getBigDecimalScale("salestax.final.decimals"); + public static final int taxRounding = UtilNumber.getBigDecimalRoundingMode("salestax.rounding"); + public static final BigDecimal ZERO = (new BigDecimal("0")).setScale(scale, rounding); + public static final BigDecimal percentage = (new BigDecimal("0.01")).setScale(scale, rounding); + private String orderType = "SALES_ORDER"; // default orderType private String channel = "UNKNWN_SALES_CHANNEL"; // default channel enum @@ -2357,12 +2367,12 @@ /** Returns the tax amount from the cart object. */ public double getTotalSalesTax() { - double totalTax = 0.00; + BigDecimal totalTax = ZERO; for (int i = 0; i < shipInfo.size(); i++) { CartShipInfo csi = this.getShipInfo(i); - totalTax += csi.getTotalTax(this); + totalTax = totalTax.add(new BigDecimal(csi.getTotalTax(this))).setScale(taxCalcScale, taxRounding); } - return totalTax; + return totalTax.setScale(taxFinalScale, taxRounding).doubleValue(); } /** Returns the shipping amount from the cart object. */ |
Free forum by Nabble | Edit this page |