[Erp5-report] r10963 - in /erp5/trunk/products: ERP5/tests/ ERP5Type/ ERP5Type/Accessor/
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Oct 26 14:58:58 CEST 2006
Author: alex
Date: Thu Oct 26 14:58:56 2006
New Revision: 10963
URL: http://svn.erp5.org?rev=10963&view=rev
Log:
When acquired content is set locally (when edited through a web form), make
sure all properties are copied...
Unit test explains it better.
Modified:
erp5/trunk/products/ERP5/tests/testERP5HR.py
erp5/trunk/products/ERP5Type/Accessor/AcquiredProperty.py
erp5/trunk/products/ERP5Type/Accessor/ContentProperty.py
erp5/trunk/products/ERP5Type/Base.py
Modified: erp5/trunk/products/ERP5/tests/testERP5HR.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testERP5HR.py?rev=10963&r1=10962&r2=10963&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testERP5HR.py (original)
+++ erp5/trunk/products/ERP5/tests/testERP5HR.py Thu Oct 26 14:58:56 2006
@@ -706,10 +706,35 @@
person = sequence.get('person')
organisation = sequence.get('organisation')
self.assertEquals(organisation.getDefaultAddressCity(),'Lille')
+ self.assertEquals(organisation.getDefaultAddressZipCode(), '59000')
self.assertEquals(person.getDefaultAddressCity(),'Lille')
- person.setDefaultAddressCity('La Garnache')
+ self.assertEquals(person.getDefaultAddressZipCode(), '59000')
+
+ # here, the parameters we pass to edit are the same as the one acquired
+ # from the organisation, edit shouldn't do anything
+ person.edit(
+ default_address_city='Lille',
+ default_address_zip_code='59000')
+
+ self.assertEquals(person.getDefaultAddress(),
+ organisation.getDefaultAddress())
+ self.assertEquals(person.getDefaultAddressCity(),'Lille')
+ self.assertEquals(person.getDefaultAddressZipCode(), '59000')
+
+ # here, the first parameter we pass will trigger the creation of a
+ # subobject on person, and we need to make sure that the second one gets
+ # copied (when calling edit from the interface, all displayed fields are
+ # passed to edit)
+ person.edit(
+ default_address_city='La Garnache',
+ default_address_zip_code='59000')
+
+ self.assertNotEquals(person.getDefaultAddress(),
+ organisation.getDefaultAddress())
self.assertEquals(person.getDefaultAddressCity(),'La Garnache')
+ self.assertEquals(person.getDefaultAddressZipCode(), '59000')
self.assertEquals(organisation.getDefaultAddressCity(),'Lille')
+ self.assertEquals(organisation.getDefaultAddressZipCode(), '59000')
##################################
## Tests
Modified: erp5/trunk/products/ERP5Type/Accessor/AcquiredProperty.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Accessor/AcquiredProperty.py?rev=10963&r1=10962&r2=10963&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Accessor/AcquiredProperty.py (original)
+++ erp5/trunk/products/ERP5Type/Accessor/AcquiredProperty.py Thu Oct 26 14:58:56 2006
@@ -156,7 +156,9 @@
assertAttributePortalType(instance, self._storage_id, self._portal_type)
o = instance._getOb(self._storage_id, None)
if o is None:
- o = instance.newContent(id = self._storage_id, portal_type = self._portal_type[0])
+ o = instance.newContent(id=self._storage_id,
+ portal_type=self._portal_type[0])
+ instance._v_accessor_created_object = 1
if self._reindex:
o.setProperty(self._acquired_property, value, *args, **kw)
else:
Modified: erp5/trunk/products/ERP5Type/Accessor/ContentProperty.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Accessor/ContentProperty.py?rev=10963&r1=10962&r2=10963&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Accessor/ContentProperty.py (original)
+++ erp5/trunk/products/ERP5Type/Accessor/ContentProperty.py Thu Oct 26 14:58:56 2006
@@ -220,6 +220,7 @@
assertAttributePortalType(instance, available_id, self._portal_type)
o = instance.newContent(id=available_id,
portal_type=self._portal_type[0])
+ instance._v_accessor_created_object = 1
if self._reindex:
o.setProperty(self._acquired_property, *args, **kw)
else:
Modified: erp5/trunk/products/ERP5Type/Base.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Base.py?rev=10963&r1=10962&r2=10963&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py (original)
+++ erp5/trunk/products/ERP5Type/Base.py Thu Oct 26 14:58:56 2006
@@ -1018,11 +1018,15 @@
Each time attributes of an object are updated, they should
be updated through this generic edit method
+
+ Modification date is supported by edit_workflow in ERP5
+ There is no need to change it here
"""
self._v_modified_property_dict = {}
- my_modified_property_list = []
- for key in kw.keys():
- if key != 'id':
+
+ def getModifiedPropertyList(self):
+ my_modified_property_list = []
+ for key in kw.keys():
# We only change if the value is different
# This may be very long...
old_value = None
@@ -1032,7 +1036,6 @@
except TypeError:
old_value = self.getProperty(key)
-
if old_value != kw[key] or force_update:
# We keep in a thread var the previous values
# this can be useful for interaction workflow to implement lookups
@@ -1040,12 +1043,26 @@
# edit itself, this is useless as the dict will be overwritten
self._v_modified_property_dict[key] = old_value
my_modified_property_list.append(key)
- elif self.id != kw['id']:
- self.setId(kw['id'], reindex=reindex_object)
- # Modification date is supported by edit_workflow in ERP5
- # There is no need to change it here
- for key in my_modified_property_list:
- self._setProperty(key, kw[key])
+ return my_modified_property_list
+
+ my_modified_property_list = getModifiedPropertyList(self)
+
+ # When we get notified by an accessor that it created an object, recheck
+ # all properties
+ while 1:
+ self._v_accessor_created_object = 0
+ for key in my_modified_property_list:
+ if key != 'id':
+ self._setProperty(key, kw[key])
+ else:
+ self.setId(kw['id'], reindex=reindex_object)
+ if self._v_accessor_created_object == 1:
+ # refresh list of modified properties, and restart the process
+ my_modified_property_list = getModifiedPropertyList(self)
+ break
+ else:
+ break
+
if reindex_object:
# We do not want to reindex the object if nothing is changed
if (self._v_modified_property_dict != {}):
More information about the Erp5-report
mailing list