Problema al totalizar los módulos de Actividades Extracurriculares

Buenos días, tenemos un problema en la operacíon Egresados»Actualizaciones»Solicitar Certificaciones, dá como no cumplido el
módulo de créditos académicos. Esto ocurre porque la carrera tiene dos planes, en cada uno de los cuales se migraron las areas
extracurriculares como módulos para los cuales se generaron diferentes elementos con subtipo = 1

Así aparecen en la tabla sga_elementos:

elemento nombre nombre_abreviado codigo entidad_subtipo entidad compartible estado disponible_para
4630 CRÉDITOS ACADÉMICOS CRÉDITOS ACADÉMICOS 1 1 639958 N A T
4631 CRÉDITOS ACADÉMICOS CRÉDITOS ACADÉMICOS 1 1 639959 N A T

El alumno ha realizado actividades en los dos modulos pero al momento de egresar toma solo los módulos del plan actual
por eso pensamos que el elemento debería ser el mismo e hicimos una prueba cambiando el elemento=4631 por 4630 en las tablas
sga_elementos_revision y sga_reconocimiento_act y lo verificamos para un alumno con la siguiente consulta de la funcion
get_modulos_reconocidos_por_resolucion_alumno($alumno) de co_alumnos.php

SELECT sga_reconocimiento_act.elemento,
sga_reconocimiento_act.reconocimiento_total,
SUM(sga_reconocimiento_act.creditos) as creditos
FROM sga_reconocimiento_act,
sga_reconocimiento,
sga_elementos,
sga_g3entidades_subtipos
WHERE sga_reconocimiento_act.nro_tramite = sga_reconocimiento.nro_tramite AND
sga_reconocimiento_act.elemento = sga_elementos.elemento AND
sga_elementos.entidad_subtipo = sga_g3entidades_subtipos.entidad_subtipo AND
sga_reconocimiento.alumno = $alumno AND
sga_reconocimiento.estado = ‘“.aprobacion_por_resolucion::estado_cerrado.”’ AND
sga_g3entidades_subtipos.entidad_tipo = “.g3entidad::tipo_modulo.” AND
sga_reconocimiento_act.reconocimiento_total = ‘“.comunes::no.”’
GROUP BY sga_reconocimiento_act.elemento,
sga_reconocimiento_act.reconocimiento_total

nos muestra el total de créditos que le corresponden al alumno pero al ejecutarlo desde la aplicación dá el siguiente error :
Warning: Invalid argument supplied for foreach() in /usr/local/app/php/nucleo/propuestas/validador_planes/elementos_validacion/modulo_validacion_nucleo.php on line 52
Call to a member function set_regla() on null

Nos falta modificar otras tablas ?

También estuvimos analizando en cambiarles a los módulos de actividades extracurriculares subtipo = 1 por 6 pero habría que
modificar las siguientes tablas:

sga_elementos, sga_elementos_reglas_composicion, sga_g3entidades, sga_g3entidades_subtipos y no sé cuales otras por lo que no
continuamos.

Les agradecería que me orienten con éste tema.
Estamos en la versión 3.20

Saludos.

Al evaluar el cumplimiento de una certificacion (titulo) siempre se hace en base a la version actual del plan en que se encuentra el alumno.
Pueden ver las actividades de la version actual con la consulta:

SELECT * FROM vw_actividades_plan WHERE plan_version = ....

Pueden ver los modulos de la version actual con la consulta:

SELECT * FROM vw_modulos_plan WHERE plan_version = ....

O ambos con:

SELECT * FROM vw_elementos_plan WHERE plan_version = ....
El alumno ha realizado actividades en los dos modulos pero al momento de egresar toma solo los módulos del plan actual
El alumno realiza actividades, luego se la considera para el modulo que se este evaluando en cada momento. En este caso se lo evalua para el módulo segun la version de plan actual.
por eso pensamos que el elemento debería ser el mismo
Si. Es mas si el plan lo crean desde Guarani 3, y luego crean una nueva version, por cada modulo se crea una nueva revision de cada modulo, es decir un nuevo registro en la tabla [b]sga_elementos_revision[/b], la cual luego se registra en la nueva version del plan (sga_elementos_plan)

Pero Uds aca estan hablando de planes diferentes, no de versiones de un mismo plan, por lo cual se crearon modulos diferentes.
Una opcion, como sucede con equivalencias entre planes cuando cambian las actividades, es volver a reconocer en el nuevo plan en que se encuentra el alumno los creditos a ese modulo (el modulo del 2do plan), como lo hicieron en el plan anterior con el otro modulo.

e hicimos una prueba cambiando el elemento=4631 por 4630 en las tablas sga_elementos_revision y sga_reconocimiento_act y lo verificamos para un alumno con la siguiente consulta de la funcion get_modulos_reconocidos_por_resolucion_alumno($alumno) de co_alumnos.php
Si quisieran utilizar el mismo modulo del 1er plan en el 2do plan pero con una revision diferente deberian:

Supongamos que tienen:
Plan 1 - Modulo 1 (4630) - Revision 1 (dato inventado 2543)
Plan 2 - Modulo 2 (4631) - Revision 1 (dato inventado 3025)

1- Crear un nuevo registro en sga_elementos_revision (en base al actual)
Para elemento 4630 crear una nueva revision. Supongamos se genera la revision 3059.

INSERT INTO sga_elementos_revision (elemento, regla, parametros, origen_creditos)
   SELECT 4630, regla, parametros, origen_creditos
        FROM sga_elementos_revision 
    WHERE elemento_revision = 3025

2- Crear los registros en sga_elementos_comp (con las mismas actividades que estan actualmente en el 2do plan). Se supone que estas actividades son las mismas que las del 1er plan, o es un modulo vacio?

INSERT INTO sga_elementos_comp (elemento_padre, elemento_hijo, puntaje, orden)
   SELECT 3059, elemento_hijo, puntaje, orden 
      FROM sga_elementos_comp 
   WHERE elemento_padre = 3025;

3- Cambiar en la version del 2do plan el dato “elemento_revision” del modulo, por el nuevo creado en el punto 1.

UPDATE sga_elementos_plan
     SET elemento_revision = 3059
   WHERE plan_version = .....      
        AND elemento_revision = 3025;

  1. Cambiar en la tabla sga_elementos_comp que corresponde al modulo raiz (si es que aqui estaba el modulo de actividades extracurriculares) de la version del plan la revisión del modulo extracurricular:
UPDATE sga_elementos_comp
       SET elemento_hijo = 3059
   WHERE elemento_padre = <elemento_revision del modulo raiz>
       AND elemento_hijo = 3025;

Pueden buscar los modulos de la vesrion del plan con:

SELECT * FROM vw_modulos_plan WHERE plan_version = ......
  1. Cambiar el dato entidad que corresponde al modulo que cambiaste en el cumplimiento del titulo en el Plan 2:
UPDATE sga_condiciones_requisitos 
      SET entidad = (SELECT entidad FROM sga_elementos WHERE elemento = 4630) -- Entidad del modulo original del Plan 1 que ahora se asignó al plan 2
 WHERE  requisito_condicion IN 
    (SELECT requisito_condicion
          FROM vw_condiciones
      WHERE condicion_tipo = '3'  -- Cumplimiento de Titulos
            AND plan_version =  <Version del Plan 2>
            AND condicion_entidad = (SELECT entidad FROM sga_certificados WHERE certificado = ....... )  -- id de certificado correspondiente al titulo 
            AND entidad = (SELECT entidad FROM sga_eleemntos WHERE elemento = 4631) -- Modulo de actividades extracurriculares que estaba en el Plan 2
   ;


Con esto el alumno seguirá teniendo reconocido creditos para el modulo 4630, porque asi lo tiene registrado en la tabla sga_reconocimiento_act y no necesitan volver a reconocerle los creditos en el 2do modulo (4631) porque ya no existe en el 2do plan.

No tenemos casos de que un modulo este en diferentes planes. Si en diferentes versiones de un plan, en cada version con su correspondiente revision.
Pueden probar esto en una base de test y verificar si funciona y no surge otro problema.

También estuvimos analizando en cambiarles a los módulos de actividades extracurriculares subtipo = 1 por 6
Esto lo podrian hacer, ya que el subtipo 6 se usa para "Areas de Actividades Extracurriculares", con la particuaridad que este tipo de modulo solo puede contener otros modulos de subtipo 6 o actividades de subtipo 51 (Actividades Extracurriculares) Aunque esto podrian ajustarlo cambiando la definicion en la tabla [b]sga_elementos_relacion[/b], que indica para cada tipo de modulo que elementos (modulos o submodulos) puede contener. En principio no deberian modificar esta tabla, o de desear hacerlo que nos consulten para ver si es posible o si trae alguna complicación que el sistema no este preparado para esa combinación.

5

Hola Alejandro, hice los pasos que me indicaste en el ejemplo, todo con los números correspondientes a mi BD :

1- Crear un nuevo registro en sga_elementos_revision (en base al actual) Para elemento 4630 crear una nueva revision. Supongamos se genera la revision 3059. INSERT INTO sga_elementos_revision (elemento, regla, parametros, origen_creditos) SELECT 4630, regla, parametros, origen_creditos FROM sga_elementos_revision WHERE elemento_revision = 3025 2- Crear los registros en sga_elementos_comp (con las mismas actividades que estan actualmente en el 2do plan). Se supone que estas actividades son las mismas que las del 1er plan, o es un modulo vacio? Es un modulo vacio INSERT INTO sga_elementos_comp (elemento_padre, elemento_hijo, puntaje, orden) SELECT 3059, elemento_hijo, puntaje, orden FROM sga_elementos_comp WHERE elemento_padre = 3025;
aqui lo cambié por : INSERT INTO sga_elementos_comp (elemento_padre, elemento_hijo, puntaje, orden) SELECT elemento_padre,3059, puntaje, orden FROM sga_elementos_comp WHERE elemento_hijo = 3025;
3- Cambiar en la version del 2do plan el dato "elemento_revision" del modulo, por el nuevo creado en el punto 1. UPDATE sga_elementos_plan SET elemento_revision = 3059 WHERE plan_version = ..... AND elemento_revision = 3025;
pero dá el error: "Error de integridad cargando el plan de estudios" Si agrego el módulo a sga_elementos_plan ,con un insert, no dá el error pero queda duplicado. Qué estaré haciendo mal ?

Ah… correcto el error.
Falto el punto 4 que agregué en el mensaje anterior.

Pero por el agregado de la revision del modulo extracurricular que realizaste en la tabla sga_elementos_comp, entonces solo te falta quitar de alli la revisión del modulo 3025

DELETE FROM sga_elementos_comp WHERE elemento_padre = ... AND elemento_hijo = 3025;

2

Hola Alejandro, hice la correción del punto 4 y ahora el plan con sus versiones se ve correcto, pero, al ingresar a la operación Egresados»Actualizaciones»Solicitar Certificaciones vuelve a mostrar el error:

Warning: Invalid argument supplied for foreach() in /usr/local/app/php/nucleo/propuestas/validador_planes/elementos_validacion/modulo_validacion_nucleo.php on line 52
Call to a member function set_regla() on null

Verifiqué que en la tabla sga_elementos_comp esté como hijo la última revisión del elemento 4630, ésto pora cada una de las versiones del plan y en sga_elementos_plan esté asociado el plan_versión con la última revisión.

Si vas a la operacion “Administrar planes de estudio”, da error cuando seleccionas ese plan de estudios?

Ejecuta lo siguiente para ese plan de estudios y fijate si da algun mensaje de error (los dos parametros pueden ser NULL, el 2do es la version del plan):

SELECT * FROM f_controles_planes(<PLAN>, NULL);

Hola Alejandro, con respecto a la pregunta :

Si vas a la operacion "Administrar planes de estudio", da error cuando seleccionas ese plan de estudios?
esta operación no dá error, muestra el plan correctamente. Hice el control del plan que me indicaste:
SELECT * FROM f_controles_planes(, NULL);
no dá ningún error

El mensaje:

pero dá el error: "Error de integridad cargando el plan de estudios"
¿En que operación lo da? Podes enviar el log?

Recorda que por cada modulo solo debe existir una revisión en un plan de estudios. Cada revisión de un módulo solo debe estar en una version de plan

¿Esta query devuelve algun registro?

SELECT er.elemento, ep.plan_version, COUNT(*)
FROM sga_elementos_revision as er
JOIN sga_elementos_plan as ep ON ep.elemento_revision = er.elemento_revision
GROUP BY er.elemento, ep.plan_version
HAVING COUNT(*) > 1

Hola Alejandro, no es ese el error, los planes quedaron bien, lo verifiqué con

SELECT * FROM f_controles_planes(, NULL);
y no genera registros.
El error que muestra la operación Egresados»Actualizaciones»Solicitar Certificacione es :
Warning: Invalid argument supplied for foreach() in /usr/local/app/php/nucleo/propuestas/validador_planes/elementos_validacion/modulo_validacion_nucleo.php on line 52
Call to a member function set_regla() on null

Hola,

El problema parece estar en las condiciones de cumplimiento del certificado, que se almacenan en la tabla ‘sga_condiciones_requisitos’. Quizás alguna condición para el certificado vinculado al plan-versión refiere al módulo que no pertenece al mismo (sga_condiciones_requisitos.entidad)? Pueden revisar esto?

Saludos, Florencia.
2

Iris, es como indica Florencia.
El problema estuvo en que para el titulo del plan de estudios que estas modificando, esto es asignando una nueva revisión de un modulo de actividades extracurriculares de un plan anterior, entonces lo que hay que hacer es que a ese titulo tambien se le asigne este módulo y no el que tenia originalmente.

Volve a ver la Respuesta #1, punto 5.

Hola Florencia y Alejandro, hice el update:

5. Cambiar el dato entidad que corresponde al modulo que cambiaste en el cumplimiento del titulo en el Plan 2:

UPDATE sga_condiciones_requisitos
SET entidad = (SELECT entidad FROM sga_elementos WHERE elemento = 4630) – Entidad del modulo original del Plan 1 que ahora se asignó al plan 2
WHERE requisito_condicion IN
(SELECT requisito_condicion
FROM vw_condiciones
WHERE condicion_tipo = ‘3’ – Cumplimiento de Titulos
AND plan_version = <Version del Plan 2>
AND condicion_entidad = (SELECT entidad FROM sga_certificados WHERE certificado = … ) – id de certificado correspondiente al titulo
AND entidad = (SELECT entidad FROM sga_elementos WHERE elemento = 4631) – Modulo de actividades extracurriculares que estaba en el Plan 2
) ;


y funcionó, ya se pudo egresar al alumno, quedó resuelto el problema original por el que no se le acumulaban los creditos academicos de un plan con otro.
Muchas gracias !!!

Bien, perfecto.
Esto sucede en esos planes de esa propuesta, o tambien tienen este tipo de modulos de actividades extracurriculares en planes de otras propuestas?
Porque la solución va a ser similar y en tal caso podriamos hacer una funcion que haga ese reemplazo, indicando:

  • plan origen
  • version de plan destino
  • modulo de actividades extracurriculares del plan origen
  • modulo de actividades extracurriculares de la version de plan destino

Si Alejandro, nos vendría de maravillas la función porque tenemos la misma situación en otra U.A. para muchas propuestas.

Quizas la solución era mas simple, asignar la revision del modulo 2 al modulo 1 (cambiar en sga_elementos_revision el dato “elemento”) y en la definicion de cumplimientos del titulo, el dato “entidad” cambiarlo por el del modulo 1.

Ejemplo
Modulo 1: elemento = 25 / entidad = 40 / elemento_revision = 55
Modulo 2: elemento = 26 / entidad = 41 / elemento_revision = 70

Que el modulo 1 (elemento 25) pase a tener dos revisiones, los datos de elemento_revision 55 y 70.
Cambiar en el plan 2, entidad 41 por 40

Hola Alejandro, si, me parece que es más simple esta solución. Voy a hacer una prueba y te comento el resultado.

Hola Alejandro, perdón por la demora en responder pero no pude hacer antes la prueba.
Te comento que funcionó, es la última solución que me sugeriste:

Quizas la solución era mas simple, asignar la revision del modulo 2 al modulo 1 (cambiar en sga_elementos_revision el dato "elemento") y en la definicion de cumplimientos del titulo, el dato "entidad" cambiarlo por el del modulo 1.

Ejemplo
Modulo 1: elemento = 25 / entidad = 40 / elemento_revision = 55
Modulo 2: elemento = 26 / entidad = 41 / elemento_revision = 70

Que el modulo 1 (elemento 25) pase a tener dos revisiones, los datos de elemento_revision 55 y 70.
Cambiar en el plan 2, entidad 41 por 40


Muchas gracias por tu ayuda !!!