details:   /erp/devel/pi/rev/0c1dcc495e00
changeset: 10417:0c1dcc495e00
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Tue Feb 08 08:37:15 2011 +0100
summary:   Solved filtering problem with foreign key fields

diffstat:

 
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
   |   9 ++
 
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-grid.js
               |  32 +++++++++-
 
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-grid.js
          |  21 +++++-
 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/FKComboUIDefinition.java
    |   9 --
 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/ForeignKeyUIDefinition.java
 |   2 +-
 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/TextUIDefinition.java
       |   2 +-
 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
           |   2 +-
 7 files changed, 62 insertions(+), 15 deletions(-)

diffs (177 lines):

diff -r 50dbcdd9a7a9 -r 0c1dcc495e00 
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
--- 
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
   Mon Feb 07 21:29:58 2011 +0100
+++ 
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
   Tue Feb 08 08:37:15 2011 +0100
@@ -29,6 +29,7 @@
 // * OBYesNoItem: combo box for yes/no values
 // * OBLinkTitleItem: an interface supporting a link button in the title.
 // * OBFKItem: combo box for foreign key references
+// * OBFKFilterTextItem: text item for filtering on FK fields
 // * OBListItem: combo box for list references
 
 // == OBCheckboxItem ==
@@ -302,6 +303,14 @@
   validateOnExit: true
 });
 
+//== OBFKFilterTextItem ==
+//Input used for filtering on FK fields.
+isc.ClassFactory.defineClass('OBFKFilterTextItem', TextItem);
+
+isc.OBFKFilterTextItem.addProperties({
+  validateOnExit: true  
+});
+
 // == OBTextAreaItem ==
 // Input for large strings
 isc.ClassFactory.defineClass('OBTextAreaItem', TextAreaItem);
diff -r 50dbcdd9a7a9 -r 0c1dcc495e00 
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-grid.js
--- 
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-grid.js
       Mon Feb 07 21:29:58 2011 +0100
+++ 
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-grid.js
       Tue Feb 08 08:37:15 2011 +0100
@@ -134,6 +134,29 @@
         return ret;
       },
       
+      // repair that filter criteria on fk fields can be 
+      // on the identifier instead of the field itself.
+      // after applying the filter the grid will set the criteria
+      // back in the filtereditor effectively clearing
+      // the filter field. The code here repairs/prevents this.
+      setValuesAsCriteria : function (criteria, refresh) {
+        // make a copy so that we don't change the object
+        // which is maybe used somewhere else
+        criteria = isc.addProperties({}, criteria);
+        var index, prop;
+
+        for (prop in criteria) {
+          if (criteria.hasOwnProperty(prop) && prop.endsWith('.' + 
OB.Constants.IDENTIFIER)) {
+            value = criteria[prop];
+            index = prop.indexOf('.');
+            prop = prop.substring(0, index);
+            criteria[prop] = value;
+          }
+        }
+
+        return this.Super('setValuesAsCriteria', [criteria, refresh]);
+      },
+
       actionButtonProperties: {
         baseStyle: 'OBGridFilterFunnelIcon',
         visibility: 'hidden',
@@ -220,8 +243,15 @@
     }
     for (var prop in criteria) {
       if (criteria.hasOwnProperty(prop)) {
+        var value = criteria[prop];
+        // see the description in setValuesAsCriteria above
+        if (prop.endsWith('.' + OB.Constants.IDENTIFIER)) {
+          var index = prop.indexOf('.');
+          prop = prop.substring(0, index);
+        }
+        
         var field = this.filterEditor.getField(prop);
-        if (this.isValidFilterField(field) && (criteria[prop] === false || 
criteria[prop])) {
+        if (this.isValidFilterField(field) && (value === false || value || 
value === 0)) {
           return true;
         }
       }
diff -r 50dbcdd9a7a9 -r 0c1dcc495e00 
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-grid.js
--- 
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-grid.js
  Mon Feb 07 21:29:58 2011 +0100
+++ 
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-grid.js
  Tue Feb 08 08:37:15 2011 +0100
@@ -571,9 +571,9 @@
   },
   
   convertCriteria: function(criteria){
-    var selectedValues;
+    var selectedValues, prop, fld, value;
     
-    criteria = criteria || {};
+    criteria = isc.addProperties({}, criteria || {});
     
     if (this.targetRecordId) {
       // do not filter on anything with a targetrecord
@@ -583,6 +583,23 @@
       criteria._targetRecordId = this.targetRecordId;
     }
     
+    // filter criteria for foreign key fields should be on the identifier
+    // note is again repaired in the filtereditor setValuesAsCriteria
+    // see the ob-grid.js 
+    for (prop in criteria) {
+      if (criteria.hasOwnProperty(prop)) {
+        if (prop === this.view.parentProperty) {
+          continue;
+        }
+        fld = this.getField(prop);
+        if (fld && fld.foreignKeyField) {
+          value = criteria[prop];
+          delete criteria[prop];
+          criteria[prop + '.' + OB.Constants.IDENTIFIER] = value;
+        }
+      }
+    }
+    
     // note pass in criteria otherwise infinite looping!
     this.resetEmptyMessage(criteria);
     
diff -r 50dbcdd9a7a9 -r 0c1dcc495e00 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/FKComboUIDefinition.java
--- 
a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/FKComboUIDefinition.java
    Mon Feb 07 21:29:58 2011 +0100
+++ 
b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/FKComboUIDefinition.java
    Tue Feb 08 08:37:15 2011 +0100
@@ -21,8 +21,6 @@
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
 import org.openbravo.base.exception.OBException;
-import org.openbravo.base.model.Property;
-import org.openbravo.client.kernel.KernelUtils;
 import org.openbravo.model.ad.ui.Field;
 import org.openbravo.service.json.JsonConstants;
 
@@ -34,13 +32,6 @@
  */
 public class FKComboUIDefinition extends ForeignKeyUIDefinition {
 
-  protected String getFilterEditorPropertiesProperty(Field field) {
-    final Property prop = 
KernelUtils.getInstance().getPropertyFromColumn(field.getColumn());
-    return ", filterEditorProperties: {selectOnFocus: true, valueField: '" + 
prop.getName() + "."
-        + JsonConstants.IDENTIFIER + "', displayField: '" + prop.getName() + 
"."
-        + JsonConstants.IDENTIFIER + "'}";
-  }
-
   public String getGridEditorFieldProperties(Field field) {
     return "displayField: '" + JsonConstants.IDENTIFIER + "', valueField: '" + 
JsonConstants.ID
         + "'" + super.getGridEditorFieldProperties(field);
diff -r 50dbcdd9a7a9 -r 0c1dcc495e00 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/ForeignKeyUIDefinition.java
--- 
a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/ForeignKeyUIDefinition.java
 Mon Feb 07 21:29:58 2011 +0100
+++ 
b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/ForeignKeyUIDefinition.java
 Tue Feb 08 08:37:15 2011 +0100
@@ -42,7 +42,7 @@
 
   @Override
   public String getFilterEditorType() {
-    return "OBText";
+    return "OBFKFilterTextItem";
   }
 
   @Override
diff -r 50dbcdd9a7a9 -r 0c1dcc495e00 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/TextUIDefinition.java
--- 
a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/TextUIDefinition.java
       Mon Feb 07 21:29:58 2011 +0100
+++ 
b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/TextUIDefinition.java
       Tue Feb 08 08:37:15 2011 +0100
@@ -47,7 +47,7 @@
 
   @Override
   public String getFilterEditorType() {
-    return "OBText";
+    return "OBTextItem";
   }
 
   @Override
diff -r 50dbcdd9a7a9 -r 0c1dcc495e00 
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
   Mon Feb 07 21:29:58 2011 +0100
+++ 
b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
   Tue Feb 08 08:37:15 2011 +0100
@@ -79,7 +79,7 @@
    * @return the form item type used for editing this reference in a form.
    */
   public String getFormEditorType() {
-    return "OBText";
+    return "OBTextItem";
   }
 
   /**

------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to