Hola! como les va?
Estoy personalizando la operación de Inscripción a Propuestas desde Preinscripción para incorporar la lógica de “Opciones de Cursado” que se utiliza en la universidad. Cada opción tiene un cupo, y cada carrera tiene varias opciones.
En la operación de Inscripción a Propuestas, ésto ya esta incorporado y funciona correctamente, pero en la de Preinscripción, tengo el problema de que al surgir el error de que no hay cupo para una opción, la transacción no se aborta, por lo tanto, el alumno se inscribe igual.
Dejo el código del evento procesar de esta operación.
function evt__procesar_insc()
{
if (isset($this->s__datos_opcion['opcion'])) {
$this->cn()->desactivar_transacciones_anidadas();
try {
toba::db()->abrir_transaccion();
$this->cn()->procesar_inscripciones($this->s__datos_inscripciones, $this->s__persona, $this->s__preinscripcion['id_preinscripcion']);
// INSERTAR CAMPO OPCION_CURSADO
$datos_alumno = toba::consulta_php('co_alumnos')->get_alumno($this->s__persona, $this->s__datos_opcion['propuesta']);
$alumno = $datos_alumno['alumno'];
if (guarani::co('co_opciones_cursada_U840')->hay_cupo_opcion_cursado($this->s__datos_opcion['opcion'])) {
guarani::act('act_alumnos')->insertar_opcion_cursado_alumno($alumno, $this->s__datos_opcion['opcion']);
guarani::act('act_opcion_cursado_U840')->actualizar_cupo($this->s__datos_opcion['opcion']);
} else {
$mje = 'No hay cupo para la opcion de cursada elegida';
$this->s__datos_opcion = NULL;
throw guarani::error($mje);
}
$this->s__datos_opcion = NULL;
$this->s__procesar_ok = true;
$this->set_pantalla('requisitos');
toba::db()->cerrar_transaccion();
} catch (guarani_error $e) {
toba::db()->abortar_transaccion();
toba::notificacion()->agregar($e->getMessage(), 'error');
toba::logger()->error($e->getMessage());
}
} else {
$this->cn()->desactivar_transacciones_anidadas();
try {
$this->cn()->procesar_inscripciones($this->s__datos_inscripciones, $this->s__persona, $this->s__preinscripcion['id_preinscripcion']);
$this->s__procesar_ok = true;
$this->set_pantalla('requisitos');
} catch (guarani_error $e) {
toba::db()->abortar_transaccion();
toba::notificacion()->agregar($e->getMessage(), 'error');
toba::logger()->error($e->getMessage());
}
}
}
El array $s__datos_opcion se carga en la pantalla a través de un formulario que agregué.
Y en el manejador de datos cambie la clase de la cual extiende a “cn_manejador_entidad” para que tenga la función desactivar_transacciones_anidadas.
El error lo está lanzando correctamente cuando no hay cupo en una opción, por eso me resulta raro que no aborte la transacción.
Desde ya, gracias por la ayuda.
Saludos,
Felipe.