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
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