[Erp5-report] r36023 jerome - in /erp5/trunk/products/ERP5: bootstrap/erp5_core/SkinTemplat...

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Jun 7 15:29:51 CEST 2010


Author: jerome
Date: Mon Jun  7 15:29:50 2010
New Revision: 36023

URL: http://svn.erp5.org?rev=36023&view=rev
Log:
allow to group rows returned by getMovementHistoryList to produce aggregation
of movements (for example, by resource and by delivery)

Modified:
    erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Resource_zGetMovementHistoryList.xml
    erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision
    erp5/trunk/products/ERP5/tests/testInventoryAPI.py

Modified: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Resource_zGetMovementHistoryList.xml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Resource_zGetMovementHistoryList.xml?rev=36023&r1=36022&r2=36023&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Resource_zGetMovementHistoryList.xml [utf8] (original)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Resource_zGetMovementHistoryList.xml [utf8] Mon Jun  7 15:29:50 2010
@@ -664,23 +664,24 @@
   catalog.relative_url as relative_url,\n
   stock.date AS date,\n
 <dtml-if expr="precision is not None">\n
-  ROUND(stock.quantity, <dtml-var precision>) AS total_quantity,\n
-  ROUND(stock.total_price, <dtml-var precision>) AS total_price,\n
+  <dtml-if group_by_expression>SUM</dtml-if>(ROUND(stock.quantity, <dtml-var precision>)) AS total_quantity,\n
+  <dtml-if group_by_expression>SUM</dtml-if>(ROUND(stock.total_price, <dtml-var precision>)) AS total_price,\n
 <dtml-else>\n
-  stock.quantity AS total_quantity,\n
-  stock.total_price AS total_price,\n
+  <dtml-if group_by_expression>SUM</dtml-if>(stock.quantity) AS total_quantity,\n
+  <dtml-if group_by_expression>SUM</dtml-if>(stock.total_price) AS total_price,\n
 </dtml-if>\n
   stock.variation_text AS variation_text,\n
   stock.simulation_state AS simulation_state,\n
   stock.mirror_section_uid AS mirror_section_uid,\n
   stock.mirror_node_uid AS mirror_node_uid,\n
+  stock.function_uid AS function_uid,\n
+  stock.project_uid AS project_uid,\n
   node.uid AS node_uid,\n
   node.title AS node_title,\n
   node.relative_url AS node_relative_url,\n
   section.uid AS section_uid,\n
   section.title AS section_title,\n
   section.relative_url AS section_relative_url\n
-\n
 FROM\n
   stock\n
   <dtml-if section_filtered> INNER <dtml-else> LEFT </dtml-if>  \n
@@ -830,23 +831,24 @@
   catalog.relative_url as relative_url,\n
   stock.date AS date,\n
 <dtml-if expr="precision is not None">\n
-  ROUND(stock.quantity, <dtml-var precision>) AS total_quantity,\n
-  ROUND(stock.total_price, <dtml-var precision>) AS total_price,\n
+  <dtml-if group_by_expression>SUM</dtml-if>(ROUND(stock.quantity, <dtml-var precision>)) AS total_quantity,\n
+  <dtml-if group_by_expression>SUM</dtml-if>(ROUND(stock.total_price, <dtml-var precision>)) AS total_price,\n
 <dtml-else>\n
-  stock.quantity AS total_quantity,\n
-  stock.total_price AS total_price,\n
+  <dtml-if group_by_expression>SUM</dtml-if>(stock.quantity) AS total_quantity,\n
+  <dtml-if group_by_expression>SUM</dtml-if>(stock.total_price) AS total_price,\n
 </dtml-if>\n
   stock.variation_text AS variation_text,\n
   stock.simulation_state AS simulation_state,\n
   stock.mirror_section_uid AS mirror_section_uid,\n
   stock.mirror_node_uid AS mirror_node_uid,\n
+  stock.function_uid AS function_uid,\n
+  stock.project_uid AS project_uid,\n
   node.uid AS node_uid,\n
   node.title AS node_title,\n
   node.relative_url AS node_relative_url,\n
   section.uid AS section_uid,\n
   section.title AS section_title,\n
   section.relative_url AS section_relative_url\n
-\n
 FROM\n
   stock\n
   <dtml-if section_filtered> INNER <dtml-else> LEFT </dtml-if>  \n

Modified: erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision?rev=36023&r1=36022&r2=36023&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision [utf8] (original)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision [utf8] Mon Jun  7 15:29:50 2010
@@ -1,1 +1,1 @@
-1598
+1599

Modified: erp5/trunk/products/ERP5/tests/testInventoryAPI.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testInventoryAPI.py?rev=36023&r1=36022&r2=36023&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testInventoryAPI.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testInventoryAPI.py [utf8] Mon Jun  7 15:29:50 2010
@@ -92,7 +92,6 @@
     """set up """
     self.createCategories()
     self.login()
-    self.portal = self.getPortal()
     if not hasattr(self.portal, 'testing_folder'):
       self.portal.newContent(portal_type='Folder',
                             id='testing_folder')
@@ -1670,6 +1669,58 @@
     self.assertEquals(0, mvt_history_list[1].debit_price)
     self.assertEquals(-4, mvt_history_list[1].credit_price)
 
+  def test_group_by_explanation(self):
+    getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+    delivery = self.folder.newContent(portal_type='Dummy Delivery',
+                                      destination_section_value=self.section,
+                                      source_section_value=self.mirror_section,
+                                      destination_value=self.node,
+                                      source_value=self.mirror_node,)
+    m1 = delivery.newContent(portal_type='Dummy Movement', quantity=1,
+                             price=3, resource_value=self.resource,
+                             start_date=DateTime(2010, 1, 1))
+    m2 = delivery.newContent(portal_type='Dummy Movement', quantity=1,
+                             price=2, resource_value=self.resource,
+                             start_date=DateTime(2010, 1, 1))
+    m3 = delivery.newContent(portal_type='Dummy Movement', quantity=1,
+                             price=7, resource_value=self.other_resource,
+                             start_date=DateTime(2010, 1, 2))
+    transaction.commit();
+    self.tic()
+    # sanity check, our fake movements are all created in the same delivery,
+    # and have a valid explanation uid
+    self.assertEquals(m1.getExplanationUid(),
+                      m2.getExplanationUid())
+    self.assertTrue(m1.getExplanationUid())
+    # also make sure they acquire from delivery
+    self.assertEquals(self.node, m1.getDestinationValue())
+
+    # group by explanation
+    mvt_history_list = getMovementHistoryList(node_uid=self.node.getUid(),
+                                              group_by=('explanation_uid',), )
+    self.assertEquals(1, len(mvt_history_list))
+    self.assertEquals(3, mvt_history_list[0].total_quantity)
+    self.assertEquals(3, mvt_history_list[0].running_total_quantity)
+    self.assertEquals(12, mvt_history_list[0].total_price)
+    self.assertEquals(12, mvt_history_list[0].running_total_price)
+
+    # group by explanation and resource
+    mvt_history_list = getMovementHistoryList(node_uid=self.node.getUid(),
+                                              group_by=('explanation_uid',
+                                                        'resource_uid'),
+                                              sort_on=(('stock.date', 'ASC'),))
+    self.assertEquals(2, len(mvt_history_list))
+
+    self.assertEquals(2, mvt_history_list[0].total_quantity)
+    self.assertEquals(2, mvt_history_list[0].running_total_quantity)
+    self.assertEquals(5, mvt_history_list[0].total_price)
+    self.assertEquals(5, mvt_history_list[0].running_total_price)
+
+    self.assertEquals(1, mvt_history_list[1].total_quantity)
+    self.assertEquals(3, mvt_history_list[1].running_total_quantity)
+    self.assertEquals(7, mvt_history_list[1].total_price)
+    self.assertEquals(12, mvt_history_list[1].running_total_price)
+
 
 class TestNextNegativeInventoryDate(InventoryAPITestCase):
   """Tests getInventory methods.




More information about the Erp5-report mailing list