[Erp5-report] r15104 - /erp5/trunk/products/ERP5/Tool/SimulationTool.py

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Jul 2 15:16:36 CEST 2007


Author: romain
Date: Mon Jul  2 15:16:36 2007
New Revision: 15104

URL: http://svn.erp5.org?rev=15104&view=rev
Log:
Add omit_mirror_date parameter to _generateSQLKeywordDict

Modified:
    erp5/trunk/products/ERP5/Tool/SimulationTool.py

Modified: erp5/trunk/products/ERP5/Tool/SimulationTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/SimulationTool.py?rev=15104&r1=15103&r2=15104&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/SimulationTool.py (original)
+++ erp5/trunk/products/ERP5/Tool/SimulationTool.py Mon Jul  2 15:16:36 2007
@@ -346,6 +346,7 @@
     def _generateSQLKeywordDict(self, table='stock',
         # dates
         from_date=None, to_date=None, at_date=None,
+        omit_mirror_date=1,
         # instances
         resource=None, node=None, payment=None,
         section=None, mirror_section=None, item=None,
@@ -386,7 +387,10 @@
         # keywords for related keys
         **kw):
       """
-      generates keywords and calls buildSQLQuery
+      Generates keywords and calls buildSQLQuery
+
+      - omit_mirror_date: normally, date's parameters are only based on date
+        column. If 0, it also used the mirror_date column.
       """
       new_kw = {}
       new_kw.update(kw)
@@ -396,24 +400,35 @@
       sql_kw['input'] = input
       sql_kw['output'] = output
 
-      date_dict = {'query':[], 'operator':'and'}
-      if from_date :
-        date_dict['query'].append(from_date)
-        date_dict['range'] = 'min'
-        if to_date :
+      query_list = []
+
+      if omit_mirror_date:
+        date_dict = {'query':[], 'operator':'and'}
+        if from_date :
+          date_dict['query'].append(from_date)
+          date_dict['range'] = 'min'
+          if to_date :
+            date_dict['query'].append(to_date)
+            date_dict['range'] = 'minmax'
+          elif at_date :
+            date_dict['query'].append(at_date)
+            date_dict['range'] = 'minngt'
+        elif to_date :
           date_dict['query'].append(to_date)
-          date_dict['range'] = 'minmax'
+          date_dict['range'] = 'max'
         elif at_date :
           date_dict['query'].append(at_date)
-          date_dict['range'] = 'minngt'
-      elif to_date :
-        date_dict['query'].append(to_date)
-        date_dict['range'] = 'max'
-      elif at_date :
-        date_dict['query'].append(at_date)
-        date_dict['range'] = 'ngt'
-      if len(date_dict) :
-        new_kw[table + '.date'] = date_dict
+          date_dict['range'] = 'ngt'
+        if len(date_dict) :
+          new_kw[table + '.date'] = date_dict
+      else:
+        date_query_list = []
+        query_list.append(ComplexQuery(
+          Query(range='ngt', 
+                **{'%s.date' % table: [to_date]}),
+          Query(range='nlt', 
+                **{'%s.mirror_date' % table: [from_date]}),
+          operator='AND'))
 
       # Some columns exists on multiple tables, we have to clear ambiguities
       if resource_uid is not None :
@@ -521,7 +536,8 @@
       #if len(variation_category_uid_list) :
       #  new_kw['variationCategory'] = variation_category_uid_list
       
-      simulation_query =  self._getSimulationStateQuery(simulation_state=simulation_state, 
+      simulation_query =  self._getSimulationStateQuery(
+                                simulation_state=simulation_state, 
                                 omit_transit=omit_transit,
                                 input_simulation_state=input_simulation_state,
                                 output_simulation_state=output_simulation_state,
@@ -555,8 +571,10 @@
         else:
           simulation_query = reserved_query
       if simulation_query is not None:
-        new_kw['query'] = simulation_query
-
+        query_list.append(simulation_query)
+
+      if query_list:
+        new_kw['query'] = ComplexQuery(*query_list)
 
 
       # It is necessary to use here another SQL query (or at least a subquery)




More information about the Erp5-report mailing list