se adiciona firmador de NominaIndividual
FossilOrigin-Name: 61f093ca18fd0d4edf76d84693fc5cb3b6c4b008ba238f7e7defef23e400f328
This commit is contained in:
		| @@ -172,6 +172,16 @@ class InformacionGeneral: | |||||||
|             CUNE = cune_hash |             CUNE = cune_hash | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|  | class DianXMLExtensionSigner(fe.DianXMLExtensionSigner): | ||||||
|  |  | ||||||
|  |     def __init__(self, pkcs12_path, passphrase=None, mockpolicy=False): | ||||||
|  |         super().__init__(pkcs12_path, passphrase=passphrase, mockpolicy=mockpolicy) | ||||||
|  |  | ||||||
|  |     def build(self, fachoxml): | ||||||
|  |         signature = self.sign_xml_element(fachoxml.root) | ||||||
|  |         xpath = fachoxml.xpath_from_root('/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent') | ||||||
|  |         extcontent = fachoxml.get_element(xpath) | ||||||
|  |         fachoxml.append_element(extcontent, signature) | ||||||
|  |  | ||||||
| class DIANNominaXML: | class DIANNominaXML: | ||||||
|     def __init__(self, tag_document): |     def __init__(self, tag_document): | ||||||
| @@ -180,7 +190,7 @@ class DIANNominaXML: | |||||||
|  |  | ||||||
|         # layout, la dian requiere que los elementos |         # layout, la dian requiere que los elementos | ||||||
|         # esten ordenados segun el anexo tecnico |         # esten ordenados segun el anexo tecnico | ||||||
|         self.fexml.placeholder_for('./UBLExtensions') |         self.fexml.placeholder_for('./ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent') | ||||||
|         self.fexml.placeholder_for('./Novedad', optional=True) |         self.fexml.placeholder_for('./Novedad', optional=True) | ||||||
|         self.fexml.placeholder_for('./Periodo') |         self.fexml.placeholder_for('./Periodo') | ||||||
|         self.fexml.placeholder_for('./NumeroSecuenciaXML') |         self.fexml.placeholder_for('./NumeroSecuenciaXML') | ||||||
|   | |||||||
| @@ -9,6 +9,15 @@ import pytest | |||||||
|  |  | ||||||
| from facho import fe | from facho import fe | ||||||
|  |  | ||||||
|  | import helpers | ||||||
|  |  | ||||||
|  | def assert_error(errors, msg): | ||||||
|  |     for error in errors: | ||||||
|  |         if str(error) == msg: | ||||||
|  |             return True | ||||||
|  |  | ||||||
|  |     raise "wants error: %s" % (msg) | ||||||
|  |  | ||||||
| def test_adicionar_devengado_Basico(): | def test_adicionar_devengado_Basico(): | ||||||
|     nomina = fe.nomina.DIANNominaIndividual() |     nomina = fe.nomina.DIANNominaIndividual() | ||||||
|  |  | ||||||
| @@ -210,13 +219,6 @@ def test_nomina_xml(): | |||||||
|     assert xml.get_element_text_or_attribute('/fe:NominaIndividual/ProveedorXML/@SoftwareSC') == 'yy' |     assert xml.get_element_text_or_attribute('/fe:NominaIndividual/ProveedorXML/@SoftwareSC') == 'yy' | ||||||
|     assert xml.get_element_text_or_attribute('/fe:NominaIndividual/ProveedorXML/@CodigoQR') != None |     assert xml.get_element_text_or_attribute('/fe:NominaIndividual/ProveedorXML/@CodigoQR') != None | ||||||
|  |  | ||||||
| def assert_error(errors, msg): |  | ||||||
|     for error in errors: |  | ||||||
|         if str(error) == msg: |  | ||||||
|             return True |  | ||||||
|  |  | ||||||
|     raise "wants error: %s" % (msg) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_asignar_pago(): | def test_asignar_pago(): | ||||||
|     nomina = fe.nomina.DIANNominaIndividual() |     nomina = fe.nomina.DIANNominaIndividual() | ||||||
| @@ -224,3 +226,16 @@ def test_asignar_pago(): | |||||||
|         forma = fe.nomina.FormaPago(code='1'), |         forma = fe.nomina.FormaPago(code='1'), | ||||||
|         metodo = fe.nomina.MetodoPago(code='1') |         metodo = fe.nomina.MetodoPago(code='1') | ||||||
|     )) |     )) | ||||||
|  |  | ||||||
|  | def test_nomina_xmlsign(monkeypatch): | ||||||
|  |     nomina = fe.nomina.DIANNominaIndividual() | ||||||
|  |     xml = nomina.toFachoXML() | ||||||
|  |  | ||||||
|  |     signer = fe.nomina.DianXMLExtensionSigner('./tests/example.p12') | ||||||
|  |     with monkeypatch.context() as m: | ||||||
|  |         helpers.mock_urlopen(m) | ||||||
|  |         xml.add_extension(signer) | ||||||
|  |  | ||||||
|  |     print(xml.tostring()) | ||||||
|  |     elem = xml.get_element('/fe:NominaIndividual/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/ds:Signature') | ||||||
|  |     assert elem is not None | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user