From bc7b4149fe629255113492387ea7667abb5aed9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Valyi?= Date: Tue, 27 Jun 2023 00:24:06 -0300 Subject: [PATCH 1/9] [REF] l10n_br_fiscal_certificate extraction --- l10n_br_fiscal/__manifest__.py | 6 --- l10n_br_fiscal/hooks.py | 13 ----- l10n_br_fiscal/models/__init__.py | 1 - l10n_br_fiscal/models/res_company.py | 12 ----- l10n_br_fiscal/models/res_config_settings.py | 7 --- l10n_br_fiscal/security/ir.model.access.csv | 2 - l10n_br_fiscal/tests/__init__.py | 1 - l10n_br_fiscal/tools/misc.py | 21 +------- l10n_br_fiscal/views/dfe/dfe_views.xml | 6 +-- .../views/l10n_br_fiscal_action.xml | 17 ------- l10n_br_fiscal/views/l10n_br_fiscal_menu.xml | 9 ---- l10n_br_fiscal/views/res_company_view.xml | 10 ---- .../views/res_config_settings_view.xml | 19 -------- l10n_br_fiscal_certificate/__init__.py | 5 ++ l10n_br_fiscal_certificate/__manifest__.py | 31 ++++++++++++ l10n_br_fiscal_certificate/constants.py | 17 +++++++ l10n_br_fiscal_certificate/hooks.py | 46 ++++++++++++++++++ l10n_br_fiscal_certificate/models/__init__.py | 3 ++ .../models/certificate.py | 2 +- .../models/res_company.py | 22 +++++++++ .../models/res_config_settings.py | 16 ++++++ .../readme/CONTRIBUTORS.rst | 8 +++ .../readme/DESCRIPTION.rst | 1 + l10n_br_fiscal_certificate/readme/HISTORY.rst | 6 +++ l10n_br_fiscal_certificate/readme/USAGE.rst | 2 + .../security/ir.model.access.csv | 3 ++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../tests/test_certificate.py | 0 .../views/certificate_view.xml | 24 +++++++++ .../views/res_company_view.xml | 24 +++++++++ .../views/res_config_settings_view.xml | 35 +++++++++++++ requirements.txt | 2 +- 32 files changed, 247 insertions(+), 124 deletions(-) create mode 100644 l10n_br_fiscal_certificate/__init__.py create mode 100644 l10n_br_fiscal_certificate/__manifest__.py create mode 100644 l10n_br_fiscal_certificate/constants.py create mode 100644 l10n_br_fiscal_certificate/hooks.py create mode 100644 l10n_br_fiscal_certificate/models/__init__.py rename {l10n_br_fiscal => l10n_br_fiscal_certificate}/models/certificate.py (99%) create mode 100644 l10n_br_fiscal_certificate/models/res_company.py create mode 100644 l10n_br_fiscal_certificate/models/res_config_settings.py create mode 100644 l10n_br_fiscal_certificate/readme/CONTRIBUTORS.rst create mode 100644 l10n_br_fiscal_certificate/readme/DESCRIPTION.rst create mode 100644 l10n_br_fiscal_certificate/readme/HISTORY.rst create mode 100644 l10n_br_fiscal_certificate/readme/USAGE.rst create mode 100644 l10n_br_fiscal_certificate/security/ir.model.access.csv create mode 100644 l10n_br_fiscal_certificate/static/description/icon.png rename {l10n_br_fiscal => l10n_br_fiscal_certificate}/tests/test_certificate.py (100%) rename {l10n_br_fiscal => l10n_br_fiscal_certificate}/views/certificate_view.xml (80%) create mode 100644 l10n_br_fiscal_certificate/views/res_company_view.xml create mode 100644 l10n_br_fiscal_certificate/views/res_config_settings_view.xml diff --git a/l10n_br_fiscal/__manifest__.py b/l10n_br_fiscal/__manifest__.py index 1117d0f64191..da47d98b675b 100644 --- a/l10n_br_fiscal/__manifest__.py +++ b/l10n_br_fiscal/__manifest__.py @@ -62,7 +62,6 @@ "views/document_type_view.xml", "views/document_serie_view.xml", "views/document_email_view.xml", - "views/certificate_view.xml", "views/simplified_tax_view.xml", "views/simplified_tax_range_view.xml", "views/operation_view.xml", @@ -107,9 +106,4 @@ "installable": True, "application": True, "auto_install": False, - "external_dependencies": { - "python": [ - "erpbrasil.assinatura", - ] - }, } diff --git a/l10n_br_fiscal/hooks.py b/l10n_br_fiscal/hooks.py index 574d1e6ca109..0d145e63c957 100644 --- a/l10n_br_fiscal/hooks.py +++ b/l10n_br_fiscal/hooks.py @@ -1,14 +1,10 @@ # Copyright (C) 2019 - Renato Lima Akretion -# Copyright (C) 2021 - Luis Felipe Mileo - KMEE # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html import logging from odoo import SUPERUSER_ID, _, api, tools -from .constants.fiscal import CERTIFICATE_TYPE_ECNPJ -from .tools import misc - _logger = logging.getLogger(__name__) @@ -98,15 +94,6 @@ def post_init_hook(cr, registry): env.ref("l10n_br_base.empresa_simples_nacional", raise_if_not_found=False), ] - for company in companies: - l10n_br_fiscal_certificate_id = env["l10n_br_fiscal.certificate"] - company.certificate_nfe_id = l10n_br_fiscal_certificate_id.create( - misc.prepare_fake_certificate_vals() - ) - company.certificate_ecnpj_id = l10n_br_fiscal_certificate_id.create( - misc.prepare_fake_certificate_vals(cert_type=CERTIFICATE_TYPE_ECNPJ) - ) - if not is_demo: prodfiles = [] # Load full CSV files with few lines unless a flag diff --git a/l10n_br_fiscal/models/__init__.py b/l10n_br_fiscal/models/__init__.py index a7f2b0caa037..e01ff0966a19 100644 --- a/l10n_br_fiscal/models/__init__.py +++ b/l10n_br_fiscal/models/__init__.py @@ -45,7 +45,6 @@ from . import document_type from . import document_serie from . import product_genre -from . import certificate from . import product_mixin from . import product_template from . import product_product diff --git a/l10n_br_fiscal/models/res_company.py b/l10n_br_fiscal/models/res_company.py index 6db49e2c90d2..90898339312a 100644 --- a/l10n_br_fiscal/models/res_company.py +++ b/l10n_br_fiscal/models/res_company.py @@ -245,18 +245,6 @@ def _compute_simplified_tax(self): ibpt_update_days = fields.Integer(string="IBPT Token Updates", default=15) - certificate_ecnpj_id = fields.Many2one( - comodel_name="l10n_br_fiscal.certificate", - string="E-CNPJ", - domain="[('type', '=', 'e-cnpj')]", - ) - - certificate_nfe_id = fields.Many2one( - comodel_name="l10n_br_fiscal.certificate", - string="NFe", - domain="[('type', '=', 'nf-e')]", - ) - accountant_id = fields.Many2one(comodel_name="res.partner", string="Accountant") accounting_office = fields.Many2one( diff --git a/l10n_br_fiscal/models/res_config_settings.py b/l10n_br_fiscal/models/res_config_settings.py index 29f71942987c..7702e35dc994 100644 --- a/l10n_br_fiscal/models/res_config_settings.py +++ b/l10n_br_fiscal/models/res_config_settings.py @@ -26,13 +26,6 @@ class ResConfigSettings(models.TransientModel): readonly=False, ) - cert_expired_alert = fields.Integer( - string="Certificate Expired Alert", - config_parameter="l10n_br_fiscal_cert_expired_alert", - required=True, - default=30, - ) - document_type_id = fields.Many2one( comodel_name="l10n_br_fiscal.document.type", related="company_id.document_type_id", diff --git a/l10n_br_fiscal/security/ir.model.access.csv b/l10n_br_fiscal/security/ir.model.access.csv index e2757505185f..8d51bd2c35ac 100644 --- a/l10n_br_fiscal/security/ir.model.access.csv +++ b/l10n_br_fiscal/security/ir.model.access.csv @@ -43,8 +43,6 @@ "l10n_br_fiscal_document_email_manager","Fiscal Document Email for Manager","model_l10n_br_fiscal_document_email","l10n_br_fiscal.group_manager",1,1,1,1 "l10n_br_fiscal_document_serie_user","Fiscal Document Serie for User","model_l10n_br_fiscal_document_serie","l10n_br_fiscal.group_user",1,0,0,0 "l10n_br_fiscal_document_serie_manager","Fiscal Document Serie for Manager","model_l10n_br_fiscal_document_serie","l10n_br_fiscal.group_manager",1,1,1,1 -"l10n_br_fiscal_certificate_user","Fiscal Certificate for User","model_l10n_br_fiscal_certificate","l10n_br_fiscal.group_user",1,0,0,0 -"l10n_br_fiscal_certificate_manager","Fiscal Certificate for Manager","model_l10n_br_fiscal_certificate","l10n_br_fiscal.group_manager",1,1,1,1 "l10n_br_fiscal_simplified_tax_user","Fiscal Simplified Tax for User","model_l10n_br_fiscal_simplified_tax","l10n_br_fiscal.group_user",1,0,0,0 "l10n_br_fiscal_simplified_tax_manager","Fiscal Simplified Tax for Manager","model_l10n_br_fiscal_simplified_tax","l10n_br_fiscal.group_manager",1,0,0,0 "l10n_br_fiscal_simplified_tax_maintenance","Fiscal Simplified Tax for Maintenance","model_l10n_br_fiscal_simplified_tax","l10n_br_fiscal.group_data_maintenance",1,1,1,1 diff --git a/l10n_br_fiscal/tests/__init__.py b/l10n_br_fiscal/tests/__init__.py index ae9e51e00e7b..2777f918023e 100644 --- a/l10n_br_fiscal/tests/__init__.py +++ b/l10n_br_fiscal/tests/__init__.py @@ -1,7 +1,6 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import ( - test_certificate, test_cnae, test_fiscal_document_generic, test_fiscal_document_nfse, diff --git a/l10n_br_fiscal/tools/misc.py b/l10n_br_fiscal/tools/misc.py index 662c906d6ae9..4a251b208284 100644 --- a/l10n_br_fiscal/tools/misc.py +++ b/l10n_br_fiscal/tools/misc.py @@ -5,12 +5,11 @@ import logging import os -from erpbrasil.assinatura import misc from erpbrasil.base.misc import punctuation_rm from odoo.tools import config -from ..constants.fiscal import CERTIFICATE_TYPE_NFE, EVENT_ENV_HML, EVENT_ENV_PROD +from ..constants.fiscal import EVENT_ENV_HML, EVENT_ENV_PROD _logger = logging.getLogger(__name__) @@ -45,24 +44,6 @@ def domain_field_codes( return domain -def prepare_fake_certificate_vals( - valid=True, - passwd="123456", - issuer="EMISSOR A TESTE", - country="BR", - subject="CERTIFICADO VALIDO TESTE", - cert_type=CERTIFICATE_TYPE_NFE, -): - return { - "type": cert_type, - "subtype": "a1", - "password": passwd, - "file": misc.create_fake_certificate_file( - valid, passwd, issuer, country, subject - ), - } - - def path_edoc_company(company_id): db_name = company_id._cr.dbname filestore = config.filestore(db_name) diff --git a/l10n_br_fiscal/views/dfe/dfe_views.xml b/l10n_br_fiscal/views/dfe/dfe_views.xml index 827377644a4c..12534326cbc4 100644 --- a/l10n_br_fiscal/views/dfe/dfe_views.xml +++ b/l10n_br_fiscal/views/dfe/dfe_views.xml @@ -14,11 +14,7 @@ - + diff --git a/l10n_br_fiscal/views/l10n_br_fiscal_action.xml b/l10n_br_fiscal/views/l10n_br_fiscal_action.xml index a22f0c48bc08..fb45ee42d652 100644 --- a/l10n_br_fiscal/views/l10n_br_fiscal_action.xml +++ b/l10n_br_fiscal/views/l10n_br_fiscal_action.xml @@ -372,23 +372,6 @@ - - - Certificate - ir.actions.act_window - l10n_br_fiscal.certificate - tree,form - - -

- Add a new Certificate -

- All Certificate by - Brazilian Fiscal modulo for Odoo. -

-
-
- Fiscal Document Email diff --git a/l10n_br_fiscal/views/l10n_br_fiscal_menu.xml b/l10n_br_fiscal/views/l10n_br_fiscal_menu.xml index ea3403a25225..aaf90d6845f8 100644 --- a/l10n_br_fiscal/views/l10n_br_fiscal_menu.xml +++ b/l10n_br_fiscal/views/l10n_br_fiscal_menu.xml @@ -579,15 +579,6 @@ sequence="30" /> - - -
- - - - - - - - - - diff --git a/l10n_br_fiscal/views/res_config_settings_view.xml b/l10n_br_fiscal/views/res_config_settings_view.xml index 4870934f8d90..0d90207274eb 100644 --- a/l10n_br_fiscal/views/res_config_settings_view.xml +++ b/l10n_br_fiscal/views/res_config_settings_view.xml @@ -85,25 +85,6 @@ - -
-
-
-
-
-

Fiscal Documents

diff --git a/l10n_br_fiscal_certificate/__init__.py b/l10n_br_fiscal_certificate/__init__.py new file mode 100644 index 000000000000..c9d72e4aca03 --- /dev/null +++ b/l10n_br_fiscal_certificate/__init__.py @@ -0,0 +1,5 @@ +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from .hooks import post_init_hook + +from . import models diff --git a/l10n_br_fiscal_certificate/__manifest__.py b/l10n_br_fiscal_certificate/__manifest__.py new file mode 100644 index 000000000000..c0efd60494ee --- /dev/null +++ b/l10n_br_fiscal_certificate/__manifest__.py @@ -0,0 +1,31 @@ +# Copyright (C) 2023 Raphaël Valyi - Akretion +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +{ + "name": "A1 fiscal certificate management for Brazil", + "category": "Localisation", + "license": "AGPL-3", + "author": "Akretion, Odoo Community Association (OCA)", + "maintainers": ["renatonlima"], + "website": "https://github.com/OCA/l10n-brazil", + "development_status": "Production/Stable", + "version": "14.0.1.0.0", + "depends": [ + "l10n_br_fiscal", + ], + "data": [ + "security/ir.model.access.csv", + "views/certificate_view.xml", + "views/res_company_view.xml", + "views/res_config_settings_view.xml", + ], + "post_init_hook": "post_init_hook", + "installable": True, + "application": False, + "auto_install": False, + "external_dependencies": { + "python": [ + "erpbrasil.assinatura>=1.7.0", + ] + }, +} diff --git a/l10n_br_fiscal_certificate/constants.py b/l10n_br_fiscal_certificate/constants.py new file mode 100644 index 000000000000..870f8d8f562a --- /dev/null +++ b/l10n_br_fiscal_certificate/constants.py @@ -0,0 +1,17 @@ +# Copyright (C) 2021 Luis Felipe Mileo - KMEE +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +CERTIFICATE_TYPE_NFE = "nf-e" +CERTIFICATE_TYPE_ECPF = "e-cpf" +CERTIFICATE_TYPE_ECNPJ = "e-cnpj" + +CERTIFICATE_TYPE = [ + (CERTIFICATE_TYPE_ECPF, "E-CPF"), + (CERTIFICATE_TYPE_ECNPJ, "E-CNPJ"), + (CERTIFICATE_TYPE_NFE, "NF-e"), +] + +CERTIFICATE_TYPE_DEFAULT = CERTIFICATE_TYPE_NFE + +CERTIFICATE_SUBTYPE = [("a1", "A1"), ("a3", "A3")] +CERTIFICATE_SUBTYPE_DEFAULT = "a1" diff --git a/l10n_br_fiscal_certificate/hooks.py b/l10n_br_fiscal_certificate/hooks.py new file mode 100644 index 000000000000..3369a3a554f1 --- /dev/null +++ b/l10n_br_fiscal_certificate/hooks.py @@ -0,0 +1,46 @@ +# Copyright (C) 2021 - Luis Felipe Mileo - KMEE +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +import logging + +from erpbrasil.assinatura import misc + +from odoo import SUPERUSER_ID, api, tools + +from .constants import CERTIFICATE_TYPE_ECNPJ, CERTIFICATE_TYPE_NFE + + +def post_init_hook(cr, registry): + env = api.Environment(cr, SUPERUSER_ID, {}) + + def prepare_fake_certificate_vals( + valid=True, + passwd="123456", + issuer="EMISSOR A TESTE", + country="BR", + subject="CERTIFICADO VALIDO TESTE", + cert_type=CERTIFICATE_TYPE_NFE, + ): + return { + "type": cert_type, + "subtype": "a1", + "password": passwd, + "file": misc.create_fake_certificate_file( + valid, passwd, issuer, country, subject + ), + } + + if not tools.config["without_demo"]: + companies = [ + env.ref("base.main_company", raise_if_not_found=False), + env.ref("l10n_br_base.empresa_lucro_presumido", raise_if_not_found=False), + env.ref("l10n_br_base.empresa_simples_nacional", raise_if_not_found=False), + ] + for company in companies: + l10n_br_fiscal_certificate_id = env["l10n_br_fiscal.certificate"] + company.certificate_nfe_id = l10n_br_fiscal_certificate_id.create( + prepare_fake_certificate_vals() + ) + company.certificate_ecnpj_id = l10n_br_fiscal_certificate_id.create( + prepare_fake_certificate_vals(cert_type=CERTIFICATE_TYPE_ECNPJ) + ) diff --git a/l10n_br_fiscal_certificate/models/__init__.py b/l10n_br_fiscal_certificate/models/__init__.py new file mode 100644 index 000000000000..3896181abf7b --- /dev/null +++ b/l10n_br_fiscal_certificate/models/__init__.py @@ -0,0 +1,3 @@ +from . import certificate +from . import res_company +from . import res_config_settings diff --git a/l10n_br_fiscal/models/certificate.py b/l10n_br_fiscal_certificate/models/certificate.py similarity index 99% rename from l10n_br_fiscal/models/certificate.py rename to l10n_br_fiscal_certificate/models/certificate.py index e64fdd6cbec6..c93f92d4df3c 100644 --- a/l10n_br_fiscal/models/certificate.py +++ b/l10n_br_fiscal_certificate/models/certificate.py @@ -8,7 +8,7 @@ from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT from odoo.tools.misc import format_date -from ..constants.fiscal import ( +from ..constants import ( CERTIFICATE_SUBTYPE, CERTIFICATE_SUBTYPE_DEFAULT, CERTIFICATE_TYPE, diff --git a/l10n_br_fiscal_certificate/models/res_company.py b/l10n_br_fiscal_certificate/models/res_company.py new file mode 100644 index 000000000000..ef99ff63e796 --- /dev/null +++ b/l10n_br_fiscal_certificate/models/res_company.py @@ -0,0 +1,22 @@ +# Copyright (C) 2013 Renato Lima - Akretion +# Copyright (C) 2020 Luis Felipe Mileo - KMEE +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + certificate_ecnpj_id = fields.Many2one( + comodel_name="l10n_br_fiscal.certificate", + string="E-CNPJ", + domain="[('type', '=', 'e-cnpj')]", + ) + + certificate_nfe_id = fields.Many2one( + comodel_name="l10n_br_fiscal.certificate", + string="NFe", + domain="[('type', '=', 'nf-e')]", + ) diff --git a/l10n_br_fiscal_certificate/models/res_config_settings.py b/l10n_br_fiscal_certificate/models/res_config_settings.py new file mode 100644 index 000000000000..cbc37a994b48 --- /dev/null +++ b/l10n_br_fiscal_certificate/models/res_config_settings.py @@ -0,0 +1,16 @@ +# Copyright (C) 2015 Luis Felipe Miléo - KMEE +# Copyright (C) 2019 Renato Lima - Akretion +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + cert_expired_alert = fields.Integer( + string="Certificate Expired Alert", + config_parameter="l10n_br_fiscal_cert_expired_alert", + required=True, + default=30, + ) diff --git a/l10n_br_fiscal_certificate/readme/CONTRIBUTORS.rst b/l10n_br_fiscal_certificate/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..6de8551b7916 --- /dev/null +++ b/l10n_br_fiscal_certificate/readme/CONTRIBUTORS.rst @@ -0,0 +1,8 @@ +* `Akretion `_: + + * Renato Lima + * Raphaël Valyi + +* `KMEE `_: + + * Luis Felipe Mileo diff --git a/l10n_br_fiscal_certificate/readme/DESCRIPTION.rst b/l10n_br_fiscal_certificate/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..336547031b53 --- /dev/null +++ b/l10n_br_fiscal_certificate/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Permite gerenciar seus certificados A1 para a assinar e transmitir seus documentos eletrônicos. diff --git a/l10n_br_fiscal_certificate/readme/HISTORY.rst b/l10n_br_fiscal_certificate/readme/HISTORY.rst new file mode 100644 index 000000000000..0346ebfdb641 --- /dev/null +++ b/l10n_br_fiscal_certificate/readme/HISTORY.rst @@ -0,0 +1,6 @@ +14.0.1.0.0 (2023) +~~~~~~~~~~~~~~~~~ + +Primeira versão do módulo: o código vinha sendo desenvolvido desde a versão 8 mas +estava integrado dentro módulo l10n_br_fiscal. O código foi extraído para deixar +o módulo l10n_br_fiscal mais leve. diff --git a/l10n_br_fiscal_certificate/readme/USAGE.rst b/l10n_br_fiscal_certificate/readme/USAGE.rst new file mode 100644 index 000000000000..360205793906 --- /dev/null +++ b/l10n_br_fiscal_certificate/readme/USAGE.rst @@ -0,0 +1,2 @@ +Abra o menu Configurações>Empresas. Dentro da aba fiscal tem uma nova página "certificados" +onde você pode fazer o upload dos certificados A1. diff --git a/l10n_br_fiscal_certificate/security/ir.model.access.csv b/l10n_br_fiscal_certificate/security/ir.model.access.csv new file mode 100644 index 000000000000..68ea2681d6dc --- /dev/null +++ b/l10n_br_fiscal_certificate/security/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"l10n_br_fiscal_certificate_user","Fiscal Certificate for User","model_l10n_br_fiscal_certificate","l10n_br_fiscal.group_user",1,0,0,0 +"l10n_br_fiscal_certificate_manager","Fiscal Certificate for Manager","model_l10n_br_fiscal_certificate","l10n_br_fiscal.group_manager",1,1,1,1 diff --git a/l10n_br_fiscal_certificate/static/description/icon.png b/l10n_br_fiscal_certificate/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/l10n_br_fiscal/tests/test_certificate.py b/l10n_br_fiscal_certificate/tests/test_certificate.py similarity index 100% rename from l10n_br_fiscal/tests/test_certificate.py rename to l10n_br_fiscal_certificate/tests/test_certificate.py diff --git a/l10n_br_fiscal/views/certificate_view.xml b/l10n_br_fiscal_certificate/views/certificate_view.xml similarity index 80% rename from l10n_br_fiscal/views/certificate_view.xml rename to l10n_br_fiscal_certificate/views/certificate_view.xml index 53e9fd7e310c..21f90801aa2a 100644 --- a/l10n_br_fiscal/views/certificate_view.xml +++ b/l10n_br_fiscal_certificate/views/certificate_view.xml @@ -86,4 +86,28 @@ + + Certificate + ir.actions.act_window + l10n_br_fiscal.certificate + tree,form + + +

+ Add a new Certificate +

+ All Certificate by + Brazilian Fiscal modulo for Odoo. +

+
+
+ + + diff --git a/l10n_br_fiscal_certificate/views/res_company_view.xml b/l10n_br_fiscal_certificate/views/res_company_view.xml new file mode 100644 index 000000000000..1e304fcd30b0 --- /dev/null +++ b/l10n_br_fiscal_certificate/views/res_company_view.xml @@ -0,0 +1,24 @@ + + + + + l10n_br_fiscal_certificate.res.company.form + res.company + + + + + + + + + + + + + + + + + + diff --git a/l10n_br_fiscal_certificate/views/res_config_settings_view.xml b/l10n_br_fiscal_certificate/views/res_config_settings_view.xml new file mode 100644 index 000000000000..6910bc08ba56 --- /dev/null +++ b/l10n_br_fiscal_certificate/views/res_config_settings_view.xml @@ -0,0 +1,35 @@ + + + + + l10n_br_fiscal.res.config.settings.view.form + res.config.settings + + + + + +
+
+
+
+
+
+ +
+
+
+ +
diff --git a/requirements.txt b/requirements.txt index 9bd791a09b91..c88928bd3ca6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ # generated from manifests external_dependencies email-validator -erpbrasil.assinatura +erpbrasil.assinatura>=1.7.0 erpbrasil.base>=2.3.0 erpbrasil.edoc erpbrasil.edoc.pdf From e2ebe0c40022bcdd3db011d9222cd784c5639bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Valyi?= Date: Sun, 2 Jul 2023 20:29:56 -0300 Subject: [PATCH 2/9] pre-commit/oca-gen-addon-readme files --- l10n_br_fiscal_certificate/README.rst | 107 +++++ .../static/description/index.html | 450 ++++++++++++++++++ .../odoo/addons/l10n_br_fiscal_certificate | 1 + setup/l10n_br_fiscal_certificate/setup.py | 6 + 4 files changed, 564 insertions(+) create mode 100644 l10n_br_fiscal_certificate/README.rst create mode 100644 l10n_br_fiscal_certificate/static/description/index.html create mode 120000 setup/l10n_br_fiscal_certificate/odoo/addons/l10n_br_fiscal_certificate create mode 100644 setup/l10n_br_fiscal_certificate/setup.py diff --git a/l10n_br_fiscal_certificate/README.rst b/l10n_br_fiscal_certificate/README.rst new file mode 100644 index 000000000000..32b203a96924 --- /dev/null +++ b/l10n_br_fiscal_certificate/README.rst @@ -0,0 +1,107 @@ +=========================================== +A1 fiscal certificate management for Brazil +=========================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:d5a0459e7e288accb9bb38c1bc7a82ddbaf8202afdff5940c3c114422597f4e5 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png + :target: https://odoo-community.org/page/development-status + :alt: Production/Stable +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n_br_fiscal-lightgray.png?logo=github + :target: https://github.com/OCA/l10n_br_fiscal/tree/14.0/l10n_br_fiscal_certificate + :alt: OCA/l10n_br_fiscal +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/l10n_br_fiscal-14-0/l10n_br_fiscal-14-0-l10n_br_fiscal_certificate + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/l10n_br_fiscal&target_branch=14.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Permite gerenciar seus certificados A1 para a assinar e transmitir seus documentos eletrônicos. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Abra o menu Configurações>Empresas. Dentro da aba fiscal tem uma nova página "certificados" +onde você pode fazer o upload dos certificados A1. + +Changelog +========= + +14.0.1.0.0 (2023) +~~~~~~~~~~~~~~~~~ + +Primeira versão do módulo: o código vinha sendo desenvolvido desde a versão 8 mas +estava integrado dentro módulo l10n_br_fiscal. O código foi extraído para deixar +o módulo l10n_br_fiscal mais leve. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Akretion + +Contributors +~~~~~~~~~~~~ + +* `Akretion `_: + + * Renato Lima + * Raphaël Valyi + +* `KMEE `_: + + * Luis Felipe Mileo + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-renatonlima| image:: https://github.com/renatonlima.png?size=40px + :target: https://github.com/renatonlima + :alt: renatonlima + +Current `maintainer `__: + +|maintainer-renatonlima| + +This module is part of the `OCA/l10n_br_fiscal `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/l10n_br_fiscal_certificate/static/description/index.html b/l10n_br_fiscal_certificate/static/description/index.html new file mode 100644 index 000000000000..b6ea859952de --- /dev/null +++ b/l10n_br_fiscal_certificate/static/description/index.html @@ -0,0 +1,450 @@ + + + + + + +A1 fiscal certificate management for Brazil + + + +
+

A1 fiscal certificate management for Brazil

+ + +

Production/Stable License: AGPL-3 OCA/l10n_br_fiscal Translate me on Weblate Try me on Runboat

+

Permite gerenciar seus certificados A1 para a assinar e transmitir seus documentos eletrônicos.

+

Table of contents

+ +
+

Usage

+

Abra o menu Configurações>Empresas. Dentro da aba fiscal tem uma nova página “certificados” +onde você pode fazer o upload dos certificados A1.

+
+
+

Changelog

+
+

14.0.1.0.0 (2023)

+

Primeira versão do módulo: o código vinha sendo desenvolvido desde a versão 8 mas +estava integrado dentro módulo l10n_br_fiscal. O código foi extraído para deixar +o módulo l10n_br_fiscal mais leve.

+
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Akretion
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

renatonlima

+

This module is part of the OCA/l10n_br_fiscal project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/setup/l10n_br_fiscal_certificate/odoo/addons/l10n_br_fiscal_certificate b/setup/l10n_br_fiscal_certificate/odoo/addons/l10n_br_fiscal_certificate new file mode 120000 index 000000000000..2e0af694decb --- /dev/null +++ b/setup/l10n_br_fiscal_certificate/odoo/addons/l10n_br_fiscal_certificate @@ -0,0 +1 @@ +../../../../l10n_br_fiscal_certificate \ No newline at end of file diff --git a/setup/l10n_br_fiscal_certificate/setup.py b/setup/l10n_br_fiscal_certificate/setup.py new file mode 100644 index 000000000000..28c57bb64031 --- /dev/null +++ b/setup/l10n_br_fiscal_certificate/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 00c25e53cac599cb7bc8d2bb86803e83270041fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Valyi?= Date: Sun, 2 Jul 2023 20:30:43 -0300 Subject: [PATCH 3/9] [REF] migration script --- l10n_br_fiscal/__manifest__.py | 2 +- .../migrations/14.0.15.0.0/pre-migration.py | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 l10n_br_fiscal/migrations/14.0.15.0.0/pre-migration.py diff --git a/l10n_br_fiscal/__manifest__.py b/l10n_br_fiscal/__manifest__.py index da47d98b675b..4ba8021c43ac 100644 --- a/l10n_br_fiscal/__manifest__.py +++ b/l10n_br_fiscal/__manifest__.py @@ -10,7 +10,7 @@ "maintainers": ["renatonlima"], "website": "https://github.com/OCA/l10n-brazil", "development_status": "Production/Stable", - "version": "14.0.14.2.1", + "version": "14.0.15.0.0", "depends": [ "product", "l10n_br_base", diff --git a/l10n_br_fiscal/migrations/14.0.15.0.0/pre-migration.py b/l10n_br_fiscal/migrations/14.0.15.0.0/pre-migration.py new file mode 100644 index 000000000000..0c9230f8e00b --- /dev/null +++ b/l10n_br_fiscal/migrations/14.0.15.0.0/pre-migration.py @@ -0,0 +1,22 @@ +# Copyright 2023 - TODAY Akretion - Raphael Valyi +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openupgradelib import openupgrade + +to_install = "'l10n_br_fiscal_certificate'" + + +def install_new_modules(cr): + sql = """ + UPDATE ir_module_module + SET state='to install' + WHERE name = {} AND state='uninstalled' + """.format( + to_install, + ) + openupgrade.logged_query(cr, sql) + + +@openupgrade.migrate() +def migrate(env, version): + install_new_modules(env.cr) From ab62802419f8f775645ef4e44a4c6c570385fd95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Valyi?= Date: Sun, 2 Jul 2023 21:45:18 -0300 Subject: [PATCH 4/9] [REF] adjust l10n_br_nfe dep --- l10n_br_nfe/__manifest__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/l10n_br_nfe/__manifest__.py b/l10n_br_nfe/__manifest__.py index e1657a1964bf..3166f2858bc4 100644 --- a/l10n_br_nfe/__manifest__.py +++ b/l10n_br_nfe/__manifest__.py @@ -10,9 +10,10 @@ "maintainers": ["rvalyi", "renatonlima"], "website": "https://github.com/OCA/l10n-brazil", "development_status": "Beta", - "version": "14.0.9.0.1", + "version": "14.0.9.1.0", "depends": [ "l10n_br_fiscal", + "l10n_br_fiscal_certificate", "l10n_br_nfe_spec", "spec_driven_model", ], @@ -37,6 +38,7 @@ "external_dependencies": { "python": [ "nfelib>=2.0.0", + "erpbrasil.assinatura>=1.7.0", "erpbrasil.transmissao", "erpbrasil.edoc", "erpbrasil.edoc.pdf", From 0df9813384801366c41d0b6b271c602dd9231020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Valyi?= Date: Sun, 2 Jul 2023 21:45:33 -0300 Subject: [PATCH 5/9] [REF] adjust l10n_br_nfse dep --- l10n_br_fiscal_certificate/hooks.py | 40 +++++++++++++++++++++-------- l10n_br_nfse/__manifest__.py | 5 ++-- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/l10n_br_fiscal_certificate/hooks.py b/l10n_br_fiscal_certificate/hooks.py index 3369a3a554f1..3445f19cec5d 100644 --- a/l10n_br_fiscal_certificate/hooks.py +++ b/l10n_br_fiscal_certificate/hooks.py @@ -3,12 +3,23 @@ import logging -from erpbrasil.assinatura import misc - -from odoo import SUPERUSER_ID, api, tools +from odoo import SUPERUSER_ID, _, api, tools from .constants import CERTIFICATE_TYPE_ECNPJ, CERTIFICATE_TYPE_NFE +_logger = logging.getLogger(__name__) + +try: + from erpbrasil.assinatura import misc +except ImportError: + _logger.error( + _( + "Python Library erpbrasil.assinatura not installed!" + "It doesn't matter much until you want to send NFe or NFSe documents." + "You can install it later with: pip install erpbrasil.assinatura." + ) + ) + def post_init_hook(cr, registry): env = api.Environment(cr, SUPERUSER_ID, {}) @@ -36,11 +47,20 @@ def prepare_fake_certificate_vals( env.ref("l10n_br_base.empresa_lucro_presumido", raise_if_not_found=False), env.ref("l10n_br_base.empresa_simples_nacional", raise_if_not_found=False), ] - for company in companies: - l10n_br_fiscal_certificate_id = env["l10n_br_fiscal.certificate"] - company.certificate_nfe_id = l10n_br_fiscal_certificate_id.create( - prepare_fake_certificate_vals() - ) - company.certificate_ecnpj_id = l10n_br_fiscal_certificate_id.create( - prepare_fake_certificate_vals(cert_type=CERTIFICATE_TYPE_ECNPJ) + try: + for company in companies: + l10n_br_fiscal_certificate_id = env["l10n_br_fiscal.certificate"] + company.certificate_nfe_id = l10n_br_fiscal_certificate_id.create( + prepare_fake_certificate_vals() + ) + company.certificate_ecnpj_id = l10n_br_fiscal_certificate_id.create( + prepare_fake_certificate_vals(cert_type=CERTIFICATE_TYPE_ECNPJ) + ) + except NameError: # (means from erpbrasil.assinatura import misc failed) + _logger.error( + _( + "Python Library erpbrasil.assinatura not installed!" + "You can install it later with: pip install erpbrasil.assinatura." + "Demo companies fake A1 certificates were not created." + ) ) diff --git a/l10n_br_nfse/__manifest__.py b/l10n_br_nfse/__manifest__.py index 09a00aa001ad..ddfbd501762b 100644 --- a/l10n_br_nfse/__manifest__.py +++ b/l10n_br_nfse/__manifest__.py @@ -5,7 +5,7 @@ "name": "NFS-e", "summary": """ NFS-e""", - "version": "14.0.1.14.0", + "version": "14.0.1.15.0", "license": "AGPL-3", "author": "KMEE, Odoo Community Association (OCA)", "maintainers": ["gabrielcardoso21", "mileo", "luismalta", "marcelsavegnago"], @@ -13,13 +13,14 @@ "external_dependencies": { "python": [ "erpbrasil.edoc", - "erpbrasil.assinatura", + "erpbrasil.assinatura>=1.7.0", "erpbrasil.transmissao", "erpbrasil.base>=2.3.0", ], }, "depends": [ "l10n_br_fiscal", + "l10n_br_fiscal_certificate", ], "data": [ "security/ir.model.access.csv", From d3863274bc6d86c8f9c8e324a2d66bd0d33722c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Valyi?= Date: Sun, 2 Jul 2023 21:57:59 -0300 Subject: [PATCH 6/9] [REF] erpbrasil.assinatura fallback --- l10n_br_fiscal_certificate/models/certificate.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/l10n_br_fiscal_certificate/models/certificate.py b/l10n_br_fiscal_certificate/models/certificate.py index c93f92d4df3c..637d6e2e5041 100644 --- a/l10n_br_fiscal_certificate/models/certificate.py +++ b/l10n_br_fiscal_certificate/models/certificate.py @@ -22,8 +22,9 @@ except ImportError: _logger.error( _( - "Python Library erpbrasil.assinatura not installed, " - "please install ex: pip install erpbrasil.assinatura." + "Python Library erpbrasil.assinatura not installed!" + "It doesn't matter much until you want to send NFe or NFSe documents." + "You can install it later with: pip install erpbrasil.assinatura." ) ) From e0ef2f90701d14a0d84f5f497fbc77ba1405a365 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Valyi?= Date: Sun, 2 Jul 2023 22:05:56 -0300 Subject: [PATCH 7/9] [REF] adjust erpbrasil.assinatura>=1.7.0 --- l10n_br_nfse_paulistana/__manifest__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/l10n_br_nfse_paulistana/__manifest__.py b/l10n_br_nfse_paulistana/__manifest__.py index 4e6c3d8d1e42..123fbe14bb0a 100644 --- a/l10n_br_nfse_paulistana/__manifest__.py +++ b/l10n_br_nfse_paulistana/__manifest__.py @@ -5,7 +5,7 @@ "name": "NFS-e (Nota Paulistana)", "summary": """ NFS-e (Nota Paulistana)""", - "version": "14.0.1.0.1", + "version": "14.0.1.0.2", "license": "AGPL-3", "author": "KMEE, Odoo Community Association (OCA)", "maintainers": ["gabrielcardoso21", "mileo", "luismalta"], @@ -14,7 +14,7 @@ "external_dependencies": { "python": [ "erpbrasil.edoc", - "erpbrasil.assinatura", + "erpbrasil.assinatura>=1.7.0", "erpbrasil.transmissao", "erpbrasil.base>=2.3.0", "nfselib.paulistana", From 8d8f51799b1823a60b859b6b5427d99fbe86df8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Valyi?= Date: Mon, 3 Jul 2023 22:35:26 -0300 Subject: [PATCH 8/9] [REF] account user doesn't need to read certs They can be fiscal users if they need to. --- l10n_br_account/security/ir.model.access.csv | 1 - 1 file changed, 1 deletion(-) diff --git a/l10n_br_account/security/ir.model.access.csv b/l10n_br_account/security/ir.model.access.csv index e0f835d8d22a..e577ec7f86d7 100644 --- a/l10n_br_account/security/ir.model.access.csv +++ b/l10n_br_account/security/ir.model.access.csv @@ -1,5 +1,4 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"l10n_br_account_certificate_user","Fiscal Certificate for Account User","l10n_br_fiscal.model_l10n_br_fiscal_certificate","account.group_account_invoice",1,0,0,0 "l10n_br_account_document_serie_user","Fiscal Document Serie for Account User","l10n_br_fiscal.model_l10n_br_fiscal_document_serie","account.group_account_invoice",1,0,0,0 "l10n_br_account_document_type_user","Fiscal Document Type for Account User","l10n_br_fiscal.model_l10n_br_fiscal_document_type","account.group_account_invoice",1,0,0,0 "l10n_br_account_document_user","Fiscal Document for Account User","l10n_br_fiscal.model_l10n_br_fiscal_document","account.group_account_invoice",1,1,0,0 From f89d93ebcf35b98a3878adbcca6461e61c004900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Valyi?= Date: Mon, 3 Jul 2023 23:12:05 -0300 Subject: [PATCH 9/9] [REF] read A1 through sudo() --- l10n_br_nfe/models/document.py | 6 +++--- l10n_br_nfe/models/invalidate_number.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/l10n_br_nfe/models/document.py b/l10n_br_nfe/models/document.py index 1d126d69add8..5c0e6e81a5a8 100644 --- a/l10n_br_nfe/models/document.py +++ b/l10n_br_nfe/models/document.py @@ -727,12 +727,12 @@ def _serialize(self, edocs): return edocs def _processador(self): - if not self.company_id.certificate_nfe_id: + if not self.company_id.sudo().certificate_nfe_id: raise UserError(_("Certificado não encontrado")) certificado = cert.Certificado( - arquivo=self.company_id.certificate_nfe_id.file, - senha=self.company_id.certificate_nfe_id.password, + arquivo=self.company_id.sudo().certificate_nfe_id.file, + senha=self.company_id.sudo().certificate_nfe_id.password, ) session = Session() session.verify = False diff --git a/l10n_br_nfe/models/invalidate_number.py b/l10n_br_nfe/models/invalidate_number.py index 02114de5fbf8..0ac047dffad4 100644 --- a/l10n_br_nfe/models/invalidate_number.py +++ b/l10n_br_nfe/models/invalidate_number.py @@ -26,12 +26,12 @@ class InvalidateNumber(models.Model): _inherit = "l10n_br_fiscal.invalidate.number" def _processador(self): - if not self.company_id.certificate_nfe_id: + if not self.company_id.sudo().certificate_nfe_id: raise UserError(_("Certificado não encontrado")) certificado = cert.Certificado( - arquivo=self.company_id.certificate_nfe_id.file, - senha=self.company_id.certificate_nfe_id.password, + arquivo=self.company_id.sudo().certificate_nfe_id.file, + senha=self.company_id.sudo().certificate_nfe_id.password, ) session = Session() session.verify = False