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)
|
// Cargar matrículas POR RETIRAR (para el "Saldo por Retirar" de las tarjetas)
|
||||||
const [porRetirar, setPorRetirar] = useState(new Set());
|
const [porRetirar, setPorRetirar] = useState(new Set());
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
api.alumnosPorRetirar()
|
api.alumnosPorRetirar(ano, mes)
|
||||||
.then((r) => setPorRetirar(new Set((r.matriculas || []).map(String))))
|
.then((r) => setPorRetirar(new Set((r.matriculas || []).map(String))))
|
||||||
.catch(() => {});
|
.catch(() => {});
|
||||||
}, [ano, mes]);
|
}, [ano, mes]);
|
||||||
@@ -601,6 +601,7 @@ export default function Cobranza() {
|
|||||||
alumnos={alumnosFiltrados}
|
alumnos={alumnosFiltrados}
|
||||||
agrupacion={agrupacion}
|
agrupacion={agrupacion}
|
||||||
sectorista={sectorista}
|
sectorista={sectorista}
|
||||||
|
ano={ano} mes={mes}
|
||||||
onClose={() => setBuscadorAbierto(false)}
|
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 [texto, setTexto] = useState("");
|
||||||
const [query, setQuery] = useState("");
|
const [query, setQuery] = useState("");
|
||||||
const [porRetirar, setPorRetirar] = useState(new Set()); // matrículas POR RETIRAR
|
const [porRetirar, setPorRetirar] = useState(new Set()); // matrículas POR RETIRAR
|
||||||
const [infoAlumno, setInfoAlumno] = useState(null); // alumno del pop-up INFO
|
const [infoAlumno, setInfoAlumno] = useState(null); // alumno del pop-up INFO
|
||||||
|
|
||||||
const cargarPorRetirar = () => {
|
const cargarPorRetirar = () => {
|
||||||
api.alumnosPorRetirar()
|
api.alumnosPorRetirar(ano, mes)
|
||||||
.then((r)=>setPorRetirar(new Set((r.matriculas||[]).map(String))))
|
.then((r)=>setPorRetirar(new Set((r.matriculas||[]).map(String))))
|
||||||
.catch(()=>{});
|
.catch(()=>{});
|
||||||
};
|
};
|
||||||
useEffect(() => { cargarPorRetirar(); }, []);
|
useEffect(() => { cargarPorRetirar(); }, [ano, mes]);
|
||||||
|
|
||||||
const resultados = useMemo(() => {
|
const resultados = useMemo(() => {
|
||||||
const q = query.trim().toLowerCase();
|
const q = query.trim().toLowerCase();
|
||||||
@@ -926,7 +927,7 @@ function ModalBuscador({ alumnos, agrupacion, sectorista, onClose }) {
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
{infoAlumno && (
|
{infoAlumno && (
|
||||||
<ModalInfoAlumno alumno={infoAlumno} onClose={()=>setInfoAlumno(null)}
|
<ModalInfoAlumno alumno={infoAlumno} ano={ano} mes={mes} onClose={()=>setInfoAlumno(null)}
|
||||||
onGuardado={cargarPorRetirar} />
|
onGuardado={cargarPorRetirar} />
|
||||||
)}
|
)}
|
||||||
</Modal>
|
</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
|
// Cargar (y recargar) las matrículas marcadas POR RETIRAR para tachar sus filas
|
||||||
const cargarPorRetirar = () => {
|
const cargarPorRetirar = () => {
|
||||||
api.alumnosPorRetirar()
|
api.alumnosPorRetirar(ano, mes)
|
||||||
.then((r) => setPorRetirar(new Set((r.matriculas || []).map(String))))
|
.then((r) => setPorRetirar(new Set((r.matriculas || []).map(String))))
|
||||||
.catch(() => {});
|
.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"];
|
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>
|
</div>
|
||||||
</>}
|
</>}
|
||||||
{infoAlumno && (
|
{infoAlumno && (
|
||||||
<ModalInfoAlumno alumno={infoAlumno} onClose={()=>setInfoAlumno(null)}
|
<ModalInfoAlumno alumno={infoAlumno} ano={ano} mes={mes} onClose={()=>setInfoAlumno(null)}
|
||||||
onGuardado={cargarPorRetirar} />
|
onGuardado={cargarPorRetirar} />
|
||||||
)}
|
)}
|
||||||
</Modal>
|
</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.
|
// Pop-up de INFO por alumno: cambiar estado (EN CURSO / POR RETIRAR) y observaciones.
|
||||||
// Carga y guarda en Supabase (tabla cobranza_alumno_estado).
|
// 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 [estado, setEstado] = useState("EN CURSO"); // EN CURSO | POR RETIRAR
|
||||||
const [nuevaObs, setNuevaObs] = useState("");
|
const [nuevaObs, setNuevaObs] = useState("");
|
||||||
const [observaciones, setObservaciones] = useState([]);
|
const [observaciones, setObservaciones] = useState([]);
|
||||||
@@ -1214,12 +1215,12 @@ function ModalInfoAlumno({ alumno, onClose, onGuardado }) {
|
|||||||
// Cargar estado/observaciones actuales del alumno al abrir
|
// Cargar estado/observaciones actuales del alumno al abrir
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let activo = true;
|
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||[]); } })
|
.then((r)=>{ if(activo){ setEstado(r.estado||"EN CURSO"); setObservaciones(r.observaciones||[]); } })
|
||||||
.catch(()=>{})
|
.catch(()=>{})
|
||||||
.finally(()=>{ if(activo) setCargando(false); });
|
.finally(()=>{ if(activo) setCargando(false); });
|
||||||
return ()=>{ activo=false; };
|
return ()=>{ activo=false; };
|
||||||
}, [alumno.matricula]);
|
}, [alumno.matricula, ano, mes]);
|
||||||
|
|
||||||
const agregarObs = () => {
|
const agregarObs = () => {
|
||||||
const t = nuevaObs.trim();
|
const t = nuevaObs.trim();
|
||||||
@@ -1233,7 +1234,7 @@ function ModalInfoAlumno({ alumno, onClose, onGuardado }) {
|
|||||||
const guardar = async () => {
|
const guardar = async () => {
|
||||||
setGuardando(true); setGuardado(false);
|
setGuardando(true); setGuardado(false);
|
||||||
try {
|
try {
|
||||||
await api.alumnoEstadoGuardar(alumno.matricula, estado, observaciones);
|
await api.alumnoEstadoGuardar(alumno.matricula, ano, mes, estado, observaciones);
|
||||||
setGuardado(true);
|
setGuardado(true);
|
||||||
if (onGuardado) onGuardado(); // refresca el tachado en la tabla
|
if (onGuardado) onGuardado(); // refresca el tachado en la tabla
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
Reference in New Issue
Block a user