Feat: Attachment, ParentDocumentLine
This commit is contained in:
		| @@ -5,11 +5,12 @@ __all__ = ['AttachedDocument'] | |||||||
|  |  | ||||||
| class AttachedDocument(): | class AttachedDocument(): | ||||||
|  |  | ||||||
|     def __init__(self, invoice, id): |     def __init__(self, invoice, DIANInvoiceXML, id): | ||||||
|         self.schema =\ |         self.schema =\ | ||||||
|             'urn:oasis:names:specification:ubl:schema:xsd:AttachedDocument-2' |             'urn:oasis:names:specification:ubl:schema:xsd:AttachedDocument-2' | ||||||
|         self.id = id |         self.id = id | ||||||
|         self.invoice = invoice |         self.invoice = invoice | ||||||
|  |         self.DIANInvoiceXML = DIANInvoiceXML | ||||||
|         self.attached_document_invoice = self.attached_document_invoice() |         self.attached_document_invoice = self.attached_document_invoice() | ||||||
|  |  | ||||||
|         # self.fexml.placeholder_for( |         # self.fexml.placeholder_for( | ||||||
| @@ -43,7 +44,8 @@ class AttachedDocument(): | |||||||
|  |  | ||||||
|         # DIAN 1.9.-2023: AE05 |         # DIAN 1.9.-2023: AE05 | ||||||
|         self.fexml.set_element( |         self.fexml.set_element( | ||||||
|             './cbc:IssueDate', self.invoice.invoice_issue.strftime('%Y-%m-%d')) |             './cbc:IssueDate', | ||||||
|  |             self.invoice.invoice_issue.strftime('%Y-%m-%d')) | ||||||
|  |  | ||||||
|         # DIAN 1.9.-2023: AE06 |         # DIAN 1.9.-2023: AE06 | ||||||
|         self.fexml.set_element( |         self.fexml.set_element( | ||||||
| @@ -163,11 +165,63 @@ class AttachedDocument(): | |||||||
|         # DIAN 1.9.-2023: AE37 |         # DIAN 1.9.-2023: AE37 | ||||||
|         self.fexml.set_element( |         self.fexml.set_element( | ||||||
|             './cac:Attachment/cac:ExternalReference/cbc:Description', |             './cac:Attachment/cac:ExternalReference/cbc:Description', | ||||||
|             ' ') |             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): |     def set_parent_document_line_reference(self): | ||||||
|         self.fexml.placeholder_for( |         self.fexml.placeholder_for( | ||||||
|             './cac:ParentDocumentLineReference') |             './cac:ParentDocumentLineReference') | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cbc:LineID', 1) | ||||||
|  |         self.fexml.placeholder_for( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference') | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cbc:ID', | ||||||
|  |             '1234') | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cbc:UUID', | ||||||
|  |             '1234', | ||||||
|  |             schemeName="CUFE-SHA384") | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cbc:IssueDate', | ||||||
|  |             '2024-11-28') | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cbc:DocumentType', | ||||||
|  |             'ApplicationResponse') | ||||||
|  |         self.fexml.placeholder_for( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:Attachment') | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:Attachment/cac:ExternalReference/cbc:MimeCode', | ||||||
|  |             'text/xml') | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:Attachment/cac:ExternalReference/cbc:EncodingCode', | ||||||
|  |             'UTF-8') | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:Attachment/cac:ExternalReference/cbc:Description', | ||||||
|  |             ' ') | ||||||
|  |         self.fexml.placeholder_for( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:ResultOfVerification') | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:ResultOfVerification/cbc:ValidatorID', | ||||||
|  |             'Unidad Especial Dirección de Impuestos y Aduanas Nacionales') | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:ResultOfVerification/cbc:ValidationResultCode', | ||||||
|  |             '02') | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:ResultOfVerification/cbc:ValidationDate', | ||||||
|  |             '2024-11-28') | ||||||
|  |         self.fexml.set_element( | ||||||
|  |             './cac:ParentDocumentLineReference/cac:DocumentReference/cac:ResultOfVerification/cbc:ValidationTime', | ||||||
|  |             '10:35:11-05:00') | ||||||
|  |  | ||||||
|     def toFachoXML(self): |     def toFachoXML(self): | ||||||
|         return self.fexml |         return self.fexml | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -8,13 +8,29 @@ import pytest | |||||||
| from facho.fe import form_xml | from facho.fe import form_xml | ||||||
| from datetime import datetime | from datetime import datetime | ||||||
| import helpers | import helpers | ||||||
|  |  | ||||||
| from fixtures import simple_invoice | from fixtures import simple_invoice | ||||||
|  |  | ||||||
|  | simple_invoice = simple_invoice | ||||||
|  |  | ||||||
|  | def test_xml_with_required_elements(simple_invoice): | ||||||
|  |  | ||||||
|  |     DIANInvoiceXML = form_xml.DIANInvoiceXML( | ||||||
|  |         simple_invoice) | ||||||
|  |  | ||||||
|  |     doc = form_xml.AttachedDocument( | ||||||
|  |         simple_invoice, | ||||||
|  |         DIANInvoiceXML, | ||||||
|  |         id='123') | ||||||
|  |  | ||||||
| def test_xml_with_required_elements(): |  | ||||||
|     doc = form_xml.AttachedDocument(simple_invoice, id='123') |  | ||||||
|     xml = doc.toFachoXML() |     xml = doc.toFachoXML() | ||||||
|  |  | ||||||
|  |     DIANInvoiceXML = form_xml.DIANInvoiceXML( | ||||||
|  |         simple_invoice, 'Invoice').attach_invoice | ||||||
|  |  | ||||||
|  |     attached_document = ( | ||||||
|  |         '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' | ||||||
|  |     ) + DIANInvoiceXML.tostring() | ||||||
|  |  | ||||||
|     assert xml.get_element_text( |     assert xml.get_element_text( | ||||||
|         '/atd:AttachedDocument/cbc:UBLVersionID') == 'UBL 2.1' |         '/atd:AttachedDocument/cbc:UBLVersionID') == 'UBL 2.1' | ||||||
|     assert xml.get_element_text( |     assert xml.get_element_text( | ||||||
| @@ -70,5 +86,41 @@ def test_xml_with_required_elements(): | |||||||
|         '/atd:AttachedDocument/cac:ReceiverParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:Name' |         '/atd:AttachedDocument/cac:ReceiverParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:Name' | ||||||
|     ) == 'IVA' |     ) == 'IVA' | ||||||
|  |  | ||||||
|  |     assert xml.get_element_text( | ||||||
|  |         '/atd:AttachedDocument/cac:Attachment/cac:ExternalReference/cbc:MimeCode' | ||||||
|  |     ) == "text/xml" | ||||||
|  |     assert xml.get_element_text( | ||||||
|  |         '/atd:AttachedDocument/cac:Attachment/cac:ExternalReference/cbc:EncodingCode' | ||||||
|  |     ) == "UTF-8" | ||||||
|  |     assert xml.get_element_text( | ||||||
|  |         '/atd:AttachedDocument/cac:Attachment/cac:ExternalReference/cbc:Description' | ||||||
|  |     ) == "<![CDATA[{}]]>".format(attached_document) | ||||||
|  |  | ||||||
|  |     assert xml.get_element_text( | ||||||
|  |         '/atd:AttachedDocument/cac:ParentDocumentLineReference/cbc:LineID' | ||||||
|  |     ) == '1' | ||||||
|  |     assert xml.get_element_text( | ||||||
|  |         '/atd:AttachedDocument/cac:ParentDocumentLineReference/cac:DocumentReference/cbc:ID' | ||||||
|  |     ) == '1234' | ||||||
|  |     assert xml.get_element_text( | ||||||
|  |         '/atd:AttachedDocument/cac:ParentDocumentLineReference/cac:DocumentReference/cbc:UUID' | ||||||
|  |     ) == '1234' | ||||||
|  |     assert xml.get_element_text( | ||||||
|  |         '/atd:AttachedDocument/cac:ParentDocumentLineReference/cac:DocumentReference/cbc:IssueDate' | ||||||
|  |     ) == '2024-11-28' | ||||||
|  |     assert xml.get_element_text( | ||||||
|  |         '/atd:AttachedDocument/cac:ParentDocumentLineReference/cac:DocumentReference/cbc:DocumentType' | ||||||
|  |     ) == 'ApplicationResponse' | ||||||
|  |     assert xml.get_element_text( | ||||||
|  |         '/atd:AttachedDocument/cac:ParentDocumentLineReference/cac:DocumentReference/cac:Attachment/cac:ExternalReference/cbc:MimeCode' | ||||||
|  |     ) == 'text/xml' | ||||||
|  |  | ||||||
|  |     assert xml.get_element_text( | ||||||
|  |         '/atd:AttachedDocument/cac:ParentDocumentLineReference/cac:DocumentReference/cac:Attachment/cac:ExternalReference/cbc:EncodingCode' | ||||||
|  |     ) == "UTF-8" | ||||||
|  |     assert xml.get_element_text( | ||||||
|  |         '/atd:AttachedDocument/cac:ParentDocumentLineReference/cac:DocumentReference/cac:Attachment/cac:ExternalReference/cbc:Description' | ||||||
|  |     ) == " " | ||||||
|  |  | ||||||
|     with open("output.xml", "w") as fh: |     with open("output.xml", "w") as fh: | ||||||
|         fh.write(xml.tostring()) |         fh.write(xml.tostring()) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user