118 lines
5.5 KiB
Python
118 lines
5.5 KiB
Python
from odoo import Command
|
|
from odoo.tests import tagged, TransactionCase
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestKpiProvider(TransactionCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
|
|
cls.partner_id = cls.env['res.partner'].create({'name': 'Someone'})
|
|
|
|
# Clean things for the test
|
|
cls.env['account.move'].search([
|
|
'|', ('state', '=', 'draft'),
|
|
('statement_line_id.is_reconciled', '=', False),
|
|
])._unlink_or_reverse()
|
|
|
|
def test_empty_kpi_summary(self):
|
|
# Ensure that nothing gets reported when there is nothing to report
|
|
self.assertCountEqual(self.env['kpi.provider'].get_account_kpi_summary(), [])
|
|
|
|
def test_kpi_summary(self):
|
|
company_id = self.ref('base.main_company')
|
|
account_id = self.env['account.account'].search([('company_ids', '=', company_id)], limit=1)
|
|
base_move = {
|
|
'company_id': company_id,
|
|
'invoice_line_ids': [Command.create({'account_id': account_id.id, 'quantity': 15, 'price_unit': 10})],
|
|
'partner_id': self.partner_id.id,
|
|
}
|
|
self.env['account.move'].create(
|
|
[{**base_move, 'move_type': 'entry'}] * 2 +
|
|
[{**base_move, 'move_type': 'out_invoice'}] * 3 +
|
|
[{**base_move, 'move_type': 'out_refund'}] * 4 +
|
|
[{**base_move, 'move_type': 'in_invoice'}] * 5 +
|
|
[{**base_move, 'move_type': 'in_refund'}] * 6 +
|
|
[{**base_move, 'move_type': 'out_receipt'}] * 7 +
|
|
[{**base_move, 'move_type': 'in_receipt'}] * 8
|
|
)
|
|
self.assertCountEqual(self.env['kpi.provider'].get_account_kpi_summary(), [
|
|
{'id': 'account_journal_type.general', 'name': 'Miscellaneous', 'type': 'integer', 'value': 2},
|
|
{'id': 'account_journal_type.sale', 'name': 'Sales', 'type': 'integer', 'value': 3 + 4 + 7},
|
|
{'id': 'account_journal_type.purchase', 'name': 'Purchase', 'type': 'integer', 'value': 5 + 6 + 8},
|
|
])
|
|
|
|
def test_kpi_summary_shouldnt_report_posted_moves(self):
|
|
company_id = self.ref('base.main_company')
|
|
account_id = self.env['account.account'].search([('company_ids', '=', company_id)], limit=1).id
|
|
move = self.env['account.move'].create({
|
|
'company_id': company_id,
|
|
'invoice_line_ids': [Command.create({'account_id': account_id, 'quantity': 15, 'price_unit': 10})],
|
|
'partner_id': self.partner_id.id,
|
|
'move_type': 'out_invoice',
|
|
})
|
|
self.assertCountEqual(self.env['kpi.provider'].get_account_kpi_summary(), [
|
|
{'id': 'account_journal_type.sale', 'name': 'Sales', 'type': 'integer', 'value': 1},
|
|
])
|
|
|
|
move.action_post()
|
|
self.assertCountEqual(self.env['kpi.provider'].get_account_kpi_summary(), [])
|
|
|
|
def test_kpi_summary_reports_posted_but_to_check_moves(self):
|
|
company_id = self.ref('base.main_company')
|
|
account_id = self.env['account.account'].search([('company_ids', '=', company_id)], limit=1).id
|
|
move = self.env['account.move'].create({
|
|
'company_id': company_id,
|
|
'invoice_line_ids': [Command.create({'account_id': account_id, 'quantity': 15, 'price_unit': 10})],
|
|
'partner_id': self.partner_id.id,
|
|
'move_type': 'out_invoice',
|
|
})
|
|
move.action_post()
|
|
move.checked = False
|
|
self.assertCountEqual(self.env['kpi.provider'].get_account_kpi_summary(), [
|
|
{'id': 'account_journal_type.sale', 'name': 'Sales', 'type': 'integer', 'value': 1},
|
|
])
|
|
|
|
move.button_set_checked()
|
|
self.assertCountEqual(self.env['kpi.provider'].get_account_kpi_summary(), [])
|
|
|
|
def test_kpi_summary_reports_unreconciled_bank_statements(self):
|
|
company_id = self.ref('base.main_company')
|
|
account_id = self.env['account.account'].search([('company_ids', '=', company_id), ('account_type', '=', 'income')], limit=1).id
|
|
move = self.env['account.move'].create({
|
|
'company_id': company_id,
|
|
'line_ids': [Command.create({'account_id': account_id, 'quantity': 15, 'price_unit': 10})],
|
|
'partner_id': self.env.user.partner_id.id,
|
|
'move_type': 'out_invoice',
|
|
})
|
|
move.action_post()
|
|
|
|
journal_id = self.env['account.journal'].create({
|
|
'name': 'Bank',
|
|
'type': 'bank',
|
|
})
|
|
bank_statement = self.env['account.bank.statement'].create({
|
|
'name': 'test_statement',
|
|
'line_ids': [Command.create({
|
|
'date': '2025-09-15',
|
|
'payment_ref': 'line_1',
|
|
'journal_id': journal_id.id,
|
|
'amount': move.amount_total,
|
|
})],
|
|
})
|
|
|
|
self.assertEqual(bank_statement.line_ids.move_id.state, 'posted')
|
|
self.assertFalse(bank_statement.line_ids.is_reconciled)
|
|
self.assertCountEqual(self.env['kpi.provider'].get_account_kpi_summary(), [
|
|
{'id': 'account_journal_type.bank', 'name': 'Bank', 'type': 'integer', 'value': 1},
|
|
])
|
|
|
|
move_line = move.line_ids.filtered(lambda line: line.account_type == 'asset_receivable')
|
|
_st_liquidity_lines, st_suspense_lines, _st_other_lines = bank_statement.line_ids._seek_for_lines()
|
|
st_suspense_lines.account_id = move_line.account_id
|
|
(move_line + st_suspense_lines).reconcile()
|
|
self.assertTrue(bank_statement.line_ids.is_reconciled)
|
|
self.assertCountEqual(self.env['kpi.provider'].get_account_kpi_summary(), [])
|