[Erp5-report] r30905 - /erp5/trunk/products/ERP5/MovementCollectionDiff.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Nov 27 17:24:17 CET 2009
Author: kazuhiko
Date: Fri Nov 27 17:24:15 2009
New Revision: 30905
URL: http://svn.erp5.org?rev=30905&view=rev
Log:
initial implementation of _getPropertyAndCategoryList() that returns a dict to be used to update a newly created simulation movement. some parts can be integrated into ERP5Type.Base if we have a similar requirement in another place.
Modified:
erp5/trunk/products/ERP5/MovementCollectionDiff.py
Modified: erp5/trunk/products/ERP5/MovementCollectionDiff.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/MovementCollectionDiff.py?rev=30905&r1=30904&r2=30905&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/MovementCollectionDiff.py [utf8] (original)
+++ erp5/trunk/products/ERP5/MovementCollectionDiff.py [utf8] Fri Nov 27 17:24:15 2009
@@ -28,6 +28,7 @@
import zope.interface
from Products.ERP5Type import interfaces
+from Products.ERP5Type.Accessor.TypeDefinition import list_types
class MovementCollectionDiff(object):
"""
@@ -44,6 +45,7 @@
self._deletable_movement_list = []
self._new_movement_list = []
self._updatable_movement_list = []
+ self._property_dict_dict = {}
def getDeletableMovementList(self):
"""
@@ -84,6 +86,12 @@
to update an existing movement or to
create a new movement.
"""
+ property_dict = self._property_dict.get(movement)
+ if property_dict is None:
+ # movement should be 'New Movement'
+ return self._getPropertyAndCategoryList(movement)
+ else:
+ return property_dict
def addUpdatableMovement(self, movement, property_dict):
"""
@@ -92,3 +100,53 @@
property_dict -- properties to update
"""
self._updatable_movement_list.append(movement)
+ self._property_dict[movement] = property_dict
+
+ def _getPropertyAndCategoryList(self, movement):
+ """
+ Returns a dict that includes all property values, based on property
+ sheet configuration and all category values.
+ """
+ property_map = movement.getPropertyMap()
+ bad_property_list = ['id', 'uid', 'categories_list', 'int_index']
+ # we don't want acquired properties without acquisition_mask_value
+ for x in property_map:
+ if x.has_key('acquisition_base_category') and not x.get('acquisition_mask_value', 0):
+ bad_property_list.append(x['id'])
+
+ default_value_dict = dict([(x['id'], x.get('default', None)) \
+ for x in property_map])
+ getPropertyList = movement.getPropertyList
+ getProperty = movement.getProperty
+ getter_list_type_dict = {
+ True:getPropertyList,
+ False:getProperty
+ }
+ getter_dict = dict([(x['id'],
+ getter_list_type_dict[x['type'] in list_types and not x['id'].endswith('_list')]) \
+ for x in property_map])
+
+ def filter_property_func(x):
+ key, value = x
+ if key in bad_property_list:
+ return False
+ default = default_value_dict[key]
+ if value == default:
+ return False
+ if isinstance(value, (list, tuple)) and \
+ isinstance(default, (list, tuple)) and \
+ tuple(value) == tuple(default):
+ return False
+ return True
+
+ property_dict = dict(filter(filter_property_func,
+ [(x, getter_dict[x](x)) for x in \
+ movement.getPropertyIdList()]))
+
+ def filter_category_func(x):
+ return len(x[1]) != 0
+
+ property_dict.update(dict(filter(filter_category_func,
+ [(x, getPropertyList(x)) for x in \
+ movement.getBaseCategoryList()])))
+ return property_dict
More information about the Erp5-report
mailing list