URGENTE - Caracteres y codificación - Preinscripción - version 2.9.4

Gente:

Estamos con un problema crítico por el momento del año con la Preinscripción.

Como no aparecían 4 carreras de las 13 ofertadas al momento de Preinscribirse, ingresé con PGADMIN para revisar la tabla de periodos de preinscripción. Allí resultó que faltaban los registros de un par de ellas y las otras parecía que no estaban ni en la tabla de carreras. En consecuencia, por las dudas que fueran carreras nuevas, procedí a ejecutar la interfase de transferencia de datos de Gestión a Preinscripción y el resultado resultó peor el remedio que la enfermedad: ahora no aparece ninguna carrera en el combo de selección.

Como recordaba que un problema similar habíamos tenido al instalar Preinscripción, procedí a hablar con el técnico que hizo toda la instalación para que me ayudara a ver el problema, y ahí haciendo memoria entre los 2 me enteré que en ese momento él había bajado todas las tablas del sistema y había hecho una conversión de todos los caracteres con acentos y eñes de todas las tablas, ya que eso provocaba que no aparecieran las carreras, y luego las había restaurado en forma correcta para que aparecieran.

Más allá que podemos volver a repetir ese trabajo, como esto no es normal necesito encontrarle una solución definitiva al problema, para poder ejecutar cuantas veces quiera la interfase sin que se arruine el sistema.

La base de Preinscripción está correctamente generada en LATIN 1, como indican los instructivos. Quiero saber que otra cosa hay que revisar de configuraciones y/o del ODBC para que eso funcione correctamente.

Saludos

Gustavo

Verificaste en las tablas de la base de preinscripción si estan o no las carreras que no ves listadas en el combo de carreras?

¿Si estan pero no aparecen en el combo, son carreras que en el nombre tiene algun caracter especial como ser: ñ ’ " / ?

¿Cuando corriste el proceso de pasaje de datos de Guarani 2.9.4 a la base de preinscripción, no dio ningún error?
Podes volver a correrlo y mostrarnos la imagen con el resultado de la corrida del proceso?

¿Con las localidades sucede lo mismo? ¿Verificaste si tenes la misma cantidad de localidades en las dos bases?

Si, Si, y si.

En la base de Preinscripción están las 13 carreras que deben estar. En el combo no aparece ninguna.

Muchas de las carreras tienen ñ, Ñ, y acentos, incluso en las claves.

El proceso no dio error, lo puedo correr de nuevo.

No verifique en localidades. Verifico las cantidades.

Gracias y saludos. Después paso imágenes.

Gustavo

Gustavo entonces para aclarar el problema.

  • No hay problema al pasar los datos de Guarani 2 a la base de prescripción, ya que se pasan todos los datos sin que informe sobre algún error en los datos.
  • El problema que informas es que no se listan las carreras en el combo de carreras.
En la base de Preinscripción están las 13 carreras que deben estar. En el combo no aparece ninguna.
Pero si no se listan aun las que no tienen caracteres especiales (ñ, letras con tilde, etc), entonces el problema no esta en la descripción del nombre de la carrera sino que quizas te falte la definición de algo como ser [b]períodos de preinscripción por carrera[/b].

¿Tenes definidos períodos de preinscripción por cada carrera y sede donde se oferta? (Tabla sga_periodos_preins).

Estos períodos de preinscripción por unidad academica+sede+carrera no se importan desde la base de Guarani 2, sino que lo tienen que definir en la base en esa tabla.
En base a esta información es que se visualizan los datos en el combo de sedes y carreras.

Documentación Preinscripción a carreras 2.9.2
Documentación perfil administrativo de Preinscripción a Carreras

Hola Gustavo

Por favor verificá que estén cargados los períodos de inscripción (sga_periodos_prein) ya que los mismos hay que cargarlos a manos uno por cada carrera, no se exportan desde Guaraní.

Saludos
Javier

Hola Javier y Alejandro:
Las tablas aparentemente están bien sin embargo el log muestra un error, copio el contenido, espero que esto ayude.
Saludos

================================================================================
================================= WARNINGS =================================

WARNING
Archivo: /var/www/v2092_preinscripcion/src/siu/lib/kernel/interfaz/renderer.php
Linea: 88
json_encode(): Invalid UTF-8 sequence in argument

WARNING
Archivo: /var/www/v2092_preinscripcion/src/siu/lib/kernel/interfaz/renderer.php
Linea: 88
json_encode(): Invalid UTF-8 sequence in argument

================================================================================
=============================== INFO basica ================================

MEMORIA 3.53 Mb


CRONOMETRO

pre conexion 0.059 seg
conexion 0.004 seg
fin request 0.024 seg
fin response 0.000 seg

TOTAL 0.087 seg

================================================================================
================================ nivel INFO ================================

– EJECUTANDO ACCION ‘siu\operaciones\censo\controlador::accion__cascada_carreras’

================================================================================
================================== DEBUG ===================================

– ALIAS ---------------------------------------------------------------------

/preinscripcion

– Autenticacion -------------------------------------------------------------

Usuario autenticado con la sesion

– SE AGREGA CONTROL DE CSRF A ‘siu\operaciones\censo\controlador::accion__guardar’

– sql -----------------------------------------------------------------------

SET CLIENT_ENCODING TO ‘iso-8859-1’;

– CONECTAR DB ---------------------------------------------------------------

Array
(
[vendor] => pgsql
[dbname] => preinscripcion
[host] => 192.168.1.110
[port] => 5433
[pdo_user] => postgres
)

– ADMIN CACHE ---------------------------------------------------------------

: instanciando: memoria_apc

– CATALOGO ------------------------------------------------------------------

BUSCAR: iusambf387fb351956d594471d04ca7250737 – SELECT
*
FROM
sga_preinscripcion
WHERE
id_preinscripcion = ‘1’

– SQL -----------------------------------------------------------------------

SELECT DISTINCT
sga_carreras.carrera,
sga_carreras.nombre
FROM
sga_carreras,
sga_periodos_prein
WHERE
sga_carreras.carrera = sga_periodos_prein.carrera
AND sga_carreras.unidad_academica = sga_periodos_prein.unidad_academica
AND sga_carreras.estado = ‘A’
AND CURRENT_DATE BETWEEN sga_periodos_prein.fecha_inicio AND sga_periodos_prein.fecha_fin
AND sga_carreras.unidad_academica = ‘IUSAM’
AND NOT EXISTS
( SELECT 1
FROM sga_carreras_insc
WHERE sga_carreras_insc.id_preinscripcion = ‘1’
AND sga_carreras_insc.unidad_academica = sga_carreras.unidad_academica
AND sga_carreras_insc.carrera = sga_carreras.carrera
)
AND NOT EXISTS
(
SELECT 1
FROM sga_carrera_aspira,
sga_personas
WHERE sga_personas.unidad_academica = sga_carrera_aspira.unidad_academica
AND sga_personas.nro_inscripcion = sga_carrera_aspira.nro_inscripcion
AND sga_personas.nro_documento = ‘11618816’
AND sga_personas.pais_documento = ‘54’
AND sga_personas.tipo_documento = ‘0’
AND sga_carrera_aspira.unidad_academica = sga_carreras.unidad_academica
AND sga_carrera_aspira.carrera = sga_carreras.carrera
AND sga_carrera_aspira.resultado_asp <> ‘R’
)

–F<1>:E<0>:W<2>:T<0.087 s>:M<3.53 Mb>–

== FIN =============================================

Alejandro y Javier:

Confirmo todo lo que dice Alejandro, el pasaje de datos termina OK.

Y la tabla de periodos de inscripción estaba casi toda cargada, solo faltaban 4 de las carreras. En el completamiento de esa tabla es que re-surgió el problema que había arreglado Freddy.

Una de esas 4 tenía mal el fin del periodo (2018-11-01 en lugar de 2019-11-01), otras 2 no estaban en esa tabla de periodos de inscripción. Y a mi me pareció que faltaba alguna carrera en sga_carreras y allí fue que ejecuté de nuevo la interfase.

Cuando creí que estaba todo solucionado, con las 4 carreras que faltaban en la tabla de periodos añadidas, fui a probar la preinscripción (que venía funcionando sin problemas con las otras carreras), y ahí vi que el combo no traía ninguna carrera de las que hasta ayer mostraba correctamente.

Cuando hablé con Freddy me enteré de todo el trabajo que había hecho para eliminar los caracteres especiales que impedían que el combo se desplegara correctamente. Quizás él pueda explicar mejor lo que hizo y cual era el problema, y/o como lo solucionó en Noviembre pasado.

El tema es que eso debería funcionar automáticamente, salvo la carga o actualización de la tabla sga_periodos_prein ya mencionada por ustedes.

Adjunto imagen del proceso de preinscripción que acabo de correr de nuevo.

Saludos

Gustavo


interfase preinscripcion.png

interfase preinscripcion.png

Tratando de aportar algo mas modifiqué la acción mencionada en el log:

– EJECUTANDO ACCION ‘siu\operaciones\censo\controlador::accion__cascada_carreras’

function accion__cascada_carreras()
{
	$ua = $this->get_param('ua', 'post');
	$datos = opciones::get_carreras_disponibles($ua);
	kernel::log()->add_debug('accion__cascada_carreras','datos: '. print_r($datos, true ));
	$this->render_raw_json($datos);
}

lo cual agrega lo siguiente al log:

– accion__cascada_carreras --------------------------------------------------

datos: Array
(
[null] => – Seleccioná –
[DIEÑA] => DIPLOMATURA EN PSICOLOGÍA CLÍNICA DE NIÑOS Y ADOLESCENTES
[DIMCS] => DIPLOMATURA EN CULTURA Y SALUD MENTAL
[ENA] => ESPECIALIZACIÓN EN PSICOANÁLISIS DE NIÑOS Y ADOLESCENTES
[EPM] => ESPECIALIZACIÓN EN PSICOPATOLOGÍA Y SALUD MENTAL
[EPS] => ESPECIALIZACIÓN EN PSICOANÁLISIS
[EÑA] => ESPECIALIZACIÓN EN PSICOLOGÍA CLÍNICA DE NIÑOS Y ADOLESCENTES
[MCS] => MAESTRÍA EN CULTURA Y SALUD MENTAL
[MFP] => MAESTRÍA EN FAMILIA Y PAREJA
[MPM] => MAESTRÍA EN PSICOPATOLOGÍA Y SALUD MENTAL
)

Sólo quedaría revisar que hace ‘render_raw_json’ con esos datos

Saludos

El problema está en los códigos de las carreras:
El sistema permite poner Ñ en on código de carrera, si bien no es una práctica común (y seguramente no aconsejable), alguien decidió que era buena idea. En el caso particular de preinscripcion 292, el combo de carreras se hace con una petición AJAX, lo que obliga a codificarlo en JSON.
Si bien la codificación JSON exige UTF-8, eso no es problema con las eñes (o acentos), pero adicionalmente JSON no permite Ñ en las claves de un array asociativo, en este caso, el array de carreras.
Como se ve en la primer carrera ([DIEÑA] => DIPLOMATURA EN PSICOLOGÍA CLÍNICA DE NIÑOS Y ADOLESCENTES) está la primer Ñ, salta el error y el combo queda vacío.
La única solución que se me ocurre es reemplazar los código de carreras.
Y por supuesto sugerir que el sisteme obligue ascii en los códigos
Saludos

Existe otra solución si se hace un pedido de modificación al SIU:

en lib/kernel/interfaz/rendered.php, la funcion que genera el JSON es la siguiente:

======
protected function utf8_encode_fields($elements)
{
foreach ($elements as $key => $element) {
if (is_array($element)) {
$elements[$key] = $this->utf8_encode_fields($element);
} else {
$elements[$key] = utf8_encode($element);
}
}
return $elements;
}

si se reemplaza por la siguiente podrían funcionar los códigos con Ñ (a priori, no lo analicé muy profundamente)

protected function utf8_encode_fields($elements)
{
    foreach ($elements as $key => $element) {
        $ukey = utf8_encode($key);
        if (is_array($element)) {
            $elements[$ukey] = $this->utf8_encode_fields($element);
        } else {
            $elements[$ukey] = utf8_encode($element);
        }
    }
    return $elements;
}

=========

Saludos

Vamos a probar agregando una carrera con ñ en el codigo y en el nombre, agregar un período de inscripción y ver si podemos reproducir el caso.
¿Que otros caracteres tienen el código y/o nombre de las carreras?

Alejandro:

Los códigos de carrera usados tienen Ñ mayúscula (EÑA, DIEÑA).

Otros caracteres usados son vocales acentuadas en los nombres de carreras, aparte de la ñ (Psicología, Psicoanálisis, Niñez, etc.)

Ahora veo de bajar a un archivo la tabla de carreras y la de períodos.

Saludos

Gustavo

Alejandro:

Adjunto los archivos de sga_carreras y sga_periodos_prein en modo texto, para que vean los datos que usamos. Si es necesario les paso un backup de la base de preinscripción.

Saludos

Gustavo


carreras IUSAM.txt (1.75 KB)

periodos prein IUSAM.txt (714 Bytes)

Alejandro:

Confirmado lo que dice Freddy: eliminé las 2 carreras que tenían una Ñ en la clave de la tabla sga_periodos_prein (EÑA y DIEÑA) y empezó a funcionar perfectamente el combo de selección de carreras, obviamente sin esas 2 carreras.

Al menos esa es una solución parcial y provisoria, pero necesito una solución definitiva que contemple esas 2 carreras.

Saludos

Gustavo

Ale:

Pudieron ver algo más de este tema?

Gracias!!

Gustavo

Buenos días, por favor generen un GDS y les pasamos un parche.

José:

Listo, GDS generado. Solicitud número 38145: Caracteres y codificación - Preinscripción - version 2.9.4.

Esperamos el parche.

Gracias!!

Saludos

José:

La solución enviada no funciona, el programador lo tuvo que solucionar de otra manera, investigando y modificando alguna otra cosa que no me dijo cual es.

Saludos

Gustavo

Gustavo, debemos pedirte que se aseguren de compartir la solución que encontraron, ya que el tiempo invertido por el equipo técnico en darle soporte es compartido por todos los usuarios.
Lamentamos si lo que enviamos no sirvió, pero no es claro el motivo. Si el programador puede comentarlo por este medio sería mas claro para todos.

el programador lo tuvo que solucionar de otra manera, investigando y modificando alguna otra cosa que no me dijo cual es.
¿De cuál manera? no te dijo entonces ¿cómo podemos ayudar? ¿O sea que él investigando pudo resolverlo? es lo que muchísimas veces les pedimos, que primero revisen si hay información disponible sobre el tema. Subiremos la solución cuando la sepamos. Saludos