Ramiro, revisé el código y debería aplicar todas las matrices definidas como “cambio de version de plan” que esten definidas en la version del plan actual del alumno. Si el plan tiene 3 versiones: v1, v2 y v3.
El alumno ingreso en v1, se cambio a v2 y luego se cambió a v3.
Actualmente esta en la v3. Si se aplica matrices por cambio de version de plan que es el caso que estas viendo, debería aplicar todas las matrices que esten definidas en la v3 (destino) y con cualquier version origen del mismo plan
Si existen estas matrices:
Matriz - Origen - Destino
M1 - v1 - v2
M2 - v1 - v3
M3 - v2 - v3
M4 - - v2
M5 - - v3
El alumno que este en v3 y tuvo un cambio de version de plan (ya sea que paso de v1 a v2 y luego a v3 o paso de v1 a v3), debería aplicarse las matrices definidas en v3: M2, M3 y M5.
Por favor busca ese alumno y fijate que devuelve estas consultas:
SELECT sga_alumnos.alumno,
sga_alumnos.propuesta as propuesta_origen,
sga_planes_versiones.plan as plan_origen
FROM sga_alumnos
JOIN sga_planes_versiones ON sga_alumnos.plan_version = sga_planes_versiones.plan_version
WHERE sga_alumnos.calidad ='A' AND
sga_alumnos.ubcacion IN (<ID UBICACIONES SELECCIONADAS> AND
sga_alumnos.plan_version IN (<ID de Versiones de plan seleccionadas>) AND
-- Tuvo un cambio de version de plan de estudios.
EXISTS (SELECT 1
FROM sga_alumnos_hist_planes
WHERE sga_alumnos_hist_planes.alumno = sga_alumnos.alumno AND
sga_alumnos_hist_planes.plan_version = sga_alumnos.plan_version AND
sga_alumnos_hist_planes.motivo_plan = 3)
-- AND sga_alumnos.alumno =
Con los valores de la consulta anterior, fijate esta otra y si devuelve las matrices de equivalencias con destino la version del plan en el que se encuentra el alumno hoy (supongamos la v3) y con cualquier version origen del mismo plan (v1, v2, o sin version origen-NULL)
SELECT m.matriz -- , pPropuestaOrigen, pPlanOrigen, pPlanVersionOrigen
FROM sga_equiv_matrices as m
WHERE m.plan_version_destino = <PLAN VERSION DESTINO - EN LA QUE ESTA ACTUALMENTE EL ALUMNO>
AND m.aplicacion_automatica = 'S'
AND m.activo = 'S'
AND m.alcance = 'Version'
AND m.propuesta_origen = <propuesta_origen de la query anterior>
AND m.plan_origen = <plan_origen de la query anterior. Que deberia ser el mismo plan actual del alumno>
AND (NULL IS NULL OR m.plan_version_origen IS NULL OR m.plan_version_origen = NULL);
Podes poner un debug en el metodo otorgar_equivalencias del archivo act_equivalencias_nucleo.php y ver que querys se ejecutan, es decir esta sql como se construye:
$sql = " SELECT *
FROM f_equiv_otorgar_equivalencias('$accion', $alumno, $propuesta_origen, $plan_origen, $plan_version_origen, $actividad)
";
Si podes dejar un registro de lo que contiene $sql cada vez que se llama a este metodo y busquemos ese alumno para ver con que parametros se ejecuta esa función.
3