Commit 09c8f83f authored by Julien Muchembled's avatar Julien Muchembled

Unindent RuleTool to our convention

parent cb634656
...@@ -33,107 +33,107 @@ from Products.ERP5Type import Permissions ...@@ -33,107 +33,107 @@ from Products.ERP5Type import Permissions
from Products.ERP5 import _dtmldir from Products.ERP5 import _dtmldir
class RuleTool(BaseTool): class RuleTool(BaseTool):
""" """
The RulesTool implements portal object The RulesTool implements portal object
transformation policies. transformation policies.
An object transformation template is defined by
a domain and a transformation pattent:
The domain is defined as:
- the meta_type it applies to
An object transformation template is defined by - the portal_type it applies to
a domain and a transformation pattent:
The domain is defined as: - the conditions of application (category membership, value range,
security, function, etc.)
- the meta_type it applies to The transformation template is defined as:
- the portal_type it applies to - a tree of portal_types starting on the object itself
- the conditions of application (category membership, value range, - default values for each node of the tree, incl. the root itself
security, function, etc.)
The transformation template is defined as: When a transformation is triggered, it will check the existence of
each node and eventually update values
- a tree of portal_types starting on the object itself Transformations are very similar to XSLT in the XML world.
- default values for each node of the tree, incl. the root itself Examples of applications:
When a transformation is triggered, it will check the existence of - generate accounting movements from a stock movement
each node and eventually update values
Transformations are very similar to XSLT in the XML world. - generate a birthday event from a person
Examples of applications: ERP5 main application : generate submovements from movements
according to templates. Allows to parametrize modules
such as payroll.
- generate accounting movements from a stock movement """
id = 'portal_rules'
meta_type = 'ERP5 Rule Tool'
portal_type = 'Rule Tool'
allowed_types = ( 'ERP5 Order Rule', 'ERP5 Transformation Rule',
'ERP5 Zero Stock Rule', 'ERP5 Delivery Rule',
'ERP5 Amortisation Rule')
- generate a birthday event from a person # Declarative Security
security = ClassSecurityInfo()
ERP5 main application : generate submovements from movements security.declareProtected( Permissions.ManagePortal, 'manage_overview' )
according to templates. Allows to parametrize modules manage_overview = DTMLFile( 'explainRuleTool', _dtmldir )
such as payroll.
security.declareProtected(Permissions.AccessContentsInformation,
'searchRuleList')
def searchRuleList(self, movement, tested_base_category_list=None, **kw):
""" """
id = 'portal_rules' this method searches for rules, as predicates against movement
meta_type = 'ERP5 Rule Tool'
portal_type = 'Rule Tool' - the rule must be in "validated" state
allowed_types = ( 'ERP5 Order Rule', 'ERP5 Transformation Rule', - the rule must be of a known portal type
'ERP5 Zero Stock Rule', 'ERP5 Delivery Rule', - Predicate criterions can be used (like start_date_range_min)
'ERP5 Amortisation Rule') """
portal = self.getPortalObject()
# Declarative Security
security = ClassSecurityInfo() # XXX: For performance reasons, current implementation does not use
# DomainTool._searchPredicateList anymore, because in most cases, it
security.declareProtected( Permissions.ManagePortal, 'manage_overview' ) # does not filter anything before actualling calling Predicate.test()
manage_overview = DTMLFile( 'explainRuleTool', _dtmldir ) # Properties must be added on rules to minimize the number of test
# scripts/expressions, like the portal types of the possible parent
security.declareProtected(Permissions.AccessContentsInformation, # applied rules, so that filtering can be done via the catalog.
'searchRuleList') # Then it would be possible to use Domain Tool again.
def searchRuleList(self, movement, tested_base_category_list=None, **kw): #return portal.domain_tool._searchPredicateList(context=movement,
""" # tested_base_category_list=tested_base_category_list,
this method searches for rules, as predicates against movement # portal_type=portal.getPortalRuleTypeList(),
# validation_state="validated", **kw) #XXX "validated" is hardcoded
- the rule must be in "validated" state
- the rule must be of a known portal type # Most rules are only configured through their test_method_id,
- Predicate criterions can be used (like start_date_range_min) # so filter out them quickly before calling Predicate.test()
""" rule_list = []
portal = self.getPortalObject() for rule in portal.portal_catalog.unrestrictedSearchResults(
portal_type=portal.getPortalRuleTypeList(),
# XXX: For performance reasons, current implementation does not use validation_state="validated", **kw): #XXX "validated" is hardcoded
# DomainTool._searchPredicateList anymore, because in most cases, it rule = rule.getObject()
# does not filter anything before actualling calling Predicate.test() try:
# Properties must be added on rules to minimize the number of test for test_method_id in rule.getTestMethodIdList():
# scripts/expressions, like the portal types of the possible parent if test_method_id == 'Rule_testFalse' or \
# applied rules, so that filtering can be done via the catalog. not getattr(movement, test_method_id)(rule):
# Then it would be possible to use Domain Tool again. break
#return portal.domain_tool._searchPredicateList(context=movement, else:
# tested_base_category_list=tested_base_category_list,
# portal_type=portal.getPortalRuleTypeList(),
# validation_state="validated", **kw) #XXX "validated" is hardcoded
# Most rules are only configured through their test_method_id,
# so filter out them quickly before calling Predicate.test()
rule_list = []
for rule in portal.portal_catalog.unrestrictedSearchResults(
portal_type=portal.getPortalRuleTypeList(),
validation_state="validated", **kw): #XXX "validated" is hardcoded
rule = rule.getObject()
try:
for test_method_id in rule.getTestMethodIdList():
if test_method_id == 'Rule_testFalse' or \
not getattr(movement, test_method_id)(rule):
break
else:
if rule.test(movement,
tested_base_category_list=tested_base_category_list):
rule_list.append(rule)
except Exception:
# Maybe the script is old (= it takes no argument). Or we should not
# have called it (= rule would have been excluded before, depending
# on other criterions). Or there may be a bug.
# We don't know why it failed so let Predicate.test() do the work.
if rule.test(movement, if rule.test(movement,
tested_base_category_list=tested_base_category_list): tested_base_category_list=tested_base_category_list):
rule_list.append(rule) rule_list.append(rule)
except Exception:
return rule_list # Maybe the script is old (= it takes no argument). Or we should not
# have called it (= rule would have been excluded before, depending
# on other criterions). Or there may be a bug.
# We don't know why it failed so let Predicate.test() do the work.
if rule.test(movement,
tested_base_category_list=tested_base_category_list):
rule_list.append(rule)
return rule_list
InitializeClass(RuleTool) InitializeClass(RuleTool)
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