From 1602dd35e3451d1cd32c282a7c0482ae89342688 Mon Sep 17 00:00:00 2001 From: bit4bit Date: Thu, 4 Nov 2021 03:01:01 +0000 Subject: [PATCH] adiciona NIE071,NIE072,NIE073 FossilOrigin-Name: a04d79d7ce56391301a0babd48c413be10dfd628764b91471746041ca9175458 --- facho/facho.py | 9 ++++++--- tests/test_facho.py | 25 +++++++++++++++++++++++++ tests/test_nomina.py | 28 ++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/facho/facho.py b/facho/facho.py index 6304f8d..ba9b5c3 100644 --- a/facho/facho.py +++ b/facho/facho.py @@ -123,8 +123,7 @@ class LXMLBuilder: for el in elem.getiterator(): is_optional = el.get('facho_optional', 'False') == 'True' - if is_optional and el.getchildren() == []: - print(tostring(el)) + if is_optional and el.getchildren() == [] and el.keys() == ['facho_optional']: el.getparent().remove(el) return tostring(elem, **attrs).decode('utf-8') @@ -308,8 +307,12 @@ class FachoXML: xpath = self._path_xpath_for(xpath) elem = self.get_element(xpath) + if elem is None: + raise ValueError("xpath %s not found" % (xpath)) + for k, v in attrs.items(): - self.builder.set_attribute(elem, k, v) + if v is not None or str(v) != 'None': + self.builder.set_attribute(elem, k, str(v)) return self def get_element_attribute(self, xpath, attribute): diff --git a/tests/test_facho.py b/tests/test_facho.py index 19d13d7..deea299 100644 --- a/tests/test_facho.py +++ b/tests/test_facho.py @@ -255,3 +255,28 @@ def test_facho_xml_placeholder_set_element_to_optional_with_append(): xml.set_element('./B', '2') xml.set_element('./B', '3', append_=True) assert xml.tostring() == '23' + + +def test_facho_xml_set_attributes(): + xml = facho.FachoXML('root') + xml.find_or_create_element('./A') + + xml.set_attributes('./A', + value1 = '1', + value2 = '2' + ) + assert xml.get_element_attribute('/root/A', 'value1') == '1' + assert xml.get_element_attribute('/root/A', 'value2') == '2' + + +def test_facho_xml_set_attributes_not_set_optional(): + xml = facho.FachoXML('root') + xml.find_or_create_element('./A') + + xml.set_attributes('./A', + value1 = None, + value2 = '2' + ) + with pytest.raises(KeyError): + xml.get_element_attribute('/root/A', 'value1') + assert xml.get_element_attribute('/root/A', 'value2') == '2' diff --git a/tests/test_nomina.py b/tests/test_nomina.py index 1aef5ac..50d9912 100644 --- a/tests/test_nomina.py +++ b/tests/test_nomina.py @@ -20,3 +20,31 @@ def test_adicionar_devengado_Basico(): xml = nomina.toFachoXML() assert xml.get_element_attribute('/fe:NominaIndividual/Devengados/Basico', 'DiasTrabajados') == '30' assert xml.get_element_attribute('/fe:NominaIndividual/Devengados/Basico', 'SueldoTrabajado') == '1000000.0' + +def test_adicionar_devengado_transporte(): + nomina = fe.nomina.DIANNominaIndividual() + + nomina.adicionar_devengado(fe.nomina.DevengadoTransporte( + auxilio_transporte = fe.nomina.Amount(2_000_000) + )) + + xml = nomina.toFachoXML() + assert xml.get_element_attribute('/fe:NominaIndividual/Devengados/Transporte', 'AuxilioTransporte') == '2000000.0' + +def test_adicionar_devengado_transporte_muchos(): + nomina = fe.nomina.DIANNominaIndividual() + + nomina.adicionar_devengado(fe.nomina.DevengadoTransporte( + auxilio_transporte = fe.nomina.Amount(2_000_000) + )) + + nomina.adicionar_devengado(fe.nomina.DevengadoTransporte( + auxilio_transporte = fe.nomina.Amount(3_000_000) + )) + + xml = nomina.toFachoXML() + print(xml) + assert str(xml) == """ + +""" +