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 06:15:02 UTC

svn commit: r522738 - /ofbiz/trunk/applications/order/src/org/ofbiz/order/finaccount/FinAccountHelper.java

Author: jaz
Date: Mon Mar 26 21:15:02 2007
New Revision: 522738

URL: http://svn.apache.org/viewvc?view=rev&rev=522738
Log:
financial account helper updates, moved some generic methods here

Modified:
    ofbiz/trunk/applications/order/src/org/ofbiz/order/finaccount/FinAccountHelper.java

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/finaccount/FinAccountHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/finaccount/FinAccountHelper.java?view=diff&rev=522738&r1=522737&r2=522738
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/finaccount/FinAccountHelper.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/finaccount/FinAccountHelper.java Mon Mar 26 21:15:02 2007
@@ -25,10 +25,7 @@
 import java.util.Random;
 import java.util.regex.Pattern;
 
-import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.UtilDateTime;
-import org.ofbiz.base.util.UtilMisc;
-import org.ofbiz.base.util.UtilNumber;
+import org.ofbiz.base.util.*;
 import org.ofbiz.entity.GenericDelegator;
 import org.ofbiz.entity.GenericEntity;
 import org.ofbiz.entity.GenericEntityException;
@@ -84,8 +81,7 @@
               GenericValue firstEntry = (GenericValue) transactions.get(0);
               if (firstEntry.get(fieldName) != null) {
                   BigDecimal valueToAdd = new BigDecimal(firstEntry.getDouble(fieldName).doubleValue());
-                  BigDecimal newValue = initialValue.add(valueToAdd).setScale(decimals, rounding);
-                  return newValue;
+                  return initialValue.add(valueToAdd).setScale(decimals, rounding);
               } else {
                   return initialValue;
               }
@@ -103,24 +99,30 @@
       */
      public static String getNewFinAccountCode(int codeLength, GenericDelegator delegator) throws GenericEntityException {
 
-         // keep generating new 12-digit account codes until a unique one is found
+         // keep generating new account codes until a unique one is found
          Random r = new Random();
          boolean foundUniqueNewCode = false;
          StringBuffer newAccountCode = null;
-            
+         long count = 0;
+
          while (!foundUniqueNewCode) {
-            newAccountCode = new StringBuffer(codeLength);
-            for (int i = 0; i < codeLength; i++) {
-                newAccountCode.append(char_pool[r.nextInt(char_pool.length)]);
-            }
+             newAccountCode = new StringBuffer(codeLength);
+             for (int i = 0; i < codeLength; i++) {
+                 newAccountCode.append(char_pool[r.nextInt(char_pool.length)]);
+             }
 
-     	    List existingAccountsWithCode = delegator.findByAnd("FinAccount", UtilMisc.toMap("finAccountCode", newAccountCode.toString()));
-            if (existingAccountsWithCode.size() == 0) {
-    	        foundUniqueNewCode = true;
-            }
-    	 }
-    	    
-    	 return newAccountCode.toString();
+             List existingAccountsWithCode = delegator.findByAnd("FinAccount", UtilMisc.toMap("finAccountCode", newAccountCode.toString()));
+             if (existingAccountsWithCode.size() == 0) {
+                 foundUniqueNewCode = true;
+             }
+
+             count++;
+             if (count > 999999) {
+                 throw new GenericEntityException("Unable to locate unique FinAccountCode! Length [" + codeLength + "]");
+             }             
+         }
+
+         return newAccountCode.toString();
      }
      
      /**
@@ -201,8 +203,7 @@
          decrementTotal = addFirstEntryAmount(decrementTotal, transSums, "amount", (decimals+1), rounding);
          
          // the net balance is just the incrementTotal minus the decrementTotal
-         BigDecimal netBalance = incrementTotal.subtract(decrementTotal).setScale(decimals, rounding);
-         return netBalance;
+         return incrementTotal.subtract(decrementTotal).setScale(decimals, rounding);
      }
 
      /**
@@ -242,8 +243,7 @@
          BigDecimal authorizationsTotal = addFirstEntryAmount(ZERO, authSums, "amount", (decimals+1), rounding);
          
          // the total available balance is transactions total minus authorizations total
-         BigDecimal netAvailableBalance = netBalance.subtract(authorizationsTotal).setScale(decimals, rounding);
-         return netAvailableBalance;
+         return netBalance.subtract(authorizationsTotal).setScale(decimals, rounding);
      }
 
      /**
@@ -256,5 +256,85 @@
       */
     public static BigDecimal getAvailableBalance(String finAccountId, String currencyUomId, GenericDelegator delegator) throws GenericEntityException {
         return getAvailableBalance(finAccountId, currencyUomId, UtilDateTime.nowTimestamp(), delegator);
+    }
+
+    public static boolean validateFinAccount(GenericValue finAccount) {
+        return false;    
+    }
+
+    /**
+     * Validates a FinAccount's PIN number
+     * @param delegator
+     * @param finAccountId
+     * @param pinNumber
+     * @return true if the bin is valid
+     */
+    public static boolean validatePin(GenericDelegator delegator, String finAccountId, String pinNumber) {
+        GenericValue finAccount = null;
+        try {
+            finAccount = delegator.findByPrimaryKey("FinAccount", UtilMisc.toMap("finAccountId", finAccountId));
+        } catch (GenericEntityException e) {
+            Debug.logError(e, module);
+        }
+        
+        if (finAccount != null) {
+            String dbPin = finAccount.getString("finAccountCode");
+            Debug.logInfo("FinAccount Pin Validation: [Sent: " + pinNumber + "] [Actual: " + dbPin + "]", module);
+            if (dbPin != null && dbPin.equals(pinNumber)) {
+                return true;
+            }
+        } else {
+            Debug.logInfo("FinAccount record not found (" + finAccountId + ")", module);
+        }
+        return false;
+    }
+
+    /**
+     *
+     * @param delegator
+     * @param length length of the number to generate (up to 19 digits)
+     * @param isId to be used as an ID (will check the DB to make sure it doesn't already exist)
+     * @return String generated number
+     * @throws GenericEntityException
+     */
+    public static String generateRandomFinNumber(GenericDelegator delegator, int length, boolean isId) throws GenericEntityException {
+        if (length > 19) {
+            length = 19;
+        }
+
+        Random rand = new Random();
+        boolean isValid = false;
+        String number = null;
+        while (!isValid) {
+            number = "";
+            for (int i = 0; i < length; i++) {
+                int randInt = rand.nextInt(9);
+                number = number + randInt;
+            }
+
+            if (isId) {
+                int check = UtilValidate.getLuhnCheckDigit(number);
+                number = number + check;
+
+                // validate the number
+                if (checkFinAccountNumber(number)) {
+                    // make sure this number doens't already exist
+                    isValid = checkIsNumberInDatabase(delegator, number);
+                }
+            } else {
+                isValid = true;
+            }
+        }
+        return number;
+    }
+
+    private static boolean checkIsNumberInDatabase(GenericDelegator delegator, String number) throws GenericEntityException {
+        GenericValue finAccount = delegator.findByPrimaryKey("FinAccount", UtilMisc.toMap("finAccountId", number));
+        return finAccount == null;
+    }
+
+    public static boolean checkFinAccountNumber(String number) {
+        number = number.replaceAll("\\D", "");
+        return UtilValidate.sumIsMod10(UtilValidate.getLuhnSum(number));
     }
 }