From e5a035dd1a9d2ff44834a7aeeb51aba8fbb64049 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Fri, 9 Nov 2007 09:49:23 +0000
Subject: [PATCH] test that balance transactions the first day of the period
 appears in initial balance columns

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@17487 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testAccountingReports.py | 137 ++++++++++++++++++++
 1 file changed, 137 insertions(+)

diff --git a/product/ERP5/tests/testAccountingReports.py b/product/ERP5/tests/testAccountingReports.py
index 181830e8ef..5cd17528e3 100644
--- a/product/ERP5/tests/testAccountingReports.py
+++ b/product/ERP5/tests/testAccountingReports.py
@@ -52,6 +52,12 @@ class TestAccountingReports(AccountingTestCase):
   def getTitle(self):
     return "Accounting Reports"
 
+  def beforeTearDown(self):
+    # workaround the fact that Balance Transaction Line are not unindexed
+    # correctly when removed
+    self.portal.erp5_sql_connection.manage_test('TRUNCATE TABLE stock')
+    get_transaction().commit()
+
   # utility methods for ERP5 Report
   def getReportSectionList(self, report_name):
     """Get the list of report sections in a report."""
@@ -1637,6 +1643,72 @@ class TestAccountingReports(AccountingTestCase):
         final_balance_if_debit=200, final_balance_if_credit=200)
 
 
+  def testTrialBalanceInitialBalanceBalanceTransaction(self):
+    # Test of trial balance and initial balance with balance transactions.
+    # Unlike other transactions balance transactions passed the first day of
+    # the period will count as "initial balance", not as movement in the period
+    account_module = self.portal.account_module
+
+    self._makeOne(
+              portal_type='Balance Transaction',
+              title='Transaction 0',
+              destination_reference='0',
+              simulation_state='delivered',
+              source_section_value=self.organisation_module.client_1,
+              start_date=DateTime(2007, 1, 1),
+              lines=(dict(destination_value=account_module.payable,
+                          destination_debit=100.0),
+                     dict(destination_value=account_module.receivable,
+                          destination_credit=100.0),))
+    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(2007, 1, 1),
+              lines=(dict(source_value=account_module.payable,
+                          source_debit=10.0),
+                     dict(source_value=account_module.receivable,
+                          source_credit=10.0),))
+
+    # set request variables and render
+    request_form = self.portal.REQUEST.form
+    request_form['from_date'] = DateTime(2007, 1, 1)
+    request_form['at_date'] = DateTime(2007, 12, 31)
+    request_form['section_category'] = 'group/demo_group'
+    request_form['simulation_state'] = ['delivered']
+    request_form['show_empty_accounts'] = 0
+    request_form['expand_accounts'] = 0
+    request_form['per_account_class_summary'] = 0
+
+    report_section_list = self.getReportSectionList(
+                                    'AccountModule_viewTrialBalanceReport')
+    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(2, len(data_line_list))
+
+    self.checkLineProperties(data_line_list[0], node_id='40',
+        node_title='Payable', initial_debit_balance=100,
+        initial_credit_balance=0, debit=10, credit=0,
+        final_debit_balance=110, final_credit_balance=0,
+        final_balance_if_debit=110, final_balance_if_credit=0)
+    
+    self.checkLineProperties(data_line_list[1], node_id='41',
+        node_title='Receivable', initial_debit_balance=0,
+        initial_credit_balance=100, debit=0, credit=10,
+        final_debit_balance=0, final_credit_balance=110,
+        final_balance_if_debit=0, final_balance_if_credit=110)
+
+    self.failUnless(line_list[-1].isStatLine())
+    self.checkLineProperties(line_list[-1], node_id=None, node_title=None,
+        initial_debit_balance=100, initial_credit_balance=100, debit=10,
+        credit=10, final_debit_balance=110, final_credit_balance=110,
+        final_balance_if_debit=110, final_balance_if_credit=110)
+
+
   def testTrialBalanceInitialBalanceWithPeriod(self):
     # Test of trial balance and initial balance
     account_module = self.portal.account_module
@@ -1715,6 +1787,71 @@ class TestAccountingReports(AccountingTestCase):
         final_balance_if_debit=89, final_balance_if_credit=89)
 
 
+  def testTrialBalanceInitialBalancePeriodStartDateBalanceTransaction(self):
+    # Test of trial balance and initial balance with balance transactions and
+    # transactions between period start date and from date
+    # This is a combination of 
+    account_module = self.portal.account_module
+
+    self._makeOne(
+              portal_type='Balance Transaction',
+              title='Transaction 0',
+              destination_reference='0',
+              simulation_state='delivered',
+              source_section_value=self.organisation_module.client_1,
+              start_date=DateTime(2007, 1, 1),
+              lines=(dict(destination_value=account_module.payable,
+                          destination_debit=100.0),
+                     dict(destination_value=account_module.receivable,
+                          destination_credit=100.0),))
+    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(2007, 1, 1),
+              lines=(dict(source_value=account_module.payable,
+                          source_debit=10.0),
+                     dict(source_value=account_module.receivable,
+                          source_credit=10.0),))
+
+    # set request variables and render
+    request_form = self.portal.REQUEST.form
+    request_form['from_date'] = DateTime(2007, 1, 1)
+    request_form['at_date'] = DateTime(2007, 12, 31)
+    request_form['section_category'] = 'group/demo_group'
+    request_form['simulation_state'] = ['delivered']
+    request_form['show_empty_accounts'] = 0
+    request_form['expand_accounts'] = 0
+    request_form['per_account_class_summary'] = 0
+
+    report_section_list = self.getReportSectionList(
+                                    'AccountModule_viewTrialBalanceReport')
+    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(2, len(data_line_list))
+    self.checkLineProperties(data_line_list[0], node_id='40',
+        node_title='Payable', initial_debit_balance=100,
+        initial_credit_balance=0, debit=10, credit=0,
+        final_debit_balance=110, final_credit_balance=0,
+        final_balance_if_debit=110, final_balance_if_credit=0)
+    
+    self.checkLineProperties(data_line_list[1], node_id='41',
+        node_title='Receivable', initial_debit_balance=0,
+        initial_credit_balance=100, debit=0, credit=10,
+        final_debit_balance=0, final_credit_balance=110,
+        final_balance_if_debit=0, final_balance_if_credit=110)
+
+    self.failUnless(line_list[-1].isStatLine())
+    self.checkLineProperties(line_list[-1], node_id=None, node_title=None,
+        initial_debit_balance=100, initial_credit_balance=100, debit=10,
+        credit=10, final_debit_balance=110, final_credit_balance=110,
+        final_balance_if_debit=110, final_balance_if_credit=110)
+
+
   def testTrialBalanceDifferentCurrencies(self):
     # Test of trial balance and different currencies
     account_module = self.portal.account_module
-- 
2.30.9