[Erp5-report] r20622 - /erp5/trunk/products/ERP5/tests/testTradeReports.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Apr 17 16:57:47 CEST 2008
Author: aurel
Date: Thu Apr 17 16:57:46 2008
New Revision: 20622
URL: http://svn.erp5.org?rev=20622&view=rev
Log:
check order report
Modified:
erp5/trunk/products/ERP5/tests/testTradeReports.py
Modified: erp5/trunk/products/ERP5/tests/testTradeReports.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testTradeReports.py?rev=20622&r1=20621&r2=20622&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testTradeReports.py (original)
+++ erp5/trunk/products/ERP5/tests/testTradeReports.py Thu Apr 17 16:57:46 2008
@@ -42,7 +42,7 @@
def getBusinessTemplateList(self):
"""Returns list of BT to be installed."""
- return ('erp5_base', 'erp5_trade', 'erp5_pdm')
+ return ('erp5_base', 'erp5_trade', 'erp5_pdm', )
def login(self):
"""login with Manager roles."""
@@ -52,13 +52,14 @@
user = uf.getUserById('manager').__of__(uf)
newSecurityManager(None, user)
- def setUp(self):
+
+ def afterSetUp(self):
"""Setup the fixture.
"""
- ERP5TypeTestCase.setUp(self)
self.portal = self.getPortal()
self.organisation_module = self.portal.organisation_module
self.inventory_module = self.portal.inventory_module
+ self.sale_order_module = self.portal.sale_order_module
self.product_module = self.portal.product_module
self.portal_categories = self.portal.portal_categories
@@ -79,6 +80,14 @@
reference=colour_id,
id=colour_id)
+ # create group categories
+ for group_id in ('g1', 'g2',):
+ if not self.portal_categories['group'].has_key(group_id):
+ self.portal_categories.group.newContent(
+ portal_type='Category',
+ title=group_id,
+ reference=group_id,
+ id=group_id)
# create organisations
if not self.organisation_module.has_key('Organisation_1'):
org = self.portal.organisation_module.newContent(
@@ -86,6 +95,7 @@
reference='Organisation_1',
title='Organisation_1',
id='Organisation_1',
+ group='g1',
site='demo_site_A')
if not self.organisation_module.has_key('Organisation_2'):
org = self.portal.organisation_module.newContent(
@@ -93,8 +103,17 @@
reference='Organisation_2',
title='Organisation_2',
id='Organisation_2',
+ group='g2',
site='demo_site_B')
-
+ # create unit categories
+ for unit_id in ('kg', 'g',):
+ if not self.portal_categories['quantity_unit'].has_key(unit_id):
+ self.portal_categories.quantity_unit.newContent(
+ portal_type='Category',
+ title=unit_id,
+ reference=unit_id,
+ id=unit_id)
+
# Create products
module = self.portal.product_module
if not module.has_key('product_B'):
@@ -103,6 +122,7 @@
id='product_B',
title='product_B',
reference='ref 1',
+ quantity_unit='kg'
)
if not module.has_key('product_A'):
product = module.newContent(
@@ -110,6 +130,7 @@
id='product_A',
title='product_A',
reference='ref 2',
+ quantity_unit='g'
)
if not module.has_key('product_C'):
product = module.newContent(
@@ -125,7 +146,7 @@
get_transaction().commit()
self.tic()
- def tearDown(self):
+ def beforeTearDown(self):
"""Remove all documents.
"""
get_transaction().abort()
@@ -144,8 +165,6 @@
get_transaction().commit()
self.tic()
- ERP5TypeTestCase.tearDown(self)
-
@reindex
def _makeOneInventory(self, simulation_state='draft',
resource=None, quantity=None, **kw):
@@ -163,6 +182,26 @@
self.assertEquals(simulation_state, inventory.getSimulationState())
return inventory
+ @reindex
+ def _makeOneSaleOrder(self, resource_dict={}, cancel=False, **kw):
+ """
+ Create a sale order
+ """
+ sale_order = self.sale_order_module.newContent(portal_type="Sale Order", **kw)
+ for product, values in resource_dict.iteritems():
+ sale_order_line = sale_order.newContent(portal_type="Sale Order Line",
+ resource=product,
+ quantity=values["quantity"],
+ price=values["price"])
+
+ self.assertEquals(sale_order.getSimulationState(), 'draft')
+ if cancel:
+ sale_order.cancel()
+ self.assertEquals(sale_order.getSimulationState(), 'cancelled')
+
+ return sale_order
+
+
def checkLineProperties(self, line, **kw):
"""Check properties of a report line.
"""
@@ -170,6 +209,291 @@
self.assertEquals(v, line.getColumnProperty(k),
'`%s`: expected: %r actual: %r' % (k, v, line.getColumnProperty(k)))
# /utility methods for ERP5 Report
+
+ def testSaleOrderReport(self):
+ """
+ Sale order report.
+ """
+ # Create sales orders
+ first = self._makeOneSaleOrder(
+ title='SO 1',
+ destination_value=self.organisation_module.Organisation_1,
+ destination_section_value=self.organisation_module.Organisation_1,
+ destination_decision_value=self.organisation_module.Organisation_1,
+ source_value=self.organisation_module.Organisation_2,
+ source_section_value=self.organisation_module.Organisation_2,
+ source_decision_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2006, 2, 2),
+ resource_dict = {'product_module/product_A':{"quantity":11, "price":3},
+ 'product_module/product_B':{"quantity":7, "price":6},}
+ )
+ second = self._makeOneSaleOrder(
+ title='SO 2',
+ destination_value=self.organisation_module.Organisation_1,
+ destination_section_value=self.organisation_module.Organisation_1,
+ destination_decision_value=self.organisation_module.Organisation_1,
+ source_value=self.organisation_module.Organisation_2,
+ source_section_value=self.organisation_module.Organisation_2,
+ source_decision_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 2, 2),
+ resource_dict = {'product_module/product_A':{"quantity":3, "price":3},}
+ )
+ third = self._makeOneSaleOrder(
+ title='SO 3',
+ destination_value=self.organisation_module.Organisation_2,
+ destination_section_value=self.organisation_module.Organisation_2,
+ destination_decision_value=self.organisation_module.Organisation_2,
+ source_value=self.organisation_module.Organisation_1,
+ source_section_value=self.organisation_module.Organisation_1,
+ source_decision_value=self.organisation_module.Organisation_1,
+ start_date=DateTime(2006, 2, 2),
+ resource_dict = {'product_module/product_A':{"quantity":5, "price":3},
+ 'product_module/product_B':{"quantity":1, "price":6},}
+ )
+ fourth = self._makeOneSaleOrder(
+ title='SO 4',
+ destination_value=self.organisation_module.Organisation_1,
+ destination_section_value=self.organisation_module.Organisation_1,
+ destination_decision_value=self.organisation_module.Organisation_1,
+ source_value=self.organisation_module.Organisation_2,
+ source_section_value=self.organisation_module.Organisation_2,
+ source_decision_value=self.organisation_module.Organisation_2,
+ start_date=DateTime(2007, 2, 2),
+ resource_dict = {'product_module/product_A':{"quantity":17, "price":3},
+ 'product_module/product_B':{"quantity":13, "price":6},},
+ cancel=True
+ )
+
+ get_transaction().commit()
+ self.tic()
+
+
+ request = self.portal.REQUEST
+ #
+ # Before 2006
+ #
+ request['from_date'] = DateTime(2004, 1, 1)
+ request['at_date'] = DateTime(2005, 1, 1)
+ request['aggregation_level'] = "year"
+ request['group_by'] = "both"
+ request['simulation_state'] = ['cancelled', 'draft']
+ report_section_list = self.getReportSectionList(self.sale_order_module,
+ 'OrderModule_viewOrderReport')
+ self.assertEquals(1, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ self.assertEquals(0, len(data_line_list))
+
+ #
+ # Year 2005 + 2006, all documents
+ #
+ request['from_date'] = DateTime(2005, 2, 2)
+ request['at_date'] = DateTime("2006-12-31")
+
+ report_section_list = self.getReportSectionList(self.sale_order_module,
+ 'OrderModule_viewOrderReport')
+ self.assertEquals(1, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ stat_line_list = [l for l in line_list if l.isStatLine()]
+ self.assertEquals(6, len(data_line_list))
+ self.assertEquals(1, len(stat_line_list))
+
+ # test columns values
+ line = data_line_list[0]
+ self.assertEquals(line.column_id_list, ['client',
+ 'product',
+ 'Amount 2005',
+ 'Quantity 2005',
+ 'Quantity Unit 2005',
+ 'Amount 2006',
+ 'Quantity 2006',
+ 'Quantity Unit 2006',
+ 'total amount',
+ 'total quantity'])
+
+ # First Organisation
+ d = {'Amount 2005': 0,
+ 'Amount 2006': 75.0,
+ 'Quantity 2005': None,
+ 'Quantity 2006': None,
+ 'Quantity Unit 2005': None,
+ 'Quantity Unit 2006': None,
+ 'client': 'Organisation_1',
+ 'product': None,
+ 'total amount': 75.0,
+ 'total quantity': None}
+ self.checkLineProperties(data_line_list[0],**d)
+
+ # Product one for first organisation
+ d={'Amount 2005': 0,
+ 'Amount 2006': 33.0,
+ 'Quantity 2005': 0,
+ 'Quantity 2006': 11.0,
+ 'Quantity Unit 2005': '',
+ 'Quantity Unit 2006': 'g',
+ 'client': None,
+ 'product': 'product_A',
+ 'total amount': 33.0,
+ 'total quantity': 11.0}
+ self.checkLineProperties(data_line_list[1],**d)
+
+ # Product two for first organisation
+ d = {'Amount 2005': 0,
+ 'Amount 2006': 42.0,
+ 'Quantity 2005': 0,
+ 'Quantity 2006': 7.0,
+ 'Quantity Unit 2005': '',
+ 'Quantity Unit 2006': 'kg',
+ 'client': None,
+ 'product': 'product_B',
+ 'total amount': 42.0,
+ 'total quantity': 7.0}
+ self.checkLineProperties(data_line_list[2],**d)
+
+ # Second organisation
+ d = {'Amount 2005': 0,
+ 'Amount 2006': 21.0,
+ 'Quantity 2005': None,
+ 'Quantity 2006': None,
+ 'Quantity Unit 2005': None,
+ 'Quantity Unit 2006': None,
+ 'client': 'Organisation_2',
+ 'product': None,
+ 'total amount': 21.0,
+ 'total quantity': None}
+ self.checkLineProperties(data_line_list[3],**d)
+
+ # Product one for second organisation
+ d = {'Amount 2005': 0,
+ 'Amount 2006': 15.0,
+ 'Quantity 2005': 0,
+ 'Quantity 2006': 5.0,
+ 'Quantity Unit 2005': '',
+ 'Quantity Unit 2006': 'g',
+ 'client': None,
+ 'product': 'product_A',
+ 'total amount': 15.0,
+ 'total quantity': 5.0}
+ self.checkLineProperties(data_line_list[4],**d)
+
+ # Product two for second organisation
+ d = {'Amount 2005': 0,
+ 'Amount 2006': 6.0,
+ 'Quantity 2005': 0,
+ 'Quantity 2006': 1.0,
+ 'Quantity Unit 2005': '',
+ 'Quantity Unit 2006': 'kg',
+ 'client': None,
+ 'product': 'product_B',
+ 'total amount': 6.0,
+ 'total quantity': 1.0}
+ self.checkLineProperties(data_line_list[5],**d)
+
+ # stat line
+ d = {'Amount 2005': None,
+ 'Amount 2006': 96.0,
+ 'Quantity 2005': None,
+ 'Quantity 2006': None,
+ 'Quantity Unit 2005': None,
+ 'Quantity Unit 2006': None,
+ 'client': 'Total',
+ 'product': None,
+ 'total amount': 96.0,
+ 'total quantity': None}
+ self.checkLineProperties(stat_line_list[0],**d)
+
+
+ #
+ # Year 2006 + 2007, only draft documents and one group
+ #
+ request['from_date'] = DateTime(2006, 2, 2)
+ request['at_date'] = DateTime(2007, 12, 31)
+ request['simulation_state'] = ['draft',]
+ request['group'] = 'g2'
+ report_section_list = self.getReportSectionList(self.sale_order_module,
+ 'OrderModule_viewOrderReport')
+ self.assertEquals(1, len(report_section_list))
+
+ line_list = self.getListBoxLineList(report_section_list[0])
+ data_line_list = [l for l in line_list if l.isDataLine()]
+ stat_line_list = [l for l in line_list if l.isStatLine()]
+ self.assertEquals(3, len(data_line_list))
+ self.assertEquals(1, len(stat_line_list))
+ # First organisation
+ d = {'Amount 2006': 75.0,
+ 'Amount 2007': 9.0,
+ 'Quantity 2006': None,
+ 'Quantity 2007': None,
+ 'Quantity Unit 2006': None,
+ 'Quantity Unit 2007': None,
+ 'client': 'Organisation_1',
+ 'product': None,
+ 'total amount': 84.0,
+ 'total quantity': None}
+ self.checkLineProperties(data_line_list[0],**d)
+ # Product one for organisation
+ d = {'Amount 2006': 33.0,
+ 'Amount 2007': 9.0,
+ 'Quantity 2006': 11.0,
+ 'Quantity 2007': 3.0,
+ 'Quantity Unit 2006': 'g',
+ 'Quantity Unit 2007': 'g',
+ 'client': None,
+ 'product': 'product_A',
+ 'total amount': 42.0,
+ 'total quantity': 14.0}
+ # Product two for organisation
+ self.checkLineProperties(data_line_list[1],**d)
+ d = {'Amount 2006': 42.0,
+ 'Amount 2007': 0,
+ 'Quantity 2006': 7.0,
+ 'Quantity 2007': 0,
+ 'Quantity Unit 2006': 'kg',
+ 'Quantity Unit 2007': '',
+ 'client': None,
+ 'product': 'product_B',
+ 'total amount': 42.0,
+ 'total quantity': 7.0}
+ self.checkLineProperties(data_line_list[2],**d)
+ # stat line
+ d = {'Amount 2006': 75.0,
+ 'Amount 2007': 9.0,
+ 'Quantity 2006': None,
+ 'Quantity 2007': None,
+ 'Quantity Unit 2006': None,
+ 'Quantity Unit 2007': None,
+ 'client': 'Total',
+ 'product': None,
+ 'total amount': 84.0,
+ 'total quantity': None}
+ self.checkLineProperties(stat_line_list[0],**d)
+
+ # utility methods for ERP5 Report
+ def getReportSectionList(self, context, report_name):
+ """Get the list of report sections in a report."""
+ report = getattr(context, report_name)
+ report_method = getattr(context, report.report_method)
+ return report_method()
+
+ def getListBoxLineList(self, report_section):
+ """Render the listbox in a report section, return None if no listbox exists
+ in the report_section.
+ """
+ result = None
+ here = report_section.getObject(self.portal)
+ report_section.pushReport(self.portal)
+ form = getattr(here, report_section.getFormId())
+ if form.has_field('listbox'):
+ result = form.listbox.get_value('default',
+ render_format='list',
+ REQUEST=self.portal.REQUEST)
+ report_section.popReport(self.portal)
+ return result
+
+
def testStockReport(self):
"""
@@ -277,7 +601,7 @@
resource_reference='ref 2',
variation_text='',
inventory=11,
- quantity_unit='')
+ quantity_unit='g')
################################
# Futur date
@@ -298,14 +622,14 @@
resource_reference='ref 1',
variation_text='',
inventory=33,
- quantity_unit='')
+ quantity_unit='kg')
self.checkLineProperties(
data_line_list[1],
resource_title='product_A',
resource_reference='ref 2',
variation_text='',
inventory=22,
- quantity_unit='')
+ quantity_unit='g')
self.checkLineProperties(
data_line_list[2],
resource_title='variated product',
More information about the Erp5-report
mailing list