odoo-addon-l10n-br-fiscal 16.0.8.0.2__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 +1 -1
- odoo/addons/l10n_br_fiscal/__manifest__.py +10 -3
- 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.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.operation.indicator.csv +27 -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 +31 -0
- odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.tax.group.csv +3 -0
- odoo/addons/l10n_br_fiscal/data/operation_data.xml +1 -1
- odoo/addons/l10n_br_fiscal/data/uom_data.xml +186 -33
- 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/i18n/l10n_br_fiscal.pot +902 -304
- 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/models/__init__.py +3 -2
- odoo/addons/l10n_br_fiscal/models/comment.py +2 -2
- odoo/addons/l10n_br_fiscal/models/data_ncm_nbs_abstract.py +1 -1
- odoo/addons/l10n_br_fiscal/models/document.py +83 -226
- odoo/addons/l10n_br_fiscal/models/document_line.py +67 -5
- odoo/addons/l10n_br_fiscal/models/document_line_mixin.py +1932 -136
- odoo/addons/l10n_br_fiscal/models/document_mixin.py +248 -17
- odoo/addons/l10n_br_fiscal/models/document_related.py +11 -8
- odoo/addons/l10n_br_fiscal/models/document_serie.py +33 -0
- odoo/addons/l10n_br_fiscal/models/ibpt.py +1 -1
- odoo/addons/l10n_br_fiscal/models/icms_regulation.py +1 -1
- odoo/addons/l10n_br_fiscal/models/invalidate_number.py +4 -5
- 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 +28 -0
- odoo/addons/l10n_br_fiscal/models/partner_profile.py +6 -0
- odoo/addons/l10n_br_fiscal/models/product_template.py +5 -1
- odoo/addons/l10n_br_fiscal/models/res_company.py +18 -0
- odoo/addons/l10n_br_fiscal/models/res_partner.py +27 -6
- odoo/addons/l10n_br_fiscal/models/simplified_tax_range.py +8 -0
- odoo/addons/l10n_br_fiscal/models/tax.py +7 -3
- odoo/addons/l10n_br_fiscal/models/tax_classification.py +81 -0
- 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 +24 -0
- odoo/addons/l10n_br_fiscal/security/fiscal_security.xml +6 -16
- odoo/addons/l10n_br_fiscal/security/ir.model.access.csv +8 -2
- odoo/addons/l10n_br_fiscal/static/description/index.html +1 -1
- odoo/addons/l10n_br_fiscal/tests/__init__.py +3 -0
- odoo/addons/l10n_br_fiscal/tests/test_document_edition.py +308 -0
- odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_generic.py +23 -111
- odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_nfse.py +5 -13
- odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_serie.py +60 -0
- odoo/addons/l10n_br_fiscal/tests/test_ibpt.py +2 -2
- odoo/addons/l10n_br_fiscal/tests/test_icms_regulation.py +2 -2
- odoo/addons/l10n_br_fiscal/tests/test_tax_benefit.py +14 -20
- 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 +3 -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 -388
- 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 -2
- odoo/addons/l10n_br_fiscal/views/document_view.xml +304 -346
- 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 +162 -244
- odoo/addons/l10n_br_fiscal/views/l10n_br_fiscal_menu.xml +16 -72
- odoo/addons/l10n_br_fiscal/views/legal_nature_view.xml +0 -2
- 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 +3 -6
- 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 +40 -38
- odoo/addons/l10n_br_fiscal/views/res_config_settings_view.xml +23 -28
- odoo/addons/l10n_br_fiscal/views/res_partner_view.xml +13 -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 +52 -0
- 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.8.0.2.dist-info → odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info}/METADATA +3 -3
- {odoo_addon_l10n_br_fiscal-16.0.8.0.2.dist-info → odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info}/RECORD +113 -99
- {odoo_addon_l10n_br_fiscal-16.0.8.0.2.dist-info → odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info}/WHEEL +1 -1
- odoo/addons/l10n_br_fiscal/models/document_line_mixin_methods.py +0 -814
- odoo/addons/l10n_br_fiscal/models/document_mixin_methods.py +0 -363
- {odoo_addon_l10n_br_fiscal-16.0.8.0.2.dist-info → odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info}/top_level.txt +0 -0
|
@@ -1300,9 +1300,9 @@ msgid "CNPJ"
|
|
|
1300
1300
|
msgstr "CNPJ"
|
|
1301
1301
|
|
|
1302
1302
|
#. module: l10n_br_fiscal
|
|
1303
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
1304
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
1305
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
1303
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_related__vat
|
|
1304
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_partner__vat
|
|
1305
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_users__vat
|
|
1306
1306
|
msgid "CNPJ/CPF"
|
|
1307
1307
|
msgstr "CNPJ/CPF"
|
|
1308
1308
|
|
|
@@ -1914,8 +1914,8 @@ msgid "Company Main CNAE"
|
|
|
1914
1914
|
msgstr "CNAE Principal da Empresa"
|
|
1915
1915
|
|
|
1916
1916
|
#. module: l10n_br_fiscal
|
|
1917
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
1918
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
1917
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_l10n_br_im_code
|
|
1918
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_l10n_br_im_code
|
|
1919
1919
|
msgid "Company Municipal Tax Number"
|
|
1920
1920
|
msgstr "Número de Impostos Municipais da Empresa"
|
|
1921
1921
|
|
|
@@ -1938,8 +1938,8 @@ msgid "Company Phone"
|
|
|
1938
1938
|
msgstr "Telefone da Empresa"
|
|
1939
1939
|
|
|
1940
1940
|
#. module: l10n_br_fiscal
|
|
1941
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
1942
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
1941
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_l10n_br_ie_code_st
|
|
1942
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_l10n_br_ie_code_st
|
|
1943
1943
|
msgid "Company ST State Tax Number"
|
|
1944
1944
|
msgstr ""
|
|
1945
1945
|
|
|
@@ -1950,8 +1950,8 @@ msgid "Company State"
|
|
|
1950
1950
|
msgstr "Estado da Empresa"
|
|
1951
1951
|
|
|
1952
1952
|
#. module: l10n_br_fiscal
|
|
1953
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
1954
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
1953
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_l10n_br_ie_code
|
|
1954
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_l10n_br_ie_code
|
|
1955
1955
|
msgid "Company State Tax Number"
|
|
1956
1956
|
msgstr "Número da Inscrição Estadual"
|
|
1957
1957
|
|
|
@@ -1968,8 +1968,8 @@ msgid "Company Street2"
|
|
|
1968
1968
|
msgstr "Empresa Rua2"
|
|
1969
1969
|
|
|
1970
1970
|
#. module: l10n_br_fiscal
|
|
1971
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
1972
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
1971
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_l10n_br_isuf_code
|
|
1972
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_l10n_br_isuf_code
|
|
1973
1973
|
msgid "Company Suframa"
|
|
1974
1974
|
msgstr "Empresa Suframa"
|
|
1975
1975
|
|
|
@@ -5165,7 +5165,7 @@ msgid "Input"
|
|
|
5165
5165
|
msgstr "Entrada"
|
|
5166
5166
|
|
|
5167
5167
|
#. module: l10n_br_fiscal
|
|
5168
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
5168
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_related__l10n_br_ie_code
|
|
5169
5169
|
msgid "Inscr. Estadual/RG"
|
|
5170
5170
|
msgstr "O Inscr. Estadual/RG"
|
|
5171
5171
|
|
|
@@ -5771,10 +5771,10 @@ msgid "Move Settings"
|
|
|
5771
5771
|
msgstr "Configurações de movimento"
|
|
5772
5772
|
|
|
5773
5773
|
#. module: l10n_br_fiscal
|
|
5774
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
5775
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
5776
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
5777
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
5774
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__partner_l10n_br_im_code
|
|
5775
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__partner_l10n_br_im_code
|
|
5776
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_partner__l10n_br_im_code
|
|
5777
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_users__l10n_br_im_code
|
|
5778
5778
|
msgid "Municipal Tax Number"
|
|
5779
5779
|
msgstr "Número de Impostos Municipais"
|
|
5780
5780
|
|
|
@@ -7705,10 +7705,10 @@ msgid "State"
|
|
|
7705
7705
|
msgstr "Estado"
|
|
7706
7706
|
|
|
7707
7707
|
#. module: l10n_br_fiscal
|
|
7708
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
7709
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
7710
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
7711
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
7708
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__partner_l10n_br_ie_code
|
|
7709
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__partner_l10n_br_ie_code
|
|
7710
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_partner__l10n_br_ie_code
|
|
7711
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_users__l10n_br_ie_code
|
|
7712
7712
|
msgid "State Tax Number"
|
|
7713
7713
|
msgstr "Número do Imposto Estadual/RG"
|
|
7714
7714
|
|
|
@@ -7798,8 +7798,8 @@ msgid "Sufix"
|
|
|
7798
7798
|
msgstr "Sufix"
|
|
7799
7799
|
|
|
7800
7800
|
#. module: l10n_br_fiscal
|
|
7801
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
7802
|
-
#: model:ir.model.fields,field_description:l10n_br_fiscal.
|
|
7801
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__partner_l10n_br_isuf_code
|
|
7802
|
+
#: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__partner_l10n_br_isuf_code
|
|
7803
7803
|
msgid "Suframa"
|
|
7804
7804
|
msgstr "Suframa"
|
|
7805
7805
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Copyright (C) 2025 - Engenere (<https://engenere.one>).
|
|
2
|
+
# @author Antônio S. Pereira Neto <neto@engenere.one>
|
|
3
|
+
|
|
4
|
+
from openupgradelib import openupgrade
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@openupgrade.migrate()
|
|
8
|
+
def migrate(env, version):
|
|
9
|
+
"""Rename product.template M2M field to the new pluralized name.
|
|
10
|
+
|
|
11
|
+
The underlying Many2many relation table remains the same because
|
|
12
|
+
Odoo derives it from model table names, not the field name. This
|
|
13
|
+
rename keeps references (e.g., stored views/filters) consistent.
|
|
14
|
+
"""
|
|
15
|
+
openupgrade.rename_fields(
|
|
16
|
+
env,
|
|
17
|
+
[
|
|
18
|
+
(
|
|
19
|
+
"product.template",
|
|
20
|
+
"product.template",
|
|
21
|
+
"city_taxation_code_id",
|
|
22
|
+
"city_taxation_code_ids",
|
|
23
|
+
),
|
|
24
|
+
],
|
|
25
|
+
)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Copyright (C) 2025 - Engenere (<https://engenere.one>).
|
|
2
|
+
# @author Antônio S. Pereira Neto <neto@engenere.one>
|
|
3
|
+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
4
|
+
|
|
5
|
+
from openupgradelib import openupgrade
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@openupgrade.migrate()
|
|
9
|
+
def migrate(env, version):
|
|
10
|
+
field_spec = [
|
|
11
|
+
(
|
|
12
|
+
"l10n_br_fiscal.document",
|
|
13
|
+
"l10n_br_fiscal_document",
|
|
14
|
+
"amount_untaxed",
|
|
15
|
+
"fiscal_amount_untaxed",
|
|
16
|
+
),
|
|
17
|
+
(
|
|
18
|
+
"l10n_br_fiscal.document",
|
|
19
|
+
"l10n_br_fiscal_document",
|
|
20
|
+
"amount_tax",
|
|
21
|
+
"fiscal_amount_tax",
|
|
22
|
+
),
|
|
23
|
+
(
|
|
24
|
+
"l10n_br_fiscal.document",
|
|
25
|
+
"l10n_br_fiscal_document",
|
|
26
|
+
"amount_total",
|
|
27
|
+
"fiscal_amount_total",
|
|
28
|
+
),
|
|
29
|
+
]
|
|
30
|
+
openupgrade.rename_fields(env, field_spec)
|
|
@@ -0,0 +1,15 @@
|
|
|
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 openupgradelib import openupgrade
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@openupgrade.migrate()
|
|
8
|
+
def migrate(env, version):
|
|
9
|
+
xmlids_renames = [
|
|
10
|
+
(
|
|
11
|
+
"l10n_br_fiscal.l10n_br_fiscal_operation_line_rule",
|
|
12
|
+
"l10n_br_fiscal.l10n_br_fiscal_operation_rule",
|
|
13
|
+
)
|
|
14
|
+
]
|
|
15
|
+
openupgrade.rename_xmlids(env.cr, xmlids_renames)
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
from . import data_abstract
|
|
4
4
|
from . import data_product_abstract
|
|
5
5
|
from . import data_ncm_nbs_abstract
|
|
6
|
-
from . import document_mixin_methods
|
|
7
6
|
from . import document_mixin
|
|
8
|
-
from . import document_line_mixin_methods
|
|
9
7
|
from . import document_line_mixin
|
|
10
8
|
from . import invalidate_number
|
|
11
9
|
from . import comment
|
|
@@ -50,6 +48,9 @@ from . import document_related
|
|
|
50
48
|
from . import document_line
|
|
51
49
|
from . import res_config_settings
|
|
52
50
|
from . import res_country_state
|
|
51
|
+
from . import uom_uom
|
|
53
52
|
from . import operation_dashboard
|
|
54
53
|
from . import city_taxation_code
|
|
55
54
|
from . import document_supplement
|
|
55
|
+
from . import tax_classification
|
|
56
|
+
from . import operation_indicator
|
|
@@ -6,7 +6,7 @@ from datetime import datetime
|
|
|
6
6
|
|
|
7
7
|
from dateutil.relativedelta import relativedelta
|
|
8
8
|
|
|
9
|
-
from odoo import api, fields, models
|
|
9
|
+
from odoo import api, fields, models
|
|
10
10
|
from odoo.osv.expression import AND
|
|
11
11
|
|
|
12
12
|
from ..constants.fiscal import (
|
|
@@ -163,7 +163,7 @@ class Comment(models.Model):
|
|
|
163
163
|
|
|
164
164
|
comments = [manual_comment] if manual_comment else []
|
|
165
165
|
for record in self:
|
|
166
|
-
template = mako_safe_env.from_string(
|
|
166
|
+
template = mako_safe_env.from_string(record.comment)
|
|
167
167
|
comments.append(template.render(vals))
|
|
168
168
|
return " - ".join(comments)
|
|
169
169
|
|
|
@@ -89,7 +89,7 @@ class DataNcmNbsAbstract(models.AbstractModel):
|
|
|
89
89
|
|
|
90
90
|
config = DeOlhoNoImposto(
|
|
91
91
|
company.ibpt_token,
|
|
92
|
-
misc.punctuation_rm(company.
|
|
92
|
+
misc.punctuation_rm(company.vat),
|
|
93
93
|
company.state_id.code,
|
|
94
94
|
odooconfig.get("ibpt_request_timeout")
|
|
95
95
|
or self.env["ir.config_parameter"]
|
|
@@ -10,16 +10,21 @@ from odoo import _, api, fields, models
|
|
|
10
10
|
from odoo.exceptions import ValidationError
|
|
11
11
|
|
|
12
12
|
from ..constants.fiscal import (
|
|
13
|
+
COMMENT_TYPE_COMMERCIAL,
|
|
14
|
+
COMMENT_TYPE_FISCAL,
|
|
13
15
|
DOCUMENT_ISSUER_COMPANY,
|
|
14
16
|
DOCUMENT_ISSUER_DICT,
|
|
15
17
|
DOCUMENT_ISSUER_PARTNER,
|
|
16
18
|
EDOC_PURPOSE,
|
|
17
19
|
EDOC_PURPOSE_NORMAL,
|
|
20
|
+
EDOC_REFUND_CREDIT_TYPE,
|
|
21
|
+
EDOC_REFUND_DEBIT_TYPE,
|
|
18
22
|
FISCAL_IN_OUT_DICT,
|
|
19
23
|
MODELO_FISCAL_CTE,
|
|
20
24
|
MODELO_FISCAL_NFCE,
|
|
21
25
|
MODELO_FISCAL_NFE,
|
|
22
26
|
MODELO_FISCAL_NFSE,
|
|
27
|
+
PUBLIC_ENTIRY_TYPE,
|
|
23
28
|
SITUACAO_EDOC,
|
|
24
29
|
SITUACAO_EDOC_AUTORIZADA,
|
|
25
30
|
SITUACAO_EDOC_CANCELADA,
|
|
@@ -61,6 +66,7 @@ class Document(models.Model):
|
|
|
61
66
|
_inherit = [
|
|
62
67
|
"l10n_br_fiscal.document.mixin",
|
|
63
68
|
"mail.thread",
|
|
69
|
+
"mail.activity.mixin",
|
|
64
70
|
]
|
|
65
71
|
_description = "Fiscal Document"
|
|
66
72
|
_check_company_auto = True
|
|
@@ -91,9 +97,9 @@ class Document(models.Model):
|
|
|
91
97
|
)
|
|
92
98
|
|
|
93
99
|
fiscal_operation_id = fields.Many2one(
|
|
94
|
-
|
|
95
|
-
"
|
|
96
|
-
"
|
|
100
|
+
"l10n_br_fiscal.operation",
|
|
101
|
+
string="Fiscal Operation",
|
|
102
|
+
domain="[('state', '=', 'approved')]",
|
|
97
103
|
)
|
|
98
104
|
|
|
99
105
|
fiscal_operation_type = fields.Selection(
|
|
@@ -138,8 +144,16 @@ class Document(models.Model):
|
|
|
138
144
|
partner_id = fields.Many2one(
|
|
139
145
|
comodel_name="res.partner",
|
|
140
146
|
string="Partner",
|
|
147
|
+
inverse="_inverse_partner_id",
|
|
141
148
|
)
|
|
142
149
|
|
|
150
|
+
@api.onchange("partner_id")
|
|
151
|
+
def _inverse_partner_id(self):
|
|
152
|
+
for doc in self:
|
|
153
|
+
for line in doc.fiscal_line_ids:
|
|
154
|
+
if line.partner_id != doc.partner_id:
|
|
155
|
+
line.partner_id = doc.partner_id
|
|
156
|
+
|
|
143
157
|
partner_shipping_id = fields.Many2one(
|
|
144
158
|
comodel_name="res.partner",
|
|
145
159
|
string="Shipping Address",
|
|
@@ -168,6 +182,21 @@ class Document(models.Model):
|
|
|
168
182
|
precompute=True,
|
|
169
183
|
)
|
|
170
184
|
|
|
185
|
+
edoc_refund_debit_type = fields.Selection(
|
|
186
|
+
selection=EDOC_REFUND_DEBIT_TYPE,
|
|
187
|
+
string="Tipo de Nota de Débito",
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
edoc_refund_credit_type = fields.Selection(
|
|
191
|
+
selection=EDOC_REFUND_CREDIT_TYPE,
|
|
192
|
+
string="Tipo de Nota de Crédito",
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
public_entity_type = fields.Selection(
|
|
196
|
+
selection=PUBLIC_ENTIRY_TYPE,
|
|
197
|
+
string="Tipo de Entidade Governamental",
|
|
198
|
+
)
|
|
199
|
+
|
|
171
200
|
document_type = fields.Char(
|
|
172
201
|
string="Document Type Code",
|
|
173
202
|
related="document_type_id.code",
|
|
@@ -183,9 +212,9 @@ class Document(models.Model):
|
|
|
183
212
|
)
|
|
184
213
|
|
|
185
214
|
currency_id = fields.Many2one(
|
|
215
|
+
related="company_id.currency_id",
|
|
186
216
|
comodel_name="res.currency",
|
|
187
217
|
string="Currency",
|
|
188
|
-
compute="_compute_currency_id",
|
|
189
218
|
)
|
|
190
219
|
|
|
191
220
|
# this related "state" field is required for the status bar widget
|
|
@@ -215,205 +244,29 @@ class Document(models.Model):
|
|
|
215
244
|
],
|
|
216
245
|
string="Tomador do Serviço",
|
|
217
246
|
)
|
|
218
|
-
|
|
219
|
-
# ----- Now some handy related fields:
|
|
220
|
-
|
|
221
247
|
partner_legal_name = fields.Char(
|
|
222
248
|
string="Legal Name",
|
|
223
249
|
related="partner_id.legal_name",
|
|
224
250
|
)
|
|
225
|
-
|
|
226
|
-
partner_name = fields.Char(
|
|
227
|
-
string="Partner Name",
|
|
228
|
-
related="partner_id.name",
|
|
229
|
-
)
|
|
230
|
-
|
|
231
251
|
partner_cnpj_cpf = fields.Char(
|
|
232
252
|
string="CNPJ",
|
|
233
|
-
related="partner_id.
|
|
253
|
+
related="partner_id.vat",
|
|
234
254
|
)
|
|
235
|
-
|
|
236
|
-
partner_inscr_est = fields.Char(
|
|
255
|
+
partner_l10n_br_ie_code = fields.Char(
|
|
237
256
|
string="State Tax Number",
|
|
238
|
-
related="partner_id.
|
|
239
|
-
)
|
|
240
|
-
|
|
241
|
-
partner_ind_ie_dest = fields.Selection(
|
|
242
|
-
string="Contribuinte do ICMS",
|
|
243
|
-
related="partner_id.ind_ie_dest",
|
|
244
|
-
)
|
|
245
|
-
|
|
246
|
-
partner_inscr_mun = fields.Char(
|
|
247
|
-
string="Municipal Tax Number",
|
|
248
|
-
related="partner_id.inscr_mun",
|
|
249
|
-
)
|
|
250
|
-
|
|
251
|
-
partner_suframa = fields.Char(
|
|
252
|
-
string="Suframa",
|
|
253
|
-
related="partner_id.suframa",
|
|
254
|
-
)
|
|
255
|
-
|
|
256
|
-
partner_cnae_main_id = fields.Many2one(
|
|
257
|
-
comodel_name="l10n_br_fiscal.cnae",
|
|
258
|
-
string="Main CNAE",
|
|
259
|
-
related="partner_id.cnae_main_id",
|
|
260
|
-
)
|
|
261
|
-
|
|
262
|
-
partner_tax_framework = fields.Selection(
|
|
263
|
-
string="Tax Framework",
|
|
264
|
-
related="partner_id.tax_framework",
|
|
265
|
-
)
|
|
266
|
-
|
|
267
|
-
partner_street = fields.Char(
|
|
268
|
-
string="Partner Street",
|
|
269
|
-
related="partner_id.street",
|
|
270
|
-
)
|
|
271
|
-
|
|
272
|
-
partner_number = fields.Char(
|
|
273
|
-
string="Partner Number",
|
|
274
|
-
related="partner_id.street_number",
|
|
275
|
-
)
|
|
276
|
-
|
|
277
|
-
partner_street2 = fields.Char(
|
|
278
|
-
string="Partner Street2",
|
|
279
|
-
related="partner_id.street2",
|
|
280
|
-
)
|
|
281
|
-
|
|
282
|
-
partner_district = fields.Char(
|
|
283
|
-
string="Partner District",
|
|
284
|
-
related="partner_id.district",
|
|
285
|
-
)
|
|
286
|
-
|
|
287
|
-
partner_country_id = fields.Many2one(
|
|
288
|
-
comodel_name="res.country",
|
|
289
|
-
string="Partner Country",
|
|
290
|
-
related="partner_id.country_id",
|
|
291
|
-
)
|
|
292
|
-
|
|
293
|
-
partner_state_id = fields.Many2one(
|
|
294
|
-
comodel_name="res.country.state",
|
|
295
|
-
string="Partner State",
|
|
296
|
-
related="partner_id.state_id",
|
|
297
|
-
)
|
|
298
|
-
|
|
299
|
-
partner_city_id = fields.Many2one(
|
|
300
|
-
comodel_name="res.city",
|
|
301
|
-
string="Partner City",
|
|
302
|
-
related="partner_id.city_id",
|
|
303
|
-
)
|
|
304
|
-
|
|
305
|
-
partner_zip = fields.Char(
|
|
306
|
-
string="Partner Zip",
|
|
307
|
-
related="partner_id.zip",
|
|
308
|
-
)
|
|
309
|
-
|
|
310
|
-
partner_phone = fields.Char(
|
|
311
|
-
string="Partner Phone",
|
|
312
|
-
related="partner_id.phone",
|
|
313
|
-
)
|
|
314
|
-
|
|
315
|
-
partner_is_company = fields.Boolean(
|
|
316
|
-
string="Partner Is Company?",
|
|
317
|
-
related="partner_id.is_company",
|
|
257
|
+
related="partner_id.l10n_br_ie_code",
|
|
318
258
|
)
|
|
319
259
|
|
|
320
260
|
processador_edoc = fields.Selection(
|
|
321
261
|
related="company_id.processador_edoc",
|
|
322
262
|
)
|
|
323
|
-
|
|
324
|
-
company_legal_name = fields.Char(
|
|
325
|
-
string="Company Legal Name",
|
|
326
|
-
related="company_id.legal_name",
|
|
327
|
-
)
|
|
328
|
-
|
|
329
|
-
company_name = fields.Char(
|
|
330
|
-
string="Company Name",
|
|
331
|
-
size=128,
|
|
332
|
-
related="company_id.name",
|
|
333
|
-
)
|
|
334
|
-
|
|
335
|
-
company_cnpj_cpf = fields.Char(
|
|
336
|
-
string="Company CNPJ",
|
|
337
|
-
related="company_id.cnpj_cpf",
|
|
338
|
-
)
|
|
339
|
-
|
|
340
|
-
company_inscr_est = fields.Char(
|
|
341
|
-
string="Company State Tax Number",
|
|
342
|
-
related="company_id.inscr_est",
|
|
343
|
-
)
|
|
344
|
-
|
|
345
|
-
company_inscr_est_st = fields.Char(
|
|
263
|
+
company_l10n_br_ie_code_st = fields.Char(
|
|
346
264
|
string="Company ST State Tax Number",
|
|
347
265
|
)
|
|
348
266
|
|
|
349
|
-
|
|
350
|
-
string="Company Municipal Tax Number",
|
|
351
|
-
related="company_id.inscr_mun",
|
|
352
|
-
)
|
|
353
|
-
|
|
354
|
-
company_suframa = fields.Char(
|
|
355
|
-
string="Company Suframa",
|
|
356
|
-
related="company_id.suframa",
|
|
357
|
-
)
|
|
358
|
-
|
|
359
|
-
company_cnae_main_id = fields.Many2one(
|
|
360
|
-
comodel_name="l10n_br_fiscal.cnae",
|
|
361
|
-
string="Company Main CNAE",
|
|
362
|
-
related="company_id.cnae_main_id",
|
|
363
|
-
)
|
|
364
|
-
|
|
365
|
-
company_tax_framework = fields.Selection(
|
|
366
|
-
string="Company Tax Framework",
|
|
367
|
-
related="company_id.tax_framework",
|
|
368
|
-
)
|
|
369
|
-
|
|
370
|
-
company_street = fields.Char(
|
|
371
|
-
string="Company Street",
|
|
372
|
-
related="company_id.street",
|
|
373
|
-
)
|
|
374
|
-
|
|
375
|
-
company_number = fields.Char(
|
|
376
|
-
string="Company Number",
|
|
377
|
-
related="company_id.street_number",
|
|
378
|
-
)
|
|
379
|
-
|
|
380
|
-
company_street2 = fields.Char(
|
|
381
|
-
string="Company Street2",
|
|
382
|
-
related="company_id.street2",
|
|
383
|
-
)
|
|
267
|
+
fiscal_additional_data = fields.Text()
|
|
384
268
|
|
|
385
|
-
|
|
386
|
-
string="Company District",
|
|
387
|
-
related="company_id.district",
|
|
388
|
-
)
|
|
389
|
-
|
|
390
|
-
company_country_id = fields.Many2one(
|
|
391
|
-
comodel_name="res.country",
|
|
392
|
-
string="Company Country",
|
|
393
|
-
related="company_id.country_id",
|
|
394
|
-
)
|
|
395
|
-
|
|
396
|
-
company_state_id = fields.Many2one(
|
|
397
|
-
comodel_name="res.country.state",
|
|
398
|
-
string="Company State",
|
|
399
|
-
related="company_id.state_id",
|
|
400
|
-
)
|
|
401
|
-
|
|
402
|
-
company_city_id = fields.Many2one(
|
|
403
|
-
comodel_name="res.city",
|
|
404
|
-
string="Company City",
|
|
405
|
-
related="company_id.city_id",
|
|
406
|
-
)
|
|
407
|
-
|
|
408
|
-
company_zip = fields.Char(
|
|
409
|
-
string="Company ZIP",
|
|
410
|
-
related="company_id.zip",
|
|
411
|
-
)
|
|
412
|
-
|
|
413
|
-
company_phone = fields.Char(
|
|
414
|
-
string="Company Phone",
|
|
415
|
-
related="company_id.phone",
|
|
416
|
-
)
|
|
269
|
+
customer_additional_data = fields.Text()
|
|
417
270
|
|
|
418
271
|
@api.constrains("document_key")
|
|
419
272
|
def _check_key(self):
|
|
@@ -486,10 +339,18 @@ class Document(models.Model):
|
|
|
486
339
|
)
|
|
487
340
|
)
|
|
488
341
|
|
|
489
|
-
@api.
|
|
490
|
-
def
|
|
491
|
-
|
|
492
|
-
|
|
342
|
+
@api.onchange("fiscal_operation_type")
|
|
343
|
+
def _onchange_fiscal_operation_type(self):
|
|
344
|
+
domain = [("state", "=", "approved")]
|
|
345
|
+
if self.fiscal_operation_type:
|
|
346
|
+
domain.append(("fiscal_operation_type", "=", self.fiscal_operation_type))
|
|
347
|
+
if (
|
|
348
|
+
self.fiscal_operation_id
|
|
349
|
+
and self.fiscal_operation_id.fiscal_operation_type
|
|
350
|
+
!= self.fiscal_operation_type
|
|
351
|
+
):
|
|
352
|
+
self.fiscal_operation_id = False
|
|
353
|
+
return {"domain": {"fiscal_operation_id": domain}}
|
|
493
354
|
|
|
494
355
|
def _compute_document_name(self):
|
|
495
356
|
self.ensure_one()
|
|
@@ -510,19 +371,19 @@ class Document(models.Model):
|
|
|
510
371
|
name += "/" + type_serie_number
|
|
511
372
|
if self.document_date:
|
|
512
373
|
name += " - " + self.document_date.strftime("%d/%m/%Y")
|
|
513
|
-
if not self.
|
|
374
|
+
if not self.partner_id.vat:
|
|
514
375
|
name += " - " + _("Unidentified Consumer")
|
|
515
|
-
elif self.
|
|
516
|
-
name += " - " + self.
|
|
517
|
-
name += " - " + self.
|
|
376
|
+
elif self.partner_id.legal_name:
|
|
377
|
+
name += " - " + self.partner_id.legal_name
|
|
378
|
+
name += " - " + self.partner_id.vat
|
|
518
379
|
else:
|
|
519
|
-
name += " - " + self.
|
|
520
|
-
name += " - " + self.
|
|
380
|
+
name += " - " + self.partner_id.name
|
|
381
|
+
name += " - " + self.partner_id.vat
|
|
521
382
|
elif self._context.get("fiscal_document_no_company"):
|
|
522
383
|
name += type_serie_number
|
|
523
384
|
else:
|
|
524
385
|
name += "{name}/{type_serie_number}".format(
|
|
525
|
-
name=self.
|
|
386
|
+
name=self.company_id.name or "",
|
|
526
387
|
type_serie_number=type_serie_number,
|
|
527
388
|
)
|
|
528
389
|
return name
|
|
@@ -546,22 +407,9 @@ class Document(models.Model):
|
|
|
546
407
|
for r in self:
|
|
547
408
|
r.name = r._compute_document_name()
|
|
548
409
|
|
|
549
|
-
@api.
|
|
550
|
-
|
|
551
|
-
"fiscal_line_ids
|
|
552
|
-
"fiscal_line_ids.amount_untaxed",
|
|
553
|
-
"fiscal_line_ids.amount_tax",
|
|
554
|
-
"fiscal_line_ids.amount_taxed",
|
|
555
|
-
"fiscal_line_ids.amount_total",
|
|
556
|
-
"fiscal_line_ids.financial_total",
|
|
557
|
-
"fiscal_line_ids.financial_total_gross",
|
|
558
|
-
"fiscal_line_ids.financial_discount_value",
|
|
559
|
-
"fiscal_line_ids.amount_tax_included",
|
|
560
|
-
"fiscal_line_ids.amount_tax_not_included",
|
|
561
|
-
"fiscal_line_ids.amount_tax_withholding",
|
|
562
|
-
)
|
|
563
|
-
def _compute_fiscal_amount(self):
|
|
564
|
-
return super()._compute_fiscal_amount()
|
|
410
|
+
@api.model
|
|
411
|
+
def _get_fiscal_lines_field_name(self):
|
|
412
|
+
return "fiscal_line_ids"
|
|
565
413
|
|
|
566
414
|
def unlink(self):
|
|
567
415
|
forbidden_states_unlink = [
|
|
@@ -596,7 +444,6 @@ class Document(models.Model):
|
|
|
596
444
|
|
|
597
445
|
new_doc = record.copy()
|
|
598
446
|
new_doc.fiscal_operation_id = fsc_op
|
|
599
|
-
new_doc._onchange_fiscal_operation_id()
|
|
600
447
|
|
|
601
448
|
for line in new_doc.fiscal_line_ids:
|
|
602
449
|
fsc_op_line = line.fiscal_operation_id.return_fiscal_operation_id
|
|
@@ -608,9 +455,6 @@ class Document(models.Model):
|
|
|
608
455
|
).format(line.fiscal_operation_id)
|
|
609
456
|
)
|
|
610
457
|
line.fiscal_operation_id = fsc_op_line
|
|
611
|
-
line._onchange_fiscal_operation_id()
|
|
612
|
-
line._onchange_fiscal_operation_line_id()
|
|
613
|
-
|
|
614
458
|
return_docs |= new_doc
|
|
615
459
|
return return_docs
|
|
616
460
|
|
|
@@ -660,13 +504,26 @@ class Document(models.Model):
|
|
|
660
504
|
for record in self:
|
|
661
505
|
record.edoc_purpose = record.fiscal_operation_id.edoc_purpose
|
|
662
506
|
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
507
|
+
def __document_comment_vals(self):
|
|
508
|
+
return {
|
|
509
|
+
"user": self.env.user,
|
|
510
|
+
"ctx": self._context,
|
|
511
|
+
"doc": self,
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
def _document_comment(self):
|
|
515
|
+
for d in self:
|
|
516
|
+
# Fiscal Comments
|
|
517
|
+
d.fiscal_additional_data = d.comment_ids.filtered(
|
|
518
|
+
lambda c: c.comment_type == COMMENT_TYPE_FISCAL
|
|
519
|
+
).compute_message(
|
|
520
|
+
d.__document_comment_vals(), d.manual_fiscal_additional_data
|
|
521
|
+
)
|
|
671
522
|
|
|
672
|
-
|
|
523
|
+
# Commercial Comments
|
|
524
|
+
d.customer_additional_data = d.comment_ids.filtered(
|
|
525
|
+
lambda c: c.comment_type == COMMENT_TYPE_COMMERCIAL
|
|
526
|
+
).compute_message(
|
|
527
|
+
d.__document_comment_vals(), d.manual_customer_additional_data
|
|
528
|
+
)
|
|
529
|
+
d.fiscal_line_ids._document_comment()
|