From 45e4bff58bcaf9f93232d6e3074f3024f4396452 Mon Sep 17 00:00:00 2001 From: "bit4bit@riseup.net" Date: Tue, 20 Oct 2020 01:49:37 +0000 Subject: [PATCH] facho/fe/form.py(AllownaceCharge): nueva clase. se verificar FAU10. FossilOrigin-Name: 7946a106b46aa5df111662def21bc7c94dd2e37d9b01443cf45e8145ecd798f9 --- facho/fe/form.py | 28 ++++++++++++++++++++++++++-- tests/test_form.py | 31 +++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/facho/fe/form.py b/facho/fe/form.py index 90154d0..ce07051 100644 --- a/facho/fe/form.py +++ b/facho/fe/form.py @@ -192,6 +192,25 @@ class LegalMonetaryTotal: charge_total_amount: float = 0.0 payable_amount: float = 0.0 +@dataclass +class AllowanceCharge: + #DIAN 1.7.-2020: FAQ03 + charge_indicator: bool = True + amount: float = 0.0 + + def isCharge(self): + return self.charge_indicator == True + + def isDiscount(self): + return self.charge_indicator == False + + def asCharge(self): + self.charge_indicator = True + + def asDiscount(self): + self.charge_indicator = False + + class Invoice: def __init__(self): self.invoice_period_start = None @@ -205,6 +224,7 @@ class Invoice: self.invoice_payment_mean = None self.invoice_payments = [] self.invoice_lines = [] + self.invoice_allowance_charge = [] def set_period(self, startdate, enddate): self.invoice_period_start = startdate @@ -228,6 +248,9 @@ class Invoice: def set_operation_type(self, operation): self.invoice_operation_type = operation + def add_allownace_charge(self, charge: AllowanceCharge): + self.invoice_allowance_charge.append(charge) + def add_invoice_line(self, line: InvoiceLine): self.invoice_lines.append(line) @@ -249,8 +272,9 @@ class Invoice: #DIAN 1.7.-2020: FAU10 - # se omite revisar como implementar el booleano - self.invoice_legal_monetary_total.charge_total_amount = 0 + allowance_charges = filter(lambda charge: charge.isCharge(), self.invoice_allowance_charge) + amounts_allowance_charge = map(lambda charge: charge.amount, allowance_charges) + self.invoice_legal_monetary_total.charge_total_amount = sum(amounts_allowance_charge) #DIAN 1.7.-2020: FAU14 parcial self.invoice_legal_monetary_total.payable_amount = self.invoice_legal_monetary_total.tax_inclusive_amount + self.invoice_legal_monetary_total.charge_total_amount diff --git a/tests/test_form.py b/tests/test_form.py index 005b541..b84f19b 100644 --- a/tests/test_form.py +++ b/tests/test_form.py @@ -36,5 +36,32 @@ def test_invoice_legalmonetary(): assert inv.invoice_legal_monetary_total.line_extension_amount == 100.0 assert inv.invoice_legal_monetary_total.tax_exclusive_amount == 100.0 assert inv.invoice_legal_monetary_total.tax_inclusive_amount == 119.0 - # TODO - # assert inv.invoice_legal_monetary_total.charge_total_amount == 19.0 + assert inv.invoice_legal_monetary_total.charge_total_amount == 0.0 + + +def test_FAU10(): + inv = form.Invoice() + inv.add_invoice_line(form.InvoiceLine( + quantity = 1, + description = 'producto facho', + item = form.StandardItem('test', 9999), + price = form.Price( + amount = 100.0, + type_code = '01', + type = 'x' + ), + tax = form.TaxTotal( + subtotals = [ + form.TaxSubTotal( + percent = 19.0, + ) + ] + ) + )) + inv.add_allownace_charge(form.AllowanceCharge(amount=19.0)) + + inv.calculate() + assert inv.invoice_legal_monetary_total.line_extension_amount == 100.0 + assert inv.invoice_legal_monetary_total.tax_exclusive_amount == 100.0 + assert inv.invoice_legal_monetary_total.tax_inclusive_amount == 119.0 + assert inv.invoice_legal_monetary_total.charge_total_amount == 19.0