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

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Apr 2 05:44:40 CEST 2010


Author: yusei
Date: Fri Apr  2 05:44:39 2010
New Revision: 34259

URL: http://svn.erp5.org?rev=34259&view=rev
Log:
Fix a bug which occurs on special properties like total_price.
getProperty('total_price') was not rounded.

Modified:
    erp5/trunk/products/ERP5/Document/RoundingModel.py
    erp5/trunk/products/ERP5/tests/testRoundingTool.py

Modified: erp5/trunk/products/ERP5/Document/RoundingModel.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/RoundingModel.py?rev=34259&r1=34258&r2=34259&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/RoundingModel.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/RoundingModel.py [utf8] Fri Apr  2 05:44:39 2010
@@ -90,6 +90,7 @@
     """
     rounding_model = self
     rounded_property_getter_method_name_list = []
+    rounded_property_special_property_name_list = []
 
     if isinstance(document, RoundingProxy):
       temp_document = document._getOriginalDocument()
@@ -120,6 +121,8 @@
         # cannot round the property value so that the return value of getter
         # will be rounded
         rounded_property_getter_method_name_list.append(getter_name)
+        if getter is not None and setter is None:
+          rounded_property_special_property_name_list.append(property_id)
 
     class _RoundingProxy(RoundingProxy):
 
@@ -141,6 +144,13 @@
         else:
           return None
 
+      def getProperty(self, key, *args, **kw):
+        result = original_document.getProperty(key, *args, **kw)
+        if key in rounded_property_special_property_name_list:
+          return rounding_model.roundValue(result)
+        else:
+          return result
+
       def __getattr__(self, name):
         attribute = getattr(original_document, name)
         if getattr(attribute, 'DUMMY_ROUNDING_METHOD_MARK', None) is DUMMY_ROUNDING_METHOD_MARK:

Modified: erp5/trunk/products/ERP5/tests/testRoundingTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testRoundingTool.py?rev=34259&r1=34258&r2=34259&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testRoundingTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testRoundingTool.py [utf8] Fri Apr  2 05:44:39 2010
@@ -71,8 +71,11 @@
 
     # check values of empty line
     self.assertEqual(sale_order_line.getPrice(), None)
+    self.assertEqual(sale_order_line.getProperty('price'), None)
     self.assertEqual(sale_order_line.getQuantity(), 0.0)
+    self.assertEqual(sale_order_line.getProperty('quantity'), 0.0)
     self.assertEqual(sale_order_line.getTotalPrice(), 0.0)
+    self.assertEqual(sale_order_line.getProperty('total_price'), 0.0)
 
     self.login('developer')
     # rounding model dummy never match to sale order line
@@ -105,8 +108,11 @@
     # rounding model does not do anything to empty values like None
     wrapped_line = rounding_tool.getRoundingProxy(sale_order_line, sale_order_line)
     self.assertEqual(wrapped_line.getPrice(), None)
+    self.assertEqual(wrapped_line.getProperty('price'), None)
     self.assertEqual(wrapped_line.getQuantity(), 0.0)
+    self.assertEqual(wrapped_line.getProperty('quantity'), 0.0)
     self.assertEqual(wrapped_line.getTotalPrice(), 0.0)
+    self.assertEqual(wrapped_line.getProperty('total_price'), 0.0)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('price'), 2)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('quantity'), None)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('total_price'), None)
@@ -121,14 +127,20 @@
     self.tic()
 
     self.assertEqual(sale_order_line.getPrice(), 123.456)
+    self.assertEqual(sale_order_line.getProperty('price'), 123.456)
     self.assertEqual(sale_order_line.getQuantity(), 78.91)
+    self.assertEqual(sale_order_line.getProperty('quantity'), 78.91)
     self.assertEqual(sale_order_line.getTotalPrice(), 123.456*78.91)
+    self.assertEqual(sale_order_line.getProperty('total_price'), 123.456*78.91)
 
     # check if price is rounded
     wrapped_line = rounding_tool.getRoundingProxy(sale_order_line, sale_order_line)
     self.assertEqual(wrapped_line.getPrice(), 123.45)
+    self.assertEqual(wrapped_line.getProperty('price'), 123.45)
     self.assertEqual(wrapped_line.getQuantity(), 78.91)
+    self.assertEqual(wrapped_line.getProperty('quantity'), 78.91)
     self.assertEqual(wrapped_line.getTotalPrice(), 123.45*78.91)
+    self.assertEqual(wrapped_line.getProperty('total_price'), 123.45*78.91)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('price'), 2)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('quantity'), None)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('total_price'), None)
@@ -149,8 +161,11 @@
     # if rounding model is not validated, then it is not applied
     wrapped_line = rounding_tool.getRoundingProxy(sale_order_line, sale_order_line)
     self.assertEqual(wrapped_line.getPrice(), 123.45)
+    self.assertEqual(wrapped_line.getProperty('price'), 123.45)
     self.assertEqual(wrapped_line.getQuantity(), 78.91)
+    self.assertEqual(wrapped_line.getProperty('quantity'), 78.91)
     self.assertEqual(wrapped_line.getTotalPrice(), 123.45*78.91)
+    self.assertEqual(wrapped_line.getProperty('total_price'), 123.45*78.91)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('price'), 2)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('quantity'), None)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('total_price'), None)
@@ -165,8 +180,11 @@
     # now, rounding model is validated, so it is applied
     wrapped_line = rounding_tool.getRoundingProxy(sale_order_line, sale_order_line)
     self.assertEqual(wrapped_line.getPrice(), 123.45)
+    self.assertEqual(wrapped_line.getProperty('price'), 123.45)
     self.assertEqual(wrapped_line.getQuantity(), 79.0)
+    self.assertEqual(wrapped_line.getProperty('quantity'), 79.0)
     self.assertEqual(wrapped_line.getTotalPrice(), 123.45*79.0)
+    self.assertEqual(wrapped_line.getProperty('total_price'), 123.45*79.0)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('price'), 2)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('quantity'), 1)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('total_price'), None)
@@ -187,8 +205,11 @@
     # check if price and quantity and total price are rounded
     wrapped_line = rounding_tool.getRoundingProxy(sale_order_line, sale_order_line)
     self.assertEqual(wrapped_line.getPrice(), 123.45)
+    self.assertEqual(wrapped_line.getProperty('price'), 123.45)
     self.assertEqual(wrapped_line.getQuantity(), 79.0)
+    self.assertEqual(wrapped_line.getProperty('quantity'), 79.0)
     self.assertEqual(wrapped_line.getTotalPrice(), 9750.0)
+    self.assertEqual(wrapped_line.getProperty('total_price'), 9750.0)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('price'), 2)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('quantity'), 1)
     self.assertEqual(wrapped_line.getRoundingModelPrecision('total_price'), -1)




More information about the Erp5-report mailing list