Ejercicio 6

Definir una función que reciba una lista de facturas, un NIF y un mes, y devuelva un diccionario con el número de facturas emitidas a ese NIF en el mes indicado y el total facturado en ese mes.

La función debe cumplir los siguientes requisitos:

  • Los parámetros de entrada serán una lista de facturas, una cadena con un NIF y otra cadena con el mes.
  • Cada factura se representarán mediante un diccionario con las claves nif (NIF del cliente), mes (mes de emisión de la factura), cantidad (cantidad facturada sin IVA), iva (porcentaje de IVA a aplicar).
  • Se debe crear una lista con el total de cada factura (una vez aplicado el IVA) para el NIF y el mes indicados utilizando programación funcional o comprensión de listas.
  • La función debe devolver un diccionario con el número de facturas y el total facturado al NIF en el mes indicado.

Solución


In [1]:
def facturacion(facturas, nif, mes):
    """
    Función que recibe una lista de facturas y devuelve el número de facturas y el total facturado correspondiente a un nif y mes indicados.
    Parámetros:
        - facturas: Es una lista de facturas, donde cada factura es un diccionario con las claves nif, mes, cantidad e iva.
        - nif: Es una cadena con un nif.
        - mes: Es una cadena con el nombre de un mes.
    Devuelve:
        Un diccionario con el número de facturas y el total facturado (incluído el iva) al nif indicado en el mes indicado.
    """
    # Filtramos la lista para quedarnos con la lista de las cantidades de cada diccionario que tenga el nif y el mes indicados
    filtro = [factura['cantidad'] * (1 + factura['iva'] / 100) for factura in facturas if (factura['nif'] == nif and factura['mes'] == mes)]
    # Devolvemos un diccionario con la longitud de la lista (número de facturas) y la suma de sus valores (total facturado)
    return {'Num facturas': len(filtro), 'Total facturado': sum(filtro)}


# Lista de facturas de prueba
facturas = [{'nif': 'B12345678', 'mes': 'marzo', 'cantidad':1000, 'iva': 10},
            {'nif': 'A98765432', 'mes': 'julio', 'cantidad':500, 'iva': 21},
            {'nif': 'B12345678', 'mes': 'marzo', 'cantidad':2000, 'iva': 21},
            {'nif': 'C02040506', 'mes': 'enero', 'cantidad':200, 'iva': 4},
            {'nif': 'A98765432', 'mes': 'julio', 'cantidad':1500, 'iva': 10},
            {'nif': 'B12345678', 'mes': 'abril', 'cantidad':600, 'iva': 10},
            {'nif': 'B12345678', 'mes': 'marzo', 'cantidad':100, 'iva': 4}]

# Llamadas a la función de prueba
print(facturacion(facturas, 'B12345678', 'marzo'))
print(facturacion(facturas, 'B12345678', 'abril'))
print(facturacion(facturas, 'B12345678', 'agosto'))


{'Num facturas': 3, 'Total facturado': 3624.0}
{'Num facturas': 1, 'Total facturado': 660.0}
{'Num facturas': 0, 'Total facturado': 0}

In [ ]: