From 7093a7cc5aa6bc8a034aa81c72c6edc8b17efc93 Mon Sep 17 00:00:00 2001 From: hecrocsoc-cpu Date: Tue, 19 May 2026 16:22:24 +0100 Subject: [PATCH] =?UTF-8?q?A=C3=B1adir=20script=20de=20ventas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- analisis.py | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++ informe.json | 11 +++++++ ventas.json | 9 ++++++ 3 files changed, 106 insertions(+) create mode 100644 analisis.py create mode 100644 informe.json create mode 100644 ventas.json diff --git a/analisis.py b/analisis.py new file mode 100644 index 0000000..03a416b --- /dev/null +++ b/analisis.py @@ -0,0 +1,86 @@ +import json +from datetime import datetime + + +def cargar_ventas(ruta_archivo): + """Lee el archivo JSON y devuelve la lista de ventas.""" + with open(ruta_archivo, "r", encoding="utf-8") as archivo: + return json.load(archivo) + + +def calcular_total_venta(venta): + """Devuelve precio * cantidad para una venta.""" + return venta["precio"] * venta["cantidad"] + + +def ventas_por_categoria(ventas): + """Agrupa las ventas por categoría. Devuelve un dict: { "categoria": total_euros }""" + resultado = {} + for venta in ventas: + categoria = venta["categoria"] + total = calcular_total_venta(venta) + if categoria in resultado: + resultado[categoria] += total + else: + resultado[categoria] = total + return resultado + + +def producto_mas_vendido(ventas): + """Devuelve el nombre del producto con mayor ingreso total.""" + mejor = max(ventas, key=calcular_total_venta) + return mejor["producto"], calcular_total_venta(mejor) + + +def ventas_en_fecha(ventas, fecha_str): + """Filtra ventas de una fecha específica (formato YYYY-MM-DD).""" + return [v for v in ventas if v["fecha"] == fecha_str] + + +def guardar_informe(informe, ruta): + """Guarda el informe en un archivo JSON.""" + with open(ruta, "w", encoding="utf-8") as archivo: + json.dump(informe, archivo, indent=2, ensure_ascii=False) + + +def main(): + # Cargar datos + ventas = cargar_ventas("ventas.json") + + # Calcular datos + total_ventas = len(ventas) + ingresos_totales = sum(calcular_total_venta(v) for v in ventas) + categorias = ventas_por_categoria(ventas) + producto_top, ingreso_top = producto_mas_vendido(ventas) + ventas_16 = ventas_en_fecha(ventas, "2026-01-16") + + # Mostrar informe + print("============================") + print(" INFORME DE VENTAS") + print("============================") + print(f"\nTotal de ventas: {total_ventas}") + print(f"Ingresos totales: {ingresos_totales:,.2f} €\n") + + print("--- Por categoría ---") + for categoria, total in categorias.items(): + print(f"{categoria}: {total:,.2f} €") + + print(f"\nProducto más rentable: {producto_top} ({ingreso_top:,.2f} €)") + + print("\n--- Ventas del 16/01/2026 ---") + for v in ventas_16: + print(f"- {v['producto']}: {calcular_total_venta(v):,.2f} €") + + # Guardar informe JSON + informe = { + "generado_en": datetime.now().isoformat(), + "total_ventas": total_ventas, + "ingresos_totales": round(ingresos_totales, 2), + "por_categoria": {k: round(v, 2) for k, v in categorias.items()}, + "producto_top": producto_top + } + guardar_informe(informe, "informe.json") + print("\n✅ Informe guardado en informe.json") + + +main() \ No newline at end of file diff --git a/informe.json b/informe.json new file mode 100644 index 0000000..e9cf05d --- /dev/null +++ b/informe.json @@ -0,0 +1,11 @@ +{ + "generado_en": "2026-05-19T16:18:53.382507", + "total_ventas": 7, + "ingresos_totales": 4519.74, + "por_categoria": { + "electronica": 3419.86, + "muebles": 799.98, + "libros": 299.9 + }, + "producto_top": "Laptop" +} \ No newline at end of file diff --git a/ventas.json b/ventas.json new file mode 100644 index 0000000..6c5022e --- /dev/null +++ b/ventas.json @@ -0,0 +1,9 @@ +[ + { "id": 1, "producto": "Laptop", "precio": 899.99, "cantidad": 2, "categoria": "electronica", "fecha": "2026-01-15" }, + { "id": 2, "producto": "Teclado", "precio": 49.99, "cantidad": 5, "categoria": "electronica", "fecha": "2026-01-16" }, + { "id": 3, "producto": "Silla", "precio": 299.99, "cantidad": 1, "categoria": "muebles", "fecha": "2026-01-16" }, + { "id": 4, "producto": "Monitor", "precio": 349.99, "cantidad": 3, "categoria": "electronica", "fecha": "2026-01-17" }, + { "id": 5, "producto": "Libro Python", "precio": 29.99, "cantidad": 10, "categoria": "libros", "fecha": "2026-01-18" }, + { "id": 6, "producto": "Escritorio", "precio": 499.99, "cantidad": 1, "categoria": "muebles", "fecha": "2026-01-18" }, + { "id": 7, "producto": "Auriculares", "precio": 79.99, "cantidad": 4, "categoria": "electronica", "fecha": "2026-01-19" } +] \ No newline at end of file