[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