diff --git a/backend/services.py b/backend/services.py index a0eceb3..cbf546e 100644 --- a/backend/services.py +++ b/backend/services.py @@ -643,6 +643,37 @@ def _sb(): raise RuntimeError("Supabase no está conectado") return dm.supabase_client +# ── Estado/observaciones por alumno (tabla cobranza_estado_alumno) ── +def alumno_estado_obtener(matricula): + """Devuelve {estado, observaciones} de un alumno. Si no existe, valores por defecto.""" + sb = _sb() + res = sb.table("cobranza_estado_alumno").select("*").eq("matricula", str(matricula)).execute() + fila = (res.data or [None])[0] + if not fila: + return {"estado": "EN CURSO", "observaciones": []} + return {"estado": fila.get("estado") or "EN CURSO", + "observaciones": fila.get("observaciones") or []} + +def alumno_estado_guardar(matricula, estado, observaciones, usuario=None): + """Guarda (upsert) el estado y la lista de observaciones del alumno.""" + sb = _sb() + from datetime import datetime, timezone + payload = { + "matricula": str(matricula), + "estado": estado or "EN CURSO", + "observaciones": observaciones or [], + "actualizado_en": datetime.now(timezone.utc).isoformat(), + "actualizado_por": usuario or None, + } + sb.table("cobranza_estado_alumno").upsert(payload).execute() + return {"status": "ok"} + +def alumnos_por_retirar(): + """Lista de matrículas marcadas como POR RETIRAR (para tachar la fila en la tabla).""" + sb = _sb() + res = sb.table("cobranza_estado_alumno").select("matricula").eq("estado", "POR RETIRAR").execute() + return {"matriculas": [str(r["matricula"]) for r in (res.data or [])]} + def usuarios_listar(): sb = _sb() perfiles = sb.table("perfiles").select("id, nombre, rol, activo").execute().data or []