[Erp5-report] r32577 kazuhiko - /erp5/trunk/products/ERP5/Document/PaymentRule.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Feb 16 07:38:39 CET 2010
Author: kazuhiko
Date: Tue Feb 16 07:38:38 2010
New Revision: 32577
URL: http://svn.erp5.org?rev=32577&view=rev
Log:
rewritten from scratch based on erp5_simulation's experimental PaymentRule.py.
Modified:
erp5/trunk/products/ERP5/Document/PaymentRule.py
Modified: erp5/trunk/products/ERP5/Document/PaymentRule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/PaymentRule.py?rev=32577&r1=32576&r2=32577&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/PaymentRule.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/PaymentRule.py [utf8] Tue Feb 16 07:38:38 2010
@@ -52,115 +52,44 @@
receivable_account_type_list = ('asset/receivable', )
payable_account_type_list = ('liability/payable', )
+ def _generatePrevisionList(self, applied_rule, **kw):
+ """
+ Generate a list of dictionaries, that contain calculated content of
+ current Simulation Movements in applied rule.
+ based on its context (parent movement, delivery, configuration ...)
- def _getPaymentConditionList(self, movement):
- """Returns payment conditions for this movement.
+ These previsions are returned as dictionaries.
"""
- while 1:
- delivery_movement = movement.getDeliveryValue()
- if delivery_movement is not None:
- explanation = delivery_movement.getExplanationValue()
- payment_condition_list = explanation.contentValues(
- filter=dict(portal_type='Payment Condition'))
- if payment_condition_list:
- return payment_condition_list
+ prevision_dict_list = []
+ for input_movement, business_path in self \
+ ._getInputMovementAndPathTupleList(applied_rule):
+ if business_path is None:
+ # since Payment Rule does not know what to do without business
+ # path, we return empty list here and creates no simulation
+ # movements.
+ return []
+ # Since we need to consider business_path only for bank movement,
+ # not for payable movement, we pass None as business_path here.
+ kw = self._getExpandablePropertyDict(applied_rule, None,
+ business_path)
+ kw['start_date'] = business_path.getExpectedStartDate(input_movement)
+ kw['stop_date'] = business_path.getExpectedStopDate(input_movement)
+ quantity = business_path.getExpectedQuantity(input_movement)
- # 'order' category is deprecated. it is kept for compatibility.
- order_movement = movement.getOrderValue()
- if order_movement is not None:
- explanation = order_movement.getExplanationValue()
- payment_condition_list = explanation.contentValues(
- filter=dict(portal_type='Payment Condition'))
- if payment_condition_list:
- return payment_condition_list
+ # one for payable
+ payable_dict = kw.copy()
+ payable_dict.update(dict(quanity=-quantity))
+ prevision_dict_list.append(payable_dict)
+ # one for bank
+ bank_dict = kw.copy()
+ bank_dict.update(dict(quanity=quantity,
+ source=business_path.getSource(),
+ destination=business_path.getDestination()))
+ prevision_dict_list.append(bank_dict)
+ return prevision_dict_list
- movement = movement.getParentValue().getParentValue()
- if movement.getPortalType() != self.movement_type:
- LOG('ERP5', INFO, "PaymentRule couldn't find payment condition")
- return []
-
- def _createMovementsForPaymentCondition(self,
- applied_rule, payment_condition):
- """Create simulation movements for this payment condition.
- """
- simulation_movement = applied_rule.getParentValue()
- date = payment_condition.TradeCondition_getDueDate()
-
- if payment_condition.getQuantity():
- quantity = payment_condition.getQuantity()
- else:
- ratio = payment_condition.getEfficiency(1)
- quantity = simulation_movement.getQuantity() * ratio
-
- edit_dict = dict(
- causality_value=payment_condition,
- payment_mode=payment_condition.getPaymentMode(),
- source=simulation_movement.getSource(),
- source_section=simulation_movement.getSourceSection(),
- source_payment=payment_condition.getSourcePayment() or
- simulation_movement.getSourcePayment(),
- destination=simulation_movement.getDestination(),
- destination_section=simulation_movement.getDestinationSection(),
- destination_payment=payment_condition.getDestinationPayment() or
- simulation_movement.getDestinationPayment(),
- resource=simulation_movement.getResource(),
- start_date=date,
- price=1,
- quantity= - quantity,)
-
- applied_rule.newContent( **edit_dict )
-
- edit_dict['source'] = self.getSourcePayment()
- edit_dict['destination'] = self.getDestinationPayment()
- edit_dict['quantity'] = - edit_dict['quantity']
- applied_rule.newContent( **edit_dict )
-
-
security.declareProtected(Permissions.ModifyPortalContent, 'expand')
def expand(self, applied_rule, **kw):
"""Expands the current movement downward.
"""
- my_parent_movement = applied_rule.getParentValue()
- # generate for source
- bank_account = self.getDestinationPaymentValue(
- portal_type='Account')
- assert bank_account is not None
-
- for payment_condition in self._getPaymentConditionList(
- my_parent_movement):
- payment_condition_url = payment_condition.getRelativeUrl()
- # look for a movement for this payment condition:
- corresponding_movement_list = []
- for simulation_movement in applied_rule.contentValues():
- if simulation_movement.getCausality() == payment_condition_url:
- corresponding_movement_list.append(simulation_movement)
- if not corresponding_movement_list:
- self._createMovementsForPaymentCondition(applied_rule,
- payment_condition)
- else:
- # TODO: update corresponding_movement_list
- pass
-
- #Rule.expand(self, applied_rule, **kw)
-
- def test(self, context, tested_base_category_list=None):
- """Test if this rule apply.
- """
-
- # XXX for now disable this rule
- return False
-
- if context.getParentValue()\
- .getSpecialiseValue().getPortalType() == 'Payment Rule':
- return False
-
- for account in ( context.getSourceValue(portal_type='Account'),
- context.getDestinationValue(portal_type='Account')):
- if account is not None:
- account_type = account.getAccountType()
- if account_type in self.receivable_account_type_list or \
- account_type in self.payable_account_type_list:
- return True
-
- return False
-
+ return Rule._expand(self, applied_rule, **kw)
More information about the Erp5-report
mailing list