Vinculación de cursos virtuales

Hola Federico,

En la operación Administrar Personas, solapa Moodle vas a poder vincular las personas una a una. Este método es bastante tedioso si son muchas las personas que tenes que vincular.

Para la versión 3.18.0 ya tenemos desarrollado un comando para vincular con Moodle de forma masiva. Si necesitas que te adelantemos dicha funcionalidad, crea un GDS y te lo enviamos.

saludos.
1

Leonel:

Sí, efectivamente parece que con esto se resolvió.
Nos quedan un par de dudas cruciales con este asunto:

  • En la vinculación de la comisión Guaraní con la comisión existente en Moodle, ¿cómo funciona la opción de “Matricular alumnos de la comisión”? La ayuda del sistema indica que los matricula “automáticamente”, ¿pero en què momento?
  • Una vez vinculada manualmente la comisión con el curso virtual, ¿qué sucede si utilizamos la operación “Generar Cursos Virtuales Masivamente”?
  • En la operación “Generar Cursos Virtuales Masivamente” hemos tenido inconvenientes con algunos alumnos que presentan errores (por duplicación de correo electrónico, por ejemplo). ¿Esto detiene la generación y matriculación completamente o sólo evita la matriculación/actualización de los alumnos que presentaron errores?

Por favor, esta información resulta esencial para que podamos avanzar con las inscripciones, cuanta más data nos puedan brindar al respecto, mejor!

De nuevo, muchas gracias!
Saludos,
Federico

Leonel:

Ahora nos saltó el error que adjuntamos cuando realizamos la vinculación de comisión con curso virtual.

¿Qué puede estar pasando? En un rato subiremos los logs correspondientes.

Saludos!
Federico


Sin tAtulo.jpg

Sin tAtulo.png

Hola Federico, te respondo con gusto:

En la vinculación de la comisión Guaraní con la comisión existente en Moodle, ¿cómo funciona la opción de "Matricular alumnos de la comisión"? La ayuda del sistema indica que los matricula "automáticamente", ¿pero en qué momento?

Lo que hace es tomar los alumnos de la comisión de Guaraní, si los mismos ya fueron creados en Moodle solamente los matricula en el curso de Moodle. Si no existen en Moodle, entonces los crea y luego los matricula, al crearlos también los vincula en Guaraní (tabla int_pv_usuarios).

Una vez vinculada manualmente la comisión con el curso virtual, ¿qué sucede si utilizamos la operación "Generar Cursos Virtuales Masivamente"?

No debería hacer nada, porque ya esta vinculado (tablas int_pv_cursos y int_pv_cursos_comisiones).

En la operación "Generar Cursos Virtuales Masivamente" hemos tenido inconvenientes con algunos alumnos que presentan errores (por duplicación de correo electrónico, por ejemplo). ¿Esto detiene la generación y matriculación completamente o sólo evita la matriculación/actualización de los alumnos que presentaron errores?

Detiene el proceso, porque cuando se crean o matriculan los alumnos se hace en lote para reducir el numero de peticiones a la API REST de Moodle, si en ese lote hay algún dato incorrecto o email duplicado falla todo el lote. Igualmente se pueden ver los logs, y saber que persona tiene duplicado el email, o algún otro dato invalido.

saludos.
2

Hola,

Ahora nos saltó el error que adjuntamos cuando realizamos la vinculación de comisión con curso virtual. ¿Qué puede estar pasando? En un rato subiremos los logs correspondientes.

Dale, pasanos los logs:

Logs de Guaraní (instalacion/i__desarrollo/p__guarani/logs/sistema.log).
Logs de Apache (/var/log/apache2/error.log).

saludos.
1

Leonel:

El log de la aplicación indica lo siguiente al momento del error:

[DEBUG][guarani] SQL con perfil de datos: SELECT        count(mdp_personas.persona) as cant^M
                FROM    mdp_personas^M
                                WHERE   trim(regexp_replace(translate(mdp_personas.usuario,'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿ','AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuy'), '[ ]{2,}', ' ','g')) ILIKE '17881715'^M
                 AND mdp_personas.persona <> '3' ^M
[DEBUG][guarani] SQL con perfil de datos: SELECT        mdp_personas.persona,
                                                mdp_personas.apellido,
                                                mdp_personas.nombres
                                FROM    mdp_personas
                                WHERE   mdp_personas.usuario = '17881715'
                ^M
[WARNING][guarani] componente(37000061): guarani_pers_datos_tabla El registro tiene una estructura incorrecta: El campo 'usuario_administrador_autogestion'  no forma parte de la DEFINICION.^M
[DEBUG][guarani] SQL con perfil de datos: SELECT                acc_tipos_usuarios.tipo_usuario,^M
                                                        acc_tipos_usuarios.nombre^M
                                FROM            acc_tipos_usuarios^M
                                WHERE           acc_tipos_usuarios.tipo_usuario NOT IN ('Alumno', 'Docente', 'Cursos')^M
                                                        AND acc_tipos_usuarios.tipo_usuario = 'Administrador3w'^M
                                ORDER BY        acc_tipos_usuarios.nombre^M
                ^M
[ERROR][guarani] SQLSTATE[42601]: Syntax error: 7 ERROR:  syntax error at or near ")"
LINE 12:     ) -- toba_log: 55308
             ^^M
[DEBUG][toba] ************ ABORTAR transaccion (guarani3@guaraniubadbtest.rec.uba.ar) ****************^M
[DEBUG][guarani] Ocurrió un error al vincular curso en Moodle:^M
[ERROR][guarani] Ha ocurrido un error grabando en la base de datos.^M
[DEBUG][toba] Mensaje a usuario: Falló la vinculación del curso^M
[INFO][toba] componente(89000021): [ evento ]  El METODO [ evt__vincular_bis ] no existe - 'vincular_bis' no fue atrapado^M
[DEBUG][toba] [SECCION] Configurando dependencias para responder al servicio...^M
[DEBUG][toba] componente(37000298): Pantalla de servicio: ''^M

Hola Federico, antes que nada gracias por los logs!!!

El error por lo que veo se da dentro de la función evt__form_vincular__modificacion de la clase php/operaciones/cursadas/comisiones/ci_edi_educacion_virtual.php. El problema es que no puedo detectar que se esta “rompiendo”, probé las queries y funcionan bien (no tienen errores de sintaxis):


				SELECT        count(mdp_personas.persona) as cant
                FROM    mdp_personas
                                WHERE   trim(regexp_replace(translate(mdp_personas.usuario,'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿ','AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuy'), '[ ]{2,}', ' ','g')) ILIKE '17881715'
                 AND mdp_personas.persona <> '3';
				 
				SELECT        mdp_personas.persona,
                                                mdp_personas.apellido,
                                                mdp_personas.nombres
                                FROM    mdp_personas
                                WHERE   mdp_personas.usuario = '17881715';
								
				SELECT                acc_tipos_usuarios.tipo_usuario,
                                                        acc_tipos_usuarios.nombre
                                FROM            acc_tipos_usuarios
                                WHERE           acc_tipos_usuarios.tipo_usuario NOT IN ('Alumno', 'Docente', 'Cursos')
                                                        AND acc_tipos_usuarios.tipo_usuario = 'Administrador3w'
                                ORDER BY        acc_tipos_usuarios.nombre;

Me podrías enviar el log completo para ver si encuentro mas información.

saludos.
2

Leonel:

Adjuntamos el log completo!

Gracias por la asistencia.

Saludos,
Federico

EDIT: Se eliminan los logs adjuntos por contener información sensible.

Hola Federico, antes que nada gracias por los logs!!!

Esta ocurriendo lo siguiente:

En la operación Administración de Comisiones solapa Moodle, estas queriendo vincular una comisión con un curso de Moodle. Pero por lo que veo en los logs, no esta llegando el valor que eligieron en el combo Curso, traza:

  1. Primero se llama a la función evt__form_vincular__modificacion del CI php/operaciones/cursadas/comisiones/ci_edi_educacion_virtual.php. Por lo que veo, no esta llegando el valor de $datos[‘curso’].

  2. Luego se llama a la función insertar_curso_pv de la clase php/nucleo/plataformas_virtuales/act_plataformas_virtuales_nucleo.php, pero no le llega el valor en $id_curso_externo, por eso da error la query:


INSERT INTO int_pv_cursos
				(
					plataforma,
					nombre,
					id_curso_externo
				)
				VALUES
				(
					1,
					'No aplica',
					
				)
[ERROR][guarani] SQLSTATE[42601]: Syntax error: 7 ERROR:  syntax error at or near ")"

Pregunta, que valor eligieron en el combo Curso? tiene valores?

saludos.
2

Leonel:

Desde ya, asignamos el curso que corresponde de Moodle, vinculado a través del docente cargado en ambos sistemas. Adjuntamos la captura con la data.
El error surge al clickear “Vincular”.


Curso Vinculado.jpg

Curso Vinculado.png

Hola Federico,

Hay un bug por lo que veo, te digo como solucionarlo:

En la función evt__form_vincular__modificacion de la clase php/operaciones/cursadas/comisiones/ci_edi_educacion_virtual.php, cuando invoca a la función insertar_curso_pv debería quedar así:

$curso_id = guarani::act('act_plataformas_virtuales')->insertar_curso_pv($this->s__datos_plataforma['plataforma'], $datos['curso']);

Se le esta pasando un parámetro demás.

Fíjate si con eso se soluciona.

saludos.
1

También en 3W:

Función vincular_curso_virtual de la clase src/siu/modelo/transacciones/cursos_virtuales.php, donde se invoca la función insertar_curso_pv debería quedar así:

$curso_id = \guarani::act('act_plataformas_virtuales')->insertar_curso_pv($datos_plataforma['plataforma'], $curso);

Esto ya va a salir corregido en la próxima versión (3.18.0).

saludos.
1

Leonel:

Haciendo esa corrección funcionó! Avanzamos con el tema de matriculación en Moodle y les avisamos.

Muchas gracias!

Saludos,
Federico

Leonel:

Molestamos ahora con lo siguiente: logramos realizar la vinculación y comenzamos la matriculación en los cursos virtuales a través del módulo Moodle de “Administrar Comisión”.
Cuando actualizamos la matrícula nos salta un error de que falló el proceso debido a un error, indicando que probablemente se deba a e-mails repetidos de alumnos.
¿Existe un log en el que figuren los casos específicos de duplicación que están afectando al proceso? ¿O se toma en cuenta toda la base de personas de Guaraní?

Muchas gracias!
Saludos,
Federico

Hola Federico,

Si, en los logs de Guaraní (instalacion/i__desarrollo/p__guarani/logs/sistema.log) se guarda información de debug sobre lo que se le esta enviando al WS de Moodle. En los mismos busca la frase “Usuarios a crear en Moodle”, y debajo de esa frase esta el array de usuarios que se les envió a Moodle.

Para ver lo que responde Moodle, se puede buscar la frase “Response”.

saludos.
1

Leonel:

¿Cómo estás?

Tenemos la siguiente situación. Avanzamos con la limpieza de mails duplicados en Guaraní (verificamos la tabla mdp_personas_contactos y no queda ningún duplicado en esa tabla), no obstante al intentar la sincronización de alumnos con el curso virtual (desde “Administrar Comisiones”), el sistema devuelve que la matriculación en Moodle falló debido probablemente a duplicación en la asignación de mails (adjuntamos la pantalla).

¿Qué puede estar sucediendo?

Desde ya, muchas gracias!

Saludos!
Federico


Error VinculaciAn Moodle.jpg

Error VinculaciAn Moodle.png

Leonel:

Consultamos adicionalmente:

  • ¿Qué sucede si tenemos en la base de Personas algún usuario sin mail asignado?

  • ¿Y si justo estas personas sin mail asignado pertenecen al grupo de alumnos inscriptos a la comisión que queremos matricular en los cursos virtuales?

Muchas gracias!
Federico

Leonel:

Adjuntamos el log completo al momento de surgir el error que te comentábamos. Dentro del log nos llama particularmente la atención el siguiente mensaje:

-o-o-o-o-o-
Fecha: 21-03-2020 03:20:56
Operacion: Administrar Comisiones
Usuario: toba
….
[DEBUG][toba] Mensaje a usuario: Falló la actualización de alumnos en Moodle. <b>Posibles Causas:</b> Alumnos con el mismo email asignado.
[INFO][toba] componente(37000315): [ registrar_evento ]  El METODO [ evt__editor_educacion_virtual__actualizar_alumnos ] no existe - 'actualizar_alumnos' no fue atrapado
[DEBUG][toba] [SECCION] Configurando dependencias para responder al servicio...

Por favor, apenas tengan novedades, avísennos!
Muchas gracias!
Saludos,
Federico

EDIT: Se eliminan los llogs adjuntos por contener información sensible.

Hola,

¿Qué sucede si tenemos en la base de Personas algún usuario sin mail asignado? ¿Y si justo estas personas sin mail asignado pertenecen al grupo de alumnos inscriptos a la comisión que queremos matricular en los cursos virtuales?

Si hay personas sin email definido, entonces no matricula a ningún alumno de esa comisión en Moodle, y muestra en pantalla el siguiente mensaje:
El/Los alumnos/s Juan Perez, Jose Sito no tiene/n email asignado, por lo tanto no puede/n ser matriculados en Moodle.

Este control se hace en la función actualizar_alumnos_moodle de la clase php/operaciones/cursadas/comisiones/ci_edi_educacion_virtual.php. Podes verlo acá: https://colab.siu.edu.ar/trac/guarani3/browser/nodos/uba-ffyb/gestion/trunk/3.16.0/php/operaciones/cursadas/comisiones/ci_edi_educacion_virtual.php#L164.

saludos.
2

Hola Federico, antes que nada gracias por los logs!!!

En los mismos, debajo de donde dice “Usuarios a crear en Moodle:” vas a ver toda la estructura que se la esta enviando a Moodle. El inconveniente es que son mas de 294, y en los logs aparece cortado dicho array.

Viendo el error devuelto por Moodle, el mismo no nos brinda mucha información:


[DEBUG][guarani] Response:
[DEBUG][guarani] array (
  'exception' => 'invalid_parameter_exception',
  'errorcode' => 'invalidparameter',
  'message' => 'Detectado valor de parámetro no válido',
)

También viendo los usuarios que se envían a Moodle, no vi ninguno con datos inválidos (revisando a ojo), habría que ver el resto que no se muestra en los logs si tienen datos inválidos.

Igualmente probemos con lo siguiente, en la función actualizar_alumnos_moodle de la clase php/operaciones/cursadas/comisiones/ci_edi_educacion_virtual.php linea 154 reemplaza esto:


$usuarios[$key]['username'] = $persona['usuario'];
$usuarios[$key]['firstname'] = $persona['nombres'];
$usuarios[$key]['lastname'] = $persona['apellido'];
$usuarios[$key]['email'] = $emails_personas[$persona['persona']]['email'];
$usuarios[$key]['idnumber'] = $persona['persona'];

por esto otro:


$usuarios[$key]['username'] = trim($persona['usuario']);
$usuarios[$key]['firstname'] = trim($persona['nombres']);
$usuarios[$key]['lastname'] = trim($persona['apellido']);
$usuarios[$key]['email'] = trim($emails_personas[$persona['persona']]['email']);
$usuarios[$key]['idnumber'] = $persona['persona'];

Propongo esto, porque hemos tenido casos de universidades que por problemas de migración tienen espacios en blanco antes o después de los datos.

Proba con esa modificación, y cualquier inconveniente nos envías los logs nuevamente.

saludos.
2