Notas de equivalencias internas

Buenos días!
Nos encontramos en proceso de migración de G2 a G3 y leyendo en la documentación vemos que las equivalencias internas otorgadas en G2 que estaban en la tabla sga_equiv_relacion pasan a G3 en sga_equiv_internas, todo bien, pero lo que no tenemos en está última tabla es la nota del orígen ya que en G2 la nota no se guardaba en sga_quiv_relacion sino que teníamos que buscarla en la historia académica del orígen.
Quería saber si ustedes tienen algún script que podamos utilizar para pasar esas notas a la tabla sga_equiv_internas.
Saludos
Marcela

Hola Marcela, es un dato NO obligatorio en esa tabla, con lo cual pueden realizar la migracion igual.
Igualmente si quieren cargar ese dato fijate si este UPDATE carga la nota que corresponde a la nota origen de la equivalencia.


UPDATE sga_equiv_internas
    SET nota = (CASE 
				WHEN origen IN ('Cursada','Promocion','Examen') THEN
                                      (SELECT d_origen.nota
                                          FROM sga_equiv_otorgada as e
                                             JOIN sga_equiv_tramite as t ON t.equivalencia_tramite = e.equivalencia_tramite
                                             JOIN sga_alumnos as alu ON alu.alumno  = t.alumno
                                             JOIN sga_alumnos as alu_origen ON alu_origen.persona = alu.persona
                                             JOIN sga_actas_detalle as d_origen ON (d_origen.id_acta = sga_equiv_internas.id_acta AND d_origen.alumno = alu_origen.alumno)
                                        WHERE e.equivalencia = sga_equiv_internas.equivalencia
                                               AND alu_origen.alumno <> alu.alumno
                                               AND alu_origen.propuesta = sga_equiv_internas.propuesta -- Propuesta Origen
                                         LIMIT 1)
                             WHEN origen = 'Equivalencia' THEN
                                      (SELECT nota FROM sga_equiv_otorgada WHERE equivalencia = sga_equiv_internas.equivalencia)
                             WHEN origen = 'Resolucion' THEN
                                      (SELECT nota FROM sga_reconocimiento_act WHERE reconocimiento_act = sga_equiv_internas.reconocimiento_act)
                           END)
WHERE nota IS NULL;

3

Hola Alejandro,
Al ejecutar el sql nos dá el siguiente error:

ERROR: el operador no existe: character varying = boolean
LINE 3: WHEN origen IN (‘Cursada’,'Prom…
^
HINT: Ningún operador coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos.
SQL state: 42883
Character: 84

Actualice la query, fijate de correrla primero con:

SELECT (CASE....... END),
 * FROM sga_equiv_internas WHERE nota IS NULL;

Y verificas si devuelve la nota. Podes tomar algunos casos de examenes, promociones, equivalenicas de ejemplo y buscar la nota si es la que esta devolviendo el CASE.

Alejandro
Ejecuté el select que me indicas y devuleve todos los registros con NULL en la nota.
Nosotros en la tabla sga_equiv_internas todos los registros tienen origen = ‘Examen’ o ‘Cursada’ y el id_acta también es NULL, por ese motivo devuelve todo null.
A que se debe esto?

Buenos días!
Las notas del orígen de las equivalencias las necesitamos para mostrar en el reporte interno que estamos personalizando para Control Curricular para los egresados.
Yanina que está encargada de la migración me comenta que solo pasan estos datos a la hora de migrar las equivalencias internas

SELECT DISTINCT
	ceo.equivalencia,
	cpp.propuesta,
	cpe.elemento,
	ser.fecha,
	CASE 
		WHEN ser.origen = 'A' THEN 'Examen'
		WHEN ser.origen = 'R' THEN 'Cursada'
	END
FROM 
     mig._cnv_pk_equiv_otorgada as ceo
	 JOIN mig.sga_equiv_otorgada as e ON e.equivalencia = ceo.equivalencia_g2
	 JOIN mig._cnv_pk_equiv_tramite as met ON met.operacion_equiv_g2 = e.operacion_equiv 	 
     JOIN mig.sga_equiv_relacion as ser ON ser.equivalencia = ceo.equivalencia_g2
     JOIN mig._cnv_pk_elementos as cpe ON (cpe.unidad_academica = ser.unidad_academica AND
	                                       cpe.codigo = ser.materia AND
	                                       cpe.tipo = 'MATERIA') 
     JOIN mig._cnv_pk_propuestas as cpp ON (ser.unidad_academica = cpp.unidad_academica AND
	                                        ser.carrera = cpp.carrera)

Por lo que el id_acta tampoco lo tenemos en la tabla sga_equiv_internas

El campo id_acta o equivalencia_origen se setea cuando las equivalencias son otorgadas desde Guarani 3 ya estando en producción.
Por migración esos datos por lo que veo no estan en Guarani 2 por eso no se pueden migrar.

Fijate si esta consulta, en la 1er columna devuelve la nota origen:

SELECT 	
	(CASE
		WHEN sga_equiv_internas.origen IN ('Cursada','Promocion','Examen') THEN
                      (CASE 
                        WHEN sga_equiv_internas.id_acta IS NOT NULL THEN 
                             (SELECT d_origen.nota
                               FROM sga_alumnos as alu_origen
                               JOIN sga_actas_detalle as d_origen ON (d_origen.id_acta = sga_equiv_internas.id_acta AND d_origen.alumno = alu_origen.alumno)
                               WHERE alu_origen.persona = alu.persona
                                 AND alu_origen.propuesta = sga_equiv_internas.propuesta -- Propuesta Origen
                              LIMIT 1)
	 				ELSE 
         				(-- Busco la nota en un acta para la misma fecha
						 SELECT d_origen.nota
                           FROM sga_alumnos as alu_origen
                           JOIN sga_actas_detalle as d_origen ON d_origen.alumno = alu_origen.alumno
						   JOIN sga_actas as a_origen ON a_origen.id_acta = d_origen.id_acta
                          WHERE alu_origen.persona = alu.persona
                            AND alu_origen.propuesta = sga_equiv_internas.propuesta -- Propuesta Origen
						    AND d_origen.fecha = sga_equiv_internas.fecha
							AND a_origen.estado = 'C'
							AND sga_equiv_internas.elemento = 
							    (CASE
								   WHEN a_origen.origen IN ('R','P') THEN
								     (SELECT c.elemento FROM vw_comisiones as c WHERE c.comision = a_origen.comision)
								   WHEN a_origen.origen = 'E' THEN 
								     (SELECT m.mesa_examen_elemento FROM vw_mesas_examen as m WHERE m.llamado_mesa = a_origen.llamado_mesa)
								 END)
					     ORDER BY CASE WHEN d_origen.nota IS NOT NULL THEN 1 ELSE 2 END
                         LIMIT 1)	 				
					   END)
			WHEN sga_equiv_internas.origen = 'Equivalencia' THEN
					(CASE 
	                  WHEN sga_equiv_internas.equivalencia_origen IS NOT NULL THEN 
                         (SELECT nota FROM sga_equiv_otorgada WHERE equivalencia = sga_equiv_internas.equivalencia_origen)
					ELSE
                         (SELECT eo_origen.nota 
                           FROM sga_alumnos as alu_origen
                           JOIN sga_equiv_tramite as et_origen ON (et_origen.alumno = alu_origen.alumno)
						   JOIN sga_equiv_otorgada as eo_origen ON eo_origen.equivalencia_tramite = et_origen.equivalencia_tramite
                          WHERE alu_origen.persona = alu.persona
                            AND alu_origen.propuesta = sga_equiv_internas.propuesta -- Propuesta Origen
						    AND eo_origen.fecha      = sga_equiv_internas.fecha -- Misma fecha
						    AND eo_origen.elemento   = sga_equiv_internas.elemento -- Misma actividad 
							AND et_origen.estado     = 'C'
						  ORDER BY CASE eo_origen.instancia WHEN 10 THEN 1 WHEN 11 THEN 2 ELSE 3 END
						  LIMIT 1)
					END)
			WHEN sga_equiv_internas.origen = 'Resolucion' THEN
                 (SELECT nota FROM sga_reconocimiento_act WHERE reconocimiento_act = sga_equiv_internas.reconocimiento_act)
           END)
, sga_equiv_internas.* 
FROM sga_equiv_internas	
JOIN sga_equiv_otorgada as eo ON eo.equivalencia = sga_equiv_internas.equivalencia 
JOIN sga_equiv_tramite as et ON et.equivalencia_tramite = eo.equivalencia_tramite
JOIN sga_alumnos as alu ON alu.alumno = et.alumno
WHERE sga_equiv_internas.nota IS NULL

Se podría crear una funcion que pasando el dato de una equivalencia devuelva la nota origen. El problema aca esta en que haces cuando en el origen hay mas de una nota?
Por ejemplo que una equivalencia tiene como origen dos materias? (dos materias cuatrimestrales se convirtieron en el nuevo plan de estudios en una materia anual)

10

Buenos días Alejandro,

Si esta devolviendo la nota en la primera columna.


notas.doc (69.5 KB)

Fijate de correrlo en una base de prueba y verificar que queden actualizadas las notas (y que sean las notas correctas):

BEGIN WORK;
UPDATE sga_equiv_internas
SET nota = 
	(CASE
		WHEN sga_equiv_internas.origen IN ('Cursada','Promocion','Examen') THEN
                      (CASE
                        WHEN sga_equiv_internas.id_acta IS NOT NULL THEN
                             (SELECT d_origen.nota
                               FROM sga_alumnos as alu_origen
                               JOIN sga_actas_detalle as d_origen ON (d_origen.id_acta = sga_equiv_internas.id_acta AND d_origen.alumno = alu_origen.alumno)
                               WHERE alu_origen.persona = alu.persona
                                 AND alu_origen.propuesta = sga_equiv_internas.propuesta -- Propuesta Origen
                              LIMIT 1)
	 				ELSE
         				(-- Busco la nota en un acta para la misma fecha
						 SELECT d_origen.nota
                           FROM sga_alumnos as alu_origen
                           JOIN sga_actas_detalle as d_origen ON d_origen.alumno = alu_origen.alumno
						   JOIN sga_actas as a_origen ON a_origen.id_acta = d_origen.id_acta
                          WHERE alu_origen.persona = alu.persona
                            AND alu_origen.propuesta = sga_equiv_internas.propuesta -- Propuesta Origen
						    AND d_origen.fecha = sga_equiv_internas.fecha
							AND a_origen.estado = 'C'
							AND sga_equiv_internas.elemento =
							    (CASE
								   WHEN a_origen.origen IN ('R','P') THEN
								     (SELECT c.elemento FROM vw_comisiones as c WHERE c.comision = a_origen.comision)
								   WHEN a_origen.origen = 'E' THEN
								     (SELECT m.mesa_examen_elemento FROM vw_mesas_examen as m WHERE m.llamado_mesa = a_origen.llamado_mesa)
								 END)
					     ORDER BY CASE WHEN d_origen.nota IS NOT NULL THEN 1 ELSE 2 END
                         LIMIT 1)	 				
					   END)
			WHEN sga_equiv_internas.origen = 'Equivalencia' THEN
					(CASE
	                  WHEN sga_equiv_internas.equivalencia_origen IS NOT NULL THEN
                         (SELECT nota FROM sga_equiv_otorgada WHERE equivalencia = sga_equiv_internas.equivalencia_origen)
					ELSE
                         (SELECT eo_origen.nota
                           FROM sga_alumnos as alu_origen
                           JOIN sga_equiv_tramite as et_origen ON (et_origen.alumno = alu_origen.alumno)
						   JOIN sga_equiv_otorgada as eo_origen ON eo_origen.equivalencia_tramite = et_origen.equivalencia_tramite
                          WHERE alu_origen.persona = alu.persona
                            AND alu_origen.propuesta = sga_equiv_internas.propuesta -- Propuesta Origen
						    AND eo_origen.fecha      = sga_equiv_internas.fecha -- Misma fecha
						    AND eo_origen.elemento   = sga_equiv_internas.elemento -- Misma actividad
							AND et_origen.estado     = 'C'
						  ORDER BY CASE eo_origen.instancia WHEN 10 THEN 1 WHEN 11 THEN 2 ELSE 3 END
						  LIMIT 1)
					END)
			WHEN sga_equiv_internas.origen = 'Resolucion' THEN
                 (SELECT nota FROM sga_reconocimiento_act WHERE reconocimiento_act = sga_equiv_internas.reconocimiento_act)
           END)
FROM sga_equiv_internas	as ei
JOIN sga_equiv_otorgada as eo ON eo.equivalencia = ei.equivalencia
JOIN sga_equiv_tramite as et ON et.equivalencia_tramite = eo.equivalencia_tramite
JOIN sga_alumnos as alu ON alu.alumno = et.alumno
WHERE ei.equivalencia_interna = sga_equiv_internas.equivalencia_interna
AND ei.nota IS NULL;

-- Si esta ok:  COMMIT WORK;
-- Si hubo error:  ROLLBACK WORK;

Lo hice correr en una base de pruebas y compare los resultados con G2 y están correctas las notas.
Creo que lo puedo correr en producción.
Muchas gracias Alejandro por tu ayuda!!!
Marcela