fache/fe/form: Quantity require UnidadesMedida.
FossilOrigin-Name: 675900c1251c0b7319dc8b395ce5d385297209197ce13b0ee5358b4ce619d9a8
This commit is contained in:
parent
ee58dba82f
commit
44827fe811
@ -71,6 +71,7 @@ __all__ = ['TipoOrganizacion',
|
|||||||
'TipoAmbiente',
|
'TipoAmbiente',
|
||||||
'TipoDocumento',
|
'TipoDocumento',
|
||||||
'TipoImpuesto',
|
'TipoImpuesto',
|
||||||
|
'UnidadesMedida',
|
||||||
'CodigoPrecioReferencia',
|
'CodigoPrecioReferencia',
|
||||||
'MediosPago',
|
'MediosPago',
|
||||||
'RegimenFiscal',
|
'RegimenFiscal',
|
||||||
@ -98,3 +99,4 @@ Departamento = CodeList(path_for_codelist('Departamentos-2.1.gc'), 'code', 'name
|
|||||||
Paises = CodeList(path_for_codelist('Paises-2.1.gc'), 'code', 'name')
|
Paises = CodeList(path_for_codelist('Paises-2.1.gc'), 'code', 'name')
|
||||||
TipoIdFiscal = CodeList(path_for_codelist('TipoIdFiscal-2.1.gc'), 'code', 'name')
|
TipoIdFiscal = CodeList(path_for_codelist('TipoIdFiscal-2.1.gc'), 'code', 'name')
|
||||||
CodigoDescuento = CodeList(path_for_codelist('CodigoDescuento-2.1.gc'), 'code', 'name')
|
CodigoDescuento = CodeList(path_for_codelist('CodigoDescuento-2.1.gc'), 'code', 'name')
|
||||||
|
UnidadesMedida = CodeList(path_for_codelist('UnidadesMedida-2.1.gc'), 'code', 'name')
|
||||||
|
@ -113,8 +113,30 @@ class Amount:
|
|||||||
return round(self.amount, DECIMAL_PRECISION)
|
return round(self.amount, DECIMAL_PRECISION)
|
||||||
|
|
||||||
|
|
||||||
class Quantity(Amount):
|
class Quantity:
|
||||||
pass
|
|
||||||
|
def __init__(self, val, code):
|
||||||
|
if not isinstance(val, int):
|
||||||
|
raise ValueError('val expected int')
|
||||||
|
if code not in codelist.UnidadesMedida:
|
||||||
|
raise ValueError("code [%s] not found" % (code))
|
||||||
|
|
||||||
|
self.value = val
|
||||||
|
self.code = code
|
||||||
|
|
||||||
|
def __mul__(self, other):
|
||||||
|
if isinstance(other, Amount):
|
||||||
|
return Amount(self.value) * other
|
||||||
|
return self.value * other
|
||||||
|
|
||||||
|
def __lt__(self, other):
|
||||||
|
if isinstance(other, Amount):
|
||||||
|
return Amount(self.value) < other
|
||||||
|
return self.value < other
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.value)
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Item:
|
class Item:
|
||||||
|
@ -523,7 +523,9 @@ class DIANInvoiceXML(fe.FeXML):
|
|||||||
|
|
||||||
line.set_element('./cac:Price/cbc:PriceAmount', invoice_line.price.amount, currencyID="COP")
|
line.set_element('./cac:Price/cbc:PriceAmount', invoice_line.price.amount, currencyID="COP")
|
||||||
#DIAN 1.7.-2020: FBB04
|
#DIAN 1.7.-2020: FBB04
|
||||||
line.set_element('./cac:Price/cbc:BaseQuantity', invoice_line.price.amount)
|
line.set_element('./cac:Price/cbc:BaseQuantity',
|
||||||
|
invoice_line.quantity,
|
||||||
|
unitCode=invoice_line.quantity.code)
|
||||||
|
|
||||||
|
|
||||||
def attach_invoice(fexml, invoice):
|
def attach_invoice(fexml, invoice):
|
||||||
|
@ -129,7 +129,7 @@ def simple_invoice():
|
|||||||
form.CountrySubentity('05', 'Antioquia'))
|
form.CountrySubentity('05', 'Antioquia'))
|
||||||
))
|
))
|
||||||
inv.add_invoice_line(form.InvoiceLine(
|
inv.add_invoice_line(form.InvoiceLine(
|
||||||
quantity = form.Quantity(1),
|
quantity = form.Quantity(1, '94'),
|
||||||
description = 'producto facho',
|
description = 'producto facho',
|
||||||
item = form.StandardItem( 9999),
|
item = form.StandardItem( 9999),
|
||||||
price = form.Price(form.Amount(100.0), '01', ''),
|
price = form.Price(form.Amount(100.0), '01', ''),
|
||||||
|
@ -89,7 +89,7 @@ def test_invoice_totals(simple_invoice_without_lines):
|
|||||||
simple_invoice.invoice_supplier.ident = '700085371'
|
simple_invoice.invoice_supplier.ident = '700085371'
|
||||||
simple_invoice.invoice_customer.ident = '800199436'
|
simple_invoice.invoice_customer.ident = '800199436'
|
||||||
simple_invoice.add_invoice_line(form.InvoiceLine(
|
simple_invoice.add_invoice_line(form.InvoiceLine(
|
||||||
quantity = form.Quantity(1),
|
quantity = form.Quantity(1, '94'),
|
||||||
description = 'producto',
|
description = 'producto',
|
||||||
item = form.StandardItem(9999),
|
item = form.StandardItem(9999),
|
||||||
price = form.Price(form.Amount(1_500_000), '01', ''),
|
price = form.Price(form.Amount(1_500_000), '01', ''),
|
||||||
@ -112,7 +112,7 @@ def test_invoice_cufe(simple_invoice_without_lines):
|
|||||||
simple_invoice.invoice_supplier.ident = form.PartyIdentification('700085371', '5', '31')
|
simple_invoice.invoice_supplier.ident = form.PartyIdentification('700085371', '5', '31')
|
||||||
simple_invoice.invoice_customer.ident = form.PartyIdentification('800199436', '5', '31')
|
simple_invoice.invoice_customer.ident = form.PartyIdentification('800199436', '5', '31')
|
||||||
simple_invoice.add_invoice_line(form.InvoiceLine(
|
simple_invoice.add_invoice_line(form.InvoiceLine(
|
||||||
quantity = form.Quantity(1),
|
quantity = form.Quantity(1, '94'),
|
||||||
description = 'producto',
|
description = 'producto',
|
||||||
item = form.StandardItem(111),
|
item = form.StandardItem(111),
|
||||||
price = form.Price(form.Amount(1_500_000), '01', ''),
|
price = form.Price(form.Amount(1_500_000), '01', ''),
|
||||||
@ -177,7 +177,7 @@ def test_credit_note_cude(simple_credit_note_without_lines):
|
|||||||
simple_invoice.invoice_supplier.ident = form.PartyIdentification('900373076', '5', '31')
|
simple_invoice.invoice_supplier.ident = form.PartyIdentification('900373076', '5', '31')
|
||||||
simple_invoice.invoice_customer.ident = form.PartyIdentification('8355990', '5', '31')
|
simple_invoice.invoice_customer.ident = form.PartyIdentification('8355990', '5', '31')
|
||||||
simple_invoice.add_invoice_line(form.InvoiceLine(
|
simple_invoice.add_invoice_line(form.InvoiceLine(
|
||||||
quantity = form.Quantity(1),
|
quantity = form.Quantity(1, '94'),
|
||||||
description = 'producto',
|
description = 'producto',
|
||||||
item = form.StandardItem(111),
|
item = form.StandardItem(111),
|
||||||
price = form.Price(form.Amount(5_000), '01', ''),
|
price = form.Price(form.Amount(5_000), '01', ''),
|
||||||
@ -212,7 +212,7 @@ def test_debit_note_cude(simple_debit_note_without_lines):
|
|||||||
simple_invoice.invoice_supplier.ident = form.PartyIdentification('900197264', '5', '31')
|
simple_invoice.invoice_supplier.ident = form.PartyIdentification('900197264', '5', '31')
|
||||||
simple_invoice.invoice_customer.ident = form.PartyIdentification('10254102', '5', '31')
|
simple_invoice.invoice_customer.ident = form.PartyIdentification('10254102', '5', '31')
|
||||||
simple_invoice.add_invoice_line(form.InvoiceLine(
|
simple_invoice.add_invoice_line(form.InvoiceLine(
|
||||||
quantity = form.Quantity(1),
|
quantity = form.Quantity(1, '94'),
|
||||||
description = 'producto',
|
description = 'producto',
|
||||||
item = form.StandardItem(111),
|
item = form.StandardItem(111),
|
||||||
price = form.Price(form.Amount(30_000), '01', ''),
|
price = form.Price(form.Amount(30_000), '01', ''),
|
||||||
|
@ -16,7 +16,7 @@ from facho import fe
|
|||||||
def test_invoice_legalmonetary():
|
def test_invoice_legalmonetary():
|
||||||
inv = form.NationalSalesInvoice()
|
inv = form.NationalSalesInvoice()
|
||||||
inv.add_invoice_line(form.InvoiceLine(
|
inv.add_invoice_line(form.InvoiceLine(
|
||||||
quantity = form.Quantity(1),
|
quantity = form.Quantity(1, '94'),
|
||||||
description = 'producto facho',
|
description = 'producto facho',
|
||||||
item = form.StandardItem(9999),
|
item = form.StandardItem(9999),
|
||||||
price = form.Price(
|
price = form.Price(
|
||||||
@ -42,7 +42,7 @@ def test_invoice_legalmonetary():
|
|||||||
def test_FAU10():
|
def test_FAU10():
|
||||||
inv = form.NationalSalesInvoice()
|
inv = form.NationalSalesInvoice()
|
||||||
inv.add_invoice_line(form.InvoiceLine(
|
inv.add_invoice_line(form.InvoiceLine(
|
||||||
quantity = form.Quantity(1),
|
quantity = form.Quantity(1, '94'),
|
||||||
description = 'producto facho',
|
description = 'producto facho',
|
||||||
item = form.StandardItem(9999),
|
item = form.StandardItem(9999),
|
||||||
price = form.Price(
|
price = form.Price(
|
||||||
@ -70,7 +70,7 @@ def test_FAU10():
|
|||||||
def test_FAU14():
|
def test_FAU14():
|
||||||
inv = form.NationalSalesInvoice()
|
inv = form.NationalSalesInvoice()
|
||||||
inv.add_invoice_line(form.InvoiceLine(
|
inv.add_invoice_line(form.InvoiceLine(
|
||||||
quantity = form.Quantity(1),
|
quantity = form.Quantity(1, '94'),
|
||||||
description = 'producto facho',
|
description = 'producto facho',
|
||||||
item = form.StandardItem(9999),
|
item = form.StandardItem(9999),
|
||||||
price = form.Price(
|
price = form.Price(
|
||||||
|
Loading…
Reference in New Issue
Block a user