From 45c469eeea4be33021d84fb8d613e3c5888965b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Thu, 7 Sep 2006 07:57:18 +0000
Subject: [PATCH] add new script ERP5Accounting_getParams that get parameters
 from selection/preference (and uses a request cache
 AccountModule_getAccountingTransactionCount apply the selection filter for
 the stat method

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@9727 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 ...ntModule_getAccountingTransactionCount.xml |  80 +++----
 .../ERP5Accounting_getParams.xml              | 209 ++++++++++++++++++
 bt5/erp5_accounting/bt/revision               |   2 +-
 3 files changed, 238 insertions(+), 53 deletions(-)
 create mode 100644 bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/ERP5Accounting_getParams.xml

diff --git a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountModule_getAccountingTransactionCount.xml b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountModule_getAccountingTransactionCount.xml
index 12db551dc9..36056d05e9 100644
--- a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountModule_getAccountingTransactionCount.xml
+++ b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountModule_getAccountingTransactionCount.xml
@@ -68,53 +68,34 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string>LOG=lambda message: context.log("AccountModule_getAccountingTransactionCount", message)\n
+            <value> <string>kwd = context.ERP5Accounting_getParams(selection)\n
 \n
-params = selection.getParams()\n
-kwd = {} \n
+# XXX missing :(\n
+# this may fail if we have movements on something else than accounts\n
+#kwd[\'where_expression\'] = \'node.parent_uid = %s\' context.account_module.getUid()\n
 \n
-# read settings from user preference\n
-preference = context.getPortalObject().portal_preferences\n
-from_date = params.get(\'from_date\', preference.getPreferredAccountingTransactionFromDate())\n
-if from_date :\n
-  kwd[\'from_date\'] = from_date\n
-at_date = params.get(\'at_date\', preference.getPreferredAccountingTransactionAtDate())\n
-if at_date :\n
-  kwd[\'at_date\'] = at_date\n
-section_category = params.get(\'section_category\', preference.getPreferredAccountingTransactionSectionCategory())\n
-if section_category :\n
-  kwd[\'section_category\'] = section_category\n
-\n
-simulation_state = params.get(\'simulation_state\', preference.getPreferredAccountingTransactionSimulationStateList())\n
-if simulation_state :\n
-  kwd[\'simulation_state\'] = simulation_state\n
-\n
-resource = params.get(\'accounting_transaction_line_currency\')\n
-if resource:\n
-  currency = context.portal_categories.resolveCategory(resource)\n
-  kwd[\'resource_uid\'] = [currency.getUid()]\n
-\n
-query = {} #context.portal_catalog.buildSQLQuery(query_table=\'node\', **kwd)\n
-if query.get(\'where_expression\'):\n
-  kwd[\'where_expression\'] = query[\'where_expression\']\n
-if query.get(\'from_table_list\'):\n
-  kwd[\'from_table_list\'] = query[\'from_table_list\']\n
-\n
-if kw.get(\'stat\') :\n
-  if selection.getDomain() :\n
+if kw.get(\'stat\'):\n
+  selection_params = selection.getParams()\n
+  if selection.getDomain():\n
     kwd[\'selection_domain\'] = selection.getDomain()\n
-  if selection.getReport() :\n
+  if selection.getReport():\n
     kwd[\'selection_report\'] = selection.getReport()\n
-  if params.get(\'closed_summary\'):\n
-    kwd[\'closed_summary\'] = params[\'closed_summary\']\n
-  if selection.isInvertMode() :\n
+  if selection_params.get(\'closed_summary\'):\n
+    kwd[\'closed_summary\'] = selection_params[\'closed_summary\']\n
+  if selection.isInvertMode():\n
     kwd[\'selection_uids\'] = selection.getInvertModeUidList()\n
-  return context.portal_simulation.getInventoryStat(omit_simulation=1,\n
-                                               **kwd)[0][\'stock_uid\']\n
+  # is list filtered ?\n
+  if \'title\' in selection_params or \\\n
+     \'preferred_gap_id\' in selection_params or\\\n
+     \'transalated_validation_state_title\' in selection_params:\n
+    # if yes, apply the same filter here\n
+    kwd[\'stock.node_uid\'] = [x.uid for x in\n
+                         context.portal_catalog(**selection.getParams())]\n
+  return context.portal_simulation.getInventoryStat( **kwd )[0][\'stock_uid\']\n
 \n
-return context.portal_simulation.getInventoryStat(node_uid=context.getUid(),\n
-                                               omit_simulation=1,\n
-                                               **kwd)[0][\'stock_uid\']\n
+kwd[\'stock.node_uid\'] = brain.uid\n
+return context.portal_simulation.getInventoryStat( **kwd )[0][\'stock_uid\']\n
+# vim: syntax=python\n
 </string> </value>
         </item>
         <item>
@@ -166,22 +147,17 @@ return context.portal_simulation.getInventoryStat(node_uid=context.getUid(),\n
                             <string>selection</string>
                             <string>brain</string>
                             <string>kw</string>
-                            <string>LOG</string>
                             <string>_getattr_</string>
-                            <string>params</string>
-                            <string>kwd</string>
                             <string>context</string>
-                            <string>preference</string>
-                            <string>from_date</string>
+                            <string>kwd</string>
+                            <string>selection_params</string>
                             <string>_write_</string>
-                            <string>at_date</string>
-                            <string>section_category</string>
-                            <string>simulation_state</string>
-                            <string>resource</string>
-                            <string>currency</string>
-                            <string>query</string>
                             <string>_getitem_</string>
+                            <string>append</string>
+                            <string>$append0</string>
+                            <string>_getiter_</string>
                             <string>_apply_</string>
+                            <string>x</string>
                           </tuple>
                         </value>
                     </item>
diff --git a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/ERP5Accounting_getParams.xml b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/ERP5Accounting_getParams.xml
new file mode 100644
index 0000000000..03684d2e87
--- /dev/null
+++ b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/ERP5Accounting_getParams.xml
@@ -0,0 +1,209 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.PythonScripts.PythonScript</string>
+          <string>PythonScript</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Python_magic</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>__ac_local_roles__</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string>"""Returns all parameters from preferences or selection.\n
+\n
+This script gives priority to selection, and if not found in selection, it\n
+tries to get the parameters from preference tool.\n
+All parameters are stored/retrieved in a REQUEST cache, unless ignore_cache\n
+argument is True.\n
+\n
+caveats:\n
+  * wants_from_date parameter is not taken into account in the cache.\n
+"""\n
+\n
+# do we have a cache already?\n
+# XXX take selection into account ?\n
+if not ignore_cache:\n
+  params_cache = context.REQUEST.other.get(\n
+          \'ERP5Accounting_getParams\', None)\n
+  if params_cache is not None:\n
+    return dict(params_cache)\n
+\n
+params = {}\n
+selection_params = {}\n
+if selection is not None:\n
+  selection_params = selection.getParams()\n
+preference = context.getPortalObject().portal_preferences\n
+\n
+if wants_from_date:\n
+  from_date = selection_params.get(\'from_date\',\n
+                preference.getPreferredAccountingTransactionFromDate())\n
+  if from_date :\n
+    params[\'from_date\'] = from_date\n
+\n
+at_date = params.get(\'at_date\',\n
+              preference.getPreferredAccountingTransactionAtDate())\n
+if at_date:\n
+  params[\'at_date\'] = at_date\n
+\n
+section_category = params.get(\'section_category\',\n
+                 preference.getPreferredAccountingTransactionSectionCategory())\n
+if section_category:\n
+  params[\'section_category\'] = section_category\n
+\n
+simulation_state = params.get(\'simulation_state\',\n
+             preference.getPreferredAccountingTransactionSimulationStateList())\n
+if simulation_state:\n
+  params[\'simulation_state\'] = simulation_state\n
+\n
+if not ignore_cache:\n
+  context.REQUEST.other[\'ERP5Accounting_getParams\'] = params\n
+return dict(params)\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_filepath</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>selection=None, wants_from_date=0, ignore_cache=0</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>3</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>selection</string>
+                            <string>wants_from_date</string>
+                            <string>ignore_cache</string>
+                            <string>_getattr_</string>
+<string>context</string>
+                            <string>None</string>
+                            <string>params_cache</string>
+                            <string>dict</string>
+                            <string>params</string>
+                            <string>selection_params</string>
+                            <string>preference</string>
+                            <string>from_date</string>
+                            <string>_write_</string>
+                            <string>at_date</string>
+                            <string>section_category</string>
+                            <string>simulation_state</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <tuple>
+                <none/>
+                <int>0</int>
+                <int>0</int>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>ERP5Accounting_getParams</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_accounting/bt/revision b/bt5/erp5_accounting/bt/revision
index cabf43b5dd..410b14d2ce 100644
--- a/bt5/erp5_accounting/bt/revision
+++ b/bt5/erp5_accounting/bt/revision
@@ -1 +1 @@
-24
\ No newline at end of file
+25
\ No newline at end of file
-- 
2.30.9