From 817c766c5278f85bc63ee8fb0a9658ed941aa9c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Wed, 1 Feb 2006 15:10:14 +0000
Subject: [PATCH] improve accounting module list method a lot, use delivery
 table instead of stock table, so that transaction without lines are visible.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@5503 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 ...onModule_zGetAccountingTransactionList.xml | 165 ++++++++++--------
 1 file changed, 93 insertions(+), 72 deletions(-)

diff --git a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingTransactionModule_zGetAccountingTransactionList.xml b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingTransactionModule_zGetAccountingTransactionList.xml
index abc1d1e733..1b564b6715 100755
--- a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingTransactionModule_zGetAccountingTransactionList.xml
+++ b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingTransactionModule_zGetAccountingTransactionList.xml
@@ -153,13 +153,23 @@
                             <item>
                                 <key> <string>omit_input</string> </key>
                                 <value>
-                                  <dictionary/>
+                                  <dictionary>
+                                    <item>
+                                        <key> <string>default</string> </key>
+                                        <value> <string></string> </value>
+                                    </item>
+                                  </dictionary>
                                 </value>
                             </item>
                             <item>
                                 <key> <string>omit_output</string> </key>
                                 <value>
-                                  <dictionary/>
+                                  <dictionary>
+                                    <item>
+                                        <key> <string>default</string> </key>
+                                        <value> <string></string> </value>
+                                    </item>
+                                  </dictionary>
                                 </value>
                             </item>
                             <item>
@@ -247,17 +257,6 @@
                                   </dictionary>
                                 </value>
                             </item>
-                            <item>
-                                <key> <string>transaction</string> </key>
-                                <value>
-                                  <dictionary>
-                                    <item>
-                                        <key> <string>default</string> </key>
-                                        <value> <string></string> </value>
-                                    </item>
-                                  </dictionary>
-                                </value>
-                            </item>
                           </dictionary>
                         </value>
                     </item>
@@ -285,7 +284,6 @@
 <string>amount_range_max</string>
 <string>creation_date_range_min</string>
 <string>creation_date_range_max</string>
-<string>transaction</string>
 <string>section_category</string>
 <string>count</string>
                           </list>
@@ -310,28 +308,27 @@
         </item>
         <item>
             <key> <string>arguments_src</string> </key>
-            <value> <string>selection\r\n
-selection_domain\r\n
-selection_report\r\n
-selection_params=""\r\n
-selection_sort_on\r\n
-select_expression\r\n
-from_date=""\r\n
-at_date=""\r\n
-to_date=""\r\n
-node=""\r\n
-resource=""\r\n
-entity=""\r\n
-stat=""\r\n
-omit_input\r\n
-omit_output\r\n
-amount=""\r\n
-amount_range_min=""\r\n
-amount_range_max=""\r\n
-creation_date_range_min=""\r\n
-creation_date_range_max=""\r\n
-transaction=""\r\n
-section_category=""\r\n
+            <value> <string>selection\n
+selection_domain\n
+selection_report\n
+selection_params=""\n
+selection_sort_on\n
+select_expression\n
+from_date=""\n
+at_date=""\n
+to_date=""\n
+node=""\n
+resource=""\n
+entity=""\n
+stat=""\n
+omit_input=""\n
+omit_output=""\n
+amount=""\n
+amount_range_min=""\n
+amount_range_max=""\n
+creation_date_range_min=""\n
+creation_date_range_max=""\n
+section_category=""\n
 count=""</string> </value>
         </item>
         <item>
@@ -381,7 +378,7 @@ count=""</string> </value>
 <dtml-comment>do something to prevent having entity and section_category set at the same time</dtml-comment>\n
 <dtml-let section_category="not entity and section_category or \'\'">\n
 \n
-<dtml-let use_movement_table="from_date or to_date or at_date or node or resource or stat or amount or amount_range_min or amount_range_max or section_category">\n
+<dtml-let use_movement_table="from_date or to_date or at_date or node or resource or stat or amount or amount_range_min or amount_range_max or section_category or entity">\n
 \n
 SELECT\n
   <dtml-if stat>\n
@@ -398,10 +395,9 @@ FROM\n
   <dtml-in "query[\'from_table_list\']"> <dtml-var sequence-item> AS <dtml-var sequence-key><dtml-if sequence-end><dtml-else>,</dtml-if></dtml-in>\n
   <dtml-if selection_domain>, <dtml-var "selection_domain.asSqlJoinExpression()"> </dtml-if>\n
   <dtml-if selection_report>, <dtml-var "selection_report.asSqlJoinExpression()"> </dtml-if>\n
-\n
   <dtml-if use_movement_table>, catalog AS child\n
-                                      , movement </dtml-if>\n
-  <dtml-if "entity or stat or section_category">, stock </dtml-if>\n
+                              , movement </dtml-if>\n
+  <dtml-if "stat or omit_input or omit_output">, stock </dtml-if>\n
   <dtml-if node>, catalog AS source_account </dtml-if>\n
   <dtml-if resource>, catalog AS currency </dtml-if>\n
   <dtml-if entity>, catalog AS related_entity </dtml-if>\n
@@ -425,26 +421,39 @@ WHERE\n
   <dtml-if creation_date_range_min> AND catalog.creation_date >= <dtml-sqlvar creation_date_range_min type="datetime"> </dtml-if>\n
   <dtml-if creation_date_range_max> AND catalog.creation_date <= <dtml-sqlvar creation_date_range_max type="datetime"> </dtml-if>\n
   <dtml-if use_movement_table> AND child.parent_uid = catalog.uid \n
-                                                       AND movement.uid = child.uid </dtml-if>\n
-  <dtml-if "entity or stat or section_category"> AND stock.uid = child.uid </dtml-if>\n
-  <dtml-if node> AND source_account.uid = movement.source_uid </dtml-if>\n
-  <dtml-if resource> AND currency.uid = movement.resource_uid </dtml-if>\n
-  <dtml-if entity> AND related_entity.uid = stock.section_uid </dtml-if>\n
-  <dtml-if section_category> AND category.uid = stock.section_uid AND section_c.uid = category.category_uid </dtml-if>\n
+                               AND movement.uid = child.uid </dtml-if>\n
+  <dtml-if resource> AND currency.uid = movement.resource_uid \n
+                     AND currency.relative_url = \'<dtml-var resource>\' </dtml-if>\n
+  <dtml-if entity> AND ( related_entity.uid = delivery.destination_section_uid \n
+                         OR related_entity.uid = delivery.source_section_uid )\n
+                   AND related_entity.relative_url = \'<dtml-var entity>\'  </dtml-if>\n
+  <dtml-if section_category> AND ( category.uid = delivery.destination_section_uid \n
+                                OR category.uid = delivery.source_section_uid )\n
+                             AND section_c.uid = category.category_uid\n
+                             AND section_c.relative_url = <dtml-sqlvar section_category type="string">\n
+  </dtml-if>\n
 \n
+  -- FIXME: we want stop date when we are destination_section and start_date when \n
+  --   we are source_section (one solution is to read in stock.date, but we try\n
+  --   to avoid the use of stock table here)\n
   <dtml-if from_date> AND movement.stop_date >= <dtml-sqlvar from_date type="datetime"> </dtml-if>\n
   <dtml-if to_date> AND movement.stop_date <= <dtml-sqlvar to_date type="datetime"> </dtml-if>\n
   <dtml-if at_date> AND movement.stop_date < <dtml-sqlvar at_date type="datetime"> </dtml-if>\n
-  <dtml-if node> AND ( <dtml-in node> <dtml-unless sequence-start>OR</dtml-unless> source_account.relative_url = \'<dtml-var sequence-item>\' </dtml-in> ) </dtml-if>\n
-  <dtml-if resource> AND currency.relative_url = \'<dtml-var resource>\' </dtml-if>\n
-  <dtml-if entity> AND related_entity.relative_url = \'<dtml-var entity>\' </dtml-if>\n
+\n
+  <dtml-if node>\n
+    AND source_account.uid = movement.source_uid\n
+    AND ( \n
+    <dtml-in node> \n
+      <dtml-unless sequence-start>OR</dtml-unless> source_account.relative_url = \'<dtml-var sequence-item>\'\n
+    </dtml-in> )\n
+   </dtml-if>\n
   <dtml-if stat> AND movement.is_accountable = 1 </dtml-if>\n
-  <dtml-if omit_input> AND stock.quantity < 0 </dtml-if>\n
-  <dtml-if omit_output> AND stock.quantity > 0 </dtml-if>\n
-  <dtml-if transaction> AND catalog.uid = \'<dtml-var transaction>\' </dtml-if>\n
-  <dtml-if section_category> AND section_c.relative_url = \'<dtml-var section_category>\' </dtml-if>\n
+  <dtml-if omit_input> AND stock.quantity < 0\n
+                       AND stock.uid = child.uid  </dtml-if>\n
+  <dtml-if omit_output> AND stock.quantity > 0\n
+                        AND stock.uid = child.uid  </dtml-if>\n
   <dtml-if expr="selection is not None and selection.isInvertMode() and len(selection.getInvertModeUidList()) > 0">\n
-    AND ( 0 = 1 \n
+    AND ( 0 = 1\n
       <dtml-in expr="selection.getInvertModeUidList()">\n
         OR catalog.uid = <dtml-var sequence-item> \n
       </dtml-in>\n
@@ -513,7 +522,7 @@ WHERE\n
 <dtml-comment>do something to prevent having entity and section_category set at the same time</dtml-comment>\n
 <dtml-let section_category="not entity and section_category or \'\'">\n
 \n
-<dtml-let use_movement_table="from_date or to_date or at_date or node or resource or stat or amount or amount_range_min or amount_range_max or section_category">\n
+<dtml-let use_movement_table="from_date or to_date or at_date or node or resource or stat or amount or amount_range_min or amount_range_max or section_category or entity">\n
 \n
 SELECT\n
   <dtml-if stat>\n
@@ -530,10 +539,9 @@ FROM\n
   <dtml-in "query[\'from_table_list\']"> <dtml-var sequence-item> AS <dtml-var sequence-key><dtml-if sequence-end><dtml-else>,</dtml-if></dtml-in>\n
   <dtml-if selection_domain>, <dtml-var "selection_domain.asSqlJoinExpression()"> </dtml-if>\n
   <dtml-if selection_report>, <dtml-var "selection_report.asSqlJoinExpression()"> </dtml-if>\n
-\n
   <dtml-if use_movement_table>, catalog AS child\n
-                                      , movement </dtml-if>\n
-  <dtml-if "entity or stat or section_category">, stock </dtml-if>\n
+                              , movement </dtml-if>\n
+  <dtml-if "stat or omit_input or omit_output">, stock </dtml-if>\n
   <dtml-if node>, catalog AS source_account </dtml-if>\n
   <dtml-if resource>, catalog AS currency </dtml-if>\n
   <dtml-if entity>, catalog AS related_entity </dtml-if>\n
@@ -557,26 +565,39 @@ WHERE\n
   <dtml-if creation_date_range_min> AND catalog.creation_date >= <dtml-sqlvar creation_date_range_min type="datetime"> </dtml-if>\n
   <dtml-if creation_date_range_max> AND catalog.creation_date <= <dtml-sqlvar creation_date_range_max type="datetime"> </dtml-if>\n
   <dtml-if use_movement_table> AND child.parent_uid = catalog.uid \n
-                                                       AND movement.uid = child.uid </dtml-if>\n
-  <dtml-if "entity or stat or section_category"> AND stock.uid = child.uid </dtml-if>\n
-  <dtml-if node> AND source_account.uid = movement.source_uid </dtml-if>\n
-  <dtml-if resource> AND currency.uid = movement.resource_uid </dtml-if>\n
-  <dtml-if entity> AND related_entity.uid = stock.section_uid </dtml-if>\n
-  <dtml-if section_category> AND category.uid = stock.section_uid AND section_c.uid = category.category_uid </dtml-if>\n
+                               AND movement.uid = child.uid </dtml-if>\n
+  <dtml-if resource> AND currency.uid = movement.resource_uid \n
+                     AND currency.relative_url = \'<dtml-var resource>\' </dtml-if>\n
+  <dtml-if entity> AND ( related_entity.uid = delivery.destination_section_uid \n
+                         OR related_entity.uid = delivery.source_section_uid )\n
+                   AND related_entity.relative_url = \'<dtml-var entity>\'  </dtml-if>\n
+  <dtml-if section_category> AND ( category.uid = delivery.destination_section_uid \n
+                                OR category.uid = delivery.source_section_uid )\n
+                             AND section_c.uid = category.category_uid\n
+                             AND section_c.relative_url = <dtml-sqlvar section_category type="string">\n
+  </dtml-if>\n
 \n
+  -- FIXME: we want stop date when we are destination_section and start_date when \n
+  --   we are source_section (one solution is to read in stock.date, but we try\n
+  --   to avoid the use of stock table here)\n
   <dtml-if from_date> AND movement.stop_date >= <dtml-sqlvar from_date type="datetime"> </dtml-if>\n
   <dtml-if to_date> AND movement.stop_date <= <dtml-sqlvar to_date type="datetime"> </dtml-if>\n
   <dtml-if at_date> AND movement.stop_date < <dtml-sqlvar at_date type="datetime"> </dtml-if>\n
-  <dtml-if node> AND ( <dtml-in node> <dtml-unless sequence-start>OR</dtml-unless> source_account.relative_url = \'<dtml-var sequence-item>\' </dtml-in> ) </dtml-if>\n
-  <dtml-if resource> AND currency.relative_url = \'<dtml-var resource>\' </dtml-if>\n
-  <dtml-if entity> AND related_entity.relative_url = \'<dtml-var entity>\' </dtml-if>\n
+\n
+  <dtml-if node>\n
+    AND source_account.uid = movement.source_uid\n
+    AND ( \n
+    <dtml-in node> \n
+      <dtml-unless sequence-start>OR</dtml-unless> source_account.relative_url = \'<dtml-var sequence-item>\'\n
+    </dtml-in> )\n
+   </dtml-if>\n
   <dtml-if stat> AND movement.is_accountable = 1 </dtml-if>\n
-  <dtml-if omit_input> AND stock.quantity < 0 </dtml-if>\n
-  <dtml-if omit_output> AND stock.quantity > 0 </dtml-if>\n
-  <dtml-if transaction> AND catalog.uid = \'<dtml-var transaction>\' </dtml-if>\n
-  <dtml-if section_category> AND section_c.relative_url = \'<dtml-var section_category>\' </dtml-if>\n
+  <dtml-if omit_input> AND stock.quantity < 0\n
+                       AND stock.uid = child.uid  </dtml-if>\n
+  <dtml-if omit_output> AND stock.quantity > 0\n
+                        AND stock.uid = child.uid  </dtml-if>\n
   <dtml-if expr="selection is not None and selection.isInvertMode() and len(selection.getInvertModeUidList()) > 0">\n
-    AND ( 0 = 1 \n
+    AND ( 0 = 1\n
       <dtml-in expr="selection.getInvertModeUidList()">\n
         OR catalog.uid = <dtml-var sequence-item> \n
       </dtml-in>\n
-- 
2.30.9