Commit 71edb726 authored by Sebastien Robin's avatar Sebastien Robin

fixed logical error on the test method, added asPredicate method


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@3066 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 44427f80
...@@ -33,6 +33,9 @@ from Acquisition import aq_base, aq_inner ...@@ -33,6 +33,9 @@ from Acquisition import aq_base, aq_inner
from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
from Products.ERP5Type.Document.Folder import Folder from Products.ERP5Type.Document.Folder import Folder
from Products.ERP5Type.Document import newTempBase from Products.ERP5Type.Document import newTempBase
from Products.CMFCore.utils import getToolByName
from Products.ERP5Type.Utils import convertToUpperCase
from Products.ERP5.Document.Predicate import Predicate from Products.ERP5.Document.Predicate import Predicate
from zLOG import LOG from zLOG import LOG
...@@ -99,34 +102,13 @@ class PredicateGroup(Folder, Predicate): ...@@ -99,34 +102,13 @@ class PredicateGroup(Folder, Predicate):
# Declarative interfaces # Declarative interfaces
__implements__ = ( Interface.Predicate ) __implements__ = ( Interface.Predicate )
# Factory Type Information def test(self, context,**kw):
factory_type_information = \
{ 'id' : portal_type
, 'meta_type' : meta_type
, 'description' : """\
A bank account number holds a collection of numbers
and codes (ex. SWIFT, RIB, etc.) which may be used to
identify a bank account."""
, 'icon' : 'predicate_icon.gif'
, 'product' : 'ERP5'
, 'factory' : 'addPredicateGroup'
, 'immediate_view' : 'predicate_view'
, 'actions' :
( { 'id' : 'view'
, 'name' : 'View'
, 'category' : 'object_view'
, 'action' : 'predicate_view'
, 'permissions' : (
Permissions.View, )
}
,
)
}
def test(self, context):
""" """
A Predicate can be tested on a given context A Predicate can be tested on a given context
We can pass parameters in order to ignore some conditions.
""" """
self = self.asPredicate()
result = 1 result = 1
if not hasattr(aq_base(self), '_identity_criterion'): if not hasattr(aq_base(self), '_identity_criterion'):
self._identity_criterion = {} self._identity_criterion = {}
...@@ -144,7 +126,9 @@ identify a bank account.""" ...@@ -144,7 +126,9 @@ identify a bank account."""
tested_base_category = {} tested_base_category = {}
for c in self.getMembershipCriterionCategoryList(): for c in self.getMembershipCriterionCategoryList():
bc = c.split('/')[0] bc = c.split('/')[0]
if not bc in tested_base_category.keys() : if not bc in tested_base_category.keys() and bc in multimembership_criterion_base_category_list:
tested_base_category[bc] = 1
elif not bc in tested_base_category.keys() and bc in membership_criterion_base_category_list:
tested_base_category[bc] = 0 tested_base_category[bc] = 0
if bc in multimembership_criterion_base_category_list: if bc in multimembership_criterion_base_category_list:
tested_base_category[bc] = tested_base_category[bc] and context.isMemberOf(c) tested_base_category[bc] = tested_base_category[bc] and context.isMemberOf(c)
...@@ -261,5 +245,47 @@ identify a bank account.""" ...@@ -261,5 +245,47 @@ identify a bank account."""
""" """
Returns a temporary Predicate based on the Resource properties Returns a temporary Predicate based on the Resource properties
""" """
return self category_tool = getToolByName(self,'portal_categories')
membership_criterion_category_list = list(self.getMembershipCriterionCategoryList())
multimembership_criterion_base_category_list = list(self.getMultimembershipCriterionBaseCategoryList())
# Look at local categories and make it criterion membership
for category in self.getCategoryList():
base_category = category_tool.getBaseCategoryId(category)
if base_category not in multimembership_criterion_base_category_list:
if base_category in self.getPortalCriterionBaseCategoryList():
multimembership_criterion_base_category_list.append(base_category)
membership_criterion_category_list.append(category)
criterion_property_list = list(self.getCriterionPropertyList())
identity_criterion = getattr(self,'_identity_criterion',{})
range_criterion = getattr(self,'_range_criterion',{})
# Look at local properties and make it criterion properties
for property in self.getPortalMappedValuePropertyList():
if property not in self.getCriterionPropertyList() \
and property in self.propertyIds():
criterion_property_list.append(property)
property_min = property + '_range_min'
property_max = property + '_range_max'
if hasattr(self,'get%s' % convertToUpperCase(property)) \
and self.getProperty(property) is not None:
identity_criterion['property'] = self.getProperty(property)
elif hasattr(self,'get%s' % convertToUpperCase(property_min)):
min = self.getProperty(property_min)
max = self.getProperty(property_max)
range_criterion[property] = (min,max)
# Return a new context with new properties, like if
# we have a predicate with local properties
new_self = self.asContext(
membership_criterion_category=membership_criterion_category_list,
multimembership_criterion_base_category=multimembership_criterion_base_category_list,
criterion_property_list=criterion_property_list,
_identity_criterion=identity_criterion,
_range_criterion=range_criterion)
LOG('PredicateGroup.asPredicate, new_self.getMembershipCriterionCategoryList',0,new_self.getMembershipCriterionCategoryList())
LOG('PredicateGroup.asPredicate, new_self.getMultiMembershipCriterionBaseCategoryList',0,new_self.getMultimembershipCriterionBaseCategoryList())
LOG('PredicateGroup.asPredicate, new_self.__class__',0,new_self.__class__)
return new_self
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment