Commit 7c06e986 authored by Łukasz Nowak's avatar Łukasz Nowak

- reuse all what possible from Rule class

 - TODOs are done
 - remove duplicated properties (add_permission, isPortalContent, isRADContent)
 - use _list as canonical reference for categories


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@28877 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 226f0294
...@@ -36,16 +36,9 @@ class TradeModelRule(Rule): ...@@ -36,16 +36,9 @@ class TradeModelRule(Rule):
""" """
Rule for Trade Model Rule for Trade Model
""" """
# TODO:
# * override overrideable helpers
# * more usage of Business Process (remove 'if 0' conditions)
# CMF Type Definition # CMF Type Definition
meta_type = 'ERP5 Trade Model Rule' meta_type = 'ERP5 Trade Model Rule'
portal_type = 'Trade Model Rule' portal_type = 'Trade Model Rule'
add_permission = Permissions.AddPortalContent
isPortalContent = 1
isRADContent = 1
# Declarative security # Declarative security
security = ClassSecurityInfo() security = ClassSecurityInfo()
...@@ -54,58 +47,6 @@ class TradeModelRule(Rule): ...@@ -54,58 +47,6 @@ class TradeModelRule(Rule):
def _isBPM(self): def _isBPM(self):
return True return True
def _getMovementDictByBusinessPath(self, movement, business_path_list):
"""Sets Business Path's provided values"""
if len(business_path_list) > 1:
raise NotImplementedError('Only one path supported')
business_path = business_path_list[0]
movement_dict = {}
if 0: # XXX use arrow from path (not working currently)
for base_category in \
business_path.getSourceArrowBaseCategoryList() +\
business_path.getDestinationArrowBaseCategoryList():
movement_dict[base_category] = business_path\
.getDefaultAcquiredCategoryMembership(base_category,
context=movement)
print base_category, movement_dict[base_category]
else:
movement_dict['source'] = movement.getSource()
movement_dict['source_section'] = movement.getSourceSection()
movement_dict['source_administration'] = \
movement.getSourceAdministration()
movement_dict['destination'] = movement.getDestination()
movement_dict['destination_section'] = movement.getDestinationSection()
movement_dict['destination_administration'] = \
movement.getDestinationAdministration()
if business_path.getQuantity():
movement_dict['quantity'] = business_path.getQuantity()
elif business_path.getEfficiency():
movement_dict['quantity'] = movement.getQuantity() * \
business_path.getEfficiency()
else:
movement_dict['quantity'] = movement.getQuantity()
if 0: # XXX use path date calculation system
movement_dict['start_date'] = business_path \
.getExpectedStartDate(movement)
movement_dict['stop_date'] = business_path.getExpectedStopDate(movement)
else:
movement_dict['start_date'] = movement.getStartDate()
movement_dict['stop_date'] = movement.getStopDate()
movement_dict['causality_value'] = business_path
return movement_dict
def _getStaticPropertyDict(self, context_movement):
movement_kw = {}
for prop in self.getExpandablePropertyList():
movement_kw[prop] = context_movement.getProperty(prop)
return movement_kw
def _generatePrevisionList(self, applied_rule, **kw): def _generatePrevisionList(self, applied_rule, **kw):
"""Generates list of movements (as dicts), and let parent class to decide """Generates list of movements (as dicts), and let parent class to decide
which is to add, modify or delete""" which is to add, modify or delete"""
...@@ -118,18 +59,23 @@ class TradeModelRule(Rule): ...@@ -118,18 +59,23 @@ class TradeModelRule(Rule):
context_movement = applied_rule.getParentValue() context_movement = applied_rule.getParentValue()
for amount in trade_condition.getAggregatedAmountList(context_movement): for amount in trade_condition.getAggregatedAmountList(context_movement):
# everything static
movement_kw = self._getStaticPropertyDict(context_movement)
# business path specific # business path specific
business_path_list = business_process.getPathValueList( business_path_list = business_process.getPathValueList(
trade_phase=amount.getTradePhaseList()) trade_phase=amount.getTradePhaseList())
movement_kw.update(**self._getMovementDictByBusinessPath( if len(business_path_list) == 0:
context_movement, business_path_list)) raise ValueError('Cannot find Business Path')
if len(business_path_list) != 1:
raise NotImplementedError('Only one Business Path is supported')
business_path = business_path_list[0]
movement_kw = self._getExpandablePropertyDict(applied_rule,
context_movement, business_path)
# rule specific # rule specific
movement_kw['price'] = amount.getProperty('price') movement_kw['price'] = amount.getProperty('price')
movement_kw['resource'] = amount.getProperty('resource') movement_kw['resource_list'] = amount.getProperty('resource_list')
movement_kw['reference'] = amount.getProperty('reference') movement_kw['reference'] = amount.getProperty('reference')
movement_kw['quantity'] = amount.getProperty('quantity') movement_kw['quantity'] = amount.getProperty('quantity')
movement_kw['base_application_list'] = amount.getProperty( movement_kw['base_application_list'] = amount.getProperty(
......
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