Hola Andrea,
La falla la tenías en pagelet_formulario.js
Abajo te copio los archivos que estuve usando para solucionar el problema.
Modifiqué el controlador para reutilizar el código donde recupera los datos de una carrera a partir del hash de la carrera. decodificar_carrera($carrera_hash)
Cuando trabajo con ajax me es cómodo usar la barra de desarrolladores de chrome, la pestaña network. Te paso el dato por si no lo conocías
Saludos
Bruno
Index: src/pers/cordoba/operaciones/solicitud_titulo/controlador.php
function accion__busca_titulos()
{
$carrera_hash = $this->validate_param('carrera', 'post', validador::TIPO_ALPHANUM);
$carrera = $this->decodificar_carrera($carrera_hash);
if (!empty($carrera)){
$parametros = array('carrera' => $carrera['carrera'], 'plan' => $carrera['plan']);
}
$nuevo = array();
if (!empty($parametros)){
$nuevo = catalogo::consultar('colacion', 'busca_titulos', $parametros);
}
$this->render_raw_json($nuevo);
}
function accion__busca_orientacion()
{
$titulo_hash = $this->validate_param('titulo', 'post', validador::TIPO_ALPHANUM);
$carrera_hash = $this->validate_param('carrera', 'post', validador::TIPO_ALPHANUM);
$carrera = $this->decodificar_carrera($carrera_hash);
$nuevo = array();
if (!empty($carrera)){
$parametros = array('carrera' => $carrera['carrera'], 'plan' => $carrera['plan']);
$titulos = catalogo::consultar('colacion', 'busca_titulos', $parametros);
if (!empty($titulos)){
foreach($titulos as $titulo){
if ($titulo_hash == $titulo["__ID__"]){
$parametros['titulo'] = $titulo['ID'];
if (!empty($parametros)){
$nuevo = catalogo::consultar('colacion', 'busca_orientacion', $parametros);
}
}
}
}
}
$this->render_raw_json($nuevo);
}
function decodificar_carrera($carrera_hash){
$carreras = catalogo::consultar('colacion', 'lista_carreras');
if (!empty($carreras)){
foreach($carreras as $carrera){
if ($carrera_hash == $carrera["__ID__"]){
return $carrera;
}
}
}
return false;
}
Index: src/pers/cordoba/operaciones/solicitud_titulo/formulario/pagelet_formulario.js
kernel.renderer.registrar_pagelet(‘formulario’, function(info) {
var id = ‘#’ + info.id;
return {
onload: function() {
// Estado inicial
if ($(id + ’ #sel_carrera’).val() !== “”){
busca_titulos($(id + ’ #sel_carrera’).val());
}
if ($(id + ' #filtro_titulos').val() !== ""){
busca_orientacion($(id + ' #filtro_titulos').val(), $(id + ' #sel_carrera').val());
}
// Eventos
$(id + ' #sel_carrera').on('change', function () {
busca_titulos($(this).val());
});
$(id + ' #filtro_titulos').on('change', function () {
busca_orientacion($(this).val(), $(id + ' #sel_carrera').val());
});
$('#form_solicitud_titulo').submit(function() {
var msg_arriba;
var ST = $('#sel_solicitud_titulo').val();
if( ST == '' ) {
msg_arriba = $('<div role="alert" class="alert alert-error" style="width: auto; float:left; margin:0;">'+ info.sel_vacio +'<button type="button" class="close" data-dismiss="alert">×</button></div>');
$(id).append(msg_arriba);
msg_arriba.position({
my: 'top',
at: 'top center',
offset: '0 0',
of: $(id)
}).show();
return false;
}
});
}
}
// Carga de títulos según carrera
function busca_titulos(valor_carrera){
if (valor_carrera !== ""){
$.ajax({
url: info.url_titulos,
dataType: 'json',
data: {carrera: valor_carrera},
type: 'post',
success: function(data) {
$('#filtro_titulos').children().remove();
$('#filtro_titulos').append(
$('<option></option>').val('').html('Seleccionar Título')
);
$.each(data, function(key, value) {
$('#filtro_titulos').append(
$('<option></option>').val(value['__ID__']).html(value['DESC'])
);
});
$('#filtro_titulos option[value='+info.hash_titulos+']').prop('selected', true);
}
});
} else {
$('#filtro_titulos').children().remove();
$('#filtro_titulos').append(
$('<option></option>').val('').html('Seleccionar Título')
);
}
busca_orientacion("", "");
}
// Carga de orientaciones según título y carrera
function busca_orientacion(valor_titulo, valor_carrera){
if (valor_titulo !== "" && valor_carrera !== ""){
$.ajax({
url: info.url_orientacion,
dataType: 'json',
data: {titulo: valor_titulo, carrera: valor_carrera},
type: 'post',
success: function(data) {
$('#filtro_orientacion').children().remove();
$('#filtro_orientacion').append(
$('<option></option>').val('').html('Seleccionar Orientación')
);
$.each(data, function(key, value) {
$('#filtro_orientacion').append(
$('<option></option>').val(value['ID']).html(value['DESC'])
);
});
$('#filtro_orientacion option[value='+info.hash_orientacion+']').prop('selected', true);
}
});
} else {
$('#filtro_orientacion').children().remove();
$('#filtro_orientacion').append(
$('<option></option>').val('').html('Seleccionar Orientación')
);
}
}
})
Index: src/pers/cordoba/modelo/datos/db/colacion.php
/**
* parametros: carrera, plan
* cache: no
* filas: n
*/
function busca_titulos($parametros)
{
$sql = "SELECT t.titulo as ID,
t.nombre as DESC
FROM sga_titulos_plan tp, sga_titulos t
WHERE tp.unidad_academica = t.unidad_academica
AND tp.titulo = t.titulo
AND tp.carrera= {$parametros['carrera']}
AND tp.plan ={$parametros['plan']}
";
$datos = kernel::db()->consultar($sql, db::FETCH_ASSOC);
if (!empty($datos)){
foreach($datos as $key => $value) {
$id = catalogo::generar_id($value["ID"]);
$datos[$key][catalogo::id] = $id;
}
}
return $datos;
}
/**
* parametros: _ua, carrera, plan, titulo
* cache: no
* filas: n
*/
function busca_orientacion($parametros)
{
$sql = "SELECT orientacion as ID, nombre as DESC
FROM sga_orientaciones
WHERE unidad_academica = {$parametros['_ua']}
AND carrera= {$parametros['carrera']}
AND plan ={$parametros['plan']}
AND titulo = {$parametros ['titulo']}
";
$datos = kernel::db()->consultar($sql, db::FETCH_ASSOC);
return $datos;
}