From b31e467bc0e6d33d7e020a5ce91c314899845e40 Mon Sep 17 00:00:00 2001 From: "bit4bit@riseup.net" Date: Wed, 28 Oct 2020 03:16:38 +0000 Subject: [PATCH] facho/fe/fe.py: se corrigen a rutas relativas FossilOrigin-Name: d367cf450d5bde34e32a7cd5ef92a262d090c80c00dd0e76ca123bcc04de89a4 --- facho/fe/fe.py | 23 ++++++++++++----------- facho/fe/form_xml/credit_note.py | 2 +- facho/fe/form_xml/invoice.py | 4 ++-- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/facho/fe/fe.py b/facho/fe/fe.py index cb6a7a3..db16ff6 100644 --- a/facho/fe/fe.py +++ b/facho/fe/fe.py @@ -26,6 +26,7 @@ POLICY_NAME = u'Política de firma para facturas electrónicas de la República NAMESPACES = { + 'facho': 'http://git.disroot.org/Etrivial/facho', 'fe': 'http://www.dian.gov.co/contratos/facturaelectronica/v1', 'cac': 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2', 'cbc': 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2', @@ -89,13 +90,13 @@ class DianXMLExtensionCUFE(FachoXMLExtension): def build(self, fachoxml): cufe = self._generate_cufe(self.invoice, fachoxml) - fachoxml.set_element('/fe:Invoice/cbc:UUID', cufe, + fachoxml.set_element('./cbc:UUID', cufe, schemeID=self.tipo_ambiente, schemeName='CUFE-SHA384') - fachoxml.set_element('/fe:Invoice/cbc:ProfileID', 'DIAN 2.1') - fachoxml.set_element('/fe:Invoice/cbc:ProfileExecutionID', self._tipo_ambiente()) + fachoxml.set_element('./cbc:ProfileID', 'DIAN 2.1') + fachoxml.set_element('./cbc:ProfileExecutionID', self._tipo_ambiente()) #DIAN 1.7.-2020: FAB36 - fachoxml.set_element('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:QRCode', + fachoxml.set_element('./ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:QRCode', 'https://catalogo-vpfe.dian.gov.co/document/searchqr?documentkey='+cufe) def issue_time(self, datetime_): @@ -164,7 +165,7 @@ class DianXMLExtensionSoftwareProvider(FachoXMLExtension): self.id_software = id_software def build(self, fexml): - software_provider = fexml.fragment('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:SoftwareProvider') + software_provider = fexml.fragment('./ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:SoftwareProvider') provider_id_attrs = SCHEME_AGENCY_ATTRS.copy() provider_id_attrs.update({'schemeID': self.dv}) #DIAN 1.7.-2020: FAB23 @@ -184,7 +185,7 @@ class DianXMLExtensionSoftwareSecurityCode(FachoXMLExtension): self.invoice_ident = invoice_ident def build(self, fexml): - dian_path = '/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:SoftwareSecurityCode' + dian_path = './ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:SoftwareSecurityCode' code = str(self.id_software) + str(self.pin) + str(self.invoice_ident) m = hashlib.sha384() m.update(code.encode('utf-8')) @@ -212,7 +213,7 @@ class DianXMLExtensionSigner: fachoxml = FachoXML(xml,nsmap=NAMESPACES) #DIAN 1.7.-2020: FAB01 - extcontent = fachoxml.builder.xpath(fachoxml.root, '/fe:Invoice/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent') + extcontent = fachoxml.builder.xpath(fachoxml.root, './ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent') fachoxml.append_element(extcontent, signature) return fachoxml.tostring(xml_declaration=True, encoding='UTF-8') @@ -276,14 +277,14 @@ class DianXMLExtensionSigner: def build(self, fachoxml): signature = self.sign_xml_element(fachoxml.root) - extcontent = fachoxml.builder.xpath(fachoxml.root, '/fe:Invoice/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent') + extcontent = fachoxml.builder.xpath(fachoxml.root, './ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent') fachoxml.append_element(extcontent, signature) class DianXMLExtensionAuthorizationProvider(FachoXMLExtension): # RESOLUCION 0004: pagina 176 def build(self, fexml): - dian_path = '/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:AuthorizationProvider/sts:AuthorizationProviderID' + dian_path = './ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:AuthorizationProvider/sts:AuthorizationProviderID' fexml.set_element(dian_path, '800197268') attrs = {'schemeID': '4', 'schemeName': '31'} @@ -315,7 +316,7 @@ class DianXMLExtensionInvoiceAuthorization(FachoXMLExtension): self.to = to def build(self, fexml): - fexml.set_element('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:InvoiceSource/cbc:IdentificationCode', + fexml.set_element('./ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:InvoiceSource/cbc:IdentificationCode', 'CO', #DIAN 1.7.-2020: FAB15 listAgencyID="6", @@ -325,7 +326,7 @@ class DianXMLExtensionInvoiceAuthorization(FachoXMLExtension): listSchemeURI="urn:oasis:names:specification:ubl:codelist:gc:CountryIdentificationCode-2.1" ) - invoice_control = fexml.fragment('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:InvoiceControl') + invoice_control = fexml.fragment('./ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:InvoiceControl') invoice_control.set_element('/sts:InvoiceControl/sts:InvoiceAuthorization', self.authorization) invoice_control.set_element('/sts:InvoiceControl/sts:AuthorizationPeriod/cbc:StartDate', self.period_startdate.strftime('%Y-%m-%d')) diff --git a/facho/fe/form_xml/credit_note.py b/facho/fe/form_xml/credit_note.py index 4380201..85063d1 100644 --- a/facho/fe/form_xml/credit_note.py +++ b/facho/fe/form_xml/credit_note.py @@ -11,7 +11,7 @@ class DIANCreditNoteXML(DIANInvoiceXML): """ def __init__(self, invoice): - super().__init__('CreditNote', 'http://www.dian.gov.co/contratos/facturaelectronica/v1') + super(DIANCreditNoteXML, self).__init__(invoice, 'CreditNote') def tag_document(fexml): return 'CreditNote' diff --git a/facho/fe/form_xml/invoice.py b/facho/fe/form_xml/invoice.py index 4deea65..5955526 100644 --- a/facho/fe/form_xml/invoice.py +++ b/facho/fe/form_xml/invoice.py @@ -9,8 +9,8 @@ class DIANInvoiceXML(fe.FeXML): lo indicado para la facturacion electronica. """ - def __init__(self, invoice): - super().__init__('Invoice', 'http://www.dian.gov.co/contratos/facturaelectronica/v1') + def __init__(self, invoice, tag_document = 'Invoice'): + super().__init__(tag_document, 'http://www.dian.gov.co/contratos/facturaelectronica/v1') self.placeholder_for('./ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent') # ZE02 se requiere existencia para firmar