SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[actualiza_datos]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[actualiza_datos]
GO

CREATE procedure [dbo].[actualiza_datos]
       
as
begin try
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	declare @variable as datetime;
	Declare @fechaUltAct as int; -- fecha de ultima actualizacion motor 2, formato epoch
	declare @FechaActual as int;
	DECLARE @FechaInicial datetime;
	declare @deltafecha as int;
	
	
	set @fechainicial=cast('01/01/2005 00:00:00' as datetime)
	set @variable=dbo.fechamotor();

	set @deltafecha=4-datediff(hour,getdate(),GETUTCDATE()); -- 1 = para verano, 0 para invierno.
	

	
	select @fechaUltAct=fecha_ultcam from dbo.PF_HISTORICOULTIMAFECHA where ultimafechaid=1;
	set @FechaActual=(datediff(minute,@fechainicial,CURRENT_TIMESTAMP))-@deltafecha*60; -- fecha actual formato epoch
	
	
	
	SET NOCOUNT ON;
    -- actualiza la tabla de procesos con un intervalo indicado en cada proceso
	INSERT INTO dbo.pf_historico_proceso(fecha,sensor,sensor_tipo,camara,proceso,valor)
	select @FechaActual,d.LecturaDirModulo,d.LecturaDirtipo,a.id_camara,b.proceso_actual,CASE a.id_status when 'V' Then d.lecturavalor Else -666 End as valor
		from dbo.pf_sensorxcamara a,dbo.pf_camara b,dbo.pf_proceso c,dbo.MOTORLECTURAS d
			where d.LecturaDirtipo=a.lecturadirtipo 
			and d.LecturaDirModulo=a.LecturaDirModulo
			and a.id_camara=b.id_camara
			and b.estado_actual in ('P','H') -- camaras en proceso y detenidas.
			and c.estado='P' -- proceso esta en proceso.
			and b.proceso_actual=c.id_proceso --parche
			and b.id_camara=c.id_camara
			and (@FechaActual-c.fecha_ultcam)>=c.frecuencia
			order by d.lecturadirmodulo,d.lecturadirtipo;
	IF @@ROWCOUNT <> 0
		update dbo.pf_proceso set fecha_ultcam=@FechaActual where  (@FechaActual-fecha_ultcam)>=frecuencia
		and estado='P'; -- parche
	-- actualiza la tabla historico cada 10 minutos.
	if @FechaActual-@fechaUltAct>=10
		begin
		insert into dbo.pf_historico(fecha,sensor,camara,sensor_tipo,valor)
		select @FechaActual,a.lecturadirmodulo,a.id_camara,d.LecturaDirtipo,CASE a.id_status when 'V' Then d.lecturavalor Else -666 End as valor
			from dbo.pf_sensorxcamara a,dbo.pf_camara b,dbo.MOTORLECTURAS d
				where d.LecturaDirtipo=a.lecturadirtipo
				and d.LecturaDirModulo=a.LecturaDirModulo
				and a.id_camara=b.id_camara
				and b.estado_actual in ('V','P','H') -- camaras activas(sin proceso), en proceso y detenidas, no camaras desabilitadas
				--and a.id_status='V' -- si registramos los sensores desconectados.
				order by d.lecturadirmodulo,d.lecturadirtipo;
		update dbo.pf_historicoultimafecha set fecha_ultcam=@FechaActual;
		end
		/*else
		begin
		--insert into dbo.pf_sistemalog(stringerror,procedimiento,fecha) values(@FechaActual,@fechaUltAct,getdate()); -- para debug.
		end
		*/
END TRY
BEGIN CATCH
	insert into dbo.pf_sistemalog(stringerror,procedimiento,fecha) values(ERROR_MESSAGE(),ERROR_PROCEDURE(),getdate());
end catch

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
