You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by le...@apache.org on 2008/12/01 07:51:15 UTC

svn commit: r721986 [2/13] - in /ofbiz/branches/typecheckcleanup200810: applications/accounting/script/org/ofbiz/accounting/olap/ applications/order/entitydef/ applications/order/script/org/ofbiz/order/order/ applications/order/script/org/ofbiz/order/q...

Modified: ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java?rev=721986&r1=721985&r2=721986&view=diff
==============================================================================
--- ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java (original)
+++ ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java Sun Nov 30 22:51:11 2008
@@ -203,7 +203,7 @@
     }
 
     /**
-     * Returns a Map of paymentMethodId -> amount charged (Double) based on PaymentGatewayResponse.  
+     * Returns a Map of paymentMethodId -> amount charged (BigDecimal) based on PaymentGatewayResponse.  
      * @return
      */
     public Map getReceivedPaymentTotalsByPaymentMethod() {
@@ -232,10 +232,10 @@
             }
 
             // if chargedToPaymentPref > 0
-            if (chargedToPaymentPref.compareTo(ZERO) == 1) {
+            if (chargedToPaymentPref.compareTo(ZERO) > 0) {
                 // key of the resulting map is paymentMethodId or paymentMethodTypeId if the paymentMethodId is not available
                 String paymentMethodKey = paymentPref.getString("paymentMethodId") != null ? paymentPref.getString("paymentMethodId") : paymentPref.getString("paymentMethodTypeId");
-                paymentMethodAmounts.put(paymentMethodKey, new Double(chargedToPaymentPref.setScale(scale, rounding).doubleValue()));
+                paymentMethodAmounts.put(paymentMethodKey, chargedToPaymentPref.setScale(scale, rounding));
             }
         }
         return paymentMethodAmounts;
@@ -267,7 +267,7 @@
             // if refundedToPaymentPref > 0
             if (refundedToPaymentPref.compareTo(ZERO) == 1) {
                 String paymentMethodId = paymentPref.getString("paymentMethodId") != null ? paymentPref.getString("paymentMethodId") : paymentPref.getString("paymentMethodTypeId");
-                paymentMethodAmounts.put(paymentMethodId, new Double(refundedToPaymentPref.setScale(scale, rounding).doubleValue()));
+                paymentMethodAmounts.put(paymentMethodId, refundedToPaymentPref.setScale(scale, rounding));
             }
         }
         return paymentMethodAmounts;
@@ -658,16 +658,16 @@
      * Returns the OrderPaymentPreference.maxAmount for the billing account associated with the order, or 0 if there is no
      * billing account or no max amount set
      */
-    public double getBillingAccountMaxAmount() {
+    public BigDecimal getBillingAccountMaxAmount() {
         if (getBillingAccount() == null) {
-            return 0.0;
+            return BigDecimal.ZERO;
         } else {
             List paymentPreferences = getPaymentPreferences();
             GenericValue billingAccountPaymentPreference = EntityUtil.getFirst(EntityUtil.filterByAnd(paymentPreferences, UtilMisc.toMap("paymentMethodTypeId", "EXT_BILLACT")));
-            if ((billingAccountPaymentPreference != null) && (billingAccountPaymentPreference.getDouble("maxAmount") != null)) {
-                return billingAccountPaymentPreference.getDouble("maxAmount").doubleValue();
+            if ((billingAccountPaymentPreference != null) && (billingAccountPaymentPreference.getBigDecimal("maxAmount") != null)) {
+                return billingAccountPaymentPreference.getBigDecimal("maxAmount");
             } else {
-                return 0.0;
+                return BigDecimal.ZERO;
             }
         }
     }
@@ -830,11 +830,11 @@
                         Iterator fai = featureAppls.iterator();
                         while (fai.hasNext()) {
                             GenericValue appl = (GenericValue) fai.next();
-                            Double lastQuantity = (Double) featureMap.get(appl.getString("productFeatureId"));
+                            BigDecimal lastQuantity = (BigDecimal) featureMap.get(appl.getString("productFeatureId"));
                             if (lastQuantity == null) {
-                                lastQuantity = new Double(0);
+                                lastQuantity = BigDecimal.ZERO;
                             }
-                            Double newQuantity = new Double(lastQuantity.doubleValue() + getOrderItemQuantity(item).doubleValue());
+                            BigDecimal newQuantity = lastQuantity.add(getOrderItemQuantity(item));
                             featureMap.put(appl.getString("productFeatureId"), newQuantity);
                         }
                     }
@@ -853,11 +853,11 @@
                         GenericValue adj = (GenericValue) afi.next();
                         String featureId = adj.getString("productFeatureId");
                         if (featureId != null) {
-                            Double lastQuantity = (Double) featureMap.get(featureId);
+                            BigDecimal lastQuantity = (BigDecimal) featureMap.get(featureId);
                             if (lastQuantity == null) {
-                                lastQuantity = new Double(0);
+                                lastQuantity = BigDecimal.ZERO;
                             }
-                            Double newQuantity = new Double(lastQuantity.doubleValue() + getOrderItemQuantity(item).doubleValue());
+                            BigDecimal newQuantity = lastQuantity.add(getOrderItemQuantity(item));
                             featureMap.put(featureId, newQuantity);
                         }
                     }
@@ -1038,7 +1038,7 @@
             Iterator i = validItems.iterator();
             while (i.hasNext()) {
                 GenericValue item = (GenericValue) i.next();
-                shippableSizes.add(new Double(this.getItemSize(item)));
+                shippableSizes.add(this.getItemSize(item));
             }
         }
         return shippableSizes;
@@ -1111,23 +1111,22 @@
         return total;
     }
 
-    // TODO: Might want to use BigDecimal here if precision matters
-    public double getItemSize(GenericValue item) {
+    public BigDecimal getItemSize(GenericValue item) {
         GenericDelegator delegator = orderHeader.getDelegator();
-        double size = 0;
+        BigDecimal size = BigDecimal.ZERO;
 
         GenericValue product = null;
         try {
             product = item.getRelatedOne("Product");
         } catch (GenericEntityException e) {
             Debug.logError(e, "Problem getting Product from OrderItem", module);
-            return 0;
+            return BigDecimal.ZERO;
         }
         if (product != null) {
             if (ProductWorker.shippingApplies(product)) {
-                Double height = product.getDouble("shippingHeight");
-                Double width = product.getDouble("shippingWidth");
-                Double depth = product.getDouble("shippingDepth");
+                BigDecimal height = product.getBigDecimal("shippingHeight");
+                BigDecimal width = product.getBigDecimal("shippingWidth");
+                BigDecimal depth = product.getBigDecimal("shippingDepth");
                 String isVariant = product.getString("isVariant");
                 if ((height == null || width == null || depth == null) && "Y".equals(isVariant)) {
                     // get the virtual product and check its values
@@ -1136,9 +1135,9 @@
                         if (UtilValidate.isNotEmpty(virtualId)) {
                             GenericValue virtual = delegator.findByPrimaryKeyCache("Product", UtilMisc.toMap("productId", virtualId));
                             if (virtual != null) {
-                                if (height == null) height = virtual.getDouble("shippingHeight");
-                                if (width == null) width = virtual.getDouble("shippingWidth");
-                                if (depth == null) depth = virtual.getDouble("shippingDepth");
+                                if (height == null) height = virtual.getBigDecimal("shippingHeight");
+                                if (width == null) width = virtual.getBigDecimal("shippingWidth");
+                                if (depth == null) depth = virtual.getBigDecimal("shippingDepth");
                             }
                         }
                     } catch (GenericEntityException e) {
@@ -1146,15 +1145,15 @@
                     }
                 }
 
-                if (height == null) height = new Double(0);
-                if (width == null) width = new Double(0);
-                if (depth == null) depth = new Double(0);
+                if (height == null) height = BigDecimal.ZERO;
+                if (width == null) width = BigDecimal.ZERO;
+                if (depth == null) depth = BigDecimal.ZERO;
 
                 // determine girth (longest field is length)
-                double[] sizeInfo = { height.doubleValue(), width.doubleValue(), depth.doubleValue() };
+                BigDecimal[] sizeInfo = { height, width, depth };
                 Arrays.sort(sizeInfo);
 
-                size = (sizeInfo[0] * 2) + (sizeInfo[1] * 2) + sizeInfo[2];
+                size = sizeInfo[0].multiply(new BigDecimal("2")).add(sizeInfo[1].multiply(new BigDecimal("2"))).add(sizeInfo[2]);
             }
         }
 
@@ -1223,9 +1222,9 @@
     public Map getItemInfoMap(GenericValue item) {
         Map itemInfo = FastMap.newInstance();
         itemInfo.put("productId", item.getString("productId"));
-        itemInfo.put("quantity", Double.valueOf(getOrderItemQuantity(item).doubleValue()));
-        itemInfo.put("weight", new Double(this.getItemWeight(item).doubleValue()));
-        itemInfo.put("size",  new Double(this.getItemSize(item)));
+        itemInfo.put("quantity", getOrderItemQuantity(item));
+        itemInfo.put("weight", this.getItemWeight(item));
+        itemInfo.put("size",  this.getItemSize(item));
         itemInfo.put("piecesIncluded", new Long(this.getItemPiecesIncluded(item)));
         itemInfo.put("featureSet", this.getItemFeatureSet(item));
         return itemInfo;
@@ -1270,10 +1269,10 @@
      * This works by adding up the amount allocated to each unprocessed OrderPaymentPreference and the
      * amounts received and refunded as payments for the settled ones.
      */
-    public double getOrderOpenAmount() throws GenericEntityException {
+    public BigDecimal getOrderOpenAmount() throws GenericEntityException {
         GenericDelegator delegator = orderHeader.getDelegator();
         BigDecimal total = getOrderGrandTotal();
-        double openAmount = 0;
+        BigDecimal openAmount = BigDecimal.ZERO;
         List prefs = getPaymentPreferences();
 
         // add up the covered amount, but skip preferences which are declined or cancelled
@@ -1285,30 +1284,30 @@
                 List responses = pref.getRelatedByAnd("PaymentGatewayResponse", UtilMisc.toMap("transCodeEnumId", "PGT_CAPTURE"));
                 for (Iterator respIter = responses.iterator(); respIter.hasNext(); ) {
                     GenericValue response = (GenericValue) respIter.next();
-                    Double amount = response.getDouble("amount");
+                    BigDecimal amount = response.getBigDecimal("amount");
                     if (amount != null) {
-                        openAmount += amount.doubleValue();
+                        openAmount = openAmount.add(amount);
                     }
                 }
                 responses = pref.getRelatedByAnd("PaymentGatewayResponse", UtilMisc.toMap("transCodeEnumId", "PGT_REFUND"));
                 for (Iterator respIter = responses.iterator(); respIter.hasNext(); ) {
                     GenericValue response = (GenericValue) respIter.next();
-                    Double amount = response.getDouble("amount");
+                    BigDecimal amount = response.getBigDecimal("amount");
                     if (amount != null) {
-                        openAmount -= amount.doubleValue();
+                        openAmount = openAmount.subtract(amount);
                     }
                 }
             } else {
                 // all others are currently "unprocessed" payment preferences
-                Double maxAmount = pref.getDouble("maxAmount");
+                BigDecimal maxAmount = pref.getBigDecimal("maxAmount");
                 if (maxAmount != null) {
-                    openAmount += maxAmount.doubleValue();
+                    openAmount = openAmount.add(maxAmount);
                 }
             }
         }
-        openAmount = new BigDecimal(openAmount).setScale(scale, rounding).doubleValue();
+        openAmount = total.subtract(openAmount).setScale(scale, rounding);
         // return either a positive amount or positive zero
-        return Math.max(total.doubleValue() - openAmount, 0);
+        return openAmount.compareTo(BigDecimal.ZERO) > 0 ? openAmount : BigDecimal.ZERO;
     }
 
     public List getOrderHeaderAdjustments() {
@@ -1434,9 +1433,9 @@
                 Iterator recIter = receipts.iterator();
                 while (recIter.hasNext()) {
                     GenericValue rec = (GenericValue) recIter.next();
-                    Double rejected = rec.getDouble("quantityRejected");
-                    if (rejected != null && rejected.doubleValue() > 0) {
-                    return true;
+                    BigDecimal rejected = rec.getBigDecimal("quantityRejected");
+                    if (rejected != null && rejected.compareTo(BigDecimal.ZERO) > 0) {
+                    	return true;
                     }
                 }            
             }
@@ -1451,7 +1450,7 @@
         while (i.hasNext()) {
             GenericValue item = (GenericValue) i.next();            
             int shippedQuantity = (int) getItemShippedQuantity(item);            
-            Double orderedQuantity = (Double) item.get("quantity");            
+            BigDecimal orderedQuantity = (BigDecimal) item.get("quantity");            
             if (shippedQuantity != orderedQuantity.intValue() && shippedQuantity > 0) {
             return true;
             }            
@@ -1472,8 +1471,8 @@
                 Iterator recIter = receipts.iterator();
                 while (recIter.hasNext()) {
                     GenericValue rec = (GenericValue) recIter.next();
-                    Double acceptedQuantity = rec.getDouble("quantityAccepted");
-                    Double orderedQuantity = (Double) item.get("quantity");            
+                    BigDecimal acceptedQuantity = rec.getBigDecimal("quantityAccepted");
+                    BigDecimal orderedQuantity = (BigDecimal) item.get("quantity");            
                     if (acceptedQuantity.intValue() != orderedQuantity.intValue() && acceptedQuantity.intValue()  > 0) {
                     return true;                    
                     }
@@ -1705,7 +1704,7 @@
     * In other words, this method will count the ReturnItems
     * related to each OrderItem.
     *
-    * @return  Map of returned quantities as Doubles keyed to the orderItemSeqId
+    * @return  Map of returned quantities as BigDecimals keyed to the orderItemSeqId
     */
    public Map getOrderItemReturnedQuantities() {
        List returnItems = getOrderReturnItems();
@@ -1718,16 +1717,16 @@
                    UtilMisc.toMap("orderId", orderItem.get("orderId"), "orderItemSeqId", orderItem.get("orderItemSeqId")));
 
            // add up the returned quantities for this group TODO: received quantity should be used eventually
-           double returned = 0;
+           BigDecimal returned = BigDecimal.ZERO;
            for (Iterator groupiter = group.iterator(); groupiter.hasNext(); ) {
                GenericValue returnItem = (GenericValue) groupiter.next();
-               if (returnItem.getDouble("returnQuantity") != null) {
-                   returned += (returnItem.getDouble("returnQuantity")).doubleValue();
+               if (returnItem.getBigDecimal("returnQuantity") != null) {
+                   returned = returned.add(returnItem.getBigDecimal("returnQuantity"));
                }
            }
 
            // the quantity returned per order item
-           returnMap.put(orderItem.get("orderItemSeqId"), new Double(returned));
+           returnMap.put(orderItem.get("orderItemSeqId"), returned);
        }
        return returnMap;
    }
@@ -1881,10 +1880,9 @@
             BigDecimal itemTaxes = this.getOrderItemTax(orderItem);
             BigDecimal itemShipping = this.getOrderItemShipping(orderItem);
 
-            BigDecimal quantityReturnedDouble = (BigDecimal) itemReturnedQuantities.get(orderItem.get("orderItemSeqId"));
-            BigDecimal quantityReturned = ZERO;
-            if (quantityReturnedDouble != null) {
-                quantityReturned = quantityReturnedDouble;
+            BigDecimal quantityReturned = (BigDecimal) itemReturnedQuantities.get(orderItem.get("orderItemSeqId"));
+            if (quantityReturned == null) {
+                quantityReturned = BigDecimal.ZERO;
             }
 
             BigDecimal quantityNotReturned = itemQuantity.subtract(quantityReturned);
@@ -2088,10 +2086,10 @@
         return reservedQty.subtract(backordered).setScale(scale, rounding);
     }
 
-    public double getItemCanceledQuantity(GenericValue orderItem) {
-        Double cancelQty = orderItem.getDouble("cancelQuantity");
-        if (cancelQty == null) cancelQty = new Double(0);
-        return cancelQty.doubleValue();
+    public BigDecimal getItemCanceledQuantity(GenericValue orderItem) {
+        BigDecimal cancelQty = orderItem.getBigDecimal("cancelQuantity");
+        if (cancelQty == null) cancelQty = BigDecimal.ZERO;
+        return cancelQty;
     }
 
     public BigDecimal getTotalOrderItemsQuantity() {
@@ -2235,14 +2233,14 @@
         return orderQty.subtract(cancelQty).setScale(scale, rounding);
     }
 
-    public static Double getOrderItemShipGroupQuantity(GenericValue shipGroupAssoc) {
-        Double cancelQty = shipGroupAssoc.getDouble("cancelQuantity");
-        Double orderQty = shipGroupAssoc.getDouble("quantity");
+    public static BigDecimal getOrderItemShipGroupQuantity(GenericValue shipGroupAssoc) {
+        BigDecimal cancelQty = shipGroupAssoc.getBigDecimal("cancelQuantity");
+        BigDecimal orderQty = shipGroupAssoc.getBigDecimal("quantity");
 
-        if (cancelQty == null) cancelQty = new Double(0.0);
-        if (orderQty == null) orderQty = new Double(0.0);
+        if (cancelQty == null) cancelQty = BigDecimal.ZERO;
+        if (orderQty == null) orderQty = BigDecimal.ZERO;
 
-        return new Double(orderQty.doubleValue() - cancelQty.doubleValue());
+        return orderQty.subtract(cancelQty);
     }
 
     public static GenericValue getProductStoreFromOrder(GenericDelegator delegator, String orderId) {
@@ -2493,13 +2491,13 @@
         return promoAdjTotal.setScale(scale, rounding);
     }
 
-    public static Double getWorkEffortRentalLenght(GenericValue workEffort){
-        Double length = null;
+    public static BigDecimal getWorkEffortRentalLength(GenericValue workEffort){
+    	BigDecimal length = null;
         if (workEffort.get("estimatedStartDate") != null && workEffort.get("estimatedCompletionDate") != null) {
-            length = new Double(UtilDateTime.getInterval(workEffort.getTimestamp("estimatedStartDate"),workEffort.getTimestamp("estimatedCompletionDate"))/86400000);
+            length = new BigDecimal(UtilDateTime.getInterval(workEffort.getTimestamp("estimatedStartDate"),workEffort.getTimestamp("estimatedCompletionDate"))/86400000);
         }
         return length;
-        }
+    }
     
     public static BigDecimal getWorkEffortRentalQuantity(GenericValue workEffort){
         BigDecimal persons = BigDecimal.ONE;
@@ -2668,8 +2666,8 @@
         return newOrderAdjustmentsList;
     }
 
-    public static double getQuantityOnOrder(GenericDelegator delegator, String productId) {
-        double quantity = 0.0;
+    public static BigDecimal getQuantityOnOrder(GenericDelegator delegator, String productId) {
+        BigDecimal quantity = BigDecimal.ZERO;
 
         // first find all open purchase orders
         List openOrdersExprs = UtilMisc.toList(EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, "PURCHASE_ORDER"));
@@ -2689,11 +2687,11 @@
             Iterator i = openOrders.iterator();
             while (i.hasNext()) {
                 GenericValue order = (GenericValue) i.next();
-                Double thisQty = order.getDouble("quantity");
+                BigDecimal thisQty = order.getBigDecimal("quantity");
                 if (thisQty == null) {
-                    thisQty = new Double(0);
+                    thisQty = BigDecimal.ZERO;
                 }
-                quantity += thisQty.doubleValue();
+                quantity = quantity.add(thisQty);
             }
         }
 
@@ -2790,16 +2788,16 @@
     }
 
    /** Get the quantity of order items that have been invoiced */
-   public static double getOrderItemInvoicedQuantity(GenericValue orderItem) {
-       double invoiced = 0;
+   public static BigDecimal getOrderItemInvoicedQuantity(GenericValue orderItem) {
+       BigDecimal invoiced = BigDecimal.ZERO;
        try {
            // this is simply the sum of quantity billed in all related OrderItemBillings
            List billings = orderItem.getRelated("OrderItemBilling");
            for (Iterator iter = billings.iterator(); iter.hasNext(); ) {
                GenericValue billing = (GenericValue) iter.next();
-               Double quantity = billing.getDouble("quantity");
+               BigDecimal quantity = billing.getBigDecimal("quantity");
                if (quantity != null) {
-                   invoiced += quantity.doubleValue();
+                   invoiced = invoiced.add(quantity);
                }
            }
        } catch (GenericEntityException e) {

Modified: ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java?rev=721986&r1=721985&r2=721986&view=diff
==============================================================================
--- ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java (original)
+++ ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java Sun Nov 30 22:51:11 2008
@@ -125,14 +125,14 @@
     }
 
     // worker method which can be used in screen iterations
-    public static Double getReturnItemInitialCost(GenericDelegator delegator, String returnId, String returnItemSeqId) {
+    public static BigDecimal getReturnItemInitialCost(GenericDelegator delegator, String returnId, String returnItemSeqId) {
         if (delegator == null || returnId == null || returnItemSeqId == null) {
             throw new IllegalArgumentException("Method parameters cannot contain nulls");
         }
         Debug.log("Finding the initial item cost for return item : " + returnId + " / " + returnItemSeqId, module);
 
         // the cost holder
-        Double itemCost = new Double(0.00);
+        BigDecimal itemCost = BigDecimal.ZERO;
 
         // get the return item information
         GenericValue returnItem = null;
@@ -173,7 +173,7 @@
                     if (inventoryItem != null) {
                         Debug.log("Located inventory item - " + inventoryItem.getString("inventoryItemId"), module);
                         if (inventoryItem.get("unitCost") != null) {
-                            itemCost = inventoryItem.getDouble("unitCost");
+                            itemCost = inventoryItem.getBigDecimal("unitCost");
                         } else {
                             Debug.logInfo("Found item cost; but cost was null. Returning default amount (0.00)", module);
                         }
@@ -332,13 +332,13 @@
         }
 
         String itemStatus = orderItem.getString("statusId");
-        double orderQty = orderItem.getDouble("quantity").doubleValue();
-        if (orderItem.getDouble("cancelQuantity") != null) {
-            orderQty -= orderItem.getDouble("cancelQuantity").doubleValue();
+        BigDecimal orderQty = orderItem.getBigDecimal("quantity");
+        if (orderItem.getBigDecimal("cancelQuantity") != null) {
+            orderQty = orderQty.subtract(orderItem.getBigDecimal("cancelQuantity"));
         }
 
         // get the returnable quantity
-        double returnableQuantity = 0.00;
+        BigDecimal returnableQuantity = BigDecimal.ZERO;
         if (returnable && (itemStatus.equals("ITEM_APPROVED") || itemStatus.equals("ITEM_COMPLETED"))) {
             List returnedItems = null;
             try {
@@ -350,7 +350,7 @@
             if (returnedItems == null || returnedItems.size() == 0) {
                 returnableQuantity = orderQty;
             } else {
-                double returnedQty = 0.00;
+                BigDecimal returnedQty = BigDecimal.ZERO;
                 Iterator ri = returnedItems.iterator();
                 while (ri.hasNext()) {
                     GenericValue returnItem = (GenericValue) ri.next();
@@ -363,11 +363,11 @@
                     }
                     String returnStatus = returnHeader.getString("statusId");
                     if (!returnStatus.equals("RETURN_CANCELLED")) {
-                        returnedQty += returnItem.getDouble("returnQuantity").doubleValue();
+                        returnedQty = returnedQty.add(returnItem.getBigDecimal("returnQuantity"));
                     }
                 }
-                if (returnedQty < orderQty) {
-                    returnableQuantity = orderQty - returnedQty;
+                if (returnedQty.compareTo(orderQty) < 0) {
+                    returnableQuantity = orderQty.subtract(returnedQty);
                 }
             }
         }
@@ -375,8 +375,8 @@
         // get the returnable price now equals to orderItem.unitPrice, since adjustments are booked separately
 
         Map result = ServiceUtil.returnSuccess();
-        result.put("returnableQuantity", new Double(returnableQuantity));
-        result.put("returnablePrice", orderItem.get("unitPrice"));
+        result.put("returnableQuantity", returnableQuantity);
+        result.put("returnablePrice", orderItem.getBigDecimal("unitPrice"));
         return result;
     }
 
@@ -429,8 +429,8 @@
                     }
                     // items not issued/shipped are considered as returnable only if they are 
                     // not physical items
-                    Double quantityIssued = orderItemQuantityIssued.getDouble("quantityIssued");
-                    if (UtilValidate.isEmpty(quantityIssued) || quantityIssued.doubleValue() == 0) {
+                    BigDecimal quantityIssued = orderItemQuantityIssued.getBigDecimal("quantityIssued");
+                    if (UtilValidate.isEmpty(quantityIssued) || quantityIssued.compareTo(BigDecimal.ZERO) == 0) {
                         try {
                             GenericValue itemProduct = item.getRelatedOne("Product");
                             if (ProductWorker.isPhysical(itemProduct)) {
@@ -454,7 +454,7 @@
                     } else {
 
                         // Don't add the OrderItem to the map of returnable OrderItems if there isn't any returnable quantity.
-                        if (((Double) serviceResult.get("returnableQuantity")).doubleValue() == 0 ) {
+                        if (((BigDecimal) serviceResult.get("returnableQuantity")).compareTo(BigDecimal.ZERO) == 0 ) {
                             continue;
                         }
                         Map returnInfo = new HashMap();
@@ -495,7 +495,7 @@
                             while (itemAdjustmentsIt.hasNext()) {
                                 GenericValue itemAdjustment = (GenericValue)itemAdjustmentsIt.next();
                                 returnInfo = new HashMap();
-                                returnInfo.put("returnableQuantity", new Double(1.0));
+                                returnInfo.put("returnableQuantity", BigDecimal.ONE);
                                  // TODO: the returnablePrice should be set to the amount minus the already returned amount
                                 returnInfo.put("returnablePrice", itemAdjustment.get("amount"));
                                 returnInfo.put("itemTypeKey", itemTypeKey);
@@ -630,7 +630,7 @@
             return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderErrorGettingReturnHeaderItemInformation", locale));
         }
         
-        BigDecimal adjustments = new BigDecimal(getReturnAdjustmentTotal(delegator, UtilMisc.toMap("returnId", returnId, "returnTypeId", "RTN_CREDIT")));
+        BigDecimal adjustments = getReturnAdjustmentTotal(delegator, UtilMisc.toMap("returnId", returnId, "returnTypeId", "RTN_CREDIT"));
 
         if (returnHeader != null && ((returnItems != null && returnItems.size() > 0) || adjustments.compareTo(ZERO) > 0)) {
             String billingAccountId = returnHeader.getString("billingAccountId");
@@ -704,7 +704,7 @@
             // create a return item response 
             Map itemResponse = UtilMisc.toMap("paymentId", paymentId);
             itemResponse.put("billingAccountId", billingAccountId);
-            itemResponse.put("responseAmount", new Double(creditTotal.doubleValue()));
+            itemResponse.put("responseAmount", creditTotal);
             itemResponse.put("responseDate", now);
             itemResponse.put("userLogin", userLogin);
             Map serviceResults = null;
@@ -823,7 +823,7 @@
             if (storeCreditValidDays != null) thruDate = UtilDateTime.getDayEnd(UtilDateTime.nowTimestamp(), storeCreditValidDays);
 
             // create the billing account
-            Map input = UtilMisc.toMap("accountLimit", new Double(0.00), "description", "Credit Account for Return #" + returnHeader.get("returnId"), "userLogin", userLogin);
+            Map input = UtilMisc.toMap("accountLimit", BigDecimal.ZERO, "description", "Credit Account for Return #" + returnHeader.get("returnId"), "userLogin", userLogin);
             input.put("accountCurrencyUomId", returnHeader.get("currencyUomId"));
             input.put("thruDate", thruDate);
             Map results = dispatcher.runSync("createBillingAccount", input);
@@ -868,7 +868,7 @@
             return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderErrorGettingReturnHeaderItemInformation", locale));
         }
 
-        BigDecimal adjustments = new BigDecimal(getReturnAdjustmentTotal(delegator, UtilMisc.toMap("returnId", returnId, "returnTypeId", "RTN_REFUND")));
+        BigDecimal adjustments = getReturnAdjustmentTotal(delegator, UtilMisc.toMap("returnId", returnId, "returnTypeId", "RTN_REFUND"));
 
         if (returnHeader != null && ((returnItems != null && returnItems.size() > 0) || adjustments.compareTo(ZERO) > 0)) {
             Map itemsByOrder = new HashMap();
@@ -895,7 +895,7 @@
                 Map.Entry entry = (Map.Entry) itemByOrderIt.next();
                 String orderId = (String) entry.getKey();
                 List items = (List) entry.getValue();
-                Double orderTotal = (Double) totalByOrder.get(orderId);
+                BigDecimal orderTotal = (BigDecimal) totalByOrder.get(orderId);
 
                 // get order header & payment prefs
                 GenericValue orderHeader = null;
@@ -961,11 +961,11 @@
                     // See how much we can refund to the payment method
                     BigDecimal orderPayPrefReceivedTotal = ZERO ;
                     if (receivedPaymentTotalsByPaymentMethod.containsKey(orderPayPrefKey)) {
-                        orderPayPrefReceivedTotal = orderPayPrefReceivedTotal.add(new BigDecimal(((Double) receivedPaymentTotalsByPaymentMethod.get(orderPayPrefKey)).doubleValue()).setScale(decimals, rounding));
+                        orderPayPrefReceivedTotal = orderPayPrefReceivedTotal.add((BigDecimal)receivedPaymentTotalsByPaymentMethod.get(orderPayPrefKey)).setScale(decimals, rounding);
                     }
                     BigDecimal orderPayPrefRefundedTotal = ZERO ;
                     if (refundedTotalsByPaymentMethod.containsKey(orderPayPrefKey)) {
-                        orderPayPrefRefundedTotal = orderPayPrefRefundedTotal.add(new BigDecimal(((Double) refundedTotalsByPaymentMethod.get(orderPayPrefKey)).doubleValue()).setScale(decimals, rounding));
+                        orderPayPrefRefundedTotal = orderPayPrefRefundedTotal.add((BigDecimal)refundedTotalsByPaymentMethod.get(orderPayPrefKey)).setScale(decimals, rounding);
                     }
                     BigDecimal orderPayPrefAvailableTotal = orderPayPrefReceivedTotal.subtract(orderPayPrefRefundedTotal);
 
@@ -983,7 +983,7 @@
                 }
 
                 // Keep a decreasing total of the amount remaining to refund
-                BigDecimal amountLeftToRefund = new BigDecimal(orderTotal.doubleValue()).setScale(decimals, rounding);
+                BigDecimal amountLeftToRefund = orderTotal.setScale(decimals, rounding);
 
                 // This can be extended to support additional electronic types
                 List electronicTypes = UtilMisc.toList("CREDIT_CARD", "EFT_ACCOUNT", "FIN_ACCOUNT", "GIFT_CARD");
@@ -1031,7 +1031,7 @@
                             if (electronicTypes.contains(paymentMethodTypeId)) {
                                 try {
                                     // for electronic types such as CREDIT_CARD and EFT_ACCOUNT, use refundPayment service
-                                    serviceResult = dispatcher.runSync("refundPayment", UtilMisc.<String, Object>toMap("orderPaymentPreference", orderPaymentPreference, "refundAmount", new Double(amountToRefund.setScale(decimals, rounding).doubleValue()), "userLogin", userLogin));
+                                    serviceResult = dispatcher.runSync("refundPayment", UtilMisc.<String, Object>toMap("orderPaymentPreference", orderPaymentPreference, "refundAmount", amountToRefund.setScale(decimals, rounding), "userLogin", userLogin));
                                     if (ServiceUtil.isError(serviceResult) || ServiceUtil.isFailure(serviceResult)) {
                                         Debug.logError("Error in refund payment: " + ServiceUtil.getErrorMessage(serviceResult), module);
                                         continue;
@@ -1044,7 +1044,7 @@
                             } else if (paymentMethodTypeId.equals("EXT_BILLACT")) {
                                 try {
                                     // for Billing Account refunds
-                                    serviceResult = dispatcher.runSync("refundBillingAccountPayment", UtilMisc.<String, Object>toMap("orderPaymentPreference", orderPaymentPreference, "refundAmount", new Double(amountToRefund.setScale(decimals, rounding).doubleValue()), "userLogin", userLogin));
+                                    serviceResult = dispatcher.runSync("refundBillingAccountPayment", UtilMisc.<String, Object>toMap("orderPaymentPreference", orderPaymentPreference, "refundAmount", amountToRefund.setScale(decimals, rounding), "userLogin", userLogin));
                                     if (ServiceUtil.isError(serviceResult) || ServiceUtil.isFailure(serviceResult)) {
                                         Debug.logError("Error in refund payment: " + ServiceUtil.getErrorMessage(serviceResult), module);
                                         continue;
@@ -1057,7 +1057,7 @@
                             } else {
                                 // handle manual refunds
                                 try {
-                                    Map input = UtilMisc.toMap("userLogin", userLogin, "amount", new Double(amountLeftToRefund.doubleValue()), "statusId", "PMNT_NOT_PAID");
+                                    Map input = UtilMisc.toMap("userLogin", userLogin, "amount", amountLeftToRefund, "statusId", "PMNT_NOT_PAID");
                                     input.put("partyIdTo", returnHeader.get("fromPartyId"));
                                     input.put("partyIdFrom", returnHeader.get("toPartyId"));
                                     input.put("paymentTypeId", "CUSTOMER_REFUND");
@@ -1081,7 +1081,7 @@
                             // Fill out the data for the new ReturnItemResponse
                             Map response = FastMap.newInstance();
                             response.put("orderPaymentPreferenceId", orderPaymentPreference.getString("orderPaymentPreferenceId"));
-                            response.put("responseAmount", new Double(amountToRefund.setScale(decimals, rounding).doubleValue()));
+                            response.put("responseAmount", amountToRefund.setScale(decimals, rounding));
                             response.put("responseDate", now);
                             response.put("userLogin", userLogin);
                             response.put("paymentId", paymentId);
@@ -1156,7 +1156,7 @@
         GenericValue userLogin = (GenericValue) context.get("userLogin");
 
         GenericValue paymentPref = (GenericValue) context.get("orderPaymentPreference");
-        Double refundAmount = (Double) context.get("refundAmount");
+        BigDecimal refundAmount = (BigDecimal) context.get("refundAmount");
 
         GenericValue orderHeader = null;
         try {
@@ -1302,7 +1302,7 @@
                 if (paymentId != null) {
                     // create a payment application for the invoice
                     Map input = UtilMisc.toMap("paymentId", paymentId, "invoiceId", invoice.getString("invoiceId"));
-                    input.put("amountApplied", new Double(amountApplied.doubleValue()));
+                    input.put("amountApplied", amountApplied);
                     input.put("userLogin", userLogin);
                     if (response.get("billingAccountId") != null) {
                         GenericValue billingAccount = response.getRelatedOne("BillingAccount");
@@ -1397,7 +1397,7 @@
                 orderMap.put("webSiteId", orderHeader.get("webSiteId"));
                 orderMap.put("visitId", orderHeader.get("visitId"));
                 orderMap.put("currencyUom", orderHeader.get("currencyUom"));
-                orderMap.put("grandTotal",  new Double(0.00));
+                orderMap.put("grandTotal",  BigDecimal.ZERO);
 
                 // make the contact mechs
                 List contactMechs = new ArrayList();
@@ -1437,8 +1437,8 @@
                  */
 
                 // make the order items
-                double orderPriceTotal = 0.00;
-                double additionalItemTotal = 0.00;
+                BigDecimal orderPriceTotal = BigDecimal.ZERO;
+                BigDecimal additionalItemTotal = BigDecimal.ZERO;
                 List orderItems = new ArrayList();
                 List orderItemShipGroupInfo = new ArrayList();
                 List orderItemShipGroupIds = new ArrayList(); // this is used to store the ship group ids of the groups already added to the orderItemShipGroupInfo list
@@ -1458,10 +1458,10 @@
                             continue;
                         }
                         if (orderItem != null) {
-                            Double quantity = returnItem.getDouble("returnQuantity");
-                            Double unitPrice = returnItem.getDouble("returnPrice");
+                            BigDecimal quantity = returnItem.getBigDecimal("returnQuantity");
+                            BigDecimal unitPrice = returnItem.getBigDecimal("returnPrice");
                             if (quantity != null && unitPrice != null) {
-                                orderPriceTotal += (quantity.doubleValue() * unitPrice.doubleValue());
+                                orderPriceTotal = orderPriceTotal.add(quantity.multiply(unitPrice));
                                 // Check if the product being returned has a Refurbished Equivalent and if so
                                 // (and there is inventory for the assoc product) use that product instead
                                 GenericValue refurbItem = null;
@@ -1572,11 +1572,11 @@
                                                 continue;
                                             }
                                             if (UtilValidate.isNotEmpty(repairItemProduct)) {
-                                                Double repairUnitQuantity = repairItem.getDouble("quantity");
+                                                BigDecimal repairUnitQuantity = repairItem.getBigDecimal("quantity");
                                                 if (UtilValidate.isEmpty(repairUnitQuantity)) {
-                                                    repairUnitQuantity = new Double(1.0);
+                                                    repairUnitQuantity = BigDecimal.ONE;
                                                 }
-                                                Double repairQuantity = new Double(quantity.doubleValue() * repairUnitQuantity.doubleValue());
+                                                BigDecimal repairQuantity = quantity.multiply(repairUnitQuantity);
                                                 newItem = delegator.makeValue("OrderItem", UtilMisc.toMap("orderItemSeqId", UtilFormatOut.formatPaddedNumber(itemCount++, 5)));
 
                                                 // price
@@ -1610,14 +1610,14 @@
                                                 }
 
                                                 if (priceResult.get("listPrice") != null) {
-                                                    newItem.set("unitListPrice", (Double)priceResult.get("listPrice"));
+                                                    newItem.set("unitListPrice", (BigDecimal)priceResult.get("listPrice"));
                                                 }
 
-                                                Double repairUnitPrice = null;
+                                                BigDecimal repairUnitPrice = null;
                                                 if (priceResult.get("basePrice") != null) {
-                                                    repairUnitPrice = (Double)priceResult.get("basePrice");
+                                                    repairUnitPrice = (BigDecimal)priceResult.get("basePrice");
                                                 } else {
-                                                    repairUnitPrice = new Double(0.0);
+                                                    repairUnitPrice = BigDecimal.ZERO;
                                                 }
                                                 newItem.set("unitPrice", repairUnitPrice);
 
@@ -1627,7 +1627,7 @@
                                                 newItem.set("itemDescription", ProductContentWrapper.getProductContentAsText(repairItemProduct, "PRODUCT_NAME", locale, null));
                                                 newItem.set("statusId", "ITEM_CREATED");
                                                 orderItems.add(newItem);
-                                                additionalItemTotal = additionalItemTotal + (repairQuantity.doubleValue() * repairUnitPrice.doubleValue());
+                                                additionalItemTotal = additionalItemTotal.add(repairQuantity.multiply(repairUnitPrice));
                                                 if (UtilValidate.isNotEmpty(orderItemShipGroupAssoc)) {
                                                     GenericValue newOrderItemShipGroupAssoc = delegator.makeValue("OrderItemShipGroupAssoc", UtilMisc.toMap("orderItemSeqId", newItem.getString("orderItemSeqId"), "shipGroupSeqId", orderItemShipGroupAssoc.getString("shipGroupSeqId"), "quantity", repairQuantity));
                                                     orderItemShipGroupInfo.add(newOrderItemShipGroupAssoc);
@@ -1659,14 +1659,14 @@
                 // create the replacement adjustment
                 GenericValue adj = delegator.makeValue("OrderAdjustment");
                 adj.set("orderAdjustmentTypeId", "REPLACE_ADJUSTMENT");
-                adj.set("amount", new Double(orderPriceTotal * -1));
+                adj.set("amount", orderPriceTotal.negate());
                 adj.set("comments", "Replacement Item Return #" + returnId);
                 adj.set("createdDate", nowTimestamp);
                 adj.set("createdByUserLogin", userLogin.getString("userLoginId"));
                 orderMap.put("orderAdjustments", UtilMisc.toList(adj));
 
                 // Payment preference
-                if (additionalItemTotal > 0) {
+                if (additionalItemTotal.compareTo(BigDecimal.ZERO) > 0) {
                     GenericValue paymentMethod = null;
                     try {
                         paymentMethod = returnHeader.getRelatedOne("PaymentMethod");
@@ -1744,7 +1744,7 @@
                     // create a ReturnItemResponse and attach to each ReturnItem
                     Map itemResponse = FastMap.newInstance();
                     itemResponse.put("replacementOrderId", createdOrderId);
-                    itemResponse.put("responseAmount", new Double(orderPriceTotal));
+                    itemResponse.put("responseAmount", orderPriceTotal);
                     itemResponse.put("responseDate", nowTimestamp);
                     itemResponse.put("userLogin", userLogin);
                     String returnItemResponseId = null;
@@ -1871,9 +1871,9 @@
             String orderId = returnItem.getString("orderId");
             if (orderId != null) {
                 if (returnItemsByOrderId != null) {
-                    Double totalForOrder = null;
+                    BigDecimal totalForOrder = null;
                     if (totalByOrder != null) {
-                        totalForOrder = (Double) totalByOrder.get(orderId);
+                        totalForOrder = (BigDecimal) totalByOrder.get(orderId);
                     }
 
                     List returnItemList = (List) returnItemsByOrderId.get(orderId);
@@ -1881,7 +1881,7 @@
                         returnItemList = new ArrayList();
                     }
                     if (totalForOrder == null) {
-                        totalForOrder = new Double(0.00);
+                        totalForOrder = BigDecimal.ZERO;
                     }
 
                     // add to the items list
@@ -1890,18 +1890,18 @@
 
                     if (totalByOrder != null) {
                         // add on the total for this line
-                        Double quantity = returnItem.getDouble("returnQuantity");
-                        Double amount = returnItem.getDouble("returnPrice");
+                        BigDecimal quantity = returnItem.getBigDecimal("returnQuantity");
+                        BigDecimal amount = returnItem.getBigDecimal("returnPrice");
                         if (quantity == null) {
-                            quantity = new Double(0);
+                            quantity = BigDecimal.ZERO;
                         }
                         if (amount == null) {
-                            amount = new Double(0.00);
+                            amount = BigDecimal.ZERO;
                         }
-                        double thisTotal = amount.doubleValue() * quantity.doubleValue();
-                        double existingTotal = totalForOrder.doubleValue();
+                        BigDecimal thisTotal = amount.multiply(quantity);
+                        BigDecimal existingTotal = totalForOrder;
                         Map condition = UtilMisc.toMap("returnId", returnItem.get("returnId"), "returnItemSeqId", returnItem.get("returnItemSeqId"));
-                        Double newTotal = new Double(existingTotal + thisTotal + getReturnAdjustmentTotal(delegator, condition) );
+                        BigDecimal newTotal = existingTotal.add(thisTotal).add(getReturnAdjustmentTotal(delegator, condition));
                         totalByOrder.put(orderId, newTotal);
                     }
                 }
@@ -1917,8 +1917,8 @@
                 Map condition = UtilMisc.toMap("returnId", returnId,
                                                "returnItemSeqId", org.ofbiz.common.DataModelConstants.SEQ_ID_NA,
                                                "returnTypeId", returnTypeId);
-                double existingTotal = ((Double) totalByOrder.get(orderId)).doubleValue() + getReturnAdjustmentTotal(delegator, condition);
-                totalByOrder.put(orderId, new Double(existingTotal));
+                BigDecimal existingTotal = ((BigDecimal)totalByOrder.get(orderId)).add(getReturnAdjustmentTotal(delegator, condition));
+                totalByOrder.put(orderId, existingTotal);
             }
         }
     }
@@ -2026,7 +2026,7 @@
         GenericValue returnItem = null;
         GenericValue returnHeader = null;
         
-        Double amount;
+        BigDecimal amount;
         
         // if orderAdjustment is not empty, then copy most return adjustment information from orderAdjustment's
         if (orderAdjustmentId != null) {
@@ -2078,7 +2078,7 @@
         // calculate the returnAdjustment amount
         if (returnItem != null) {  // returnAdjustment for returnItem
             if (needRecalculate(returnAdjustmentTypeId)) {
-                Debug.logInfo("returnPrice:" + returnItem.getDouble("returnPrice") + ",returnQuantity:" + returnItem.getDouble("returnQuantity") + ",sourcePercentage:" + orderAdjustment.getDouble("sourcePercentage"), module);
+                Debug.logInfo("returnPrice:" + returnItem.getBigDecimal("returnPrice") + ",returnQuantity:" + returnItem.getBigDecimal("returnQuantity") + ",sourcePercentage:" + orderAdjustment.getBigDecimal("sourcePercentage"), module);
                 if (orderAdjustment == null) {
                     Debug.logError("orderAdjustment [" + orderAdjustmentId + "] not found", module);
                     return ServiceUtil.returnError("orderAdjustment [" + orderAdjustmentId + "] not found");
@@ -2087,10 +2087,10 @@
                 BigDecimal orderTotal = orderItem.getBigDecimal("quantity").multiply(orderItem.getBigDecimal("unitPrice"));                
                 amount = getAdjustmentAmount("RET_SALES_TAX_ADJ".equals(returnAdjustmentTypeId), returnTotal, orderTotal, orderAdjustment.getBigDecimal("amount"));
             } else {
-                amount = (Double) context.get("amount");
+                amount = (BigDecimal) context.get("amount");
             }
         } else { // returnAdjustment for returnHeader
-            amount = (Double) context.get("amount");
+            amount = (BigDecimal) context.get("amount");
         }
 
         // store the return adjustment
@@ -2103,7 +2103,7 @@
             if (orderAdjustment != null && orderAdjustment.get("taxAuthorityRateSeqId") != null) {
                 newReturnAdjustment.set("taxAuthorityRateSeqId", orderAdjustment.getString("taxAuthorityRateSeqId"));
             }
-            newReturnAdjustment.set("amount", (UtilValidate.isEmpty(amount)? new Double(0.0): amount));
+            newReturnAdjustment.set("amount", amount == null ? BigDecimal.ZERO : amount);
             newReturnAdjustment.set("returnAdjustmentTypeId", returnAdjustmentTypeId);
             newReturnAdjustment.set("description", description);
             newReturnAdjustment.set("returnItemSeqId", UtilValidate.isEmpty(returnItemSeqId) ? "_NA_" : returnItemSeqId);
@@ -2124,7 +2124,7 @@
         GenericValue returnItem = null;
         GenericValue returnAdjustment = null;
         String returnAdjustmentTypeId = null;
-        Double amount;
+        BigDecimal amount;
 
 
         try {
@@ -2137,18 +2137,18 @@
 
             // calculate the returnAdjustment amount
             if (returnItem != null) {  // returnAdjustment for returnItem
-                double originalReturnPrice = (context.get("originalReturnPrice") != null) ? ((Double) context.get("originalReturnPrice")).doubleValue() : returnItem.getDouble("returnPrice").doubleValue();
-                double originalReturnQuantity = (context.get("originalReturnQuantity") != null) ? ((Double) context.get("originalReturnQuantity")).doubleValue() : returnItem.getDouble("returnQuantity").doubleValue();
+            	BigDecimal originalReturnPrice = (context.get("originalReturnPrice") != null) ? ((BigDecimal) context.get("originalReturnPrice")) : returnItem.getBigDecimal("returnPrice");
+            	BigDecimal originalReturnQuantity = (context.get("originalReturnQuantity") != null) ? ((BigDecimal) context.get("originalReturnQuantity")) : returnItem.getBigDecimal("returnQuantity");
 
                 if (needRecalculate(returnAdjustmentTypeId)) {
                     BigDecimal returnTotal = returnItem.getBigDecimal("returnPrice").multiply(returnItem.getBigDecimal("returnQuantity"));
-                    BigDecimal originalReturnTotal = new BigDecimal(originalReturnPrice).multiply(new BigDecimal(originalReturnQuantity));
+                    BigDecimal originalReturnTotal = originalReturnPrice.multiply(originalReturnQuantity);
                     amount = getAdjustmentAmount("RET_SALES_TAX_ADJ".equals(returnAdjustmentTypeId), returnTotal, originalReturnTotal, returnAdjustment.getBigDecimal("amount"));
                 } else {
-                    amount = (Double) context.get("amount");
+                    amount = (BigDecimal) context.get("amount");
                 }
             } else { // returnAdjustment for returnHeader
-                amount = (Double) context.get("amount");
+                amount = (BigDecimal) context.get("amount");
             }
 
             Map result = null;
@@ -2226,8 +2226,8 @@
      * @param condition
      * @return
      */
-    public static double getReturnAdjustmentTotal(GenericDelegator delegator, Map condition) {
-        double total = 0.0;
+    public static BigDecimal getReturnAdjustmentTotal(GenericDelegator delegator, Map condition) {
+        BigDecimal total = BigDecimal.ZERO;
         List adjustments;
         try {
             // TODO: find on a view-entity with a sum is probably more efficient
@@ -2237,7 +2237,7 @@
                 while (adjustmentIterator.hasNext()) {
                     GenericValue returnAdjustment = (GenericValue) adjustmentIterator.next();
                     if ((returnAdjustment != null) && (returnAdjustment.get("amount") != null)) {
-                       total += returnAdjustment.getDouble("amount").doubleValue();
+                       total = total.add(returnAdjustment.getBigDecimal("amount"));
                     }
                 }
             }
@@ -2284,7 +2284,7 @@
      * @param amount
      * @return  new returnAdjustment amount
      */
-    public static Double getAdjustmentAmount(boolean isSalesTax, BigDecimal returnTotal, BigDecimal originalTotal, BigDecimal amount) {
+    public static BigDecimal getAdjustmentAmount(boolean isSalesTax, BigDecimal returnTotal, BigDecimal originalTotal, BigDecimal amount) {
         String settingPrefix = isSalesTax ? "salestax" : "order";
         String decimalsPrefix = isSalesTax ? ".calc" : "";
         int decimals = UtilNumber.getBigDecimalScale(settingPrefix + decimalsPrefix + ".decimals");
@@ -2297,6 +2297,6 @@
         } else {
             newAmount = ZERO;
         }
-        return new Double(newAmount.doubleValue());
+        return newAmount;
     }
 }

Modified: ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderServices.java?rev=721986&r1=721985&r2=721986&view=diff
==============================================================================
--- ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderServices.java (original)
+++ ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/order/OrderServices.java Sun Nov 30 22:51:11 2008
@@ -253,17 +253,17 @@
             if (currentProductId != null) {
                 // only normalize items with a product associated (ignore non-product items)
                 if (normalizedItemQuantities.get(currentProductId) == null) {
-                    normalizedItemQuantities.put(currentProductId, new Double(orderItem.getDouble("quantity").doubleValue()));
+                    normalizedItemQuantities.put(currentProductId, orderItem.getBigDecimal("quantity"));
                     normalizedItemNames.put(currentProductId, orderItem.getString("itemDescription"));
                 } else {
-                    Double currentQuantity = (Double) normalizedItemQuantities.get(currentProductId);
-                    normalizedItemQuantities.put(currentProductId, new Double(currentQuantity.doubleValue() + orderItem.getDouble("quantity").doubleValue()));
+                	BigDecimal currentQuantity = (BigDecimal) normalizedItemQuantities.get(currentProductId);
+                    normalizedItemQuantities.put(currentProductId, currentQuantity.add(orderItem.getBigDecimal("quantity")));
                 }
 
                 try {
                     // count product ordered quantities
                     // run this synchronously so it will run in the same transaction
-                    dispatcher.runSync("countProductQuantityOrdered", UtilMisc.<String, Object>toMap("productId", currentProductId, "quantity", orderItem.getDouble("quantity"), "userLogin", userLogin));
+                    dispatcher.runSync("countProductQuantityOrdered", UtilMisc.<String, Object>toMap("productId", currentProductId, "quantity", orderItem.getBigDecimal("quantity"), "userLogin", userLogin));
                 } catch (GenericServiceException e1) {
                     Debug.logError(e1, "Error calling countProductQuantityOrdered service", module);
                     return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderErrorCallingCountProductQuantityOrderedService",locale) + e1.toString());
@@ -279,7 +279,7 @@
         while (normalizedIter.hasNext()) {
             // lookup the product entity for each normalized item; error on products not found
             String currentProductId = (String) normalizedIter.next();
-            Double currentQuantity = (Double) normalizedItemQuantities.get(currentProductId);
+            BigDecimal currentQuantity = (BigDecimal) normalizedItemQuantities.get(currentProductId);
             String itemName = (String) normalizedItemNames.get(currentProductId);
             GenericValue product = null;
 
@@ -727,20 +727,19 @@
                         techDataCalendarExcDay = delegator.makeValue("TechDataCalendarExcDay");
                         techDataCalendarExcDay.set("calendarId", fixedAsset.get("calendarId"));
                         techDataCalendarExcDay.set("exceptionDateStartTime", exceptionDateStartTime);
-                        techDataCalendarExcDay.set("usedCapacity",new Double(00.00));  // initialise to zero
-                        techDataCalendarExcDay.set("exceptionCapacity", fixedAsset.getDouble("productionCapacity"));
+                        techDataCalendarExcDay.set("usedCapacity", BigDecimal.ZERO);  // initialise to zero
+                        techDataCalendarExcDay.set("exceptionCapacity", fixedAsset.getBigDecimal("productionCapacity"));
 //                       Debug.logInfo(" techData excday record not found creating for calendarId: " + techDataCalendarExcDay.getString("calendarId") +
 //                               " and date: " + exceptionDateStartTime.toString(), module);
                     }
                     // add the quantity to the quantity on the date record
-                    Double newUsedCapacity = new Double(techDataCalendarExcDay.getDouble("usedCapacity").doubleValue() +
-                            workEffort.getDouble("quantityToProduce").doubleValue());
+                    BigDecimal newUsedCapacity = techDataCalendarExcDay.getBigDecimal("usedCapacity").add(workEffort.getBigDecimal("quantityToProduce"));
                     // check to see if the requested quantity is available on the requested day but only when the maximum capacity is set on the fixed asset
                     if (fixedAsset.get("productionCapacity") != null)    {
 //                       Debug.logInfo("see if maximum not reached, available:  " + techDataCalendarExcDay.getString("exceptionCapacity") +
 //                               " already allocated: " + techDataCalendarExcDay.getString("usedCapacity") +
 //                                " Requested: " + workEffort.getString("quantityToProduce"), module);
-                       if (newUsedCapacity.compareTo(techDataCalendarExcDay.getDouble("exceptionCapacity")) > 0)    {
+                       if (newUsedCapacity.compareTo(techDataCalendarExcDay.getBigDecimal("exceptionCapacity")) > 0)    {
                             String errMsg = "ERROR: fixed_Asset_sold_out AssetId: " + workEffort.get("fixedAssetId") + " on date: " + techDataCalendarExcDay.getString("exceptionDateStartTime");
                             Debug.logError(errMsg, module);
                             errorMessages.add(errMsg);
@@ -1144,9 +1143,9 @@
                                         Iterator assocProductsIter = assocProducts.iterator();
                                         while (assocProductsIter.hasNext()) {
                                             GenericValue productAssoc = (GenericValue) assocProductsIter.next();
-                                            Double quantityOrd = productAssoc.getDouble("quantity");
-                                            Double quantityKit = orderItemShipGroupAssoc.getDouble("quantity");
-                                            Double quantity = new Double(quantityOrd.doubleValue() * quantityKit.doubleValue());
+                                            BigDecimal quantityOrd = productAssoc.getBigDecimal("quantity");
+                                            BigDecimal quantityKit = orderItemShipGroupAssoc.getBigDecimal("quantity");
+                                            BigDecimal quantity = quantityOrd.multiply(quantityKit);
                                             Map reserveInput = new HashMap();
                                             reserveInput.put("productStoreId", productStoreId);
                                             reserveInput.put("productId", productAssoc.getString("productIdTo"));
@@ -1178,7 +1177,7 @@
                                     reserveInput.put("shipGroupSeqId", orderItemShipGroupAssoc.getString("shipGroupSeqId"));
                                     reserveInput.put("facilityId", shipGroupFacilityId);
                                     // use the quantity from the orderItemShipGroupAssoc, NOT the orderItem, these are reserved by item-group assoc
-                                    reserveInput.put("quantity", orderItemShipGroupAssoc.getDouble("quantity"));
+                                    reserveInput.put("quantity", orderItemShipGroupAssoc.getBigDecimal("quantity"));
                                     reserveInput.put("userLogin", userLogin);
                                     Map reserveResult = dispatcher.runSync("reserveStoreInventory", reserveInput);
 
@@ -1477,7 +1476,6 @@
                     }
                     
                     // prepare the service context
-                    // pass in BigDecimal values instead of Double
                     Map serviceContext = UtilMisc.toMap("productStoreId", orh.getProductStoreId(), "itemProductList", products, "itemAmountList", amounts,
                         "itemShippingList", shipAmts, "itemPriceList", itPrices, "orderShippingAmount", orderShipping);
                     serviceContext.put("shippingAddress", shippingAddress);
@@ -1541,7 +1539,7 @@
                 createOrderAdjContext.put("orderItemSeqId", "_NA_");
                 createOrderAdjContext.put("shipGroupSeqId", "_NA_");
                 createOrderAdjContext.put("description", "Tax adjustment due to order change");
-                createOrderAdjContext.put("amount", new Double(orderTaxDifference.doubleValue()));
+                createOrderAdjContext.put("amount", orderTaxDifference);
                 createOrderAdjContext.put("userLogin", userLogin);
                 Map createOrderAdjResponse = null;
                 try {
@@ -1607,7 +1605,7 @@
                     shippingTotal = ZERO;
                     Debug.log("No valid order items found - " + shippingTotal, module);
                 } else {
-                    shippingTotal = UtilValidate.isEmpty(shippingEstMap.get("shippingTotal")) ? ZERO : new BigDecimal(((Double) shippingEstMap.get("shippingTotal")).doubleValue());
+                    shippingTotal = UtilValidate.isEmpty(shippingEstMap.get("shippingTotal")) ? ZERO : (BigDecimal)shippingEstMap.get("shippingTotal");
                     shippingTotal = shippingTotal.setScale(orderDecimals, orderRounding);
                     Debug.log("Got new shipping estimate - " + shippingTotal, module);
                 }
@@ -1791,7 +1789,7 @@
         Locale locale = (Locale) context.get("locale");
 
         GenericValue userLogin = (GenericValue) context.get("userLogin");
-        Double cancelQuantity = (Double) context.get("cancelQuantity");
+        BigDecimal cancelQuantity = (BigDecimal) context.get("cancelQuantity");
         String orderId = (String) context.get("orderId");
         String orderItemSeqId = (String) context.get("orderItemSeqId");
         String shipGroupSeqId = (String) context.get("shipGroupSeqId");
@@ -1840,33 +1838,33 @@
                     return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderErrorCannotCancelItemItemNotFound", UtilMisc.toMap("itemMsgInfo",itemMsgInfo), locale));
                 }
 
-                Double aisgaCancelQuantity =  orderItemShipGroupAssoc.getDouble("cancelQuantity");
+                BigDecimal aisgaCancelQuantity =  orderItemShipGroupAssoc.getBigDecimal("cancelQuantity");
                 if (aisgaCancelQuantity == null) {
-                    aisgaCancelQuantity = new Double(0.0);
+                    aisgaCancelQuantity = BigDecimal.ZERO;
                 }
-                Double availableQuantity = Double.valueOf(orderItemShipGroupAssoc.getDouble("quantity").doubleValue() - aisgaCancelQuantity.doubleValue());
+                BigDecimal availableQuantity = orderItemShipGroupAssoc.getBigDecimal("quantity").subtract(aisgaCancelQuantity);
                 
-                Double itemCancelQuantity = orderItem.getDouble("cancelQuantity");
+                BigDecimal itemCancelQuantity = orderItem.getBigDecimal("cancelQuantity");
                 if (itemCancelQuantity == null) {
-                    itemCancelQuantity = new Double(0.0);
+                    itemCancelQuantity = BigDecimal.ZERO;
                 }
-                Double itemQuantity = Double.valueOf(orderItem.getDouble("quantity").doubleValue() - itemCancelQuantity.doubleValue());
-                if (availableQuantity == null) availableQuantity = new Double(0.0);
-                if (itemQuantity == null) itemQuantity = new Double(0.0);
+                BigDecimal itemQuantity = orderItem.getBigDecimal("quantity").subtract(itemCancelQuantity);
+                if (availableQuantity == null) availableQuantity = BigDecimal.ZERO;
+                if (itemQuantity == null) itemQuantity = BigDecimal.ZERO;
 
-                Double thisCancelQty = null;
+                BigDecimal thisCancelQty = null;
                 if (cancelQuantity != null) {
-                    thisCancelQty = new Double(cancelQuantity.doubleValue());
+                    thisCancelQty = cancelQuantity;
                 } else {
-                    thisCancelQty = new Double(availableQuantity.doubleValue());
+                    thisCancelQty = availableQuantity;
                 }
 
-                if (availableQuantity.doubleValue() >= thisCancelQty.doubleValue()) {
-                    if (availableQuantity.doubleValue() == 0) {
+                if (availableQuantity.compareTo(thisCancelQty) >= 0) {
+                    if (availableQuantity.compareTo(BigDecimal.ZERO) == 0) {
                         continue;  //OrderItemShipGroupAssoc already cancelled
                     }
-                    orderItem.set("cancelQuantity", Double.valueOf(itemCancelQuantity.doubleValue() + thisCancelQty.doubleValue()));
-                    orderItemShipGroupAssoc.set("cancelQuantity", Double.valueOf(aisgaCancelQuantity.doubleValue() + thisCancelQty.doubleValue()));
+                    orderItem.set("cancelQuantity", itemCancelQuantity.add(thisCancelQty));
+                    orderItemShipGroupAssoc.set("cancelQuantity", aisgaCancelQuantity.add(thisCancelQty));
 
                     try {
                         List toStore = UtilMisc.toList(orderItem, orderItemShipGroupAssoc);
@@ -1907,7 +1905,7 @@
                         }
                     }  
 
-                    if (thisCancelQty.doubleValue() >= itemQuantity.doubleValue()) {
+                    if (thisCancelQty.compareTo(itemQuantity) >= 0) {
                         // all items are cancelled -- mark the item as cancelled
                         Map statusCtx = UtilMisc.toMap("orderId", orderId, "orderItemSeqId", orderItem.getString("orderItemSeqId"), "statusId", "ITEM_CANCELLED", "userLogin", userLogin);
                         try {
@@ -3136,14 +3134,14 @@
         String productId = (String) context.get("productId");
         String prodCatalogId = (String) context.get("prodCatalogId");
         BigDecimal basePrice = (BigDecimal) context.get("basePrice");
-        Double quantity = (Double) context.get("quantity");
-        Double amount = (Double) context.get("amount");
+        BigDecimal quantity = (BigDecimal) context.get("quantity");
+        BigDecimal amount = (BigDecimal) context.get("amount");
         String overridePrice = (String) context.get("overridePrice");
         String reasonEnumId = (String) context.get("reasonEnumId");
         String changeComments = (String) context.get("changeComments");        
 
         if (amount == null) {
-            amount = new Double(0.00);
+            amount = BigDecimal.ZERO;
         }
 
         int shipGroupIdx = -1;
@@ -3171,13 +3169,13 @@
 
         // add in the new product
         try {
-            ShoppingCartItem item = ShoppingCartItem.makeItem(null, productId, null, quantity.doubleValue(), null, null, null, null, null, null, null, null, prodCatalogId, null, null, null, dispatcher, cart, null, null, null, Boolean.FALSE, Boolean.FALSE);
+            ShoppingCartItem item = ShoppingCartItem.makeItem(null, productId, null, quantity, null, null, null, null, null, null, null, null, prodCatalogId, null, null, null, dispatcher, cart, null, null, null, Boolean.FALSE, Boolean.FALSE);
             if (basePrice != null && overridePrice != null) {
-                item.setBasePrice(basePrice.doubleValue());
+                item.setBasePrice(basePrice);
                 // special hack to make sure we re-calc the promos after a price change
-                item.setQuantity(quantity.doubleValue() + 1, dispatcher, cart, false);
-                item.setQuantity(quantity.doubleValue(), dispatcher, cart, false);
-                item.setBasePrice(basePrice.doubleValue());
+                item.setQuantity(quantity.add(BigDecimal.ONE), dispatcher, cart, false);
+                item.setQuantity(quantity, dispatcher, cart, false);
+                item.setBasePrice(basePrice);
                 item.setIsModifiedPrice(true);
             }
 
@@ -3246,24 +3244,24 @@
         while (i.hasNext()) {
             String key = (String) i.next();
             String quantityStr = (String) itemQtyMap.get(key);
-            double groupQty = 0.0;
+            BigDecimal groupQty = BigDecimal.ZERO;
             try {
-                groupQty = Double.parseDouble(quantityStr);
+                groupQty = new BigDecimal(quantityStr);
             } catch (NumberFormatException e) {
                 Debug.logError(e, module);
                 return ServiceUtil.returnError(e.getMessage());
             }
 
-            if (groupQty == 0) {
+            if (groupQty.compareTo(BigDecimal.ZERO) == 0) {
                 return ServiceUtil.returnError("Quantity must be >0, use cancel item to cancel completely!");
             }
 
             String[] itemInfo = key.split(":");
-            Double tally = (Double) itemTotals.get(itemInfo[0]);
+            BigDecimal tally = (BigDecimal) itemTotals.get(itemInfo[0]);
             if (tally == null) {
-                tally = new Double(groupQty);
+                tally = groupQty;
             } else {
-                tally = new Double(tally.doubleValue() + groupQty);
+                tally = tally.add(groupQty);
             }
             itemTotals.put(itemInfo[0], tally);
         }
@@ -3275,12 +3273,12 @@
             ShoppingCartItem cartItem = cart.findCartItem(itemSeqId);
 
             if (cartItem != null) {
-                Double qty = (Double) itemTotals.get(itemSeqId);
-                double priceSave = cartItem.getBasePrice();
+                BigDecimal qty = (BigDecimal) itemTotals.get(itemSeqId);
+                BigDecimal priceSave = cartItem.getBasePrice();
 
                 // set quantity
                 try {
-                    cartItem.setQuantity(qty.doubleValue(), dispatcher, cart, false, false); // trigger external ops, don't reset ship groups (and update prices for both PO and SO items)
+                    cartItem.setQuantity(qty, dispatcher, cart, false, false); // trigger external ops, don't reset ship groups (and update prices for both PO and SO items)
                 } catch (CartItemModifyException e) {
                     Debug.logError(e, module);
                     return ServiceUtil.returnError(e.getMessage());
@@ -3293,20 +3291,8 @@
                 if (overridePriceMap.containsKey(itemSeqId)) {
                     String priceStr = (String) itemPriceMap.get(itemSeqId);
                     if (UtilValidate.isNotEmpty(priceStr)) {
-                        double price = -1;
-                        //parse the price
-                        NumberFormat nf = null;
-                        if (locale != null) {
-                            nf = NumberFormat.getNumberInstance(locale);
-                        } else {
-                            nf = NumberFormat.getNumberInstance();
-                        }
-                        try {
-                            price = nf.parse(priceStr).doubleValue();
-                        } catch (ParseException e) {
-                            Debug.logError(e, module);
-                            return ServiceUtil.returnError(e.getMessage());
-                        }
+                    	BigDecimal price = new BigDecimal("-1");
+                        price = new BigDecimal(priceStr).setScale(orderDecimals, orderRounding);
                         cartItem.setBasePrice(price);
                         cartItem.setIsModifiedPrice(true);
                         Debug.log("Set item price: [" + itemSeqId + "] " + price, module);
@@ -3334,9 +3320,9 @@
         while (gai.hasNext()) {
             String key = (String) gai.next();
             String quantityStr = (String) itemQtyMap.get(key);
-            double groupQty = 0.0;
+            BigDecimal groupQty = BigDecimal.ZERO;
             try {
-                groupQty = Double.parseDouble(quantityStr);
+                groupQty = new BigDecimal(quantityStr);
             } catch (NumberFormatException e) {
                 Debug.logError(e, module);
                 return ServiceUtil.returnError(e.getMessage());
@@ -3563,11 +3549,11 @@
                 throw new GeneralException(ServiceUtil.getErrorMessage(result));
             }
 
-            Double shippingTotal = (Double) result.get("shippingTotal");
+            BigDecimal shippingTotal = (BigDecimal) result.get("shippingTotal");
             if (shippingTotal == null) {
-                shippingTotal = new Double(0.00);
+                shippingTotal = BigDecimal.ZERO;
             }
-            cart.setItemShipGroupEstimate(shippingTotal.doubleValue(), gi);
+            cart.setItemShipGroupEstimate(shippingTotal, gi);
         }
         
         // calc the sales tax
@@ -3641,8 +3627,8 @@
                     
                     //  Existing order item found. Check for modifications and store if any
                     String oldItemDescription = oldOrderItem.getString("itemDescription") != null ? oldOrderItem.getString("itemDescription") : "";
-                    Double oldQuantity = oldOrderItem.getDouble("quantity") != null ? oldOrderItem.getDouble("quantity") : Double.valueOf(0.00);
-                    Double oldUnitPrice = oldOrderItem.getDouble("unitPrice") != null ? oldOrderItem.getDouble("unitPrice") : Double.valueOf(0.00);
+                    BigDecimal oldQuantity = oldOrderItem.getBigDecimal("quantity") != null ? oldOrderItem.getBigDecimal("quantity") : BigDecimal.ZERO;
+                    BigDecimal oldUnitPrice = oldOrderItem.getBigDecimal("unitPrice") != null ? oldOrderItem.getBigDecimal("unitPrice") : BigDecimal.ZERO;
                     
                     boolean changeFound = false;
                     Map modifiedItem = FastMap.newInstance();
@@ -3651,13 +3637,13 @@
                         changeFound = true;
                     }
                     
-                    Double quantityDif = Double.valueOf(valueObj.getDouble("quantity").doubleValue() - oldQuantity.doubleValue());
-                    Double unitPriceDif = Double.valueOf(valueObj.getDouble("unitPrice").doubleValue() - oldUnitPrice.doubleValue());
-                    if (quantityDif.doubleValue() != 0) {
+                    BigDecimal quantityDif = valueObj.getBigDecimal("quantity").subtract(oldQuantity);
+                    BigDecimal unitPriceDif = valueObj.getBigDecimal("unitPrice").subtract(oldUnitPrice);
+                    if (quantityDif.compareTo(BigDecimal.ZERO) != 0) {
                         modifiedItem.put("quantity", quantityDif);
                         changeFound = true;
                     }
-                    if (unitPriceDif.doubleValue() != 0) {
+                    if (unitPriceDif.compareTo(BigDecimal.ZERO) != 0) {
                         modifiedItem.put("unitPrice", unitPriceDif);
                         changeFound = true;
                     }
@@ -3697,7 +3683,7 @@
 
                     appendedItem.put("orderId", valueObj.getString("orderId"));
                     appendedItem.put("orderItemSeqId", valueObj.getString("orderItemSeqId"));
-                    appendedItem.put("quantity", valueObj.getDouble("quantity"));                    
+                    appendedItem.put("quantity", valueObj.getBigDecimal("quantity"));                    
                     appendedItem.put("changeTypeEnumId", "ODR_ITM_APPEND");                         
                     modifiedItems.add(appendedItem);
                 }
@@ -3793,7 +3779,7 @@
             try {
                 Debug.log("Calling process payments...", module);
                 //Debug.set(Debug.VERBOSE, true);
-                paymentResp = CheckOutHelper.processPayment(orderId, orh.getOrderGrandTotal().doubleValue(), orh.getCurrency(), productStore, userLogin, false, false, dispatcher, delegator);
+                paymentResp = CheckOutHelper.processPayment(orderId, orh.getOrderGrandTotal(), orh.getCurrency(), productStore, userLogin, false, false, dispatcher, delegator);
                 //Debug.set(Debug.VERBOSE, false);
             } catch (GeneralException e) {
                 Debug.logError(e, module);
@@ -3815,8 +3801,8 @@
         Locale locale = (Locale) context.get("locale");
         ShoppingCart cart = new ShoppingCart(dctx.getDelegator(), "9000", "webStore", locale, "USD");
         try {
-            cart.addOrIncreaseItem("GZ-1005", null, 1, null, null, null, null, null, null, null, "DemoCatalog", null, null, null, null, dctx.getDispatcher());
-            } catch (CartItemModifyException e) {
+            cart.addOrIncreaseItem("GZ-1005", null, BigDecimal.ONE, null, null, null, null, null, null, null, "DemoCatalog", null, null, null, null, dctx.getDispatcher());
+        } catch (CartItemModifyException e) {
             Debug.logError(e, module);
         } catch (ItemNotFoundException e) {
             Debug.logError(e, module);
@@ -3884,12 +3870,12 @@
 
             // create the payment
             Map paymentParams = new HashMap();
-            double maxAmount = orderPaymentPreference.getDouble("maxAmount").doubleValue();
+            BigDecimal maxAmount = orderPaymentPreference.getBigDecimal("maxAmount");
             //if (maxAmount > 0.0) {            
                 paymentParams.put("paymentTypeId", "CUSTOMER_PAYMENT");
                 paymentParams.put("paymentMethodTypeId", orderPaymentPreference.getString("paymentMethodTypeId"));
                 paymentParams.put("paymentPreferenceId", orderPaymentPreference.getString("orderPaymentPreferenceId"));
-                paymentParams.put("amount", new Double(maxAmount));
+                paymentParams.put("amount", maxAmount);
                 paymentParams.put("statusId", "PMNT_RECEIVED");
                 paymentParams.put("effectiveDate", UtilDateTime.nowTimestamp());
                 paymentParams.put("partyIdFrom", billToParty.getString("partyId"));
@@ -4192,7 +4178,7 @@
                                 try {
                                     int itemIndex = cart.addOrIncreaseItem(item.getString("productId"),
                                                                            null, // amount
-                                                                           item.getDouble("quantity").doubleValue(),
+                                                                           item.getBigDecimal("quantity"),
                                                                            null, null, null, // reserv
                                                                            item.getTimestamp("shipBeforeDate"),
                                                                            item.getTimestamp("shipAfterDate"),
@@ -4336,18 +4322,18 @@
                 if (! "PRODUCT_ORDER_ITEM".equals(orderItem.getString("orderItemTypeId"))) continue;
                 
                 // Get the cancelled quantity for the item
-                double orderItemCancelQuantity = 0;
+                BigDecimal orderItemCancelQuantity = BigDecimal.ZERO;
                 if (! UtilValidate.isEmpty(orderItem.get("cancelQuantity")) ) {
-                    orderItemCancelQuantity = orderItem.getDouble("cancelQuantity").doubleValue();
+                    orderItemCancelQuantity = orderItem.getBigDecimal("cancelQuantity");
                 }
 
-                if (orderItemCancelQuantity <= 0) continue;
+                if (orderItemCancelQuantity.compareTo(BigDecimal.ZERO) <= 0) continue;
                 
                 String productId = orderItem.getString("productId");
                 if (productRequirementQuantities.containsKey(productId)) {
-                    orderItemCancelQuantity += ((Double) productRequirementQuantities.get(productId)).doubleValue(); 
+                    orderItemCancelQuantity = orderItemCancelQuantity.add((BigDecimal) productRequirementQuantities.get(productId)); 
                 }
-                productRequirementQuantities.put(productId, new Double(orderItemCancelQuantity));
+                productRequirementQuantities.put(productId, orderItemCancelQuantity);
                 
             }
 
@@ -4355,7 +4341,7 @@
             Iterator cqit = productRequirementQuantities.keySet().iterator();
             while (cqit.hasNext()) {
                 String productId = (String) cqit.next();
-                Double requiredQuantity = (Double) productRequirementQuantities.get(productId);
+                BigDecimal requiredQuantity = (BigDecimal) productRequirementQuantities.get(productId);
                 Map createRequirementResult = dispatcher.runSync("createRequirement", UtilMisc.<String, Object>toMap("requirementTypeId", "PRODUCT_REQUIREMENT", "facilityId", facilityId, "productId", productId, "quantity", requiredQuantity, "userLogin", userLogin));
                 if (ServiceUtil.isError(createRequirementResult)) return createRequirementResult;                
             }
@@ -4408,29 +4394,29 @@
                 if (! "PRODUCT_ORDER_ITEM".equals(orderItem.getString("orderItemTypeId"))) continue;
                 
                 // Get the ordered quantity for the item
-                double orderItemQuantity = 0;
+                BigDecimal orderItemQuantity = BigDecimal.ZERO;
                 if (! UtilValidate.isEmpty(orderItem.get("quantity"))) {
-                    orderItemQuantity = orderItem.getDouble("quantity").doubleValue();
+                    orderItemQuantity = orderItem.getBigDecimal("quantity");
                 }
-                double orderItemCancelQuantity = 0;
+                BigDecimal orderItemCancelQuantity = BigDecimal.ZERO;
                 if (! UtilValidate.isEmpty(orderItem.get("cancelQuantity")) ) {
-                    orderItemCancelQuantity = orderItem.getDouble("cancelQuantity").doubleValue();
+                    orderItemCancelQuantity = orderItem.getBigDecimal("cancelQuantity");
                 }
 
                 // Get the received quantity for the order item - ignore the quantityRejected, since rejected items should be reordered
                 List shipmentReceipts = orderItem.getRelated("ShipmentReceipt");
-                double receivedQuantity = 0;
+                BigDecimal receivedQuantity = BigDecimal.ZERO;
                 Iterator srit = shipmentReceipts.iterator();
                 while (srit.hasNext()) {
                     GenericValue shipmentReceipt = (GenericValue) srit.next();
                     if (! UtilValidate.isEmpty(shipmentReceipt.get("quantityAccepted")) ) {
-                        receivedQuantity += shipmentReceipt.getDouble("quantityAccepted").doubleValue();
+                        receivedQuantity = receivedQuantity.add(shipmentReceipt.getBigDecimal("quantityAccepted"));
                     }
                 }
                 
-                double quantityToCancel = orderItemQuantity - orderItemCancelQuantity - receivedQuantity;
-                if (quantityToCancel > 0) {
-                Map cancelOrderItemResult = dispatcher.runSync("cancelOrderItem", UtilMisc.toMap("orderId", orderId, "orderItemSeqId", orderItem.get("orderItemSeqId"), "cancelQuantity", new Double(quantityToCancel), "userLogin", userLogin));
+                BigDecimal quantityToCancel = orderItemQuantity.subtract(orderItemCancelQuantity).subtract(receivedQuantity);
+                if (quantityToCancel.compareTo(BigDecimal.ZERO) > 0) {
+                Map cancelOrderItemResult = dispatcher.runSync("cancelOrderItem", UtilMisc.toMap("orderId", orderId, "orderItemSeqId", orderItem.get("orderItemSeqId"), "cancelQuantity", quantityToCancel, "userLogin", userLogin));
                 if (ServiceUtil.isError(cancelOrderItemResult)) return cancelOrderItemResult;       
                 }
 
@@ -4480,9 +4466,9 @@
         Iterator i = itemMap.keySet().iterator();
         while (i.hasNext()) {
             String item = (String) i.next();
-            Double price = (Double) itemMap.get(item);
+            BigDecimal price = (BigDecimal) itemMap.get(item);
             try {
-                cart.addNonProductItem("BULK_ORDER_ITEM", item, null, price, 1, null, null, null, dispatcher);
+                cart.addNonProductItem("BULK_ORDER_ITEM", item, null, price, BigDecimal.ONE, null, null, null, dispatcher);
             } catch (CartItemModifyException e) {
                 Debug.logError(e, module);
                 return ServiceUtil.returnError(e.getMessage());