Error migracion sistemas externos comisiones - Paso: 03_migrar_comisiones

Hola:

Estamos migrando comisiones por sistemas externos hacia nuestra instalación de Guaraní 3.15.1

En el mismo módulo (Calendario Académico) también migramos algunos periodos lectivos. Las comisiones que estamos migrando referencian periodos lectivos que ya están en Guaraní o que se migran junto con las comisiones.

Encontramos un error al ejecutar la migración de las comisiones en el paso 03_migrar_comisiones.

Basicamente el script no migra comisiones con periodos lectivos existentes en Guaraní 3.

Vemos que en la consulta que se hace se cruzan los datos de las comisiones con los periodos lectivos que se estan migrando (tabla ext.mig_periodos_lectivos). Pero no se cruzan con los periodos lectivos que ya existen en Guaraní 3. Por lo tanto estas comisiones no se migran y el script sql da error en los subsiguientes pasos.

Para solucionarlo en la consulta que agrega las comisiones pusimos una UNION con una consulta que cruza las comisiones con los periodos lectivos de guaraní (sga_peridoros_lectivos y sga_periodos)

Consulta que da error:

SET search_path = 'negocio';
-- comisiones
INSERT INTO sga_comisiones(comision, nombre, periodo_lectivo, elemento, turno, cupo, ubicacion, observaciones)
  SELECT com.comision, com.nombre, per.periodo_lectivo, elem.elemento, com.turno, com.cupo, com.ubicacion, com.observaciones
    FROM ext.mig_comisiones as com,
   		 ext.mig_periodos_lectivos as per,
   		 sga_elementos as elem	
    WHERE com.anio_academico = per.anio_academico
    AND   com.periodo_lectivo_nombre = per.nombre
    AND   com.actividad_codigo = elem.codigo;

Consulta modificada:

SET search_path = 'negocio';

-- comisiones
INSERT INTO sga_comisiones(comision, nombre, periodo_lectivo, elemento, turno, cupo, ubicacion, observaciones)
  SELECT com.comision, com.nombre, per.periodo_lectivo, elem.elemento, com.turno, com.cupo, com.ubicacion, com.observaciones
    FROM ext.mig_comisiones as com,
   		 ext.mig_periodos_lectivos as per,
   		 negocio.sga_elementos as elem	
    WHERE com.anio_academico = per.anio_academico
    AND   com.periodo_lectivo_nombre = per.nombre
    AND   com.actividad_codigo = elem.codigo
    UNION
      SELECT com.comision, com.nombre, per.periodo_lectivo, elem.elemento, com.turno, com.cupo, com.ubicacion, com.observaciones
    FROM ext.mig_comisiones as com,
   		 negocio.sga_periodos_lectivos as per,
   		 negocio.sga_elementos as elem,
   		 negocio.sga_periodos as p	
    WHERE com.anio_academico = pg.anio_academico
    AND   com.periodo_lectivo_nombre = p.nombre
    AND   com.actividad_codigo = elem.codigo
    AND   per.periodo = p.periodo
    ORDER BY comision;

Con esta consulta nos traemos el total de las comisiones en la tabla ext.mig_comisiones. Les pedimos que nos indiquen si esta modificación está bien.

Gracias!

Federico

Si Federico, es lo que te estaba comentando en el otro mensaje del foro.

La query que agregariamos sería similar a la query que mencionas. Fijate que en la que estas haciendo join con la tabla de comisiones de la base de negocio solo de los períodos lectivos que no estas migrando. Esto es por si se hace una migracion de comisiones junto a algunos periodos lectivos y otros que ya existen en la base. Si haces un amigracion solamente de comisiones, funciona igual con la query que escribiste.

Del archivo de migración actual, reemplazar el insert que existe hoy por estos dos:

-- comisiones de periodos lectivos que se estan migrando.
INSERT INTO sga_comisiones (comision, nombre, periodo_lectivo, elemento, turno, cupo, ubicacion, observaciones)
  SELECT com.comision, com.nombre, per.periodo_lectivo, elem.elemento, com.turno, com.cupo, com.ubicacion, com.observaciones
    FROM ext.mig_comisiones as com
   	JOIN sga_elementos as elem ON com.actividad_codigo = elem.codigo
   	JOIN ext.mig_periodos_lectivos as per ON (per.anio_academico = com.anio_academico AND per.nombre = com.periodo_lectivo_nombre);
  
-- Comisiones de periodos lectivos que no es estan migrando porque ya existen en la base (se migraron antes o se ingresaron por sistema.)
INSERT INTO sga_comisiones (comision, nombre, periodo_lectivo, elemento, turno, cupo, ubicacion, observaciones)
  SELECT com.comision, com.nombre, pl.periodo_lectivo, elem.elemento, com.turno, com.cupo, com.ubicacion, com.observaciones
    FROM ext.mig_comisiones as com
   	JOIN sga_elementos as elem ON elem.codigo = com.actividad_codigo
	JOIN vw_periodos_lectivos as pl ON (pl.anio_academico = com.anio_academico AND pl.nombre = com.periodo_lectivo_nombre)
   WHERE NOT EXISTS (SELECT 1 FROM  ext.mig_periodos_lectivos as per WHERE per.anio_academico = com.anio_academico AND per.nombre = com.periodo_lectivo_nombre);

No es necesario que crees una solicitud. Vamos a realizar este cambio en este script de migracion de comisiones referenciando a este mensaje del foro.

Gracias Alejandro. Ahora tomamos nota de los cambios en el código.

Saludos

Federico