From 0c28eea6e2e3b2e16b3b1dd921492149fab81e4a Mon Sep 17 00:00:00 2001 From: bit4bit Date: Wed, 17 Nov 2021 01:06:22 +0000 Subject: [PATCH] se adicionan pruebas para Ajuste Reemplazar y Eliminar FossilOrigin-Name: 750ed4cb15a88abfe296f1d9b2e4013df95b76bf1dfd4ecca22e07b3c12aacf2 --- facho/fe/nomina/__init__.py | 55 +++++++++++++++++++++++++++++++--- tests/test_nomina.py | 60 +++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 4 deletions(-) diff --git a/facho/fe/nomina/__init__.py b/facho/fe/nomina/__init__.py index 844d91a..437953a 100644 --- a/facho/fe/nomina/__init__.py +++ b/facho/fe/nomina/__init__.py @@ -192,9 +192,12 @@ class DIANNominaXML: # esten ordenados segun el anexo tecnico self.fexml.placeholder_for('./ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent') self.fexml.placeholder_for('./TipoNota', optional=True) + self.root_fragment = self.fexml if xpath_ajuste is not None: self.root_fragment = self.fexml.fragment(xpath_ajuste) + self.root_fragment.placeholder_for('./ReemplazandoPredecesor', optional=True) + self.root_fragment.placeholder_for('./EliminandoPredecesor', optional=True) self.root_fragment.placeholder_for('./Novedad', optional=True) self.root_fragment.placeholder_for('./Periodo') self.root_fragment.placeholder_for('./NumeroSecuenciaXML') @@ -385,16 +388,60 @@ class DIANNominaIndividual(DIANNominaXML): class DIANNominaIndividualDeAjuste(DIANNominaXML): class Reemplazar(DIANNominaXML): + @dataclass + class Predecesor: + numero: str + cune: str + fecha_generacion: str + + def apply(self, fragment): + fragment.set_element('./Reemplazar/ReemplazandoPredecesor', None, + # NIAE090 + NumeroPred = self.numero, + # NIAE191 + CUNEPred = self.cune, + # NIAE192 + FechaGenPred = self.fecha_generacion + ) + def __init__(self): super().__init__('NominaIndividualDeAjuste', './Reemplazar') # NIAE214 - self.root_fragment.set_element('TipoNota', '1') - + self.root_fragment.set_element('./TipoNota', '1') + + def asignar_predecesor(self, predecesor): + if not isinstance(predecesor, self.Predecesor): + raise ValueError("se espera tipo Predecesor") + predecesor.apply(self.fexml) + + class Eliminar(DIANNominaXML): + + @dataclass + class Predecesor: + numero: str + cune: str + fecha_generacion: str + + def apply(self, fragment): + fragment.set_element('./Eliminar/EliminandoPredecesor', None, + # NIAE090 + NumeroPred = self.numero, + # NIAE191 + CUNEPred = self.cune, + # NIAE192 + FechaGenPred = self.fecha_generacion + ) + def __init__(self): super().__init__('NominaIndividualDeAjuste', './Eliminar') - # NIAE214 - self.root_fragment.set_element('TipoNota', '2') + + self.root_fragment.set_element('./TipoNota', '2') + + def asignar_predecesor(self, predecesor): + if not isinstance(predecesor, self.Predecesor): + raise ValueError("se espera tipo Eliminar.Predecesor") + predecesor.apply(self.fexml) def __init__(self): super().__init__('NominaIndividualDeAjuste') diff --git a/tests/test_nomina.py b/tests/test_nomina.py index ccc1cb8..737f4a3 100644 --- a/tests/test_nomina.py +++ b/tests/test_nomina.py @@ -267,6 +267,51 @@ def test_adicionar_reemplazar_devengado_comprobante_total(): assert xml.get_element_text('/fe:NominaIndividualDeAjuste/Reemplazar/ComprobanteTotal') == '1000000.00' +def test_adicionar_reemplazar_asignar_predecesor(): + nomina = fe.nomina.DIANNominaIndividualDeAjuste.Reemplazar() + + nomina.asignar_predecesor(fe.nomina.DIANNominaIndividualDeAjuste.Reemplazar.Predecesor( + numero = '123456', + cune = 'ABC123456', + fecha_generacion = '2021-11-16' + )) + + xml = nomina.toFachoXML() + print(xml.tostring()) + assert xml.get_element_text_or_attribute('/fe:NominaIndividualDeAjuste/Reemplazar/ReemplazandoPredecesor/@NumeroPred') == '123456' + assert xml.get_element_text_or_attribute('/fe:NominaIndividualDeAjuste/Reemplazar/ReemplazandoPredecesor/@CUNEPred') == 'ABC123456' + assert xml.get_element_text_or_attribute('/fe:NominaIndividualDeAjuste/Reemplazar/ReemplazandoPredecesor/@FechaGenPred') == '2021-11-16' + + +def test_adicionar_reemplazar_eliminar_predecesor_opcional(): + nomina = fe.nomina.DIANNominaIndividualDeAjuste.Reemplazar() + + nomina.asignar_predecesor(fe.nomina.DIANNominaIndividualDeAjuste.Reemplazar.Predecesor( + numero = '123456', + cune = 'ABC123456', + fecha_generacion = '2021-11-16' + )) + + xml = nomina.toFachoXML() + print(xml.tostring()) + + assert xml.get_element('/fe:NominaIndividualDeAjuste/Reemplazar/ReemplazandoPredecesor') is not None + assert xml.get_element('/fe:NominaIndividualDeAjuste/Eliminar/EliminandoPredecesor') is None + +def test_adicionar_eliminar_reemplazar_predecesor_opcional(): + nomina = fe.nomina.DIANNominaIndividualDeAjuste.Eliminar() + + nomina.asignar_predecesor(fe.nomina.DIANNominaIndividualDeAjuste.Eliminar.Predecesor( + numero = '123456', + cune = 'ABC123456', + fecha_generacion = '2021-11-16' + )) + + xml = nomina.toFachoXML() + print(xml.tostring()) + assert xml.get_element('/fe:NominaIndividualDeAjuste/Eliminar/EliminandoPredecesor') is not None + assert xml.get_element('/fe:NominaIndividualDeAjuste/Reemplazar/ReemplazandoPredecesor') is None + def test_adicionar_eliminar_devengado_comprobante_total(): nomina = fe.nomina.DIANNominaIndividualDeAjuste.Eliminar() @@ -283,3 +328,18 @@ def test_adicionar_eliminar_devengado_comprobante_total(): xml = nomina.toFachoXML() assert xml.get_element_text('/fe:NominaIndividualDeAjuste/Eliminar/ComprobanteTotal') == '1000000.00' + +def test_adicionar_eliminar_asignar_predecesor(): + nomina = fe.nomina.DIANNominaIndividualDeAjuste.Eliminar() + + nomina.asignar_predecesor(fe.nomina.DIANNominaIndividualDeAjuste.Eliminar.Predecesor( + numero = '123456', + cune = 'ABC123456', + fecha_generacion = '2021-11-16' + )) + + xml = nomina.toFachoXML() + print(xml.tostring()) + assert xml.get_element_text_or_attribute('/fe:NominaIndividualDeAjuste/Eliminar/EliminandoPredecesor/@NumeroPred') == '123456' + assert xml.get_element_text_or_attribute('/fe:NominaIndividualDeAjuste/Eliminar/EliminandoPredecesor/@CUNEPred') == 'ABC123456' + assert xml.get_element_text_or_attribute('/fe:NominaIndividualDeAjuste/Eliminar/EliminandoPredecesor/@FechaGenPred') == '2021-11-16'