[Erp5-report] r19776 - in /erp5/trunk/products/ERP5Form: ./ dtml/ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Mar 10 18:31:43 CET 2008


Author: jerome
Date: Mon Mar 10 18:31:43 2008
New Revision: 19776

URL: http://svn.erp5.org?rev=19776&view=rev
Log:
Add an option on the proxify tool to delegate values unconditionnaly instead of
keeping values if they are different. This is useful when you proxify a form
to use a field library and want to delegate everything.

Modified:
    erp5/trunk/products/ERP5Form/Form.py
    erp5/trunk/products/ERP5Form/dtml/formProxify.dtml
    erp5/trunk/products/ERP5Form/tests/testProxify.py

Modified: erp5/trunk/products/ERP5Form/Form.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/Form.py?rev=19776&r1=19775&r2=19776&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/Form.py (original)
+++ erp5/trunk/products/ERP5Form/Form.py Mon Mar 10 18:31:43 2008
@@ -801,8 +801,12 @@
       return [f for f in self.objectValues() if f.meta_type == 'ProxyField']
 
     security.declareProtected('Change Formulator Forms', 'proxifyField')
-    def proxifyField(self, field_dict=None, REQUEST=None):
-        """Convert fields to proxy fields"""
+    def proxifyField(self, field_dict=None, force_delegate=False, REQUEST=None):
+        """Convert fields to proxy fields
+        If the field value is different from the proxyfield value, the value is
+        kept on the proxyfield, otherwise it is delegated. If you specify
+        force_delegate, values will be delegated even if they are different
+        """
         from Products.ERP5Form.ProxyField import ProxyWidget
 
         def copy(_dict):
@@ -833,7 +837,7 @@
         def remove_same_value(new_dict, target_dict):
             for key, value in new_dict.items():
                 target_value = target_dict.get(key)
-                if is_equal(value, target_value):
+                if force_delegate or is_equal(value, target_value):
                     del new_dict[key]
             return new_dict
 

Modified: erp5/trunk/products/ERP5Form/dtml/formProxify.dtml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/dtml/formProxify.dtml?rev=19776&r1=19775&r2=19776&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/dtml/formProxify.dtml (original)
+++ erp5/trunk/products/ERP5Form/dtml/formProxify.dtml Mon Mar 10 18:31:43 2008
@@ -4,10 +4,16 @@
 <dtml-let form_field_list=getFormFieldList>
 
 <p class="form-help">
-Proxify non-proxy fields.
+Proxify non-proxy fields.<br/>
+This tool will keep values on fields if they are different from the target
+field.<br/>
+If you don't want this behaviour, check the <em>Delegate values</em> checkbox
+below and all values will be delegated to the proxy target.
 </p>
 
 <form action="proxifyField" method="POST">
+
+Delegate values <input type="checkbox" name="force_delegate"> <br/>
 
 <table border="2">
 <tr>

Modified: erp5/trunk/products/ERP5Form/tests/testProxify.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/tests/testProxify.py?rev=19776&r1=19775&r2=19776&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/tests/testProxify.py (original)
+++ erp5/trunk/products/ERP5Form/tests/testProxify.py Mon Mar 10 18:31:43 2008
@@ -141,6 +141,19 @@
     template_field.values['title'] = 'Region'
     self.assertEqual(field.get_value('title'), 'Region')
 
+  def test_force_delegate(self):
+    self.person_view.proxifyField({'my_name':'Base_view.my_string_field'},
+                                  force_delegate=1)
+
+    field = self.person_view.my_name
+    self.assertEqual(field.meta_type, 'ProxyField')
+    self.assertEqual(field.get_value('form_id'), 'Base_view')
+    self.assertEqual(field.get_value('field_id'), 'my_string_field')
+    self.assertEqual(field.is_delegated('title'), True)
+    self.assertEqual(field.is_delegated('size'), True)
+    self.assertEqual(field.is_delegated('enabled'), True)
+    self.assertEqual(field.is_delegated('description'), True)
+
   def test_unproxify(self):
     #Proxify First
     self.address_view.proxifyField({'my_region':'Base_view.my_list_field'})




More information about the Erp5-report mailing list