Commit 09c8f83f by Julien Muchembled

Unindent RuleTool to our convention

1 parent cb634656
......@@ -33,107 +33,107 @@ from Products.ERP5Type import Permissions
from Products.ERP5 import _dtmldir
class RuleTool(BaseTool):
"""
The RulesTool implements portal object
transformation policies.
"""
The RulesTool implements portal object
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
a domain and a transformation pattent:
- the portal_type it applies to
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,
security, function, etc.)
- default values for each node of the tree, incl. the root itself
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
each node and eventually update values
- generate accounting movements from a stock movement
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
according to templates. Allows to parametrize modules
such as payroll.
security.declareProtected( Permissions.ManagePortal, 'manage_overview' )
manage_overview = DTMLFile( 'explainRuleTool', _dtmldir )
security.declareProtected(Permissions.AccessContentsInformation,
'searchRuleList')
def searchRuleList(self, movement, tested_base_category_list=None, **kw):
"""
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')
# Declarative Security
security = ClassSecurityInfo()
security.declareProtected( Permissions.ManagePortal, 'manage_overview' )
manage_overview = DTMLFile( 'explainRuleTool', _dtmldir )
security.declareProtected(Permissions.AccessContentsInformation,
'searchRuleList')
def searchRuleList(self, movement, tested_base_category_list=None, **kw):
"""
this method searches for rules, as predicates against movement
- the rule must be in "validated" state
- the rule must be of a known portal type
- Predicate criterions can be used (like start_date_range_min)
"""
portal = self.getPortalObject()
# XXX: For performance reasons, current implementation does not use
# DomainTool._searchPredicateList anymore, because in most cases, it
# does not filter anything before actualling calling Predicate.test()
# Properties must be added on rules to minimize the number of test
# scripts/expressions, like the portal types of the possible parent
# applied rules, so that filtering can be done via the catalog.
# Then it would be possible to use Domain Tool again.
#return portal.domain_tool._searchPredicateList(context=movement,
# 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.
this method searches for rules, as predicates against movement
- the rule must be in "validated" state
- the rule must be of a known portal type
- Predicate criterions can be used (like start_date_range_min)
"""
portal = self.getPortalObject()
# XXX: For performance reasons, current implementation does not use
# DomainTool._searchPredicateList anymore, because in most cases, it
# does not filter anything before actualling calling Predicate.test()
# Properties must be added on rules to minimize the number of test
# scripts/expressions, like the portal types of the possible parent
# applied rules, so that filtering can be done via the catalog.
# Then it would be possible to use Domain Tool again.
#return portal.domain_tool._searchPredicateList(context=movement,
# 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)
return rule_list
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,
tested_base_category_list=tested_base_category_list):
rule_list.append(rule)
return rule_list
InitializeClass(RuleTool)
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!