[Erp5-report] r7658 - in /erp5/trunk/products/ERP5Type: CopySupport.py tests/testERP5Type.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Jun 8 18:33:38 CEST 2006


Author: jerome
Date: Thu Jun  8 18:33:33 2006
New Revision: 7658

URL: http://svn.erp5.org?rev=7658&view=rev
Log:
New feature: manage_afterClone can be customized in a type based script


Modified:
    erp5/trunk/products/ERP5Type/CopySupport.py
    erp5/trunk/products/ERP5Type/tests/testERP5Type.py

Modified: erp5/trunk/products/ERP5Type/CopySupport.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/CopySupport.py?rev=7658&r1=7657&r2=7658&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/CopySupport.py (original)
+++ erp5/trunk/products/ERP5Type/CopySupport.py Thu Jun  8 18:33:33 2006
@@ -208,11 +208,15 @@
           l.append('Owner')
 
     # Clear the transaction references
-    # THIS IS NOT GENERIC ENOUGH - PROPERTY SHEET EXTENSION REQUIRED
     if getattr(self_base, 'default_source_reference', None):
       delattr(self_base, 'default_source_reference')
     if getattr(self_base, 'default_destination_reference', None):
       delattr(self_base, 'default_destination_reference')
+    
+    # Call a type based method to reset so properties if necessary
+    script = self._getTypeBasedMethod('afterClone')
+    if script is not None and callable(script):
+      script()
 
     # Clear the workflow history
     # XXX This need to be tested again

Modified: erp5/trunk/products/ERP5Type/tests/testERP5Type.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/testERP5Type.py?rev=7658&r1=7657&r2=7658&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/testERP5Type.py (original)
+++ erp5/trunk/products/ERP5Type/tests/testERP5Type.py Thu Jun  8 18:33:33 2006
@@ -240,6 +240,52 @@
       clearCache()
       self.assertEquals(cache2(), cached_var2)
 
+    def test_afterCloneScript(self):
+      """manage_afterClone can call a type based script."""
+      # setup the script for Person portal type
+      custom_skin = self.getPortal().portal_skins.custom
+      method_id = 'Person_afterClone'
+      if method_id in custom_skin.objectIds():
+        custom_skin.manage_delObjects([method_id])
+      
+      custom_skin.manage_addProduct['PythonScripts']\
+                    .manage_addPythonScript(id = method_id)
+      script = custom_skin[method_id]
+      script.ZPythonScript_edit('', "context.setTitle('reseted')")
+      self.getPortal().changeSkin(None)
+    
+      # copy / pasted person have their title reseted
+      folder = self.getPersonModule()
+      pers = folder.newContent(portal_type='Person',
+                              title='something', )
+      copy_data = folder.manage_copyObjects([pers.getId()])
+      new_id = folder.manage_pasteObjects(copy_data)[0]['new_id']
+      new_pers = folder[new_id]
+      self.assertEquals(new_pers.getTitle(), 'reseted')
+      
+      # we can even change subobjects in the script
+      if not hasattr(pers, 'default_address'):
+        pers.newContent(portal_type='Address', id='default_address')
+      pers.default_address.setTitle('address_title')
+      # modify script to update subobject title
+      script.ZPythonScript_edit('',
+          "context.default_address.setTitle('address_title_reseted')")
+      copy_data = folder.manage_copyObjects([pers.getId()])
+      new_id = folder.manage_pasteObjects(copy_data)[0]['new_id']
+      new_pers = folder[new_id]
+      self.assertEquals(new_pers.default_address.getTitle(),
+                        'address_title_reseted')
+      
+      # of course, other portal types are not affected
+      folder = self.getOrganisationModule()
+      orga = folder.newContent(portal_type='Organisation',
+                              title='something', )
+      copy_data = folder.manage_copyObjects([orga.getId()])
+      new_id = folder.manage_pasteObjects(copy_data)[0]['new_id']
+      new_orga = folder[new_id]
+      self.assertEquals(new_orga.getTitle(), 'something')
+      
+
 if __name__ == '__main__':
     framework()
 else:




More information about the Erp5-report mailing list