Aviso en pantalla de inicio cuando el alumno no aprobó dos materias del año ante

Buenos días!

Pretendemos mostrar un panel de advertencia, que le indique al alumno que no aprobó las dos materias del año anterior si ese es el caso. Para lograrlo decidimos seguir este tutorial:

http://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.15.0/personalizaciones/creacion_operacion_3w

De tal manera, adaptamos los conocimientos otorgados por el tutorial a nuestra situacion.
Basicamente modificamos el archivo:

operaciones/inicio_alumno/template.twig

Y copiamos/creamos los siguientes archivos:

modelo/datos/db/inicio_alumno.php <— (el catalogo)
modelo/transacciones/inicio_alumno.php <— (el archivo de transacciones)
operaciones/inicio_alumno/controlador.php <— (lo copiamos para personalizarlo)

Todo funciona correctamente, a excepcion de la funcion dentro del catalogo que nos indica si el alumno cumple o no con la condicion.
Para hacer la consulta nos basamos en funcion dentro de “co_alumnos” llamada “get_cant_actividades_aprobadas_anio_cursada” y la modificamos para que por si sola haga la verificacion, retornando true o false. El codigo tal cual como esta en el catalogo es el siguiente:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

namespace unvime\modelo\datos\db;
//use \kernel\kernel;
use SIU\Chulupi\kernel;
//use siu\modelo_g3\nucleo_lib\guarani_db;
use pers_gestion\php\nucleo_lib\guarani_db;


/**
* parametros: alumno, plan_version, anio
* cache: no
*/
function aprobo_dos_materias_del_anio_anterior($parametros)
{
$res = true;
$alumno = (int)$parametros[‘alumno’];
$plan_version = (int)$parametros[‘plan_version’];
//Tomo el anio anterior al dado
$anio = (int)$parametros[‘anio’];
$anio = $anio - 1;
$sql = "SELECT
COUNT(vw_hist_academica_basica.elemento) as cant
FROM
vw_hist_academica_basica
JOIN sga_elementos_revision ON vw_hist_academica_basica.elemento = sga_elementos_revision.elemento
JOIN sga_elementos_plan ON sga_elementos_revision.elemento_revision = sga_elementos_plan.elemento_revision
WHERE
vw_hist_academica_basica.alumno = $alumno
AND sga_elementos_plan.plan_version = $plan_version
AND sga_elementos_plan.anio_de_cursada = $anio
AND vw_hist_academica_basica.resultado = ‘A’
";
$rs = guarani_db::consultar_fila($sql);
if ($rs[‘cant’] < 2) {
$res = false;
}
return $res;
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Lo que sucede es que la clase “guarani_db” no es encontrada y la clase “guarani_db_nucleo” no se puede volver a instanciar. La funcion en “co_alumnos” utiliza la instruccion “$rs = guarani_db::consultar_fila($sql);” ya que al parecer, en su estrucuta de carpetas, SI tiene acceso a la clase instanciada de “guarani_db”.

La libreria que SI tenemos disponible en el catalogo es “SIU\Chulupi\kernel” con la cual intentamos utilizar la instruccion “kernel::db()->consultar($sql);” y tambien “rs = kernel::db()->consultar_fila($sql);” pero parece no estar funcionando como pensamos. En conclusion no entra en el segmento “if” de la funcion en el catalogo. De tal manera la funcion siempre retorna true.

Espero no haberlos mareado.
Que posible solución sugieren?
Gracias de antemano.

Ya lo pudimos solucionar por nuestra cuenta. No habiamos considerado las comillas que vienen por defecto en los parametros que llegan al catalogo. Y modificamos levemente la consulta para utilizar otro formato de año.

Ezequiel, hago una modificacion en la consulta que realizaste. No recuperará actividades si el alumno cambió de plan o de version de plan despues de haber aprobado esas actividades el año anterior.
Cambie el join de la tabla sga_elementos_plan donde el campo “plan_version” lo relaciona con este mismo campo de la historia academica. De esta forma si el alumno aprobo 1 actividad en el Plan 1, luego se cambia al Plan 2 y aprueba una actividad, con tu consulta solo recuperaría la 2da actividad porque es la que aprobó en el plan actual del alumno. Con el cambio en la query va a recuperar las dos actividades, salvo que la actividad del plan 1 ya no se encuentre en el plan actual.

 $sql = "SELECT   COUNT(*) as cant
                  FROM   vw_hist_academica_basica
                    JOIN sga_elementos_revision ON sga_elementos_revision.elemento = vw_hist_academica_basica.elemento
                    JOIN sga_elementos_plan ON (sga_elementos_plan.plan_version  = vw_hist_academica_basica.plan_version AND
                                                                                         sga_elementos_plan.elemento_revision = sga_elementos_revision.elemento_revision)
                  WHERE   vw_hist_academica_basica.alumno = $alumno 
                       AND sga_elementos_plan.anio_de_cursada = $anio
                       AND vw_hist_academica_basica.resultado = 'A'
                 ";

¿Como calculan el dato $anio?
Segun esta query, el año que se pasa por parametro corresponde al año de cursada definido en el plan de estudios en cada actividad (1,2,3,4,5…)

Pregunto esto porque me queda dudas de si estan utilizando bien ese dato para el filtro.
Si lo que quieren verificar es si el alumno aprobó dos actividades durante el año académico anterior o año calendario anterior al año de la fecha actual, entonces el filtro sería:

AND vw_hist_academica_basica.fecha BETWEEN  to_date('01/01/' ||  EXTRACT(YEAR FROM CURRENT_DATE) - 1, 'DD/MM/YYYY') AND to_date('31/12/' || EXTRACT(YEAR FROM CURRENT_DATE) - 1, 'DD/MM/YYYY')

En este caso el rango de fechas es el año calendario anterior al año actual.
Otro tema es si consideran como actividades aprobadas cualquier origen de la misma: Examenes, Promociones, Equivalencias, Aprobaciones por Resolución.

Otro tema a considerar es el tema de actividades comunes entre propuestas. Si el alumno estuviere cursando dos o mas propuestas y tiene actividades comunes entre los planes y solo desean contar actividades por propuesta (propuesta seleccionada en el combo de propuestas por defecto), deberan agregar el filtro:

AND vw_hist_academica_basica.origen_otra_propuesta = false

A partir de version 3.16 se pueden registrar homologaciones (reconocimientos) de las actividades para que no se consideren en el plan de estudios del alumno. De no considerar estas actividades homologadas en el conteo de actividades aprobadas, deberían agregar el filtro:

AND vw_hist_academica_basica.homologada = 'N'

“db()->consultar($sql)” se usa cuando en la query puede recuperar n filas.
“db()->consultar_fila($sql)” se usa cuando la query recupera una fila. Cuando devolvemos solamente un COUNT(*), la query siempre trae una fila con lo cual usaremos el “consultar_fila”.