0% encontró este documento útil (0 votos)
5 vistas1 página

Codigo

El documento describe una serie de rutas de una API para gestionar ventas, notificaciones y administración de usuarios en un sistema de inventario. Incluye funciones para registrar ventas, leer notificaciones, cambiar contraseñas y generar reportes de ventas, así como una nueva ruta para forzar el respaldo por correo. Cada función maneja la interacción con la base de datos y devuelve mensajes de éxito o errores según sea necesario.

Cargado por

urielmock27
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas1 página

Codigo

El documento describe una serie de rutas de una API para gestionar ventas, notificaciones y administración de usuarios en un sistema de inventario. Incluye funciones para registrar ventas, leer notificaciones, cambiar contraseñas y generar reportes de ventas, así como una nueva ruta para forzar el respaldo por correo. Cada función maneja la interacción con la base de datos y devuelve mensajes de éxito o errores según sea necesario.

Cargado por

urielmock27
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

@app.

post("/ventas/nueva")

def registrar_venta(venta: RegistroVenta, db: Session = Depends(get_db)):

prod = [Link](Producto).filter(Producto.codigo_barras == venta.producto_codigo).first()

stock = [Link](Inventario).filter(Inventario.producto_codigo == venta.producto_codigo, Inventario.almacen_id == venta.almacen_id,


[Link] >= [Link]).first()

if not stock: raise HTTPException(status_code=400, detail="Sin stock")

[Link] -= [Link]

total = [Link] * [Link]

[Link](Venta(vendedor_id=venta.vendedor_id, dueno_producto_id=stock.dueno_producto_id, producto_codigo=venta.producto_codigo,


cantidad=[Link], total_dinero=total))

if venta.vendedor_id != stock.dueno_producto_id:

vendedor = [Link](Usuario).filter([Link] == venta.vendedor_id).first()

[Link](Notificacion(usuario_destino_id=stock.dueno_producto_id, mensaje=f"¡Aviso! {[Link]} vendió {[Link]} de tus


{[Link]}."))

[Link]()

return {"mensaje": "Venta exitosa"}

@[Link]("/notificaciones/{uid}")

def leer_notis(uid: int, db: Session = Depends(get_db)):

return [Link](Notificacion).filter(Notificacion.usuario_destino_id == uid, [Link] == False).all()

# --- RUTAS ADMIN ---

@[Link]("/admin/reset-password", dependencies=[Depends(verificar_acceso_maestro)])

def cambiar_password(solicitud: CambioPasswordSimple, db: Session = Depends(get_db)):

u = [Link](Usuario).filter([Link] == solicitud.nombre_usuario_objetivo).first()

if not u: raise HTTPException(status_code=404, detail="Usuario no existe")

u.hashed_password = encriptar_password(solicitud.nueva_password)

[Link]()

return {"mensaje": "Contraseña actualizada"}

@[Link]("/admin/reporte-ventas", dependencies=[Depends(verificar_acceso_maestro)])

def reporte(filtro: FiltroReporte, db: Session = Depends(get_db)):

q = [Link](Venta).filter([Link] >= filtro.fecha_inicio, [Link] <= filtro.fecha_fin)

if filtro.usuario_id: q = [Link](Venta.dueno_producto_id == filtro.usuario_id)

ventas = [Link]()

return {"total_recaudado": sum(v.total_dinero for v in ventas), "detalle": [{"prod": [Link], "total": v.total_dinero} for v in ventas]}

# --- NUEVO: RUTA PARA FORZAR RESPALDO POR CORREO ---

@[Link]("/admin/forzar-respaldo", dependencies=[Depends(verificar_acceso_maestro)])

async def forzar_respaldo(background_tasks: BackgroundTasks):

# Esto ejecuta el envío en segundo plano para no trabar la app

background_tasks.add_task(enviar_correo_respaldo)

return {"mensaje": "El respaldo se está enviando a tu correo en segundo plano."}

También podría gustarte