The academic request system allows students to file formal petitions — such as certificate requests, career changes, or duplicate ID cards — throughDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/kenri89/PROYECTO_UTP_AED_1_1/llms.txt
Use this file to discover all available pages before exploring further.
PanelSolicitudesEstudiante. Each petition enters a FIFO queue (java.util.Queue<Solicitud> backed by LinkedList), ensuring requests are processed in the order they were submitted. Administrators then work through the queue from PanelAdministradorSolicitudes, resolving each request and recording the resolution timestamp.
The Solicitud Data Model
Each request record captures the submission context and tracks its resolution state.
| Field | Type | Description | Default / Constraint |
|---|---|---|---|
carnet | String | Carnet of the student who submitted the request. | Non-null (Guava checkNotNull) |
tipo | String | Category of the request (see request types below). | Non-null |
descripcion | String | Free-text detail from the student. | Empty string if null (Guava Strings.nullToEmpty) |
fecha | LocalDateTime | Submission timestamp — set to LocalDateTime.now(). | Set automatically on creation |
atendida | boolean | Whether the request has been resolved by an admin. | false on creation |
fechaAtencion | LocalDateTime | Resolution timestamp — set by the admin when processing. | null until attended |
Available Request Types
The student panel offers the following types via a combo-box:- Certificado de matrícula
- Constancia de estudiante activo
- Cambio de carrera
- Cambio de grupo o curso
- Duplicado de carnet
- Información adicional
Student Workflow — PanelSolicitudesEstudiante
Submit a Request
The student fills in their Carnet, selects a Tipo de solicitud from the combo-box, and enters a Descripción. Clicking Enviar Solicitud triggers the submission logic.The panel validates that A confirmation dialog displays the carnet, request type, and submission timestamp (formatted via
carnet and descripcion are non-empty using Guava Strings.isNullOrEmpty, then creates the Solicitud and enqueues it:getFechaFormateada()).View Own Requests
The student’s request history is visible within the confirmation dialog shown immediately after submission. A full listing panel filtered by carnet can be built by iterating the queue and matching
solicitud.getCarnet().equals(carnet).In the current implementation,
PanelSolicitudesEstudiante is a submission-only form. The admin panel (PanelAdministradorSolicitudes) holds the split-view of pending and attended requests.Administrator Workflow — PanelAdministradorSolicitudes
The administrator panel is accessible only to users with the admin role. Access from MenuPrincipal checks the role before instantiating the panel:
JSplitPane:
Solicitudes Pendientes
Lists all requests still in the queue (
atendida = false), displayed in FIFO order. Columns: Carnet, Tipo, Descripción, Fecha de Envío.Solicitudes Atendidas
Lists all requests resolved in the current session (moved out of the queue), stored in a local
List<Solicitud>. Columns: Carnet, Tipo, Descripción, Fecha de Envío, Fecha de Atención.View All Pending Requests
On load,
actualizarTablas() iterates the Queue<Solicitud> (without consuming it) to populate the pending table. Requests appear in FIFO order — the oldest request is at the top.Queue Behaviour
The queue is instantiated inMenuPrincipal as a LinkedList and passed by reference to both panels:
| Operation | Method | Effect |
|---|---|---|
| Enqueue | offer(solicitud) | Adds to the tail of the queue (student submission). |
| Inspect | for-each | Iterates without consuming — used for table display. |
| Dequeue | poll() | Removes and returns the head (admin resolution). |
| Check empty | isEmpty() | Returns true if no pending requests remain. |
Date Formatting
Solicitud exposes two formatted date helpers, both using the pattern "yyyy-MM-dd HH:mm":
Persistence
PersistenciaAcademica can save and reload solicitudes to a tab-separated file (solicitudes.tsv) located under ~/.proyecto_utp_aed_datos/. The file has six tab-separated columns:
| Column 1 | Column 2 | Column 3 | Column 4 | Column 5 | Column 6 |
|---|---|---|---|---|---|
| carnet | tipo | descripcion | fecha (ISO_LOCAL_DATE_TIME) | atendida (0/1) | fechaAtencion (ISO_LOCAL_DATE_TIME or empty) |
atendida is serialised as 0 (false) or 1 (true). fechaAtencion is an empty string when null. Dates use DateTimeFormatter.ISO_LOCAL_DATE_TIME (e.g. 2024-01-15T10:30:00).