From 4d9e7fb5e43a7c69d1d9bbe6ec56729254dcff21 Mon Sep 17 00:00:00 2001
From: Vincent Pelletier <vincent@nexedi.com>
Date: Thu, 30 Aug 2007 16:36:39 +0000
Subject: [PATCH] Enforce _generateKeywordDict's kw parameter as being for
 related keys. Add detected missing parameters.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@15965 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/Tool/SimulationTool.py | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/product/ERP5/Tool/SimulationTool.py b/product/ERP5/Tool/SimulationTool.py
index 530b0e5f4c..d1e601e3e5 100644
--- a/product/ERP5/Tool/SimulationTool.py
+++ b/product/ERP5/Tool/SimulationTool.py
@@ -364,7 +364,8 @@ class SimulationTool(BaseTool):
         return self._generateSQLKeywordDictFromKeywordDict(table=table,
                  sql_kw=sql_kw, new_kw=new_kw)
 
-    def _generateSQLKeywordDictFromKeywordDict(self, table='stock', sql_kw={}, new_kw={}):
+    def _generateSQLKeywordDictFromKeywordDict(self, table='stock', sql_kw={},
+                                               new_kw={}):
         sql_kw = sql_kw.copy()
         new_kw = new_kw.copy()
         # Some columns cannot be found automatically, prepend table name to
@@ -379,8 +380,12 @@ class SimulationTool(BaseTool):
         for key, value in column_value_dict.iteritems():
           new_kw['%s.%s' % (table, key)] = value
         # Related keys
-        related_key_dict = new_kw.pop('related_key_dict', {})
-        for key, value in related_key_dict.iteritems():
+        # First, the passthrough (acts as default values)
+        for key, value in new_kw.pop('related_key_dict_passthrough', {})\
+            .iteritems():
+          new_kw[key] = value
+        # Second, calculated values
+        for key, value in new_kw.pop('related_key_dict', {}).iteritems():
           new_kw['%s_%s' % (table, key)] = value
         # Simulation states matched with input and output omission
         def joinQueriesIfNeeded(query_a, query_b, operator):
@@ -440,7 +445,8 @@ class SimulationTool(BaseTool):
         variation_text=None, sub_variation_text=None,
         variation_category=None,
         # uids
-        resource_uid=None, node_uid=None, section_uid=None,
+        resource_uid=None, node_uid=None, section_uid=None, payment_uid=None,
+        mirror_node_uid=None, mirror_section_uid=None,
         # omit input and output
         omit_input=0,
         omit_output=0,
@@ -454,6 +460,8 @@ class SimulationTool(BaseTool):
         group_by_variation=0,
         group_by_movement=0,
         group_by_resource=1,
+        # sort_on
+        sort_on=None,
         # keywords for related keys
         **kw):
       """
@@ -463,12 +471,14 @@ class SimulationTool(BaseTool):
         column. If 0, it also used the mirror_date column.
       """
       new_kw = {}
-      new_kw.update(kw)
       sql_kw = {}
 
       # input and output are used by getTrackingList
       sql_kw['input'] = input
       sql_kw['output'] = output
+      # Add sort_on parameter if defined
+      if sort_on is not None:
+        new_kw['sort_on'] = sort_on
 
       class DictMixIn(dict):
         def set(dictionary, key, value):
@@ -506,9 +516,12 @@ class SimulationTool(BaseTool):
         column_value_dict['mirror_date'] = {'query': [from_date], 'range': 'nlt'}
 
       column_value_dict.set('resource_uid', resource_uid)
+      column_value_dict.set('payment_uid', payment_uid)
       if column_value_dict.set('section_uid', section_uid):
         sql_kw['section_filtered'] = 1
       column_value_dict.set('node_uid', node_uid)
+      column_value_dict.set('mirror_node_uid', mirror_node_uid)
+      column_value_dict.set('mirror_section_uid', mirror_section_uid)
       column_value_dict.setUIDList('resource_uid', resource)
       column_value_dict.setUIDList('aggregate_uid', item)
       column_value_dict.setUIDList('node_uid', node)
@@ -547,6 +560,7 @@ class SimulationTool(BaseTool):
         mirror_section_category_strict_membership)
       
       new_kw['related_key_dict'] = related_key_dict.copy()
+      new_kw['related_key_dict_passthrough'] = kw
 
       #variation_category_uid_list = self._generatePropertyUidList(variation_category)
       #if len(variation_category_uid_list) :
-- 
2.30.9