[RESUELTO] Filtrar turno por carrera

Hola!

Necesito personalizar el combo del turno de la carrera para que los turnos que se muestren sean los correspondientes a cada carrera, ya que no todas las carreras de la universidad se dan en todos los turnos.
Para ésto creé una tabla en la base de datos que relaciona las carreras y los turnos preferidos para cada una.
Luego personalicé la clase form_turno para que el combo traiga los turnos filtrados mediante una consulta. El problema surge cuando quiero usar el dato de la carrera para filtrar el combo(el sistema está configurado para que se pueda elegir solo una carrera). Intenté como muestro a continuación pero no anduvo. Incluí la clase form_carrera en la definición de form_turno.

protected function generar_definicion() 
	{
		$this->set_campo('turno_preferido', array(
			form::label			=> 'turno',
			form::filtro		=> validador::TIPO_TEXTO,
			form::obligatorio	=> false,
			form::elemento		=> array('tipo' => 'select'),
			form::validar_select => true,
			form::multi_options => opciones_pers::get_turnos_carrera(form_carrera::get_dato('carrera')),
			form::valor_default => '',
			form::largo			=> 20
		));
	}

Si en este código hardcodeo una carrera cualquiera opciones_pers::get_turnos_carrera(), funciona. Puedo ver el combo filtrado según la tabla que armé y el dato se guarda correctamente.

Conviene tal vez hacerlo en javascript?

Gracias!

Felipe.

Hola Felipe,

No sé si es correcto lo que estás haciendo. El campo “Turno preferido” que se presenta en la solapa “Carreras” luego se importa en Gestión como el dato censal “turno_preferido” (mdp_datos_personales.turno_preferido), es decir, no implica opción de turno para una carrera. Es por esa razón que en el formulario de Preinscripción no está incluido dentro del formulario en popup de selección de carrera, sino que es un dato único, porque no depende de una propuesta específica.

Lo que estás queriendo hacer sólo tendría sentido en el contexto del sistema si el aspirante puede inscribirse a una sola carrera (parámetro ‘cant_max_carreras_insc’ => 1).

Saludos,
Fernando

Hola Fernando, es como vos decis, tenemos ese parámetro en 1.

Hola Felipe,

Si tenés ese parámetro en 1, entonces sí se puede encadenar una dependencia. Yo te diría hacerlo del lado servidor, ya que para el momento en que aparece el formulario de turno el aspirante ya eligió carrera.

Para implementarlo, en lugar de pasarle un parámetro a la consulta opciones_pers::get_turnos_carrera, podrías obtener en la misma función el ID de preinscripción de la persona logueada de esta manera:


$id_preinscripcion = kernel::persona()->datos()->get_id_preinscripcion();

y usarlo para obtener los turnos disponibles, cruzando las tablas sga_carreras_insc y la tabla propia de turnos.

Fijate si lo podés armar, y si no lo miramos con más profundidad.

Un consejo aparte: tené siempre a mano el script de creación de esa tabla, ya que al ser Preinscripción un sistema “de un uso”, ante un nuevo período de preinscripción tendrás que crear una nueva base, y a la misma aplicarle tus cambios.

Saludos!
Fernando

Muchas gracias!! Con eso salio en seguida. Saludos!

Felipe

Hola! probando surgió un problema, el combo se queda guardado en cache hasta que se reinicie el servidor de apache, incluso el caso de un usuario nuevo, si entras y elegís una carrera, el combo no se actualiza hasta que se reinicia el servidor.
Hay alguna manera de actualizar la memoria dinámicamente?

Gracias!

Hola Felipe,

Lo recomendado en esas consultas es no pasar por la caché APC.

Esta forma de consultar cachea: catalogo::consultar($sql);

Esta no: kernel::db()->consultar($sql);

Saludos!

Perfecto, solucionado! Gracias!!

Saludos

Felipe.