[Erp5-report] r36232 jerome - in /erp5/trunk/products/ERP5: Tool/ tests/
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Jun 10 16:54:00 CEST 2010
Author: jerome
Date: Thu Jun 10 16:53:59 2010
New Revision: 36232
URL: http://svn.erp5.org?rev=36232&view=rev
Log:
Support related keys in group_by= parameters.
If group_by= is passed, default group by parameters will not be applied.
Modified:
erp5/trunk/products/ERP5/Tool/SimulationTool.py
erp5/trunk/products/ERP5/tests/testInventoryAPI.py
Modified: erp5/trunk/products/ERP5/Tool/SimulationTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/SimulationTool.py?rev=36232&r1=36231&r2=36232&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/SimulationTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Tool/SimulationTool.py [utf8] Thu Jun 10 16:53:59 2010
@@ -426,15 +426,24 @@ class SimulationTool(BaseTool):
# Some columns cannot be found automatically, prepend table name to
# avoid ambiguities.
- # Group-by expression
+ # Group-by expression (eg. group_by=['node_uid'])
group_by = new_kw.pop('group_by', [])
- column_group_by = new_kw.pop('column_group_by', [])
+ # group by from stock table (eg. group_by_node=True)
+ column_group_by = new_kw.pop('column_group_by', [])
if column_group_by:
group_by.extend(['%s.%s' % (table, x) for x in column_group_by])
+
+ # group by from related keys columns (eg. group_by_node_category=True)
related_key_group_by = new_kw.pop('related_key_group_by', [])
if related_key_group_by:
group_by.extend(['%s_%s' % (table, x) for x in related_key_group_by])
+
+ # group by involving a related key (eg. group_by=['product_line_uid'])
+ related_key_dict_passthrough_group_by = new_kw.get(
+ 'related_key_dict_passthrough', dict()).pop('group_by', [])
+ group_by.extend(related_key_dict_passthrough_group_by)
+
if group_by:
new_kw['group_by'] = group_by
@@ -962,6 +971,7 @@ class SimulationTool(BaseTool):
group_by_section_category_strict_membership=0,
group_by_resource=None,
movement_list_mode=0,
+ group_by=None,
**ignored):
"""
Set defaults group_by parameters
@@ -979,7 +989,7 @@ class SimulationTool(BaseTool):
group by statements in SQL).
"""
new_group_by_dict = {}
- if not ignore_group_by:
+ if not ignore_group_by and group_by is None:
if group_by_node or group_by_mirror_node or group_by_section or \
group_by_project or group_by_function or \
group_by_mirror_section or group_by_payment or \
Modified: erp5/trunk/products/ERP5/tests/testInventoryAPI.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testInventoryAPI.py?rev=36232&r1=36231&r2=36232&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testInventoryAPI.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testInventoryAPI.py [utf8] Thu Jun 10 16:53:59 2010
@@ -187,6 +187,7 @@ class InventoryAPITestCase(ERP5TypeTestC
'group/level1/level2',
'group/anotherlevel',
'product_line/level1/level2',
+ 'product_line/anotherlevel',
'function/function1',
'function/function1/function2',
# we create a huge group category for consolidation tests
@@ -877,6 +878,37 @@ class TestInventoryList(InventoryAPITest
self.assertEquals([r for r in inventory_list
if r.date.year() == 2001][0].inventory, 1)
+ def test_GroupByRelatedKey(self):
+ getInventoryList = self.getSimulationTool().getInventoryList
+ self._makeMovement(quantity=2, product_line='level1')
+ self._makeMovement(quantity=3, product_line='level1',
+ destination_value=self.other_node)
+ self._makeMovement(quantity=11, product_line='anotherlevel')
+ # note that grouping by related key only make sense if you group by strict
+ # memebership related keys
+ inventory_list = getInventoryList(node_uid=(self.node.getUid(),
+ self.other_node.getUid()),
+ ignore_group_by=True,
+ group_by=('strict_product_line_uid',))
+ self.assertEquals(2, len(inventory_list))
+ self.assertEquals([r for r in inventory_list
+ if r.getObject().getProductLine() == 'level1'][0].inventory, 5)
+ self.assertEquals([r for r in inventory_list
+ if r.getObject().getProductLine() == 'anotherlevel'][0].inventory, 11)
+
+ inventory_list = getInventoryList(node_uid=(self.node.getUid(),
+ self.other_node.getUid()),
+ group_by_node=True,
+ group_by=('strict_product_line_uid',))
+ self.assertEquals(3, len(inventory_list))
+ self.assertEquals([r for r in inventory_list
+ if r.getObject().getProductLine() == 'level1'
+ and r.node_uid == self.node.getUid()][0].inventory, 2)
+ self.assertEquals([r for r in inventory_list
+ if r.getObject().getProductLine() == 'level1'
+ and r.node_uid == self.other_node.getUid()][0].inventory, 3)
+ self.assertEquals([r for r in inventory_list
+ if r.getObject().getProductLine() == 'anotherlevel'][0].inventory, 11)
def test_OmitInputOmitOutput(self):
getInventoryList = self.getSimulationTool().getInventoryList
@@ -1719,8 +1751,8 @@ class TestMovementHistoryList(InventoryA
# group by explanation and resource
mvt_history_list = getMovementHistoryList(node_uid=self.node.getUid(),
- group_by=('explanation_uid',
- 'resource_uid'),
+ group_by_resource=True,
+ group_by=('explanation_uid',),
sort_on=(('stock.date', 'ASC'),))
self.assertEquals(2, len(mvt_history_list))
More information about the Erp5-report
mailing list