odoo-addon-l10n-br-fiscal 16.0.2.17.0__py3-none-any.whl → 16.0.19.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- odoo/addons/l10n_br_fiscal/README.rst +11 -4
- odoo/addons/l10n_br_fiscal/__manifest__.py +20 -12
- odoo/addons/l10n_br_fiscal/constants/fiscal.py +64 -18
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.cest.csv +1043 -983
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.cfop.csv +620 -620
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.cst.csv +58 -0
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.document.type.csv +1 -0
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.legal.nature.csv +82 -0
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.nbs.csv +791 -764
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.operation.indicator.csv +27 -0
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.partner.profile.csv +11 -0
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.tax.classification.csv +163 -0
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.tax.csv +32 -0
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.tax.group.csv +3 -0
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal_icms_tax_definition_data.xml +340 -352
- odoo/addons/l10n_br_fiscal/data/operation_data.xml +1 -1
- odoo/addons/l10n_br_fiscal/data/simplified_tax_data.xml +5 -5
- odoo/addons/l10n_br_fiscal/data/uom.alias.csv +25 -0
- odoo/addons/l10n_br_fiscal/data/uom_data.xml +104 -33
- odoo/addons/l10n_br_fiscal/demo/__init__.py +21 -15
- odoo/addons/l10n_br_fiscal/demo/company_demo.xml +6 -0
- odoo/addons/l10n_br_fiscal/demo/fiscal_document_demo.xml +3 -377
- odoo/addons/l10n_br_fiscal/demo/fiscal_document_nfse_demo.xml +0 -12
- odoo/addons/l10n_br_fiscal/demo/fiscal_operation_demo.xml +2 -2
- odoo/addons/l10n_br_fiscal/demo/icms_tax_definition_demo.xml +5 -2
- odoo/addons/l10n_br_fiscal/demo/res_users_demo.xml +2 -2
- odoo/addons/l10n_br_fiscal/i18n/l10n_br_fiscal.pot +1161 -804
- odoo/addons/l10n_br_fiscal/i18n/pt_BR.po +22 -22
- odoo/addons/l10n_br_fiscal/migrations/16.0.13.0.0/pre-migration.py +25 -0
- odoo/addons/l10n_br_fiscal/migrations/16.0.14.0.0/pre-migration.py +30 -0
- odoo/addons/l10n_br_fiscal/migrations/16.0.14.0.5/pre-migration.py +15 -0
- odoo/addons/l10n_br_fiscal/migrations/16.0.4.0.0/pre-migration.py +220 -0
- odoo/addons/l10n_br_fiscal/migrations/16.0.5.0.0/pre-migration.py +33 -0
- odoo/addons/l10n_br_fiscal/migrations/16.0.5.2.0/pre-migration.py +21 -0
- odoo/addons/l10n_br_fiscal/models/__init__.py +3 -8
- odoo/addons/l10n_br_fiscal/models/cest.py +0 -8
- odoo/addons/l10n_br_fiscal/models/cfop.py +91 -0
- odoo/addons/l10n_br_fiscal/models/city_taxation_code.py +1 -3
- odoo/addons/l10n_br_fiscal/models/comment.py +2 -2
- odoo/addons/l10n_br_fiscal/models/cst.py +0 -1
- odoo/addons/l10n_br_fiscal/models/data_abstract.py +26 -0
- odoo/addons/l10n_br_fiscal/models/data_ncm_nbs_abstract.py +1 -1
- odoo/addons/l10n_br_fiscal/models/document.py +131 -222
- odoo/addons/l10n_br_fiscal/models/document_line.py +82 -5
- odoo/addons/l10n_br_fiscal/models/document_line_mixin.py +1952 -138
- odoo/addons/l10n_br_fiscal/models/document_mixin.py +741 -6
- odoo/addons/l10n_br_fiscal/models/document_related.py +12 -9
- odoo/addons/l10n_br_fiscal/models/document_serie.py +33 -0
- odoo/addons/l10n_br_fiscal/models/document_type.py +0 -6
- odoo/addons/l10n_br_fiscal/models/ibpt.py +1 -1
- odoo/addons/l10n_br_fiscal/models/icms_regulation.py +2 -2
- odoo/addons/l10n_br_fiscal/models/invalidate_number.py +4 -5
- odoo/addons/l10n_br_fiscal/models/legal_nature.py +20 -0
- odoo/addons/l10n_br_fiscal/models/nbm.py +0 -8
- odoo/addons/l10n_br_fiscal/models/ncm.py +0 -12
- odoo/addons/l10n_br_fiscal/models/operation.py +49 -15
- odoo/addons/l10n_br_fiscal/models/operation_dashboard.py +3 -2
- odoo/addons/l10n_br_fiscal/models/operation_indicator.py +58 -0
- odoo/addons/l10n_br_fiscal/models/operation_line.py +75 -6
- odoo/addons/l10n_br_fiscal/models/partner_profile.py +6 -0
- odoo/addons/l10n_br_fiscal/models/product_mixin.py +24 -21
- odoo/addons/l10n_br_fiscal/models/product_template.py +23 -13
- odoo/addons/l10n_br_fiscal/models/res_company.py +31 -9
- odoo/addons/l10n_br_fiscal/models/res_partner.py +38 -6
- odoo/addons/l10n_br_fiscal/models/simplified_tax.py +0 -3
- odoo/addons/l10n_br_fiscal/models/simplified_tax_range.py +8 -0
- odoo/addons/l10n_br_fiscal/models/tax.py +144 -55
- odoo/addons/l10n_br_fiscal/models/tax_classification.py +81 -0
- odoo/addons/l10n_br_fiscal/models/tax_definition.py +72 -23
- odoo/addons/l10n_br_fiscal/models/tax_pis_cofins.py +0 -3
- odoo/addons/l10n_br_fiscal/models/tax_pis_cofins_base.py +1 -1
- odoo/addons/l10n_br_fiscal/models/tax_pis_cofins_credit.py +1 -1
- odoo/addons/l10n_br_fiscal/models/uom_uom.py +15 -30
- odoo/addons/l10n_br_fiscal/security/fiscal_security.xml +11 -27
- odoo/addons/l10n_br_fiscal/security/ir.model.access.csv +11 -10
- odoo/addons/l10n_br_fiscal/static/description/index.html +27 -21
- odoo/addons/l10n_br_fiscal/static/src/js/list_renderer_with_button.esm.js +38 -0
- odoo/addons/l10n_br_fiscal/tests/__init__.py +3 -2
- odoo/addons/l10n_br_fiscal/tests/test_document_edition.py +308 -0
- odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_generic.py +23 -129
- odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_nfse.py +5 -15
- odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_serie.py +60 -0
- odoo/addons/l10n_br_fiscal/tests/test_ibpt.py +4 -3
- odoo/addons/l10n_br_fiscal/tests/test_icms_regulation.py +2 -2
- odoo/addons/l10n_br_fiscal/tests/test_ncm.py +4 -1
- odoo/addons/l10n_br_fiscal/tests/test_tax_benefit.py +17 -22
- odoo/addons/l10n_br_fiscal/tests/test_tax_classification.py +110 -0
- odoo/addons/l10n_br_fiscal/tools.py +1 -1
- odoo/addons/l10n_br_fiscal/views/cest_view.xml +2 -4
- odoo/addons/l10n_br_fiscal/views/cfop_view.xml +25 -5
- odoo/addons/l10n_br_fiscal/views/city_taxation_code.xml +1 -4
- odoo/addons/l10n_br_fiscal/views/cnae_view.xml +2 -4
- odoo/addons/l10n_br_fiscal/views/comment_view.xml +2 -4
- odoo/addons/l10n_br_fiscal/views/cst_view.xml +6 -8
- odoo/addons/l10n_br_fiscal/views/{document_fiscal_line_mixin_view.xml → document_line_mixin_view.xml} +525 -385
- odoo/addons/l10n_br_fiscal/views/document_line_view.xml +101 -82
- odoo/addons/l10n_br_fiscal/views/document_related_view.xml +44 -46
- odoo/addons/l10n_br_fiscal/views/document_serie_view.xml +2 -6
- odoo/addons/l10n_br_fiscal/views/document_type_view.xml +0 -8
- odoo/addons/l10n_br_fiscal/views/document_view.xml +303 -370
- odoo/addons/l10n_br_fiscal/views/icms_regulation_view.xml +14 -16
- odoo/addons/l10n_br_fiscal/views/icms_relief_view.xml +8 -10
- odoo/addons/l10n_br_fiscal/views/invalidate_number_view.xml +46 -48
- odoo/addons/l10n_br_fiscal/views/l10n_br_fiscal_action.xml +166 -280
- odoo/addons/l10n_br_fiscal/views/l10n_br_fiscal_menu.xml +25 -99
- odoo/addons/l10n_br_fiscal/views/legal_nature_view.xml +40 -0
- odoo/addons/l10n_br_fiscal/views/nbm_view.xml +5 -6
- odoo/addons/l10n_br_fiscal/views/nbs_view.xml +5 -6
- odoo/addons/l10n_br_fiscal/views/ncm_view.xml +12 -15
- odoo/addons/l10n_br_fiscal/views/operation_dashboard_view.xml +13 -12
- odoo/addons/l10n_br_fiscal/views/operation_indicator_view.xml +75 -0
- odoo/addons/l10n_br_fiscal/views/operation_line_view.xml +22 -21
- odoo/addons/l10n_br_fiscal/views/operation_view.xml +4 -19
- odoo/addons/l10n_br_fiscal/views/partner_profile_view.xml +3 -6
- odoo/addons/l10n_br_fiscal/views/product_genre_view.xml +7 -9
- odoo/addons/l10n_br_fiscal/views/product_product_view.xml +37 -14
- odoo/addons/l10n_br_fiscal/views/product_template_view.xml +34 -14
- odoo/addons/l10n_br_fiscal/views/res_company_view.xml +55 -52
- odoo/addons/l10n_br_fiscal/views/res_config_settings_view.xml +23 -28
- odoo/addons/l10n_br_fiscal/views/res_partner_view.xml +22 -2
- odoo/addons/l10n_br_fiscal/views/service_type_view.xml +7 -8
- odoo/addons/l10n_br_fiscal/views/simplified_tax_range_view.xml +0 -2
- odoo/addons/l10n_br_fiscal/views/simplified_tax_view.xml +0 -2
- odoo/addons/l10n_br_fiscal/views/tax_classification.xml +110 -0
- odoo/addons/l10n_br_fiscal/views/tax_definition_view.xml +157 -129
- odoo/addons/l10n_br_fiscal/views/tax_estimate_view.xml +0 -2
- odoo/addons/l10n_br_fiscal/views/tax_group_view.xml +3 -6
- odoo/addons/l10n_br_fiscal/views/tax_ipi_control_seal_view.xml +0 -2
- odoo/addons/l10n_br_fiscal/views/tax_ipi_guideline_class_view.xml +0 -2
- odoo/addons/l10n_br_fiscal/views/tax_ipi_guideline_view.xml +2 -4
- odoo/addons/l10n_br_fiscal/views/tax_pis_cofins_base_view.xml +2 -4
- odoo/addons/l10n_br_fiscal/views/tax_pis_cofins_credit_view.xml +2 -4
- odoo/addons/l10n_br_fiscal/views/tax_pis_cofins_view.xml +5 -7
- odoo/addons/l10n_br_fiscal/views/tax_view.xml +5 -7
- odoo/addons/l10n_br_fiscal/views/uom_uom.xml +24 -17
- odoo/addons/l10n_br_fiscal/wizards/__init__.py +1 -0
- odoo/addons/l10n_br_fiscal/wizards/base_wizard_mixin.py +1 -1
- odoo/addons/l10n_br_fiscal/wizards/document_import_wizard_mixin.py +129 -0
- odoo/addons/l10n_br_fiscal/wizards/document_import_wizard_mixin.xml +41 -0
- {odoo_addon_l10n_br_fiscal-16.0.2.17.0.dist-info → odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info}/METADATA +15 -6
- odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info/RECORD +210 -0
- {odoo_addon_l10n_br_fiscal-16.0.2.17.0.dist-info → odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info}/WHEEL +1 -1
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal_email_template.xml +0 -68
- odoo/addons/l10n_br_fiscal/data/partner_profile_data.xml +0 -96
- odoo/addons/l10n_br_fiscal/data/uom_alternative_data.xml +0 -58
- odoo/addons/l10n_br_fiscal/demo/l10n_br_fiscal_document_email.xml +0 -54
- odoo/addons/l10n_br_fiscal/demo/subsequent_operation_demo.xml +0 -10
- odoo/addons/l10n_br_fiscal/models/document_email.py +0 -74
- odoo/addons/l10n_br_fiscal/models/document_line_mixin_methods.py +0 -913
- odoo/addons/l10n_br_fiscal/models/document_mixin_fields.py +0 -473
- odoo/addons/l10n_br_fiscal/models/document_mixin_methods.py +0 -269
- odoo/addons/l10n_br_fiscal/models/document_move_mixin.py +0 -261
- odoo/addons/l10n_br_fiscal/models/subsequent_document.py +0 -203
- odoo/addons/l10n_br_fiscal/models/subsequent_operation.py +0 -54
- odoo/addons/l10n_br_fiscal/models/uom_uom_alternative.py +0 -22
- odoo/addons/l10n_br_fiscal/tests/test_subsequent_operation.py +0 -71
- odoo/addons/l10n_br_fiscal/tests/test_uom_uom.py +0 -22
- odoo/addons/l10n_br_fiscal/views/document_email_view.xml +0 -48
- odoo/addons/l10n_br_fiscal/views/subsequent_document_view.xml +0 -43
- odoo/addons/l10n_br_fiscal/views/subsequent_operation_view.xml +0 -21
- odoo_addon_l10n_br_fiscal-16.0.2.17.0.dist-info/RECORD +0 -205
- {odoo_addon_l10n_br_fiscal-16.0.2.17.0.dist-info → odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Copyright (C) 2025 Renato Lima - Akretion <renato.lima@akretion.com.br>
|
|
2
|
+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
3
|
+
|
|
4
|
+
from psycopg2 import IntegrityError
|
|
5
|
+
|
|
6
|
+
from odoo.exceptions import ValidationError
|
|
7
|
+
from odoo.tests import TransactionCase
|
|
8
|
+
from odoo.tools import mute_logger
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class TestFiscalDocumentSerie(TransactionCase):
|
|
12
|
+
@classmethod
|
|
13
|
+
def setUpClass(cls):
|
|
14
|
+
super().setUpClass()
|
|
15
|
+
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
|
|
16
|
+
|
|
17
|
+
# Company
|
|
18
|
+
cls.company_sn = cls.env.ref("l10n_br_base.empresa_simples_nacional")
|
|
19
|
+
|
|
20
|
+
# Fiscal Document Type
|
|
21
|
+
cls.document_type_nfe = cls.env.ref("l10n_br_fiscal.document_55")
|
|
22
|
+
|
|
23
|
+
cls.document_serie_nfe_5 = cls.env["l10n_br_fiscal.document.serie"].create(
|
|
24
|
+
{
|
|
25
|
+
"code": "5",
|
|
26
|
+
"name": "Serie 5",
|
|
27
|
+
"document_type_id": cls.document_type_nfe.id,
|
|
28
|
+
"company_id": cls.company_sn.id,
|
|
29
|
+
}
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
# Fiscal Document
|
|
33
|
+
cls.document = cls.env["l10n_br_fiscal.document"].create(
|
|
34
|
+
{
|
|
35
|
+
"company_id": cls.company_sn.id,
|
|
36
|
+
"document_type_id": cls.document_type_nfe.id,
|
|
37
|
+
"document_serie_id": cls.document_serie_nfe_5.id,
|
|
38
|
+
"partner_id": cls.env.ref("l10n_br_base.res_partner_cliente1_sp").id,
|
|
39
|
+
"state_edoc": "cancelada",
|
|
40
|
+
}
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
def test_document_serie_duplicated(self):
|
|
44
|
+
"""Test document serie duplicate constraint."""
|
|
45
|
+
document_serie = self.env["l10n_br_fiscal.document.serie"]
|
|
46
|
+
document_serie_values = {
|
|
47
|
+
"code": "10",
|
|
48
|
+
"name": "Serie 10",
|
|
49
|
+
"document_type_id": self.document_type_nfe.id,
|
|
50
|
+
"company_id": self.company_sn.id,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
with self.assertRaises(IntegrityError), mute_logger("odoo.sql_db"):
|
|
54
|
+
for _ in range(2):
|
|
55
|
+
document_serie.create(document_serie_values)
|
|
56
|
+
|
|
57
|
+
def test_document_serie_code_in_use(self):
|
|
58
|
+
"""Test document serie code in use constraint."""
|
|
59
|
+
with self.assertRaises(ValidationError):
|
|
60
|
+
self.document_serie_nfe_5.write({"code": "7"})
|
|
@@ -8,6 +8,7 @@ from os import environ
|
|
|
8
8
|
from decorator import decorate
|
|
9
9
|
from erpbrasil.base import misc
|
|
10
10
|
|
|
11
|
+
from odoo import Command
|
|
11
12
|
from odoo.tests import TransactionCase
|
|
12
13
|
from odoo.tools import config as odooconfig
|
|
13
14
|
|
|
@@ -95,7 +96,7 @@ class TestIbpt(TransactionCase):
|
|
|
95
96
|
"""Add a company to the user's allowed & set to current."""
|
|
96
97
|
user.write(
|
|
97
98
|
{
|
|
98
|
-
"company_ids": [(
|
|
99
|
+
"company_ids": [Command.set((company + user.company_ids).ids)],
|
|
99
100
|
"company_id": company.id,
|
|
100
101
|
}
|
|
101
102
|
)
|
|
@@ -107,7 +108,7 @@ class TestIbpt(TransactionCase):
|
|
|
107
108
|
try:
|
|
108
109
|
config = DeOlhoNoImposto(
|
|
109
110
|
company.ibpt_token,
|
|
110
|
-
misc.punctuation_rm(company.
|
|
111
|
+
misc.punctuation_rm(company.vat),
|
|
111
112
|
company.state_id.code,
|
|
112
113
|
odooconfig.get("ibpt_request_timeout")
|
|
113
114
|
or cls.env["ir.config_parameter"]
|
|
@@ -130,7 +131,7 @@ class TestIbpt(TransactionCase):
|
|
|
130
131
|
company = cls.env["res.company"].create(
|
|
131
132
|
{
|
|
132
133
|
"name": "Company Test Fiscal BR",
|
|
133
|
-
"
|
|
134
|
+
"vat": "02.960.895/0002-12",
|
|
134
135
|
"country_id": cls.env.ref("base.br").id,
|
|
135
136
|
"state_id": cls.env.ref("base.state_br_es").id,
|
|
136
137
|
"ibpt_api": True,
|
|
@@ -61,8 +61,8 @@ class TestICMSRegulation(TransactionCase):
|
|
|
61
61
|
|
|
62
62
|
def find_icms_tax(self, in_state_id, out_state_id, ncm_id, ind_final):
|
|
63
63
|
self.partner.state_id = in_state_id
|
|
64
|
-
self.company.partner_id.
|
|
65
|
-
self.company.
|
|
64
|
+
self.company.partner_id.l10n_br_ie_code = False
|
|
65
|
+
self.company.l10n_br_ie_code = False
|
|
66
66
|
self.company.state_id = out_state_id
|
|
67
67
|
self.product.ncm_id = ncm_id
|
|
68
68
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
# Felipe Motter Pereira <felipe@engenere.one>
|
|
3
3
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
4
4
|
|
|
5
|
+
from odoo import Command
|
|
5
6
|
from odoo.exceptions import AccessError
|
|
6
7
|
from odoo.tests import TransactionCase
|
|
7
8
|
|
|
@@ -16,7 +17,9 @@ class TestNcm(TransactionCase):
|
|
|
16
17
|
{
|
|
17
18
|
"name": "Test User Manager",
|
|
18
19
|
"login": "test_user_manager",
|
|
19
|
-
"groups_id": [
|
|
20
|
+
"groups_id": [
|
|
21
|
+
Command.set([cls.env.ref("l10n_br_fiscal.group_manager").id])
|
|
22
|
+
],
|
|
20
23
|
}
|
|
21
24
|
)
|
|
22
25
|
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
# Copyright 2023 Akretion - Renato Lima <renato.lima@akretion.com.br>
|
|
2
2
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
3
3
|
|
|
4
|
+
from odoo import Command
|
|
4
5
|
from odoo.tests import TransactionCase
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class TestTaxBenefit(TransactionCase):
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
@classmethod
|
|
10
|
+
def setUpClass(cls):
|
|
11
|
+
super().setUpClass()
|
|
12
|
+
cls.nfe_tax_benefit = cls.env.ref("l10n_br_fiscal.demo_nfe_tax_benefit")
|
|
13
|
+
cls.tax_benefit = cls.env["l10n_br_fiscal.tax.definition"].create(
|
|
12
14
|
{
|
|
13
|
-
"icms_regulation_id":
|
|
15
|
+
"icms_regulation_id": cls.env.ref(
|
|
14
16
|
"l10n_br_fiscal.tax_icms_regulation"
|
|
15
17
|
).id,
|
|
16
|
-
"tax_group_id":
|
|
18
|
+
"tax_group_id": cls.env.ref("l10n_br_fiscal.tax_group_icms").id,
|
|
17
19
|
"code": "SP810001",
|
|
18
20
|
"name": "TAX BENEFIT DEMO",
|
|
19
21
|
"description": "TAX BENEFIT DEMO",
|
|
@@ -22,30 +24,23 @@ class TestTaxBenefit(TransactionCase):
|
|
|
22
24
|
"is_taxed": True,
|
|
23
25
|
"is_debit_credit": True,
|
|
24
26
|
"custom_tax": True,
|
|
25
|
-
"tax_id":
|
|
26
|
-
"cst_id":
|
|
27
|
-
"state_from_id":
|
|
28
|
-
"state_to_ids": [(
|
|
27
|
+
"tax_id": cls.env.ref("l10n_br_fiscal.tax_icms_12_red_26_57").id,
|
|
28
|
+
"cst_id": cls.env.ref("l10n_br_fiscal.cst_icms_20").id,
|
|
29
|
+
"state_from_id": cls.env.ref("base.state_br_sp").id,
|
|
30
|
+
"state_to_ids": [Command.set(cls.env.ref("base.state_br_mg").ids)],
|
|
29
31
|
"ncms": "73269090",
|
|
30
|
-
"ncm_ids": [
|
|
32
|
+
"ncm_ids": [
|
|
33
|
+
Command.set(cls.env.ref("l10n_br_fiscal.ncm_73269090").ids)
|
|
34
|
+
],
|
|
31
35
|
"state": "approved",
|
|
32
36
|
}
|
|
33
37
|
)
|
|
38
|
+
# force update
|
|
39
|
+
cls.nfe_tax_benefit.fiscal_line_ids._compute_fiscal_tax_ids()
|
|
34
40
|
|
|
35
41
|
def test_nfe_tax_benefit(self):
|
|
36
42
|
"""Test NFe with tax benefit."""
|
|
37
|
-
|
|
38
|
-
self.nfe_tax_benefit._onchange_document_serie_id()
|
|
39
|
-
self.nfe_tax_benefit._onchange_fiscal_operation_id()
|
|
40
|
-
|
|
41
43
|
for line in self.nfe_tax_benefit.fiscal_line_ids:
|
|
42
|
-
line._onchange_product_id_fiscal()
|
|
43
|
-
line._onchange_commercial_quantity()
|
|
44
|
-
line._onchange_ncm_id()
|
|
45
|
-
line._onchange_fiscal_operation_id()
|
|
46
|
-
line._onchange_fiscal_operation_line_id()
|
|
47
|
-
line._onchange_fiscal_taxes()
|
|
48
|
-
|
|
49
44
|
self.assertEqual(
|
|
50
45
|
line.icms_tax_benefit_id,
|
|
51
46
|
self.tax_benefit,
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
from odoo.tests import TransactionCase
|
|
2
|
+
from odoo.tests.common import Form, tagged
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
@tagged("post_install", "-at_install")
|
|
6
|
+
class TestTaxClassification(TransactionCase):
|
|
7
|
+
@classmethod
|
|
8
|
+
def setUpClass(cls):
|
|
9
|
+
super().setUpClass()
|
|
10
|
+
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
|
|
11
|
+
|
|
12
|
+
cls.company = cls.env.ref("l10n_br_base.empresa_lucro_presumido")
|
|
13
|
+
cls.partner = cls.env.ref("l10n_br_base.res_partner_cliente1_sp")
|
|
14
|
+
cls.product = cls.env.ref("product.product_product_6")
|
|
15
|
+
|
|
16
|
+
# Use a stable operation line already referenced in existing test suites.
|
|
17
|
+
cls.operation_line = cls.env.ref("l10n_br_fiscal.fo_venda_venda")
|
|
18
|
+
|
|
19
|
+
# Pick classifications with CBS/IBS taxes set in the provided CSV.
|
|
20
|
+
cls.classification_company = cls.env.ref(
|
|
21
|
+
"l10n_br_fiscal.tax_classification_000001"
|
|
22
|
+
)
|
|
23
|
+
cls.classification_line = cls.env.ref(
|
|
24
|
+
"l10n_br_fiscal.tax_classification_200001"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
def _map_kwargs(self):
|
|
28
|
+
return {
|
|
29
|
+
"company": self.company,
|
|
30
|
+
"partner": self.partner,
|
|
31
|
+
"product": self.product,
|
|
32
|
+
"ncm": self.product.ncm_id,
|
|
33
|
+
"nbm": self.env["l10n_br_fiscal.nbm"],
|
|
34
|
+
"nbs": self.env["l10n_br_fiscal.nbs"],
|
|
35
|
+
"cest": self.env["l10n_br_fiscal.cest"],
|
|
36
|
+
"city_taxation_code": self.env["l10n_br_fiscal.city.taxation.code"],
|
|
37
|
+
"service_type": self.env["l10n_br_fiscal.service.type"],
|
|
38
|
+
"ind_final": "1",
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
def test_map_fiscal_taxes_tax_classification_from_company(self):
|
|
42
|
+
"""Operation line must fallback to company tax classification when empty."""
|
|
43
|
+
self.company.tax_classification_id = self.classification_company
|
|
44
|
+
self.operation_line.tax_classification_id = False
|
|
45
|
+
|
|
46
|
+
result = self.operation_line.map_fiscal_taxes(**self._map_kwargs())
|
|
47
|
+
|
|
48
|
+
self.assertEqual(result["tax_classification"], self.classification_company)
|
|
49
|
+
self.assertEqual(
|
|
50
|
+
result["taxes"][self.classification_company.tax_cbs_id.tax_domain],
|
|
51
|
+
self.classification_company.tax_cbs_id,
|
|
52
|
+
)
|
|
53
|
+
self.assertEqual(
|
|
54
|
+
result["taxes"][self.classification_company.tax_ibs_id.tax_domain],
|
|
55
|
+
self.classification_company.tax_ibs_id,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
def test_map_fiscal_taxes_tax_classification_from_operation_line(self):
|
|
59
|
+
"""Operation line tax classification must override company default."""
|
|
60
|
+
self.company.tax_classification_id = self.classification_company
|
|
61
|
+
self.operation_line.tax_classification_id = self.classification_line
|
|
62
|
+
|
|
63
|
+
result = self.operation_line.map_fiscal_taxes(**self._map_kwargs())
|
|
64
|
+
|
|
65
|
+
self.assertEqual(result["tax_classification"], self.classification_line)
|
|
66
|
+
self.assertEqual(
|
|
67
|
+
result["taxes"][self.classification_line.tax_cbs_id.tax_domain],
|
|
68
|
+
self.classification_line.tax_cbs_id,
|
|
69
|
+
)
|
|
70
|
+
self.assertEqual(
|
|
71
|
+
result["taxes"][self.classification_line.tax_ibs_id.tax_domain],
|
|
72
|
+
self.classification_line.tax_ibs_id,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
def test_document_line_receives_cbs_ibs_from_tax_classification(self):
|
|
76
|
+
"""Fiscal document line must receive tax classification and CBS/IBS taxes."""
|
|
77
|
+
self.company.tax_classification_id = self.classification_company
|
|
78
|
+
self.operation_line.tax_classification_id = False
|
|
79
|
+
|
|
80
|
+
doc_form = Form(
|
|
81
|
+
self.env["l10n_br_fiscal.document"].with_context(
|
|
82
|
+
default_fiscal_operation_type="out",
|
|
83
|
+
)
|
|
84
|
+
)
|
|
85
|
+
doc_form.company_id = self.company
|
|
86
|
+
doc_form.partner_id = self.partner
|
|
87
|
+
doc_form.fiscal_operation_id = self.env.ref("l10n_br_fiscal.fo_venda")
|
|
88
|
+
doc_form.ind_final = "1"
|
|
89
|
+
|
|
90
|
+
with doc_form.fiscal_line_ids.new() as line_form:
|
|
91
|
+
line_form.product_id = self.product
|
|
92
|
+
# Ensure we map on a predictable operation line for this assertion.
|
|
93
|
+
line_form.fiscal_operation_line_id = self.operation_line
|
|
94
|
+
|
|
95
|
+
self.assertEqual(
|
|
96
|
+
line_form.tax_classification_id, self.classification_company
|
|
97
|
+
)
|
|
98
|
+
self.assertEqual(
|
|
99
|
+
line_form.cbs_tax_id, self.classification_company.tax_cbs_id
|
|
100
|
+
)
|
|
101
|
+
self.assertEqual(
|
|
102
|
+
line_form.ibs_tax_id, self.classification_company.tax_ibs_id
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
self.assertIn(
|
|
106
|
+
self.classification_company.tax_cbs_id, line_form.fiscal_tax_ids
|
|
107
|
+
)
|
|
108
|
+
self.assertIn(
|
|
109
|
+
self.classification_company.tax_ibs_id, line_form.fiscal_tax_ids
|
|
110
|
+
)
|
|
@@ -48,7 +48,7 @@ def domain_field_codes(
|
|
|
48
48
|
def path_edoc_company(company_id):
|
|
49
49
|
db_name = company_id._cr.dbname
|
|
50
50
|
filestore = tools.config.filestore(db_name)
|
|
51
|
-
return "/".join([filestore, "edoc", punctuation_rm(company_id.
|
|
51
|
+
return "/".join([filestore, "edoc", punctuation_rm(company_id.vat)])
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
def build_edoc_path(
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
2
2
|
<odoo>
|
|
3
|
-
|
|
4
3
|
<record id="cest_search" model="ir.ui.view">
|
|
5
4
|
<field name="name">l10n_br_fiscal.cest.search</field>
|
|
6
5
|
<field name="model">l10n_br_fiscal.cest</field>
|
|
@@ -10,9 +9,9 @@
|
|
|
10
9
|
<field name="name" />
|
|
11
10
|
<field name="item" />
|
|
12
11
|
<field name="segment" />
|
|
13
|
-
<group expand=
|
|
12
|
+
<group expand="0" string="Group By...">
|
|
14
13
|
<filter
|
|
15
|
-
string=
|
|
14
|
+
string="Segment"
|
|
16
15
|
name="segment"
|
|
17
16
|
domain="[]"
|
|
18
17
|
context="{'group_by' : 'segment'}"
|
|
@@ -79,5 +78,4 @@
|
|
|
79
78
|
</form>
|
|
80
79
|
</field>
|
|
81
80
|
</record>
|
|
82
|
-
|
|
83
81
|
</odoo>
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
2
2
|
<odoo>
|
|
3
|
-
|
|
4
3
|
<record id="cfop_search" model="ir.ui.view">
|
|
5
4
|
<field name="name">l10n_br_fiscal.cfop.search</field>
|
|
6
5
|
<field name="model">l10n_br_fiscal.cfop</field>
|
|
@@ -25,15 +24,15 @@
|
|
|
25
24
|
<field name="code" />
|
|
26
25
|
<field name="name" />
|
|
27
26
|
<field name="small_name" />
|
|
28
|
-
<group expand=
|
|
27
|
+
<group expand="0" string="Group By...">
|
|
29
28
|
<filter
|
|
30
|
-
string=
|
|
29
|
+
string="Type In Out"
|
|
31
30
|
name="type_in_out"
|
|
32
31
|
domain="[]"
|
|
33
32
|
context="{'group_by' : 'type_in_out'}"
|
|
34
33
|
/>
|
|
35
34
|
<filter
|
|
36
|
-
string=
|
|
35
|
+
string="Type Move"
|
|
37
36
|
name="type_move"
|
|
38
37
|
domain="[]"
|
|
39
38
|
context="{'group_by' : 'type_move'}"
|
|
@@ -53,6 +52,15 @@
|
|
|
53
52
|
<field name="type_in_out" />
|
|
54
53
|
<field name="destination" />
|
|
55
54
|
<field name="type_move" />
|
|
55
|
+
<field name="ind_nfe" optional="hide" />
|
|
56
|
+
<field name="ind_cte" optional="hide" />
|
|
57
|
+
<field name="ind_comunica" optional="hide" />
|
|
58
|
+
<field name="ind_transp" optional="hide" />
|
|
59
|
+
<field name="ind_devol" optional="hide" />
|
|
60
|
+
<field name="ind_retor" optional="hide" />
|
|
61
|
+
<field name="ind_anula" optional="hide" />
|
|
62
|
+
<field name="ind_remes" optional="hide" />
|
|
63
|
+
<field name="ind_comb" optional="hide" />
|
|
56
64
|
</tree>
|
|
57
65
|
</field>
|
|
58
66
|
</record>
|
|
@@ -81,6 +89,19 @@
|
|
|
81
89
|
<field name="account_move" />
|
|
82
90
|
<field name="assent_move" />
|
|
83
91
|
</group>
|
|
92
|
+
<group name="fiscal_document" string="Used In Fiscal Document">
|
|
93
|
+
<field name="ind_nfe" />
|
|
94
|
+
<field name="ind_cte" />
|
|
95
|
+
</group>
|
|
96
|
+
<group name="move_type" string="Move Type">
|
|
97
|
+
<field name="ind_comunica" />
|
|
98
|
+
<field name="ind_transp" />
|
|
99
|
+
<field name="ind_devol" />
|
|
100
|
+
<field name="ind_retor" />
|
|
101
|
+
<field name="ind_anula" />
|
|
102
|
+
<field name="ind_remes" />
|
|
103
|
+
<field name="ind_comb" />
|
|
104
|
+
</group>
|
|
84
105
|
</group>
|
|
85
106
|
<group name="tax_settings" string="Taxes Settings">
|
|
86
107
|
<field
|
|
@@ -94,5 +115,4 @@
|
|
|
94
115
|
</form>
|
|
95
116
|
</field>
|
|
96
117
|
</record>
|
|
97
|
-
|
|
98
118
|
</odoo>
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
<!-- Copyright 2020 KMEE INFORMATICA LTDA
|
|
3
3
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
|
|
4
4
|
<odoo>
|
|
5
|
-
|
|
6
5
|
<record id="city_taxation_code_search_view" model="ir.ui.view">
|
|
7
6
|
<field name="name">city.taxation.code.search (in l10n_br_fiscal)</field>
|
|
8
7
|
<field name="model">l10n_br_fiscal.city.taxation.code</field>
|
|
@@ -38,8 +37,7 @@
|
|
|
38
37
|
<field name="model">l10n_br_fiscal.city.taxation.code</field>
|
|
39
38
|
<field name="arch" type="xml">
|
|
40
39
|
<form>
|
|
41
|
-
<header
|
|
42
|
-
</header>
|
|
40
|
+
<header />
|
|
43
41
|
<sheet>
|
|
44
42
|
<group>
|
|
45
43
|
<field name="code" />
|
|
@@ -53,5 +51,4 @@
|
|
|
53
51
|
</form>
|
|
54
52
|
</field>
|
|
55
53
|
</record>
|
|
56
|
-
|
|
57
54
|
</odoo>
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
2
2
|
<odoo>
|
|
3
|
-
|
|
4
3
|
<record id="cnae_search" model="ir.ui.view">
|
|
5
4
|
<field name="name">l10n_br_fiscal.cnae.search</field>
|
|
6
5
|
<field name="model">l10n_br_fiscal.cnae</field>
|
|
@@ -8,9 +7,9 @@
|
|
|
8
7
|
<search string="CNAE">
|
|
9
8
|
<field name="code" />
|
|
10
9
|
<field name="name" />
|
|
11
|
-
<group expand=
|
|
10
|
+
<group expand="0" string="Group By...">
|
|
12
11
|
<filter
|
|
13
|
-
string=
|
|
12
|
+
string="Parent"
|
|
14
13
|
name="parent_id"
|
|
15
14
|
domain="[]"
|
|
16
15
|
context="{'group_by' : 'parent_id'}"
|
|
@@ -51,5 +50,4 @@
|
|
|
51
50
|
</form>
|
|
52
51
|
</field>
|
|
53
52
|
</record>
|
|
54
|
-
|
|
55
53
|
</odoo>
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
2
2
|
<odoo>
|
|
3
|
-
|
|
4
3
|
<record id="comment_search" model="ir.ui.view">
|
|
5
4
|
<field name="name">l10n_br_fiscal.comment.search</field>
|
|
6
5
|
<field name="model">l10n_br_fiscal.comment</field>
|
|
7
6
|
<field name="arch" type="xml">
|
|
8
7
|
<search string="Comment">
|
|
9
8
|
<field name="name" />
|
|
10
|
-
<group expand=
|
|
9
|
+
<group expand="0" string="Group By...">
|
|
11
10
|
<filter
|
|
12
|
-
string=
|
|
11
|
+
string="Comment Type"
|
|
13
12
|
name="comment_type"
|
|
14
13
|
domain="[]"
|
|
15
14
|
context="{'group_by' : 'comment_type'}"
|
|
@@ -75,5 +74,4 @@
|
|
|
75
74
|
</form>
|
|
76
75
|
</field>
|
|
77
76
|
</record>
|
|
78
|
-
|
|
79
77
|
</odoo>
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
2
2
|
<odoo>
|
|
3
|
-
|
|
4
3
|
<record id="cst_search" model="ir.ui.view">
|
|
5
4
|
<field name="name">l10n_br_fiscal.cst.search</field>
|
|
6
5
|
<field name="model">l10n_br_fiscal.cst</field>
|
|
@@ -10,9 +9,9 @@
|
|
|
10
9
|
<field name="name" />
|
|
11
10
|
<field name="tax_group_id" />
|
|
12
11
|
<field name="tax_domain" />
|
|
13
|
-
<group expand=
|
|
12
|
+
<group expand="0" string="Group By...">
|
|
14
13
|
<filter
|
|
15
|
-
string=
|
|
14
|
+
string="Tax Group"
|
|
16
15
|
name="tax_group_id"
|
|
17
16
|
domain="[]"
|
|
18
17
|
context="{'group_by' : 'tax_group_id'}"
|
|
@@ -42,14 +41,13 @@
|
|
|
42
41
|
<form string="CST">
|
|
43
42
|
<sheet>
|
|
44
43
|
<group>
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
<field name="code" />
|
|
45
|
+
<field name="name" />
|
|
46
|
+
<field name="cst_type" />
|
|
47
|
+
<field name="tax_group_id" />
|
|
49
48
|
</group>
|
|
50
49
|
</sheet>
|
|
51
50
|
</form>
|
|
52
51
|
</field>
|
|
53
52
|
</record>
|
|
54
|
-
|
|
55
53
|
</odoo>
|