From 390fb4e6e9ca864d3dc2ebe78b098cba820dd325 Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Wed, 2 Feb 2005 15:24:33 +0000
Subject: [PATCH] Add wheel button support for MultiRelationField.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@2387 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Form/SelectionTool.py | 79 ++++++++++++++++++++++---------
 1 file changed, 57 insertions(+), 22 deletions(-)

diff --git a/product/ERP5Form/SelectionTool.py b/product/ERP5Form/SelectionTool.py
index 4e37897031..214d025611 100755
--- a/product/ERP5Form/SelectionTool.py
+++ b/product/ERP5Form/SelectionTool.py
@@ -112,8 +112,9 @@ class SelectionTool( UniqueObject, SimpleItem ):
       """
         Sets the selection instance for a given selection_name
       """
-      # Set the name so that this selection itself can get its own name.
-      selection_object.edit(name = selection_name)
+      if selection_object != None:
+        # Set the name so that this selection itself can get its own name.
+        selection_object.edit(name = selection_name)
 
       if not REQUEST:
         REQUEST = get_request()
@@ -843,25 +844,6 @@ class SelectionTool( UniqueObject, SimpleItem ):
       if method_count2 != None:
         REQUEST.form['method_count2'] = method_count2
       
-      # Save the current REQUEST form
-      form_pickle, form_signature = self.getPickleAndSignature(**REQUEST.form)
-      REQUEST.form_pickle = form_pickle
-      REQUEST.form_signature = form_signature
-
-      # Find the field which was clicked on
-      form = getattr(self, form_id)
-      field = None
-      relation_index = 0
-
-      for field in form.get_fields(include_disabled=0):
-        if getattr(field, 'is_relation_field', None):
-          if index == relation_index:
-            break
-          else:
-            relation_index += 1
-      
-      #return "Done %s %s %s %s %s" % (index, relation_index, form_id, field, form_pickle)
-
       # Find the object which needs to be updated      
       object_uid = REQUEST.get('object_uid', None)
       object_path = REQUEST.get('object_uid', None)
@@ -879,6 +861,59 @@ class SelectionTool( UniqueObject, SimpleItem ):
           object_uid = o.getUid() 
         else:
           return "Sorrry, Error, the calling object was not catalogued. Do not know how to do ?"
+
+      # Find the field which was clicked on
+      form = getattr(self, form_id)
+      field = None
+      relation_index = 0
+
+      # find the correct field
+      for field in form.get_fields(include_disabled=0):
+        if getattr(field, 'is_relation_field', None):
+          if index == relation_index:
+            break
+          else:
+            relation_index += 1
+      
+      field_value = REQUEST.form['field_%s' % field.id]
+
+      selection_name = 'Base_viewRelatedObjectList'
+      # reselt current selection
+      self.portal_selections.setSelectionFor( selection_name, None)
+
+
+      if field.meta_type == "MultiRelationStringField":
+        if method_count2 == None:
+          # user click on the wheel, not on the validation button
+          # we need to facilitate user search
+
+          # first: store current field value in the selection
+          base_category = field.get_value( 'base_category')
+
+          property_get_related_uid_method_name = "get"+ string.join( map( lambda x: string.upper(x[0]) + x[1:] ,string.split(base_category,'_') ) , '' ) + "UidList"
+          
+          current_uid_list = getattr( o, property_get_related_uid_method_name )( portal_type=map(lambda x:x[0],field.get_value('portal_type')))
+
+          #selected_uids = self.portal_selections.updateSelectionCheckedUidList(selection_name,[],current_uid)
+          self.portal_selections.setSelectionCheckedUidsFor(selection_name , current_uid_list, REQUEST=REQUEST )
+
+          # change current value to '%'
+          field_value = '%'
+          REQUEST.form['field_%s' % field.id] = field_value
+
+      elif field.meta_type == "RelationStringField":
+        # If user click on the wheel without validate the form (ie: want to search the relation without writing '%' ) 
+        if field_value in ( '', None ):
+          field_value = '%'
+          REQUEST.form['field_%s' % field.id] = field_value
+
+
+      # Save the current REQUEST form
+      form_pickle, form_signature = self.getPickleAndSignature(**REQUEST.form)
+      REQUEST.form_pickle = form_pickle
+      REQUEST.form_signature = form_signature
+
+
         
       base_category = None
       kw = {}
@@ -895,7 +930,7 @@ class SelectionTool( UniqueObject, SimpleItem ):
       kw['previous_form_id'] = form_id        
 
 
-      kw[field.get_value('catalog_index')] = REQUEST.form['field_%s' % field.id]
+      kw[field.get_value('catalog_index')] = field_value
       
       """
       # We work with strings - ie. single values
-- 
2.30.9