create or replace PROCEDURE P_MIGRACION_OCHO AS 
	
	-- Identificadores del tipo de intervencion en el esquema ad74a:
	cAveria AD74A45T00.ID_TIPO_INTERVENCION_45%type := 2; --Averías // X87 Tecnico A, Averia 1
	cManten AD74A45T00.ID_TIPO_INTERVENCION_45%type := 3; -- Mantenimientos // X87 Tecnico M, Mantenimiento 7
	cBaja   AD74A45T00.ID_TIPO_INTERVENCION_45%type := 5; -- Bajas // X87 Tecnico B, Baja 2
	cInstal AD74A45T00.ID_TIPO_INTERVENCION_45%type := 6;  -- Instalación de dispositivos // X87 Tecnico I, Instalacion 3,4,5,6
	
	CURSOR C_62 IS 
		SELECT IDINTERVENCION_062,X62.IDBENEFICIARIO_009, CL.VALOR_AD74A ID_SOLICITANTE, FECHAINTERVENCION_062, FECHAMODIF_062,
		 decode(X62.IDTIPOINTERVEN_067,1,cAveria,2,cBaja,7,cManten,cInstal) IDTIPOINTERVEN
		FROM X87B.X8762T00@X87B_DBL0 X62, X87B.X8709T00@X87B_DBL0 X09, T_CLAVES_X01 CL
		where X62.IDBENEFICIARIO_009 = X09.IDBENEFICIARIO_009 
        AND CL.VALOR_X87B = X09.IDSOLICITANTE_001
		AND NOT EXISTS (SELECT VALOR_AD74A FROM T_CLAVES_X62 WHERE VALOR_X87B=IDINTERVENCION_062); 
	
	vIdIntervencion25 AD74A25T00.ID_INTERVENCION_25%type;
	
	
	cursor c_63 is 
	select IDPARTEEMER_063,x63.IDBENEFICIARIO_009, valor_ad74a idsolicitante, FECHAAPERTURA_063,
			FECHAARCHIVO_063,IDENTIFICADOR_063,TIPOEMERGENC_063,ID_TIPO_EMERGENCIA_46,FECHAMODIF_063 
		from  X87B.X8763T00@X87B_DBL0 X63,X87B.X8709T00@X87B_DBL0 X09, t_claves_x01 cl, ad74a46t00 ad46
		where X63.IDBENEFICIARIO_009 = X09.IDBENEFICIARIO_009 
		  AND X09.IDSOLICITANTE_001 = CL.VALOR_X87B
		  and upper(trim(tipoemergenc_063)) = upper(trim(DESC_ES_46))
		  AND NOT EXISTS (SELECT VALOR_AD74A FROM T_CLAVES_X63 WHERE VALOR_X87B=IDPARTEEMER_063)
		  and rownum < 12; 
	
	
	cursor c_65 (id63 varchar2) is 
	SELECT idparteemer_063, descrecurso_065,decode(descrecurso_065,'Familiares',1,'Osakidetza',5,'SOS Deiak',4,'U.M.',3,'Vecinos/Amigos',1,'Consejo Sanitario',5,null) idrecurso
	FROM X87B.X8765T00@X87B_DBL0 X65
	WHERE X65.IDPARTEEMER_063 = id63;

	vIdEmergencia AD74A27T00.ID_EMERGENCIA_27%type;
	vIdRecurso AD74A28T00.ID_REC_MOVIL_EMER_28%type;
	vError varchar2(400);
BEGIN
	
	/*FOR R_62 IN C_62 LOOP
		BEGIN
		
			SELECT AD74A25T00_SEQ.NEXTVAL INTO vIdIntervencion25 FROM DUAL;
			
			INSERT INTO T_CLAVES_X62 (VALOR_X87B, VALOR_AD74A, FECHA_MIG, MIGRADO)
			VALUES (R_62.IDINTERVENCION_062, vIdIntervencion25,SYSDATE,'S');
			
			INSERT INTO AD74A25T00 (ID_INTERVENCION_25,ID_TIPO_INTERVENCION_25,PENDIENTE_25,BAJA_25,
									F_INTERVENCION_25,ID_SOLICITANTE_25,F_ALTA_25,USU_ALTA_25, ID_DISPOSITIVO_25)
			VALUES(vIdIntervencion25, R_62.IDTIPOINTERVEN, 0,0, 
					 R_62.FECHAINTERVENCION_062,R_62.ID_SOLICITANTE,R_62.FECHAMODIF_062,'MIGRADO',NULL); -- idDispositivo
			
		EXCEPTION	
			WHEN OTHERS THEN
				insert into t_errores_mig (PROCESO, ERROR, DESC_ERROR, FECHA_ERROR) 
				values('OCHO','Guardar en AD74A25T00','Se ha producido un error al guardar  el registro: idIntervencio, idtipoInter, idsol: '||vIdIntervencion25||','||'null'||','||'null',SYSDATE);
				delete from T_CLAVES_X62 where VALOR_X87B =  R_62.IDINTERVENCION_062;
				
		END;
		COMMIT;
	END LOOP;
	*/
	FOR R_63 IN C_63 LOOP
		BEGIN
			SELECT AD74A27T00_SEQ.NEXTVAL INTO vIdEmergencia FROM DUAL;
			
			INSERT INTO t_claves_x63 (VALOR_X87B, VALOR_AD74A, FECHA_MIG, MIGRADO)
			VALUES (R_63.IDPARTEEMER_063, vIdEmergencia,SYSDATE,'S');
			
			INSERT INTO AD74A27T00 (ID_EMERGENCIA_27,ID_TIPO_EMERGENCIA_27,F_EMERGENCIA_27,
									ID_SOLICITANTE_27,F_ALTA_27,USU_ALTA_27)
				VALUES (vIdEmergencia,R_63.ID_TIPO_EMERGENCIA_46,R_63.FECHAAPERTURA_063, 
						R_63.idsolicitante,sysdate, 'MIGRADO'); 
			--AD74A: Recurso movilizado: 1: Contactos socio familiares; 2: UM propia; 3: UM de soporte; 4: SOS DEIAK; 5: CS – Consejo Sanitario
			
			--Familiares -> 1; Osakidetza ->5; SOS Deiak->4; U.M. -> 3; Vecinos/amigos->1
			FOR R_65 IN C_65 (R_63.IDPARTEEMER_063) LOOP
				SELECT AD74A28T00_SEQ.NEXTVAL INTO vIdRecurso FROM DUAL;
				
				insert into  AD74A28T00 (ID_REC_MOVIL_EMER_28,ID_EMERGENCIA_28,TIEMPO_LLEGADA_28,
										RECURSO_MOVILIZADO_28,F_ALTA_28,USU_ALTA_28, F_ARCHIVO_28)
				values(vIdRecurso,vIdEmergencia,null,
						R_65.idrecurso, R_63.FECHAMODIF_063, 'MIGRADO', R_63.FECHAARCHIVO_063);
			END LOOP;	
		EXCEPTION	
			WHEN OTHERS THEN
				vError := sqlcode||substr(sqlerrm,1,1000);
				--dbms_output.put_line('Se ha producido un error al guardar el registro: idAlarma, idTipoAlarma, idDispos, idLLamada: '||vIdAlarma||','||vIdTipoAlarma24||','||vIdDispositivo24||','||vIdLlamada24);
				insert into t_errores_mig (PROCESO, ERROR, DESC_ERROR, FECHA_ERROR) 
				values('OCHO','Guardar en AD74A27T00','Se ha producido un error: '||vError||', al guardar  el registro: IDPARTEEMER : '|| R_63.IDPARTEEMER_063,SYSDATE);
				delete from T_CLAVES_X63 where VALOR_X87B =  R_63.IDPARTEEMER_063;
				
		END;
		COMMIT;

	END LOOP;
	
END P_MIGRACION_OCHO;
/

