facho/fe/fe.py (DianXMLExtensionAuthorizationProvider): nueva extension
FossilOrigin-Name: f8c2a2a2b1c844bffe8cde8c1ba8013ba196e198f4280395ad1f18f8204ca644
This commit is contained in:
		| @@ -5,4 +5,5 @@ from .fe import DianXMLExtensionSoftwareSecurityCode | ||||
| from .fe import DianXMLExtensionCUFE | ||||
| from .fe import DianXMLExtensionInvoiceAuthorization | ||||
| from .fe import DianXMLExtensionSoftwareProvider | ||||
| from .fe import DianXMLExtensionAuthorizationProvider | ||||
| from .fe import DianZIP | ||||
|   | ||||
| @@ -12,6 +12,12 @@ import hashlib | ||||
| from contextlib import contextmanager | ||||
| from .data.dian import codelist | ||||
|  | ||||
| SCHEME_AGENCY_ATTRS = { | ||||
|     'schemeAgencyName': 'CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)', | ||||
|     'schemeAgencyID': '195' | ||||
| } | ||||
|  | ||||
|                        | ||||
| NAMESPACES = { | ||||
|     'fe': 'http://www.dian.gov.co/contratos/facturaelectronica/v1', | ||||
|     'cac': 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2', | ||||
| @@ -123,8 +129,10 @@ class DianXMLExtensionSoftwareProvider(FachoXMLExtension): | ||||
|  | ||||
|     def build(self, fexml): | ||||
|         software_provider = fexml.fragment('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:SoftwareProvider') | ||||
|         software_provider.set_element('/sts:SoftwareProvider/sts:ProviderID', self.nit) | ||||
|         software_provider.set_element('/sts:SoftwareProvider/sts:SoftwareID', self.id_software) | ||||
|         software_provider.set_element('/sts:SoftwareProvider/sts:ProviderID', self.nit, | ||||
|                                       **SCHEME_AGENCY_ATTRS) | ||||
|         software_provider.set_element('/sts:SoftwareProvider/sts:SoftwareID', self.id_software, | ||||
|                                       **SCHEME_AGENCY_ATTRS) | ||||
|         return '', [] | ||||
|  | ||||
|      | ||||
| @@ -142,6 +150,7 @@ class DianXMLExtensionSoftwareSecurityCode(FachoXMLExtension): | ||||
|         m = hashlib.sha384() | ||||
|         m.update(code.encode('utf-8')) | ||||
|         fexml.set_element(dian_path, m.hexdigest()) | ||||
|         fexml.set_attributes(dian_path, **SCHEME_AGENCY_ATTRS) | ||||
|         return '', [] | ||||
|  | ||||
|      | ||||
| @@ -234,6 +243,19 @@ class DianXMLExtensionSigner(FachoXMLExtension): | ||||
|         return '', [] | ||||
|          | ||||
|  | ||||
| class DianXMLExtensionAuthorizationProvider(FachoXMLExtension): | ||||
|     # RESOLUCION 0004: pagina 176 | ||||
|  | ||||
|     def build(self, fexml): | ||||
|         dian_path = '/fe:Invoice/ext:UBLExtensions/ext:ExtensionContent/sts:DianExtensions/sts:AuthorizationProvider/sts:AuthorizationProviderID' | ||||
|         fexml.set_element(dian_path, '800197268') | ||||
|          | ||||
|         attrs = {'schemeID': '4', 'schemeName': '31'} | ||||
|         attrs.update(SCHEME_AGENCY_ATTRS) | ||||
|         fexml.set_attributes(dian_path, **attrs) | ||||
|         return '', [] | ||||
|      | ||||
|  | ||||
| class DianXMLExtensionInvoiceAuthorization(FachoXMLExtension): | ||||
|     # RESOLUCION 0004: pagina 106 | ||||
|  | ||||
|   | ||||
| @@ -228,7 +228,8 @@ class DIANInvoiceXML(fe.FeXML): | ||||
|                           invoice.invoice_supplier.address.street) | ||||
|          | ||||
|         fexml.set_element('/fe:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID', | ||||
|                           invoice.invoice_supplier.ident) | ||||
|                           invoice.invoice_supplier.ident, | ||||
|                           **fe.SCHEME_AGENCY_ATTRS) | ||||
|  | ||||
|         fexml.set_element('/fe:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:TaxLevelCode', | ||||
|                           invoice.invoice_supplier.responsability_code) | ||||
| @@ -251,7 +252,8 @@ class DIANInvoiceXML(fe.FeXML): | ||||
|         fexml.set_element('/fe:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PhysicalLocation/cac:Address/cac:AddressLine/cbc:Line', | ||||
|                           invoice.invoice_customer.address.street) | ||||
|         fexml.set_element('/fe:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID', | ||||
|                           invoice.invoice_customer.ident) | ||||
|                           invoice.invoice_customer.ident, | ||||
|                           **fe.SCHEME_AGENCY_ATTRS) | ||||
|         fexml.set_element('/fe:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PartyTaxScheme/cbc:TaxLevelCode', | ||||
|                           invoice.invoice_customer.responsability_code) | ||||
|         fexml.find_or_create_element('/fe:Invoice/cac:AccountingCustomerParty/cac:Party/cac:PartyTaxScheme/cac:TaxScheme') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user