[FIX] account_tax_balance: Recompute balance for different dates

pull/854/head
SimoRubi 2021-12-09 16:08:57 +01:00
parent d49f24e630
commit 2733d5f19c
2 changed files with 49 additions and 1 deletions

View File

@ -81,6 +81,12 @@ class AccountTax(models.Model):
ids_with_moves = self._account_tax_ids_with_moves() ids_with_moves = self._account_tax_ids_with_moves()
return [("id", "in", ids_with_moves)] return [("id", "in", ids_with_moves)]
@api.depends_context(
"from_date",
"to_date",
"company_ids",
"target_move",
)
def _compute_balance(self): def _compute_balance(self):
for tax in self: for tax in self:
tax.balance_regular = tax.compute_balance( tax.balance_regular = tax.compute_balance(

View File

@ -3,14 +3,17 @@
# Copyright 2019 Andrea Stirpe <a.stirpe@onestein.nl> # Copyright 2019 Andrea Stirpe <a.stirpe@onestein.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from datetime import datetime from datetime import datetime, timedelta
from dateutil.rrule import MONTHLY from dateutil.rrule import MONTHLY
import odoo import odoo
from odoo import fields
from odoo.fields import Date from odoo.fields import Date
from odoo.tests.common import HttpCase from odoo.tests.common import HttpCase
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
@odoo.tests.tagged("post_install", "-at_install") @odoo.tests.tagged("post_install", "-at_install")
class TestAccountTaxBalance(HttpCase): class TestAccountTaxBalance(HttpCase):
@ -260,3 +263,42 @@ class TestAccountTaxBalance(HttpCase):
tax.refresh() tax.refresh()
self.assertEqual(tax.base_balance, 175.0) self.assertEqual(tax.base_balance, 175.0)
self.assertEqual(tax.balance, 17.5) self.assertEqual(tax.balance, 17.5)
class TestInvoicingBalance(AccountTestInvoicingCommon):
def test_balance_recomputation(self):
"""Check that balances are computed correctly for different dates."""
partner = self.partner_a
tax = self.tax_sale_a
today = fields.Date.today()
self.init_invoice(
"in_invoice",
partner=partner,
invoice_date=today,
post=True,
amounts=[100],
taxes=tax,
)
tomorrow = today + timedelta(days=1)
self.init_invoice(
"in_invoice",
partner=partner,
invoice_date=tomorrow,
post=True,
amounts=[200],
taxes=tax,
)
# Check today's balance
self.check_date_balance(tax, today, -15)
# Check tomorrow's balance
self.check_date_balance(tax, tomorrow, -30)
def check_date_balance(self, tax, date, balance):
"""Compare expected balance with tax's balance in specified date."""
tax = tax.with_context(
from_date=date,
to_date=date,
)
self.assertEqual(tax.balance, balance)