136 lines
5.0 KiB
Python
136 lines
5.0 KiB
Python
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||
|
from odoo.tests import tagged
|
||
|
|
||
|
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
||
|
|
||
|
|
||
|
@tagged("post_install", "-at_install")
|
||
|
class TestOSSCoA(AccountTestInvoicingCommon):
|
||
|
def _create_xml_id(self, record):
|
||
|
return self.env["ir.model.data"].create(
|
||
|
{
|
||
|
"module": "account_chart_update",
|
||
|
"name": "{}-{}".format(record._table, record.id),
|
||
|
"model": record._name,
|
||
|
"res_id": record.id,
|
||
|
}
|
||
|
)
|
||
|
|
||
|
def _create_tax_tmpl(self, name, chart_template):
|
||
|
record = self.env["account.tax.template"].create(
|
||
|
{
|
||
|
"name": name,
|
||
|
"amount": 0,
|
||
|
"chart_template_id": chart_template.id,
|
||
|
"tax_group_id": self.env.ref("account.tax_group_taxes").id,
|
||
|
"refund_repartition_line_ids": [
|
||
|
(0, 0, {"repartition_type": "base", "factor_percent": 100.0}),
|
||
|
(0, 0, {"repartition_type": "tax", "factor_percent": 100.0}),
|
||
|
(0, 0, {"repartition_type": "tax", "factor_percent": 100.0}),
|
||
|
],
|
||
|
"invoice_repartition_line_ids": [
|
||
|
(0, 0, {"repartition_type": "base", "factor_percent": 100.0}),
|
||
|
(0, 0, {"repartition_type": "tax", "factor_percent": 100.0}),
|
||
|
(0, 0, {"repartition_type": "tax", "factor_percent": 100.0}),
|
||
|
],
|
||
|
}
|
||
|
)
|
||
|
self._create_xml_id(record)
|
||
|
return record
|
||
|
|
||
|
# pylint: disable=W8106
|
||
|
@classmethod
|
||
|
def setUpClass(
|
||
|
cls, chart_template_ref="l10n_generic_coa.configurable_chart_template"
|
||
|
):
|
||
|
super().setUpClass(chart_template_ref=chart_template_ref)
|
||
|
cls.chart_template = cls.env.ref(chart_template_ref)
|
||
|
cls.env = cls.env(
|
||
|
context=dict(
|
||
|
cls.env.context,
|
||
|
mail_create_nolog=True,
|
||
|
mail_create_nosubscribe=True,
|
||
|
mail_notrack=True,
|
||
|
no_reset_password=True,
|
||
|
tracking_disable=True,
|
||
|
)
|
||
|
)
|
||
|
cls.company = cls.env["res.company"].create(
|
||
|
{
|
||
|
"name": "Test account_chart_update company",
|
||
|
"currency_id": cls.chart_template.currency_id.id,
|
||
|
"country_id": cls.env.ref("base.es").id,
|
||
|
}
|
||
|
)
|
||
|
cls.env.user.write(
|
||
|
{
|
||
|
"company_ids": [
|
||
|
(6, 0, cls.env.user.company_ids.ids),
|
||
|
(4, cls.company.id),
|
||
|
],
|
||
|
"company_id": cls.company.id,
|
||
|
"groups_id": [
|
||
|
(6, 0, cls.env.user.groups_id.ids),
|
||
|
(4, cls.env.ref("account.group_account_user").id),
|
||
|
(4, cls.env.ref("account.group_account_invoice").id),
|
||
|
(4, cls.env.ref("base.group_multi_company").id),
|
||
|
],
|
||
|
}
|
||
|
)
|
||
|
cls.oss_wizard = cls.env["l10n.eu.oss.wizard"]
|
||
|
|
||
|
def setUp(self):
|
||
|
super().setUp()
|
||
|
# Create demo tax
|
||
|
self._create_tax_tmpl("Not OSS Demo tax", self.chart_template)
|
||
|
self.tax = self.env["account.tax"].create(
|
||
|
{
|
||
|
"name": "Not OSS Demo tax",
|
||
|
"amount": 10,
|
||
|
"amount_type": "percent",
|
||
|
"type_tax_use": "sale",
|
||
|
"country_id": self.env.ref("base.es").id,
|
||
|
"company_id": self.company.id,
|
||
|
"tax_group_id": self.env.ref("account.tax_group_taxes").id,
|
||
|
}
|
||
|
)
|
||
|
self.wizard_obj = self.env["wizard.update.charts.accounts"]
|
||
|
self.wizard_vals = {
|
||
|
"company_id": self.company.id,
|
||
|
"chart_template_id": self.chart_template.id,
|
||
|
"code_digits": 6,
|
||
|
"lang": "en_US",
|
||
|
}
|
||
|
|
||
|
@classmethod
|
||
|
def _oss_wizard_create(cls, extra_vals):
|
||
|
vals = cls.oss_wizard.default_get(list(cls.oss_wizard.fields_get()))
|
||
|
vals.update(extra_vals)
|
||
|
oss_wizard_id = cls.oss_wizard.create(vals)
|
||
|
return oss_wizard_id
|
||
|
|
||
|
def test_matching(self):
|
||
|
# Generate EU OSS taxes
|
||
|
oss_wizard_vals = {
|
||
|
"company_id": self.company.id,
|
||
|
"general_tax": self.tax.id,
|
||
|
}
|
||
|
oss_wizard = self._oss_wizard_create(oss_wizard_vals)
|
||
|
oss_wizard.generate_eu_oss_taxes()
|
||
|
|
||
|
wizard_vals = self.wizard_vals
|
||
|
wizard_vals.update(update_tax=True)
|
||
|
wizard = self.wizard_obj.create(wizard_vals)
|
||
|
wizard.action_find_records()
|
||
|
taxes_to_delete = wizard.tax_ids.filtered(lambda x: x.type == "deleted").mapped(
|
||
|
"update_tax_id"
|
||
|
)
|
||
|
oss_taxes = self.env["account.tax"].search(
|
||
|
[
|
||
|
("oss_country_id", "!=", False),
|
||
|
]
|
||
|
)
|
||
|
self.assertTrue(oss_taxes, "No OSS taxes found in the system")
|
||
|
for tax in oss_taxes:
|
||
|
self.assertNotIn(tax, taxes_to_delete)
|