From 6aebada2d6a382d6e0da3d3af4f331332fb4262a Mon Sep 17 00:00:00 2001 From: "bit4bit@riseup.net" Date: Sat, 30 May 2020 02:53:26 +0000 Subject: [PATCH] facho/fe/form.py: visit pattern para validador FossilOrigin-Name: fd853b5eeeee9ef353c5d0098c1a271488fec229e3fc4b537ce9bcb44f799f6b --- facho/fe/form.py | 18 +++++++++++------- tests/test_fe_form.py | 9 +++------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/facho/fe/form.py b/facho/fe/form.py index 7f9f993..c00001c 100644 --- a/facho/fe/form.py +++ b/facho/fe/form.py @@ -116,11 +116,11 @@ class Invoice: def add_invoice_line(self, line: InvoiceLine): self.invoice_lines.append(line) - def validate(self, validator): - validator.validate_customer(self.invoice_customer) - validator.validate_supplier(self.invoice_supplier) + def accept(self, visitor): + visitor.visit_customer(self.invoice_customer) + visitor.visit_supplier(self.invoice_supplier) for invline in self.invoice_lines: - validator.validate_invoice_line(self, invline) + visitor.visit_invoice_line(invline) def _calculate_legal_monetary_total(self): for invline in self.invoice_lines: @@ -155,13 +155,17 @@ class DianResolucion0001Validator: except KeyError: self.errors.append(('organization_code', 'not found')) - def validate_customer(self, customer): + def validate(self, invoice): + invoice.accept(self) + return not self.errors + + def visit_customer(self, customer): self._validate_party(customer) - def validate_supplier(self, supplier): + def visit_supplier(self, supplier): self._validate_party(supplier) - def validate_invoice_line(self, invoice, line): + def visit_invoice_line(self, line): pass def valid(self): diff --git a/tests/test_fe_form.py b/tests/test_fe_form.py index a8f7b87..b538081 100644 --- a/tests/test_fe_form.py +++ b/tests/test_fe_form.py @@ -72,8 +72,7 @@ def simple_invoice(): def test_invoicesimple_build(simple_invoice): invoice_validator = form.DianResolucion0001Validator() - simple_invoice.validate(invoice_validator) - assert invoice_validator.valid() == True + assert invoice_validator.validate(simple_invoice) == True xml = form.DIANInvoiceXML(simple_invoice) supplier_name = xml.get_element_text('/fe:Invoice/fe:AccountingSupplierParty/fe:Party/cac:PartyName/cbc:Name') @@ -91,8 +90,7 @@ def test_invoicesimple_build(simple_invoice): def test_invoicesimple_build_with_cufe(simple_invoice): invoice_validator = form.DianResolucion0001Validator() - simple_invoice.validate(invoice_validator) - assert invoice_validator.valid() == True + assert invoice_validator.validate(simple_invoice) == True xml = form.DIANInvoiceXML(simple_invoice) cufe_extension = fe.DianXMLExtensionCUFE(simple_invoice) xml.add_extension(cufe_extension) @@ -102,8 +100,7 @@ def test_invoicesimple_build_with_cufe(simple_invoice): def test_invoicesimple_xml_signed(monkeypatch, simple_invoice): invoice_validator = form.DianResolucion0001Validator() - simple_invoice.validate(invoice_validator) - assert invoice_validator.valid() == True + assert invoice_validator.validate(simple_invoice) == True xml = form.DIANInvoiceXML(simple_invoice) signer = fe.DianXMLExtensionSigner('./tests/example.p12')