Modified: ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java?rev=721986&r1=721985&r2=721986&view=diff ============================================================================== --- ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java (original) +++ ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java Sun Nov 30 22:51:11 2008 @@ -19,6 +19,7 @@ package org.ofbiz.order.requirement; import java.util.*; +import java.math.BigDecimal; import java.sql.Timestamp; import javolution.util.FastList; @@ -87,8 +88,8 @@ Map productsSold = FastMap.newInstance(); // to count quantity, running total, and distinct products in list - double quantity = 0.0; - double amountTotal = 0.0; + BigDecimal quantity = BigDecimal.ZERO; + BigDecimal amountTotal = BigDecimal.ZERO; Set products = new HashSet(); // time period to count products ordered from, six months ago and the 1st of that month @@ -102,7 +103,7 @@ String productId = requirement.getString("productId"); partyId = requirement.getString("partyId"); String facilityId = requirement.getString("facilityId"); - double requiredQuantity = requirement.getDouble("quantity").doubleValue(); + BigDecimal requiredQuantity = requirement.getBigDecimal("quantity"); // get an available supplier product, preferably the one with the smallest minimum quantity to order, followed by price String supplierKey = partyId + "^" + productId; @@ -124,8 +125,8 @@ // add our supplier product and cost of this line to the data if (supplierProduct != null) { union.putAll(supplierProduct.getAllFields()); - double lastPrice = supplierProduct.getDouble("lastPrice").doubleValue(); - amountTotal += lastPrice * requiredQuantity; + BigDecimal lastPrice = supplierProduct.getBigDecimal("lastPrice"); + amountTotal = amountTotal.add(lastPrice.multiply(requiredQuantity)); } // for good identification, get the UPCA type (UPC code) @@ -154,7 +155,7 @@ } // how many of the products were sold (note this is for a fixed time period across all product stores) - Double sold = (Double) productsSold.get(productId); + BigDecimal sold = (BigDecimal) productsSold.get(productId); if (sold == null) { EntityCondition prodConditions = EntityCondition.makeCondition( UtilMisc.toList( EntityCondition.makeCondition("productId", EntityOperator.EQUALS, productId), @@ -165,7 +166,7 @@ ), EntityOperator.AND); GenericValue count = EntityUtil.getFirst( delegator.findList("OrderItemQuantityReportGroupByProduct", prodConditions, UtilMisc.toSet("quantityOrdered"), null, null, false)); if (count != null) { - sold = count.getDouble("quantityOrdered"); + sold = count.getBigDecimal("quantityOrdered"); if (sold != null) productsSold.put(productId, sold); } } @@ -174,8 +175,8 @@ } // keep a running total of distinct products and quantity to order - if (requirement.getDouble("quantity") == null) requirement.put("quantity", new Double("1")); // default quantity = 1 - quantity += requiredQuantity; + if (requirement.getBigDecimal("quantity") == null) requirement.put("quantity", BigDecimal.ONE); // default quantity = 1 + quantity = quantity.add(requiredQuantity); products.add(productId); // add all the requirement fields last, to overwrite any conflicting fields @@ -186,8 +187,8 @@ Map results = ServiceUtil.returnSuccess(); results.put("requirementsForSupplier", requirements); results.put("distinctProductCount", new Integer(products.size())); - results.put("quantityTotal", new Double(quantity)); - results.put("amountTotal", new Double(amountTotal)); + results.put("quantityTotal", quantity); + results.put("amountTotal", amountTotal); return results; } catch (GenericServiceException e) { Debug.logError(e, module); @@ -216,10 +217,10 @@ if (product == null) continue; if (! "PRODRQM_AUTO".equals(product.get("requirementMethodEnumId"))) continue; - Double quantity = item.getDouble("quantity"); - Double cancelQuantity = item.getDouble("cancelQuantity"); - Double required = new Double( quantity.doubleValue() - (cancelQuantity == null ? 0.0 : cancelQuantity.doubleValue()) ); - if (required.doubleValue() <= 0.0) continue; + BigDecimal quantity = item.getBigDecimal("quantity"); + BigDecimal cancelQuantity = item.getBigDecimal("cancelQuantity"); + BigDecimal required = quantity.subtract(cancelQuantity == null ? BigDecimal.ZERO : cancelQuantity); + if (required.compareTo(BigDecimal.ZERO) <= 0) continue; Map input = UtilMisc.toMap("userLogin", userLogin, "facilityId", facilityId, "productId", product.get("productId"), "quantity", required, "requirementTypeId", "PRODUCT_REQUIREMENT"); Map results = dispatcher.runSync("createRequirement", input); @@ -270,23 +271,23 @@ if (product == null) continue; if (! "PRODRQM_ATP".equals(product.get("requirementMethodEnumId"))) continue; - Double quantity = item.getDouble("quantity"); - Double cancelQuantity = item.getDouble("cancelQuantity"); - double ordered = quantity.doubleValue() - (cancelQuantity == null ? 0.0 : cancelQuantity.doubleValue()); - if (ordered <= 0.0) continue; + BigDecimal quantity = item.getBigDecimal("quantity"); + BigDecimal cancelQuantity = item.getBigDecimal("cancelQuantity"); + BigDecimal ordered = quantity.subtract(cancelQuantity == null ? BigDecimal.ZERO : cancelQuantity); + if (ordered.compareTo(BigDecimal.ZERO) <= 0) continue; // get the minimum stock for this facility (don't do anything if not configured) GenericValue productFacility = delegator.findByPrimaryKey("ProductFacility", UtilMisc.toMap("facilityId", facilityId, "productId", product.get("productId"))); if (productFacility == null || productFacility.get("minimumStock") == null) continue; - double minimumStock = productFacility.getDouble("minimumStock").doubleValue(); + BigDecimal minimumStock = productFacility.getBigDecimal("minimumStock"); // get the facility ATP for product, which should be updated for this item's reservation Map results = dispatcher.runSync("getInventoryAvailableByFacility", UtilMisc.toMap("userLogin", userLogin, "productId", product.get("productId"), "facilityId", facilityId)); if (ServiceUtil.isError(results)) return results; - double atp = ((Double) results.get("availableToPromiseTotal")).doubleValue(); // safe since this is a required OUT param + BigDecimal atp = ((BigDecimal) results.get("availableToPromiseTotal")); // safe since this is a required OUT param // count all current requirements for this product - double pendingRequirements = 0.0; + BigDecimal pendingRequirements = BigDecimal.ZERO; EntityConditionList<EntityExpr> ecl = EntityCondition.makeCondition(UtilMisc.toList( EntityCondition.makeCondition("facilityId", EntityOperator.EQUALS, facilityId), EntityCondition.makeCondition("productId", EntityOperator.EQUALS, product.get("productId")), @@ -297,20 +298,20 @@ List requirements = delegator.findList("Requirement", ecl, null, null, null, false); for (Iterator riter = requirements.iterator(); riter.hasNext(); ) { GenericValue requirement = (GenericValue) riter.next(); - pendingRequirements += (requirement.get("quantity") == null ? 0.0 : requirement.getDouble("quantity").doubleValue()); + pendingRequirements = pendingRequirements.add(requirement.get("quantity") == null ? BigDecimal.ZERO : requirement.getBigDecimal("quantity")); } // the minimum stock is an upper bound, therefore we either require up to the minimum stock or the input required quantity, whichever is less - double shortfall = minimumStock - atp - pendingRequirements; - double required = Math.min(ordered, shortfall); - if (required <= 0.0) continue; + BigDecimal shortfall = minimumStock.subtract(atp).subtract(pendingRequirements); + BigDecimal required = ordered.compareTo(shortfall) < 0 ? ordered : shortfall; + if (required.compareTo(BigDecimal.ZERO) <= 0) continue; - Map input = UtilMisc.toMap("userLogin", userLogin, "facilityId", facilityId, "productId", product.get("productId"), "quantity", new Double(required), "requirementTypeId", "PRODUCT_REQUIREMENT"); + Map input = UtilMisc.toMap("userLogin", userLogin, "facilityId", facilityId, "productId", product.get("productId"), "quantity", required, "requirementTypeId", "PRODUCT_REQUIREMENT"); results = dispatcher.runSync("createRequirement", input); if (ServiceUtil.isError(results)) return results; String requirementId = (String) results.get("requirementId"); - input = UtilMisc.toMap("userLogin", userLogin, "orderId", order.get("orderId"), "orderItemSeqId", item.get("orderItemSeqId"), "requirementId", requirementId, "quantity", new Double(required)); + input = UtilMisc.toMap("userLogin", userLogin, "orderId", order.get("orderId"), "orderItemSeqId", item.get("orderItemSeqId"), "requirementId", requirementId, "quantity", required); results = dispatcher.runSync("createOrderRequirementCommitment", input); if (ServiceUtil.isError(results)) return results; } Modified: ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CartEventListener.java URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CartEventListener.java?rev=721986&r1=721985&r2=721986&view=diff ============================================================================== --- ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CartEventListener.java (original) +++ ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CartEventListener.java Sun Nov 30 22:51:11 2008 @@ -86,17 +86,17 @@ cartAbandonedLine.set("cartAbandonedLineSeqId", (new Integer(seqId)).toString()); cartAbandonedLine.set("productId", cartItem.getProductId()); cartAbandonedLine.set("prodCatalogId", cartItem.getProdCatalogId()); - cartAbandonedLine.set("quantity", new Double(cartItem.getQuantity())); + cartAbandonedLine.set("quantity", cartItem.getQuantity()); cartAbandonedLine.set("reservStart", cartItem.getReservStart()); - cartAbandonedLine.set("reservLength", new Double(cartItem.getReservLength())); - cartAbandonedLine.set("reservPersons", new Double(cartItem.getReservPersons())); - cartAbandonedLine.set("unitPrice", new BigDecimal(cartItem.getBasePrice())); - cartAbandonedLine.set("reserv2ndPPPerc", new Double(cartItem.getReserv2ndPPPerc())); - cartAbandonedLine.set("reservNthPPPerc", new Double(cartItem.getReservNthPPPerc())); + cartAbandonedLine.set("reservLength", cartItem.getReservLength()); + cartAbandonedLine.set("reservPersons", cartItem.getReservPersons()); + cartAbandonedLine.set("unitPrice", cartItem.getBasePrice()); + cartAbandonedLine.set("reserv2ndPPPerc", cartItem.getReserv2ndPPPerc()); + cartAbandonedLine.set("reservNthPPPerc", cartItem.getReservNthPPPerc()); if (cartItem.getConfigWrapper() != null) { cartAbandonedLine.set("configId", cartItem.getConfigWrapper().getConfigId()); } - cartAbandonedLine.set("totalWithAdjustments", new BigDecimal(cartItem.getItemSubTotal())); + cartAbandonedLine.set("totalWithAdjustments", cartItem.getItemSubTotal()); //not doing pre-reservations now, so this is always N cartAbandonedLine.set("wasReserved", "N"); cartAbandonedLine.create(); Modified: ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutEvents.java URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutEvents.java?rev=721986&r1=721985&r2=721986&view=diff ============================================================================== --- ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutEvents.java (original) +++ ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutEvents.java Sun Nov 30 22:51:11 2008 @@ -18,6 +18,7 @@ *******************************************************************************/ package org.ofbiz.order.shoppingcart; +import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.ParseException; import java.util.ArrayList; @@ -168,7 +169,7 @@ String billingAccountId = request.getParameter("billingAccountId"); if (UtilValidate.isNotEmpty(billingAccountId)) { - Double billingAccountAmt = null; + BigDecimal billingAccountAmt = null; billingAccountAmt = determineBillingAccountAmount(billingAccountId, request.getParameter("billingAccountAmount"), dispatcher); if ((billingAccountId != null) && !"_NA_".equals(billingAccountId) && (billingAccountAmt == null)) { request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderInvalidAmountSetForBillingAccount", UtilMisc.toMap("billingAccountId",billingAccountId), (cart != null ? cart.getLocale() : Locale.getDefault()))); @@ -191,7 +192,7 @@ return "error"; } else { String gcPaymentMethodId = (String) gcResult.get("paymentMethodId"); - Double gcAmount = (Double) gcResult.get("amount"); + BigDecimal gcAmount = (BigDecimal) gcResult.get("amount"); if (gcPaymentMethodId != null) { selectedPaymentMethods.put(gcPaymentMethodId, UtilMisc.toMap("amount", gcAmount, "securityCode", null)); if ("Y".equalsIgnoreCase(request.getParameter("singleUseGiftCard"))) { @@ -299,11 +300,11 @@ paymentMethodInfo.put("securityCode", securityCode); } String amountStr = request.getParameter("amount_" + paymentMethods[i]); - Double amount = null; + BigDecimal amount = null; if (amountStr != null && amountStr.length() > 0 && !"REMAINING".equals(amountStr)) { try { - amount = new Double(formatter.parse(amountStr).doubleValue()); - } catch (ParseException e) { + amount = new BigDecimal(amountStr); + } catch (NumberFormatException e) { Debug.logError(e, module); errMsg = UtilProperties.getMessage(resource, "checkevents.invalid_amount_set_for_payment_method", (cart != null ? cart.getLocale() : Locale.getDefault())); request.setAttribute("_ERROR_MESSAGE_", errMsg); @@ -332,7 +333,7 @@ // get the billing account and amount String billingAccountId = request.getParameter("billingAccountId"); if (UtilValidate.isNotEmpty(billingAccountId)) { - Double billingAccountAmt = null; + BigDecimal billingAccountAmt = null; billingAccountAmt = determineBillingAccountAmount(billingAccountId, request.getParameter("billingAccountAmount"), dispatcher); if (billingAccountAmt == null) { request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderInvalidAmountSetForBillingAccount", UtilMisc.toMap("billingAccountId",billingAccountId), (cart != null ? cart.getLocale() : Locale.getDefault()))); @@ -389,7 +390,7 @@ } String gcPaymentMethodId = (String) gcResult.get("paymentMethodId"); - Double gcAmount = (Double) gcResult.get("amount"); + BigDecimal gcAmount = (BigDecimal) gcResult.get("amount"); if (gcPaymentMethodId != null) { selectedPaymentMethods.put(gcPaymentMethodId, UtilMisc.toMap("amount", gcAmount, "securityCode", null)); if ("Y".equalsIgnoreCase(request.getParameter("singleUseGiftCard"))) { @@ -823,7 +824,7 @@ // Set the billing account (if any) String billingAccountId = request.getParameter("billingAccountId"); if (UtilValidate.isNotEmpty(billingAccountId)) { - Double billingAccountAmt = null; + BigDecimal billingAccountAmt = null; billingAccountAmt = determineBillingAccountAmount(billingAccountId, request.getParameter("billingAccountAmount"), dispatcher); if (billingAccountAmt == null) { request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderInvalidAmountSetForBillingAccount", UtilMisc.toMap("billingAccountId",billingAccountId), (cart != null ? cart.getLocale() : Locale.getDefault()))); @@ -853,7 +854,7 @@ ServiceUtil.addErrors(errorMessages, errorMaps, callResult); if (errorMessages.size() == 0 && errorMaps.size() == 0) { String gcPaymentMethodId = (String) callResult.get("paymentMethodId"); - Double giftCardAmount = (Double) callResult.get("amount"); + BigDecimal giftCardAmount = (BigDecimal) callResult.get("amount"); // WARNING: if gcPaymentMethodId is not empty, all the previously set payment methods will be removed Map gcCallRes = checkOutHelper.finalizeOrderEntryPayment(gcPaymentMethodId, giftCardAmount, true, true); ServiceUtil.addErrors(errorMessages, errorMaps, gcCallRes); @@ -1029,8 +1030,8 @@ * * @return Amount to charge billing account or null if there was an error */ - private static Double determineBillingAccountAmount(String billingAccountId, String billingAccountAmount, LocalDispatcher dispatcher) { - Double billingAccountAmt = null; + private static BigDecimal determineBillingAccountAmount(String billingAccountId, String billingAccountAmount, LocalDispatcher dispatcher) { + BigDecimal billingAccountAmt = null; // set the billing account amount to the minimum of billing account available balance or amount input if less than balance if (UtilValidate.isNotEmpty(billingAccountId)) { @@ -1039,28 +1040,28 @@ String currencyFormat = UtilProperties.getPropertyValue("general.properties", "currency.decimal.format", "##0.00"); DecimalFormat formatter = new DecimalFormat(currencyFormat); try { - billingAccountAmt = new Double(formatter.parse(billingAccountAmount).doubleValue()); - } catch (ParseException e) { + billingAccountAmt = new BigDecimal(billingAccountAmount); + } catch (NumberFormatException e) { return null; } } if (billingAccountAmt == null) { - billingAccountAmt = new Double(0.0); + billingAccountAmt = BigDecimal.ZERO; } - double availableBalance = CheckOutHelper.availableAccountBalance(billingAccountId, dispatcher); + BigDecimal availableBalance = CheckOutHelper.availableAccountBalance(billingAccountId, dispatcher); // set amount to be charged to entered amount unless it exceeds the available balance - double chargeAmount = 0; - if (billingAccountAmt.doubleValue() < availableBalance) { - chargeAmount = billingAccountAmt.doubleValue(); + BigDecimal chargeAmount = BigDecimal.ZERO; + if (billingAccountAmt.compareTo(availableBalance) < 0) { + chargeAmount = billingAccountAmt; } else { chargeAmount = availableBalance; } - if (chargeAmount < 0.0) { - chargeAmount = 0.0; + if (chargeAmount.compareTo(BigDecimal.ZERO) < 0.0) { + chargeAmount = BigDecimal.ZERO; } - return new Double(chargeAmount); + return chargeAmount; } else { return null; } Modified: ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java?rev=721986&r1=721985&r2=721986&view=diff ============================================================================== --- ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java (original) +++ ofbiz/branches/typecheckcleanup200810/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java Sun Nov 30 22:51:11 2008 @@ -38,6 +38,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; @@ -70,6 +71,9 @@ public static final String resource = "OrderUiLabels"; public static final String resource_error = "OrderErrorUiLabels"; + public static final int scale = UtilNumber.getBigDecimalScale("order.decimals"); + public static final int rounding = UtilNumber.getBigDecimalRoundingMode("order.rounding"); + protected LocalDispatcher dispatcher = null; protected GenericDelegator delegator = null; protected ShoppingCart cart = null; @@ -252,9 +256,9 @@ if (UtilValidate.isNotEmpty(billingAccountId)) { Map billingAccountMap = (Map)selectedPaymentMethods.get("EXT_BILLACT"); - Double billingAccountAmt = (Double)billingAccountMap.get("amount"); + BigDecimal billingAccountAmt = (BigDecimal)billingAccountMap.get("amount"); // set cart billing account data and generate a payment method containing the amount we will be charging - cart.setBillingAccount(billingAccountId, (billingAccountAmt != null? billingAccountAmt.doubleValue(): 0.0)); + cart.setBillingAccount(billingAccountId, (billingAccountAmt != null ? billingAccountAmt: BigDecimal.ZERO)); // copy the billing account terms as order terms try { List billingAccountTerms = delegator.findByAnd("BillingAccountTerm", UtilMisc.toMap("billingAccountId", billingAccountId)); @@ -264,7 +268,7 @@ GenericValue billingAccountTerm = (GenericValue)billingAccountTermsIt.next(); // the term is not copied if in the cart a term of the same type is already set if (!cart.hasOrderTerm(billingAccountTerm.getString("termTypeId"))) { - cart.addOrderTerm(billingAccountTerm.getString("termTypeId"), billingAccountTerm.getDouble("termValue"), billingAccountTerm.getLong("termDays")); + cart.addOrderTerm(billingAccountTerm.getString("termTypeId"), billingAccountTerm.getBigDecimal("termValue"), billingAccountTerm.getLong("termDays")); } } } @@ -273,16 +277,16 @@ } } else { // remove the billing account from the cart - cart.setBillingAccount(null, 0.0); + cart.setBillingAccount(null, BigDecimal.ZERO); } // if checkoutPaymentId == EXT_BILLACT, then we have billing account only, so make sure we have enough credit if (selectedPaymentMethods.containsKey("EXT_BILLACT") && selectedPaymentMethods.size() == 1) { - double accountCredit = this.availableAccountBalance(cart.getBillingAccountId()); - double amountToUse = cart.getBillingAccountAmount(); + BigDecimal accountCredit = this.availableAccountBalance(cart.getBillingAccountId()); + BigDecimal amountToUse = cart.getBillingAccountAmount(); // if an amount was entered, check that it doesn't exceed availalble amount - if (amountToUse > 0 && amountToUse > accountCredit) { + if (amountToUse.compareTo(BigDecimal.ZERO) > 0 && amountToUse.compareTo(accountCredit) > 0) { errMsg = UtilProperties.getMessage(resource,"checkhelper.insufficient_credit_available_on_account", (cart != null ? cart.getLocale() : Locale.getDefault())); errorMessages.add(errMsg); @@ -292,9 +296,9 @@ } // check that the amount to use is enough to fulfill the order - double grandTotal = cart.getGrandTotal(); - if (grandTotal > amountToUse) { - cart.setBillingAccount(null, 0.0); // erase existing billing account data + BigDecimal grandTotal = cart.getGrandTotal(); + if (grandTotal.compareTo(amountToUse) > 0) { + cart.setBillingAccount(null, BigDecimal.ZERO); // erase existing billing account data errMsg = UtilProperties.getMessage(resource,"checkhelper.insufficient_credit_available_on_account", (cart != null ? cart.getLocale() : Locale.getDefault())); errorMessages.add(errMsg); @@ -305,9 +309,9 @@ // associate the cart billing account amount and EXT_BILLACT selected payment method with whatever amount we have now // XXX: Note that this step is critical for the billing account to be charged correctly - if (amountToUse > 0) { + if (amountToUse.compareTo(BigDecimal.ZERO) > 0) { cart.setBillingAccount(billingAccountId, amountToUse); - selectedPaymentMethods.put("EXT_BILLACT", UtilMisc.toMap("amount", new Double(amountToUse), "securityCode", null)); + selectedPaymentMethods.put("EXT_BILLACT", UtilMisc.toMap("amount", amountToUse, "securityCode", null)); } } @@ -328,11 +332,11 @@ } // get the selected amount to use - Double paymentAmount = null; + BigDecimal paymentAmount = null; String securityCode = null; if (selectedPaymentMethods.get(checkOutPaymentId) != null) { Map checkOutPaymentInfo = (Map) selectedPaymentMethods.get(checkOutPaymentId); - paymentAmount = (Double) checkOutPaymentInfo.get("amount"); + paymentAmount = (BigDecimal) checkOutPaymentInfo.get("amount"); securityCode = (String) checkOutPaymentInfo.get("securityCode"); } @@ -345,7 +349,7 @@ inf.securityCode = securityCode; } } - } else if (cart.getGrandTotal() != 0.00) { + } else if (cart.getGrandTotal().compareTo(BigDecimal.ZERO) != 0) { // only return an error if the order total is not 0.00 errMsg = UtilProperties.getMessage(resource,"checkhelper.select_method_of_payment", (cart != null ? cart.getLocale() : Locale.getDefault())); @@ -398,11 +402,11 @@ // Recalc shipping costs before setting payment Map shipEstimateMap = ShippingEvents.getShipGroupEstimate(dispatcher, delegator, cart, 0); - Double shippingTotal = (Double) shipEstimateMap.get("shippingTotal"); + BigDecimal shippingTotal = (BigDecimal) shipEstimateMap.get("shippingTotal"); if (shippingTotal == null) { - shippingTotal = new Double(0.00); + shippingTotal = BigDecimal.ZERO; } - cart.setItemShipGroupEstimate(shippingTotal.doubleValue(), 0); + cart.setItemShipGroupEstimate(shippingTotal, 0); //Recalc tax before setting payment try { @@ -439,7 +443,7 @@ String gcNum = (String) params.get("giftCardNumber"); String gcPin = (String) params.get("giftCardPin"); String gcAmt = (String) params.get("giftCardAmount"); - double gcAmount = -1; + BigDecimal gcAmount = BigDecimal.ONE.negate(); boolean gcFieldsOkay = true; if (gcNum == null || gcNum.length() == 0) { @@ -489,7 +493,7 @@ } if (gcAmt != null && gcAmt.length() > 0) { try { - gcAmount = Double.parseDouble(gcAmt); + gcAmount = new BigDecimal(gcAmt); } catch (NumberFormatException e) { Debug.logError(e, module); errMsg = UtilProperties.getMessage(resource,"checkhelper.invalid_amount_for_gift_card", (cart != null ? cart.getLocale() : Locale.getDefault())); @@ -519,9 +523,9 @@ if (errorMessages.size() == 0 && errorMaps.size() == 0) { // set the GC payment method - Double giftCardAmount = null; - if (gcAmount > 0) { - giftCardAmount = new Double(gcAmount); + BigDecimal giftCardAmount = null; + if (gcAmount.compareTo(BigDecimal.ZERO) > 0) { + giftCardAmount = gcAmount; } String gcPaymentMethodId = (String) gcResult.get("paymentMethodId"); result = ServiceUtil.returnSuccess(); @@ -563,12 +567,7 @@ String orderId = this.cart.getOrderId(); this.cart.clearAllItemStatus(); - // format the grandTotal - String currencyFormat = UtilProperties.getPropertyValue("general.properties", "currency.decimal.format", "##0.00"); - DecimalFormat formatter = new DecimalFormat(currencyFormat); - double cartTotal = this.cart.getGrandTotal(); - String grandTotalString = formatter.format(cartTotal); - BigDecimal grandTotal = new BigDecimal(grandTotalString); + BigDecimal grandTotal = this.cart.getGrandTotal(); // store the order - build the context Map context = this.cart.makeCartMap(this.dispatcher, areOrderItemsExploded); @@ -639,7 +638,7 @@ inputMap.put("facilityId", productStore.getString("inventoryFacilityId")); inputMap.put("orderId", orderId); inputMap.put("orderItemSeqId", orderItem.getString("orderItemSeqId")); - inputMap.put("quantity", orderItem.getDouble("quantity")); + inputMap.put("quantity", orderItem.getBigDecimal("quantity")); inputMap.put("userLogin", permUserLogin); Map prunResult = dispatcher.runSync("createProductionRunFromConfiguration", inputMap); @@ -752,7 +751,6 @@ int shipGroups = this.cart.getShipGroupSize(); for (int i = 0; i < shipGroups; i++) { Map serviceContext = this.makeTaxContext(i, shipAddress); - // pass in BigDecimal values instead of Double List taxReturn = this.getTaxAdjustments(dispatcher, "calcTax", serviceContext); if (Debug.verboseOn()) Debug.logVerbose("ReturnList: " + taxReturn, module); @@ -800,8 +798,8 @@ //Debug.logInfo("In makeTaxContext for item [" + i + "] in ship group [" + shipGroup + "] got itemInfo: " + itemInfo, module); product.add(i, cartItem.getProduct()); - amount.add(i, new BigDecimal(cartItem.getItemSubTotal(itemInfo.quantity))); - price.add(i, new BigDecimal(cartItem.getBasePrice())); + amount.add(i, cartItem.getItemSubTotal(itemInfo.quantity)); + price.add(i, cartItem.getBasePrice()); shipAmt.add(i, BigDecimal.ZERO); // no per item shipping yet } @@ -809,7 +807,7 @@ List allAdjustments = cart.getAdjustments(); BigDecimal orderPromoAmt = OrderReadHelper.calcOrderPromoAdjustmentsBd(allAdjustments); - BigDecimal shipAmount = new BigDecimal(csi.shipEstimate); + BigDecimal shipAmount = csi.shipEstimate; if (shipAddress == null) { shipAddress = cart.getShippingAddress(shipGroup); // Debug.logInfo("====== makeTaxContext set shipAddress to cart.getShippingAddress(shipGroup): " + shipAddress, module); @@ -875,7 +873,7 @@ return CheckOutHelper.processPayment(this.cart.getOrderId(), this.cart.getGrandTotal(), this.cart.getCurrency(), productStore, userLogin, faceToFace, manualHold, dispatcher, delegator); } - public static Map processPayment(String orderId, double orderTotal, String currencyUomId, GenericValue productStore, GenericValue userLogin, boolean faceToFace, boolean manualHold, LocalDispatcher dispatcher, GenericDelegator delegator) throws GeneralException { + public static Map processPayment(String orderId, BigDecimal orderTotal, String currencyUomId, GenericValue productStore, GenericValue userLogin, boolean faceToFace, boolean manualHold, LocalDispatcher dispatcher, GenericDelegator delegator) throws GeneralException { // Get some payment related strings String DECLINE_MESSAGE = productStore.getString("authDeclinedMessage"); String ERROR_MESSAGE = productStore.getString("authErrorMessage"); @@ -907,7 +905,7 @@ if (opp.get("paymentMethodId") == null) { authCtx.put("serviceTypeEnum", "PRDS_PAY_EXTERNAL"); } - authCtx.put("processAmount", opp.getDouble("maxAmount")); + authCtx.put("processAmount", opp.getBigDecimal("maxAmount")); authCtx.put("authRefNum", opp.getString("manualRefNum")); authCtx.put("authResult", Boolean.TRUE); authCtx.put("userLogin", userLogin); @@ -929,7 +927,7 @@ } captCtx.put("payToPartyId", productStore.get("payToPartyId")); captCtx.put("captureResult", Boolean.TRUE); - captCtx.put("captureAmount", opp.getDouble("maxAmount")); + captCtx.put("captureAmount", opp.getBigDecimal("maxAmount")); captCtx.put("captureRefNum", opp.getString("manualRefNum")); captCtx.put("userLogin", userLogin); captCtx.put("currencyUomId", currencyUomId); @@ -950,7 +948,7 @@ // Invoke payment processing. if (UtilValidate.isNotEmpty(onlinePaymentPrefs)) { boolean autoApproveOrder = UtilValidate.isEmpty(productStore.get("autoApproveOrder")) || "Y".equalsIgnoreCase(productStore.getString("autoApproveOrder")); - if (orderTotal == 0 && autoApproveOrder) { + if (orderTotal.compareTo(BigDecimal.ZERO) == 0 && autoApproveOrder) { // if there is nothing to authorize; don't bother boolean ok = OrderChangeHelper.approveOrder(dispatcher, userLogin, orderId, manualHold); if (!ok) { @@ -1086,49 +1084,20 @@ return ServiceUtil.returnSuccess(); } - public static void adjustFaceToFacePayment(String orderId, double cartTotal, List allPaymentPrefs, GenericValue userLogin, GenericDelegator delegator) throws GeneralException { - String currencyFormat = UtilProperties.getPropertyValue("general.properties", "currency.decimal.format", "##0.00"); - DecimalFormat formatter = new DecimalFormat(currencyFormat); - - String grandTotalString = formatter.format(cartTotal); - Double grandTotal = null; - try { - grandTotal = new Double(formatter.parse(grandTotalString).doubleValue()); - } catch (ParseException e) { - throw new GeneralException("Problem getting parsed currency amount from DecimalFormat", e); - } - - double prefTotal = 0.00; + public static void adjustFaceToFacePayment(String orderId, BigDecimal cartTotal, List allPaymentPrefs, GenericValue userLogin, GenericDelegator delegator) throws GeneralException { + BigDecimal prefTotal = BigDecimal.ZERO; if (allPaymentPrefs != null) { Iterator i = allPaymentPrefs.iterator(); while (i.hasNext()) { GenericValue pref = (GenericValue) i.next(); - Double maxAmount = pref.getDouble("maxAmount"); - if (maxAmount == null) maxAmount = new Double(0.00); - prefTotal += maxAmount.doubleValue(); + BigDecimal maxAmount = pref.getBigDecimal("maxAmount"); + if (maxAmount == null) maxAmount = BigDecimal.ZERO; + prefTotal = prefTotal.add(maxAmount); } } - String payTotalString = formatter.format(prefTotal); - Double payTotal = null; - try { - payTotal = new Double(formatter.parse(payTotalString).doubleValue()); - } catch (ParseException e) { - throw new GeneralException("Problem getting parsed currency amount from DecimalFormat", e); - } - - if (grandTotal == null) grandTotal = new Double(0.00); - if (payTotal == null) payTotal = new Double(0.00); - - if (payTotal.doubleValue() > grandTotal.doubleValue()) { - double diff = (payTotal.doubleValue() - grandTotal.doubleValue()) * -1; - String diffString = formatter.format(diff); - Double change = null; - try { - change = new Double(formatter.parse(diffString).doubleValue()); - } catch (ParseException e) { - throw new GeneralException("Problem getting parsed currency amount from DecimalFormat", e); - } + if (prefTotal.compareTo(cartTotal) > 0) { + BigDecimal change = prefTotal.subtract(cartTotal).negate(); GenericValue newPref = delegator.makeValue("OrderPaymentPreference"); newPref.set("orderId", orderId); newPref.set("paymentMethodTypeId", "CASH"); @@ -1405,7 +1374,7 @@ * @return A Map conforming to the OFBiz Service conventions containing * any error messages. */ - public Map finalizeOrderEntryPayment(String checkOutPaymentId, Double amount, boolean singleUse, boolean append) { + public Map finalizeOrderEntryPayment(String checkOutPaymentId, BigDecimal amount, boolean singleUse, boolean append) { Map result = ServiceUtil.returnSuccess(); if (UtilValidate.isNotEmpty(checkOutPaymentId)) { @@ -1418,21 +1387,21 @@ return result; } - public static double availableAccountBalance(String billingAccountId, LocalDispatcher dispatcher) { - if (billingAccountId == null) return 0.0; + public static BigDecimal availableAccountBalance(String billingAccountId, LocalDispatcher dispatcher) { + if (billingAccountId == null) return BigDecimal.ZERO; try { Map res = dispatcher.runSync("calcBillingAccountBalance", UtilMisc.toMap("billingAccountId", billingAccountId)); - Double availableBalance = (Double) res.get("accountBalance"); + BigDecimal availableBalance = (BigDecimal) res.get("accountBalance"); if (availableBalance != null) { - return availableBalance.doubleValue(); + return availableBalance; } } catch (GenericServiceException e) { Debug.logError(e, module); } - return 0.0; + return BigDecimal.ZERO; } - public double availableAccountBalance(String billingAccountId) { + public BigDecimal availableAccountBalance(String billingAccountId) { return availableAccountBalance(billingAccountId, dispatcher); } @@ -1443,7 +1412,7 @@ while (i.hasNext()) { GenericValue pp = (GenericValue) i.next(); if (pp.get("billingAccountId") != null) { - accountMap.put(pp.getString("billingAccountId"), pp.getDouble("maxAmount")); + accountMap.put(pp.getString("billingAccountId"), pp.getBigDecimal("maxAmount")); } } } @@ -1453,9 +1422,9 @@ public Map validatePaymentMethods() { String errMsg = null; String billingAccountId = cart.getBillingAccountId(); - double billingAccountAmt = cart.getBillingAccountAmount(); - double availableAmount = this.availableAccountBalance(billingAccountId); - if (billingAccountAmt > availableAmount) { + BigDecimal billingAccountAmt = cart.getBillingAccountAmount(); + BigDecimal availableAmount = this.availableAccountBalance(billingAccountId); + if (billingAccountAmt.compareTo(availableAmount) > 0) { Map messageMap = UtilMisc.toMap("billingAccountId", billingAccountId); errMsg = UtilProperties.getMessage(resource, "checkevents.not_enough_available_on_account", messageMap, (cart != null ? cart.getLocale() : Locale.getDefault())); return ServiceUtil.returnError(errMsg); @@ -1465,7 +1434,7 @@ List paymentMethods = cart.getPaymentMethodIds(); List paymentTypes = cart.getPaymentMethodTypeIds(); if (paymentTypes.contains("EXT_BILLACT") && paymentTypes.size() == 1 && paymentMethods.size() == 0) { - if (cart.getGrandTotal() > availableAmount) { + if (cart.getGrandTotal().compareTo(availableAmount) > 0) { errMsg = UtilProperties.getMessage(resource, "checkevents.insufficient_credit_available_on_account", (cart != null ? cart.getLocale() : Locale.getDefault())); return ServiceUtil.returnError(errMsg); } @@ -1474,17 +1443,14 @@ // validate any gift card balances this.validateGiftCardAmounts(); - String currencyFormat = UtilProperties.getPropertyValue("general.properties", "currency.decimal.format", "##0.00"); - DecimalFormat formatter = new DecimalFormat(currencyFormat); - // update the selected payment methods amount with valid numbers if (paymentMethods != null) { List nullPaymentIds = new ArrayList(); Iterator i = paymentMethods.iterator(); while (i.hasNext()) { String paymentMethodId = (String) i.next(); - Double paymentAmount = cart.getPaymentAmount(paymentMethodId); - if (paymentAmount == null || paymentAmount.doubleValue() == 0) { + BigDecimal paymentAmount = cart.getPaymentAmount(paymentMethodId); + if (paymentAmount == null || paymentAmount.compareTo(BigDecimal.ZERO) == 0) { Debug.log("Found null paymentMethodId - " + paymentMethodId, module); nullPaymentIds.add(paymentMethodId); } @@ -1492,26 +1458,19 @@ Iterator npi = nullPaymentIds.iterator(); while (npi.hasNext()) { String paymentMethodId = (String) npi.next(); - double selectedPaymentTotal = cart.getPaymentTotal(); - double requiredAmount = cart.getGrandTotal(); - double nullAmount = requiredAmount - selectedPaymentTotal; + BigDecimal selectedPaymentTotal = cart.getPaymentTotal(); + BigDecimal requiredAmount = cart.getGrandTotal(); + BigDecimal newAmount = requiredAmount.subtract(selectedPaymentTotal); boolean setOverflow = false; ShoppingCart.CartPaymentInfo info = cart.getPaymentInfo(paymentMethodId); - String amountString = formatter.format(nullAmount); - double newAmount = 0; - try { - newAmount = formatter.parse(amountString).doubleValue(); - } catch (ParseException e) { - Debug.logError(e, "Problem getting parsed new amount; unable to update payment info!", module); - } Debug.log("Remaining total is - " + newAmount, module); - if (newAmount > 0) { - info.amount = new Double(newAmount); + if (newAmount.compareTo(BigDecimal.ZERO) > 0) { + info.amount = newAmount; Debug.log("Set null paymentMethodId - " + info.paymentMethodId + " / " + info.amount, module); } else { - info.amount = new Double(0); + info.amount = BigDecimal.ZERO; Debug.log("Set null paymentMethodId - " + info.paymentMethodId + " / " + info.amount, module); } if (!setOverflow) { @@ -1522,24 +1481,17 @@ } // verify the selected payment method amounts will cover the total - double reqAmtPreParse = cart.getGrandTotal() - cart.getBillingAccountAmount(); - double selectedPaymentTotal = cart.getPaymentTotal(); + BigDecimal reqAmtPreParse = cart.getGrandTotal().subtract(cart.getBillingAccountAmount()); + BigDecimal selectedPaymentTotal = cart.getPaymentTotal(); - String preParseString = formatter.format(reqAmtPreParse); - double requiredAmount = 0; - try { - requiredAmount = formatter.parse(preParseString).doubleValue(); - } catch (ParseException e) { - requiredAmount = reqAmtPreParse; - Debug.logError(e, "Problem getting parsed required amount; unable to update payment info!", module); - } - if (paymentMethods != null && paymentMethods.size() > 0 && requiredAmount > selectedPaymentTotal) { + BigDecimal requiredAmount = reqAmtPreParse.setScale(scale, rounding); + if (paymentMethods != null && paymentMethods.size() > 0 && requiredAmount.compareTo(selectedPaymentTotal) > 0) { Debug.logError("Required Amount : " + requiredAmount + " / Selected Amount : " + selectedPaymentTotal, module); errMsg = UtilProperties.getMessage(resource, "checkevents.payment_not_cover_this_order", (cart != null ? cart.getLocale() : Locale.getDefault())); return ServiceUtil.returnError(errMsg); } - if (paymentMethods != null && paymentMethods.size() > 0 && requiredAmount < selectedPaymentTotal) { - double changeAmount = selectedPaymentTotal - requiredAmount; + if (paymentMethods != null && paymentMethods.size() > 0 && requiredAmount.compareTo(selectedPaymentTotal) < 0) { + BigDecimal changeAmount = selectedPaymentTotal.subtract(requiredAmount); if (!paymentTypes.contains("CASH")){ Debug.logError("Change Amount : " + changeAmount + " / No cash.", module); errMsg = UtilProperties.getMessage(resource, "checkhelper.change_returned_cannot_be_greater_than_cash", (cart != null ? cart.getLocale() : Locale.getDefault())); @@ -1547,8 +1499,8 @@ }else{ int cashIndex = paymentTypes.indexOf("CASH"); String cashId = (String) paymentTypes.get(cashIndex); - double cashAmount = cart.getPaymentAmount(cashId); - if (cashAmount < changeAmount){ + BigDecimal cashAmount = cart.getPaymentAmount(cashId); + if (cashAmount.compareTo(changeAmount) < 0){ Debug.logError("Change Amount : " + changeAmount + " / Cash Amount : " + cashAmount, module); errMsg = UtilProperties.getMessage(resource, "checkhelper.change_returned_cannot_be_greater_than_cash", (cart != null ? cart.getLocale() : Locale.getDefault())); return ServiceUtil.returnError(errMsg); @@ -1575,7 +1527,7 @@ while (i.hasNext()) { GenericValue gc = (GenericValue) i.next(); Map gcBalanceMap = null; - double gcBalance = 0.00; + BigDecimal gcBalance = BigDecimal.ZERO; try { Map ctx = UtilMisc.toMap("userLogin", cart.getUserLogin()); ctx.put("currency", cart.getCurrency()); @@ -1596,18 +1548,18 @@ Debug.logError(e, module); } if (gcBalanceMap != null) { - Double bal = (Double) gcBalanceMap.get(balanceField); + BigDecimal bal = (BigDecimal) gcBalanceMap.get(balanceField); if (bal != null) { - gcBalance = bal.doubleValue(); + gcBalance = bal; } } // get the bill-up to amount - Double billUpTo = cart.getPaymentAmount(gc.getString("paymentMethodId")); + BigDecimal billUpTo = cart.getPaymentAmount(gc.getString("paymentMethodId")); // null bill-up to means use the full balance || update the bill-up to with the balance - if (billUpTo == null || billUpTo.doubleValue() == 0 || gcBalance < billUpTo.doubleValue()) { - cart.addPaymentAmount(gc.getString("paymentMethodId"), new Double(gcBalance)); + if (billUpTo == null || billUpTo.compareTo(BigDecimal.ZERO) == 0 || gcBalance.compareTo(billUpTo) < 0) { + cart.addPaymentAmount(gc.getString("paymentMethodId"), gcBalance); } } } |
Free forum by Nabble | Edit this page |