Author: jaz
Date: Mon Mar 26 21:48:29 2007
New Revision: 522750
URL: http://svn.apache.org/viewvc?view=rev&rev=522750
Log:
updated createFinancialAccountForStore method; will handle any type of
financial account; added services for checking balance and if handle
freezing/un-freezing accounts
Modified:
ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java
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=522750&r1=522749&r2=522750
==============================================================================
---
ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java
(original)
+++
ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java
Mon Mar 26 21:48:29 2007
@@ -21,9 +21,9 @@
import java.sql.Timestamp;
import java.util.Map;
+import java.math.BigDecimal;
-import org.ofbiz.base.util.UtilDateTime;
-import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.base.util.*;
import org.ofbiz.entity.GenericDelegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
@@ -44,7 +44,7 @@
LocalDispatcher dispatcher = dctx.getDispatcher();
GenericValue userLogin = (GenericValue) context.get("userLogin");
String productStoreId = (String) context.get("productStoreId");
- String finAccountTypeId = (String) context.get("finAccountTypeId");
+ String finAccountTypeId = (String) context.get("finAccountTypeId");
try {
// get the product store id and use it to generate a unique fin
account code
@@ -55,17 +55,29 @@
Long accountCodeLength =
productStoreFinAccountSetting.getLong("accountCodeLength");
Long accountValidDays =
productStoreFinAccountSetting.getLong("accountValidDays");
-
+ Long pinCodeLength =
productStoreFinAccountSetting.getLong("pinCodeLength");
+ String requirePinCode =
productStoreFinAccountSetting.getString("requirePinCode");
+
// automatically set the parameters for the create fin account
service
ModelService createService =
dctx.getModelService("createFinAccount");
- Map inContext = createService.makeValid(context, "IN");
+ Map inContext = createService.makeValid(context,
ModelService.IN_PARAM);
Timestamp now = UtilDateTime.nowTimestamp();
+
// now use our values
- inContext.put("fromDate", now);
- inContext.put("thruDate", UtilDateTime.getDayEnd(now,
accountValidDays.intValue()));
String finAccountCode =
FinAccountHelper.getNewFinAccountCode(accountCodeLength.intValue(), delegator);
inContext.put("finAccountCode", finAccountCode);
+
+ // with pin codes, the account code becomes the ID and the pin
becomes the code
+ if ("Y".equalsIgnoreCase(requirePinCode)) {
+ String pinCode =
FinAccountHelper.getNewFinAccountCode(pinCodeLength.intValue(), delegator);
+ inContext.put("finAccountPin", pinCode);
+ }
+
+ // set the dates/userlogin
+ inContext.put("thruDate", UtilDateTime.getDayEnd(now,
accountValidDays.intValue()));
+ inContext.put("fromDate", now);
inContext.put("userLogin", userLogin);
+
Map createResult = dispatcher.runSync("createFinAccount",
inContext);
if (ServiceUtil.isError(createResult)) {
@@ -81,6 +93,94 @@
} catch (GenericServiceException ex) {
return ServiceUtil.returnError(ex.getMessage());
}
+ }
+
+ public static Map checkFinAccountBalance(DispatchContext dctx, Map
context) {
+ GenericDelegator delegator = dctx.getDelegator();
+ String finAccountId = (String) context.get("finAccountId");
+ String finAccountCode = (String) context.get("finAccountCode");
+
+ GenericValue finAccount;
+ if (finAccountId == null) {
+ try {
+ finAccount =
FinAccountHelper.getFinAccountFromCode(finAccountCode, delegator);
+ finAccountId = finAccount.getString("finAccountId");
+ } catch (GenericEntityException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError(e.getMessage());
+ }
+ } else {
+ try {
+ finAccount = delegator.findByPrimaryKey("FinAccount",
UtilMisc.toMap("finAccountId", finAccountId));
+ } catch (GenericEntityException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError(e.getMessage());
+ }
+ }
+ if (finAccount == null) {
+ return ServiceUtil.returnError("Unable to locate financial
account");
+ }
+
+ String currencyUom = finAccount.getString("currencyUomId");
+ if (currencyUom != null) {
+ currencyUom =
UtilProperties.getPropertyValue("general.properties",
"currency.uom.id.default", "USD");
+ }
+
+ // get the balance
+ BigDecimal availableBalance;
+ BigDecimal balance;
+ try {
+ availableBalance =
FinAccountHelper.getAvailableBalance(finAccountId, currencyUom, delegator);
+ balance = FinAccountHelper.getBalance(finAccountId, currencyUom,
delegator);
+ } catch (GenericEntityException e) {
+ return ServiceUtil.returnError(e.getMessage());
+ }
+
+ Debug.log("FinAccount Balance [" + balance + "] Available [" +
availableBalance + "]", module);
+ Map result = ServiceUtil.returnSuccess();
+ result.put("availableBalance", new
Double(availableBalance.doubleValue()));
+ result.put("balance", new Double(balance.doubleValue()));
+ return result;
+ }
+
+ public static Map checkFinAccountStatus(DispatchContext dctx, Map context)
{
+ GenericDelegator delegator = dctx.getDelegator();
+ String finAccountId = (String) context.get("finAccountId");
+
+ GenericValue finAccount;
+ try {
+ finAccount = delegator.findByPrimaryKey("FinAccount",
UtilMisc.toMap("finAccountId", finAccountId));
+ } catch (GenericEntityException ex) {
+ return ServiceUtil.returnError(ex.getMessage());
+ }
+
+ if (finAccount != null) {
+ String currency = finAccount.getString("currencyUomId");
+ String frozen = finAccount.getString("isFrozen");
+ if (frozen == null) frozen = "N";
+
+ BigDecimal balance;
+ try {
+ balance = FinAccountHelper.getAvailableBalance(finAccountId,
currency, delegator);
+ } catch (GenericEntityException e) {
+ return ServiceUtil.returnError(e.getMessage());
+ }
+
+ if ("N".equals(frozen) && balance.compareTo(FinAccountHelper.ZERO)
== -1) {
+ finAccount.set("isFrozen", "Y");
+ Debug.logInfo("Financial account [" + finAccountId + "] has
passed its threshold [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);
+ }
+ try {
+ finAccount.store();
+ } catch (GenericEntityException e) {
+ return ServiceUtil.returnError(e.getMessage());
+ }
+ }
+
+ return ServiceUtil.returnSuccess();
}
}