From 612aae1f865eb751c5707c075c24ccaa79266533 Mon Sep 17 00:00:00 2001 From: Rodia Date: Fri, 27 Dec 2024 21:04:35 -0500 Subject: [PATCH] Fix: Se reemplazan datos de prueba por objeto Invoice issue #4 --- facho/fe/form_xml/attached_document.py | 40 ++++++++++++++------------ tests/test_attached_document.py | 31 +++++++++++--------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/facho/fe/form_xml/attached_document.py b/facho/fe/form_xml/attached_document.py index 8c46cb9..1eff60a 100644 --- a/facho/fe/form_xml/attached_document.py +++ b/facho/fe/form_xml/attached_document.py @@ -5,10 +5,11 @@ __all__ = ['AttachedDocument'] class AttachedDocument(): - def __init__(self, id): + def __init__(self, invoice, id): self.schema =\ 'urn:oasis:names:specification:ubl:schema:xsd:AttachedDocument-2' self.id = id + self.invoice = invoice self.attached_document_invoice = self.attached_document_invoice() # self.fexml.placeholder_for( @@ -42,11 +43,12 @@ class AttachedDocument(): # DIAN 1.9.-2023: AE05 self.fexml.set_element( - './cbc:IssueDate', '2024-12-07') + './cbc:IssueDate', self.invoice.invoice_issue.strftime('%Y-%m-%d')) # DIAN 1.9.-2023: AE06 self.fexml.set_element( - './cbc:IssueTime', '12:16:07-05:00') + './cbc:IssueTime', self.invoice.invoice_issue.strftime( + '%H:%M:%S-05:00')) # DIAN 1.9.-2023: AE08 self.fexml.set_element( @@ -54,7 +56,7 @@ class AttachedDocument(): # DIAN 1.9.-2023: AE08a self.fexml.set_element( - './cbc:ParentDocumentID', 'FE60247') + './cbc:ParentDocumentID', self.invoice.invoice_ident) # DIAN 1.9.-2023: AE09 self.set_sender_party() @@ -75,21 +77,22 @@ class AttachedDocument(): # DIAN 1.9.-2023: AE11 self.fexml.set_element( './cac:SenderParty/cac:PartyTaxScheme/cbc:RegistrationName', - 'CASCOS MEDELLIN') + 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', '900795506', + './cac:SenderParty/cac:PartyTaxScheme/cbc:CompanyID', + self.invoice.invoice_supplier.ident, schemeAgencyID='195', - schemeID='0', - schemeName='31') + 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', - 'R-99-PN') + self.invoice.invoice_supplier.responsability_code) # DIAN 1.9.-2023: AE18 self.fexml.placeholder_for( @@ -98,12 +101,12 @@ class AttachedDocument(): # DIAN 1.9.-2023: AE19 self.fexml.set_element( './cac:SenderParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:ID', - '01') + self.invoice.invoice_supplier.tax_scheme.code) # DIAN 1.9.-2023: AE20 self.fexml.set_element( './cac:SenderParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:Name', - 'IVA') + self.invoice.invoice_supplier.tax_scheme.name) def set_receiver_party(self): # DIAN 1.9.-2023: AE21 @@ -115,31 +118,32 @@ class AttachedDocument(): # DIAN 1.9.-2023: AE23 self.fexml.set_element( './cac:ReceiverParty/cac:PartyTaxScheme/cbc:RegistrationName', - 'CASCOS MEDELLIN') + 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', '900795506', + './cac:ReceiverParty/cac:PartyTaxScheme/cbc:CompanyID', + self.invoice.invoice_customer.ident, schemeAgencyID='195', - schemeID='0', - schemeName='31') + 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', - 'R-99-PN') + 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', - '01') + self.invoice.invoice_customer.tax_scheme.code) # DIAN 1.9.-2023: AE32 self.fexml.set_element( './cac:ReceiverParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:Name', - 'IVA') + self.invoice.invoice_customer.tax_scheme.name) def set_attachment(self): # DIAN 1.9.-2023: AE33 diff --git a/tests/test_attached_document.py b/tests/test_attached_document.py index 6b802fb..d0c90f2 100644 --- a/tests/test_attached_document.py +++ b/tests/test_attached_document.py @@ -6,12 +6,13 @@ import pytest from facho.fe import form_xml - +from datetime import datetime import helpers +from fixtures import simple_invoice -def test_xml_with_required_elements(): - doc = form_xml.AttachedDocument(id='123') +def test_xml_with_required_elements(simple_invoice): + doc = form_xml.AttachedDocument(simple_invoice, id='123') xml = doc.toFachoXML() assert xml.get_element_text( '/atd:AttachedDocument/cbc:UBLVersionID') == 'UBL 2.1' @@ -24,25 +25,27 @@ def test_xml_with_required_elements(): assert xml.get_element_text( '/atd:AttachedDocument/cbc:ID') == '123' assert xml.get_element_text( - '/atd:AttachedDocument/cbc:IssueDate') == '2024-12-07' + '/atd:AttachedDocument/cbc:IssueDate') == str(datetime.today().date()) assert xml.get_element_text( - '/atd:AttachedDocument/cbc:IssueTime') == '12:16:07-05:00' + '/atd:AttachedDocument/cbc:IssueTime') == datetime.today( + ).time().strftime( + '%H:%M:%S-05:00') assert xml.get_element_text( '/atd:AttachedDocument/cbc:DocumentType' ) == 'Contenedor de Factura Electrónica' assert xml.get_element_text( '/atd:AttachedDocument/cbc:ParentDocumentID' - ) == 'FE60247' + ) == 'ABC123' assert xml.get_element_text( '/atd:AttachedDocument/cac:SenderParty/cac:PartyTaxScheme/cbc:RegistrationName' - ) == 'CASCOS MEDELLIN' + ) == 'facho-supplier' assert xml.get_element_text( '/atd:AttachedDocument/cac:SenderParty/cac:PartyTaxScheme/cbc:CompanyID' - ) == '900795506' + ) == '123' assert xml.get_element_text( '/atd:AttachedDocument/cac:SenderParty/cac:PartyTaxScheme/cbc:TaxLevelCode' - ) == 'R-99-PN' + ) == 'ZZ' assert xml.get_element_text( '/atd:AttachedDocument/cac:SenderParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:ID' ) == '01' @@ -52,13 +55,13 @@ def test_xml_with_required_elements(): assert xml.get_element_text( '/atd:AttachedDocument/cac:ReceiverParty/cac:PartyTaxScheme/cbc:RegistrationName' - ) == 'CASCOS MEDELLIN' + ) == 'facho-customer' assert xml.get_element_text( '/atd:AttachedDocument/cac:ReceiverParty/cac:PartyTaxScheme/cbc:CompanyID' - ) == '900795506' + ) == '321' assert xml.get_element_text( '/atd:AttachedDocument/cac:ReceiverParty/cac:PartyTaxScheme/cbc:TaxLevelCode' - ) == 'R-99-PN' + ) == 'ZZ' assert xml.get_element_text( '/atd:AttachedDocument/cac:ReceiverParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:ID' ) == '01' @@ -66,5 +69,5 @@ def test_xml_with_required_elements(): '/atd:AttachedDocument/cac:ReceiverParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:Name' ) == 'IVA' - # with open("output.xml", "w") as fh: - # fh.write(xml.tostring()) + with open("output.xml", "w") as fh: + fh.write(xml.tostring())