fache/fe/form: Quantity require UnidadesMedida.
FossilOrigin-Name: 675900c1251c0b7319dc8b395ce5d385297209197ce13b0ee5358b4ce619d9a8
This commit is contained in:
		| @@ -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( | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user