Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/amarcano568/pensionalamedida/llms.txt

Use this file to discover all available pages before exploring further.

El módulo de Estudiantes es el núcleo del sistema Pensión a la Medida. Concentra el padrón completo de alumnos de la residencia universitaria, permitiendo importar registros masivamente desde ficheros Excel, consultar la ficha personal de cada alumno (datos de contacto, domicilio, expediente académico y hospedaje activo), imputar trabajos realizados a cada alumno y asignar o actualizar su habitación en la residencia.

Acceso al módulo

El acceso a la vista principal de gestión de estudiantes requiere que el usuario autenticado tenga el permiso gestion_alumnos, gestionado mediante el middleware de permisos de Laravel.
MétodoRutaControlador → Método
GET/gestionar-estudiantesAlumnosController@gestionarEstudiantes
Al cargar la vista, el controlador inyecta el catálogo de trabajos disponibles (Trabajos::get()) y el listado de habitaciones (Habitaciones::get()) para poblar los selectores del formulario.

Importar alumnos desde Excel

La importación masiva se compone de dos pasos consecutivos realizados desde el front-end.

Paso 1 — Subir el fichero

file
file
required
Fichero Excel (.xlsx / .xls) con los datos de los alumnos. La primera fila debe contener las cabeceras con los nombres de columna exactos del modelo Alumnos (p. ej. numIdAlumno, strNombre, strApellidos, etc.).
POST /subir-fichero-nuevos-alumnos
Content-Type: multipart/form-data
Flujo interno:
  1. El fichero se persiste en el disco local de Laravel mediante Storage::disk('local')->put().
  2. La tabla temporal alumnos_tmp se trunca completamente.
  3. Se ejecuta la importación con Excel::import(new AlumnosImport, $nombre). La clase AlumnosImport implementa ToModel, WithHeadingRow y WithValidation, validando que las tres primeras columnas sean numIdAlumno, strNombre y strApellidos en ese orden.
  4. Por cada registro de alumnos_tmp se llama a Alumnos::firstOrCreate(['numIdAlumno' => …], $data), garantizando que un alumno ya existente no sea sobreescrito y que los nuevos sean insertados.
Los campos que se mapean desde el Excel a la tabla alumnos son:
numIdAlumno, strNombre, strApellidos, strCodigoExpediente,
strDomicilio, strPais, strPoblacion, strProvincia,
strTelefono1, strNif, blnVigente, blnBaja,
fecFechaAlta, fecFechaNacimiento, strCodigoPostal,
strEMail, strFoto, blnEmagister, strNumeroSeguridadSocial,
strSexo, strTelefono2, fecFechaAltaCentro, numNivelEstudios,
numIdOrigen, numIdProvincia, numIdPais, blnMatriculado,
strRutaNotas, numTipoNif, strTelefonoMovil, strPaisNacimiento,
numIdPaisNacimiento, strProvinciaNacimiento, numIdProvinciaNacimiento

Paso 2 — Eliminar el fichero temporal

Una vez completada la importación, el cliente debe solicitar la eliminación del fichero del servidor:
POST /delete-fichero-importar-alumno
Content-Type: application/json
filename
string
required
Nombre original del fichero tal como fue almacenado en el disco local (p. ej. alumnos_2024.xlsx).
El fichero se borra usando Storage::delete($archivo) únicamente si existe. Si el archivo no se encuentra en disco, la respuesta devuelve success: false. Es importante realizar este segundo paso para evitar que ficheros con datos sensibles queden almacenados en el servidor.

Listado de estudiantes

POST /listar-estudiantes
Devuelve una respuesta compatible con jQuery DataTables generada por el paquete yajra/laravel-datatables. Acepta un parámetro de filtro opcional para acotar los resultados por estado de vigencia.
filtro
string | integer
Valor de filtro aplicado al scope Status del modelo Alumnos. Cuando se proporciona, la consulta añade WHERE alumnos.blnVigente = :filtro. Si se omite o es nulo, se devuelven todos los alumnos sin importar su estado.

Columnas devueltas

ColumnaDescripción
numIdAlumnoIdentificador numérico único del alumno (clave primaria)
strNombreNombre(s) del alumno
strApellidosApellidos del alumno
strTelefono1Teléfono principal de contacto
strEMailDirección de correo electrónico
strCodigoExpedienteCódigo de expediente académico
blnVigenteEstado de vigencia (1 = activo, 0 = inactivo)
uuid_habitacionUUID del registro de hospedaje asignado en la tabla hospedajes
detalle (computed)HTML de la tarjeta de detalle del alumno (véase sección siguiente)
action (computed)Botones de acción: imputar trabajo y asignar habitación
La respuesta incluye la fila identificada con setRowId('numIdAlumno') y un índice de fila adicional mediante addIndexColumn().

Detalle del alumno

Cada fila del listado incluye una columna detalle que renderiza una tarjeta tipo popover construida por el método detalleAlumno(). Esta tarjeta contiene:
  • Nombre completo y género (con icono de hombre/mujer según strSexo).
  • NIF (strNif), correo (strEMail), teléfonos (strTelefono1, strTelefono2).
  • Fecha de nacimiento y edad calculada en tiempo real con Carbon.
  • Código de expediente y fecha de alta (fecFechaAlta).
  • Residencia en la facultad: si el alumno tiene un uuid_habitacion asignado, se muestra el número de habitación, la fecha de entrada y la fecha de salida formateadas (d-m-Y); en caso contrario, se indica “No tiene hospedaje en la universidad”.
  • Dirección: domicilio, país, provincia y población.
La tarjeta expone además tres botones de acción rápida:
BotónAcción
Ir al expediente académicoEnlace al expediente del alumno
Ver grupo familiarAbre el grupo familiar vinculado mediante uuid_grupo_familiar
Imputar trabajo realizadoAbre el formulario de imputación de trabajo para ese alumno
El grupo familiar de un alumno se puede consultar directamente desde la tarjeta de detalle pulsando el botón “Ver grupo familiar”. Internamente realiza una llamada a POST /ver-grupo-familiar-alumno con el uuid del grupo y renderiza la vista del grupo sin necesidad de abandonar la pantalla de estudiantes.

Consultar grupo familiar de un alumno

POST /ver-grupo-familiar-alumno
Content-Type: application/json
Recupera la representación visual del grupo familiar vinculado a un alumno usando el uuid_grupo_familiar almacenado en su registro. Internamente delega en GruposFamiliaresController::drawGroupFamily() para construir la tarjeta HTML del grupo (padre, madre e hijos).
uuid
string
required
UUID del grupo familiar (uuid_grupo_familiar del alumno) que se desea consultar. Se usa para localizar el registro en grupos_familiares mediante GruposFamiliares::where('uuid', $request->uuid)->first().
Respuesta exitosa:
{
  "success": true,
  "message": "Grupo familiar obtenido correctamente",
  "data": "<div class=\"col-sm-12\">...</div>"
}
El campo data contiene el HTML de la tarjeta del grupo familiar lista para inyectar en el DOM.

Imputar trabajo realizado

Guardar un trabajo imputado

POST /guardar-trabajo-imputado
Content-Type: application/json
Crea un nuevo registro en la tabla trabajos_realizados.
trabajo_id
integer
required
Identificador del tipo de trabajo del catálogo trabajos (id_trabajo en BD).
fecha_trabajo
string
required
Fecha en la que se realizó el trabajo (formato YYYY-MM-DD). Se almacena en el campo fecha.
id_alumno_trabajo
integer
required
numIdAlumno del alumno al que se le imputa el trabajo. Se almacena en el campo id_alumno.
observaciones_trabajo
string
Notas u observaciones adicionales sobre el trabajo realizado. Se almacena en el campo observaciones.
Respuesta exitosa:
{
  "success": true,
  "message": "Trabajo imputado correctamente."
}

Listar trabajos realizados de un alumno

POST /listar-trabajos-realizados
idAlumno
integer
required
numIdAlumno del alumno cuyos trabajos se desean consultar.
Devuelve una respuesta DataTables con las columnas trabajo (nombre del trabajo), fecha, observaciones e id, junto con un botón de acción para eliminar cada entrada.

Eliminar un trabajo imputado

POST /eliminar-trabajo
idTrabajo
integer
required
ID del registro en trabajos_realizados que se desea eliminar.

Asignar hospedaje

Crear o actualizar un hospedaje

POST /actualizar-hospedaje
Content-Type: application/json
Este endpoint gestiona tanto la creación de un nuevo hospedaje como la actualización de uno existente para un alumno.
  • Si uuid_habitacion es null, se genera un nuevo UUID con Webpatser\Uuid\Uuid::generate(), se crea un registro en hospedajes y se actualiza el campo uuid_habitacion del alumno en la tabla alumnos.
  • Si uuid_habitacion tiene un valor, se busca el registro existente en hospedajes por ese UUID y se actualizan sus campos.
uuid_habitacion
string | null
required
UUID del hospedaje existente. Enviar null para crear un nuevo registro de hospedaje.
numero_habitacion
string
required
Número o identificador de la habitación asignada. Se almacena en hospedajes.num_habitacion.
fecha_entrada
string
required
Fecha de inicio del hospedaje. Se almacena en hospedajes.desde.
fecha_salida
string
Fecha de fin del hospedaje. Se almacena en hospedajes.hasta.
observaciones_entrega_hab
string
Observaciones sobre la entrega o estado de la habitación. Se almacena en hospedajes.observaciones.
id_habitacion_alumno
integer
numIdAlumno del alumno al que se le asigna el hospedaje. Requerido únicamente cuando se crea un hospedaje nuevo (uuid_habitacion = null).

Consultar el hospedaje de un alumno

POST /ver-hospedaje-alumno
uuid
string
required
UUID del hospedaje (uuid_habitacion del alumno) a consultar.
Devuelve el objeto Hospedajes completo si existe, o success: false si el alumno no tiene hospedaje asignado.

Build docs developers (and LLMs) love