Author: lektran
Date: Fri Jul 6 22:30:58 2007 New Revision: 554136 URL: http://svn.apache.org/viewvc?view=rev&rev=554136 Log: Applied fix from trunk for revision: 543923 Modified: ofbiz/branches/release4.0/applications/accounting/servicedef/services_paymentmethod.xml ofbiz/branches/release4.0/applications/accounting/src/org/ofbiz/accounting/payment/BillingAccountWorker.java ofbiz/branches/release4.0/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java ofbiz/branches/release4.0/applications/accounting/widget/BillingAccountForms.xml ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java ofbiz/branches/release4.0/applications/order/webapp/ordermgr/entry/billsettings.ftl Modified: ofbiz/branches/release4.0/applications/accounting/servicedef/services_paymentmethod.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/applications/accounting/servicedef/services_paymentmethod.xml?view=diff&rev=554136&r1=554135&r2=554136 ============================================================================== --- ofbiz/branches/release4.0/applications/accounting/servicedef/services_paymentmethod.xml (original) +++ ofbiz/branches/release4.0/applications/accounting/servicedef/services_paymentmethod.xml Fri Jul 6 22:30:58 2007 @@ -275,6 +275,7 @@ <attribute name="processResult" type="String" mode="OUT" optional="false"/> </service> + <!-- deprecated in favour of captureBillingAccountPayments --> <service name="captureBillingAccountPayment" engine="java" location="org.ofbiz.accounting.payment.PaymentGatewayServices" invoke="captureBillingAccountPayment" auth="true"> <description>Records a settlement or payment of an invoice by a billing account for the given captureAmount</description> @@ -284,6 +285,14 @@ <attribute name="orderId" type="String" mode="IN" optional="true"/> <attribute name="paymentId" type="String" mode="OUT" optional="false"/> <attribute name="paymentGatewayResponseId" type="String" mode="OUT" optional="true"/> + </service> + <service name="captureBillingAccountPayments" engine="java" + location="org.ofbiz.accounting.payment.PaymentGatewayServices" invoke="captureBillingAccountPayments" auth="true"> + <description>Applies (part of) the unapplied payment applications associated to the billing account to the given invoice.</description> + <attribute name="billingAccountId" type="String" mode="IN" optional="false"/> + <attribute name="invoiceId" type="String" mode="IN" optional="false"/> + <attribute name="captureAmount" type="Double" mode="INOUT" optional="false"/> + <attribute name="orderId" type="String" mode="IN" optional="true"/> </service> <service name="processCaptureSplitPayment" engine="java" require-new-transaction="true" Modified: ofbiz/branches/release4.0/applications/accounting/src/org/ofbiz/accounting/payment/BillingAccountWorker.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/applications/accounting/src/org/ofbiz/accounting/payment/BillingAccountWorker.java?view=diff&rev=554136&r1=554135&r2=554136 ============================================================================== --- ofbiz/branches/release4.0/applications/accounting/src/org/ofbiz/accounting/payment/BillingAccountWorker.java (original) +++ ofbiz/branches/release4.0/applications/accounting/src/org/ofbiz/accounting/payment/BillingAccountWorker.java Fri Jul 6 22:30:58 2007 @@ -32,6 +32,7 @@ import org.ofbiz.base.util.UtilDateTime; import org.ofbiz.base.util.UtilMisc; import org.ofbiz.base.util.UtilNumber; +import org.ofbiz.base.util.UtilValidate; import org.ofbiz.entity.GenericDelegator; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.GenericValue; @@ -123,15 +124,59 @@ } /** - * Calculates the "available" balance of a billing account, which is net balance minus amount of pending (not canceled, rejected, or completed) orders. - * Available balance will not exceed billing account's accountLimit. - * When looking at using a billing account for a new order, you should use this method. - * @param delegator + * Calculates the "available" balance of a billing account, which is the + * net balance minus amount of pending (not cancelled, rejected, or received) order payments. + * When looking at using a billing account for a new order, you should use this method. * @param billingAccountId + * @param delegator * @return * @throws GenericEntityException */ + public static BigDecimal getBillingAccountBalance(GenericDelegator delegator, String billingAccountId) throws GenericEntityException { + GenericValue billingAccount = delegator.findByPrimaryKey("BillingAccount", UtilMisc.toMap("billingAccountId", billingAccountId)); + return getBillingAccountBalance(billingAccount); + } + public static BigDecimal getBillingAccountBalance(GenericValue billingAccount) throws GenericEntityException { + + GenericDelegator delegator = billingAccount.getDelegator(); + String billingAccountId = billingAccount.getString("billingAccountId"); + + BigDecimal balance = ZERO; + BigDecimal accountLimit = getAccountLimit(billingAccount); + balance = balance.add(accountLimit); + // pending (not cancelled, rejected, or received) order payments + EntityConditionList whereConditions = new EntityConditionList(UtilMisc.toList( + new EntityExpr("billingAccountId", EntityOperator.EQUALS, billingAccountId), + new EntityExpr("paymentMethodTypeId", EntityOperator.EQUALS, "EXT_BILLACT"), + new EntityExpr("statusId", EntityOperator.NOT_IN, UtilMisc.toList("ORDER_CANCELLED", "ORDER_REJECTED")), + new EntityExpr("preferenceStatusId", EntityOperator.NOT_IN, UtilMisc.toList("PAYMENT_SETTLED", "PAYMENT_RECEIVED", "PAYMENT_DECLINED", "PAYMENT_CANCELLED")) // PAYMENT_NOT_AUTH + ), EntityOperator.AND); + + GenericValue orderPaymentPreferenceSum = EntityUtil.getFirst(delegator.findByCondition("OrderPurchasePaymentSummary", whereConditions, null, UtilMisc.toList("maxAmount"), null, null)); + BigDecimal ordersTotal = null; + if (UtilValidate.isNotEmpty(orderPaymentPreferenceSum)) { + ordersTotal = orderPaymentPreferenceSum.getBigDecimal("maxAmount"); + } else { + ordersTotal = ZERO; + } + balance = balance.subtract(ordersTotal); + + List paymentAppls = delegator.findByAnd("PaymentApplication", UtilMisc.toMap("billingAccountId", billingAccountId)); + // TODO: cancelled payments? + if (paymentAppls != null) { + for (Iterator pAi = paymentAppls.iterator(); pAi.hasNext(); ) { + GenericValue paymentAppl = (GenericValue) pAi.next(); + if (paymentAppl.getString("invoiceId") == null) { + BigDecimal amountApplied = paymentAppl.getBigDecimal("amountApplied"); + balance = balance.add(amountApplied); + } + } + } + + balance = balance.setScale(decimals, rounding); + return balance; + /* GenericDelegator delegator = billingAccount.getDelegator(); String billingAccountId = billingAccount.getString("billingAccountId"); @@ -160,6 +205,7 @@ balance = balance.setScale(decimals, rounding); } return balance; + */ } /** @@ -172,11 +218,6 @@ new EntityExpr("statusId", EntityOperator.NOT_EQUAL, "ORDER_CANCELLED"), new EntityExpr("statusId", EntityOperator.NOT_EQUAL, "ORDER_COMPLETED"))); } - - public static BigDecimal getBillingAccountBalance(GenericDelegator delegator, String billingAccountId) throws GenericEntityException { - GenericValue billingAccount = delegator.findByPrimaryKey("BillingAccount", UtilMisc.toMap("billingAccountId", billingAccountId)); - return getBillingAccountBalance(billingAccount); - } /** * Returns the amount which could be charged to a billing account, which is defined as the accountLimit minus account balance and minus the balance of outstanding orders Modified: ofbiz/branches/release4.0/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java?view=diff&rev=554136&r1=554135&r2=554136 ============================================================================== --- ofbiz/branches/release4.0/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java (original) +++ ofbiz/branches/release4.0/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java Fri Jul 6 22:30:58 2007 @@ -34,6 +34,7 @@ import org.ofbiz.base.util.UtilProperties; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.entity.GenericDelegator; +import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.GenericValue; import org.ofbiz.entity.condition.EntityCondition; @@ -968,7 +969,7 @@ } // get the invoice amount (amount to bill) - double invoiceTotal = InvoiceWorker.getInvoiceTotal(invoice); + double invoiceTotal = InvoiceWorker.getInvoiceNotApplied(invoice).doubleValue(); if (Debug.infoOn()) Debug.logInfo("(Capture) Invoice [#" + invoiceId + "] total: " + invoiceTotal, module); // now capture the order @@ -1001,6 +1002,7 @@ // get the order header and payment preferences GenericValue orderHeader = null; List paymentPrefs = null; + List paymentPrefsBa = null; try { orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId)); @@ -1009,6 +1011,11 @@ Map lookupMap = UtilMisc.toMap("orderId", orderId, "statusId", "PAYMENT_AUTHORIZED"); List orderList = UtilMisc.toList("-maxAmount"); paymentPrefs = delegator.findByAnd("OrderPaymentPreference", lookupMap, orderList); + + if (UtilValidate.isNotEmpty(billingAccountId)) { + lookupMap = UtilMisc.toMap("orderId", orderId, "paymentMethodTypeId", "EXT_BILLACT", "statusId", "PAYMENT_NOT_RECEIVED"); + paymentPrefsBa = delegator.findByAnd("OrderPaymentPreference", lookupMap, orderList); + } } catch (GenericEntityException gee) { Debug.logError(gee, "Problems getting entity record(s), see stack trace", module); return ServiceUtil.returnError("ERROR: Could not get order information (" + gee.toString() + ")."); @@ -1032,68 +1039,95 @@ amountToCapture = amountToCapture.min(remainingTotalBd); if (Debug.infoOn()) Debug.logInfo("Actual Expected Capture Amount : " + amountToCapture, module); - // See if there is a billing account first. If so, just charge the captureAmount to the billing account via PaymentApplication - GenericValue billingAccount = null; - BigDecimal billingAccountAvail = null; - BigDecimal billingAccountCaptureAmount = ZERO; - Map billingAccountInfo = null; - if (UtilValidate.isNotEmpty(billingAccountId)) { - try { - billingAccountInfo = dispatcher.runSync("calcBillingAccountBalance", UtilMisc.toMap("billingAccountId", billingAccountId)); - } catch (GenericServiceException e) { - Debug.logError(e, "Unable to get billing account information for #" + billingAccountId, module); - } - } - if (billingAccountInfo != null) { - billingAccount = (GenericValue) billingAccountInfo.get("billingAccount"); - // use available to capture because we want to know how much we can charge to a billing account - Double availableToCapture = (Double) billingAccountInfo.get("availableToCapture"); - billingAccountAvail = new BigDecimal(availableToCapture.doubleValue()); - } - - // if a billing account is used to pay for an order, then charge as much as we can to it before proceeding to other payment methods. - if (billingAccount != null && billingAccountAvail != null) { - try { - // the amount to be "charged" to the billing account, which is the minimum of the amount the order wants to charge to the billing account - // or the amount still available for capturing from the billing account or the total amount to be captured on the order - BigDecimal billingAccountMaxAmount = new BigDecimal(orh.getBillingAccountMaxAmount()); - billingAccountCaptureAmount = billingAccountMaxAmount.min(billingAccountAvail).min(amountToCapture); - Debug.logInfo("billing account avail = [" + billingAccountAvail + "] capture amount = [" + billingAccountCaptureAmount + "] maxAmount = ["+billingAccountMaxAmount+"]", module); - // capturing to a billing account if amount is greater than zero - if (billingAccountCaptureAmount.compareTo(ZERO) == 1) { - Map tmpResult = dispatcher.runSync("captureBillingAccountPayment", UtilMisc.toMap("invoiceId", invoiceId, "billingAccountId", billingAccountId, - "captureAmount", new Double(billingAccountCaptureAmount.doubleValue()), "orderId", orderId, "userLogin", userLogin)); - if (ServiceUtil.isError(tmpResult)) { - return tmpResult; + // Process billing accounts payments + if (UtilValidate.isNotEmpty(paymentPrefsBa)) { + Iterator paymentsBa = paymentPrefsBa.iterator(); + while (paymentsBa.hasNext()) { + GenericValue paymentPref = (GenericValue) paymentsBa.next(); + + BigDecimal authAmount = paymentPref.getBigDecimal("maxAmount"); + if (authAmount == null) authAmount = new BigDecimal(0.00); + authAmount = authAmount.setScale(2, BigDecimal.ROUND_HALF_UP); + + if (authAmount.compareTo(ZERO) == 0) { + // nothing to capture + Debug.logInfo("Nothing to capture; authAmount = 0", module); + continue; + } + // the amount for *this* capture + BigDecimal amountThisCapture = amountToCapture.min(authAmount); + + // decrease amount of next payment preference to capture + amountToCapture = amountToCapture.subtract(amountThisCapture); + + // If we have an invoice, we find unapplied payments associated + // to the billing account and we apply them to the invoice + if (UtilValidate.isNotEmpty(invoiceId)) { + // TODO: jacopo continue from here... + // cercare le paymentapplication non applicate e associate al billing account e il cui + // pagamento non abbia una orderPaymentPreferenceId + // creare nuova payment application fino a raggiungere l'importo necessario o fino ad esaurimento + // e associarle alla fattura; se la fattura non esiste, non fare nulla + Map captureResult = null; + try { + captureResult = dispatcher.runSync("captureBillingAccountPayments", UtilMisc.toMap("invoiceId", invoiceId, + "billingAccountId", billingAccountId, + "captureAmount", new Double(amountThisCapture.doubleValue()), + "orderId", orderId, + "userLogin", userLogin)); + if (ServiceUtil.isError(captureResult)) { + return captureResult; + } + } catch (GenericServiceException ex) { + return ServiceUtil.returnError(ex.getMessage()); } + if (captureResult != null) { + + Double amountCaptured = (Double) captureResult.get("captureAmount"); + Debug.logInfo("Amount captured for order [" + orderId + "] from unapplied payments associated to billing account [" + billingAccountId + "] is: " + amountCaptured, module); - // now, if the full amount had not been captured, then capture - // it from other methods, otherwise return - if (billingAccountCaptureAmount.compareTo(amountToCapture) == -1) { - BigDecimal outstandingAmount = amountToCapture.subtract(billingAccountCaptureAmount).setScale(decimals, rounding); - amountToCapture = outstandingAmount; + // big decimal reference to the capture amount + BigDecimal amountCapturedBd = new BigDecimal(amountCaptured.doubleValue()); + amountCapturedBd = amountCapturedBd.setScale(2, BigDecimal.ROUND_HALF_UP); + + if (amountCapturedBd.compareTo(BigDecimal.ZERO) == 0) { + continue; + } + // add the invoiceId to the result for processing + captureResult.put("invoiceId", invoiceId); + captureResult.put("captureResult", Boolean.TRUE); + captureResult.put("orderPaymentPreference", paymentPref); + captureResult.put("captureRefNum", ""); // FIXME: this is an hack to avoid a service validation error for processCaptureResult (captureRefNum is mandatory, but it is not used for billing accounts) + + // process the capture's results + try { + // the following method will set on the OrderPaymentPreference: + // maxAmount = amountCapturedBd and + // statusId = PAYMENT_RECEIVED + processResult(dctx, captureResult, userLogin, paymentPref); + } catch (GeneralException e) { + Debug.logError(e, "Trouble processing the result; captureResult: " + captureResult, module); + return ServiceUtil.returnError("Trouble processing the capture results"); + } + + // create any splits which are needed + if (authAmount.compareTo(amountCapturedBd) == 1) { + BigDecimal splitAmount = authAmount.subtract(amountCapturedBd); + try { + Map splitCtx = UtilMisc.toMap("userLogin", userLogin, "orderPaymentPreference", paymentPref, "splitAmount", splitAmount); + dispatcher.addCommitService("processCaptureSplitPayment", splitCtx, true); + } catch (GenericServiceException e) { + Debug.logWarning(e, "Problem processing the capture split payment", module); + } + Debug.logInfo("Captured: " + amountThisCapture + " Remaining (re-auth): " + splitAmount, module); + } } else { - Debug.logInfo("Amount to capture [" + amountToCapture + "] was fully captured in Payment [" + tmpResult.get("paymentId") + "].", module); - Map result = ServiceUtil.returnSuccess(); - result.put("processResult", "COMPLETE"); - return result; + Debug.logError("Payment not captured for order [" + orderId + "] from billing account [" + billingAccountId + "]", module); } - } - } catch (GenericServiceException ex) { - return ServiceUtil.returnError(ex.getMessage()); + } } - } - - // return complete if no payment prefs were found - if (paymentPrefs == null || paymentPrefs.size() == 0) { - Debug.logWarning("No orderPaymentPreferences available to capture", module); - Map result = ServiceUtil.returnSuccess(); - result.put("processResult", "COMPLETE"); - return result; } - if (Debug.infoOn()) Debug.logInfo("Actual Expected Capture Amount : " + amountToCapture, module); - // iterate over the prefs and capture each one until we meet our total if (UtilValidate.isNotEmpty(paymentPrefs)) { Iterator payments = paymentPrefs.iterator(); @@ -1122,12 +1156,6 @@ continue; } - // if we have a billing account; total up auth + account available - BigDecimal amountToBillAccount = ZERO; - if (billingAccountAvail != null) { - amountToBillAccount = authAmount.add(billingAccountAvail).setScale(2, BigDecimal.ROUND_HALF_UP); - } - // the amount for *this* capture BigDecimal amountThisCapture; @@ -1138,9 +1166,6 @@ } else if (payments.hasNext()) { // if we have more payments to capture; just capture what was authorized amountThisCapture = authAmount; - } else if (billingAccountAvail != null && amountToBillAccount.compareTo(amountToCapture) >= 0) { - // the provided billing account will cover the remaining; just capture what was autorized - amountThisCapture = authAmount; } else { // we need to capture more then what was authorized; re-auth for the new amount // TODO: add what the billing account cannot support to the re-auth amount @@ -1150,7 +1175,6 @@ amountThisCapture = authAmount; } - Debug.logInfo("Payment preference = [" + paymentPref + "] amount to capture = [" + amountToCapture +"] amount of this capture = [" + amountThisCapture +"] actual auth amount =[" + authAmount + "] amountToBillAccount = [" + amountToBillAccount + "]", module); Map captureResult = capturePayment(dctx, userLogin, orh, paymentPref, amountThisCapture.doubleValue()); if (captureResult != null && !ServiceUtil.isError(captureResult)) { // credit card processors return captureAmount, but gift certificate processors return processAmount @@ -1269,6 +1293,7 @@ return ServiceUtil.returnSuccess(); } + // Deprecated: use captureBillingAccountPayments instead of this. public static Map captureBillingAccountPayment(DispatchContext dctx, Map context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); @@ -1349,6 +1374,66 @@ return ServiceUtil.returnError(ex.getMessage()); } + return results; + } + + public static Map captureBillingAccountPayments(DispatchContext dctx, Map context) { + GenericDelegator delegator = dctx.getDelegator(); + LocalDispatcher dispatcher = dctx.getDispatcher(); + GenericValue userLogin = (GenericValue) context.get("userLogin"); + String invoiceId = (String) context.get("invoiceId"); + String billingAccountId = (String) context.get("billingAccountId"); + Double captureAmountDbl = (Double) context.get("captureAmount"); + BigDecimal captureAmount = new BigDecimal(captureAmountDbl.doubleValue()); + String orderId = (String) context.get("orderId"); + BigDecimal capturedAmount = BigDecimal.ZERO; + + try { + // Select all the unapplied payment applications associated to the billing account + List conditionList = UtilMisc.toList(new EntityExpr("billingAccountId", EntityOperator.EQUALS, billingAccountId), + new EntityExpr("invoiceId", EntityOperator.EQUALS, GenericEntity.NULL_FIELD)); + EntityCondition conditions = new EntityConditionList(conditionList, EntityOperator.AND); + + List paymentApplications = delegator.findByCondition("PaymentApplication", conditions, null, UtilMisc.toList("-amountApplied")); + if (UtilValidate.isNotEmpty(paymentApplications)) { + Iterator paymentApplicationsIt = paymentApplications.iterator(); + while (paymentApplicationsIt.hasNext()) { + if (capturedAmount.compareTo(captureAmount) >= 0) { + // we have captured all the amount required + break; + } + GenericValue paymentApplication = (GenericValue)paymentApplicationsIt.next(); + GenericValue payment = paymentApplication.getRelatedOne("Payment"); + if (payment.getString("paymentPreferenceId") != null) { + // if the payment is reserved for a specific OrderPaymentPreference, + // we don't use it. + continue; + } + // TODO: check the statusId of the payment + BigDecimal paymentApplicationAmount = paymentApplication.getBigDecimal("amountApplied"); + BigDecimal amountToCapture = paymentApplicationAmount.min(captureAmount.subtract(capturedAmount)); + if (amountToCapture.compareTo(paymentApplicationAmount) == 0) { + // apply the whole payment application to the invoice + paymentApplication.set("invoiceId", invoiceId); + paymentApplication.store(); + } else { + // the amount to capture is lower than the amount available in this payment application: + // split the payment application into two records and apply one to the invoice + GenericValue newPaymentApplication = delegator.makeValue("PaymentApplication", paymentApplication); + paymentApplication.set("invoiceId", invoiceId); + paymentApplication.set("amountApplied", amountToCapture); + paymentApplication.store(); + newPaymentApplication.set("amountApplied", paymentApplicationAmount.subtract(amountToCapture)); + newPaymentApplication.store(); + } + capturedAmount = capturedAmount.add(amountToCapture); + } + } + } catch (GenericEntityException ex) { + return ServiceUtil.returnError(ex.getMessage()); + } + Map results = ServiceUtil.returnSuccess(); + results.put("captureAmount", new Double(capturedAmount.doubleValue())); return results; } Modified: ofbiz/branches/release4.0/applications/accounting/widget/BillingAccountForms.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/applications/accounting/widget/BillingAccountForms.xml?view=diff&rev=554136&r1=554135&r2=554136 ============================================================================== --- ofbiz/branches/release4.0/applications/accounting/widget/BillingAccountForms.xml (original) +++ ofbiz/branches/release4.0/applications/accounting/widget/BillingAccountForms.xml Fri Jul 6 22:30:58 2007 @@ -46,11 +46,13 @@ </entity-options> </drop-down> </field> + <!-- <field name="netBalance" title="${uiLabelMap.AccountingBillingNetBalance}" tooltip="${uiLabelMap.AccountingBillingNetBalanceMessage}"> <display description="${bsh:org.ofbiz.accounting.payment.BillingAccountWorker.getBillingAccountNetBalance(delegator, billingAccountId)}" type="currency" currency="${billingAccount.accountCurrencyUomId}"/> </field> + --> <field name="availableBalance" title="${uiLabelMap.AccountingBillingAvailableBalance}" tooltip="${uiLabelMap.AccountingBillingAvailableBalanceMessage}"> - <display description="${bsh:org.ofbiz.accounting.payment.BillingAccountWorker.getBillingAccountAvailableBalance(billingAccount)}" type="currency" currency="${billingAccount.accountCurrencyUomId}"/> + <display description="${bsh:org.ofbiz.accounting.payment.BillingAccountWorker.getBillingAccountBalance(billingAccount)}" type="currency" currency="${billingAccount.accountCurrencyUomId}"/> </field> <field name="submitButton" title="${uiLabelMap.CommonUpdate}" widget-style="smallSubmit"><submit button-type="button"/></field> Modified: ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java?view=diff&rev=554136&r1=554135&r2=554136 ============================================================================== --- ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java (original) +++ ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java Fri Jul 6 22:30:58 2007 @@ -1395,7 +1395,7 @@ if (billingAccountId == null) return 0.0; try { Map res = dispatcher.runSync("calcBillingAccountBalance", UtilMisc.toMap("billingAccountId", billingAccountId)); - Double availableBalance = (Double) res.get("availableBalance"); + Double availableBalance = (Double) res.get("accountBalance"); if (availableBalance != null) { return availableBalance.doubleValue(); } Modified: ofbiz/branches/release4.0/applications/order/webapp/ordermgr/entry/billsettings.ftl URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/applications/order/webapp/ordermgr/entry/billsettings.ftl?view=diff&rev=554136&r1=554135&r2=554136 ============================================================================== --- ofbiz/branches/release4.0/applications/order/webapp/ordermgr/entry/billsettings.ftl (original) +++ ofbiz/branches/release4.0/applications/order/webapp/ordermgr/entry/billsettings.ftl Fri Jul 6 22:30:58 2007 @@ -87,7 +87,7 @@ </tr> <tr><td colspan="3"><hr class="sepbar"/></td></tr> <#list billingAccountList as billingAccount> - <#assign availableAmount = billingAccount.accountLimit?double - billingAccount.accountBalance?double> + <#assign availableAmount = billingAccount.accountBalance?double> <tr> <td align="left" valign="top" width="1%"> <input type="radio" onClick="javascript:toggleBillingAccount(this);" name="billingAccountId" value="${billingAccount.billingAccountId}" <#if (billingAccount.billingAccountId == selectedBillingAccountId?default(""))>checked="checked"</#if>/> |
Free forum by Nabble | Edit this page |