[Erp5-report] r33706 yusei - /erp5/trunk/products/ERP5/tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Mar 15 04:52:04 CET 2010


Author: yusei
Date: Mon Mar 15 04:52:02 2010
New Revision: 33706

URL: http://svn.erp5.org?rev=33706&view=rev
Log:
Add test_usecase6 and make sure delivery level amounts can be treated
as movements by movement level trade model lines.

Modified:
    erp5/trunk/products/ERP5/tests/testComplexTradeModelLineUseCase.py

Modified: erp5/trunk/products/ERP5/tests/testComplexTradeModelLineUseCase.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testComplexTradeModelLineUseCase.py?rev=33706&r1=33705&r2=33706&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testComplexTradeModelLineUseCase.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testComplexTradeModelLineUseCase.py [utf8] Mon Mar 15 04:52:02 2010
@@ -32,7 +32,7 @@
 
 from Products.ERP5Type.tests.utils import createZODBPythonScript
 from Products.ERP5.tests.testTradeModelLine import TestTradeModelLineMixin
-from Products.ERP5.PropertySheet.TradeModelLine import TARGET_LEVEL_DELIVERY
+from Products.ERP5.PropertySheet.TradeModelLine import TARGET_LEVEL_DELIVERY, TARGET_LEVEL_MOVEMENT
 
 class TestComplexTradeModelLineUseCase(TestTradeModelLineMixin):
   """This test provides several complex use cases which are seen in the normal
@@ -53,13 +53,17 @@
     return trade_condition
 
   def getAmount(self, order, reference, return_object=False):
+    amount_list = []
     trade_condition = order.getSpecialiseValue()
-    for movement in trade_condition.getAggregatedAmountList(order):
-      if movement.getReference() == reference:
-        if return_object == True:
-          return movement
-        else:
-          return movement.getTotalPrice()
+    for amount in trade_condition.getAggregatedAmountList(order):
+      if amount.getReference() == reference:
+        amount_list.append(amount)
+    if return_object == True:
+      return amount_list
+    elif amount_list:
+      return sum([amount.getTotalPrice(0) for amount in amount_list])
+    else:
+      return None
 
   def appendBaseContributionCategory(self, document, new_category):
     base_contribution_value_list = document.getBaseContributionValueList()
@@ -121,6 +125,7 @@
     self.discount_amount_of_non_vat_taxable = base_amount.newContent(id='discount_amount_of_non_vat_taxable')
     self.discount_amount_of_vat_taxable = base_amount.newContent(id='discount_amount_of_vat_taxable')
     self.vat_taxable = base_amount.newContent(id='vat_taxable')
+    self.additional_charge = base_amount.newContent('additional_charge')
     self.total_price_without_vat = base_amount.newContent(id='total_price_without_vat')
     self.total_price_of_vat_taxable = base_amount.newContent(id='total_price_of_vat_taxable')
     self.discount_amount = base_amount.newContent(id='discount_amount')
@@ -143,7 +148,8 @@
 
     # create services
     self.service_vat = portal.service_module.newContent(title='VAT')
-    self.service_discount = portal.service_module.newContent(title='VAT')
+    self.service_discount = portal.service_module.newContent(title='DISCOUNT')
+    self.service_shipping_fee = portal.service_module.newContent(title='SHIPPING FEE')
 
     self.stepTic()
 
@@ -189,7 +195,8 @@
       trade_phase=None,
       base_application_value_list=[self.discount_amount_of_non_vat_taxable,
                                    self.discount_amount_of_vat_taxable,
-                                   self.total_price_of_ordered_items],
+                                   self.total_price_of_ordered_items,
+                                   self.additional_charge],
       base_contribution_value_list=[self.total_price_without_vat])
     self.trade_condition.newContent(
       portal_type='Trade Model Line',
@@ -533,9 +540,12 @@
     self.stepTic()
     
     # check again
-    one_free_poster_amount = self.getAmount(order,
-                                            '3CD_OR_1DVD_GET_1_POSTER_FREE',
-                                            return_object=True)
+    one_free_poster_amount_list = self.getAmount(
+      order,
+      '3CD_OR_1DVD_GET_1_POSTER_FREE',
+      return_object=True)
+    self.assertEqual(len(one_free_poster_amount_list), 1)
+    one_free_poster_amount = one_free_poster_amount_list[0]
     self.assertEqual(one_free_poster_amount.getTotalPrice(), 0)
     self.assertEqual(one_free_poster_amount.getQuantity(), 1)
     self.assertEqual(one_free_poster_amount.getPrice(), 0)
@@ -554,9 +564,11 @@
     self.stepTic()
 
     # check again
-    one_free_poster_amount = self.getAmount(order,
+    one_free_poster_amount_list = self.getAmount(order,
                                             '3CD_OR_1DVD_GET_1_POSTER_FREE',
                                             return_object=True)
+    self.assertEqual(len(one_free_poster_amount_list), 1)
+    one_free_poster_amount = one_free_poster_amount_list[0]
     self.assertEqual(one_free_poster_amount.getTotalPrice(), 0)
     self.assertEqual(one_free_poster_amount.getQuantity(), 1)
     self.assertEqual(one_free_poster_amount.getPrice(), 0)
@@ -665,6 +677,73 @@
     self.assertEqual(self.getAmount(order, 'TOTAL_PRICE_WITHOUT_VAT'), 16550)
     self.assertEqual(self.getAmount(order, 'VAT_AMOUNT'), 827.5)
     self.assertEqual(self.getAmount(order, 'TOTAL_PRICE_WITH_VAT'), 17377.5)
+
+  def test_usecase6(self):
+    """
+    Use case 6 : Add a shipping fee by TradeModelLine and VAT is charged to
+    this fee.
+    """
+    order = self.createOrder()
+    order.edit(specialise_value=self.trade_condition)
+    order.Order_applyTradeCondition(order.getSpecialiseValue())
+    order.newContent(portal_type='Trade Model Line',
+                     reference='SHIPPING_FEE',
+                     resource_value=self.service_shipping_fee,
+                     price=1,
+                     quantity=500,
+                     efficiency=1,
+                     target_level=TARGET_LEVEL_DELIVERY,
+                     create_line=True,
+                     trade_phase=None,
+                     base_application_value_list=[],
+                     base_contribution_value_list=[self.additional_charge,
+                                                   self.vat_taxable])
+
+    order_line_1 = order.newContent(portal_type=self.order_line_portal_type,
+                                    resource_value=self.movie_dvd_1,
+                                    quantity=1,
+                                    price=3000)
+    order_line_2 = order.newContent(portal_type=self.order_line_portal_type,
+                                    resource_value=self.movie_dvd_2,
+                                    quantity=1,
+                                    price=1000)
+
+    self.stepTic()
+
+    # check amounts
+    self.assertEqual(self.getAmount(order, 'TOTAL_PRICE_WITHOUT_VAT'), 4500)
+    self.assertEqual(self.getAmount(order, 'VAT_AMOUNT'), 225)
+    self.assertEqual(
+      len(self.getAmount(order, 'VAT_AMOUNT', return_object=True)),
+      1)
+    self.assertEqual(self.getAmount(order, 'TOTAL_PRICE_WITH_VAT'), 4725)
+
+    # change trade model line and calculate vat price per movement
+    order.newContent(portal_type='Trade Model Line',
+                     title='VAT Amount',
+                     reference='VAT_AMOUNT',
+                     resource_value=self.service_vat,
+                     price=0.05,
+                     quantity=None,
+                     efficiency=1,
+                     target_level=TARGET_LEVEL_MOVEMENT,
+                     create_line=True,
+                     trade_phase_value=self.portal.portal_categories.trade_phase.default.invoicing,
+                     base_application_value_list=[self.discount_amount_of_vat_taxable,
+                                                  self.vat_taxable],
+                     base_contribution_value_list=[self.vat_amount])
+
+    self.stepTic()
+
+    # check amounts again
+    self.assertEqual(self.getAmount(order, 'TOTAL_PRICE_WITHOUT_VAT'), 4500)
+    self.assertEqual(self.getAmount(order, 'VAT_AMOUNT'), 225)
+    self.assertEqual(
+      len(self.getAmount(order, 'VAT_AMOUNT', return_object=True)),
+      3)
+    self.assertEqual(self.getAmount(order, 'TOTAL_PRICE_WITH_VAT'), 4725)
+
+
 class TestComplexTradeModelLineUseCaseSale(TestComplexTradeModelLineUseCase):
   order_portal_type = 'Sale Order'
   order_line_portal_type = 'Sale Order Line'




More information about the Erp5-report mailing list