You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2014/03/28 16:05:23 UTC
svn commit: r1582774 - in /ofbiz/trunk/applications:
accounting/script/org/ofbiz/accounting/test/
accounting/src/org/ofbiz/accounting/payment/ accounting/widget/
order/src/org/ofbiz/order/order/
Author: jacopoc
Date: Fri Mar 28 15:05:23 2014
New Revision: 1582774
URL: http://svn.apache.org/r1582774
Log:
Moved two util methods for billing accounts from the "accounting" to the "order" component and removed duplicated code from the order component that was there to avoid a cyclic dependency between the two components.
Modified:
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/test/PaymentApplicationTests.xml
ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/BillingAccountWorker.java
ofbiz/trunk/applications/accounting/widget/BillingAccountForms.xml
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java
Modified: ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/test/PaymentApplicationTests.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/test/PaymentApplicationTests.xml?rev=1582774&r1=1582773&r2=1582774&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/test/PaymentApplicationTests.xml (original)
+++ ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/test/PaymentApplicationTests.xml Fri Mar 28 15:05:23 2014
@@ -106,9 +106,11 @@ under the License.
<field field="delegator" type="org.ofbiz.entity.Delegator"/>
<field field="serviceInMap.paymentId"/>
</call-class-method>
- <call-class-method method-name="getBillingAccountBalance" class-name="org.ofbiz.accounting.payment.BillingAccountWorker" ret-field="appliedBillling">
- <field field="delegator" type="org.ofbiz.entity.Delegator"/>
- <field field="serviceInMap.billingAccountId"/>
+ <entity-one entity-name="BillingAccount" value-field="billingAccount">
+ <field-map field-name="billingAccountId" from-field="serviceInMap.billingAccountId"/>
+ </entity-one>
+ <call-class-method method-name="getBillingAccountBalance" class-name="org.ofbiz.order.order.OrderReadHelper" ret-field="appliedBillling">
+ <field field="billingAccount" type="GenericValue"/>
</call-class-method>
<set field="zero" value="0" type="BigDecimal"/>
<assert>
Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/BillingAccountWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/BillingAccountWorker.java?rev=1582774&r1=1582773&r2=1582774&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/BillingAccountWorker.java (original)
+++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/BillingAccountWorker.java Fri Mar 28 15:05:23 2014
@@ -44,6 +44,7 @@ import org.ofbiz.entity.condition.Entity
import org.ofbiz.entity.condition.EntityExpr;
import org.ofbiz.entity.condition.EntityOperator;
import org.ofbiz.entity.util.EntityUtil;
+import org.ofbiz.order.order.OrderReadHelper;
import org.ofbiz.service.DispatchContext;
import org.ofbiz.service.LocalDispatcher;
import org.ofbiz.service.ServiceUtil;
@@ -92,10 +93,10 @@ public class BillingAccountWorker {
if ((thruDate != null) && UtilDateTime.nowTimestamp().after(thruDate)) continue;
if (currencyUomId.equals(billingAccountVO.getString("accountCurrencyUomId"))) {
- BigDecimal accountBalance = BillingAccountWorker.getBillingAccountBalance(billingAccountVO);
+ BigDecimal accountBalance = OrderReadHelper.getBillingAccountBalance(billingAccountVO);
Map<String, Object> billingAccount = new HashMap<String, Object>(billingAccountVO);
- BigDecimal accountLimit = getAccountLimit(billingAccountVO);
+ BigDecimal accountLimit = OrderReadHelper.getAccountLimit(billingAccountVO);
billingAccount.put("accountBalance", accountBalance);
BigDecimal accountAvailable = accountLimit.subtract(accountBalance);
@@ -109,101 +110,6 @@ public class BillingAccountWorker {
}
/**
- * Returns the accountLimit of the BillingAccount or BigDecimal ZERO if it is null
- * @param billingAccount
- * @throws GenericEntityException
- */
- public static BigDecimal getAccountLimit(GenericValue billingAccount) throws GenericEntityException {
- if (billingAccount.getBigDecimal("accountLimit") != null) {
- return billingAccount.getBigDecimal("accountLimit");
- } else {
- Debug.logWarning("Billing Account [" + billingAccount.getString("billingAccountId") + "] does not have an account limit defined, assuming zero.", module);
- return ZERO;
- }
- }
-
- /**
- * 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 the billing account id
- * @param delegator the delegato
- * @return return the "available" balance of a billing account
- * @throws GenericEntityException
- */
- public static BigDecimal getBillingAccountBalance(Delegator delegator, String billingAccountId) throws GenericEntityException {
- GenericValue billingAccount = delegator.findOne("BillingAccount", UtilMisc.toMap("billingAccountId", billingAccountId), false);
- return getBillingAccountBalance(billingAccount);
- }
-
- public static BigDecimal getBillingAccountBalance(GenericValue billingAccount) throws GenericEntityException {
-
- Delegator 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<EntityExpr> whereConditions = EntityCondition.makeCondition(UtilMisc.toList(
- EntityCondition.makeCondition("billingAccountId", EntityOperator.EQUALS, billingAccountId),
- EntityCondition.makeCondition("paymentMethodTypeId", EntityOperator.EQUALS, "EXT_BILLACT"),
- EntityCondition.makeCondition("statusId", EntityOperator.NOT_IN, UtilMisc.toList("ORDER_CANCELLED", "ORDER_REJECTED")),
- EntityCondition.makeCondition("preferenceStatusId", EntityOperator.NOT_IN, UtilMisc.toList("PAYMENT_SETTLED", "PAYMENT_RECEIVED", "PAYMENT_DECLINED", "PAYMENT_CANCELLED")) // PAYMENT_NOT_AUTH
- ), EntityOperator.AND);
-
- List<GenericValue> orderPaymentPreferenceSums = delegator.findList("OrderPurchasePaymentSummary", whereConditions, UtilMisc.toSet("maxAmount"), null, null, false);
- for (Iterator<GenericValue> oppsi = orderPaymentPreferenceSums.iterator(); oppsi.hasNext();) {
- GenericValue orderPaymentPreferenceSum = oppsi.next();
- BigDecimal maxAmount = orderPaymentPreferenceSum.getBigDecimal("maxAmount");
- balance = maxAmount != null ? balance.subtract(maxAmount) : balance;
- }
-
- List<GenericValue> paymentAppls = delegator.findByAnd("PaymentApplication", UtilMisc.toMap("billingAccountId", billingAccountId), null, false);
- // TODO: cancelled payments?
- for (Iterator<GenericValue> pAi = paymentAppls.iterator(); pAi.hasNext();) {
- GenericValue paymentAppl = pAi.next();
- if (paymentAppl.getString("invoiceId") == null) {
- BigDecimal amountApplied = paymentAppl.getBigDecimal("amountApplied");
- balance = balance.add(amountApplied);
- }
- }
-
- balance = balance.setScale(decimals, rounding);
- return balance;
- /*
- Delegator delegator = billingAccount.getDelegator();
- String billingAccountId = billingAccount.getString("billingAccountId");
-
- // first get the net balance of invoices - payments
- BigDecimal balance = getBillingAccountNetBalance(delegator, billingAccountId);
-
- // now the amounts of all the pending orders (not cancelled, rejected or completed)
- List orderHeaders = getBillingAccountOpenOrders(delegator, billingAccountId);
-
- if (orderHeaders != null) {
- Iterator ohi = orderHeaders.iterator();
- while (ohi.hasNext()) {
- GenericValue orderHeader = (GenericValue) ohi.next();
- OrderReadHelper orh = new OrderReadHelper(orderHeader);
- balance = balance.add(orh.getOrderGrandTotal());
- }
- }
-
- // set the balance to BillingAccount.accountLimit if it is greater. This is necessary because nowhere do we track the amount of BillingAccount
- // to be charged to an order, such as FinAccountAuth entity does for FinAccount. As a result, we must assume that the system is doing things correctly
- // and use the accountLimit
- BigDecimal accountLimit = billingAccount.getBigDecimal("accountLimit");
- if (balance.compareTo(accountLimit) > 0) {
- balance = accountLimit;
- } else {
- balance = balance.setScale(decimals, rounding);
- }
- return balance;
- */
- }
-
- /**
* Returns list of orders which are currently open against a billing account
*/
public static List<GenericValue> getBillingAccountOpenOrders(Delegator delegator, String billingAccountId) throws GenericEntityException {
@@ -226,7 +132,7 @@ public class BillingAccountWorker {
public static BigDecimal getBillingAccountAvailableBalance(GenericValue billingAccount) throws GenericEntityException {
if ((billingAccount != null) && (billingAccount.get("accountLimit") != null)) {
BigDecimal accountLimit = billingAccount.getBigDecimal("accountLimit");
- BigDecimal availableBalance = accountLimit.subtract(getBillingAccountBalance(billingAccount)).setScale(decimals, rounding);
+ BigDecimal availableBalance = accountLimit.subtract(OrderReadHelper.getBillingAccountBalance(billingAccount)).setScale(decimals, rounding);
return availableBalance;
} else {
Debug.logWarning("Available balance requested for null billing account, returning zero", module);
@@ -298,7 +204,7 @@ public class BillingAccountWorker {
}
result.put("billingAccount", billingAccount);
- result.put("accountBalance", getBillingAccountBalance(delegator, billingAccountId));
+ result.put("accountBalance", OrderReadHelper.getBillingAccountBalance(billingAccount));
result.put("netAccountBalance", getBillingAccountNetBalance(delegator, billingAccountId));
result.put("availableBalance", getBillingAccountAvailableBalance(billingAccount));
result.put("availableToCapture", availableToCapture(billingAccount));
Modified: ofbiz/trunk/applications/accounting/widget/BillingAccountForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/BillingAccountForms.xml?rev=1582774&r1=1582773&r2=1582774&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/widget/BillingAccountForms.xml (original)
+++ ofbiz/trunk/applications/accounting/widget/BillingAccountForms.xml Fri Mar 28 15:05:23 2014
@@ -119,7 +119,7 @@ under the License.
<form name="EditBillingAccount" type="single" target="updateBillingAccount" title=""
header-row-style="header-row" default-table-style="basic-table">
<actions>
- <set field="availableBalance" value="${bsh:billingAccount != null ? org.ofbiz.accounting.payment.BillingAccountWorker.getBillingAccountBalance(billingAccount) : 0}" type="BigDecimal"/>
+ <set field="availableBalance" value="${bsh:billingAccount != null ? org.ofbiz.order.order.OrderReadHelper.getBillingAccountBalance(billingAccount) : 0}" type="BigDecimal"/>
</actions>
<alt-target use-when="billingAccount==null" target="createBillingAccount"/>
<auto-fields-service service-name="updateBillingAccount" map-name="billingAccount"/>
Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java?rev=1582774&r1=1582773&r2=1582774&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java Fri Mar 28 15:05:23 2014
@@ -2912,4 +2912,62 @@ public class OrderReadHelper {
result.put("taxGrandTotal", taxGrandTotal);
return result;
}
+
+ /**
+ * 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 billingAccount the billing account record
+ * @return return the "available" balance of a billing account
+ * @throws GenericEntityException
+ */
+ public static BigDecimal getBillingAccountBalance(GenericValue billingAccount) throws GenericEntityException {
+
+ Delegator 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<EntityExpr> whereConditions = EntityCondition.makeCondition(UtilMisc.toList(
+ EntityCondition.makeCondition("billingAccountId", EntityOperator.EQUALS, billingAccountId),
+ EntityCondition.makeCondition("paymentMethodTypeId", EntityOperator.EQUALS, "EXT_BILLACT"),
+ EntityCondition.makeCondition("statusId", EntityOperator.NOT_IN, UtilMisc.toList("ORDER_CANCELLED", "ORDER_REJECTED")),
+ EntityCondition.makeCondition("preferenceStatusId", EntityOperator.NOT_IN, UtilMisc.toList("PAYMENT_SETTLED", "PAYMENT_RECEIVED", "PAYMENT_DECLINED", "PAYMENT_CANCELLED")) // PAYMENT_NOT_AUTH
+ ), EntityOperator.AND);
+
+ List<GenericValue> orderPaymentPreferenceSums = delegator.findList("OrderPurchasePaymentSummary", whereConditions, UtilMisc.toSet("maxAmount"), null, null, false);
+ for (GenericValue orderPaymentPreferenceSum : orderPaymentPreferenceSums) {
+ BigDecimal maxAmount = orderPaymentPreferenceSum.getBigDecimal("maxAmount");
+ balance = maxAmount != null ? balance.subtract(maxAmount) : balance;
+ }
+
+ List<GenericValue> paymentAppls = delegator.findByAnd("PaymentApplication", UtilMisc.toMap("billingAccountId", billingAccountId), null, false);
+ // TODO: cancelled payments?
+ for (GenericValue paymentAppl : paymentAppls) {
+ if (paymentAppl.getString("invoiceId") == null) {
+ BigDecimal amountApplied = paymentAppl.getBigDecimal("amountApplied");
+ balance = balance.add(amountApplied);
+ }
+ }
+
+ balance = balance.setScale(scale, rounding);
+ return balance;
+ }
+
+ /**
+ * Returns the accountLimit of the BillingAccount or BigDecimal ZERO if it is null
+ * @param billingAccount
+ * @throws GenericEntityException
+ */
+ public static BigDecimal getAccountLimit(GenericValue billingAccount) throws GenericEntityException {
+ if (billingAccount.getBigDecimal("accountLimit") != null) {
+ return billingAccount.getBigDecimal("accountLimit");
+ } else {
+ Debug.logWarning("Billing Account [" + billingAccount.getString("billingAccountId") + "] does not have an account limit defined, assuming zero.", module);
+ return ZERO;
+ }
+ }
+
}
Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java?rev=1582774&r1=1582773&r2=1582774&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java Fri Mar 28 15:05:23 2014
@@ -780,7 +780,8 @@ public class OrderReturnServices {
String thisBillingAccountId = billingAccountItr.next().getString("billingAccountId");
BigDecimal billingAccountBalance = ZERO;
try {
- billingAccountBalance = getBillingAccountBalance(thisBillingAccountId, dctx);
+ GenericValue billingAccount = delegator.findOne("BillingAccount", UtilMisc.toMap("billingAccountId", thisBillingAccountId), false);
+ billingAccountBalance = OrderReadHelper.getBillingAccountBalance(billingAccount);
} catch (GenericEntityException e) {
return ServiceUtil.returnError(e.getMessage());
}
@@ -1005,51 +1006,6 @@ public class OrderReturnServices {
}
/**
- * Helper method to get billing account balance, cannot use BillingAccountWorker.getBillingAccountBalance()
- * due to circular build dependency.
- * @param billingAccountId the billing account id
- * @param dctx the dispatch context
- * @return returns the billing account balance
- * @throws GenericEntityException
- */
- public static BigDecimal getBillingAccountBalance(String billingAccountId, DispatchContext dctx) throws GenericEntityException {
- Delegator delegator = dctx.getDelegator();
- GenericValue billingAccount = delegator.findOne("BillingAccount", UtilMisc.toMap("billingAccountId", billingAccountId), false);
-
- BigDecimal balance = ZERO;
- BigDecimal accountLimit = ZERO;
- if (billingAccount.getBigDecimal("accountLimit") != null) {
- accountLimit = billingAccount.getBigDecimal("accountLimit");
- }
- balance = balance.add(accountLimit);
- // pending (not cancelled, rejected, or received) order payments
- EntityConditionList<EntityExpr> whereConditions = EntityCondition.makeCondition(UtilMisc.toList(
- EntityCondition.makeCondition("billingAccountId", EntityOperator.EQUALS, billingAccountId),
- EntityCondition.makeCondition("paymentMethodTypeId", EntityOperator.EQUALS, "EXT_BILLACT"),
- EntityCondition.makeCondition("statusId", EntityOperator.NOT_IN, UtilMisc.toList("ORDER_CANCELLED", "ORDER_REJECTED")),
- EntityCondition.makeCondition("preferenceStatusId", EntityOperator.NOT_IN, UtilMisc.toList("PAYMENT_SETTLED", "PAYMENT_RECEIVED", "PAYMENT_DECLINED", "PAYMENT_CANCELLED")) // PAYMENT_NOT_AUTH
- ), EntityOperator.AND);
-
- List<GenericValue> orderPaymentPreferenceSums = delegator.findList("OrderPurchasePaymentSummary", whereConditions, UtilMisc.toSet("maxAmount"), null, null, false);
- for (GenericValue orderPaymentPreferenceSum : orderPaymentPreferenceSums) {
- BigDecimal maxAmount = orderPaymentPreferenceSum.getBigDecimal("maxAmount");
- balance = maxAmount != null ? balance.subtract(maxAmount) : balance;
- }
-
- List<GenericValue> paymentAppls = delegator.findByAnd("PaymentApplication", UtilMisc.toMap("billingAccountId", billingAccountId), null, false);
- // TODO: cancelled payments?
- for (GenericValue paymentAppl : paymentAppls) {
- if (paymentAppl.getString("invoiceId") == null) {
- BigDecimal amountApplied = paymentAppl.getBigDecimal("amountApplied");
- balance = balance.add(amountApplied);
- }
- }
-
- balance = balance.setScale(decimals, rounding);
- return balance;
- }
-
- /**
* Helper method to generate a BillingAccount (store credit) from a return
* header. This method takes care of all business logic relating to
* the initialization of a Billing Account from the Return data.