details:   https://code.openbravo.com/erp/devel/pi/rev/093cf42d6fa6
changeset: 30054:093cf42d6fa6
user:      Carlos Aristu <carlos.aristu <at> openbravo.com>
date:      Fri Sep 09 15:18:08 2016 +0200
summary:   related to issue 33900: apply the format when default value is a SQL 
expression

diffstat:

 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/NumberUIDefinition.java
 |  33 ++-
 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
       |  94 ++++++---
 2 files changed, 82 insertions(+), 45 deletions(-)

diffs (169 lines):

diff -r cd053689a095 -r 093cf42d6fa6 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/NumberUIDefinition.java
--- 
a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/NumberUIDefinition.java
     Fri Sep 09 12:39:08 2016 +0000
+++ 
b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/NumberUIDefinition.java
     Fri Sep 09 15:18:08 2016 +0200
@@ -11,7 +11,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2010-2012 Openbravo SLU 
+ * All portions are Copyright (C) 2010-2016 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -158,14 +158,8 @@
   public String getDefaultValue(VariablesSecureApp vars, String columnName,
       String defaultValueExpression, String windowId) {
     String defaultValue = super.getDefaultValue(vars, columnName, 
defaultValueExpression, windowId);
-    if (defaultValue == null || defaultValue.length() == 0) {
-      return defaultValue;
-    }
     try {
-      // Format the numeric default value
-      DecimalFormat df = Utility.getFormat(vars, getFormat());
-      BigDecimal numericDefaultValue = new BigDecimal(defaultValue);
-      return df.format(numericDefaultValue);
+      return formatDefaultValue(vars, defaultValue);
     } catch (Exception ex) {
       throw new OBException("Invalid numeric default value (" + 
defaultValueExpression
           + ") defined for column " + columnName + " in window " + windowId, 
ex);
@@ -173,6 +167,29 @@
   }
 
   @Override
+  public String getDefaultValueFromSQLExpression(VariablesSecureApp vars, 
Field field,
+      String defaultValueExpression) {
+    String defaultValue = super.getDefaultValueFromSQLExpression(vars, field,
+        defaultValueExpression);
+    try {
+      return formatDefaultValue(vars, defaultValue);
+    } catch (Exception ex) {
+      throw new OBException("Invalid numeric value retrieved from default 
expression ("
+          + defaultValueExpression + ") defined for field " + field.getName(), 
ex);
+    }
+  }
+
+  private String formatDefaultValue(VariablesSecureApp vars, String 
defaultValue) {
+    if (defaultValue == null || defaultValue.length() == 0) {
+      return defaultValue;
+    }
+    // Format the numeric default value
+    DecimalFormat df = Utility.getFormat(vars, getFormat());
+    BigDecimal numericDefaultValue = new BigDecimal(defaultValue);
+    return df.format(numericDefaultValue);
+  }
+
+  @Override
   public Object createFromClassicString(String value) {
     if (value == null || value.length() == 0) {
       return null;
diff -r cd053689a095 -r 093cf42d6fa6 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
--- 
a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
   Fri Sep 09 12:39:08 2016 +0000
+++ 
b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
   Fri Sep 09 15:18:08 2016 +0200
@@ -213,43 +213,8 @@
         } else if (!defaultS.startsWith("@SQL=")) {
           columnValue = getDefaultValue(rq.getVariablesSecureApp(), colName, 
defaultS, windowId);
         } else {
-          ArrayList<String> params = new ArrayList<String>();
-          String sql = parseSQL(defaultS, params);
-          int indP = 1;
-          PreparedStatement ps = null;
-          try {
-            ps = 
OBDal.getInstance().getConnection(false).prepareStatement(sql);
-            for (String parameter : params) {
-              String value = "";
-              if (parameter.substring(0, 1).equals("#")) {
-                value = Utility.getContext(new DalConnectionProvider(false), 
RequestContext.get()
-                    .getVariablesSecureApp(), parameter, 
field.getTab().getWindow().getId());
-              } else {
-                String fieldId = "inp" + 
Sqlc.TransformaNombreColumna(parameter);
-                if 
(RequestContext.get().getParameterMap().containsKey(fieldId)) {
-                  value = RequestContext.get().getRequestParameter(fieldId);
-                }
-                if (value == null || value.equals("")) {
-                  value = Utility.getContext(new DalConnectionProvider(false), 
RequestContext.get()
-                      .getVariablesSecureApp(), parameter, 
field.getTab().getWindow().getId());
-                }
-              }
-              ps.setObject(indP++, value);
-            }
-            ResultSet rs = ps.executeQuery();
-            if (rs.next()) {
-              columnValue = getValueFromSQLDefault(rs);
-            }
-          } catch (Exception e) {
-            log.error("Error computing default value for field " + 
field.getName() + " of tab "
-                + field.getTab().getName(), e);
-          } finally {
-            try {
-              ps.close();
-            } catch (SQLException e) {
-              // won't happen
-            }
-          }
+          columnValue = 
getDefaultValueFromSQLExpression(rq.getVariablesSecureApp(), field,
+              defaultS);
         }
       }
     }
@@ -289,6 +254,61 @@
   }
 
   /**
+   * Returns the value for a default value expression based on a SQL 
expression. This kind of
+   * expressions that start with '@SQL='.
+   *
+   * @param vars
+   *          Handler for the session info.
+   * @param field
+   *          Field whose column has the default value.
+   * @param defaultValueExpression
+   *          String with the default value expression.
+   * @return String with the calculated default value.
+   */
+  public String getDefaultValueFromSQLExpression(VariablesSecureApp vars, 
Field field,
+      String defaultValueExpression) {
+    ArrayList<String> params = new ArrayList<String>();
+    String sql = parseSQL(defaultValueExpression, params);
+    int indP = 1;
+    PreparedStatement ps = null;
+    String columnValue = null;
+    try {
+      ps = OBDal.getInstance().getConnection(false).prepareStatement(sql);
+      for (String parameter : params) {
+        String value = "";
+        if (parameter.substring(0, 1).equals("#")) {
+          value = Utility.getContext(new DalConnectionProvider(false), 
RequestContext.get()
+              .getVariablesSecureApp(), parameter, 
field.getTab().getWindow().getId());
+        } else {
+          String fieldId = "inp" + Sqlc.TransformaNombreColumna(parameter);
+          if (RequestContext.get().getParameterMap().containsKey(fieldId)) {
+            value = RequestContext.get().getRequestParameter(fieldId);
+          }
+          if (value == null || value.equals("")) {
+            value = Utility.getContext(new DalConnectionProvider(false), 
RequestContext.get()
+                .getVariablesSecureApp(), parameter, 
field.getTab().getWindow().getId());
+          }
+        }
+        ps.setObject(indP++, value);
+      }
+      ResultSet rs = ps.executeQuery();
+      if (rs.next()) {
+        columnValue = getValueFromSQLDefault(rs);
+      }
+    } catch (Exception e) {
+      log.error("Error computing default value for field " + field.getName() + 
" of tab "
+          + field.getTab().getName(), e);
+    } finally {
+      try {
+        ps.close();
+      } catch (SQLException e) {
+        // won't happen
+      }
+    }
+    return columnValue;
+  }
+
+  /**
    * It returns the same as getFieldProperties except in the case of combo 
UIDefinitions. In combo
    * UI definitions, a call to the super will be done, but the combo 
computation itself will not be
    * done (so only the default value, or the current request value, will be 
considered).

------------------------------------------------------------------------------
_______________________________________________
Openbravo-commits mailing list
Openbravo-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to