[Erp5-report] r28165 - /erp5/trunk/products/ERP5/Document/BPMInvoiceTransactionRule.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Jul 23 17:44:58 CEST 2009


Author: luke
Date: Thu Jul 23 17:44:56 2009
New Revision: 28165

URL: http://svn.erp5.org?rev=28165&view=rev
Log:
 - use BPMRule.expand
 - move logic to prevision list

Modified:
    erp5/trunk/products/ERP5/Document/BPMInvoiceTransactionRule.py

Modified: erp5/trunk/products/ERP5/Document/BPMInvoiceTransactionRule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/BPMInvoiceTransactionRule.py?rev=28165&r1=28164&r2=28165&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/BPMInvoiceTransactionRule.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/BPMInvoiceTransactionRule.py [utf8] Thu Jul 23 17:44:56 2009
@@ -148,9 +148,55 @@
               context_movement.getPrice(0.0)) *
               accounting_rule_cell_line.getQuantity(),
             'price': 1,
-            'force_update': 1,
             'causality_value': business_path,
             }
+        from Products.ERP5Type.Document import newTempSimulationMovement
+        temporary_movement = newTempSimulationMovement(self.getPortalObjec(),
+            '1', **prevision_line)
+        #set asset_price on movement when resource is different from price
+        #currency of the source/destination section
+        if resource is not None:
+          currency = self.restrictedTraverse(resource)
+          currency_url = currency.getRelativeUrl()
+          destination_section = prevision_line['destination_section']
+          if destination_section is not None:
+            destination_currency_url = self.restrictedTraverse(
+                destination_section).getProperty('price_currency', None)
+          else:
+            destination_currency_url = None
+          if destination_currency_url is not None \
+              and currency_url != destination_currency_url:
+            precision = destination_section.getPriceCurrencyValue() \
+                .getQuantityPrecision()
+            destination_exchange_ratio = currency.getPrice(
+                context=temporary_movement.asContext(
+              categories=['price_currency/%s' % destination_currency_url,
+                          'resource/%s' % currency_url],
+              start_date=temporary_movement.getStartDate()))
+            if destination_exchange_ratio is not None:
+              prevision_line.update(destination_total_asset_price=round(
+               (destination_exchange_ratio*
+                applied_rule.getParentValue().getTotalPrice()),precision))
+
+          source_section = prevision_line['source_section']
+          if source_section is not None:
+            source_currency_url = self.restrictedTraverse(
+                'source_section').getProperty('price_currency', None)
+          else:
+            source_currency_url = None
+          if source_currency_url is not None \
+              and currency_url != source_currency_url:
+            precision = source_section.getPriceCurrencyValue() \
+                .getQuantityPrecision()
+            source_exchange_ratio = currency.getPrice(
+                context=temporary_movement.asContext(
+              categories=['price_currency/%s' % source_currency_url,
+                          'resource/%s' % currency_url],
+              start_date=temporary_movement.getStartDate()))
+            if source_exchange_ratio is not None:
+              prevision_line.update(source_total_asset_price = round(
+          source_exchange_ratio*applied_rule.getParentValue().getTotalPrice(),
+              precision))
 
         if accounting_rule_cell_line.hasProperty(
             'generate_prevision_script_id'):
@@ -161,86 +207,6 @@
         prevision_list.append(prevision_line)
     return prevision_list
 
-  security.declareProtected(Permissions.ModifyPortalContent, 'expand')
-  def expand(self, applied_rule, force=0, **kw):
-    """
-    Expands the rule:
-    - generate a list of previsions
-    - compare the prevision with existing children
-      - get the list of existing movements (immutable, mutable, deletable)
-      - compute the difference between prevision and existing (add,
-        modify, remove)
-    - add/modify/remove child movements to match prevision
-    """
-    add_list, modify_dict, \
-        delete_list = self._getCompensatedMovementList(applied_rule,
-        matching_property_list=['resource', 'source',
-               'destination','destination_total_asset_price',
-              'source_total_asset_price'],**kw)
-
-    if len(add_list) or len(modify_dict):
-      pass#import pdb; pdb.set_trace()
-
-    for movement_id in delete_list:
-      applied_rule._delObject(movement_id)
-
-    for movement, prop_dict in modify_dict.items():
-      applied_rule[movement].edit(**prop_dict)
-
-    for movement_dict in add_list:
-      if 'id' in movement_dict.keys():
-        mvmt_id = applied_rule._get_id(movement_dict.pop('id'))
-        new_mvmt = applied_rule.newContent(id=mvmt_id,
-            portal_type=self.movement_type)
-      else:
-        new_mvmt = applied_rule.newContent(portal_type=self.movement_type)
-      new_mvmt.edit(**movement_dict)
-      #set asset_price on movement when resource is different from price
-      #currency of the source/destination section
-      currency = new_mvmt.getResourceValue()
-      if currency is not None:
-        currency_url = currency.getRelativeUrl()
-        dest_section = new_mvmt.getDestinationSectionValue()
-        if dest_section is not None:
-          dest_currency_url = dest_section.getProperty('price_currency', None)
-        else:
-          dest_currency_url = None
-        if dest_currency_url is not None \
-            and currency_url != dest_currency_url:
-          precision = dest_section.getPriceCurrencyValue() \
-              .getQuantityPrecision()
-          dest_exchange_ratio = currency.getPrice(context=new_mvmt.asContext(
-            categories=['price_currency/%s' % dest_currency_url,
-                        'resource/%s' % currency_url],
-            start_date=new_mvmt.getStartDate()))
-          if dest_exchange_ratio is not None:
-            new_mvmt.edit(destination_total_asset_price=round(
-             (dest_exchange_ratio*
-              applied_rule.getParentValue().getTotalPrice()),precision))
-
-        source_section = new_mvmt.getSourceSectionValue()
-        if source_section is not None:
-          source_currency_url = source_section.getProperty(
-              'price_currency', None)
-        else:
-          source_currency_url = None
-        if source_currency_url is not None \
-            and currency_url != source_currency_url:
-          precision = source_section.getPriceCurrencyValue() \
-              .getQuantityPrecision()
-          source_exchange_ratio = currency.getPrice(context=new_mvmt\
-              .asContext(
-            categories=['price_currency/%s' % source_currency_url,
-                        'resource/%s' % currency_url],
-            start_date=new_mvmt.getStartDate()))
-          if source_exchange_ratio is not None:
-            new_mvmt.setSourceTotalAssetPrice(round(
-       source_exchange_ratio*applied_rule.getParentValue().getTotalPrice(),
-            precision))
-
-    # Pass to base class
-    BPMRule.expand(self, applied_rule, force=force, **kw)
-
   # Matrix related
   security.declareProtected( Permissions.ModifyPortalContent,
                               'newCellContent' )




More information about the Erp5-report mailing list