[Erp5-report] r33774 yusei - in /erp5/trunk/products/ERP5: Document/ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Mar 17 07:04:07 CET 2010


Author: yusei
Date: Wed Mar 17 07:04:05 2010
New Revision: 33774

URL: http://svn.erp5.org?rev=33774&view=rev
Log:
Add comment to the case which trade model line has a fixed quantity
value.
Test both the fixed quantity case and the other case
which trade model line does not have a fixed quantity but return a
fixed quantity value by using a calculation script.

Modified:
    erp5/trunk/products/ERP5/Document/TradeModelLine.py
    erp5/trunk/products/ERP5/tests/testTradeModelLine.py

Modified: erp5/trunk/products/ERP5/Document/TradeModelLine.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/TradeModelLine.py?rev=33774&r1=33773&r2=33774&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/TradeModelLine.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/TradeModelLine.py [utf8] Wed Mar 17 07:04:05 2010
@@ -339,6 +339,10 @@
 
       else:
         # if the quantity is defined, use it
+        #
+        # Is this really good? This looks too implicit.
+        # Using something like "apply this trade model line by force"
+        # option would be better...(yusei)
         modified = 1
         if tmp_movement.getPrice() is None:
           # if price is not defined, it the same as 100 %

Modified: erp5/trunk/products/ERP5/tests/testTradeModelLine.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testTradeModelLine.py?rev=33774&r1=33773&r2=33774&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testTradeModelLine.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testTradeModelLine.py [utf8] Wed Mar 17 07:04:05 2010
@@ -36,6 +36,7 @@
 from Products.CMFCore.utils import getToolByName
 from Products.ERP5.PropertySheet.TradeModelLine import (TARGET_LEVEL_MOVEMENT,
                                                         TARGET_LEVEL_DELIVERY)
+from Products.ERP5Type.tests.utils import createZODBPythonScript
 
 class TestTradeModelLineMixin(TestBPMMixin):
   """Provides methods to implementations sharing similar logic to Trade Model Lines"""
@@ -2560,10 +2561,29 @@
 
     # create other trade model lines.
     # for movement
-    extra_fee = self.createTradeModelLine(trade_condition,
-                                          reference='EXTRA_FEE_A',
-                                          base_contribution_list=['base_amount/total'])
-    extra_fee.edit(quantity=100, price=1, target_level=TARGET_LEVEL_MOVEMENT)
+    extra_fee_a = self.createTradeModelLine(trade_condition,
+                                            reference='EXTRA_FEE_A',
+                                            base_application_list=['base_amount/tax'],
+                                            base_contribution_list=['base_amount/total'])
+    # Use custom script to return a movement which has a fixed value of quantity.
+    # If a fixed quantity value is set to trade model line directly then it is
+    # applied to all the movements without matching base_application category.
+    createZODBPythonScript(
+      self.portal.portal_skins.custom,
+      'TradeModelLine_calculateExtraFeeA',
+      'current_aggregated_amount_list, current_movement, aggregated_movement_list',
+      """\
+current_movement.setQuantity(100)
+return current_movement
+""")
+    extra_fee_a.edit(price=1, target_level=TARGET_LEVEL_MOVEMENT,
+                     calculation_script_id='TradeModelLine_calculateExtraFeeA')
+    # Extra fee b has a fixed quantity so that this trade model line is applied
+    # to all movements by force.
+    extra_fee_b = self.createTradeModelLine(trade_condition,
+                                            reference='EXTRA_FEE_B',
+                                            base_contribution_list=['base_amount/total'])
+    extra_fee_b.edit(quantity=1, price=1, target_level=TARGET_LEVEL_MOVEMENT)
     # for delivery level
     discount = self.createTradeModelLine(trade_condition,
                                          reference='DISCOUNT_B',
@@ -2578,8 +2598,8 @@
       return result
 
     amount_list = trade_condition.getAggregatedAmountList(order)
-    self.assertEqual(5, len(amount_list))
-    self.assertEqual(100 + 100 - 10 + 1000*0.05 + 500*0.05,
+    self.assertEqual(8, len(amount_list))
+    self.assertEqual(100 + 100 + 1 + 1 + 1 - 10 + 1000*0.05 + 500*0.05,
                      getTotalAmount(amount_list))
 
     # Make sure that getAggregatedAmountList of movement uses movement
@@ -2589,32 +2609,41 @@
         if amount.getReference()==reference:
           return amount
     amount_list = trade_condition.getAggregatedAmountList(order_line_1)
-    self.assertEqual(2, len(amount_list))
+    self.assertEqual(3, len(amount_list))
     extra_fee_a_amount = getMovementFromAmountListByReference(amount_list,
                                                               'EXTRA_FEE_A')
+    self.assertEqual([order_line_1],
+                     extra_fee_a_amount.getCausalityValueList())
+    extra_fee_b_amount = getMovementFromAmountListByReference(amount_list,
+                                                              'EXTRA_FEE_B')
     self.assertEqual([],
-                     extra_fee_a_amount.getCausalityValueList())
+                     extra_fee_b_amount.getCausalityValueList())
     tax_amount = getMovementFromAmountListByReference(amount_list,
                                                       'TAX')
     self.assertEqual([order_line_1],
                      tax_amount.getCausalityValueList())
     amount_list = trade_condition.getAggregatedAmountList(order_line_2)
-    self.assertEqual(2, len(amount_list))
+    self.assertEqual(3, len(amount_list))
     extra_fee_a_amount = getMovementFromAmountListByReference(amount_list,
                                                               'EXTRA_FEE_A')
+    self.assertEqual([order_line_2],
+                     extra_fee_a_amount.getCausalityValueList())
+    extra_fee_b_amount = getMovementFromAmountListByReference(amount_list,
+                                                              'EXTRA_FEE_B')
     self.assertEqual([],
-                     extra_fee_a_amount.getCausalityValueList())
+                     extra_fee_b_amount.getCausalityValueList())
     tax_amount = getMovementFromAmountListByReference(amount_list,
                                                       'TAX')
     self.assertEqual([order_line_2],
                      tax_amount.getCausalityValueList())
 
     # Change target level
-    extra_fee.edit(target_level=TARGET_LEVEL_DELIVERY)
+    extra_fee_a.edit(target_level=TARGET_LEVEL_DELIVERY)
+    extra_fee_b.edit(target_level=TARGET_LEVEL_DELIVERY)
     tax.edit(target_level=TARGET_LEVEL_DELIVERY)
     amount_list = trade_condition.getAggregatedAmountList(order)
-    self.assertEqual(3, len(amount_list))
-    self.assertEqual(100 - 10 + 1500*0.05,
+    self.assertEqual(4, len(amount_list))
+    self.assertEqual(100 + 1 - 10 + 1500*0.05,
                      getTotalAmount(amount_list))
 
   def test_tradeModelLineWithRounding(self):




More information about the Erp5-report mailing list