Files
Odoo-18.0-20251222/account_tax_balance/tests/test_account_tax_balance.py
Antonio Espinosa 3b74e4813c Consider normal and refund operations separately
Allow to explore all move lines

Spanish translation

Bugfixes

Show negative lines too

Show move type in account.move views

Tests include new fields
2024-12-06 14:42:42 +01:00

146 lines
5.8 KiB
Python

# -*- coding: utf-8 -*-
# © 2016 Lorenzo Battistini - Agile Business Group
# © 2016 Giovanni Capalbo <giovanni@therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from openerp.tests.common import TransactionCase
from datetime import datetime
from dateutil.rrule import MONTHLY
class TestAccountTaxBalance(TransactionCase):
def setUp(self):
super(TestAccountTaxBalance, self).setUp()
self.range_type = self.env['date.range.type'].create(
{'name': 'Fiscal year',
'company_id': False,
'allow_overlap': False})
self.range_generator = self.env['date.range.generator']
self.current_year = datetime.now().year
self.current_month = datetime.now().month
range_generator = self.range_generator.create({
'date_start': '%s-01-01' % self.current_year,
'name_prefix': '%s-' % self.current_year,
'type_id': self.range_type.id,
'duration_count': 1,
'unit_of_time': MONTHLY,
'count': 12})
range_generator.action_apply()
self.range = self.env['date.range']
def test_tax_balance(self):
tax_account_id = self.env['account.account'].search(
[('name', '=', 'Tax Paid')], limit=1).id
tax = self.env['account.tax'].create({
'name': 'Tax 10.0%',
'amount': 10.0,
'amount_type': 'percent',
'account_id': tax_account_id,
})
invoice_account_id = self.env['account.account'].search(
[('user_type_id', '=', self.env.ref(
'account.data_account_type_receivable'
).id)], limit=1).id
invoice_line_account_id = self.env['account.account'].search(
[('user_type_id', '=', self.env.ref(
'account.data_account_type_expenses').id)], limit=1).id
invoice = self.env['account.invoice'].create({
'partner_id': self.env.ref('base.res_partner_2').id,
'account_id': invoice_account_id,
'type': 'out_invoice',
})
self.env['account.invoice.line'].create({
'product_id': self.env.ref('product.product_product_4').id,
'quantity': 1.0,
'price_unit': 100.0,
'invoice_id': invoice.id,
'name': 'product that cost 100',
'account_id': invoice_line_account_id,
'invoice_line_tax_ids': [(6, 0, [tax.id])],
})
invoice._onchange_invoice_line_ids()
invoice._convert_to_write(invoice._cache)
self.assertEqual(invoice.state, 'draft')
# change the state of invoice to open by clicking Validate button
invoice.signal_workflow('invoice_open')
self.assertEquals(tax.base_balance, 100.)
self.assertEquals(tax.balance, 10.)
self.assertEquals(tax.base_balance_regular, 100.)
self.assertEquals(tax.balance_regular, 10.)
self.assertEquals(tax.base_balance_refund, 0.)
self.assertEquals(tax.balance_refund, 0.)
# testing wizard
current_range = self.range.search([
('date_start', '=', '%s-%s-01' % (
self.current_year, self.current_month))
])
wizard = self.env['wizard.open.tax.balances'].new({})
self.assertFalse(wizard.from_date)
self.assertFalse(wizard.to_date)
wizard = self.env['wizard.open.tax.balances'].new({
'date_range_id': current_range[0].id,
})
wizard.onchange_date_range_id()
wizard._convert_to_write(wizard._cache)
action = wizard.open_taxes()
self.assertEqual(
action['context']['from_date'], current_range[0].date_start)
self.assertEqual(
action['context']['to_date'], current_range[0].date_end)
self.assertEqual(
action['xml_id'], 'account_tax_balance.action_tax_balances_tree')
# testing buttons
tax_action = tax.view_tax_lines()
base_action = tax.view_base_lines()
self.assertTrue(
tax_action['domain'][0][2][0] in
[l.id for l in invoice.move_id.line_ids])
self.assertEqual(
tax_action['xml_id'], 'account.action_account_moves_all_tree')
self.assertTrue(
base_action['domain'][0][2][0] in
[l.id for l in invoice.move_id.line_ids])
self.assertEqual(
base_action['xml_id'], 'account.action_account_moves_all_tree')
# test specific method
state_list = tax.get_target_state_list(target_move='all')
self.assertEqual(state_list, ['posted', 'draft'])
state_list = tax.get_target_state_list(target_move='whatever')
self.assertEqual(state_list, [])
refund = self.env['account.invoice'].create({
'partner_id': self.env.ref('base.res_partner_2').id,
'account_id': invoice_account_id,
'type': 'out_refund',
})
self.env['account.invoice.line'].create({
'product_id': self.env.ref('product.product_product_2').id,
'quantity': 1.0,
'price_unit': 25.0,
'invoice_id': refund.id,
'name': 'returned product that cost 25',
'account_id': invoice_line_account_id,
'invoice_line_tax_ids': [(6, 0, [tax.id])],
})
refund._onchange_invoice_line_ids()
refund._convert_to_write(invoice._cache)
self.assertEqual(refund.state, 'draft')
# change the state of refund to open by clicking Validate button
refund.signal_workflow('invoice_open')
self.assertEquals(tax.base_balance, 75.)
self.assertEquals(tax.balance, 7.5)
self.assertEquals(tax.base_balance_regular, 100.)
self.assertEquals(tax.balance_regular, 10.)
self.assertEquals(tax.base_balance_refund, -25.)
self.assertEquals(tax.balance_refund, -2.5)