create or replace PROCEDURE P_MIGRACION_01_DIR AS 

	-- 22/01/2024. Cambio id_municipio_06, al insertar daba error: el valor es demasiado grande para la columna "AD74A"."AD74A06T00"."ID_MUNICIPIO_06" (real: 4, máximo: 3)  
	-- cambio del formateo del campo
	-- 30/01/2024: Se comenta el cursor de ayuntamientos, porque no se esta usando, se carga mediante script
	-- 14/02/2024: se duplican ids de direcciones en la tabla de claves, y por ello se duplican direcciones en la tabla ad74a06t00
    -- 01/03/2024. Para poder lanzar la migracion de las direcciones tienen que existir las claves de las direcciones en la tabla. 

	 /* ************ CURSOR PARA DIRECCIONES AD7406T00 *******************************/
	 ---------------------------------------------------------------------------------
	 -- SE VAN A GENERAR TANTAS DIRECCIONES COMO REGISTROS EN TODOS LOS CURSORES, SE DUPLICAN DIRECCIONES DE LOS REGISTROS 
	 -- DE LA TABLA 34 DE LA X87  PORQUE SI COINCIDEN LA DIR HABITUAL Y LA DE NOTIFICACION, SE GENERAN DOS REGISTROS DE CLAVES DISTINTAS
	CURSOR DIR_HABITUAL IS
	select 
		VALOR_AD74A01 AS ID_DIRECCION_AD74,
		X35.IDCONTACTO_035 AS CONTACTO,
		--X01.IDCONTACTOHABIT_035 HABITUAL, X01.IDCONTACTONOTIFI_035 NOTIFICACION,
		RTRIM( LTRIM(X34.IDDOMICILIO_034)) AS ID_DIRECCION_06,
		substr(RTRIM( LTRIM(X34.DESCCALLE_034)),1,74) AS CALLE_06,
        decode(X34.codigopostal_034,0,null,lpad(X34.CODIGOPOSTAL_034,5,'0')) AS CP_06,
		--decode(RTRIM( LTRIM(X34.CODCALLE_034)),0,null) AS ID_CALLE_06,
		decode(RTRIM(LTRIM(X34.CODCALLE_034)),0,null,RTRIM(LTRIM(X34.CODCALLE_034))) AS ID_CALLE_06,
		RTRIM( LTRIM( X34.LOCALIDAD_034 )) AS ID_LOCALIDAD_06,
		LPAD(NVL(rtrim(ltrim(X34.CODMUNICIPIO_034)),'999'),3,'0')  AS ID_MUNICIPIO_06,       
		RTRIM( LTRIM(TO_CHAR(X34.CODPAIS_034, '999')))AS ID_PAIS_06,
		--rtrim(BLOQUE_034)||'-'||rtrim(NUMERO_034)   as ID_PORTAL_06,
		DESCNUMERO_034 as ID_PORTAL_06,
        LPAD(TRIM(X34.CODPROVINCIA_034),2,'0') AS ID_PROVINCIA_06,
		substr( RTRIM( LTRIM(X34.MANO_034))||RTRIM( LTRIM(X34.PUERTA_034)),1,10)  AS LETRA_06,
		RTRIM( LTRIM(X34.DESCLOCALIDAD_034)) AS LOCALIDAD_06,
		RTRIM( LTRIM(X34.DESCMUNICIPIO_034)) AS MUNICIPIO_06,
		RTRIM( LTRIM(X34.PLANTA_034))        AS PISO_06,
		RTRIM( LTRIM(SUBSTR(NVL2(BLOQUE_034, BLOQUE_034||'-', '')||NUMERO_034||BIS_034,1,50))) AS PORTAL_06,
		RTRIM( LTRIM(X34.DESCPROVINCIA_034)) AS PROVINCIA_06,   
		RTRIM( LTRIM(X34.ESCALERA_034))      as ESCALERA_06
	  from X87B.X8735T00@X87B_DBL0 X35,
			X87B.X8701T00@X87B_DBL0 X01,
			X87B.X8734T00@X87B_DBL0 X34, claves_ad7406
	  where X34.IDDOMICILIO_034 = X35.IDDOMICILIO_034 
        AND X35.IDCONTACTO_035 = X01.IDCONTACTOHABIT_035
		AND X34.IDDOMICILIO_034 = VALOR_X87B AND VALOR_AD74A01 IS NOT NULL
        and not exists (select id_direccion_06 from ad74a06t00 where id_direccion_06=VALOR_AD74A01);

	CURSOR DIR_NOTIF IS
	select  
		VALOR_AD74A00 AS ID_DIRECCION_AD74,
		X35.IDCONTACTO_035 AS CONTACTO,
		--X01.IDCONTACTOHABIT_035 HABITUAL, X01.IDCONTACTONOTIFI_035 NOTIFICACION,
		RTRIM( LTRIM(X34.IDDOMICILIO_034)) AS ID_DIRECCION_06,
		substr(RTRIM( LTRIM(X34.DESCCALLE_034)),1,74) AS CALLE_06,
        decode(X34.codigopostal_034,0,null,lpad(X34.CODIGOPOSTAL_034,5,'0')) AS CP_06,
		--decode(RTRIM( LTRIM(X34.CODCALLE_034)),0,null) AS ID_CALLE_06,
		decode(RTRIM(LTRIM(X34.CODCALLE_034)),0,null,RTRIM(LTRIM(X34.CODCALLE_034))) AS ID_CALLE_06,
		RTRIM( LTRIM( X34.LOCALIDAD_034 )) AS ID_LOCALIDAD_06,
		LPAD(NVL(rtrim(ltrim(X34.CODMUNICIPIO_034)),'999'),3,'0')  AS ID_MUNICIPIO_06,       
		RTRIM( LTRIM(TO_CHAR(X34.CODPAIS_034, '999')))AS ID_PAIS_06,
		--rtrim(BLOQUE_034)||'-'||rtrim(NUMERO_034)  as ID_PORTAL_06,
		DESCNUMERO_034 as ID_PORTAL_06,
        LPAD(TRIM(X34.CODPROVINCIA_034),2,'0') AS ID_PROVINCIA_06,
		substr( RTRIM( LTRIM(X34.MANO_034))||RTRIM( LTRIM(X34.PUERTA_034)),1,10)  AS LETRA_06,
		RTRIM( LTRIM(X34.DESCLOCALIDAD_034)) AS LOCALIDAD_06,
		RTRIM( LTRIM(X34.DESCMUNICIPIO_034)) AS MUNICIPIO_06,
		RTRIM( LTRIM(X34.PLANTA_034))        AS PISO_06,
		RTRIM( LTRIM(SUBSTR(NVL2(BLOQUE_034, BLOQUE_034||'-', '')||NUMERO_034||BIS_034,1,50))) AS PORTAL_06,
		RTRIM( LTRIM(X34.DESCPROVINCIA_034)) AS PROVINCIA_06,   
		RTRIM( LTRIM(X34.ESCALERA_034))      as ESCALERA_06
	  from X87B.X8735T00@X87B_DBL0 X35,
			X87B.X8701T00@X87B_DBL0 X01,
			X87B.X8734T00@X87B_DBL0 X34, claves_ad7406
	  where X34.IDDOMICILIO_034 = X35.IDDOMICILIO_034 
        AND X35.IDCONTACTO_035 = X01.IDCONTACTONOTIFI_035
		AND X34.IDDOMICILIO_034 = VALOR_X87B AND VALOR_AD74A00 IS NOT NULL
        and not exists (select id_direccion_06 from ad74a06t00 where id_direccion_06=VALOR_AD74A00);

	/* CURSOR PARA DIRECCIONES DE PISOS TUTELADOS AD7406T00 **********************************/
	CURSOR DIR_TUTELADOS IS 
	SELECT   --100
		VALOR_AD74A32 AS ID_DIRECCION_AD74,
		RTRIM( LTRIM( X83.IDDOMICILIO_034)) AS ID_DIRECCION_06,
		SUBSTR(RTRIM( LTRIM(X34.DESCCALLE_034)),1,74) AS CALLE_06,
		decode(X34.CODIGOPOSTAL_034,0,null,lpad(X34.CODIGOPOSTAL_034,5,'0')) AS CP_06,
		--decode(RTRIM( LTRIM(X34.CODCALLE_034)),0,null) AS ID_CALLE_06,
		decode(RTRIM(LTRIM(X34.CODCALLE_034)),0,null,RTRIM(LTRIM(X34.CODCALLE_034))) AS ID_CALLE_06,
		RTRIM( LTRIM( X34.LOCALIDAD_034 )) AS ID_LOCALIDAD_06,
		LPAD(NVL(rtrim(ltrim(X34.CODMUNICIPIO_034)),'999'),3,'0')  AS ID_MUNICIPIO_06,       
		RTRIM( LTRIM(TO_CHAR(X34.CODPAIS_034, '999')))AS ID_PAIS_06,
		--rtrim(BLOQUE_034)||'-'||rtrim(NUMERO_034)   as ID_PORTAL_06,
		DESCNUMERO_034 as ID_PORTAL_06,
	    LPAD(TRIM(X34.CODPROVINCIA_034),2,'0') AS ID_PROVINCIA_06,
		substr( RTRIM( LTRIM(X34.MANO_034))||RTRIM( LTRIM(X34.PUERTA_034)),1,10)  AS LETRA_06,
		RTRIM( LTRIM(X34.DESCLOCALIDAD_034)) AS LOCALIDAD_06,
		RTRIM( LTRIM(X34.DESCMUNICIPIO_034)) AS MUNICIPIO_06,
		RTRIM( LTRIM( X34.PLANTA_034))        AS PISO_06,
		RTRIM( LTRIM(SUBSTR(NVL2(BLOQUE_034, BLOQUE_034||'-', '')||NUMERO_034||BIS_034,1,50))) AS PORTAL_06,
		RTRIM( LTRIM(X34.DESCPROVINCIA_034)) AS PROVINCIA_06,   
		RTRIM( LTRIM(X34.ESCALERA_034))      as ESCALERA_06,
		X83.DENOMINACION_083   AS DENOMINACION_32
	FROM X87B.X8782T00@X87B_DBL0 X82,
	  X87B.X8783T00@X87B_DBL0 X83,
	  X87B.X8734T00@X87B_DBL0 X34, claves_ad7406
	WHERE X34.IDDOMICILIO_034=X83.IDDOMICILIO_034
	AND X82.IDAYUNTAMIENTO_082=X83.IDAYUNTAMIENTO_082
	AND X34.IDDOMICILIO_034 = VALOR_X87B AND VALOR_AD74A32 IS NOT NULL
        and not exists (select id_direccion_06 from ad74a06t00 where id_direccion_06=VALOR_AD74A32);
	
	 vSql varchar2(4000);
	 vIDAYUNTAMIENTO_032 ad74a31t00.ID_AYUNTAMIENTO_31%type;
	 
	-- Identificador nuevo de direccion
	--W_ID_DIRECCION_06 AD74A06T00.ID_DIRECCION_06%TYPE; -- calculo AD74A06T00_SEQ.NEXTVAL
BEGIN

	/* *********************************** carga para  direcciones AD74A06T00 *********************************/
	FOR R_HABITUAL IN DIR_HABITUAL LOOP  -- DIRECCIONES HABITUALES
		 
		BEGIN
			INSERT INTO AD74A.AD74A06T00 (	ID_DIRECCION_06,  CALLE_06,  CP_06,  ID_CALLE_06,  ID_LOCALIDAD_06,  ID_MUNICIPIO_06,
											ID_PAIS_06,  ID_PORTAL_06,  ID_PROVINCIA_06,  LETRA_06,  LOCALIDAD_06,  MUNICIPIO_06,
											PAIS_06,  PISO_06,  PORTAL_06,  PROVINCIA_06,  ID_SOLICITANTE_06,  USU_HISTORICO_06,
											F_HISTORICO_06,  F_ALTA_06,  USU_ALTA_06,  ESCALERA_06  )
			VALUES  (  	R_HABITUAL.ID_DIRECCION_AD74,  R_HABITUAL.CALLE_06, R_HABITUAL.CP_06,  R_HABITUAL.ID_CALLE_06, R_HABITUAL.ID_LOCALIDAD_06,  R_HABITUAL.ID_MUNICIPIO_06,  
						R_HABITUAL.ID_PAIS_06,  NULL,  R_HABITUAL.ID_PROVINCIA_06,  R_HABITUAL.LETRA_06,  R_HABITUAL.LOCALIDAD_06,  R_HABITUAL.MUNICIPIO_06,
						NULL,  R_HABITUAL.PISO_06,  R_HABITUAL.PORTAL_06,  R_HABITUAL.PROVINCIA_06,  NULL,  NULL, --R_HABITUAL.ID_SOLICITANTE_01 26.02-2024 QUITAR SOLICITANTE DE LAS DIRECCIONES
						NULL,  SYSDATE,  'MIGRADO',  R_HABITUAL.ESCALERA_06  );
		EXCEPTION
			WHEN OTHERS THEN
				vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
				PG_MIGRACION.INSERTA_TRAZA('DATOS 01','insert AD74A06T00', 'ERROR '||vSql||' AD74A06T00 , DIR:'||R_HABITUAL.ID_DIRECCION_06, null);
				DBMS_OUTPUT.PUT_LINE('CARGA AD74A06T00.  '||R_HABITUAL.ID_DIRECCION_06||' '||SQLCODE||SQLERRM);
		END;
		COMMIT;
	END LOOP; ---FIN LOOP DIRECCIONES HABITUALES
	
	FOR H_NOTIF IN DIR_NOTIF LOOP  -- DIRECCIONES NOTIFICACION
		 
		BEGIN
			INSERT INTO AD74A.AD74A06T00 (	ID_DIRECCION_06,  CALLE_06,  CP_06,  ID_CALLE_06,  ID_LOCALIDAD_06,  ID_MUNICIPIO_06,
											ID_PAIS_06,  ID_PORTAL_06,  ID_PROVINCIA_06,  LETRA_06,  LOCALIDAD_06,  MUNICIPIO_06,
											PAIS_06,  PISO_06,  PORTAL_06,  PROVINCIA_06,  ID_SOLICITANTE_06,  USU_HISTORICO_06,
											F_HISTORICO_06,  F_ALTA_06,  USU_ALTA_06,  ESCALERA_06  )
			VALUES  (  	H_NOTIF.ID_DIRECCION_AD74,  H_NOTIF.CALLE_06, H_NOTIF.CP_06,  H_NOTIF.ID_CALLE_06, H_NOTIF.ID_LOCALIDAD_06,  H_NOTIF.ID_MUNICIPIO_06,  
						H_NOTIF.ID_PAIS_06,  NULL,  H_NOTIF.ID_PROVINCIA_06,  H_NOTIF.LETRA_06,  H_NOTIF.LOCALIDAD_06,  H_NOTIF.MUNICIPIO_06,
						NULL,  H_NOTIF.PISO_06,  H_NOTIF.PORTAL_06,  H_NOTIF.PROVINCIA_06, NULL,  NULL,
						NULL,  SYSDATE,  'MIGRADO',  H_NOTIF.ESCALERA_06  );
		EXCEPTION
			WHEN OTHERS THEN
				vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
				PG_MIGRACION.INSERTA_TRAZA('DATOS 01','insert AD74A06T00', 'ERROR '||vSql||' AD74A06T00 , DIR:'||H_NOTIF.ID_DIRECCION_06, null);
				DBMS_OUTPUT.PUT_LINE('CARGA AD74A06T00.  '||H_NOTIF.ID_DIRECCION_06||' '||SQLCODE||SQLERRM);
		END;
  
		COMMIT;
	END LOOP; ---FIN LOOP DIRECCIONES NOFIFICACION


	/* ************************* CARGA PARA DIRECCIONES TUTELADOS AD74A06T00 ****/
	FOR R_TUTELADOS IN DIR_TUTELADOS  LOOP  -- ABRO CURSOR DE DIRECCIONES TUTELADOS
		-- Insert para la nueva tabla de claves ID_DIRECCION_06 PISOS TUTELADOS ++
		BEGIN
				
			INSERT INTO AD74A.AD74A06T00 (  ID_DIRECCION_06,  CALLE_06,  CP_06,  ID_CALLE_06,  ID_LOCALIDAD_06,  ID_MUNICIPIO_06,
											ID_PAIS_06,  ID_PORTAL_06,  ID_PROVINCIA_06,  LETRA_06,  LOCALIDAD_06,  MUNICIPIO_06,
											PAIS_06,  PISO_06,  PORTAL_06,  PROVINCIA_06,  ID_SOLICITANTE_06,  USU_HISTORICO_06,
											F_HISTORICO_06,  F_ALTA_06,  USU_ALTA_06,  ESCALERA_06 )
			VALUES ( 	R_TUTELADOS.ID_DIRECCION_AD74,  R_TUTELADOS.CALLE_06, R_TUTELADOS.CP_06,  R_TUTELADOS.ID_CALLE_06,  R_TUTELADOS.ID_LOCALIDAD_06,  R_TUTELADOS.ID_MUNICIPIO_06,
						R_TUTELADOS.ID_PAIS_06,  NULL,  R_TUTELADOS.ID_PROVINCIA_06,  R_TUTELADOS.LETRA_06,  R_TUTELADOS.LOCALIDAD_06,  R_TUTELADOS.MUNICIPIO_06,
						NULL,  R_TUTELADOS.PISO_06,  R_TUTELADOS.PORTAL_06,  R_TUTELADOS.PROVINCIA_06,  NULL,  NULL,
						NULL,  SYSDATE,  'MIGRADO',  R_TUTELADOS.ESCALERA_06  );
			
			-- CALCULO DEL ID_PISO E ID_AYUNTAMIENTO:
			-- R_TUTELADOS.IDAYUNTAMIENTO_032

			-- R_TUTELADOS.ID_MUNICIPIO_06, R_TUTELADOS.ID_PROVINCIA_06
			-- En la tabla 31 tenemos el id_municipio_31 y el id_provincia_31 que nos sirve para poder obtener el id_ayuntamiento_31.
			BEGIN
				vIDAYUNTAMIENTO_032  :=NULL;
				
				SELECT ID_AYUNTAMIENTO_31 INTO vIDAYUNTAMIENTO_032 
				FROM AD74A31T00 WHERE ID_PROVINCIA_31 = R_TUTELADOS.ID_PROVINCIA_06 AND ID_MUNICIPIO_31 = R_TUTELADOS.ID_MUNICIPIO_06;
				
				INSERT INTO AD74A.AD74A32T00 (ID_PISO_32, ID_AYUNTAMIENTO_32, DENOMINACION_32, ID_DIRECCION_32,
										  USU_ALTA_32, USU_MODIF_32, F_ALTA_32, F_MODIF_32, F_BAJA_32)
				VALUES(AD74A32T00_SEQ.NEXTVAL ,vIDAYUNTAMIENTO_032 , R_TUTELADOS.DENOMINACION_32, R_TUTELADOS.ID_DIRECCION_AD74, 
					'MIGRADO', NULL, SYSDATE, NULL, NULL);
			EXCEPTION	
				WHEN OTHERS THEN
					vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
					PG_MIGRACION.INSERTA_TRAZA('DATOS 01','insert AD74A06T00', 'ERROR '||vSql||' AD74A31T00.ID_MUNICIPIO: '||R_TUTELADOS.ID_MUNICIPIO_06||', AD74A31T00.ID_PROVINCIA: '||R_TUTELADOS.ID_PROVINCIA_06, null);
					DBMS_OUTPUT.PUT_LINE('CARGA AD74A06T00. AD74A31T00.ID_MUNICIPIO: '||R_TUTELADOS.ID_MUNICIPIO_06||', AD74A31T00.ID_PROVINCIA: '||R_TUTELADOS.ID_PROVINCIA_06||' '||SQLCODE||SQLERRM);
			END;
			
		EXCEPTION
			WHEN OTHERS THEN	
				vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
				PG_MIGRACION.INSERTA_TRAZA('00000006','insert AD74A06T00', 'ERROR '||vSql||' AD74A06T00 ,  DIR:'||R_TUTELADOS.ID_DIRECCION_06, null);
			END;
		COMMIT;
	END LOOP; ---FIN LOOP DIRECCIONES TUTELADOS

END P_MIGRACION_01_DIR;
/