[Erp5-report] r24353 - /erp5/trunk/products/ERP5/Document/InvoiceTransactionRule.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Oct 28 12:59:17 CET 2008


Author: mame
Date: Tue Oct 28 12:59:14 2008
New Revision: 24353

URL: http://svn.erp5.org?rev=24353&view=rev
Log:
File modified so that prices get converted when the resource is different from the price currency of the destination/source section

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

Modified: erp5/trunk/products/ERP5/Document/InvoiceTransactionRule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/InvoiceTransactionRule.py?rev=24353&r1=24352&r2=24353&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/InvoiceTransactionRule.py (original)
+++ erp5/trunk/products/ERP5/Document/InvoiceTransactionRule.py Tue Oct 28 12:59:14 2008
@@ -118,7 +118,6 @@
             # XXX this happen in many order, so this log is probably useless
             LOG("InvoiceTransactionRule", PROBLEM,
                 "expanding %s: without resource" % applied_rule.getPath())
-
         # XXX Harcoded list
         prevision_line = {
             'id': accounting_rule_cell_line.getId(),
@@ -159,7 +158,6 @@
           prevision_line.update(getattr(context_movement,
                                         generate_prevision_script_id)(prevision_line))
         prevision_list.append(prevision_line)
-
     return prevision_list
 
   security.declareProtected(Permissions.ModifyPortalContent, 'expand')
@@ -175,7 +173,9 @@
     """
     add_list, modify_dict, \
         delete_list = self._getCompensatedMovementList(applied_rule,
-        matching_property_list=['resource', 'source', 'destination'], **kw)
+        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()
@@ -194,7 +194,53 @@
       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 new_mvmt.AccountingTransaction_isDestinationCurrencyConvertible():
+        precision = \
+         new_mvmt.getDestinationSectionValue().getPriceCurrencyValue().\
+                      getQuantityPrecision()
+	dest_exchange_ratio = \
+          currency.getPrice(context=new_mvmt.asContext(
+                      categories=['price_currency/currency_module/%s' %
+               new_mvmt.getDestinationSectionValue().getPriceCurrencyId(),
+	      'resource/%s'% new_mvmt.getResourceRelativeUrl()],
+              start_date=new_mvmt.getStopDate()))
+	if dest_exchange_ratio is None:
+	  raise AssertionError
+        new_mvmt.edit(destination_total_asset_price=round(
+             (dest_exchange_ratio*
+           applied_rule.getParentValue().getTotalPrice()),precision))
+        relative_parent_movement = applied_rule.getParentValue()
+	relative_parent_movement.edit(destination_total_asset_price=\
+                 (new_mvmt.getDestinationTotalAssetPrice()))
+	relative_applied_rule = relative_parent_movement.getParentValue()
+	parent_movement = relative_applied_rule.getParentValue()
+	parent_movement.edit(destination_total_asset_price=\
+	               new_mvmt.getDestinationTotalAssetPrice())  
+      if new_mvmt.AccountingTransaction_isSourceCurrencyConvertible():
+	precision = \
+         new_mvmt.getSourceSectionValue().getPriceCurrencyValue().\
+                      getQuantityPrecision()
+	source_exchange_ratio = currency.getPrice(context=new_mvmt.asContext(
+        categories=['price_currency/currency_module/%s' %
+        new_mvmt.getSourceSectionValue().getPriceCurrencyId(),
+	    'resource/%s'%
+            new_mvmt.getResourceRelativeUrl()],
+            start_date=new_mvmt.getStartDate()))
+	if source_exchange_ratio is None:
+	  raise AssertionError
+        new_mvmt.setSourceTotalAssetPrice(round(
+    (source_exchange_ratio*applied_rule.getParentValue().getTotalPrice()),
+            precision))
+	relative_parent_movement = applied_rule.getParentValue()
+	relative_parent_movement.setSourceTotalAssetPrice\
+                     (new_mvmt.getSourceTotalAssetPrice())
+	relative_applied_rule = relative_parent_movement.getParentValue()
+	parent_movement = relative_applied_rule.getParentValue()
+	parent_movement.setSourceTotalAssetPrice\
+	               (new_mvmt.getSourceTotalAssetPrice())
     # Pass to base class
     Rule.expand(self, applied_rule, force=force, **kw)
   




More information about the Erp5-report mailing list