Error en migración al pasar tesis

Hola
Estoy migrando G2 a G3 hacia la versión 3.18
Me tira error 02_Modulos/75_Tesis/02_Migracion/04_sga_tesis_cmb.sql.

La descripción del error es:
04_sga_tesis_cmb - ERROR: null value in column "estado_nuevo" of relation "sga_tesis_cmb" violates not-null constraint 04_sga_tesis_cmb - Detail: Failing row contains (3, 1, 2018-11-09 15:37:52-03, null, null, null, null).

Estuve tratando de seguirlo un poco, y observo lo siguiente:
En nuestra base tenemos ciertos estados, que no todos están en la base del negocio (En adjunto envío captura de los estados que manejamos).

Luego, una de las consultas del script 04_sga_tesis_cmb.sql arma un CASE, con lo siguiente:

....
ELSE (SELECT estado FROM mce_estados WHERE nombre = hist.estado_nuevo AND tipo = 'Tesis')

Y veo que el campo nombre de la tabla negocio.mce_estados es una descripción, mientras que hist.estado_nuevo es un código, con lo cual nunca llega a hacer match. Lo mismo ocurre con hist.estado_anterior.
Ese es el motivo por el cual varios estados nos quedan asignados en null.
Luego, al querer insertarlos en la tabla negocio.sga_tesis_cmb falla ya que la misma no acepta estado_nuevo en null.

Agradecería si pudieran orientarme cómo resolverlo.
Muchas gracias!!

Iris


estados_ifx.png

estados_ifx.png

En nuestra base tenemos ciertos estados, que no todos están en la base del negocio (En adjunto envío captura de los estados que manejamos).
Editen el archivo de migracion [b]06_sga_certificados_otorg_cmb.sql[/b] y agreguen alli en la tabla [b]mce_estados[/b], los estados que uds personalizaron en Guarani 2. Al comienzo del script, previo al insert de registros en la tabla sga_certificados_otorg_cmb. O quizas agregarlo en el archivo [b]05_sga_certificados_otorg.sql[/b], ya que esta tabla tiene el campo "estado" (seria el estado actual del tramite de egreso)

Gracias Alejandro por la respuesta.
Pero no termino de comprender.

El error ya nos salta antes, en el módulo anterior, el de Tesis

02_Modulos/75_Tesis/02_Migracion/04_sga_tesis_cmb.sql
Los archivos que me indicás modificar, están en el siguiente módulo: "85_Egresados". ¿Cómo debería agregar allí la tabla mce_estados?

Nosotros tenemos esto:

SELECT * FROM  mig.sga_tesis_estados;

[tr] [td] estado [/td][td] nombre [/td][td] tipo[/td] [/tr]
[tr] [td] TA [/td][td] Tesis aprobada [/td][td] F [/td] [/tr]
[tr] [td] TD [/td][td] Tesis desaprobada [/td][td] F [/td] [/tr]
[tr] [td] AT [/td][td] Aprobado por tribunal [/td][td] I [/td] [/tr]
[tr] [td] OT [/td][td] Observado por tribunal [/td][td] I [/td] [/tr]
[tr] [td] RT [/td][td] Rechazado por tribunal [/td][td] I [/td] [/tr]
[tr] [td] PE [/td][td] Pendiente de entrega [/td][td] I [/td] [/tr]
[tr] [td] ED [/td][td] Entregado a docentes [/td][td] I [/td] [/tr]
[tr] [td] LD [/td][td] Listo para defensa [/td][td] I [/td] [/tr]
[tr] [td] PA [/td][td] Plan de trabajo aprobado [/td][td] I [/td] [/tr]
[tr] [td] PR [/td][td] Plan de trabajo rechazado [/td][td] I [/td] [/tr]
[tr] [td] PCM [/td][td] Plan de trabajo aprobado con m [/td][td] I [/td] [/tr]
[tr] [td] IF [/td][td] Informe finalizado [/td][td] I [/td] [/tr]
[tr] [td] IA [/td][td] Informe aprobado [/td][td] I [/td] [/tr]
[tr] [td] ID [/td][td] Informe desaprobado [/td][td] I [/td] [/tr]
[tr] [td] IED [/td][td] Informe Entregado a Docentes [/td][td] I [/td] [/tr]

Por otro lado, veo que el esquema del negocio tiene esto:

SELECT * FROM  negocio.mce_estados;

Con los siguientes campos:

[tr] [td]estado [/td][td] nombre [/td][td] descripcion [/td][td] tipo [/td][td] activo[/td][/tr]

Debería agregar nuestros datos en esta última tabla?

Lo que entiendo, es que debería resolver el inconveniente antes de migrar el módulo “75_Tesis”.

Nuevamente, muchas gracias por la orientación!!

Ok. la tabla mce_estados de G3 tiene los estados usados en el circuito de Tesis y el circuito de Egreso.
Como bien indicas, fijate que en el archivo de migracion 02_sga_tesis.sql se estan insertando los estados que estan la tabla de G2 sga_tesis_estados a mce_estados de G3.

 SELECT *
    FROM mig.sga_tesis_estados
   WHERE nombre NOT IN (SELECT nombre FROM mce_estados WHERE tipo = 'Tesis');
Debería agregar nuestros datos en esta última tabla?

Si, lo hace en ese insert del archivo mencionado antes.

¿Que archivo de migracion falla? 02_sga_tesis.sql o 04_sga_tesis_cmb.sql

Si es el 2do, fijate si estas querys devuelven registros:

SELECT *  FROM mig.sga_tesis_hist WHERE estado_anterior IS NOT NULL AND estado_anterior NOT IN (SELECT estado FROM mig.sga_tesis_estados);
SELECT *  FROM mig.sga_tesis_hist WHERE estado_nuevo IS NOT NULL AND estado_nuevo NOT IN (SELECT estado FROM mig.sga_tesis_estados);

2

Hola Alejandro

El que falló fue el 04_sga_tesis_cmb.
En adjunto te envío el log del spoon.

Las consultas que indicás no devuelven nada, ninguna tupla (ninguna de las 3 que mencionás).

Una de las consultas del script 04_sga_tesis_cmb.sql arma un CASE, con lo siguiente:

SELECT cnv.tesis, fecha,
       CASE WHEN estado_anterior='TA' THEN  26 --Tesis aprobada
       WHEN estado_anterior='TD' THEN  27 --Tesis desaprobada
       WHEN estado_anterior='AT' THEN  22 --Aprobado por tribunal
       WHEN estado_anterior='OT' THEN  23 --Observado por tribunal
       WHEN estado_anterior='RT' THEN  24 --Rechazado por tribunal
       WHEN estado_anterior='PE' THEN  20 --Pendiente de entrega
       WHEN estado_anterior='ED' THEN  21 --Entregado a docentes
       WHEN estado_anterior='LD' THEN  25 --Listo para defensa
       ELSE (SELECT estado FROM mce_estados WHERE nombre = hist.estado_anterior AND tipo = 'Tesis') -- Nuevo estado de la institucion
       END,
       CASE WHEN estado_nuevo='TA' THEN  26 --Tesis aprobada
       WHEN estado_nuevo='TD' THEN  27 --Tesis desaprobada
       WHEN estado_nuevo='AT' THEN  22 --Aprobado por tribunal
       WHEN estado_nuevo='OT' THEN  23 --Observado por tribunal
       WHEN estado_nuevo='RT' THEN  24 --Rechazado por tribunal
       WHEN estado_nuevo='PE' THEN  20 --Pendiente de entrega
       WHEN estado_nuevo='ED' THEN  21 --Entregado a docentes
       WHEN estado_nuevo='LD' THEN  25 --Listo para defensa
       ELSE (SELECT estado FROM mce_estados WHERE nombre = hist.estado_nuevo AND tipo = 'Tesis') -- Nuevo estado de la institucion
       END,
       observaciones
  FROM mig.sga_tesis_hist hist,
       mig._cnv_pk_tesis cnv,
       sga_tesis tes
 WHERE cnv.tesis_g2 = hist.tesis
   AND cnv.tesis=tes.tesis;

Dicha consulta, por ejemplo, algunos de los valores que retorna son los que envío en la imagen en adjunto.

Veo que el campo “nombre” de la tabla negocio.mce_estados es una descripción, mientras que “hist.estado_nuevo” es un código, con lo cual nunca llega a hacer match. Lo mismo ocurre con hist.estado_anterior.
Ese es el motivo por el cual varios estados nos quedan asignados en null.

Saludos.


04_sga_tesis_cmb_resultado_SELECT.png

04_sga_tesis_cmb_resultado_SELECT.png

log_spon_mig_Tesis.txt (2 Bytes)

Si, esta mal esa query, reemplazala por esta:

SELECT cnv.tesis, fecha, 
       CASE 
	      WHEN estado_anterior = 'TA' THEN  26 --Tesis aprobada
	 	  WHEN estado_anterior = 'TD' THEN  27 --Tesis desaprobada
		  WHEN estado_anterior = 'AT' THEN  22 --Aprobado por tribunal
		  WHEN estado_anterior = 'OT' THEN  23 --Observado por tribunal
		  WHEN estado_anterior = 'RT' THEN  24 --Rechazado por tribunal
		  WHEN estado_anterior = 'PE' THEN  20 --Pendiente de entrega
		  WHEN estado_anterior = 'ED' THEN  21 --Entregado a docentes
		  WHEN estado_anterior = 'LD' THEN  25 --Listo para defensa
		  ELSE (SELECT mce_estados.estado 
		          FROM mig.sga_tesis_estados
		          JOIN mce_estados ON mce_estados.nombre = mig.sga_tesis_estados.nombre
		         WHERE mig.sga_tesis_estados.estado = hist.estado_anterior 
		           AND mce_estados.tipo = 'Tesis') -- Nuevo estado de la institucion
       END,
       CASE 
	      WHEN estado_nuevo = 'TA' THEN  26 --Tesis aprobada
	 	  WHEN estado_nuevo = 'TD' THEN  27 --Tesis desaprobada
		  WHEN estado_nuevo = 'AT' THEN  22 --Aprobado por tribunal
		  WHEN estado_nuevo = 'OT' THEN  23 --Observado por tribunal
		  WHEN estado_nuevo = 'RT' THEN  24 --Rechazado por tribunal
		  WHEN estado_nuevo = 'PE' THEN  20 --Pendiente de entrega
		  WHEN estado_nuevo = 'ED' THEN  21 --Entregado a docentes
		  WHEN estado_nuevo = 'LD' THEN  25 --Listo para defensa
		  ELSE (SELECT mce_estados.estado 
		          FROM mig.sga_tesis_estados
		          JOIN mce_estados ON mce_estados.nombre = mig.sga_tesis_estados.nombre
		         WHERE mig.sga_tesis_estados.estado = hist.estado_nuevo
		          AND mce_estados.tipo = 'Tesis') -- Nuevo estado de la institucion
       END,
       observaciones
  FROM mig.sga_tesis_hist as hist
  JOIN mig._cnv_pk_tesis as cnv ON cnv.tesis_g2 = hist.tesis
  JOIN sga_tesis as tes ON cnv.tesis = tes.tesis
 ORDER BY hist.fecha;

Hola Alejandro

Ahora si!!! Terminó de migrar el módulo de tesis sin problemas.
Y los postcontroles dieron bien.

También migró sin problemas el módulo de egresados, sin necesidad de modificar nada.

Muchas gracias!!
Saludos.

Iris

Iris, en alguna carrera tienen actividades extracurriculares?
Porque de ser asi, ahora para los scripts d ela version 3.19 se agreg{o la migración de lo que faltaba realizar sobre actividades extracurriculares.
Te aviso como veo que estan en proceso de migración para que sigas probando con esos scripts pero de tener actividades extracurriculares probar luego con los scripts de la version 3.19 que este mes van a estar disponibles.

De acuerdo Alejandro. Lo tendremos en cuenta!!!
Muchas gracias por el dato.
Saludos.

Iris