[Erp5-report] r9790 - in /erp5/trunk/products/ERP5: Tool/ bootstrap/erp5_core/SkinTemplateI...
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Sep 8 23:28:48 CEST 2006
Author: jerome
Date: Fri Sep 8 23:28:43 2006
New Revision: 9790
URL: http://svn.erp5.org?rev=9790&view=rev
Log:
support running total for price and total quantity, computed by RDBMS.
This is SQL code will likely run only on MySQL.
Modified:
erp5/trunk/products/ERP5/Tool/SimulationTool.py
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/Tool/SimulationTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/SimulationTool.py?rev=9790&r1=9789&r2=9790&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/SimulationTool.py (original)
+++ erp5/trunk/products/ERP5/Tool/SimulationTool.py Fri Sep 8 23:28:43 2006
@@ -865,10 +865,14 @@
standardise=0, omit_simulation=0,
omit_input=0, omit_output=0,
selection_domain=None, selection_report=None,
+ initial_running_total_quantity=0,
+ initial_running_total_price=0,
**kw):
- """
- Returns a list of movements which modify the inventory
+ """Returns a list of movements which modify the inventory
for a single or a group of resource, node, section, etc.
+ A running total quantity and a running total price are available on
+ brains. The initial values can be passed, in case you want to have an
+ "initial summary line".
"""
sql_kw = self._generateSQLKeywordDict(**kw)
return self.Resource_zGetMovementHistoryList(
@@ -877,7 +881,12 @@
omit_simulation=omit_simulation,
omit_input=omit_input, omit_output=omit_output,
selection_domain=selection_domain,
- selection_report=selection_report, **sql_kw)
+ selection_report=selection_report,
+ initial_running_total_quantity=
+ initial_running_total_quantity,
+ initial_running_total_price=
+ initial_running_total_price,
+ **sql_kw)
security.declareProtected(Permissions.AccessContentsInformation,
'getMovementHistoryStat')
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=9790&r1=9789&r2=9790&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Resource_zGetMovementHistoryList.xml (original)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Resource_zGetMovementHistoryList.xml Fri Sep 8 23:28:43 2006
@@ -51,6 +51,18 @@
</item>
<item>
<key> <string>ignore_variation</string> </key>
+ <value>
+ <dictionary/>
+ </value>
+ </item>
+ <item>
+ <key> <string>initial_running_total_price</string> </key>
+ <value>
+ <dictionary/>
+ </value>
+ </item>
+ <item>
+ <key> <string>initial_running_total_quantity</string> </key>
<value>
<dictionary/>
</value>
@@ -143,6 +155,8 @@
<string>omit_simulation</string>
<string>omit_input</string>
<string>omit_output</string>
+<string>initial_running_total_quantity</string>
+<string>initial_running_total_price</string>
<string>input_simulation_state</string>
<string>output_simulation_state</string>
</list>
@@ -587,6 +601,8 @@
omit_simulation\r\n
omit_input\r\n
omit_output\r\n
+initial_running_total_quantity\r\n
+initial_running_total_price\r\n
input_simulation_state:list\r\n
output_simulation_state:list</string> </value>
</item>
@@ -628,14 +644,29 @@
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
+SET @running_total_quantity := <dtml-var initial_running_total_quantity>,\n
+ @running_total_price := <dtml-var initial_running_total_price>;\n
+\n
+<dtml-var sql_delimiter>\n
+\n
+SELECT \n
+ q1.*,\n
+ @running_total_quantity := q1.total_quantity + \n
+ @running_total_quantity AS running_total_quantity,\n
+ @running_total_price := q1.total_price + \n
+ @running_total_price AS running_total_price\n
+FROM (\n
SELECT\n
catalog.path as path,\n
catalog.uid as uid,\n
catalog.relative_url as relative_url,\n
stock.date AS date,\n
stock.quantity AS total_quantity,\n
+ stock.total_price AS total_price,\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
node.uid AS node_uid,\n
node.title AS node_title,\n
node.relative_url AS node_relative_url,\n
@@ -714,16 +745,19 @@
<dtml-if selection_report>\n
AND <dtml-var "selection_report.asSqlExpression(strict_membership=1)">\n
</dtml-if>\n
+\n
GROUP BY\n
<dtml-if group_by_expression>\n
<dtml-var group_by_expression>\n
<dtml-else>\n
stock.uid, stock.node_uid, stock.resource_uid\n
</dtml-if>\n
+\n
<dtml-if order_by_expression>\n
ORDER BY\n
<dtml-var order_by_expression>\n
</dtml-if>\n
+) AS q1\n
]]></string> </value>
@@ -762,14 +796,29 @@
<key> <string>raw</string> </key>
<value> <string encoding="cdata"><![CDATA[
+SET @running_total_quantity := <dtml-var initial_running_total_quantity>,\n
+ @running_total_price := <dtml-var initial_running_total_price>;\n
+\n
+<dtml-var sql_delimiter>\n
+\n
+SELECT \n
+ q1.*,\n
+ @running_total_quantity := q1.total_quantity + \n
+ @running_total_quantity AS running_total_quantity,\n
+ @running_total_price := q1.total_price + \n
+ @running_total_price AS running_total_price\n
+FROM (\n
SELECT\n
catalog.path as path,\n
catalog.uid as uid,\n
catalog.relative_url as relative_url,\n
stock.date AS date,\n
stock.quantity AS total_quantity,\n
+ stock.total_price AS total_price,\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
node.uid AS node_uid,\n
node.title AS node_title,\n
node.relative_url AS node_relative_url,\n
@@ -848,16 +897,19 @@
<dtml-if selection_report>\n
AND <dtml-var "selection_report.asSqlExpression(strict_membership=1)">\n
</dtml-if>\n
+\n
GROUP BY\n
<dtml-if group_by_expression>\n
<dtml-var group_by_expression>\n
<dtml-else>\n
stock.uid, stock.node_uid, stock.resource_uid\n
</dtml-if>\n
+\n
<dtml-if order_by_expression>\n
ORDER BY\n
<dtml-var order_by_expression>\n
</dtml-if>\n
+) AS q1\n
]]></string> </value>
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=9790&r1=9789&r2=9790&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision (original)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision Fri Sep 8 23:28:43 2006
@@ -1,1 +1,1 @@
-56
+61
Modified: erp5/trunk/products/ERP5/tests/testInventoryAPI.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testInventoryAPI.py?rev=9790&r1=9789&r2=9790&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testInventoryAPI.py (original)
+++ erp5/trunk/products/ERP5/tests/testInventoryAPI.py Fri Sep 8 23:28:43 2006
@@ -849,7 +849,73 @@
omit_simulation=1)
self.assertEquals(1, len(movement_history_list))
self.assertEquals(100, movement_history_list[0].quantity)
-
+
+ def test_RunningTotalQuantity(self):
+ """Test that a running_total_quantity attribute is set on brains
+ """
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ date_and_qty_list = [(DateTime(2006, 01, day), day) for day in range(1, 10)]
+ for date, quantity in date_and_qty_list:
+ self._makeMovement(stop_date=date, quantity=quantity)
+ movement_history_list = getMovementHistoryList(
+ section_uid=self.section.getUid(),
+ sort_on=[('stock.date', 'asc'),
+ ('stock.uid', 'asc')])
+ running_total_quantity=0
+ for idx, (date, quantity) in enumerate(date_and_qty_list):
+ brain = movement_history_list[idx]
+ running_total_quantity += quantity
+ self.assertEquals(running_total_quantity, brain.running_total_quantity)
+ self.assertEquals(date, brain.date)
+ self.assertEquals(quantity, brain.quantity)
+
+ def test_RunningTotalPrice(self):
+ """Test that a running_total_price attribute is set on brains
+ """
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ date_and_price_list = [(DateTime(2006, 01, day), day) for day in range(1, 10)]
+ for date, price in date_and_price_list:
+ self._makeMovement(stop_date=date, quantity=1, price=price)
+ movement_history_list = getMovementHistoryList(
+ section_uid=self.section.getUid(),
+ sort_on=[('stock.date', 'asc'),
+ ('stock.uid', 'asc')])
+ running_total_price=0
+ for idx, (date, price) in enumerate(date_and_price_list):
+ brain = movement_history_list[idx]
+ running_total_price += price
+ self.assertEquals(running_total_price, brain.running_total_price)
+ self.assertEquals(date, brain.date)
+ self.assertEquals(price, brain.total_price)
+
+ def test_RunningTotalWithInitialValue(self):
+ """Test running_total_price and running_total_quantity with an initial
+ value.
+ """
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ date_and_qty_list = [(DateTime(2006, 01, day), day) for day in range(1, 10)]
+ for date, quantity in date_and_qty_list:
+ self._makeMovement(stop_date=date, price=quantity, quantity=quantity)
+ initial_running_total_price=100
+ initial_running_total_quantity=-10
+ movement_history_list = getMovementHistoryList(
+ initial_running_total_quantity=
+ initial_running_total_quantity,
+ initial_running_total_price=
+ initial_running_total_price,
+ section_uid=self.section.getUid(),
+ sort_on=[('stock.date', 'asc'),
+ ('stock.uid', 'asc')])
+ running_total_price=initial_running_total_price
+ running_total_quantity=initial_running_total_quantity
+ for idx, (date, quantity) in enumerate(date_and_qty_list):
+ brain = movement_history_list[idx]
+ self.assertEquals(date, brain.date)
+ running_total_quantity += quantity
+ self.assertEquals(running_total_quantity, brain.running_total_quantity)
+ running_total_price += quantity * quantity # we've set price=quantity
+ self.assertEquals(running_total_price, brain.running_total_price)
+
class TestInventoryStat(InventoryAPITestCase):
"""Tests Inventory Stat methods.
"""
More information about the Erp5-report
mailing list