create or replace PROCEDURE P_MIGRACION_CINCO_NEW AS 

-- CONSTANTES 
--C_TABLA_X87_04 VARCHAR2(10):= 'X8704T00';
--C_TABLA_AD74A_03 VARCHAR2(10):= 'AD74A03T00';
	-- 12/02/2024: cambio obtener razon_social_03, no se hacia bien.

  /* **** CURSOR PARA PERSONAS DE CONTACTO AD74A03T00*****************/
  CURSOR CON IS 
		select IDCONTACTO_004, X04.IDCONTACTO_035,PERSFISICA_004,
			DECODE(PERSFISICA_004, 1,0,1) AS TIPO_CONTACTO_03,
			TIPOIDENTIFICADOR_004         AS TIPO_IDENTIFICADOR_03 ,
			IDENTIFICADOR_004             AS IDENTIFICADOR_03,
			NOMBRE_004                    AS NOMBRE_03,
			APELLIDO1_004                 AS APELLIDO1_03,
			APELLIDO2_004                 AS APELLIDO2_03,
			DECODE(SEXO_004 ,'V','H',SEXO_004)  AS SEXO_03,
			CASE
				WHEN PERSFISICA_004 =0
					THEN APELLIDO1_004
			END                AS RAZON_SOCIAL_03,
			CONINSTALACION_004 AS CONTACTO_INST_03 ,
			PARENTESCO_004     AS PARENTESCO_03,
			COPIALLAVES_004    AS POSEE_LLAVES_03,
			IDSOLICITANTE_001, (SELECT VALOR_AD74A FROM T_CLAVES_X01 WHERE VALOR_X87B=IDSOLICITANTE_001)ID_SOLICITANTE_01,
			ORDEN_004 AS ORDEN_03,
            X35.TELEFCASA_035 AS TELEFCASA_035,
            X35.TELEFTRABAJO_035 AS TELEFTRABAJO_035,
            X35.TELEF_035 AS TELEF_035 
    FROM X87B.X8704T00@X87B_DBL0 X04, X87B.X8735T00@X87B_DBL0 X35
     where X04.IDCONTACTO_035 =X35.IDCONTACTO_035(+)
	 AND X04.IDCONTACTO_004 NOT IN (SELECT VALOR_X87B FROM T_CLAVES_X04)
     ORDER BY ORDEN_004 DESC;
  
	cursor cContactos is
		select id_contacto_03, id_solicitante_03, id_expediente_03, id_expediente_00
		from ad74a03t00, ad74a00t00
		where usu_alta_03 = 'MIGRADO' --502946
		and id_solicitante_03 = id_solicitante_00
		and usu_alta_00 = 'MIGRADO'
		AND id_procedimiento_00 = 'X87_TEA_1'
		and id_expediente_03 is null;
  
 	-- Identificador unico de la tabla contactos
	W_ID_CONTACTO_03_CLAVE  NUMBER; -- calculo AD74A03T00_SEQ.NEXTVAL

	/* * CURSOR PARA IPREM AD74A79T00***/
	CURSOR IPREM IS 
		SELECT  ANIO_044 AS ANIO_79,
				IPREM_044 AS IPREM_79
		FROM X87B.X8744T00@X87B_DBL0;

	-- Identificador unico de la tabla de IPREM
	W_ID_IPREM_79  NUMBER;  -- calculo AD74A79T00_SEQ.NEXTVAL

BEGIN

	/* *** CARGA PARA CONTACTOS *********/
	FOR R IN CON LOOP --loop para contactos
		SELECT AD74A03T00_SEQ.NEXTVAL INTO W_ID_CONTACTO_03_CLAVE FROM DUAL;
		BEGIN
			INSERT INTO T_CLAVES_X04 (VALOR_X87B, VALOR_AD74A, FECHA_MIG, MIGRADO)
			VALUES (R.IDCONTACTO_004, W_ID_CONTACTO_03_CLAVE,SYSDATE, 'S');
		EXCEPTION
			WHEN dup_val_on_index THEN
			NULL;
		END;
    
		BEGIN
			--FK a la tabla 00 de EXPEDIENTES (Indica que el contacto es de la solicitud) SE ESTA INSERTANDO NULL
			INSERT INTO AD74A.AD74A03T00 ( 	ID_CONTACTO_03 , TIPO_CONTACTO_03 , TIPO_IDENTIFICADOR_03 , IDENTIFICADOR_03 ,NOMBRE_03 ,
											APELLIDO1_03 , APELLIDO2_03 , SEXO_03 , RAZON_SOCIAL_03 ,CONTACTO_INST_03 ,
											PARENTESCO_03 , POSEE_LLAVES_03 , ID_SOLICITANTE_03 , TLFNO_03 , TLFNO2_03 ,
											TLFNO3_03 , ORDEN_03 , USU_HISTORICO_03 , F_HISTORICO_03 , F_ALTA_03 ,
											USU_ALTA_03 , ID_EXPEDIENTE_03)
			VALUES ( W_ID_CONTACTO_03_CLAVE , R.TIPO_CONTACTO_03 , R.TIPO_IDENTIFICADOR_03 , R.IDENTIFICADOR_03 , R.NOMBRE_03 ,
					 R.APELLIDO1_03 , R.APELLIDO2_03 , R.SEXO_03 , R.RAZON_SOCIAL_03 , R.CONTACTO_INST_03 ,
					 R.PARENTESCO_03 , R.POSEE_LLAVES_03 , R.ID_SOLICITANTE_01, R.TELEFCASA_035 , R.TELEFTRABAJO_035 ,
					 R.TELEF_035, R.ORDEN_03, NULL, NULL , SYSDATE ,
					 'MIGRADO' ,NULL );
		EXCEPTION
			WHEN OTHERS THEN
			DBMS_OUTPUT.PUT_LINE('CARGA AD74A03T00.  '||R.IDCONTACTO_004||' '||SQLCODE||SQLERRM);
			insert into t_errores_mig(PROCESO,ERROR,DESC_ERROR,FECHA_ERROR)
						values('CINCO', 'insert AD74A03T00','ERROR  AD74A03T00  idCont, idSolicit:'||W_ID_CONTACTO_03_CLAVE||','||R.ID_SOLICITANTE_01, sysdate);
		END;
		COMMIT;
	END LOOP; ---FIN LOOP contactos
  
	-- una vez finalizada la carga de contactos, vamos a cargar el expediente en los que corresponde, lo hacemos despues por 
	-- facilitar la carga de los datos.
	for rContactos in cContactos loop
		begin
			update ad74a03t00 
				set id_expediente_03 = rContactos.id_expediente_00 
				where id_contacto_03 = rContactos.id_contacto_03;
			commit;
		exception
			when others then
				insert into t_errores_mig(PROCESO,ERROR,DESC_ERROR,FECHA_ERROR)
						values('CINCO', 'update AD74A03T00','ERROR  AD74A03T00  idContacto, idExpediente00:'|| rContactos.id_contacto_03||','||rContactos.id_expediente_00 , sysdate);
		end;
	end loop;
 
	/* ************************** CARGA PARA IPREM AD74A79T00 ************/
	FOR R IN IPREM LOOP --loop para contactos
    
		SELECT AD74A79T00_SEQ.NEXTVAL INTO W_ID_IPREM_79 FROM DUAL;
		
		BEGIN
			INSERT INTO AD74A.AD74A79T00 ( 	ID_IPREM_79, IPREM_79, ANIO_79,
											F_ALTA_79, USU_ALTA_79, F_MODIF_79, USU_MODIF_79)
			VALUES (W_ID_IPREM_79, R.IPREM_79, R.ANIO_79,
					SYSDATE, 'MIGRADO', NULL, NULL );
		EXCEPTION
			WHEN OTHERS THEN
			DBMS_OUTPUT.PUT_LINE('CARGA AD74A79T00. IPREM '||R.ANIO_79||' '||R.IPREM_79||' '||W_ID_IPREM_79||SQLCODE||SQLERRM);
			insert into t_errores_mig(PROCESO,ERROR,DESC_ERROR,FECHA_ERROR)
						values('CINCO', 'insert AD74A79T00','ERROR  AD74A79T00  anio, dato, idiPREm:' ||R.ANIO_79||','||R.IPREM_79||','||W_ID_IPREM_79, sysdate);
		END;

	END LOOP; --FIN LOOP IPREM
	COMMIT;

END P_MIGRACION_CINCO_NEW;
/