Actualizar frontend/src/pages/Cobranza.jsx

This commit is contained in:
2026-09-01 12:10:44 -05:00
parent e39f979482
commit 098adbe59e

View File

@@ -127,7 +127,7 @@ export default function Cobranza() {
// Cargar matrículas POR RETIRAR (para el "Saldo por Retirar" de las tarjetas)
const [porRetirar, setPorRetirar] = useState(new Set());
useEffect(() => {
api.alumnosPorRetirar()
api.alumnosPorRetirar(ano, mes)
.then((r) => setPorRetirar(new Set((r.matriculas || []).map(String))))
.catch(() => {});
}, [ano, mes]);
@@ -601,6 +601,7 @@ export default function Cobranza() {
alumnos={alumnosFiltrados}
agrupacion={agrupacion}
sectorista={sectorista}
ano={ano} mes={mes}
onClose={() => setBuscadorAbierto(false)}
/>
)}
@@ -779,18 +780,18 @@ function TarjetasResumen({ r, retiro }) {
);
}
function ModalBuscador({ alumnos, agrupacion, sectorista, onClose }) {
function ModalBuscador({ alumnos, agrupacion, sectorista, ano, mes, onClose }) {
const [texto, setTexto] = useState("");
const [query, setQuery] = useState("");
const [porRetirar, setPorRetirar] = useState(new Set()); // matrículas POR RETIRAR
const [infoAlumno, setInfoAlumno] = useState(null); // alumno del pop-up INFO
const cargarPorRetirar = () => {
api.alumnosPorRetirar()
api.alumnosPorRetirar(ano, mes)
.then((r)=>setPorRetirar(new Set((r.matriculas||[]).map(String))))
.catch(()=>{});
};
useEffect(() => { cargarPorRetirar(); }, []);
useEffect(() => { cargarPorRetirar(); }, [ano, mes]);
const resultados = useMemo(() => {
const q = query.trim().toLowerCase();
@@ -926,7 +927,7 @@ function ModalBuscador({ alumnos, agrupacion, sectorista, onClose }) {
</>
)}
{infoAlumno && (
<ModalInfoAlumno alumno={infoAlumno} onClose={()=>setInfoAlumno(null)}
<ModalInfoAlumno alumno={infoAlumno} ano={ano} mes={mes} onClose={()=>setInfoAlumno(null)}
onGuardado={cargarPorRetirar} />
)}
</Modal>
@@ -950,11 +951,11 @@ function ModalEstadoCuenta({ grupo, ano, mes, sectorista, agrupacion, progFiltro
// Cargar (y recargar) las matrículas marcadas POR RETIRAR para tachar sus filas
const cargarPorRetirar = () => {
api.alumnosPorRetirar()
api.alumnosPorRetirar(ano, mes)
.then((r) => setPorRetirar(new Set((r.matriculas || []).map(String))))
.catch(() => {});
};
useEffect(() => { cargarPorRetirar(); }, []);
useEffect(() => { cargarPorRetirar(); }, [ano, mes]);
const COLS = ["PROGRAMA","ALUMNO","N° CUOTA","F. VENC.","CTA ANT.","COB ANT.","% ANT","CTA MES","COB MES","% MES","CTA TOT","COB TOT","% TOT","SALDO","INFO"];
@@ -1194,7 +1195,7 @@ function ModalEstadoCuenta({ grupo, ano, mes, sectorista, agrupacion, progFiltro
</div>
</>}
{infoAlumno && (
<ModalInfoAlumno alumno={infoAlumno} onClose={()=>setInfoAlumno(null)}
<ModalInfoAlumno alumno={infoAlumno} ano={ano} mes={mes} onClose={()=>setInfoAlumno(null)}
onGuardado={cargarPorRetirar} />
)}
</Modal>
@@ -1203,7 +1204,7 @@ function ModalEstadoCuenta({ grupo, ano, mes, sectorista, agrupacion, progFiltro
// Pop-up de INFO por alumno: cambiar estado (EN CURSO / POR RETIRAR) y observaciones.
// Carga y guarda en Supabase (tabla cobranza_alumno_estado).
function ModalInfoAlumno({ alumno, onClose, onGuardado }) {
function ModalInfoAlumno({ alumno, ano, mes, onClose, onGuardado }) {
const [estado, setEstado] = useState("EN CURSO"); // EN CURSO | POR RETIRAR
const [nuevaObs, setNuevaObs] = useState("");
const [observaciones, setObservaciones] = useState([]);
@@ -1214,12 +1215,12 @@ function ModalInfoAlumno({ alumno, onClose, onGuardado }) {
// Cargar estado/observaciones actuales del alumno al abrir
useEffect(() => {
let activo = true;
api.alumnoEstado(alumno.matricula)
api.alumnoEstado(alumno.matricula, ano, mes)
.then((r)=>{ if(activo){ setEstado(r.estado||"EN CURSO"); setObservaciones(r.observaciones||[]); } })
.catch(()=>{})
.finally(()=>{ if(activo) setCargando(false); });
return ()=>{ activo=false; };
}, [alumno.matricula]);
}, [alumno.matricula, ano, mes]);
const agregarObs = () => {
const t = nuevaObs.trim();
@@ -1233,7 +1234,7 @@ function ModalInfoAlumno({ alumno, onClose, onGuardado }) {
const guardar = async () => {
setGuardando(true); setGuardado(false);
try {
await api.alumnoEstadoGuardar(alumno.matricula, estado, observaciones);
await api.alumnoEstadoGuardar(alumno.matricula, ano, mes, estado, observaciones);
setGuardado(true);
if (onGuardado) onGuardado(); // refresca el tachado en la tabla
} catch {