facho/fe/form.py (Price): nueva clase

FossilOrigin-Name: b33bec5acbb385713c52ae08829b51966c5e7e3c12491d7a2e35e83e988d0a81
This commit is contained in:
bit4bit@riseup.net 2020-06-19 02:46:09 +00:00
parent dfeb071709
commit 8bfbc3fa20
3 changed files with 20 additions and 7 deletions

View File

@ -213,7 +213,8 @@ class FachoXML:
elem = self.get_element(xpath)
for k, v in attrs.items():
self.builder.set_attribute(elem, k, v)
return self
def get_element(self, xpath):
xpath = self.fragment_prefix + self._normalize_xpath(xpath)
return self.builder.xpath(self.root, xpath)

View File

@ -78,6 +78,12 @@ class TaxTotal:
self.tax_amount += subtax.tax_amount
self.taxable_amount += subtax.taxable_amount
@dataclass
class Price:
amount: float
type_code: str
type: str
@dataclass
class InvoiceLine:
@ -85,12 +91,12 @@ class InvoiceLine:
quantity: int
description: str
item: Item
price_amount: float
price: Price
tax: TaxTotal
@property
def total_amount(self):
return self.quantity * self.price_amount
return self.quantity * self.price.amount
@property
def total_tax_inclusive_amount(self):
@ -293,6 +299,12 @@ class DIANInvoiceXML(fe.FeXML):
line.set_element('/cac:InvoiceLine/cbc:InvoicedQuantity', invoice_line.quantity, unitCode = 'NAR')
line.set_element('/cac:InvoiceLine/cbc:LineExtensionAmount', invoice_line.total_amount, currencyID="COP")
line.set_element('/cac:InvoiceLine/cac:TaxTotal/cbc:TaxAmount', invoice_line.tax_amount, currencyID='COP')
condition_price = line.fragment('/cac:InvoiceLine/cac:PricingReference/cac:AlternativeConditionPrice')
condition_price.set_element('/cac:AlternativeConditionPrice/cbc:PriceAmount', invoice_line.price.amount, currencyID='COP')
condition_price.set_element('/cac:AlternativeConditionPrice/cbc:PriceTypeCode', invoice_line.price.type_code)
condition_price.set_element('/cac:AlternativeConditionPrice/cbc:PriceType', invoice_line.price.type)
for subtotal in invoice_line.tax.subtotals:
line.set_element('/cac:InvoiceLine/cac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount', subtotal.taxable_amount, currencyID='COP')
line.set_element('/cac:InvoiceLine/cac:TaxTotal/cac:TaxSubtotal/cbc:TaxAmount', subtotal.tax_amount, currencyID='COP')
@ -302,7 +314,7 @@ class DIANInvoiceXML(fe.FeXML):
line.set_element('/cac:InvoiceLine/cac:Item/cbc:Description', invoice_line.item.description)
# TODO
line.set_element('/cac:InvoiceLine/cac:Item/cac:StandardItemIdentification/cbc:ID', invoice_line.item.id)
line.set_element('/cac:InvoiceLine/cac:Price/cbc:PriceAmount', invoice_line.price_amount, currencyID="COP")
line.set_element('/cac:InvoiceLine/cac:Price/cbc:PriceAmount', invoice_line.price.amount, currencyID="COP")
def attach_invoice(fexml, invoice):
"""adiciona etiquetas a FEXML y retorna FEXML

View File

@ -58,7 +58,7 @@ def simple_invoice():
quantity = 1,
description = 'producto facho',
item = form.StandardItem('test', 9999),
price_amount = 100.0,
price = form.Price(100.0, '', ''),
tax = form.TaxTotal(
tax_amount = 0.0,
taxable_amount = 0.0,
@ -154,7 +154,7 @@ def test_invoice_totals(simple_invoice_without_lines):
quantity = 1,
description = 'producto',
item = form.StandardItem('test', 9999),
price_amount = 1_500_000,
price = form.Price(1_500_000, '', ''),
tax = form.TaxTotal(
subtotals = [
form.TaxSubTotal(
@ -177,7 +177,7 @@ def test_invoice_cufe(simple_invoice_without_lines):
quantity = 1,
description = 'producto',
item = form.StandardItem('test', 111),
price_amount = 1_500_000,
price = form.Price(1_500_000, '', ''),
tax = form.TaxTotal(
subtotals = [
form.TaxSubTotal(