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?
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',
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.
Hola! estamos necesitando este comportamiento en Autogestión también. El botón Finalizar invoca a una función que controla que exista un período de inscripción Vigente, sin tener en cuenta la propuesta donde está inscripto el aspirante.
Alguien desarrollo algo similar? sugerencias de pasos a seguir? o parche
Gracias!
Saludos!
¿te referís al botón Finalizar dentro de Trámites > Preinscripción a Propuestas?
En tal caso al hacer click en el mismo se ejecuta el siguiente stack:
Función accion__cambiar_estado_preinscripcion de src/siu/operaciones/preinscripcion/controlador.php.
Función finalizar_propuesta_preinsc de src/siu/modelo/transacciones/preinscripcion.php.
En cuento a los períodos de inscripción los maneja la función hay_periodo_preinsc_vigente de src/siu/modelo/transacciones/preinscripcion.php que llama a hay_periodo_preinsc_vigente de src/siu/modelo/datos/db/preinscripcion.php. En caso de que no haya se oculta el botón Elegir propuesta y muestra el mensaje En este momento no hay períodos vigentes de preinscripción a propuestas.
Para obtener la propuesta activa podes usar la función kernel::persona()->get_id_propuesta_activa();, en src/siu/modelo/entidades/persona.php podes ver mas funciones de la sesión de la persona logueda.