[Erp5-report] r29743 - /erp5/trunk/products/ERP5/tests/testAccounting.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Oct 16 12:16:16 CEST 2009
Author: jerome
Date: Fri Oct 16 12:16:15 2009
New Revision: 29743
URL: http://svn.erp5.org?rev=29743&view=rev
Log:
extend test to cover accounting with multiple organisations in same branch of
group
Modified:
erp5/trunk/products/ERP5/tests/testAccounting.py
Modified: erp5/trunk/products/ERP5/tests/testAccounting.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testAccounting.py?rev=29743&r1=29742&r2=29743&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testAccounting.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testAccounting.py [utf8] Fri Oct 16 12:16:15 2009
@@ -84,9 +84,13 @@
* payment_mode/check
Organisations:
- * `self.section` an organisation in region europe/west/france
- using EUR as default currency, without any openned accounting period by
- default. This organisation is member of group/demo_group/sub1
+ * `self.section` an organisation using EUR as default currency, without any
+ openned accounting period by default. This organisation is member of
+ group/demo_group/sub1
+ * `self.master_section` an using EUR as default currency, without any
+ openned accounting period by default. This organisation is member of
+ group/demo_group. Both self.master_section and self.section are in the same
+ company from accounting point of view.
* self.client_1, self.client_2 & self.supplier, some other organisations
Accounts:
@@ -172,6 +176,8 @@
self.currency_module = self.portal.currency_module
if not hasattr(self, 'section'):
self.section = getattr(self.organisation_module, 'my_organisation', None)
+ if not hasattr(self, 'main_section'):
+ self.main_section = getattr(self.organisation_module, 'main_organisation', None)
# make sure documents are validated
for module in (self.account_module, self.organisation_module,
@@ -203,7 +209,8 @@
transaction.abort()
self.accounting_module.manage_delObjects(
list(self.accounting_module.objectIds()))
- organisation_list = ('my_organisation', 'client_1', 'client_2', 'supplier')
+ organisation_list = ('my_organisation', 'main_organisation',
+ 'client_1', 'client_2', 'supplier')
self.organisation_module.manage_delObjects([x for x in
self.accounting_module.objectIds() if x not in organisation_list])
for organisation_id in organisation_list:
@@ -278,22 +285,22 @@
class TestTransactionValidation(AccountingTestCase):
"""Test validations of accounting transactions.
- In this test suite, the section have a closed accounting period for 2006, and
- an open one for 2007.
+ In this test suite, the main section have a closed accounting period for
+ 2006, and an open one for 2007.
"""
def afterSetUp(self):
self.organisation_module = self.portal.organisation_module
- self.section = self.organisation_module.my_organisation
-
- if 'accounting_period_2006' not in self.section.objectIds():
- accounting_period_2006 = self.section.newContent(
+ self.main_section = self.organisation_module.main_organisation
+
+ if 'accounting_period_2006' not in self.main_section.objectIds():
+ accounting_period_2006 = self.main_section.newContent(
id='accounting_period_2006',
portal_type='Accounting Period',
start_date=DateTime('2006/01/01'),
stop_date=DateTime('2006/12/31'))
accounting_period_2006.start()
accounting_period_2006.stop()
- accounting_period_2007 = self.section.newContent(
+ accounting_period_2007 = self.main_section.newContent(
id='accounting_period_2007',
portal_type='Accounting Period',
start_date=DateTime('2007/01/01'),
@@ -363,7 +370,7 @@
portal_type='Payment Transaction',
stop_date=DateTime('2006/03/03'),
source_section_value=self.organisation_module.supplier,
- destination_section_value=self.section,
+ destination_section_value=self.section,
payment_mode='default',
lines=(dict(destination_value=self.account_module.goods_purchase,
destination_debit=500),
@@ -456,7 +463,7 @@
def test_AccountingTransactionValidationRecursivePeriod(self):
# Check we can/cannot validate when secondary period exists
- accounting_period_2007 = self.section.accounting_period_2007
+ accounting_period_2007 = self.main_section.accounting_period_2007
accounting_period_2007_1 = accounting_period_2007.newContent(
portal_type='Accounting Period',
start_date=DateTime('2007/01/01'),
@@ -473,6 +480,7 @@
accounting_transaction = self._makeOne(
portal_type='Accounting Transaction',
start_date=DateTime('2007/01/02'),
+ source_section_value=self.main_section,
destination_section_value=self.organisation_module.supplier,
payment_mode='default',
lines=(dict(source_value=self.account_module.goods_purchase,
@@ -1989,14 +1997,20 @@
class TestTransactions(AccountingTestCase):
"""Test behaviours and utility scripts for Accounting Transactions.
"""
+ def _resetIdGenerator(self):
+ # clear all existing ids in portal ids
+ if hasattr(self.portal.portal_ids, 'dict_ids'):
+ self.portal.portal_ids.dict_ids.clear()
+ if hasattr(self.portal.portal_ids, 'dict_length_ids'):
+ self.portal.portal_ids.dict_length_ids.clear()
+ self.portal.erp5_sql_transactionless_connection.manage_test(
+ """DELETE FROM portal_ids WHERE id_group LIKE '%accounting%'""")
+ self.portal.portal_catalog.getSQLCatalog().z_portal_ids_commit()
def test_SourceDestinationReference(self):
# Check that source reference and destination reference are filled
# automatically.
-
- # clear all existing ids in portal ids
- if hasattr(self.portal.portal_ids, 'dict_ids'):
- self.portal.portal_ids.dict_ids.clear()
+ self._resetIdGenerator()
section_period_2001 = self.section.newContent(
portal_type='Accounting Period',
short_title='code-2001',
@@ -2043,14 +2057,54 @@
self.assertEquals('code-2002-1', next_year_transaction.getSourceReference())
self.assertEquals('2002-1', next_year_transaction.getDestinationReference())
+ def test_SourceDestinationReferenceGroupAccounting(self):
+ # Check that source reference and destination reference are filled
+ # automatically when using multiple sections
+ self._resetIdGenerator()
+ section_period_2001 = self.main_section.newContent(
+ portal_type='Accounting Period',
+ short_title='code-2001',
+ start_date=DateTime(2001, 01, 01),
+ stop_date=DateTime(2001, 12, 31))
+ section_period_2001.start()
+ section_period_2002 = self.main_section.newContent(
+ portal_type='Accounting Period',
+ short_title='code-2002',
+ start_date=DateTime(2002, 01, 01),
+ stop_date=DateTime(2002, 12, 31))
+ section_period_2002.start()
+
+ accounting_transaction = self._makeOne(
+ source_section_value=self.main_section,
+ destination_section_value=self.organisation_module.client_1,
+ start_date=DateTime(2001, 01, 01),
+ stop_date=DateTime(2001, 01, 01))
+ self.portal.portal_workflow.doActionFor(
+ accounting_transaction, 'stop_action')
+ # The reference generated for the source section uses the short title from
+ # the accounting period
+ self.assertEquals('code-2001-1', accounting_transaction.getSourceReference())
+ # This works, because we use
+ # 'AccountingTransaction_getAccountingPeriodForSourceSection' script
+ self.assertEquals(section_period_2001, accounting_transaction\
+ .AccountingTransaction_getAccountingPeriodForSourceSection())
+ # If no accounting period exists on this side, the transaction date is
+ # used.
+ self.assertEquals('2001-1', accounting_transaction.getDestinationReference())
+
+ other_section_transaction = self._makeOne(
+ destination_section_value=self.organisation_module.client_2,
+ start_date=DateTime(2001, 01, 01),
+ stop_date=DateTime(2001, 01, 01))
+ self.portal.portal_workflow.doActionFor(other_section_transaction, 'stop_action')
+ # The numbering is shared by all the sections
+ self.assertEquals('code-2001-2', other_section_transaction.getSourceReference())
+ self.assertEquals('2001-1', other_section_transaction.getDestinationReference())
+
def test_SourceDestinationReferenceSecurity(self):
# Check that we don't need specific roles to set source reference and
# destination reference, as long as we can pass the workflow transition
-
- # clear all existing ids in portal ids
- if hasattr(self.portal.portal_ids, 'dict_ids'):
- self.portal.portal_ids.dict_ids.clear()
-
+ self._resetIdGenerator()
section_period_2001 = self.section.newContent(
portal_type='Accounting Period',
short_title='code-2001',
@@ -2097,6 +2151,27 @@
self.assertTrue('A description' in searchable_text)
self.assertTrue('Some comments' in searchable_text)
+
+ def test_Organisation_getMappingRelatedOrganisation(self):
+ # the main section needs an accounting period to be treated as mapping
+ # related by Organisation_getMappingRelatedOrganisation
+ section_period_2001 = self.main_section.newContent(
+ portal_type='Accounting Period',
+ short_title='code-2001',
+ start_date=DateTime(2001, 01, 01),
+ stop_date=DateTime(2001, 12, 31))
+
+ self.assertEquals(self.main_section,
+ self.section.Organisation_getMappingRelatedOrganisation())
+ self.assertEquals(self.main_section,
+ self.main_section.Organisation_getMappingRelatedOrganisation())
+
+ client = self.organisation_module.client_1
+ self.assertEquals(None, client.getGroupValue())
+ self.assertEquals(client,
+ client.Organisation_getMappingRelatedOrganisation())
+
+
# tests for Invoice_createRelatedPaymentTransaction
def _checkRelatedSalePayment(self, invoice, payment, payment_node, quantity):
"""Check payment of a Sale Invoice.
@@ -2388,6 +2463,61 @@
simulation_state='delivered',
causality_value=invoice,
source_payment_value=self.section.newContent(
+ portal_type='Bank Account'),
+ destination_section_value=self.organisation_module.client_1,
+ lines=(dict(source_value=self.account_module.receivable,
+ id='line_for_grouping_reference',
+ source_debit=100),
+ dict(source_value=self.account_module.bank,
+ source_credit=100,)))
+ payment_line = payment.line_for_grouping_reference
+
+ self.failIf(invoice_line.getGroupingReference())
+ self.failIf(payment_line.getGroupingReference())
+
+ # lines match, they are automatically grouped
+ invoice.stop()
+ self.failUnless(invoice_line.getGroupingReference())
+ self.failUnless(payment_line.getGroupingReference())
+
+ # when restarting, grouping is removed
+ invoice.restart()
+ transaction.commit()
+ self.tic()
+ self.failIf(invoice_line.getGroupingReference())
+ self.failIf(payment_line.getGroupingReference())
+ invoice.stop()
+ self.failUnless(invoice_line.getGroupingReference())
+ self.failUnless(payment_line.getGroupingReference())
+
+ def test_automatically_setting_grouping_reference_same_group(self):
+ # invoice is for section, payment is for main_section
+
+ # the main section needs an accounting period to be treated as mapping
+ # related by Organisation_getMappingRelatedOrganisation
+ section_period_2001 = self.main_section.newContent(
+ portal_type='Accounting Period',
+ short_title='code-2001',
+ start_date=DateTime(2001, 01, 01),
+ stop_date=DateTime(2001, 12, 31))
+
+ invoice = self._makeOne(
+ title='First Invoice',
+ destination_section_value=self.organisation_module.client_1,
+ lines=(dict(source_value=self.account_module.goods_purchase,
+ source_debit=100),
+ dict(source_value=self.account_module.receivable,
+ source_credit=100,
+ id='line_for_grouping_reference',)))
+ invoice_line = invoice.line_for_grouping_reference
+
+ payment = self._makeOne(
+ title='First Invoice Payment',
+ portal_type='Payment Transaction',
+ simulation_state='delivered',
+ causality_value=invoice,
+ source_section_value=self.main_section,
+ source_payment_value=self.main_section.newContent(
portal_type='Bank Account'),
destination_section_value=self.organisation_module.client_1,
lines=(dict(source_value=self.account_module.receivable,
More information about the Erp5-report
mailing list