3. Factures¶
Una empresa vol calcular les línies d’una factura a partir de la informació de comandes, productes i tipus d’IVA.
Abans de tractar tota aquesta informació, primer generarem línies de factura a partir de l’SKU del producte (un codi alfanumèric), les unitats demanades, el preu i el tipus d’IVA. A una línia de factura, l’import sense impostos és la quantitat multiplicada pel preu i l’import amb impostos és l’import sense impostos més el tant per cent que correspon a un tipus d’IVA.
Dissenya la funció següent i desa-la al mòdul factures (fitxer factures.py):
- factures.linia_factura(sku, quantitat, preu, perc_iva)¶
Retorna una tupla amb tota la informació d’una línia de factura.
- Paràmetres:
- Tipus de retorn:
- Retorna:
tupla amb tota la informació d’una línia de factura: sku, quantitat, preu, perc_iva, import sense impostos i import amb impostos.
Tant l’import sense impostos com l’import amb impostos han d’estar arrodonits a dos decimals.
Per exemple:
>>> linia = linia_factura('ZT003', 13, 5.02, 10) >>> linia ('ZT003', 13, 5.02, 10, 65.26, 71.79) >>> linia = linia_factura('XR274', 6, 12, 21) >>> linia ('XR274', 6, 12, 21, 72, 87.12)
Nota
Disposes de més tests al fitxer
test-linia_factura.txt.
D’altra banda, l’empresa disposa d’informació de les comandes. Una comanda és una llista de tuples amb l’identificador d’un producte i la quantitat encarregada. Per exemple:
>>> com1 = [(2, 10), (23, 13), (7, 15),
... (3, 5), (4, 12), (18, 6),
... ]
La informació sobre els productes està en un diccionari en què les claus són identificadors del producte i els valors associats són una tupla amb l’SKU (un codi alfanumèric), el tipus d’IVA i el preu. Per exemple:
>>> prods = {
... 3: ('XR007', 'normal', 3),
... 7: ('XR045', 'reduït', 2.5),
... 9: ('ZT921', 'general', 9.33),
... 18: ('XR274', 'general', 12),
... 23: ('ZT003', 'reduït', 5.02),
... }
El tant per cent que correspon a cada tipus d’IVA també està en un diccionari en què les claus són el tipus d’IVA i els valors el tant per cent. Per exemple:
>>> iva = {
... 'general': 21, 'reduït': 10, 'superreduït': 4, 'zero': 0
... }
Dissenya la funció següent i desa-la al mòdul factures (fitxer factures.py):
- factures.linies_factura(comanda, productes, iva)¶
Retorna una tupla de dues llistes amb les línies de factura vàlides i els productes dels quals no hi ha informació disponible.
- Paràmetres:
comanda (list) – Llista de tuples amb l’identificador d’un producte i la quantitat encarregada.
productes (dict) – Diccionari on les claus són identificadors de producte i els valors són tuples amb l’SKU (string), el tipus d’IVA (string) i el preu (int/float).
iva (dict) – diccionari en què les claus són el tipus d’IVA (string) i els valors el tant per cent corresponent.
- Tipus de retorn:
- Retorna:
tupla amb dues llistes:
Llista amb la informació d’una línia de factura per cada element de comanda que tingui un codi present a productes i el seu tipus d’IVA estigui present a iva.
Llista amb els codis dels productes de comanda que no es troben a productes.
Per exemple, amb la llista com1 i els diccionaris prods i iva anteriors:
>>> linies1, pi = linies_factura(com1, prods, iva) >>> pprint(linies1) [('ZT003', 13, 5.02, 10, 65.26, 71.79), ('XR045', 15, 2.5, 10, 37.5, 41.25), ('XR274', 6, 12, 21, 72, 87.12)] >>> pi [2, 4]
Nota
Disposes de més tests al fitxer
test-linies_factura.txt.Important
Cal que
linies_factura()cridilinia_factura().Disposes de solucions al fitxer
factures.py.