Diagramas

Explicación:

  1. Se arma la ruta del archivo bebidas_menu.csv que está en la carpeta de catálogos.
  2. Se abre el archivo con utf-8-sig para no tener problemas con acentos.
  3. Se usa csv.DictReader para leer cada fila como un diccionario.
  4. Se limpia cada valor (.strip()) y se convierten tipos: precios a float, activo a int.
  5. Se devuelve una lista de diccionarios, cada uno representando una bebida.

Notas:

Las funciones leer_bakery() y leer_modificadores() siguen exactamente el mismo patron, cambiando solo las columnas especificas de cada catalogo.

carpeta_catalogo = Path("datos/catalogos")

#Definir la primera función para leer catálogo de bebidas
def leer_bebidas():

# Creamos la ruta completa al archivo CSV
    ruta = carpeta_catalogo / "bebidas_menu.csv"

# Abrimos el archivo y leemos su contenido y lo almacenamos en un diccionario en f 
    with open(ruta, newline="", encoding='utf-8-sig') as f:
        # leer el archivo CSV y indicar que el delimitador es una coma
        archivo = csv.DictReader(f, delimiter=',')
        bebidas = []
        for fila in archivo:
# Agregamos cada fila del archivo CSV a la lista bebidas
            bebidas.append({"id_bebida": fila["id_bebida"].strip(),"nombre": fila["nombre"].strip(), "precios_base": float(fila["precios_base"]),"categoria": fila.get("categoria", "").strip(),"activo": int(fila["activo"])})
    return bebidas

# Probamos la función
if __name__ == "__main__":
    print(leer_bebidas())

CleanShot 2025-09-25 at 22.24.44@2x.png

CleanShot 2025-09-25 at 22.25.25@2x.png

import tkinter as tk # importar librería para utilizar métodos de Tkinter
from tkinter import messagebox # mensajes emergentes
import datetime
import data_io
pedido_actual = {
    "fecha_hora": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
    "lineas": [],
    "total": 0.0}
id_linea_actual = 0

def abrir_ventana_pedido():
    """Implementa la lógica para abrir la venta de nuevo pedido"""
    ventana_pedido = tk.Toplevel(ventana)
    ventana_pedido.title("Café el economista")
    ventana_pedido.geometry("400x350")

    tk.Label(ventana_pedido, text="Nuevo Pedido", font=("Arial", 14)).pack(pady=20)
    def cancelar_pedido():
        confirmar = messagebox.askyesno("Cancelar pedido", "¿Realmente desea cancelar el pedido?")
        if confirmar:
            pedido_actual["lineas"].clear()
            pedido_actual["total"] = 0.0
            pedido_actual["fecha_hora"] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            global id_linea_actual
            id_linea_actual = 0
            messagebox.showinfo("Pedido cancelado", "El pedido fue cancelado correctamente.")
            ventana_pedido.destroy()

    # Botones del menú de pedido
    tk.Button(ventana_pedido, text="Bebidas", width=25, command=mostrar_bebidas).pack(pady=5)
    tk.Button(ventana_pedido, text="Bakery", width=25, command=mostrar_bakery).pack(pady=5)
    tk.Button(ventana_pedido, text="Ver pedido",width=25, command=ver_pedido).pack(pady=10)
    tk.Button(ventana_pedido, text="Pagar pedido", width=25, command=pagar_pedido).pack(pady=5)
    tk.Button(ventana_pedido, text="Cancelar pedido", width=25, command=cancelar_pedido).pack(pady=20)
BEBIDAS = data_io.leer_bebidas()
BAKERY = data_io.leer_bakery()
MODIFICADORES = data_io.leer_modificadores()

    # Filtrar bebidas activas
    bebidas_activas = []
    for bebida in BEBIDAS:
        if bebida["activo"] == 1:
            bebidas_activas.append(bebida)

CleanShot 2025-09-25 at 22.54.03@2x.png

CleanShot 2025-09-25 at 22.21.21@2x.png