From 18d0a31212b5ca50556758d9de7cedce21aa60bc Mon Sep 17 00:00:00 2001
From: Sebastien Robin <seb@nexedi.com>
Date: Fri, 16 Mar 2007 15:13:31 +0000
Subject: [PATCH] We must take simulation movement wich are not related to a
 delivery when we want to build amortisation rules. The previous way of doing
 was not at all scalable

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@13456 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 ...ems_to_build_amortisation_transactions.xml |   2 +-
 ...AmortisationTransaction_selectMovement.xml |  36 ++-
 ...mortisationTransaction_zSelectMovement.xml | 240 ++++++++++++++++++
 bt5/erp5_immobilisation/bt/revision           |   2 +-
 4 files changed, 264 insertions(+), 16 deletions(-)
 create mode 100644 bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationTransaction_zSelectMovement.xml

diff --git a/bt5/erp5_immobilisation/ActionTemplateItem/portal_types/Accounting%20Transaction%20Module/select_items_to_build_amortisation_transactions.xml b/bt5/erp5_immobilisation/ActionTemplateItem/portal_types/Accounting%20Transaction%20Module/select_items_to_build_amortisation_transactions.xml
index 3f48d5cebf..d8c5f31c49 100644
--- a/bt5/erp5_immobilisation/ActionTemplateItem/portal_types/Accounting%20Transaction%20Module/select_items_to_build_amortisation_transactions.xml
+++ b/bt5/erp5_immobilisation/ActionTemplateItem/portal_types/Accounting%20Transaction%20Module/select_items_to_build_amortisation_transactions.xml
@@ -62,7 +62,7 @@
         </item>
         <item>
             <key> <string>visible</string> </key>
-            <value> <int>1</int> </value>
+            <value> <int>0</int> </value>
         </item>
       </dictionary>
     </pickle>
diff --git a/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationTransaction_selectMovement.xml b/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationTransaction_selectMovement.xml
index 30c904e328..66b571ce22 100644
--- a/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationTransaction_selectMovement.xml
+++ b/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationTransaction_selectMovement.xml
@@ -68,13 +68,19 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string>kw[\'parent_specialise_portal_type\'] = \'Amortisation Rule\'\n
-movement_list = [x.getObject() for x in context.portal_catalog(**kw)]\n
-#kw[\'src__\']=1\n
-#sql = context.portal_catalog(**kw)\n
-#context.log(\'sql\',sql)\n
-#context.log(\'movement_list\',movement_list)\n
-return filter(lambda x: len(x.getDeliveryValueList())==0, movement_list)\n
+            <value> <string>kw[\'parent_specialise_portal_type\'] = [\'Amortisation Rule\']\n
+kw[\'portal_type\']             = \'Simulation Movement\'\n
+\n
+kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
+\n
+context.log(\'AmortisationTransaction_selectMovement\', \'SQL\\n%s\' % context.AmortisationTransaction_zSelectMovement(src__=1, **kw))\n
+\n
+if src__==0:\n
+  movement_list = [x.getObject() for x in context.AmortisationTransaction_zSelectMovement(**kw)]\n
+  #context.log(\'SaleOrder_selectMovement\', \'mvt : %s\' % movement_list)\n
+  return movement_list\n
+else:\n
+  return context.AmortisationTransaction_zSelectMovement(src__=1, **kw)\n
 </string> </value>
         </item>
         <item>
@@ -97,7 +103,7 @@ return filter(lambda x: len(x.getDeliveryValueList())==0, movement_list)\n
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>**kw</string> </value>
+            <value> <string>src__=0, **kw</string> </value>
         </item>
         <item>
             <key> <string>errors</string> </key>
@@ -117,23 +123,23 @@ return filter(lambda x: len(x.getDeliveryValueList())==0, movement_list)\n
                   <dictionary>
                     <item>
                         <key> <string>co_argcount</string> </key>
-                        <value> <int>0</int> </value>
+                        <value> <int>1</int> </value>
                     </item>
                     <item>
                         <key> <string>co_varnames</string> </key>
                         <value>
                           <tuple>
+                            <string>src__</string>
                             <string>kw</string>
                             <string>_write_</string>
+                            <string>_getattr_</string>
+                            <string>_apply_</string>
+                            <string>context</string>
                             <string>append</string>
                             <string>$append0</string>
                             <string>_getiter_</string>
-                            <string>_apply_</string>
-                            <string>_getattr_</string>
-                            <string>context</string>
                             <string>x</string>
                             <string>movement_list</string>
-                            <string>filter</string>
                           </tuple>
                         </value>
                     </item>
@@ -145,7 +151,9 @@ return filter(lambda x: len(x.getDeliveryValueList())==0, movement_list)\n
         <item>
             <key> <string>func_defaults</string> </key>
             <value>
-              <none/>
+              <tuple>
+                <int>0</int>
+              </tuple>
             </value>
         </item>
         <item>
diff --git a/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationTransaction_zSelectMovement.xml b/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationTransaction_zSelectMovement.xml
new file mode 100644
index 0000000000..36440e77e0
--- /dev/null
+++ b/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationTransaction_zSelectMovement.xml
@@ -0,0 +1,240 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.ZSQLMethods.SQL</string>
+          <string>SQL</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__ac_local_roles__</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_arg</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="Args" module="Shared.DC.ZRDB.Aqueduct"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_data</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>from_table_list</string> </key>
+                                <value>
+                                  <dictionary>
+                                    <item>
+                                        <key> <string>type</string> </key>
+                                        <value> <string>list</string> </value>
+                                    </item>
+                                  </dictionary>
+                                </value>
+                            </item>
+                            <item>
+                                <key> <string>order_by_expression</string> </key>
+                                <value>
+                                  <dictionary/>
+                                </value>
+                            </item>
+                            <item>
+                                <key> <string>where_expression</string> </key>
+                                <value>
+                                  <dictionary/>
+                                </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                    <item>
+                        <key> <string>_keys</string> </key>
+                        <value>
+                          <list>
+<string>from_table_list</string>
+<string>where_expression</string>
+<string>order_by_expression</string>
+                          </list>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_owner</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>allow_simple_one_argument_traversal</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>arguments_src</string> </key>
+            <value> <string>from_table_list:list\r\n
+where_expression\r\n
+order_by_expression</string> </value>
+        </item>
+        <item>
+            <key> <string>cache_time_</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>class_file_</string> </key>
+            <value> <string>ZSQLCatalog.zsqlbrain</string> </value>
+        </item>
+        <item>
+            <key> <string>class_name_</string> </key>
+            <value> <string>ZSQLBrain</string> </value>
+        </item>
+        <item>
+            <key> <string>connection_hook</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>connection_id</string> </key>
+            <value> <string>erp5_sql_connection</string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>AmortisationTransaction_zSelectMovement</string> </value>
+        </item>
+        <item>
+            <key> <string>max_cache_</string> </key>
+            <value> <int>100</int> </value>
+        </item>
+        <item>
+            <key> <string>max_rows_</string> </key>
+            <value> <int>1000</int> </value>
+        </item>
+        <item>
+            <key> <string>src</string> </key>
+            <value> <string encoding="cdata"><![CDATA[
+
+SELECT DISTINCT\n
+  catalog.uid,\n
+  catalog.path,\n
+  catalog.relative_url,\n
+  catalog.id\n
+\n
+FROM\n
+  movement as simulation_movement\n
+<dtml-in prefix="table" expr="from_table_list"> \n
+  <dtml-if expr="table_key != \'catalog\'">\n
+  , <dtml-var table_item> AS <dtml-var table_key>\n
+  </dtml-if>\n
+</dtml-in>\n
+  , catalog\n
+  LEFT JOIN category \n
+    ON (catalog.uid = category.uid\n
+        AND category.base_category_uid = <dtml-sqlvar "portal_categories.delivery.getUid()" type="int">)\n
+WHERE\n
+  1=1\n
+  <dtml-if where_expression>\n
+    AND <dtml-var where_expression> \n
+  </dtml-if>\n
+  AND simulation_movement.uid = catalog.uid\n
+  AND category.category_uid is NULL\n
+\n
+<dtml-if order_by_expression>\n
+ORDER BY <dtml-var order_by_expression>\n
+</dtml-if>
+
+]]></string> </value>
+        </item>
+        <item>
+            <key> <string>template</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="SQL" module="Shared.DC.ZRDB.DA"/>
+                </klass>
+                <none/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>__name__</string> </key>
+                        <value> <string encoding="cdata"><![CDATA[
+
+<string>
+
+]]></string> </value>
+                    </item>
+                    <item>
+                        <key> <string>_vars</string> </key>
+                        <value>
+                          <dictionary/>
+                        </value>
+                    </item>
+                    <item>
+                        <key> <string>globals</string> </key>
+                        <value>
+                          <dictionary/>
+                        </value>
+                    </item>
+                    <item>
+                        <key> <string>raw</string> </key>
+                        <value> <string encoding="cdata"><![CDATA[
+
+SELECT DISTINCT\n
+  catalog.uid,\n
+  catalog.path,\n
+  catalog.relative_url,\n
+  catalog.id\n
+\n
+FROM\n
+  movement as simulation_movement\n
+<dtml-in prefix="table" expr="from_table_list"> \n
+  <dtml-if expr="table_key != \'catalog\'">\n
+  , <dtml-var table_item> AS <dtml-var table_key>\n
+  </dtml-if>\n
+</dtml-in>\n
+  , catalog\n
+  LEFT JOIN category \n
+    ON (catalog.uid = category.uid\n
+        AND category.base_category_uid = <dtml-sqlvar "portal_categories.delivery.getUid()" type="int">)\n
+WHERE\n
+  1=1\n
+  <dtml-if where_expression>\n
+    AND <dtml-var where_expression> \n
+  </dtml-if>\n
+  AND simulation_movement.uid = catalog.uid\n
+  AND category.category_uid is NULL\n
+\n
+<dtml-if order_by_expression>\n
+ORDER BY <dtml-var order_by_expression>\n
+</dtml-if>
+
+]]></string> </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_immobilisation/bt/revision b/bt5/erp5_immobilisation/bt/revision
index 8fdd954df9..a5c750feac 100644
--- a/bt5/erp5_immobilisation/bt/revision
+++ b/bt5/erp5_immobilisation/bt/revision
@@ -1 +1 @@
-22
\ No newline at end of file
+27
\ No newline at end of file
-- 
2.30.9