You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by si...@apache.org on 2007/01/19 02:59:29 UTC

svn commit: r497680 - /ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java

Author: sichen
Date: Thu Jan 18 17:59:28 2007
New Revision: 497680

URL: http://svn.apache.org/viewvc?view=rev&rev=497680
Log:
Fixed bug where billing account amount wasn't being set properly in ordermgr checkout.

Modified:
    ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java?view=diff&rev=497680&r1=497679&r2=497680
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java Thu Jan 18 17:59:28 2007
@@ -253,17 +253,39 @@
                 // if _NA_ was supplied, erase all billing account data
                 cart.setBillingAccount(null, 0.0);
             }
-            // TODO: the following code needs some review (JAC20061213)
+
             // 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());
-                // make sure we have enough to cover; if this is selected we don't have other payment methods
-                if (cart.getGrandTotal() > accountCredit) {
-                    // if _NA_ was supplied, erase all billing account data
-                    cart.setBillingAccount(null, 0.0);
+                double amountToUse = cart.getBillingAccountAmount();
+
+                // if an amount was entered, check that it doesn't exceed availalble amount
+                if (amountToUse > 0 && amountToUse > accountCredit) {
                     errMsg = UtilProperties.getMessage(resource,"checkhelper.insufficient_credit_available_on_account",
                             (cart != null ? cart.getLocale() : Locale.getDefault()));
                     errorMessages.add(errMsg);
+                } else {
+                    // otherwise use the available account credit (The user might enter 10.00 for an order worth 20.00 from an account with 30.00. This makes sure that the 30.00 is used)
+                    amountToUse = accountCredit;
+                }
+
+                // 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
+                    errMsg = UtilProperties.getMessage(resource,"checkhelper.insufficient_credit_available_on_account",
+                            (cart != null ? cart.getLocale() : Locale.getDefault()));
+                    errorMessages.add(errMsg);
+                } else {
+                    // since this is the only selected payment method, let's make this amount the grand total for convenience
+                    amountToUse = grandTotal;
+                }
+
+                // 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) {
+                    cart.setBillingAccount(billingAccountId, amountToUse);
+                    selectedPaymentMethods.put("EXT_BILLACT", new Double(amountToUse));
                 }
             }