Feat: Se agrega ApplicationResponse a AttachedDocument
This commit is contained in:
		| @@ -57,6 +57,7 @@ Bogota = tz.gettz('America/Bogota') | ||||
|  | ||||
|  | ||||
| NAMESPACES = { | ||||
|     'apr': 'urn:oasis:names:specification:ubl:schema:xsd:ApplicationResponse-2', | ||||
|     'atd': 'urn:oasis:names:specification:ubl:schema:xsd:AttachedDocument-2', | ||||
|     'fe': 'http://www.dian.gov.co/contratos/facturaelectronica/v1', | ||||
|     'cac': 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2', | ||||
| @@ -111,6 +112,7 @@ class FeXML(FachoXML): | ||||
|             'AttachedDocument': 'urn:oasis:names:specification:ubl:schema:xsd:AttachedDocument-2', | ||||
|             'Invoice': 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2', | ||||
|             'CreditNote': 'urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2', | ||||
|             'ApplicationResponse': 'urn:oasis:names:specification:ubl:schema:xsd:ApplicationResponse-2' | ||||
|         } | ||||
|  | ||||
|         root_namespace = self.root_namespace() | ||||
|   | ||||
| @@ -2,6 +2,7 @@ from .invoice import * | ||||
| from .credit_note import * | ||||
| from .debit_note import * | ||||
| from .utils import * | ||||
| from .attached_document import * | ||||
| from .support_document import * | ||||
| from .support_document_credit_note import * | ||||
| from .attached_document import * | ||||
| from .application_response import * | ||||
|   | ||||
							
								
								
									
										177
									
								
								facho/fe/form_xml/application_response.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								facho/fe/form_xml/application_response.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,177 @@ | ||||
| from .. import fe | ||||
|  | ||||
| __all__ = ['ApplicationResponse'] | ||||
|  | ||||
|  | ||||
| class ApplicationResponse: | ||||
|  | ||||
|     def __init__(self, invoice, tag_document='ApplicationResponse'): | ||||
|         self.schema =\ | ||||
|             'urn:oasis:names:specification:ubl:schema:xsd:ApplicationResponse-2' | ||||
|         self.tag_document = tag_document | ||||
|         self.invoice = invoice | ||||
|         self.fexml = fe.FeXML( | ||||
|             self.tag_document, self.schema) | ||||
|         self.application_response = self.application_response() | ||||
|  | ||||
|     def application_response(self): | ||||
|         # DIAN 1.9.-2023: AE02 | ||||
|         self.fexml.set_element( | ||||
|             './cbc:UBLVersionID', 'UBL 2.1') | ||||
|  | ||||
|         # DIAN 1.9.-2023: AE03 | ||||
|         self.fexml.set_element( | ||||
|             './cbc:CustomizationID', 'Documentos adjuntos') | ||||
|  | ||||
|         # DIAN 1.9.-2023: AE04 | ||||
|         self.fexml.set_element( | ||||
|             './cbc:ProfileID', 'DIAN 2.1') | ||||
|  | ||||
|         # DIAN 1.9.-2023: AE04a | ||||
|         self.fexml.set_element( | ||||
|             './cbc:ProfileExecutionID', '1') | ||||
|  | ||||
|         self.fexml.set_element( | ||||
|             './cbc:ID', '1') | ||||
|  | ||||
|         self.fexml.set_element( | ||||
|             './cbc:UUID', '1', schemeName="CUDE-SHA384") | ||||
|  | ||||
|         self.fexml.set_element( | ||||
|             './cbc:IssueDate', | ||||
|             self.invoice.invoice_issue.strftime('%Y-%m-%d')) | ||||
|  | ||||
|         # DIAN 1.9.-2023: AE06 | ||||
|         self.fexml.set_element( | ||||
|             './cbc:IssueTime', self.invoice.invoice_issue.strftime( | ||||
|                 '%H:%M:%S-05:00')) | ||||
|  | ||||
|         self.set_sender_party() | ||||
|         self.set_receiver_party() | ||||
|         self.set_document_response() | ||||
|  | ||||
|     def set_sender_party(self): | ||||
|         # DIAN 1.9.-2023: AE09 | ||||
|         self.fexml.placeholder_for( | ||||
|             './cac:SenderParty') | ||||
|         # DIAN 1.9.-2023: AE10 | ||||
|         self.fexml.placeholder_for( | ||||
|             './cac:SenderParty/cac:PartyTaxScheme') | ||||
|         # DIAN 1.9.-2023: AE11 | ||||
|         self.fexml.set_element( | ||||
|             './cac:SenderParty/cac:PartyTaxScheme/cbc:RegistrationName', | ||||
|             self.invoice.invoice_supplier.name) | ||||
|         # DIAN 1.9.-2023: AE12 | ||||
|         # DIAN 1.9.-2023: AE13 | ||||
|         # DIAN 1.9.-2023: AE14 | ||||
|         # DIAN 1.9.-2023: AE15 | ||||
|         self.fexml.set_element( | ||||
|             './cac:SenderParty/cac:PartyTaxScheme/cbc:CompanyID', | ||||
|             self.invoice.invoice_supplier.ident, | ||||
|             schemeAgencyID='195', | ||||
|             schemeID=self.invoice.invoice_supplier.ident.dv, | ||||
|             schemeName=self.invoice.invoice_supplier.ident.type_fiscal) | ||||
|  | ||||
|         # DIAN 1.9.-2023: AE16 | ||||
|         self.fexml.set_element( | ||||
|             './cac:SenderParty/cac:PartyTaxScheme/cbc:TaxLevelCode', | ||||
|             self.invoice.invoice_supplier.responsability_code) | ||||
|  | ||||
|         # DIAN 1.9.-2023: AE18 | ||||
|         self.fexml.placeholder_for( | ||||
|             './cac:SenderParty/cac:PartyTaxScheme/cac:TaxScheme') | ||||
|  | ||||
|         # DIAN 1.9.-2023: AE19 | ||||
|         self.fexml.set_element( | ||||
|             './cac:SenderParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:ID', | ||||
|             self.invoice.invoice_supplier.tax_scheme.code) | ||||
|  | ||||
|         # DIAN 1.9.-2023: AE20 | ||||
|         self.fexml.set_element( | ||||
|             './cac:SenderParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:Name', | ||||
|             self.invoice.invoice_supplier.tax_scheme.name) | ||||
|  | ||||
|     def set_receiver_party(self): | ||||
|         # DIAN 1.9.-2023: AE21 | ||||
|         self.fexml.placeholder_for( | ||||
|             './cac:ReceiverParty') | ||||
|         # DIAN 1.9.-2023: AE22 | ||||
|         self.fexml.placeholder_for( | ||||
|             './cac:ReceiverParty/cac:PartyTaxScheme') | ||||
|         # DIAN 1.9.-2023: AE23 | ||||
|         self.fexml.set_element( | ||||
|             './cac:ReceiverParty/cac:PartyTaxScheme/cbc:RegistrationName', | ||||
|             self.invoice.invoice_customer.name) | ||||
|         # DIAN 1.9.-2023: AE24 | ||||
|         # DIAN 1.9.-2023: AE25 | ||||
|         # DIAN 1.9.-2023: AE26 | ||||
|         # DIAN 1.9.-2023: AE27 | ||||
|         self.fexml.set_element( | ||||
|             './cac:ReceiverParty/cac:PartyTaxScheme/cbc:CompanyID', | ||||
|             self.invoice.invoice_customer.ident, | ||||
|             schemeAgencyID='195', | ||||
|             schemeID=self.invoice.invoice_customer.ident.dv, | ||||
|             schemeName=self.invoice.invoice_customer.ident.type_fiscal) | ||||
|         # DIAN 1.9.-2023: AE28 | ||||
|         self.fexml.set_element( | ||||
|             './cac:ReceiverParty/cac:PartyTaxScheme/cbc:TaxLevelCode', | ||||
|             self.invoice.invoice_customer.responsability_code) | ||||
|         # DIAN 1.9.-2023: AE30 | ||||
|         self.fexml.placeholder_for( | ||||
|             './cac:ReceiverParty/cac:PartyTaxScheme/cac:TaxScheme') | ||||
|         # DIAN 1.9.-2023: AE31 | ||||
|         self.fexml.set_element( | ||||
|             './cac:ReceiverParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:ID', | ||||
|             self.invoice.invoice_customer.tax_scheme.code) | ||||
|         # DIAN 1.9.-2023: AE32 | ||||
|         self.fexml.set_element( | ||||
|             './cac:ReceiverParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:Name', | ||||
|             self.invoice.invoice_customer.tax_scheme.name) | ||||
|  | ||||
|     def set_document_response(self): | ||||
|         self.fexml.placeholder_for( | ||||
|             './cac:DocumentResponse') | ||||
|         self.fexml.placeholder_for( | ||||
|             './cac:DocumentResponse/cac:Response') | ||||
|         self.fexml.set_element( | ||||
|             './cac:DocumentResponse/cac:Response/cbc:ResponseCode', | ||||
|             '02') | ||||
|         self.fexml.set_element( | ||||
|             './cac:DocumentResponse/cac:Response/cbc:Description', | ||||
|             'Documento validado por la DIAN') | ||||
|         self.set_documnent_reference() | ||||
|  | ||||
|     def set_documnent_reference(self): | ||||
|         self.fexml.placeholder_for( | ||||
|             './cac:DocumentResponse/cac:DocumentReference') | ||||
|         self.fexml.set_element( | ||||
|             './cac:DocumentResponse/cac:DocumentReference/cbc:ID', | ||||
|             'FESS19566058') | ||||
|         self.fexml.set_element( | ||||
|             './cac:DocumentResponse/cac:DocumentReference/cbc:UUID', | ||||
|             'f51ee529aabd19d10e39444f2f593b94d56d5885fbf433faf718d53a7e968f64bf54a6ee43c6a2df842771b54a6aae1a', | ||||
|             schemeName="CUFE-SHA384") | ||||
|         self.set_response_lines() | ||||
|  | ||||
|     def set_response_lines(self): | ||||
|         lines = [{ | ||||
|             'LineID': '1', | ||||
|             'ResponseCode': '0000', | ||||
|             'Description': '0', | ||||
|              }] | ||||
|  | ||||
|         for line in lines: | ||||
|             self.fexml.set_element( | ||||
|                 './cac:DocumentResponse/cac:LineResponse/cac:LineReference/cbc:LineID', line[ | ||||
|                     'LineID']) | ||||
|             self.fexml.set_element( | ||||
|                 './cac:DocumentResponse/cac:LineResponse/cac:Response/cbc:ResponseCode', line[ | ||||
|                     'ResponseCode']) | ||||
|             self.fexml.set_element( | ||||
|                 './cac:DocumentResponse/cac:LineResponse/cac:Response/cbc:Description', line[ | ||||
|                     'Description']) | ||||
|  | ||||
|  | ||||
|  | ||||
|     def toFachoXML(self): | ||||
|         return self.fexml | ||||
| @@ -1,4 +1,5 @@ | ||||
| from .. import fe | ||||
| from .application_response import ApplicationResponse | ||||
|  | ||||
| __all__ = ['AttachedDocument'] | ||||
|  | ||||
| @@ -13,11 +14,6 @@ class AttachedDocument(): | ||||
|         self.DIANInvoiceXML = DIANInvoiceXML | ||||
|         self.attached_document_invoice = self.attached_document_invoice() | ||||
|  | ||||
|         # self.fexml.placeholder_for( | ||||
|         #     './ext:UBLExtension/ext:ExtensionContent/ds:Signature') | ||||
|         # self.fexml.set_element('./ext:UBLExtension/ext:ExtensionContent/ds:Signature', None, Id=id) | ||||
|         # | ||||
|  | ||||
|     def attached_document_invoice(self): | ||||
|         self.fexml = fe.FeXML( | ||||
|             'AttachedDocument', self.schema) | ||||
| @@ -168,15 +164,6 @@ class AttachedDocument(): | ||||
|             self._build_attachment(self.DIANInvoiceXML) | ||||
|         ) | ||||
|  | ||||
|     def _build_attachment(self, DIANInvoiceXML): | ||||
|         document = ( | ||||
|             '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' | ||||
|         ) + DIANInvoiceXML.tostring() | ||||
|         attachment = "<![CDATA[{}]]>".format( | ||||
|             document) | ||||
|  | ||||
|         return attachment | ||||
|  | ||||
|     def set_parent_document_line_reference(self): | ||||
|         self.fexml.placeholder_for( | ||||
|             './cac:ParentDocumentLineReference') | ||||
| @@ -205,9 +192,13 @@ class AttachedDocument(): | ||||
|         self.fexml.set_element( | ||||
|             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:Attachment/cac:ExternalReference/cbc:EncodingCode', | ||||
|             'UTF-8') | ||||
|  | ||||
|         application_response = ApplicationResponse( | ||||
|             self.invoice).toFachoXML() | ||||
|  | ||||
|         self.fexml.set_element( | ||||
|             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:Attachment/cac:ExternalReference/cbc:Description', | ||||
|             ' ') | ||||
|             self._build_attachment(application_response)) | ||||
|         self.fexml.placeholder_for( | ||||
|             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:ResultOfVerification') | ||||
|         self.fexml.set_element( | ||||
| @@ -223,5 +214,14 @@ class AttachedDocument(): | ||||
|             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:ResultOfVerification/cbc:ValidationTime', | ||||
|             '10:35:11-05:00') | ||||
|  | ||||
|     def _build_attachment(self, DIANInvoiceXML): | ||||
|         document = ( | ||||
|             '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' | ||||
|         ) + DIANInvoiceXML.tostring() | ||||
|         attachment = "<![CDATA[{}]]>".format( | ||||
|             document) | ||||
|  | ||||
|         return attachment | ||||
|  | ||||
|     def toFachoXML(self): | ||||
|         return self.fexml | ||||
|   | ||||
		Reference in New Issue
	
	Block a user