From e5710099456e271afafd6efb95464c738b76381e Mon Sep 17 00:00:00 2001 From: bit4bit Date: Wed, 2 Dec 2020 18:10:29 +0000 Subject: [PATCH] form.AllowanceChargeAsDiscount nueva clase para descuentos FossilOrigin-Name: 5b11ff93dff3a301628694c2a6e71940915aea8754a9eab3f35644bc669ddf87 --- facho/facho.py | 5 +++++ facho/fe/fe.py | 9 +++++++-- facho/fe/form/__init__.py | 5 +++++ tests/test_form.py | 5 ++++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/facho/facho.py b/facho/facho.py index 25cd59d..24f907f 100644 --- a/facho/facho.py +++ b/facho/facho.py @@ -129,6 +129,11 @@ class FachoXML: self.xpath_for = {} self.extensions = [] + @classmethod + def from_string(cls, document: str, namespaces: dict() = []) -> 'FachoXML': + xml = LXMLBuilder.from_string(document) + return FachoXML(xml, nsmap=namespaces) + def append_element(self, elem, new_elem): #elem = self.find_or_create_element(xpath, append=append) #self.builder.append(elem, new_elem) diff --git a/facho/fe/fe.py b/facho/fe/fe.py index 5452d33..3a2d4bd 100644 --- a/facho/fe/fe.py +++ b/facho/fe/fe.py @@ -49,8 +49,7 @@ NAMESPACES = { } def fe_from_string(document: str) -> FachoXML: - xml = LXMLBuilder.from_string(document) - return FachoXML(xml, nsmap=NAMESPACES) + return FeXML.from_string(document) from contextlib import contextmanager @contextmanager @@ -69,6 +68,7 @@ def mock_xades_policy(): mock.return_value = UrllibPolicyMock() yield + class FeXML(FachoXML): def __init__(self, root, namespace): @@ -79,6 +79,10 @@ class FeXML(FachoXML): self._cn = root.rstrip('/') #self.find_or_create_element(self._cn) + @classmethod + def from_string(cls, document: str) -> 'FeXML': + return super().from_string(document, namespaces=NAMESPACES) + def tostring(self, **kw): return super().tostring(**kw)\ .replace("fe:", "")\ @@ -360,6 +364,7 @@ class DianXMLExtensionSigner: 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 diff --git a/facho/fe/form/__init__.py b/facho/fe/form/__init__.py index 6ff78b3..c05a338 100644 --- a/facho/fe/form/__init__.py +++ b/facho/fe/form/__init__.py @@ -491,6 +491,11 @@ class AllowanceCharge: def hasReason(self): return self.reason is not None +class AllowanceChargeAsDiscount(AllowanceCharge): + def __init__(self, amount: Amount = Amount(0.0)): + self.charge_indicator = False + self.amount = amount + class NationalSalesInvoiceDocumentType(str): def __str__(self): # 6.1.3 diff --git a/tests/test_form.py b/tests/test_form.py index 1c39483..5089580 100644 --- a/tests/test_form.py +++ b/tests/test_form.py @@ -38,7 +38,10 @@ def test_invoice_legalmonetary(): assert inv.invoice_legal_monetary_total.tax_inclusive_amount == form.Amount(119.0) assert inv.invoice_legal_monetary_total.charge_total_amount == form.Amount(0.0) - +def test_allowancecharge_as_discount(): + discount = form.AllowanceChargeAsDiscount(amount=form.Amount(1000.0)) + assert discount.isDiscount() == True + def test_FAU10(): inv = form.NationalSalesInvoice() inv.add_invoice_line(form.InvoiceLine(