Personalización de acción finalizar

Buen día, necesitamos implementar una personalización que tenga la siguiente funcionalidad:
Para el perfil alumno (usuario registrado), al presionar el botón de Finalizar, consulte en la base de datos si existen periodos de inscripción vigentes para las propuestas seleccionadas. si por lo menos una de las propuestas seleccionadas no presenta periodo de inscripción vigente, emitir un mensaje de error con un mensaje personalizado y que no continúe la ejecución de la lógica de la acción finalizar heredada del controlador del censo estándar. Un comportamiento similar a la operación de crear usuario, acción ini del pagelet en cuestión.
Intentamos esta opción: personalizar la operación censo, extendiendo el controlador y sobreescribiendo el método accion__finalizar() con la siguiente porción de código:

function accion__finalizar()
{
...
//aquí la consulta a la base de datos
kernel::sesion()->set('msj_pagina_error', kernel::traductor()->trans('no_existen_periodos'));
$this->nuevo_request('pagina_error', 'index');
}

Con este enfoque obtenemos un error con el mensaje: "No existe la operación pagina_error’. Inferimos que debido a que el perfil alumno (usuario registrado) no tiene la operación definida. Intentamos agrear una línea en el archivo …conf/acceso/acc_alumno.xml pero obtuvimos el mismo resultado.

Por otro lado intentamos algo mas abreviado:

function accion__finalizar()
{
...
throw new error_preinscripcion(kernel::traductor()->trans('No hay periodo de inscripcion abierto'));
}

Con este enfoque obtenemos mensaje de error: Ha ocurrido un error..
Logramos el objetivo, pero no podemos personalizar el mensaje.
¿Cómo podemos lograr que se obtenga un mensaje personalizado?

Muchas gracias

Hola @dsolalinde

La operación $this->nuevo_request($operacion, $accion); se puede usar solo en controladores, la operación y la acción deben existir y deben estar habilitadas para el perfil en cuestión, ej: para el perfil alumno la debes agregar en src/pers/uni/conf/acceso/acc_Alumno.php.

Los mensajes los agregas en src/pers/uni/mensajes/mensajes.es.php, ej:

'no_hay_periodo_insc_abierto' => 'No hay periodo de inscripción abierto',

y lo cargas de las siguiente manera:

kernel::traductor()->trans('no_hay_periodo_insc_abierto')

Revisa la documentación de ¿Cómo personalizo el sistema? o SIU - Taller Personalización.

Saludos.
2

Hola @lleonardis , gracias por contestar.
La aplicación es preinscripción, no autogestión.

No existe tal archivo en el filesystem. Si existe un xml. ¿Se comporta de la misma manera?

Saludos
Damian

Hola @dsolalinde

Tenes razón, en Preinscripción son xml.

Te dejo la documentación de Personalizaciones en Preinscripción, igualmente es muy similar a Autogestión, podes guiarte en la lista de reproducción Personalizaciones SIU-Guaraní, en especial los videos SIU - Taller de Personalizacion - Guaraní Autogestion - Chulupi - Parte I y SIU - Taller de Personalizacion - Guaraní Autogestion - Chulupi - Parte II.

src/siu/conf/acceso/acc_anonimo_admin.xml: Interfaz para el admin sin sesión iniciada.
src/siu/conf/acceso/acc_admin.xml: Interfaz para el admin con sesión iniciada.
src/siu/conf/acceso/acc_anonimo_alumno.xml: Interfaz para el aspirante sin sesión iniciada.
src/siu/conf/acceso/acc_alumno.xml: Interfaz para el aspirante con sesión iniciada.

Saludos y buen 2024.
2