From 5a0b9189a063361e20b70cd61583f8000ad45032 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Mon, 4 Feb 2013 11:56:49 +0100
Subject: [PATCH] directly use portal_catalog on select methods

---
 .../PaymentTransaction_selectMovement.xml     |  11 +-
 .../PaymentTransaction_zSelectMovement.xml    | 125 ------------------
 .../SaleInvoice_selectInvoiceMovement.xml     |  14 +-
 bt5/erp5_advanced_invoicing/bt/revision       |   2 +-
 ...AmortisationTransaction_selectMovement.xml |   9 +-
 ...mortisationTransaction_zSelectMovement.xml | 100 --------------
 bt5/erp5_immobilisation/bt/revision           |   2 +-
 ...voiceTransaction_selectInvoiceMovement.xml |  15 +--
 .../InvoiceTransaction_zSelectMovement.xml    | 109 ---------------
 ...eTransaction_selectPackingListMovement.xml |  11 +-
 ...seInvoice_selectTradeModelMovementList.xml |  11 +-
 ...eTransaction_selectPackingListMovement.xml |  11 +-
 ...leInvoice_selectTradeModelMovementList.xml |  11 +-
 .../ProductionOrder_zSelectMovement.xml       | 100 --------------
 .../TransformationRule_selectMovement.xml     |  10 +-
 ...nsformationSourcingRule_selectMovement.xml |   9 +-
 bt5/erp5_mrp/bt/revision                      |   2 +-
 ...SaleOrderRelatedSimulationMovementList.xml |  10 +-
 ...ectOpenSaleOrderSimulationMovementList.xml | 100 --------------
 bt5/erp5_open_trade/bt/revision               |   2 +-
 .../PaySheetTransaction_selectMovement.xml    |   9 +-
 bt5/erp5_payroll/bt/revision                  |   2 +-
 ...ceTransaction_selectTaskReportMovement.xml |  14 +-
 .../erp5_project/Task_selectMovement.xml      |   9 +-
 .../erp5_project/Task_zSelectMovement.xml     | 102 --------------
 bt5/erp5_project/bt/revision                  |   2 +-
 .../InternalOrder_selectMovement.xml          |   9 +-
 .../erp5_trade/Order_zSelectMovement.xml      | 104 ---------------
 .../PurchaseOrder_selectMovement.xml          |   9 +-
 .../erp5_trade/SaleOrder_selectMovement.xml   |   9 +-
 bt5/erp5_trade/bt/revision                    |   2 +-
 31 files changed, 136 insertions(+), 799 deletions(-)
 delete mode 100644 bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/PaymentTransaction_zSelectMovement.xml
 delete mode 100644 bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationTransaction_zSelectMovement.xml
 delete mode 100644 bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/InvoiceTransaction_zSelectMovement.xml
 delete mode 100644 bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/ProductionOrder_zSelectMovement.xml
 delete mode 100644 bt5/erp5_open_trade/SkinTemplateItem/portal_skins/erp5_open_trade/DeliveryBuilder_zSelectOpenSaleOrderSimulationMovementList.xml
 delete mode 100644 bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Task_zSelectMovement.xml
 delete mode 100644 bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Order_zSelectMovement.xml

diff --git a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/PaymentTransaction_selectMovement.xml b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/PaymentTransaction_selectMovement.xml
index c266c85f2e..a92f7df737 100644
--- a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/PaymentTransaction_selectMovement.xml
+++ b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/PaymentTransaction_selectMovement.xml
@@ -52,10 +52,13 @@
             <key> <string>_body</string> </key>
             <value> <string>kw[\'parent_specialise_reference\'] = \'default_payment_rule\'\n
 kw[\'grand_parent_simulation_state\'] = \'started\'\n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-kw[\'max_movement_date\'] = DateTime() + 30 # XXX this is an arbitrary value for experimentation\n
-                                          # this could be an alarm configuration.\n
-return context.PaymentTransaction_zSelectMovement(src__=src__, **kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+kw[\'src__\'] = src__ \n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/PaymentTransaction_zSelectMovement.xml b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/PaymentTransaction_zSelectMovement.xml
deleted file mode 100644
index 5337677cc7..0000000000
--- a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/PaymentTransaction_zSelectMovement.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="SQL" module="Products.ZSQLMethods.SQL"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>_Use_Database_Methods_Permission</string> </key>
-            <value>
-              <list>
-                <string>Member</string>
-              </list>
-            </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\r\n
-max_movement_date\r\n
-limit_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>PaymentTransaction_zSelectMovement</string> </value>
-        </item>
-        <item>
-            <key> <string>max_cache_</string> </key>
-            <value> <int>0</int> </value>
-        </item>
-        <item>
-            <key> <string>max_rows_</string> </key>
-            <value> <int>0</int> </value>
-        </item>
-        <item>
-            <key> <string>src</string> </key>
-            <value> <string encoding="cdata"><![CDATA[
-
-SELECT\n
-  catalog.uid,\n
-  catalog.path,\n
-  catalog.relative_url,\n
-  catalog.id\n
-\n
-FROM\n
-    movement\n
-  , catalog as parent\n
-  , catalog as grandparent\n
-<dtml-in prefix="table" expr="from_table_list"> \n
-  <dtml-if expr="table_key not in (\'catalog\', \'movement\')">\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
-\n
-  AND parent.uid = catalog.parent_uid\n
-  AND grandparent.uid = parent.parent_uid\n
-\n
-  AND ((\n
-        grandparent.simulation_state  NOT IN (\'cancelled\', \'deleted\')\n
-    AND ( movement.start_date < <dtml-sqlvar max_movement_date type="datetime"> OR \n
-          movement.stop_date < <dtml-sqlvar max_movement_date type="datetime"> )\n
-  ) OR (\n
-        grandparent.simulation_state  in (\'confirmed\', \'stopped\', \'delivered\')\n
-  ))\n
-\n
-  AND movement.uid = catalog.uid\n
-  AND movement.resource_uid is not NULL\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>\n
-<dtml-if limit_expression>\n
-LIMIT <dtml-var limit_expression>\n
-</dtml-if>
-
-]]></string> </value>
-        </item>
-        <item>
-            <key> <string>title</string> </key>
-            <value> <string></string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_advanced_invoicing/SkinTemplateItem/portal_skins/erp5_advanced_invoicing/SaleInvoice_selectInvoiceMovement.xml b/bt5/erp5_advanced_invoicing/SkinTemplateItem/portal_skins/erp5_advanced_invoicing/SaleInvoice_selectInvoiceMovement.xml
index 47b7d7807c..3aa42d592d 100644
--- a/bt5/erp5_advanced_invoicing/SkinTemplateItem/portal_skins/erp5_advanced_invoicing/SaleInvoice_selectInvoiceMovement.xml
+++ b/bt5/erp5_advanced_invoicing/SkinTemplateItem/portal_skins/erp5_advanced_invoicing/SaleInvoice_selectInvoiceMovement.xml
@@ -51,16 +51,22 @@
         <item>
             <key> <string>_body</string> </key>
             <value> <string>kw[\'parent_specialise_portal_type\'] = \'Invoice Transaction Simulation Rule\'\n
-kw[\'explanation_portal_type\']       = \'Sale Order\', \'Sale Invoice\', \'Sale Packing List\'\n
+kw[\'explanation_portal_type\'] = \'Sale Order\', \'Sale Invoice\', \'Sale Packing List\'\n
+kw[\'portal_type\'] = \'Simulation Movement\'\n
 kw[\'grand_parent_simulation_state\'] = \'started\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.InvoiceTransaction_zSelectMovement(**kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+kw[\'src__\'] = src__ \n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>**kw</string> </value>
+            <value> <string>src__=0, **kw</string> </value>
         </item>
         <item>
             <key> <string>id</string> </key>
diff --git a/bt5/erp5_advanced_invoicing/bt/revision b/bt5/erp5_advanced_invoicing/bt/revision
index 615088b548..6d58c4e590 100644
--- a/bt5/erp5_advanced_invoicing/bt/revision
+++ b/bt5/erp5_advanced_invoicing/bt/revision
@@ -1 +1 @@
-108
\ No newline at end of file
+109
\ No newline at end of file
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 20eb857f3a..8c2782e2cc 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
@@ -51,8 +51,13 @@
         <item>
             <key> <string>_body</string> </key>
             <value> <string>kw[\'parent_specialise_portal_type\'] = \'Amortisation Rule\'\n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.AmortisationTransaction_zSelectMovement(src__=src__, **kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+kw[\'src__\'] = src__ \n
+return context.portal_catalog(**kw)\n
 </string> </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
deleted file mode 100644
index 8fb7220020..0000000000
--- a/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationTransaction_zSelectMovement.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="SQL" module="Products.ZSQLMethods.SQL"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <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\r\n
-limit_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>0</int> </value>
-        </item>
-        <item>
-            <key> <string>max_rows_</string> </key>
-            <value> <int>0</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>  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>\n
-<dtml-if limit_expression>\n
-LIMIT <dtml-var limit_expression>\n
-</dtml-if>
-
-]]></string> </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 cd004727f2..80945bc436 100644
--- a/bt5/erp5_immobilisation/bt/revision
+++ b/bt5/erp5_immobilisation/bt/revision
@@ -1 +1 @@
-182
\ No newline at end of file
+183
\ No newline at end of file
diff --git a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/InvoiceTransaction_selectInvoiceMovement.xml b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/InvoiceTransaction_selectInvoiceMovement.xml
index 9fe7f419a6..bbd2957600 100644
--- a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/InvoiceTransaction_selectInvoiceMovement.xml
+++ b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/InvoiceTransaction_selectInvoiceMovement.xml
@@ -55,9 +55,6 @@
 Simulation Movements can come from normal Invoice Transaction Rule\n
 and same rule which is children of Trade Model Rule """\n
 \n
-buildSQLQuery = context.portal_catalog.buildSQLQuery\n
-select = context.InvoiceTransaction_zSelectMovement\n
-\n
 # search for normal movements\n
 kw[\'parent_specialise_reference\'] = [\'default_invoice_transaction_rule\']\n
 kw[\'grand_grand_parent_specialise_reference\'] = [\n
@@ -74,19 +71,21 @@ else:\n
                                          \'Returned %s Packing List\' % trade_type]\n
 kw[\'portal_type\']                   = \'Simulation Movement\'\n
 \n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
 search_kw = kw.copy()\n
 search_kw[\'grand_parent_simulation_state\'] = [\'started\']\n
-search_kw.update(buildSQLQuery(**search_kw))\n
 \n
-movement_list = list(select(**search_kw))\n
+movement_list = list(context.portal_catalog(**search_kw))\n
 \n
 # update query to search for movements which are children of Trade Model Rule\n
 kw[\'grand_grand_parent_specialise_reference\'] = \'default_trade_model_rule\'\n
 kw[\'grand_grand_grand_parent_simulation_state\'] = [\'started\']\n
 \n
-kw.update(buildSQLQuery(**kw))\n
-\n
-movement_list += select(**kw)\n
+movement_list += list(context.portal_catalog(**kw))\n
 \n
 return movement_list\n
 </string> </value>
diff --git a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/InvoiceTransaction_zSelectMovement.xml b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/InvoiceTransaction_zSelectMovement.xml
deleted file mode 100644
index 29140cb448..0000000000
--- a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/InvoiceTransaction_zSelectMovement.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="SQL" module="Products.ZSQLMethods.SQL"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>_Use_Database_Methods_Permission</string> </key>
-            <value>
-              <list>
-                <string>Member</string>
-              </list>
-            </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\r\n
-limit_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> <string></string> </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>InvoiceTransaction_zSelectMovement</string> </value>
-        </item>
-        <item>
-            <key> <string>max_cache_</string> </key>
-            <value> <int>0</int> </value>
-        </item>
-        <item>
-            <key> <string>max_rows_</string> </key>
-            <value> <int>0</int> </value>
-        </item>
-        <item>
-            <key> <string>src</string> </key>
-            <value> <string encoding="cdata"><![CDATA[
-
-SELECT\n
-  catalog.uid,\n
-  catalog.path,\n
-  catalog.relative_url,\n
-  catalog.id\n
-\n
-FROM\n
-    movement\n
-<dtml-in prefix="table" expr="from_table_list"> \n
-  <dtml-if expr="table_key not in (\'catalog\', \'movement\')">\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
-  \n
-  AND movement.uid = catalog.uid\n
-  AND movement.resource_uid is not NULL\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>\n
-<dtml-if limit_expression>\n
-LIMIT <dtml-var limit_expression>\n
-</dtml-if>
-
-]]></string> </value>
-        </item>
-        <item>
-            <key> <string>title</string> </key>
-            <value> <string></string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/PurchaseInvoiceTransaction_selectPackingListMovement.xml b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/PurchaseInvoiceTransaction_selectPackingListMovement.xml
index 25c917905c..207ab97da7 100644
--- a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/PurchaseInvoiceTransaction_selectPackingListMovement.xml
+++ b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/PurchaseInvoiceTransaction_selectPackingListMovement.xml
@@ -51,11 +51,16 @@
         <item>
             <key> <string>_body</string> </key>
             <value> <string>kw[\'parent_specialise_portal_type\'] = \'Invoice Simulation Rule\'\n
-kw[\'explanation_portal_type\']       = \'Purchase Order\', \'Purchase Packing List\', \'Returned Purchase Packing List\'\n
+kw[\'explanation_portal_type\'] = \'Purchase Order\', \'Purchase Packing List\', \'Returned Purchase Packing List\'\n
 kw[\'grand_parent_simulation_state\'] = \'started\', \'stopped\', \'delivered\'\n
+kw[\'portal_type\'] = \'Simulation Movement\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.InvoiceTransaction_zSelectMovement(**kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/PurchaseInvoice_selectTradeModelMovementList.xml b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/PurchaseInvoice_selectTradeModelMovementList.xml
index dcd8c39d11..215e7af2db 100644
--- a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/PurchaseInvoice_selectTradeModelMovementList.xml
+++ b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/PurchaseInvoice_selectTradeModelMovementList.xml
@@ -51,12 +51,17 @@
         <item>
             <key> <string>_body</string> </key>
             <value> <string>kw[\'parent_specialise_portal_type\'] = \'Trade Model Simulation Rule\'\n
-kw[\'explanation_portal_type\']       = (\'Purchase Order\', \'Purchase Packing List\', \'Returned Purchase Packing List\',\n
+kw[\'explanation_portal_type\'] = (\'Purchase Order\', \'Purchase Packing List\', \'Returned Purchase Packing List\',\n
                                        \'Purchase Invoice Transaction\', \'Purchase Invoice\')\n
 kw[\'grand_parent_simulation_state\'] = \'started\', \'stopped\', \'delivered\', \'confirmed\'\n
+kw[\'portal_type\'] = \'Simulation Movement\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.InvoiceTransaction_zSelectMovement(**kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/SaleInvoiceTransaction_selectPackingListMovement.xml b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/SaleInvoiceTransaction_selectPackingListMovement.xml
index 258e68a608..43d2edc91d 100644
--- a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/SaleInvoiceTransaction_selectPackingListMovement.xml
+++ b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/SaleInvoiceTransaction_selectPackingListMovement.xml
@@ -51,11 +51,16 @@
         <item>
             <key> <string>_body</string> </key>
             <value> <string>kw[\'parent_specialise_portal_type\'] = \'Invoice Simulation Rule\'\n
-kw[\'explanation_portal_type\']       = \'Sale Order\', \'Sale Packing List\', \'Returned Sale Packing List\'\n
+kw[\'explanation_portal_type\'] = \'Sale Order\', \'Sale Packing List\', \'Returned Sale Packing List\'\n
+kw[\'portal_type\'] = \'Simulation Movement\'\n
 kw[\'grand_parent_simulation_state\'] = \'started\', \'stopped\', \'delivered\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.InvoiceTransaction_zSelectMovement(**kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/SaleInvoice_selectTradeModelMovementList.xml b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/SaleInvoice_selectTradeModelMovementList.xml
index 2a6ce254cf..051a93a6e0 100644
--- a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/SaleInvoice_selectTradeModelMovementList.xml
+++ b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/SaleInvoice_selectTradeModelMovementList.xml
@@ -51,12 +51,17 @@
         <item>
             <key> <string>_body</string> </key>
             <value> <string>kw[\'parent_specialise_portal_type\'] = \'Trade Model Simulation Rule\'\n
-kw[\'explanation_portal_type\']       = (\'Sale Order\', \'Sale Packing List\', \'Returned Sale Packing List\',\n
+kw[\'explanation_portal_type\'] = (\'Sale Order\', \'Sale Packing List\', \'Returned Sale Packing List\',\n
                                        \'Sale Invoice Transaction\', \'Sale Invoice\')\n
 kw[\'grand_parent_simulation_state\'] = \'started\', \'stopped\', \'delivered\', \'confirmed\'\n
+kw[\'portal_type\'] = \'Simulation Movement\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.InvoiceTransaction_zSelectMovement(**kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/ProductionOrder_zSelectMovement.xml b/bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/ProductionOrder_zSelectMovement.xml
deleted file mode 100644
index 090d9ee375..0000000000
--- a/bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/ProductionOrder_zSelectMovement.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="SQL" module="Products.ZSQLMethods.SQL"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <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\r\n
-limit_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> <string></string> </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>ProductionOrder_zSelectMovement</string> </value>
-        </item>
-        <item>
-            <key> <string>max_cache_</string> </key>
-            <value> <int>0</int> </value>
-        </item>
-        <item>
-            <key> <string>max_rows_</string> </key>
-            <value> <int>0</int> </value>
-        </item>
-        <item>
-            <key> <string>src</string> </key>
-            <value> <string encoding="cdata"><![CDATA[
-
-SELECT\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
-  AND simulation_movement.resource_uid is not NULL\n
-\n
-<dtml-if order_by_expression>\n
-ORDER BY <dtml-var order_by_expression>\n
-</dtml-if>\n
-<dtml-if limit_expression>\n
-LIMIT <dtml-var limit_expression>\n
-</dtml-if>
-
-]]></string> </value>
-        </item>
-        <item>
-            <key> <string>title</string> </key>
-            <value> <string></string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/TransformationRule_selectMovement.xml b/bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/TransformationRule_selectMovement.xml
index eb38fdf1e1..c0f97f97ec 100644
--- a/bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/TransformationRule_selectMovement.xml
+++ b/bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/TransformationRule_selectMovement.xml
@@ -52,9 +52,15 @@
             <key> <string>_body</string> </key>
             <value> <string>kw[\'explanation_portal_type\'] = \'Production Order\'\n
 kw[\'parent_specialise_portal_type\'] = \'Transformation Rule\'\n
+kw[\'grand_parent_simulation_state\'] = \'confirmed\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-result = context.ProductionOrder_zSelectMovement(src__=src__, **kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+kw[\'src__\'] = src__ \n
+result = context.portal_catalog(**kw)\n
 if src__:\n
   result\n
 \n
diff --git a/bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/TransformationSourcingRule_selectMovement.xml b/bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/TransformationSourcingRule_selectMovement.xml
index acaf22c07a..6f988a7f9d 100644
--- a/bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/TransformationSourcingRule_selectMovement.xml
+++ b/bt5/erp5_mrp/SkinTemplateItem/portal_skins/erp5_mrp/TransformationSourcingRule_selectMovement.xml
@@ -52,8 +52,13 @@
             <key> <string>_body</string> </key>
             <value> <string>kw[\'explanation_portal_type\'] = \'Production Order\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-result = context.ProductionOrder_zSelectMovement(src__=src__, **kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+kw[\'src__\'] = src__ \n
+result = context.portal_catalog(**kw)\n
 if src__:\n
   result\n
 \n
diff --git a/bt5/erp5_mrp/bt/revision b/bt5/erp5_mrp/bt/revision
index b1eab89dbc..1e27e32d42 100644
--- a/bt5/erp5_mrp/bt/revision
+++ b/bt5/erp5_mrp/bt/revision
@@ -1 +1 @@
-477
\ No newline at end of file
+478
\ No newline at end of file
diff --git a/bt5/erp5_open_trade/SkinTemplateItem/portal_skins/erp5_open_trade/DeliveryBuilder_getOpenSaleOrderRelatedSimulationMovementList.xml b/bt5/erp5_open_trade/SkinTemplateItem/portal_skins/erp5_open_trade/DeliveryBuilder_getOpenSaleOrderRelatedSimulationMovementList.xml
index 88b1e7e5be..1f81ac634c 100644
--- a/bt5/erp5_open_trade/SkinTemplateItem/portal_skins/erp5_open_trade/DeliveryBuilder_getOpenSaleOrderRelatedSimulationMovementList.xml
+++ b/bt5/erp5_open_trade/SkinTemplateItem/portal_skins/erp5_open_trade/DeliveryBuilder_getOpenSaleOrderRelatedSimulationMovementList.xml
@@ -52,12 +52,14 @@
             <key> <string>_body</string> </key>
             <value> <string>kw[\'parent_specialise_portal_type\'] = [\'Open Order Rule\']\n
 kw[\'explanation_portal_type\'] = \'Open Sale Order\'\n
-kw[\'portal_type\']             = \'Simulation Movement\'\n
-kw[\'sort_on\'] = \'movement.start_date\'\n
+kw[\'portal_type\'] = \'Simulation Movement\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
 \n
-return [brain.getObject() for brain in context.DeliveryBuilder_zSelectOpenSaleOrderSimulationMovementList(**kw)]\n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_open_trade/SkinTemplateItem/portal_skins/erp5_open_trade/DeliveryBuilder_zSelectOpenSaleOrderSimulationMovementList.xml b/bt5/erp5_open_trade/SkinTemplateItem/portal_skins/erp5_open_trade/DeliveryBuilder_zSelectOpenSaleOrderSimulationMovementList.xml
deleted file mode 100644
index ef0a995787..0000000000
--- a/bt5/erp5_open_trade/SkinTemplateItem/portal_skins/erp5_open_trade/DeliveryBuilder_zSelectOpenSaleOrderSimulationMovementList.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="SQL" module="Products.ZSQLMethods.SQL"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <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> <string></string> </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>DeliveryBuilder_zSelectOpenSaleOrderSimulationMovementList</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 catalog.simulation_state = \'started\'\n
-  AND simulation_movement.source_uid <> simulation_movement.destination_uid\n
-  AND simulation_movement.source_uid is not NULL\n
-  AND simulation_movement.destination_uid is not NULL\n
-  AND simulation_movement.uid = catalog.uid\n
-  AND simulation_movement.resource_uid is not NULL\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>title</string> </key>
-            <value> <string></string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_open_trade/bt/revision b/bt5/erp5_open_trade/bt/revision
index e3b5acb834..615088b548 100644
--- a/bt5/erp5_open_trade/bt/revision
+++ b/bt5/erp5_open_trade/bt/revision
@@ -1 +1 @@
-107
\ No newline at end of file
+108
\ No newline at end of file
diff --git a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_selectMovement.xml b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_selectMovement.xml
index 965c172c23..79cd742e9e 100644
--- a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_selectMovement.xml
+++ b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_selectMovement.xml
@@ -54,8 +54,13 @@
 kw[\'explanation_portal_type\'] = \'Pay Sheet Transaction\'\n
 kw[\'grand_parent_simulation_state\'] = \'confirmed\', \'started\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.InvoiceTransaction_zSelectMovement(src__=src__, **kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+kw[\'src__\'] = src__ \n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_payroll/bt/revision b/bt5/erp5_payroll/bt/revision
index 995fb338a8..7dfce3516b 100644
--- a/bt5/erp5_payroll/bt/revision
+++ b/bt5/erp5_payroll/bt/revision
@@ -1 +1 @@
-593
\ No newline at end of file
+594
\ No newline at end of file
diff --git a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/SaleInvoiceTransaction_selectTaskReportMovement.xml b/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/SaleInvoiceTransaction_selectTaskReportMovement.xml
index 83f2a8c863..3385758929 100644
--- a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/SaleInvoiceTransaction_selectTaskReportMovement.xml
+++ b/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/SaleInvoiceTransaction_selectTaskReportMovement.xml
@@ -51,16 +51,22 @@
         <item>
             <key> <string>_body</string> </key>
             <value> <string>kw[\'parent_specialise_portal_type\'] = \'Invoice Simulation Rule\'\n
-kw[\'explanation_portal_type\']       = \'Task\', \'Task Report\'\n
+kw[\'explanation_portal_type\'] = \'Task\', \'Task Report\'\n
+kw[\'portal_type\'] = \'Simulation Movement\'\n
 kw[\'grand_parent_simulation_state\'] = \'started\', \'stopped\', \'delivered\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.InvoiceTransaction_zSelectMovement(**kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+kw[\'src__\'] = src__ \n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>**kw</string> </value>
+            <value> <string>src__=0, **kw</string> </value>
         </item>
         <item>
             <key> <string>id</string> </key>
diff --git a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Task_selectMovement.xml b/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Task_selectMovement.xml
index 24cc9528e3..5bf89ad1c1 100644
--- a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Task_selectMovement.xml
+++ b/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Task_selectMovement.xml
@@ -54,8 +54,13 @@
 kw[\'parent_specialise_portal_type\'] = \'Delivery Simulation Rule\'\n
 kw[\'grand_parent_simulation_state\'] = \'confirmed\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.Order_zSelectMovement(src__=src__, **kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+kw[\'src__\'] = src__ \n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Task_zSelectMovement.xml b/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Task_zSelectMovement.xml
deleted file mode 100644
index d5da1b0d93..0000000000
--- a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Task_zSelectMovement.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="SQL" module="Products.ZSQLMethods.SQL"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <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\r\n
-limit_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> <string></string> </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>Task_zSelectMovement</string> </value>
-        </item>
-        <item>
-            <key> <string>max_cache_</string> </key>
-            <value> <int>0</int> </value>
-        </item>
-        <item>
-            <key> <string>max_rows_</string> </key>
-            <value> <int>0</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.source_uid is not NULL\n
-  AND simulation_movement.destination_uid is not NULL\n
-  AND simulation_movement.uid = catalog.uid\n
-  AND simulation_movement.resource_uid is not NULL\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>\n
-<dtml-if limit_expression>\n
-LIMIT <dtml-var limit_expression>\n
-</dtml-if>
-
-]]></string> </value>
-        </item>
-        <item>
-            <key> <string>title</string> </key>
-            <value> <string></string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_project/bt/revision b/bt5/erp5_project/bt/revision
index 2cc8905634..e458f1411c 100644
--- a/bt5/erp5_project/bt/revision
+++ b/bt5/erp5_project/bt/revision
@@ -1 +1 @@
-820
\ No newline at end of file
+821
\ No newline at end of file
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/InternalOrder_selectMovement.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/InternalOrder_selectMovement.xml
index debda45e43..293b51a545 100644
--- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/InternalOrder_selectMovement.xml
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/InternalOrder_selectMovement.xml
@@ -54,8 +54,13 @@
 kw[\'parent_specialise_portal_type\'] = \'Delivery Simulation Rule\'\n
 kw[\'grand_parent_simulation_state\'] = \'confirmed\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.Order_zSelectMovement(src__=src__, **kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+kw[\'src__\'] = src__ \n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Order_zSelectMovement.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Order_zSelectMovement.xml
deleted file mode 100644
index 1b3aa197b3..0000000000
--- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Order_zSelectMovement.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="SQL" module="Products.ZSQLMethods.SQL"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <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\r\n
-limit_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>Order_zSelectMovement</string> </value>
-        </item>
-        <item>
-            <key> <string>max_cache_</string> </key>
-            <value> <int>0</int> </value>
-        </item>
-        <item>
-            <key> <string>max_rows_</string> </key>
-            <value> <int>0</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.source_uid is not NULL\n
-  AND simulation_movement.destination_uid is not NULL\n
-  AND simulation_movement.uid = catalog.uid\n
-  AND simulation_movement.resource_uid is not NULL\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>\n
-<dtml-if limit_expression>\n
-LIMIT <dtml-var limit_expression>\n
-</dtml-if>
-
-]]></string> </value>
-        </item>
-        <item>
-            <key> <string>title</string> </key>
-            <value> <string></string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/PurchaseOrder_selectMovement.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/PurchaseOrder_selectMovement.xml
index e5e78de9bd..197a9d7fcf 100644
--- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/PurchaseOrder_selectMovement.xml
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/PurchaseOrder_selectMovement.xml
@@ -54,8 +54,13 @@
 kw[\'parent_specialise_portal_type\'] = \'Delivery Simulation Rule\'\n
 kw[\'grand_parent_simulation_state\'] = \'confirmed\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.Order_zSelectMovement(src__=src__, **kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+kw[\'src__\'] = src__ \n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_selectMovement.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_selectMovement.xml
index e502d7b53f..ac6d2d43d3 100644
--- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_selectMovement.xml
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_selectMovement.xml
@@ -54,8 +54,13 @@
 kw[\'parent_specialise_portal_type\'] = \'Delivery Simulation Rule\'\n
 kw[\'grand_parent_simulation_state\'] = \'confirmed\'\n
 \n
-kw.update(context.portal_catalog.buildSQLQuery(**kw))\n
-return context.Order_zSelectMovement(src__=src__, **kw)\n
+kw[\'delivery_uid\'] = None\n
+kw[\'left_join_list\'] = [\'delivery_uid\']\n
+kw[\'select_dict\'] = dict(delivery_uid=None)\n
+kw[\'group_by\'] = (\'uid\',)\n
+\n
+kw[\'src__\'] = src__ \n
+return context.portal_catalog(**kw)\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_trade/bt/revision b/bt5/erp5_trade/bt/revision
index 8535dde961..d5e7c400bc 100644
--- a/bt5/erp5_trade/bt/revision
+++ b/bt5/erp5_trade/bt/revision
@@ -1 +1 @@
-1161
\ No newline at end of file
+1162
\ No newline at end of file
-- 
2.30.9