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 2007/03/27 19:04:08 UTC
svn commit: r522998 - in /ofbiz/trunk/applications/accounting:
servicedef/secas.xml servicedef/services_finaccount.xml
src/org/ofbiz/accounting/finaccount/FinAccountPaymentServices.java
src/org/ofbiz/accounting/finaccount/FinAccountServices.java
Author: jaz
Date: Tue Mar 27 10:04:07 2007
New Revision: 522998
URL: http://svn.apache.org/viewvc?view=rev&rev=522998
Log:
auto-replenish now working, capture now allows going negative
Modified:
ofbiz/trunk/applications/accounting/servicedef/secas.xml
ofbiz/trunk/applications/accounting/servicedef/services_finaccount.xml
ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountPaymentServices.java
ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java
Modified: ofbiz/trunk/applications/accounting/servicedef/secas.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/secas.xml?view=diff&rev=522998&r1=522997&r2=522998
==============================================================================
--- ofbiz/trunk/applications/accounting/servicedef/secas.xml (original)
+++ ofbiz/trunk/applications/accounting/servicedef/secas.xml Tue Mar 27 10:04:07 2007
@@ -105,12 +105,10 @@
</eca>
<!-- financial account transaction ecas -->
- <!--
<eca service="finAccountWithdraw" event="return">
<condition field-name="productStoreId" operator="is-not-empty"/>
<action service="finAccountReplenish" mode="async" run-as-user="system"/>
- </eca>
- -->
+ </eca>
<eca service="finAccountWithdraw" event="commit">
<action service="checkFinAccountStatus" mode="sync" run-as-user="system"/>
</eca>
@@ -118,12 +116,15 @@
<action service="checkFinAccountStatus" mode="sync" run-as-user="system"/>
</eca>
+ <!--
<eca service="createFinAccountTrans" event="commit">
<action service="postFinAccountTransToGl" mode="sync"/>
</eca>
+ -->
+ <!-- financial account AUTH ecas -->
<eca service="expireFinAccountAuth" event="commit">
- <action service="checkFinAccountStatus" mode="sync"/>
+ <action service="checkFinAccountStatus" mode="sync" run-as-user="system"/>
</eca>
<!-- sample ECA rules for the sampleInvoiceAffiliateCommission service triggering
Modified: ofbiz/trunk/applications/accounting/servicedef/services_finaccount.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_finaccount.xml?view=diff&rev=522998&r1=522997&r2=522998
==============================================================================
--- ofbiz/trunk/applications/accounting/servicedef/services_finaccount.xml (original)
+++ ofbiz/trunk/applications/accounting/servicedef/services_finaccount.xml Tue Mar 27 10:04:07 2007
@@ -136,6 +136,7 @@
<description>Deposit Funds into a Financial Account</description>
<attribute name="finAccountId" type="String" mode="IN" optional="false"/>
<attribute name="productStoreId" type="String" mode="IN" optional="true"/>
+ <attribute name="requireBalance" type="Boolean" mode="IN" optional="true"/>
<attribute name="currency" type="String" mode="IN" optional="true"/>
<attribute name="partyId" type="String" mode="IN" optional="true"/>
<attribute name="amount" type="Double" mode="INOUT" optional="false"/>
@@ -156,6 +157,7 @@
<attribute name="finAccountId" type="String" mode="IN" optional="false"/>
<attribute name="availableBalance" type="Double" mode="OUT" optional="false"/>
<attribute name="balance" type="Double" mode="OUT" optional="false"/>
+ <attribute name="isFrozen" type="Boolean" mode="OUT" optional="false"/>
</service>
<service name="checkFinAccountStatus" engine="java"
location="org.ofbiz.accounting.finaccount.FinAccountServices" invoke="checkFinAccountStatus" auth="true">
Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountPaymentServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountPaymentServices.java?view=diff&rev=522998&r1=522997&r2=522998
==============================================================================
--- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountPaymentServices.java (original)
+++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountPaymentServices.java Tue Mar 27 10:04:07 2007
@@ -57,16 +57,9 @@
String finAccountCode = (String) context.get("finAccountCode");
String finAccountPin = (String) context.get("finAccountPin");
String finAccountId = (String) context.get("finAccountId");
-
- String currency = (String) context.get("currency");
String orderId = (String) context.get("orderId");
Double amount = (Double) context.get("processAmount");
- // make sure we have a currency
- if (currency == null) {
- currency = UtilProperties.getPropertyValue("general.properties", "currency.uom.id.default", "USD");
- }
-
// check for an existing auth trans and cancel it
GenericValue authTrans = PaymentGatewayServices.getAuthTransaction(paymentPref);
if (authTrans != null) {
@@ -173,6 +166,7 @@
// mark the account as frozen if we have gone negative
BigDecimal newBalance = FinAccountHelper.getAvailableBalance(finAccountId, delegator);
if (newBalance.compareTo(FinAccountHelper.ZERO) == -1) {
+ Debug.logInfo("Financal account [" + finAccountId + "] now frozen: " + newBalance, module);
finAccount.set("isFrozen", "Y");
try {
finAccount.store();
@@ -312,6 +306,7 @@
withdrawCtx.put("currency", currency);
withdrawCtx.put("partyId", partyId);
withdrawCtx.put("amount", amount);
+ withdrawCtx.put("requireBalance", Boolean.FALSE); // for captures; if auth passed, allow
withdrawCtx.put("userLogin", userLogin);
// call the withdraw service
@@ -421,7 +416,9 @@
GenericValue userLogin = (GenericValue) context.get("userLogin");
String productStoreId = (String) context.get("productStoreId");
String finAccountId = (String) context.get("finAccountId");
+ Boolean requireBalance = (Boolean) context.get("requireBalance");
Double amount = (Double) context.get("amount");
+ if (requireBalance == null) requireBalance = Boolean.TRUE;
final String WITHDRAWAL = "WITHDRAWAL";
@@ -469,7 +466,11 @@
BigDecimal balance;
String refNum;
Boolean procResult;
- if (previousBalance.doubleValue() >= amount.doubleValue()) {
+ if (requireBalance.booleanValue() && previousBalance.doubleValue() < amount.doubleValue()) {
+ procResult = Boolean.FALSE;
+ balance = previousBalance;
+ refNum = "N/A";
+ } else {
try {
refNum = FinAccountPaymentServices.createFinAcctPaymentTransaction(delegator, dispatcher, userLogin, amount,
productStoreId, partyId, currencyUom, WITHDRAWAL, finAccountId);
@@ -479,10 +480,6 @@
Debug.logError(e, module);
return ServiceUtil.returnError(e.getMessage());
}
- } else {
- procResult = Boolean.FALSE;
- balance = previousBalance;
- refNum = "N/A";
}
Map result = ServiceUtil.returnSuccess();
@@ -601,6 +598,27 @@
return ServiceUtil.returnSuccess();
}
+ // get the product store settings
+ GenericValue finAccountSettings;
+ try {
+ finAccountSettings = delegator.findByPrimaryKeyCache("ProductStoreFinActSetting",
+ UtilMisc.toMap("productStoreId", productStoreId, "finAccountTypeId",
+ finAccount.getString("finAccountTypeId")));
+ } catch (GenericEntityException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError(e.getMessage());
+ }
+ if (finAccountSettings == null) {
+ // no settings; don't replenish
+ return ServiceUtil.returnSuccess();
+ }
+
+ Double replThres = finAccountSettings.getDouble("replenishThreshold");
+ if (replThres == null) {
+ return ServiceUtil.returnSuccess();
+ }
+ BigDecimal replenishThreshold = new BigDecimal(replThres.doubleValue());
+
BigDecimal replenishLevel = finAccount.getBigDecimal("replenishLevel");
if (replenishLevel == null || replenishLevel.compareTo(FinAccountHelper.ZERO) == 0) {
// no replenish level set; this account goes not support auto-replenish
@@ -616,30 +634,27 @@
return ServiceUtil.returnError(e.getMessage());
}
+ // see if we are within the threshold for replenishment
+ if (balance.compareTo(replenishThreshold) > -1) {
+ // not ready
+ return ServiceUtil.returnSuccess();
+ }
+
// the deposit is level - balance (500 - (-10) = 510 || 500 - (10) = 490)
BigDecimal depositAmount = replenishLevel.subtract(balance);
- // find the owner party
- List finAcctOwners;
- try {
- finAcctOwners = delegator.findByAnd("FinAccountRole", UtilMisc.toMap("finAccountId", finAccountId, "roleTypeId", "OWNER"), UtilMisc.toList("-fromDate"));
- } catch (GenericEntityException e) {
- Debug.logError(e, module);
- return ServiceUtil.returnError(e.getMessage());
- }
- finAcctOwners = EntityUtil.filterByDate(finAcctOwners);
- GenericValue finAccountOwner = EntityUtil.getFirst(finAcctOwners);
- if (finAccountOwner == null) {
+ // get the owner party
+ String ownerPartyId = finAccount.getString("ownerPartyId");
+ if (ownerPartyId == null) {
// no owner cannot replenish; (not fatal, just not supported by this account)
Debug.logWarning("No owner attached to financial account [" + finAccountId + "] cannot auto-replenish", module);
return ServiceUtil.returnSuccess();
}
- String partyId = finAccountOwner.getString("partyId");
// determine the payment method to use to replenish
List paymentMethods;
try {
- paymentMethods = delegator.findByAnd("PaymentMethod", UtilMisc.toMap("partyId", partyId), UtilMisc.toList("-fromDate"));
+ paymentMethods = delegator.findByAnd("PaymentMethod", UtilMisc.toMap("partyId", ownerPartyId), UtilMisc.toList("-fromDate"));
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError(e.getMessage());
@@ -648,7 +663,7 @@
GenericValue paymentMethod = EntityUtil.getFirst(paymentMethods);
if (paymentMethod == null) {
// no payment methods on file; cannot replenish
- Debug.logWarning("No payment methods attached to party [" + partyId + "] cannot auto-replenish", module);
+ Debug.logWarning("No payment methods attached to party [" + ownerPartyId + "] cannot auto-replenish", module);
return ServiceUtil.returnSuccess();
}
@@ -662,12 +677,12 @@
}
// hit the payment method for the amount to replenish
- Map orderItemMap = UtilMisc.toMap("Auto-Replenishment", new Double(depositAmount.doubleValue()));
+ Map orderItemMap = UtilMisc.toMap("Auto-Replenishment FA #" + finAccountId, new Double(depositAmount.doubleValue()));
Map replOrderCtx = FastMap.newInstance();
replOrderCtx.put("productStoreId", productStoreId);
replOrderCtx.put("paymentMethodId", paymentMethod.getString("paymentMethodId"));
replOrderCtx.put("currency", currency);
- replOrderCtx.put("partyId", partyId);
+ replOrderCtx.put("partyId", ownerPartyId);
replOrderCtx.put("itemMap", orderItemMap);
replOrderCtx.put("userLogin", userLogin);
Map replResp;
@@ -686,7 +701,7 @@
depositCtx.put("productStoreId", productStoreId);
depositCtx.put("finAccountId", finAccountId);
depositCtx.put("currency", currency);
- depositCtx.put("partyId", partyId);
+ depositCtx.put("partyId", ownerPartyId);
depositCtx.put("amount", new Double(depositAmount.doubleValue()));
depositCtx.put("userLogin", userLogin);
Map depositResp;
Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java?view=diff&rev=522998&r1=522997&r2=522998
==============================================================================
--- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java (original)
+++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java Tue Mar 27 10:04:07 2007
@@ -136,11 +136,13 @@
return ServiceUtil.returnError(e.getMessage());
}
- Debug.log("FinAccount Balance [" + balance + "] Available [" + availableBalance + "]", module);
-
+ Debug.log("FinAccount Balance [" + balance + "] Available [" + availableBalance + "]", module);
+ Boolean isFrozen = Boolean.valueOf("Y".equals(finAccount.getString("isFrozen")));
+
Map result = ServiceUtil.returnSuccess();
result.put("availableBalance", new Double(availableBalance.doubleValue()));
result.put("balance", new Double(balance.doubleValue()));
+ result.put("isFrozen", isFrozen);
return result;
}
@@ -183,12 +185,12 @@
return ServiceUtil.returnError(e.getMessage());
}
- if ("N".equals(frozen) && balance.compareTo(FinAccountHelper.ZERO) == -1) {
+ if ("N".equals(frozen) && balance.compareTo(FinAccountHelper.ZERO) < 1) {
finAccount.set("isFrozen", "Y");
- Debug.logInfo("Financial account [" + finAccountId + "] has passed its threshold [Frozen]", module);
+ Debug.logInfo("Financial account [" + finAccountId + "] has passed its threshold [" + balance + "] (Frozen)", module);
} else if ("Y".equals(frozen) && balance.compareTo(FinAccountHelper.ZERO) > 0) {
finAccount.set("isFrozen", "N");
- Debug.logInfo("Financial account [" + finAccountId + "] has been make current [Un-Frozen]", module);
+ Debug.logInfo("Financial account [" + finAccountId + "] has been made current [" + balance + "] (Un-Frozen)", module);
}
try {
finAccount.store();