From f5fa45fbd0eb657fb287bcd57a3c68874d4db3f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com> Date: Tue, 19 Jan 2010 10:36:48 +0000 Subject: [PATCH] add tests for corner cases with dates on the non grouped from previous period on Account Statement git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@31814 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/tests/testAccountingReports.py | 213 ++++++++++++++++++++ 1 file changed, 213 insertions(+) diff --git a/product/ERP5/tests/testAccountingReports.py b/product/ERP5/tests/testAccountingReports.py index 1bd3963a49..5c8851f57b 100644 --- a/product/ERP5/tests/testAccountingReports.py +++ b/product/ERP5/tests/testAccountingReports.py @@ -995,7 +995,220 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): self.failUnless(line_list[-1].isStatLine()) self.checkLineProperties(line_list[-1], debit=700, credit=600) + + def _createAccountStatementGroupedAtFromDateDataSet(self): + # create data set where the first transaction is grouped with another + # transaction on 2006/02/25, but with hour:minutes, which use to cause some + # bugs with the "non grouped lines from previous period" in the account + # statement. + account_module = self.account_module + bank = self.section.newContent(portal_type='Bank Account', title='Bank') + bank.validate() + # before + # this one will not have grouping reference + t1 = self._makeOne( + portal_type='Accounting Transaction', + title='Transaction 1', + source_reference='1', + simulation_state='delivered', + destination_section_value=self.organisation_module.client_1, + start_date=DateTime(2006, 2, 1), + lines=(dict(source_value=account_module.receivable, + source_debit=100.0), + dict(source_value=account_module.payable, + source_credit=100.0))) + + # This one will be grouped exactly at from_date + t2 = self._makeOne( + portal_type='Sale Invoice Transaction', + title='Transaction 2', + source_reference='2', + destination_section_value=self.organisation_module.client_1, + start_date=DateTime(2006, 2, 2), + lines=(dict(source_value=account_module.receivable, + grouping_reference='A', + source_debit=200.0), + dict(source_value=account_module.payable, + source_credit=200.0))) + + # payment related to t2 invoice + t3 = self._makeOne( + portal_type='Payment Transaction', + title='Transaction 3', + source_reference='3', + simulation_state='delivered', + causality_value=t2, + payment_mode='payment_mode', + destination_section_value=self.organisation_module.client_1, + start_date=DateTime(2006, 2, 25, 2, 3), + lines=(dict(source_value=account_module.bank, + source_debit=200.0), + dict(source_value=account_module.receivable, + grouping_reference='A', + source_credit=200.0))) + # we validate t2 later, otherwise grouping reference will be cleaned up + t2.stop() + t2.deliver() + + # Another invoice in the period + t4 = self._makeOne( + portal_type='Sale Invoice Transaction', + title='Transaction 4', + source_reference='4', + destination_section_value=self.organisation_module.client_1, + start_date=DateTime(2006, 3, 1), + lines=(dict(source_value=account_module.receivable, + source_debit=400.0), + dict(source_value=account_module.payable, + source_credit=400.0))) + t4.stop() + t4.deliver() + transaction.commit() + self.tic() + + + def testAccountStatementFromDateDetailedSummaryGroupedAtFromDate(self): + # at the exact date of the grouped transaction + self._createAccountStatementGroupedAtFromDateDataSet() + # set request variables and render + request_form = self.portal.REQUEST.form + request_form['node'] = \ + self.portal.account_module.receivable.getRelativeUrl() + request_form['from_date'] = DateTime(2006, 2, 25) + request_form['at_date'] = DateTime(2006, 6, 1) + request_form['section_category'] = 'group/demo_group' + request_form['simulation_state'] = ['delivered'] + request_form['detailed_from_date_summary'] = 1 + + report_section_list = self.getReportSectionList( + self.portal.accounting_module, + 'AccountModule_viewAccountStatementReport') + # the report has 4 sections, + self.assertEquals(4, len(report_section_list)) + # but 2 of them are only titles + report_section_list = [r for r in report_section_list if r.form_id] + self.assertEquals(2, len(report_section_list)) + + # the first section contains explanation of non grouped lines before the + # period + line_list = self.getListBoxLineList(report_section_list[0]) + data_line_list = [l for l in line_list if l.isDataLine()] + # We only have line for transactions 1 and 2 which are not grouped + self.assertEquals(2, len(data_line_list)) + self.checkLineProperties(data_line_list[0], + Movement_getSpecificReference='1', + date=DateTime(2006, 2, 1), + Movement_getExplanationTitle='Transaction 1', + Movement_getMirrorSectionTitle='Client 1', + debit=100, + credit=0,) + self.checkLineProperties(data_line_list[1], + Movement_getSpecificReference='2', + date=DateTime(2006, 2, 2), + Movement_getExplanationTitle='Transaction 2', + Movement_getMirrorSectionTitle='Client 1', + debit=200, + credit=0,) + self.failUnless(line_list[-1].isStatLine()) + self.checkLineProperties(line_list[-1], debit=300, credit=0) + + # Second section is for previous balance summary and lines in the period, + # transaction 3 and transaction 4 + line_list = self.getListBoxLineList(report_section_list[1]) + data_line_list = [l for l in line_list if l.isDataLine()] + self.assertEquals(3, len(data_line_list)) + self.checkLineProperties(data_line_list[0], + Movement_getSpecificReference='Previous Balance', + date=DateTime(2006, 2, 25), + Movement_getExplanationTitle='', + Movement_getMirrorSectionTitle='', + running_total_price=300, + debit=300, + credit=0,) + self.checkLineProperties(data_line_list[1], + Movement_getSpecificReference='3', + date=DateTime(2006, 2, 25, 2, 3), + Movement_getExplanationTitle='Transaction 3', + Movement_getMirrorSectionTitle='Client 1', + running_total_price=100, + debit=0, + credit=200,) + self.checkLineProperties(data_line_list[2], + Movement_getSpecificReference='4', + date=DateTime(2006, 3, 1), + Movement_getExplanationTitle='Transaction 4', + Movement_getMirrorSectionTitle='Client 1', + running_total_price=500, + debit=400, + credit=0,) + self.failUnless(line_list[-1].isStatLine()) + self.checkLineProperties(line_list[-1], debit=700, credit=200) + + def testAccountStatementFromDateDetailedSummaryGroupedAtFromDateCase2(self): + # The day after the date of the grouped transaction + self._createAccountStatementGroupedAtFromDateDataSet() + + # set request variables and render + request_form = self.portal.REQUEST.form + request_form['node'] = \ + self.portal.account_module.receivable.getRelativeUrl() + request_form['from_date'] = DateTime(2006, 2, 26) + request_form['at_date'] = DateTime(2006, 6, 1) + request_form['section_category'] = 'group/demo_group' + request_form['simulation_state'] = ['delivered'] + request_form['detailed_from_date_summary'] = 1 + + report_section_list = self.getReportSectionList( + self.portal.accounting_module, + 'AccountModule_viewAccountStatementReport') + # the report has 4 sections, + self.assertEquals(4, len(report_section_list)) + # but 2 of them are only titles + report_section_list = [r for r in report_section_list if r.form_id] + self.assertEquals(2, len(report_section_list)) + + # the first section contains explanation of non grouped lines before the + # period + line_list = self.getListBoxLineList(report_section_list[0]) + data_line_list = [l for l in line_list if l.isDataLine()] + # We only have line for transaction 1 which are not grouped + self.assertEquals(1, len(data_line_list)) + self.checkLineProperties(data_line_list[0], + Movement_getSpecificReference='1', + date=DateTime(2006, 2, 1), + Movement_getExplanationTitle='Transaction 1', + Movement_getMirrorSectionTitle='Client 1', + debit=100, + credit=0,) + self.failUnless(line_list[-1].isStatLine()) + self.checkLineProperties(line_list[-1], debit=100, credit=0) + + # Second section is for previous balance summary and lines in the period, + # transaction 4 + line_list = self.getListBoxLineList(report_section_list[1]) + data_line_list = [l for l in line_list if l.isDataLine()] + self.assertEquals(2, len(data_line_list)) + self.checkLineProperties(data_line_list[0], + Movement_getSpecificReference='Previous Balance', + date=DateTime(2006, 2, 26), + Movement_getExplanationTitle='', + Movement_getMirrorSectionTitle='', + running_total_price=100, + debit=300, + credit=200,) + self.checkLineProperties(data_line_list[1], + Movement_getSpecificReference='4', + date=DateTime(2006, 3, 1), + Movement_getExplanationTitle='Transaction 4', + Movement_getMirrorSectionTitle='Client 1', + running_total_price=500, + debit=400, + credit=0,) + self.failUnless(line_list[-1].isStatLine()) + self.checkLineProperties(line_list[-1], debit=700, credit=200) + + def testAccountStatementPeriodDateForExpenseAccounts(self): # Account statement for expense or income account will not show # transactions from previous periods. -- 2.30.9