[MIG] account_financial_report_qweb: Migration to 11.0
* dynamize general ledger
This commit is contained in:
committed by
chaule97
parent
caf8ce9698
commit
554ad61027
9
account_financial_report/tests/__init__.py
Normal file
9
account_financial_report/tests/__init__.py
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
# ?? 2016 Julien Coux (Camptocamp)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).-
|
||||
|
||||
from . import abstract_test
|
||||
from . import test_aged_partner_balance
|
||||
from . import test_general_ledger
|
||||
from . import test_open_items
|
||||
from . import test_trial_balance
|
||||
246
account_financial_report/tests/abstract_test.py
Normal file
246
account_financial_report/tests/abstract_test.py
Normal file
@@ -0,0 +1,246 @@
|
||||
|
||||
# Author: Julien Coux
|
||||
# Copyright 2016 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo.tests.common import TransactionCase
|
||||
import logging
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
try:
|
||||
from xlrd import open_workbook
|
||||
except ImportError:
|
||||
_logger.debug('Can not import xlsxwriter`.')
|
||||
|
||||
|
||||
class AbstractTest(TransactionCase):
|
||||
"""Common technical tests for all reports."""
|
||||
|
||||
def setUp(cls):
|
||||
super(AbstractTest, cls).setUp()
|
||||
|
||||
cls.model = cls._getReportModel()
|
||||
|
||||
cls.qweb_report_name = cls._getQwebReportName()
|
||||
cls.xlsx_report_name = cls._getXlsxReportName()
|
||||
cls.xlsx_action_name = cls._getXlsxReportActionName()
|
||||
|
||||
cls.report_title = cls._getReportTitle()
|
||||
|
||||
cls.base_filters = cls._getBaseFilters()
|
||||
cls.additional_filters = cls._getAdditionalFiltersToBeTested()
|
||||
|
||||
cls.report = cls.model.create(cls.base_filters)
|
||||
cls.report.compute_data_for_report()
|
||||
|
||||
def test_01_generation_report_qweb(self):
|
||||
"""Check if report PDF/HTML is correctly generated"""
|
||||
|
||||
# Check if returned report action is correct
|
||||
report_type = 'qweb-pdf'
|
||||
report_action = self.report.print_report(report_type)
|
||||
self.assertDictContainsSubset(
|
||||
{
|
||||
'type': 'ir.actions.report',
|
||||
'report_name': self.qweb_report_name,
|
||||
'report_type': 'qweb-pdf',
|
||||
},
|
||||
report_action
|
||||
)
|
||||
|
||||
# Check if report template is correct
|
||||
report = self.env['ir.actions.report'].search(
|
||||
[('report_name', '=', self.qweb_report_name),
|
||||
('report_type', '=', report_type)], limit=1)
|
||||
self.assertEqual(report.report_type, 'qweb-pdf')
|
||||
|
||||
rep = report.render(self.report.ids, {})
|
||||
|
||||
self.assertTrue(self.report_title.encode('utf8') in rep[0])
|
||||
|
||||
self.assertTrue(
|
||||
self.report.account_ids[0].name.encode('utf8') in rep[0]
|
||||
)
|
||||
|
||||
def test_02_generation_report_html(self):
|
||||
"""Check if report HTML is correctly generated"""
|
||||
|
||||
# Check if returned report action is correct
|
||||
report_type = 'qweb-html'
|
||||
report_action = self.report.print_report(report_type)
|
||||
self.assertDictContainsSubset(
|
||||
{
|
||||
'type': 'ir.actions.report',
|
||||
'report_name': self.qweb_report_name,
|
||||
'report_type': 'qweb-html',
|
||||
},
|
||||
report_action
|
||||
)
|
||||
|
||||
# Check if report template is correct
|
||||
report = self.env['ir.actions.report'].search(
|
||||
[('report_name', '=', self.qweb_report_name),
|
||||
('report_type', '=', report_type)], limit=1)
|
||||
self.assertEqual(report.report_type, 'qweb-html')
|
||||
|
||||
rep = report.render(self.report.ids, {})
|
||||
|
||||
self.assertTrue(self.report_title.encode('utf8') in rep[0])
|
||||
self.assertTrue(
|
||||
self.report.account_ids[0].name.encode('utf8') in rep[0]
|
||||
)
|
||||
|
||||
def test_03_generation_report_xlsx(self):
|
||||
"""Check if report XLSX is correctly generated"""
|
||||
report_object = self.env['ir.actions.report']
|
||||
# Check if returned report action is correct
|
||||
report_type = 'xlsx'
|
||||
report_action = self.report.print_report(report_type)
|
||||
self.assertDictContainsSubset(
|
||||
{
|
||||
'type': 'ir.actions.report',
|
||||
'report_name': self.xlsx_report_name,
|
||||
'report_type': 'xlsx',
|
||||
},
|
||||
report_action
|
||||
)
|
||||
report = report_object._get_report_from_name(self.xlsx_report_name)
|
||||
self.assertEqual(report.report_type, 'xlsx')
|
||||
report_xlsx = report.render(self.report.ids, {})
|
||||
wb = open_workbook(file_contents=report_xlsx[0])
|
||||
sheet = wb.sheet_by_index(0)
|
||||
class_name = 'report.%s' % report.report_name
|
||||
self.assertEqual(sheet.cell(0, 0).value,
|
||||
self.env[class_name]._get_report_name())
|
||||
|
||||
def test_04_compute_data(self):
|
||||
"""Check that the SQL queries work with all filters options"""
|
||||
|
||||
for filters in [{}] + self.additional_filters:
|
||||
current_filter = self.base_filters.copy()
|
||||
current_filter.update(filters)
|
||||
|
||||
report = self.model.create(current_filter)
|
||||
report.compute_data_for_report()
|
||||
|
||||
self.assertGreaterEqual(len(report.account_ids), 1)
|
||||
|
||||
# Same filters with only one account
|
||||
current_filter = self.base_filters.copy()
|
||||
current_filter.update(filters)
|
||||
current_filter.update({
|
||||
'filter_account_ids':
|
||||
[(6, 0, report.account_ids[0].account_id.ids)],
|
||||
})
|
||||
|
||||
report2 = self.model.create(current_filter)
|
||||
report2.compute_data_for_report()
|
||||
|
||||
self.assertEqual(len(report2.account_ids), 1)
|
||||
self.assertEqual(report2.account_ids.name,
|
||||
report.account_ids[0].name)
|
||||
|
||||
if self._partner_test_is_possible(filters):
|
||||
# Same filters with only one partner
|
||||
report_partner_ids = report.account_ids.mapped('partner_ids')
|
||||
partner_ids = report_partner_ids.mapped('partner_id')
|
||||
|
||||
current_filter = self.base_filters.copy()
|
||||
current_filter.update(filters)
|
||||
current_filter.update({
|
||||
'filter_partner_ids': [(6, 0, partner_ids[0].ids)],
|
||||
})
|
||||
|
||||
report3 = self.model.create(current_filter)
|
||||
report3.compute_data_for_report()
|
||||
|
||||
self.assertGreaterEqual(len(report3.account_ids), 1)
|
||||
|
||||
report_partner_ids3 = report3.account_ids.mapped('partner_ids')
|
||||
partner_ids3 = report_partner_ids3.mapped('partner_id')
|
||||
|
||||
self.assertEqual(len(partner_ids3), 1)
|
||||
self.assertEqual(
|
||||
partner_ids3.name,
|
||||
partner_ids[0].name
|
||||
)
|
||||
|
||||
# Same filters with only one partner and one account
|
||||
report_partner_ids = report3.account_ids.mapped('partner_ids')
|
||||
report_account_id = report_partner_ids.filtered(
|
||||
lambda p: p.partner_id
|
||||
)[0].report_account_id
|
||||
|
||||
current_filter = self.base_filters.copy()
|
||||
current_filter.update(filters)
|
||||
current_filter.update({
|
||||
'filter_account_ids':
|
||||
[(6, 0, report_account_id.account_id.ids)],
|
||||
'filter_partner_ids': [(6, 0, partner_ids[0].ids)],
|
||||
})
|
||||
|
||||
report4 = self.model.create(current_filter)
|
||||
report4.compute_data_for_report()
|
||||
|
||||
self.assertEqual(len(report4.account_ids), 1)
|
||||
self.assertEqual(report4.account_ids.name,
|
||||
report_account_id.account_id.name)
|
||||
|
||||
report_partner_ids4 = report4.account_ids.mapped('partner_ids')
|
||||
partner_ids4 = report_partner_ids4.mapped('partner_id')
|
||||
|
||||
self.assertEqual(len(partner_ids4), 1)
|
||||
self.assertEqual(
|
||||
partner_ids4.name,
|
||||
partner_ids[0].name
|
||||
)
|
||||
|
||||
def _partner_test_is_possible(self, filters):
|
||||
"""
|
||||
:return:
|
||||
a boolean to indicate if partner test is possible
|
||||
with current filters
|
||||
"""
|
||||
return True
|
||||
|
||||
def _getReportModel(self):
|
||||
"""
|
||||
:return: the report model name
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def _getQwebReportName(self):
|
||||
"""
|
||||
:return: the qweb report name
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def _getXlsxReportName(self):
|
||||
"""
|
||||
:return: the xlsx report name
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def _getXlsxReportActionName(self):
|
||||
"""
|
||||
:return: the xlsx report action name
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def _getReportTitle(self):
|
||||
"""
|
||||
:return: the report title displayed into the report
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def _getBaseFilters(self):
|
||||
"""
|
||||
:return: the minimum required filters to generate report
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def _getAdditionalFiltersToBeTested(self):
|
||||
"""
|
||||
:return: the additional filters to generate report variants
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
42
account_financial_report/tests/test_aged_partner_balance.py
Normal file
42
account_financial_report/tests/test_aged_partner_balance.py
Normal file
@@ -0,0 +1,42 @@
|
||||
|
||||
# Author: Julien Coux
|
||||
# Copyright 2016 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
import time
|
||||
from . import abstract_test
|
||||
|
||||
|
||||
class TestAgedPartnerBalance(abstract_test.AbstractTest):
|
||||
"""
|
||||
Technical tests for Aged Partner Balance Report.
|
||||
"""
|
||||
|
||||
def _getReportModel(self):
|
||||
return self.env['report_aged_partner_balance']
|
||||
|
||||
def _getQwebReportName(self):
|
||||
return 'account_financial_report.report_aged_partner_balance_qweb'
|
||||
|
||||
def _getXlsxReportName(self):
|
||||
return 'a_f_r.report_aged_partner_balance_xlsx'
|
||||
|
||||
def _getXlsxReportActionName(self):
|
||||
return 'account_financial_report.' \
|
||||
'action_report_aged_partner_balance_xlsx'
|
||||
|
||||
def _getReportTitle(self):
|
||||
return 'Odoo Report'
|
||||
|
||||
def _getBaseFilters(self):
|
||||
return {
|
||||
'date_at': time.strftime('%Y-12-31'),
|
||||
'company_id': self.env.ref('base.main_company').id,
|
||||
}
|
||||
|
||||
def _getAdditionalFiltersToBeTested(self):
|
||||
return [
|
||||
{'only_posted_moves': True},
|
||||
{'show_move_line_details': True},
|
||||
{'only_posted_moves': True, 'show_move_line_details': True},
|
||||
]
|
||||
466
account_financial_report/tests/test_general_ledger.py
Normal file
466
account_financial_report/tests/test_general_ledger.py
Normal file
@@ -0,0 +1,466 @@
|
||||
|
||||
# Author: Julien Coux
|
||||
# Copyright 2016 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
import time
|
||||
from . import abstract_test
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestGeneralLedger(abstract_test.AbstractTest):
|
||||
"""
|
||||
Technical tests for General Ledger Report.
|
||||
"""
|
||||
|
||||
def _getReportModel(self):
|
||||
return self.env['report_general_ledger']
|
||||
|
||||
def _getQwebReportName(self):
|
||||
return 'account_financial_report.report_general_ledger_qweb'
|
||||
|
||||
def _getXlsxReportName(self):
|
||||
return 'a_f_r.report_general_ledger_xlsx'
|
||||
|
||||
def _getXlsxReportActionName(self):
|
||||
return 'account_financial_report.' \
|
||||
'action_report_general_ledger_xlsx'
|
||||
|
||||
def _getReportTitle(self):
|
||||
return 'Odoo Report'
|
||||
|
||||
def _getBaseFilters(self):
|
||||
return {
|
||||
'date_from': time.strftime('%Y-01-01'),
|
||||
'date_to': time.strftime('%Y-12-31'),
|
||||
'company_id': self.env.ref('base.main_company').id,
|
||||
'fy_start_date': time.strftime('%Y-01-01'),
|
||||
}
|
||||
|
||||
def _getAdditionalFiltersToBeTested(self):
|
||||
return [
|
||||
{'only_posted_moves': True},
|
||||
{'hide_account_balance_at_0': True},
|
||||
{'centralize': True},
|
||||
{'only_posted_moves': True, 'hide_account_balance_at_0': True},
|
||||
{'only_posted_moves': True, 'centralize': True},
|
||||
{'hide_account_balance_at_0': True, 'centralize': True},
|
||||
{
|
||||
'only_posted_moves': True,
|
||||
'hide_account_balance_at_0': True,
|
||||
'centralize': True
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
class TestGeneralLedgerReport(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestGeneralLedgerReport, self).setUp()
|
||||
self.before_previous_fy_year = '2014-05-05'
|
||||
self.previous_fy_date_start = '2015-01-01'
|
||||
self.previous_fy_date_end = '2015-12-31'
|
||||
self.fy_date_start = '2016-01-01'
|
||||
self.fy_date_end = '2016-12-31'
|
||||
self.receivable_account = self.env['account.account'].search([
|
||||
('user_type_id.name', '=', 'Receivable')
|
||||
], limit=1)
|
||||
self.income_account = self.env['account.account'].search([
|
||||
('user_type_id.name', '=', 'Income')
|
||||
], limit=1)
|
||||
self.unaffected_account = self.env['account.account'].search([
|
||||
(
|
||||
'user_type_id',
|
||||
'=',
|
||||
self.env.ref('account.data_unaffected_earnings').id
|
||||
)], limit=1)
|
||||
|
||||
def _add_move(
|
||||
self,
|
||||
date,
|
||||
receivable_debit,
|
||||
receivable_credit,
|
||||
income_debit,
|
||||
income_credit,
|
||||
unaffected_debit=0,
|
||||
unaffected_credit=0
|
||||
):
|
||||
move_name = 'expense accrual'
|
||||
journal = self.env['account.journal'].search([
|
||||
('code', '=', 'MISC')])
|
||||
partner = self.env.ref('base.res_partner_12')
|
||||
move_vals = {
|
||||
'journal_id': journal.id,
|
||||
'partner_id': partner.id,
|
||||
'name': move_name,
|
||||
'date': date,
|
||||
'line_ids': [
|
||||
(0, 0, {
|
||||
'name': move_name,
|
||||
'debit': receivable_debit,
|
||||
'credit': receivable_credit,
|
||||
'account_id': self.receivable_account.id}),
|
||||
(0, 0, {
|
||||
'name': move_name,
|
||||
'debit': income_debit,
|
||||
'credit': income_credit,
|
||||
'account_id': self.income_account.id}),
|
||||
(0, 0, {
|
||||
'name': move_name,
|
||||
'debit': unaffected_debit,
|
||||
'credit': unaffected_credit,
|
||||
'account_id': self.unaffected_account.id}),
|
||||
]}
|
||||
move = self.env['account.move'].create(move_vals)
|
||||
move.post()
|
||||
|
||||
def _get_report_lines(self, with_partners=False):
|
||||
company = self.env.ref('base.main_company')
|
||||
general_ledger = self.env['report_general_ledger'].create({
|
||||
'date_from': self.fy_date_start,
|
||||
'date_to': self.fy_date_end,
|
||||
'only_posted_moves': True,
|
||||
'hide_account_balance_at_0': False,
|
||||
'company_id': company.id,
|
||||
'fy_start_date': self.fy_date_start,
|
||||
})
|
||||
general_ledger.compute_data_for_report(
|
||||
with_line_details=True, with_partners=with_partners
|
||||
)
|
||||
lines = {}
|
||||
report_account_model = self.env['report_general_ledger_account']
|
||||
lines['receivable'] = report_account_model.search([
|
||||
('report_id', '=', general_ledger.id),
|
||||
('account_id', '=', self.receivable_account.id),
|
||||
])
|
||||
lines['income'] = report_account_model.search([
|
||||
('report_id', '=', general_ledger.id),
|
||||
('account_id', '=', self.income_account.id),
|
||||
])
|
||||
lines['unaffected'] = report_account_model.search([
|
||||
('report_id', '=', general_ledger.id),
|
||||
('account_id', '=', self.unaffected_account.id),
|
||||
])
|
||||
if with_partners:
|
||||
report_partner_model = self.env[
|
||||
'report_general_ledger_partner'
|
||||
]
|
||||
lines['partner_receivable'] = report_partner_model.search([
|
||||
('report_account_id', '=', lines['receivable'].id),
|
||||
('partner_id', '=', self.env.ref('base.res_partner_12').id),
|
||||
])
|
||||
return lines
|
||||
|
||||
def test_01_account_balance(self):
|
||||
# Generate the general ledger line
|
||||
lines = self._get_report_lines()
|
||||
self.assertEqual(len(lines['receivable']), 0)
|
||||
self.assertEqual(len(lines['income']), 0)
|
||||
|
||||
# Add a move at the previous day of the first day of fiscal year
|
||||
# to check the initial balance
|
||||
self._add_move(
|
||||
date=self.previous_fy_date_end,
|
||||
receivable_debit=1000,
|
||||
receivable_credit=0,
|
||||
income_debit=0,
|
||||
income_credit=1000
|
||||
)
|
||||
|
||||
# Re Generate the general ledger line
|
||||
lines = self._get_report_lines()
|
||||
self.assertEqual(len(lines['receivable']), 1)
|
||||
self.assertEqual(len(lines['income']), 0)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['receivable'].initial_debit, 1000)
|
||||
self.assertEqual(lines['receivable'].initial_credit, 0)
|
||||
self.assertEqual(lines['receivable'].initial_balance, 1000)
|
||||
self.assertEqual(lines['receivable'].final_debit, 1000)
|
||||
self.assertEqual(lines['receivable'].final_credit, 0)
|
||||
self.assertEqual(lines['receivable'].final_balance, 1000)
|
||||
|
||||
# Add reversale move of the initial move the first day of fiscal year
|
||||
# to check the first day of fiscal year is not used
|
||||
# to compute the initial balance
|
||||
self._add_move(
|
||||
date=self.fy_date_start,
|
||||
receivable_debit=0,
|
||||
receivable_credit=1000,
|
||||
income_debit=1000,
|
||||
income_credit=0
|
||||
)
|
||||
|
||||
# Re Generate the general ledger line
|
||||
lines = self._get_report_lines()
|
||||
self.assertEqual(len(lines['receivable']), 1)
|
||||
self.assertEqual(len(lines['income']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['receivable'].initial_debit, 1000)
|
||||
self.assertEqual(lines['receivable'].initial_credit, 0)
|
||||
self.assertEqual(lines['receivable'].initial_balance, 1000)
|
||||
self.assertEqual(lines['receivable'].final_debit, 1000)
|
||||
self.assertEqual(lines['receivable'].final_credit, 1000)
|
||||
self.assertEqual(lines['receivable'].final_balance, 0)
|
||||
|
||||
self.assertEqual(lines['income'].initial_debit, 0)
|
||||
self.assertEqual(lines['income'].initial_credit, 0)
|
||||
self.assertEqual(lines['income'].initial_balance, 0)
|
||||
self.assertEqual(lines['income'].final_debit, 1000)
|
||||
self.assertEqual(lines['income'].final_credit, 0)
|
||||
self.assertEqual(lines['income'].final_balance, 1000)
|
||||
|
||||
# Add another move at the end day of fiscal year
|
||||
# to check that it correctly used on report
|
||||
self._add_move(
|
||||
date=self.fy_date_end,
|
||||
receivable_debit=0,
|
||||
receivable_credit=1000,
|
||||
income_debit=1000,
|
||||
income_credit=0
|
||||
)
|
||||
|
||||
# Re Generate the general ledger line
|
||||
lines = self._get_report_lines()
|
||||
self.assertEqual(len(lines['receivable']), 1)
|
||||
self.assertEqual(len(lines['income']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['receivable'].initial_debit, 1000)
|
||||
self.assertEqual(lines['receivable'].initial_credit, 0)
|
||||
self.assertEqual(lines['receivable'].initial_balance, 1000)
|
||||
self.assertEqual(lines['receivable'].final_debit, 1000)
|
||||
self.assertEqual(lines['receivable'].final_credit, 2000)
|
||||
self.assertEqual(lines['receivable'].final_balance, -1000)
|
||||
|
||||
self.assertEqual(lines['income'].initial_debit, 0)
|
||||
self.assertEqual(lines['income'].initial_credit, 0)
|
||||
self.assertEqual(lines['income'].initial_balance, 0)
|
||||
self.assertEqual(lines['income'].final_debit, 2000)
|
||||
self.assertEqual(lines['income'].final_credit, 0)
|
||||
self.assertEqual(lines['income'].final_balance, 2000)
|
||||
|
||||
def test_02_partner_balance(self):
|
||||
# Generate the general ledger line
|
||||
lines = self._get_report_lines(with_partners=True)
|
||||
self.assertEqual(len(lines['partner_receivable']), 0)
|
||||
|
||||
# Add a move at the previous day of the first day of fiscal year
|
||||
# to check the initial balance
|
||||
self._add_move(
|
||||
date=self.previous_fy_date_end,
|
||||
receivable_debit=1000,
|
||||
receivable_credit=0,
|
||||
income_debit=0,
|
||||
income_credit=1000
|
||||
)
|
||||
|
||||
# Re Generate the general ledger line
|
||||
lines = self._get_report_lines(with_partners=True)
|
||||
self.assertEqual(len(lines['partner_receivable']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['partner_receivable'].initial_debit, 1000)
|
||||
self.assertEqual(lines['partner_receivable'].initial_credit, 0)
|
||||
self.assertEqual(lines['partner_receivable'].initial_balance, 1000)
|
||||
self.assertEqual(lines['partner_receivable'].final_debit, 1000)
|
||||
self.assertEqual(lines['partner_receivable'].final_credit, 0)
|
||||
self.assertEqual(lines['partner_receivable'].final_balance, 1000)
|
||||
|
||||
# Add reversale move of the initial move the first day of fiscal year
|
||||
# to check the first day of fiscal year is not used
|
||||
# to compute the initial balance
|
||||
self._add_move(
|
||||
date=self.fy_date_start,
|
||||
receivable_debit=0,
|
||||
receivable_credit=1000,
|
||||
income_debit=1000,
|
||||
income_credit=0
|
||||
)
|
||||
|
||||
# Re Generate the general ledger line
|
||||
lines = self._get_report_lines(with_partners=True)
|
||||
self.assertEqual(len(lines['partner_receivable']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['partner_receivable'].initial_debit, 1000)
|
||||
self.assertEqual(lines['partner_receivable'].initial_credit, 0)
|
||||
self.assertEqual(lines['partner_receivable'].initial_balance, 1000)
|
||||
self.assertEqual(lines['partner_receivable'].final_debit, 1000)
|
||||
self.assertEqual(lines['partner_receivable'].final_credit, 1000)
|
||||
self.assertEqual(lines['partner_receivable'].final_balance, 0)
|
||||
|
||||
# Add another move at the end day of fiscal year
|
||||
# to check that it correctly used on report
|
||||
self._add_move(
|
||||
date=self.fy_date_end,
|
||||
receivable_debit=0,
|
||||
receivable_credit=1000,
|
||||
income_debit=1000,
|
||||
income_credit=0
|
||||
)
|
||||
|
||||
# Re Generate the general ledger line
|
||||
lines = self._get_report_lines(with_partners=True)
|
||||
self.assertEqual(len(lines['partner_receivable']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['partner_receivable'].initial_debit, 1000)
|
||||
self.assertEqual(lines['partner_receivable'].initial_credit, 0)
|
||||
self.assertEqual(lines['partner_receivable'].initial_balance, 1000)
|
||||
self.assertEqual(lines['partner_receivable'].final_debit, 1000)
|
||||
self.assertEqual(lines['partner_receivable'].final_credit, 2000)
|
||||
self.assertEqual(lines['partner_receivable'].final_balance, -1000)
|
||||
|
||||
def test_03_unaffected_account_balance(self):
|
||||
# Generate the general ledger line
|
||||
lines = self._get_report_lines()
|
||||
self.assertEqual(len(lines['unaffected']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['unaffected'].initial_debit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_balance, 0)
|
||||
self.assertEqual(lines['unaffected'].final_debit, 0)
|
||||
self.assertEqual(lines['unaffected'].final_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].final_balance, 0)
|
||||
|
||||
# Add a move at the previous day of the first day of fiscal year
|
||||
# to check the initial balance
|
||||
self._add_move(
|
||||
date=self.previous_fy_date_end,
|
||||
receivable_debit=1000,
|
||||
receivable_credit=0,
|
||||
income_debit=0,
|
||||
income_credit=1000
|
||||
)
|
||||
|
||||
# Re Generate the general ledger line
|
||||
lines = self._get_report_lines()
|
||||
self.assertEqual(len(lines['unaffected']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['unaffected'].initial_debit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_balance, -1000)
|
||||
self.assertEqual(lines['unaffected'].final_debit, -0)
|
||||
self.assertEqual(lines['unaffected'].final_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].final_balance, -1000)
|
||||
|
||||
# Add reversale move of the initial move the first day of fiscal year
|
||||
# to check the first day of fiscal year is not used
|
||||
# to compute the initial balance
|
||||
self._add_move(
|
||||
date=self.fy_date_start,
|
||||
receivable_debit=0,
|
||||
receivable_credit=0,
|
||||
income_debit=0,
|
||||
income_credit=1000,
|
||||
unaffected_debit=1000,
|
||||
unaffected_credit=0
|
||||
)
|
||||
|
||||
# Re Generate the general ledger line
|
||||
lines = self._get_report_lines()
|
||||
self.assertEqual(len(lines['unaffected']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['unaffected'].initial_debit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_balance, -1000)
|
||||
self.assertEqual(lines['unaffected'].final_debit, 1000)
|
||||
self.assertEqual(lines['unaffected'].final_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].final_balance, 0)
|
||||
|
||||
# Add another move at the end day of fiscal year
|
||||
# to check that it correctly used on report
|
||||
self._add_move(
|
||||
date=self.fy_date_end,
|
||||
receivable_debit=3000,
|
||||
receivable_credit=0,
|
||||
income_debit=0,
|
||||
income_credit=0,
|
||||
unaffected_debit=0,
|
||||
unaffected_credit=3000
|
||||
)
|
||||
|
||||
# Re Generate the general ledger line
|
||||
lines = self._get_report_lines()
|
||||
self.assertEqual(len(lines['unaffected']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['unaffected'].initial_debit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_balance, -1000)
|
||||
self.assertEqual(lines['unaffected'].final_debit, 1000)
|
||||
self.assertEqual(lines['unaffected'].final_credit, 3000)
|
||||
self.assertEqual(lines['unaffected'].final_balance, -3000)
|
||||
|
||||
def test_04_unaffected_account_balance_2_years(self):
|
||||
# Generate the general ledger line
|
||||
lines = self._get_report_lines()
|
||||
self.assertEqual(len(lines['unaffected']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['unaffected'].initial_debit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_balance, 0)
|
||||
self.assertEqual(lines['unaffected'].final_debit, 0)
|
||||
self.assertEqual(lines['unaffected'].final_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].final_balance, 0)
|
||||
|
||||
# Add a move at any date 2 years before the balance
|
||||
# (to create an historic)
|
||||
self._add_move(
|
||||
date=self.before_previous_fy_year,
|
||||
receivable_debit=0,
|
||||
receivable_credit=1000,
|
||||
income_debit=1000,
|
||||
income_credit=0
|
||||
)
|
||||
|
||||
# Re Generate the general ledger line
|
||||
lines = self._get_report_lines()
|
||||
self.assertEqual(len(lines['unaffected']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['unaffected'].initial_debit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_balance, 1000)
|
||||
self.assertEqual(lines['unaffected'].final_debit, 0)
|
||||
self.assertEqual(lines['unaffected'].final_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].final_balance, 1000)
|
||||
|
||||
# Affect the company's result last year
|
||||
self._add_move(
|
||||
date=self.previous_fy_date_start,
|
||||
receivable_debit=1000,
|
||||
receivable_credit=0,
|
||||
income_debit=0,
|
||||
income_credit=0,
|
||||
unaffected_debit=0,
|
||||
unaffected_credit=1000
|
||||
)
|
||||
|
||||
# Add another move last year to test the initial balance this year
|
||||
self._add_move(
|
||||
date=self.previous_fy_date_start,
|
||||
receivable_debit=0,
|
||||
receivable_credit=500,
|
||||
income_debit=500,
|
||||
income_credit=0,
|
||||
unaffected_debit=0,
|
||||
unaffected_credit=0
|
||||
)
|
||||
# Re Generate the general ledger line
|
||||
lines = self._get_report_lines()
|
||||
self.assertEqual(len(lines['unaffected']), 1)
|
||||
|
||||
# Check the initial and final balance
|
||||
self.assertEqual(lines['unaffected'].initial_debit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].initial_balance, 500)
|
||||
self.assertEqual(lines['unaffected'].final_debit, 0)
|
||||
self.assertEqual(lines['unaffected'].final_credit, 0)
|
||||
self.assertEqual(lines['unaffected'].final_balance, 500)
|
||||
41
account_financial_report/tests/test_open_items.py
Normal file
41
account_financial_report/tests/test_open_items.py
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
# Author: Julien Coux
|
||||
# Copyright 2016 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
import time
|
||||
from . import abstract_test
|
||||
|
||||
|
||||
class TestOpenItems(abstract_test.AbstractTest):
|
||||
"""
|
||||
Technical tests for Open Items Report.
|
||||
"""
|
||||
|
||||
def _getReportModel(self):
|
||||
return self.env['report_open_items']
|
||||
|
||||
def _getQwebReportName(self):
|
||||
return 'account_financial_report.report_open_items_qweb'
|
||||
|
||||
def _getXlsxReportName(self):
|
||||
return 'a_f_r.report_open_items_xlsx'
|
||||
|
||||
def _getXlsxReportActionName(self):
|
||||
return 'account_financial_report.action_report_open_items_xlsx'
|
||||
|
||||
def _getReportTitle(self):
|
||||
return 'Odoo Report'
|
||||
|
||||
def _getBaseFilters(self):
|
||||
return {
|
||||
'date_at': time.strftime('%Y-12-31'),
|
||||
'company_id': self.env.ref('base.main_company').id,
|
||||
}
|
||||
|
||||
def _getAdditionalFiltersToBeTested(self):
|
||||
return [
|
||||
{'only_posted_moves': True},
|
||||
{'hide_account_balance_at_0': True},
|
||||
{'only_posted_moves': True, 'hide_account_balance_at_0': True},
|
||||
]
|
||||
54
account_financial_report/tests/test_trial_balance.py
Normal file
54
account_financial_report/tests/test_trial_balance.py
Normal file
@@ -0,0 +1,54 @@
|
||||
|
||||
# Author: Julien Coux
|
||||
# Copyright 2016 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
import time
|
||||
from . import abstract_test
|
||||
|
||||
|
||||
class TestTrialBalance(abstract_test.AbstractTest):
|
||||
"""
|
||||
Technical tests for Trial Balance Report.
|
||||
"""
|
||||
|
||||
def _getReportModel(self):
|
||||
return self.env['report_trial_balance']
|
||||
|
||||
def _getQwebReportName(self):
|
||||
return 'account_financial_report.report_trial_balance_qweb'
|
||||
|
||||
def _getXlsxReportName(self):
|
||||
return 'a_f_r.report_trial_balance_xlsx'
|
||||
|
||||
def _getXlsxReportActionName(self):
|
||||
return 'account_financial_report.action_report_trial_balance_xlsx'
|
||||
|
||||
def _getReportTitle(self):
|
||||
return 'Odoo Report'
|
||||
|
||||
def _getBaseFilters(self):
|
||||
return {
|
||||
'date_from': time.strftime('%Y-01-01'),
|
||||
'date_to': time.strftime('%Y-12-31'),
|
||||
'company_id': self.env.ref('base.main_company').id,
|
||||
'fy_start_date': time.strftime('%Y-01-01'),
|
||||
}
|
||||
|
||||
def _getAdditionalFiltersToBeTested(self):
|
||||
return [
|
||||
{'only_posted_moves': True},
|
||||
{'hide_account_balance_at_0': True},
|
||||
{'show_partner_details': True},
|
||||
{'only_posted_moves': True, 'hide_account_balance_at_0': True},
|
||||
{'only_posted_moves': True, 'show_partner_details': True},
|
||||
{'hide_account_balance_at_0': True, 'show_partner_details': True},
|
||||
{
|
||||
'only_posted_moves': True,
|
||||
'hide_account_balance_at_0': True,
|
||||
'show_partner_details': True
|
||||
},
|
||||
]
|
||||
|
||||
def _partner_test_is_possible(self, filters):
|
||||
return 'show_partner_details' in filters
|
||||
Reference in New Issue
Block a user