From 7cbcf088022cd8392de2f3e96531fb58caa8ac06 Mon Sep 17 00:00:00 2001 From: "bit4bit@riseup.net" Date: Sun, 6 Sep 2020 01:13:55 +0000 Subject: [PATCH] implementa TipoOperacionF. * facho/fe/form.py(Invoice.set_operation_type): Nuevo metodo. FossilOrigin-Name: da60365b4f2ca0904139d0567ae5ba4188b05e890c25b80c551728d19708a8d9 --- facho/fe/data/dian/codelist/__init__.py | 1 + facho/fe/form.py | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/facho/fe/data/dian/codelist/__init__.py b/facho/fe/data/dian/codelist/__init__.py index 1d13d22..3bd6e56 100644 --- a/facho/fe/data/dian/codelist/__init__.py +++ b/facho/fe/data/dian/codelist/__init__.py @@ -85,3 +85,4 @@ TipoDocumento = CodeList(path_for_codelist('TipoDocumento-2.1.gc'), 'code', 'nam CodigoPrecioReferencia = CodeList(path_for_codelist('CodigoPrecioReferencia-2.1.gc'), 'code', 'name') MediosPago = CodeList(path_for_codelist('MediosPago-2.1.gc'), 'code', 'name') RegimenFiscal = CodeList(path_for_codelist('RegimenFiscal-2.1.custom.gc'), 'code', 'name') +TipoOperacionF = CodeList(path_for_codelist('TipoOperacionF-2.1.gc'), 'code', 'name') diff --git a/facho/fe/form.py b/facho/fe/form.py index adf9dcc..4b90284 100644 --- a/facho/fe/form.py +++ b/facho/fe/form.py @@ -178,13 +178,13 @@ class LegalMonetaryTotal: charge_total_amount: float = 0.0 payable_amount: float = 0.0 - class Invoice: def __init__(self): self.invoice_period_start = None self.invoice_period_end = None self.invoice_issue = None self.invoice_ident = None + self.invoice_operation_type = None self.invoice_legal_monetary_total = LegalMonetaryTotal(0, 0, 0, 0, 0) self.invoice_customer = None self.invoice_supplier = None @@ -211,6 +211,9 @@ class Invoice: def set_payment_mean(self, payment_mean: PaymentMean): self.invoice_payment_mean = payment_mean + def set_operation_type(self, operation): + self.invoice_operation_type = operation + def add_invoice_line(self, line: InvoiceLine): self.invoice_lines.append(line) @@ -258,8 +261,17 @@ class DianResolucion0001Validator: self.errors.append((model, 'organization_code' , 'not found %s' % (party.organization_code))) + def _validate_invoice(self, invoice): + try: + codelist.TipoOperacionF[invoice.invoice_operation_type] + except KeyError: + self.errors.append(('invoice', 'operation_type', + 'not found %s' % (invoice.invoice_operation_type))) + def validate(self, invoice): invoice.accept(self) + self._validate_invoice(invoice) + return not self.errors def visit_payment_mean(self, mean): @@ -423,6 +435,7 @@ class DIANInvoiceXML(fe.FeXML): invoice.calculate() fexml.placeholder_for('/fe:Invoice/ext:UBLExtensions') fexml.set_element('/fe:Invoice/cbc:UBLVersionID', 'UBL 2.1') + fexml.set_element('/fe:Invoice/cbc:CustomizationID', invoice.invoice_operation_type) fexml.placeholder_for('/fe:Invoice/cbc:ProfileID') fexml.placeholder_for('/fe:Invoice/cbc:ProfileExecutionID') fexml.set_element('/fe:Invoice/cbc:ID', invoice.invoice_ident)