From 892071389199a361f7d1fb2500e9d19716b21e35 Mon Sep 17 00:00:00 2001 From: Felipe Zago Date: Thu, 5 Oct 2023 11:25:18 -0300 Subject: [PATCH] [ADD] l10n_br_mdfe: MDFe document tests --- l10n_br_mdfe/models/document.py | 50 ++++------- ...05472475000102580200000602011208018449.xml | 4 - ...05472475000102580200000602071611554500.xml | 4 - ...05472475000102580200000602081550195716.xml | 4 - ...05472475000102580200000602161434590525.xml | 4 - l10n_br_mdfe/tests/test_mdfe_document.py | 86 +++++++++++++++++++ 6 files changed, 104 insertions(+), 48 deletions(-) create mode 100644 l10n_br_mdfe/tests/test_mdfe_document.py diff --git a/l10n_br_mdfe/models/document.py b/l10n_br_mdfe/models/document.py index 8b2e0bf598a7..128a74cdedeb 100644 --- a/l10n_br_mdfe/models/document.py +++ b/l10n_br_mdfe/models/document.py @@ -300,33 +300,39 @@ def _compute_inf_carrega(self): ] def _inverse_inf_carrega(self): - for record in self.filtered(filtered_processador_edoc_mdfe): - city_id = self.env["res.city"].search( + for record in self: + city_ids = self.env["res.city"].search( [("ibge_code", "=", record.mdfe30_infMunCarrega.mdfe30_cMunCarrega)] ) - record.mdfe_loading_city_ids = [(4, 0, city_id)] + if city_ids: + record.mdfe_loading_city_ids = [(6, 0, city_ids.ids)] def _inverse_initial_final_state(self): - for record in self.filtered(filtered_processador_edoc_mdfe): + for record in self: initial_state_id = self.env["res.country.state"].search( - [("code", "=", record.mdfe30_UFIni)] + [("code", "=", record.mdfe30_UFIni)], limit=1 ) final_state_id = self.env["res.country.state"].search( - [("code", "=", record.mdfe30_UFFim)] + [("code", "=", record.mdfe30_UFFim)], limit=1 ) - record.mdfe_initial_state_id = initial_state_id - record.mdfe_final_state_id = final_state_id + + if initial_state_id: + record.mdfe_initial_state_id = initial_state_id + + if final_state_id: + record.mdfe_final_state_id = final_state_id def _inverse_uf(self): - for record in self.filtered(filtered_processador_edoc_mdfe): + for record in self: state_id = self.env["res.country.state"].search( - [("code", "=", record.mdfe30_cUF)] + [("code", "=", record.mdfe30_cUF)], limit=1 ) - record.company_id.partner_id.state_id = state_id + if state_id: + record.company_id.partner_id.state_id = state_id @api.depends("mdfe_route_state_ids") def _compute_inf_percurso(self): - for record in self.filtered(filtered_processador_edoc_mdfe): + for record in self: record.mdfe30_infPercurso = [(5, 0, 0)] record.mdfe30_infPercurso = [ ( @@ -909,23 +915,3 @@ def _valida_xml(self, xml_file): erros = Mdfe.schema_validation(xml_file) erros = "\n".join(erros) self.write({"xml_error_message": erros or False}) - - def _document_qrcode(self): - super()._document_qrcode() - - for record in self.filtered(filtered_processador_edoc_mdfe): - record.mdfe30_infMDFeSupl = self.env[ - "l10n_br_fiscal.document.supplement" - ].create({"qrcode": record.get_mdfe_qrcode()}) - - def get_mdfe_qrcode(self): - if self.document_type != MODELO_FISCAL_MDFE: - return - - processador = self._processador() - if self.mdfe_transmission == "1": - return processador.monta_qrcode(self.document_key) - - serialized_doc = self.serialize()[0] - xml = processador.assina_raiz(serialized_doc, serialized_doc.infMDFe.Id) - return processador.monta_qrcode_contingencia(serialized_doc, xml) diff --git a/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602011208018449.xml b/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602011208018449.xml index b99281766b94..0d50a14f994a 100644 --- a/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602011208018449.xml +++ b/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602011208018449.xml @@ -90,8 +90,4 @@ Documento emitido por: Marc Demo - - https://dfe-portal.svrs.rs.gov.br/mdfe/qrCode?chMDFe=35230905472475000102580200000602011208018449&tpAmb=2 - diff --git a/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602071611554500.xml b/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602071611554500.xml index 40b8b8792ff0..37ab932ce89b 100644 --- a/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602071611554500.xml +++ b/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602071611554500.xml @@ -124,8 +124,4 @@ Documento emitido por: Marc Demo - - https://dfe-portal.svrs.rs.gov.br/mdfe/qrCode?chMDFe=35230905472475000102580200000602071611554500&tpAmb=2 - diff --git a/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602081550195716.xml b/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602081550195716.xml index f83aece78ffc..2f8deff23023 100644 --- a/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602081550195716.xml +++ b/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35230905472475000102580200000602081550195716.xml @@ -70,8 +70,4 @@ Documento emitido por: Marc Demo - - https://dfe-portal.svrs.rs.gov.br/mdfe/qrCode?chMDFe=35230905472475000102580200000602081550195716&tpAmb=2 - diff --git a/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35231005472475000102580200000602161434590525.xml b/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35231005472475000102580200000602161434590525.xml index 7329c3f0f615..153e0b91e266 100644 --- a/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35231005472475000102580200000602161434590525.xml +++ b/l10n_br_mdfe/tests/mdfe/v3_00/leiauteMDFe/MDFe35231005472475000102580200000602161434590525.xml @@ -87,8 +87,4 @@ Documento emitido por: Marc Demo - - https://dfe-portal.svrs.rs.gov.br/mdfe/qrCode?chMDFe=35231005472475000102580200000602161434590525&tpAmb=2 - diff --git a/l10n_br_mdfe/tests/test_mdfe_document.py b/l10n_br_mdfe/tests/test_mdfe_document.py new file mode 100644 index 000000000000..417bb73052f7 --- /dev/null +++ b/l10n_br_mdfe/tests/test_mdfe_document.py @@ -0,0 +1,86 @@ +# @ 2020 KMEE INFORMATICA LTDA - www.kmee.com.br - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from datetime import datetime + +from nfelib.nfe.ws.edoc_legacy import MDFeAdapter + +from odoo.exceptions import UserError +from odoo.tests import SavepointCase + + +class MDFeDocumentTest(SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + FiscalDocument = cls.env["l10n_br_fiscal.document"] + + cls.acre_state = cls.env.ref("base.state_br_ac") + cls.mdfe_document_type_id = cls.env.ref("l10n_br_fiscal.document_58") + cls.sn_company_id = cls.env.ref("l10n_br_base.empresa_simples_nacional") + cls.sn_company_id.processador_edoc = "erpbrasil.edoc" + cls.mdfe_id = FiscalDocument.create( + { + "document_type_id": cls.mdfe_document_type_id.id, + "company_id": cls.sn_company_id.id, + "document_number": "70000", + "document_serie": "30", + "document_data": datetime.now(), + } + ) + + def test_mdfe_compute_fields(self): + self.mdfe_id.fiscal_additional_data = "TEST FISCAL ADDITIONAL DATA" + self.mdfe_id.customer_additional_data = "TEST CUSTOMER ADDITIONAL DATA" + + self.assertTrue(self.mdfe_id.mdfe30_infAdFisco) + self.assertTrue(self.mdfe_id.mdfe30_infCpl) + + def test_mdfe_inverse_fields(self): + self.mdfe_id.mdfe30_UFIni = self.acre_state.code + self.mdfe_id.mdfe30_UFFim = self.acre_state.code + self.assertEqual(self.mdfe_id.mdfe_initial_state_id, self.acre_state) + self.assertEqual(self.mdfe_id.mdfe_final_state_id, self.acre_state) + + self.mdfe_id.mdfe30_UF = self.acre_state.ibge_code + self.assertEqual(self.mdfe_id.company_id.partner_id.state_id, self.acre_state) + + self.mdfe_id.mdfe30_infMunCarrega = [ + ( + 0, + 0, + { + "mdfe30_cMunCarrega": "1200013", + "mdfe30_xMunCarrega": "Acrelândia", + }, + ) + ] + self.assertIn( + self.env.ref("l10n_br_base.city_1200013"), + self.mdfe_id.mdfe_loading_city_ids, + ) + + def test_mdfe_processor(self): + processor = self.mdfe_id._processador() + self.assertTrue(isinstance(processor, MDFeAdapter)) + + self.mdfe_id.document_type_id = False + processor = self.mdfe_id._processador() + self.assertFalse(isinstance(processor, MDFeAdapter)) + + self.mdfe_id.document_type_id = self.mdfe_document_type_id + + self.mdfe_id.company_id.certificate_nfe_id = False + processor = self.mdfe_id._processador() + self.assertTrue(isinstance(processor, MDFeAdapter)) + + self.mdfe_id.company_id.certificate_ecnpj_id = False + with self.assertRaises(UserError): + processor = self.mdfe_id._processador() + + def test_generate_key(self): + self.mdfe_id._generate_key() + self.assertTrue(self.mdfe_id.document_key) + self.assertTrue(self.mdfe_id.key_random_code) + self.assertTrue(self.mdfe_id.key_check_digit)