Actualizar frontend/src/pages/Cobranza.jsx
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user