diff --git a/product/ERP5Type/Constraint/CategoryRelatedMembershipArity.py b/product/ERP5Type/Constraint/CategoryRelatedMembershipArity.py index f0d99d4de4681cc028acdd97ae91a4b7d1976342..eb394e53173c0a50bc378e68b5bf98c27717239d 100644 --- a/product/ERP5Type/Constraint/CategoryRelatedMembershipArity.py +++ b/product/ERP5Type/Constraint/CategoryRelatedMembershipArity.py @@ -1,6 +1,7 @@ +# -*- coding: utf-8 -*- ############################################################################## # -# Copyright (c) 2002, 2005 Nexedi SARL and Contributors. All Rights Reserved. +# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved. # Sebastien Robin <seb@nexedi.com> # Courteaud Romain <romain@nexedi.com> # @@ -48,11 +49,17 @@ class CategoryRelatedMembershipArity(CategoryMembershipArity): 'base_category' : ('causality',) 'condition' : 'python: object.getPortalType() == 'Foo', }, + + additional parameters passed to catalog are accepted: + 'filter_parameter': {'simulation_state': ('planned',)}, """ - + def _calculateArity(self, obj): base_category = self.constraint_definition['base_category'] - portal_type = self.constraint_definition['portal_type'] - return len(obj._getRelatedValueList(base_category, - portal_type=portal_type)) + sql_kw = {'portal_type': self.constraint_definition['portal_type'], + '%s_uid' % base_category: obj.getUid()} + filter_parameter = self.constraint_definition.get('filter_parameter', {}) + sql_kw.update(filter_parameter) + portal = obj.getPortalObject() + return len(portal.portal_catalog.unrestrictedSearchResults(**sql_kw))