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):
"""
Rule for Trade Model
"""
# TODO:
# * override overrideable helpers
# * more usage of Business Process (remove 'if 0' conditions)
# CMF Type Definition
meta_type = 'ERP5 Trade Model Rule'
portal_type = 'Trade Model Rule'
add_permission = Permissions.AddPortalContent
isPortalContent = 1
isRADContent = 1
# Declarative security
security = ClassSecurityInfo()
......@@ -54,58 +47,6 @@ class TradeModelRule(Rule):
def _isBPM(self):
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):
"""Generates list of movements (as dicts), and let parent class to decide
which is to add, modify or delete"""
......@@ -118,18 +59,23 @@ class TradeModelRule(Rule):
context_movement = applied_rule.getParentValue()
for amount in trade_condition.getAggregatedAmountList(context_movement):
# everything static
movement_kw = self._getStaticPropertyDict(context_movement)
# business path specific
business_path_list = business_process.getPathValueList(
trade_phase=amount.getTradePhaseList())
movement_kw.update(**self._getMovementDictByBusinessPath(
context_movement, business_path_list))
if len(business_path_list) == 0:
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
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['quantity'] = amount.getProperty('quantity')
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