From 8643214e9cd35b36ed71f779c0ddebcf3a8289e9 Mon Sep 17 00:00:00 2001 From: CristianoMafraJunior Date: Wed, 15 Jan 2025 20:30:11 +0000 Subject: [PATCH 01/15] [FIX] l10n_br_fiscal: change ibpt service timeout value --- l10n_br_fiscal/data/ir_cron.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/l10n_br_fiscal/data/ir_cron.xml b/l10n_br_fiscal/data/ir_cron.xml index 2f2d60355998..d662766e5f7a 100644 --- a/l10n_br_fiscal/data/ir_cron.xml +++ b/l10n_br_fiscal/data/ir_cron.xml @@ -14,6 +14,10 @@ -1 model._scheduled_update() + Date: Wed, 25 Sep 2024 15:14:59 -0300 Subject: [PATCH 02/15] [IMP] l10n_br_fiscal: mdfe serie, demo and others --- l10n_br_fiscal/constants/fiscal.py | 2 ++ .../data/l10n_br_fiscal.document.type.csv | 1 + l10n_br_fiscal/demo/company_demo.xml | 16 ++++++++++++++++ l10n_br_fiscal/models/document_mixin_fields.py | 4 ++++ l10n_br_fiscal/models/document_related.py | 11 +++++++++++ l10n_br_fiscal/views/document_related_view.xml | 10 ++++++++++ l10n_br_fiscal/views/document_view.xml | 1 + 7 files changed, 45 insertions(+) diff --git a/l10n_br_fiscal/constants/fiscal.py b/l10n_br_fiscal/constants/fiscal.py index fcd0cd468d59..18ebbd788c73 100644 --- a/l10n_br_fiscal/constants/fiscal.py +++ b/l10n_br_fiscal/constants/fiscal.py @@ -333,10 +333,12 @@ MODELO_FISCAL_CFE = "59" MODELO_FISCAL_CUPOM_FISCAL_ECF = "2D" MODELO_FISCAL_CTE = "57" +MODELO_FISCAL_MDFE = "58" MODELO_FISCAL_RL = "04" # Produto Rural MODELO_FISCAL_01 = "01" MODELO_FISCAL_04 = "04" + MODELO_FISCAL_EMISSAO_PRODUTO = [ MODELO_FISCAL_NFE, MODELO_FISCAL_NFCE, diff --git a/l10n_br_fiscal/data/l10n_br_fiscal.document.type.csv b/l10n_br_fiscal/data/l10n_br_fiscal.document.type.csv index 97630d38ce40..5f4971714d12 100644 --- a/l10n_br_fiscal/data/l10n_br_fiscal.document.type.csv +++ b/l10n_br_fiscal/data/l10n_br_fiscal.document.type.csv @@ -31,6 +31,7 @@ "document_30","30","Bilhete/Recibo do Passageiro","False",,,"icms" "document_55","55","Nota Fiscal Eletrônica","True","NFe","nf-e","icms" "document_57","57","Conhecimento de Transporte Eletrônico – CT-e","True","CTe","ct-e","icms" +"document_58","58","Manifesto Eletrônico de Documentos Fiscais","True","MDFe","mdf-e","icms" "document_59","59","Cupom Fiscal Eletrônico - CF-e","True","CFe","cf-e","icms" "document_60","60","Cupom Fiscal Eletrônico CF-e-ECF","True",,,"icms" "document_65","65","Nota Fiscal Eletrônica ao Consumidor Final – NFC-e","True","NFe","nfc-e","icms" diff --git a/l10n_br_fiscal/demo/company_demo.xml b/l10n_br_fiscal/demo/company_demo.xml index 407e1cdc7053..224d742422c1 100644 --- a/l10n_br_fiscal/demo/company_demo.xml +++ b/l10n_br_fiscal/demo/company_demo.xml @@ -162,6 +162,14 @@ True + + 1 + Série 1 + + + True + + 1 Série 1 @@ -194,6 +202,14 @@ True + + 1 + Série 1 + + + True + + + + + + diff --git a/l10n_br_fiscal/views/document_view.xml b/l10n_br_fiscal/views/document_view.xml index c243228b79bb..d0e97a41bac4 100644 --- a/l10n_br_fiscal/views/document_view.xml +++ b/l10n_br_fiscal/views/document_view.xml @@ -402,6 +402,7 @@ + From af8f5d49dfc7860a3fc73296fd3c7426c3892454 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Mon, 7 Oct 2024 18:43:01 -0300 Subject: [PATCH 03/15] [IMP] l10n_br_fiscal: add manifesto fiscal operation and operation line --- l10n_br_fiscal/data/operation_data.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/l10n_br_fiscal/data/operation_data.xml b/l10n_br_fiscal/data/operation_data.xml index a9927efa46bb..9834da0c743c 100644 --- a/l10n_br_fiscal/data/operation_data.xml +++ b/l10n_br_fiscal/data/operation_data.xml @@ -460,6 +460,24 @@ approved + + Manifesto + Manifesto + out + other + sale_price + approved + + + + + Manifesto + 1 + False + + approved + + From e1b2a32dae6e913c57fe0111b0b17654f7ceb4a0 Mon Sep 17 00:00:00 2001 From: kaynnan Date: Sun, 27 Oct 2024 18:57:35 -0300 Subject: [PATCH 04/15] [IMP] l10n_br_fiscal: Tax Definition add Service Type --- .../models/document_line_mixin_methods.py | 1 + l10n_br_fiscal/models/operation_line.py | 5 ++++ l10n_br_fiscal/models/tax_definition.py | 12 +++++++++ l10n_br_fiscal/views/tax_definition_view.xml | 26 ++++++++++--------- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/l10n_br_fiscal/models/document_line_mixin_methods.py b/l10n_br_fiscal/models/document_line_mixin_methods.py index 996af7b058ee..722c97a27063 100644 --- a/l10n_br_fiscal/models/document_line_mixin_methods.py +++ b/l10n_br_fiscal/models/document_line_mixin_methods.py @@ -379,6 +379,7 @@ def _onchange_fiscal_operation_line_id(self): nbs=self.nbs_id, cest=self.cest_id, city_taxation_code=self.city_taxation_code_id, + service_type=self.service_type_id, ind_final=self.ind_final, ) diff --git a/l10n_br_fiscal/models/operation_line.py b/l10n_br_fiscal/models/operation_line.py index a94c8a459208..e2cde39e3b8b 100644 --- a/l10n_br_fiscal/models/operation_line.py +++ b/l10n_br_fiscal/models/operation_line.py @@ -202,6 +202,7 @@ def map_fiscal_taxes( nbs=None, cest=None, city_taxation_code=None, + service_type=None, ind_final=None, ): mapping_result = { @@ -226,6 +227,7 @@ def map_fiscal_taxes( nbs=nbs, cest=cest, city_taxation_code=city_taxation_code, + service_type=service_type, ): self._build_mapping_result(mapping_result, tax_definition) @@ -270,6 +272,7 @@ def map_fiscal_taxes( nbs=nbs, cest=cest, city_taxation_code=city_taxation_code, + service_type=service_type, ): self._build_mapping_result(mapping_result, tax_definition) @@ -285,6 +288,7 @@ def map_fiscal_taxes( nbs=nbs, cest=cest, city_taxation_code=city_taxation_code, + service_type=service_type, ): self._build_mapping_result(mapping_result, tax_definition) @@ -300,6 +304,7 @@ def map_fiscal_taxes( nbs=nbs, cest=cest, city_taxation_code=city_taxation_code, + service_type=service_type, ): self._build_mapping_result(mapping_result, tax_definition) diff --git a/l10n_br_fiscal/models/tax_definition.py b/l10n_br_fiscal/models/tax_definition.py index c64fe1ce36e1..483ee9ea81d4 100644 --- a/l10n_br_fiscal/models/tax_definition.py +++ b/l10n_br_fiscal/models/tax_definition.py @@ -216,6 +216,14 @@ def name_get(self): string="City Taxation Codes", ) + service_type_ids = fields.Many2many( + comodel_name="l10n_br_fiscal.service.type", + relation="tax_definition_service_type_rel", + column1="tax_definition_id", + column2="service_type_id", + string="Fiscal Service Types", + ) + ind_final = fields.Selection( selection=FINAL_CUSTOMER, string="Final Consumption Operation", @@ -423,6 +431,7 @@ def map_tax_definition( nbs=None, cest=None, city_taxation_code=None, + service_type=None, ): if not ncm: ncm = product.ncm_id @@ -452,6 +461,9 @@ def map_tax_definition( ("city_taxation_code_ids", "=", False), ("city_taxation_code_ids", "=", city_taxation_code.id), "|", + ("service_type_ids", "=", False), + ("service_type_ids", "=", service_type.id), + "|", ("product_ids", "=", False), ("product_ids", "=", product.id), ] diff --git a/l10n_br_fiscal/views/tax_definition_view.xml b/l10n_br_fiscal/views/tax_definition_view.xml index 7ca10767e100..7b56dbae6437 100644 --- a/l10n_br_fiscal/views/tax_definition_view.xml +++ b/l10n_br_fiscal/views/tax_definition_view.xml @@ -108,15 +108,12 @@ string="Tax Benefit" attrs="{'invisible': [('is_benefit', '=', False)]}" > - - + - @@ -210,22 +207,27 @@ /> + + + + + - - - + + +
- - - + + +
From 6645fbe8531ec121d6e1aec3e2433c65a231d4b6 Mon Sep 17 00:00:00 2001 From: Antonio Neto Date: Tue, 3 Dec 2024 18:12:57 -0300 Subject: [PATCH 05/15] [FIX] l10n_br_fiscal: wrong document_date --- l10n_br_fiscal/models/document.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/l10n_br_fiscal/models/document.py b/l10n_br_fiscal/models/document.py index 490d23c36f56..44c4e8b3e167 100644 --- a/l10n_br_fiscal/models/document.py +++ b/l10n_br_fiscal/models/document.py @@ -353,13 +353,6 @@ def _compute_name(self): def _compute_fiscal_amount(self): return super()._compute_fiscal_amount() - @api.model_create_multi - def create(self, vals_list): - for values in vals_list: - if not values.get("document_date"): - values["document_date"] = self._date_server_format() - return super().create(vals_list) - def unlink(self): forbidden_states_unlink = [ SITUACAO_EDOC_AUTORIZADA, From b277eeb03ab8e7a14eb93db8c544bd7478b288c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Felipe=20Mil=C3=A9o?= Date: Thu, 24 Oct 2024 17:22:14 -0300 Subject: [PATCH 06/15] [RFC] l10n_br_fiscal: add service provider and transport model --- l10n_br_fiscal/models/document.py | 23 +++++++++++++++++++++++ l10n_br_fiscal/views/document_view.xml | 4 ++++ 2 files changed, 27 insertions(+) diff --git a/l10n_br_fiscal/models/document.py b/l10n_br_fiscal/models/document.py index 44c4e8b3e167..0834acbabec2 100644 --- a/l10n_br_fiscal/models/document.py +++ b/l10n_br_fiscal/models/document.py @@ -205,6 +205,29 @@ class Document(models.Model): default=False, ) + transport_modal = fields.Selection( + selection=[ + ("1", "Rodoviário"), + ("2", "Aéreo"), + ("3", "Aquaviário"), + ("4", "Ferroviário"), + ("5", "Dutoviário"), + ("6", "Multimodal"), + ], + string="Modal de Transporte", + ) + + service_provider = fields.Selection( + selection=[ + ("0", "Remetente"), + ("1", "Expedidor"), + ("2", "Recebedor"), + ("3", "Destinatário"), + ("4", "Outros"), + ], + string="Tomador do Serviço", + ) + @api.constrains("document_key") def _check_key(self): for record in self: diff --git a/l10n_br_fiscal/views/document_view.xml b/l10n_br_fiscal/views/document_view.xml index d0e97a41bac4..9103a11859d0 100644 --- a/l10n_br_fiscal/views/document_view.xml +++ b/l10n_br_fiscal/views/document_view.xml @@ -285,6 +285,10 @@ + + + + From f2fe1f16a8cef1ec20897565fcd3fb67cb0509d6 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Thu, 24 Oct 2024 17:34:45 -0300 Subject: [PATCH 07/15] [RFC] l10n_br_fiscal: escodoo refactor --- l10n_br_fiscal/models/document.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/l10n_br_fiscal/models/document.py b/l10n_br_fiscal/models/document.py index 0834acbabec2..df362bc96508 100644 --- a/l10n_br_fiscal/models/document.py +++ b/l10n_br_fiscal/models/document.py @@ -207,12 +207,12 @@ class Document(models.Model): transport_modal = fields.Selection( selection=[ - ("1", "Rodoviário"), - ("2", "Aéreo"), - ("3", "Aquaviário"), - ("4", "Ferroviário"), - ("5", "Dutoviário"), - ("6", "Multimodal"), + ("01", "Rodoviário"), + ("02", "Aéreo"), + ("03", "Aquaviário"), + ("04", "Ferroviário"), + ("05", "Dutoviário"), + ("06", "Multimodal"), ], string="Modal de Transporte", ) From efeafa6eefc455925e8e7fd07f6f03ab923d704d Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Thu, 14 Nov 2024 13:38:30 -0300 Subject: [PATCH 08/15] [IMP] l10n_br_fiscal: add cte demo data --- l10n_br_fiscal/demo/company_demo.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/l10n_br_fiscal/demo/company_demo.xml b/l10n_br_fiscal/demo/company_demo.xml index 224d742422c1..c8d18e20b549 100644 --- a/l10n_br_fiscal/demo/company_demo.xml +++ b/l10n_br_fiscal/demo/company_demo.xml @@ -162,6 +162,14 @@ True + + 1 + Série 1 + + + True + + 1 Série 1 @@ -202,6 +210,14 @@ True + + 1 + Série 1 + + + True + + 1 Série 1 From ff4bd564bb948b2d4992cf5dfcddce724aa204d3 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Thu, 14 Nov 2024 13:46:30 -0300 Subject: [PATCH 09/15] [IMP] l10n_br_fiscal: add cte partners fields --- .../models/document_mixin_fields.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/l10n_br_fiscal/models/document_mixin_fields.py b/l10n_br_fiscal/models/document_mixin_fields.py index b45fbb967ea6..6d365912980f 100644 --- a/l10n_br_fiscal/models/document_mixin_fields.py +++ b/l10n_br_fiscal/models/document_mixin_fields.py @@ -471,3 +471,33 @@ def _operation_domain(self): key_random_code = fields.Char(string="Document Key Random Code") key_check_digit = fields.Char(string="Document Key Check Digit") total_weight = fields.Float() + + ## CTE + + # commitment_date = fields.Datetime("Delivery Date") + # expected_date = fields.Datetime("Expected Date") + + # Remetente + partner_sendering_id = fields.Many2one( + "res.partner", + string="Sender Address", + help="Responsible for sending the goods, usually the issuer of the NFe.", + ) + + # Expedidor + partner_shippering_id = fields.Many2one( + "res.partner", + string="Shipper Address", + help="The one responsible for delivering the cargo to the carrier when \ + the shipment is not carried out by the sender.", + ) + + # Recebedor + partner_receivering_id = fields.Many2one( + "res.partner", + string="Receiver Address", + help="Actor who receives the goods. He is considered an intermediary \ + between the issuer and the final recipient.", + ) + + partner_insurance_id = fields.Many2one("res.partner", string="Insurance Partner") From 713ce8b415faa7c5b56a17960f7eaab10f43a351 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Fri, 6 Dec 2024 14:06:58 -0300 Subject: [PATCH 10/15] [IMP] l10n_br_fiscal: add CT-e Menu and Action --- .../views/l10n_br_fiscal_action.xml | 20 +++++++++++++++++++ l10n_br_fiscal/views/l10n_br_fiscal_menu.xml | 9 +++++++++ 2 files changed, 29 insertions(+) diff --git a/l10n_br_fiscal/views/l10n_br_fiscal_action.xml b/l10n_br_fiscal/views/l10n_br_fiscal_action.xml index 94f398b5a926..388fd5d1cf62 100644 --- a/l10n_br_fiscal/views/l10n_br_fiscal_action.xml +++ b/l10n_br_fiscal/views/l10n_br_fiscal_action.xml @@ -590,6 +590,26 @@ + + + CT-e + ir.actions.act_window + l10n_br_fiscal.document + tree,form + + + +

+ Add a new CTe +

+ Here you can create CT-es +

+
+
+ All Documents ir.actions.act_window diff --git a/l10n_br_fiscal/views/l10n_br_fiscal_menu.xml b/l10n_br_fiscal/views/l10n_br_fiscal_menu.xml index e531c34c7c2c..c5bfbf53a443 100644 --- a/l10n_br_fiscal/views/l10n_br_fiscal_menu.xml +++ b/l10n_br_fiscal/views/l10n_br_fiscal_menu.xml @@ -47,6 +47,15 @@ sequence="11" /> + + + Date: Thu, 14 Nov 2024 13:27:34 -0300 Subject: [PATCH 11/15] [FIX] l10n_br_fiscal: operation copy --- l10n_br_fiscal/models/operation.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/l10n_br_fiscal/models/operation.py b/l10n_br_fiscal/models/operation.py index afff7df9249b..94e859df43c7 100644 --- a/l10n_br_fiscal/models/operation.py +++ b/l10n_br_fiscal/models/operation.py @@ -268,3 +268,17 @@ def score(line): def _onchange_operation_subsequent_ids(self): for sub_operation in self.operation_subsequent_ids: sub_operation.fiscal_operation_id = self.id + + def copy(self, default=None): + """ + Inherit copy to edit field code. This is needed because the field is + Unique and Required. + """ + self.ensure_one() + if default is None: + default = {} + if self.code: + default["code"] = self.code + _(" (Copy)") + + res = super().copy(default) + return res From b2e6cce095cd0cd8585aa075e78dcfc3fa5a3515 Mon Sep 17 00:00:00 2001 From: Diego Paradeda Date: Fri, 13 Dec 2024 17:50:36 -0300 Subject: [PATCH 12/15] [IMP] l10n_br_fiscal: operation: also copy lines and taxes --- l10n_br_fiscal/models/operation.py | 1 + l10n_br_fiscal/models/operation_line.py | 1 + 2 files changed, 2 insertions(+) diff --git a/l10n_br_fiscal/models/operation.py b/l10n_br_fiscal/models/operation.py index 94e859df43c7..0344bd0789f1 100644 --- a/l10n_br_fiscal/models/operation.py +++ b/l10n_br_fiscal/models/operation.py @@ -123,6 +123,7 @@ class Operation(models.Model): string="Operation Line", readonly=True, states={"draft": [("readonly", False)]}, + copy=True, ) comment_ids = fields.Many2many( diff --git a/l10n_br_fiscal/models/operation_line.py b/l10n_br_fiscal/models/operation_line.py index e2cde39e3b8b..e2cf987de9a8 100644 --- a/l10n_br_fiscal/models/operation_line.py +++ b/l10n_br_fiscal/models/operation_line.py @@ -115,6 +115,7 @@ class OperationLine(models.Model): comodel_name="l10n_br_fiscal.tax.definition", inverse_name="fiscal_operation_line_id", string="Tax Definition", + copy=True, ) comment_ids = fields.Many2many( From c0a65fc8005b1d3bb1f1028be4218d90b8b548f1 Mon Sep 17 00:00:00 2001 From: Tiago Amaral Date: Tue, 17 Dec 2024 08:00:59 -0300 Subject: [PATCH 13/15] [IMP] l10n_br_fiscal: add test operation copy --- l10n_br_fiscal/tests/__init__.py | 1 + l10n_br_fiscal/tests/test_operation.py | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 l10n_br_fiscal/tests/test_operation.py diff --git a/l10n_br_fiscal/tests/__init__.py b/l10n_br_fiscal/tests/__init__.py index dae7f5062928..af12db8fd4f7 100644 --- a/l10n_br_fiscal/tests/__init__.py +++ b/l10n_br_fiscal/tests/__init__.py @@ -14,4 +14,5 @@ test_service_type, test_subsequent_operation, test_uom_uom, + test_operation, ) diff --git a/l10n_br_fiscal/tests/test_operation.py b/l10n_br_fiscal/tests/test_operation.py new file mode 100644 index 000000000000..1ae2f8542252 --- /dev/null +++ b/l10n_br_fiscal/tests/test_operation.py @@ -0,0 +1,13 @@ +# Copyright 2024 KMEE +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestOperation(TransactionCase): + def test_copy(self): + """Test Operation copy()""" + operation_venda = self.env.ref("l10n_br_fiscal.fo_venda") + operation_venda_copy = operation_venda.copy() + self.assertEqual(operation_venda_copy.name, "Venda") + self.assertEqual(operation_venda_copy.code, "Venda (Copy)") From 236418bc18b70468c0e80f0617bfd84d211d3bb1 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Wed, 18 Dec 2024 11:27:34 -0300 Subject: [PATCH 14/15] [RFC] l10n_br_fiscal: move fields to l10n_br_cte --- .../models/document_mixin_fields.py | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/l10n_br_fiscal/models/document_mixin_fields.py b/l10n_br_fiscal/models/document_mixin_fields.py index 6d365912980f..b45fbb967ea6 100644 --- a/l10n_br_fiscal/models/document_mixin_fields.py +++ b/l10n_br_fiscal/models/document_mixin_fields.py @@ -471,33 +471,3 @@ def _operation_domain(self): key_random_code = fields.Char(string="Document Key Random Code") key_check_digit = fields.Char(string="Document Key Check Digit") total_weight = fields.Float() - - ## CTE - - # commitment_date = fields.Datetime("Delivery Date") - # expected_date = fields.Datetime("Expected Date") - - # Remetente - partner_sendering_id = fields.Many2one( - "res.partner", - string="Sender Address", - help="Responsible for sending the goods, usually the issuer of the NFe.", - ) - - # Expedidor - partner_shippering_id = fields.Many2one( - "res.partner", - string="Shipper Address", - help="The one responsible for delivering the cargo to the carrier when \ - the shipment is not carried out by the sender.", - ) - - # Recebedor - partner_receivering_id = fields.Many2one( - "res.partner", - string="Receiver Address", - help="Actor who receives the goods. He is considered an intermediary \ - between the issuer and the final recipient.", - ) - - partner_insurance_id = fields.Many2one("res.partner", string="Insurance Partner") From f0bc18b4be87b31510b0f2693b364803e4cd7e15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Valyi?= Date: Wed, 15 Jan 2025 22:41:17 +0000 Subject: [PATCH 15/15] l10n_br_fiscal_edi: don't break with draft docs --- l10n_br_fiscal_edi/models/document_event.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/l10n_br_fiscal_edi/models/document_event.py b/l10n_br_fiscal_edi/models/document_event.py index 6e167372425d..28076b54e3da 100644 --- a/l10n_br_fiscal_edi/models/document_event.py +++ b/l10n_br_fiscal_edi/models/document_event.py @@ -222,8 +222,11 @@ def _save_event_2disk(self, arquivo, file_name): numero = self.document_number if self.document_id: - ano = self.document_id.document_date.strftime("%Y") - mes = self.document_id.document_date.strftime("%m") + document_date = ( + self.document_id.document_date or self.document_id.create_date + ) + ano = document_date.strftime("%Y") + mes = document_date.strftime("%m") elif self.invalidate_number_id: ano = self.invalidate_number_id.date.strftime("%Y") mes = self.invalidate_number_id.date.strftime("%m")