/****** Object:  UserDefinedFunction [dbo].[ItemPadre]    Script Date: 03/28/2017 09:32:07 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[f_horasVaradoEquipo]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[f_horasVaradoEquipo]
GO

CREATE FUNCTION [dbo].[f_horasVaradoEquipo]
(@idEquipo int,
@p_fecha_ff as smalldatetime,
@p_fecha_ff_b as smalldatetime )
RETURNS FLOAT
AS
BEGIN
----Horas varado desde la primer traza encontrada en el rango hasta el final del rango.
declare @p_resul table (resul float);
insert into @p_resul (resul)(select 
	sum (case when TRZ1.activo=0 then datediff (HOUR,TRZ1.fecha_ff,isnull (TRZ2.fecha_ff,@p_fecha_ff_b)) else 0 end)
from (select trzin.id,trzin.fecha_ff,ROW_NUMBER() OVER(ORDER BY fecha_ff) as num,trzin.id_equipo,estEqin.activo
	from equ_trazabilidad trzin 
	inner join equ_estadoEquipo estEqin on trzin.id_estadoEquipo=estEqin.id
	where trzin.fecha_ff>=@p_fecha_ff and trzin.fecha_ff<=@p_fecha_ff_b and  trzin.id_equipo=@idEquipo and trzin.id_estadoEquipo>0)TRZ1
 left join (
	select trzin.id,trzin.fecha_ff,ROW_NUMBER() OVER(ORDER BY fecha_ff) as num,trzin.id_equipo,estEqin.activo
	from equ_trazabilidad trzin 
	inner join equ_estadoEquipo estEqin on trzin.id_estadoEquipo=estEqin.id
	where trzin.fecha_ff>=@p_fecha_ff and trzin.fecha_ff<=@p_fecha_ff_b and trzin.id_equipo=@idEquipo and trzin.id_estadoEquipo>0) TRZ2 
	on (TRZ1.num+1)=TRZ2.num
GROUP BY TRZ1.id_equipo)

declare @p_resul1 as float
set @p_resul1 = 0.0
if exists (select * from @p_resul) begin set @p_resul1 = (select * from @p_resul)  end else begin set @p_resul1 = 
0 end

declare @p_estadoTrazaAnterior as bit
set @p_estadoTrazaAnterior =	(select top (1) (equ_estadoEquipo.activo) from equ_trazabilidad inner join equ_estadoEquipo 
						on equ_trazabilidad.id_estadoEquipo=equ_estadoEquipo.id
						where fecha_ff<=@p_fecha_ff and id_equipo=@idEquipo and id_estadoEquipo>0 and equ_trazabilidad.id_estadoEquipo>0 order by fecha_ff desc)
					
declare @p_trazaSiguiente as smalldatetime
set @p_trazaSiguiente =  (select min (fecha_ff) from equ_trazabilidad inner join equ_estadoEquipo 
						on equ_trazabilidad.id_estadoEquipo=equ_estadoEquipo.id
						where fecha_ff>=@p_fecha_ff and id_equipo=@idEquipo and activo>0 and equ_trazabilidad.active=1 and equ_trazabilidad.id_estadoEquipo>0)

declare @p_resul2 as float
set @p_resul2 = 0.0
if @p_estadoTrazaAnterior=0 begin 
set @p_resul2= DATEDIFF (HOUR,@p_fecha_ff,@p_trazaSiguiente)
end

declare @p_result as float
set @p_result = 0.0
if @p_resul1+@p_resul2  is null begin
set @p_result= DATEDIFF (HOUR,@p_fecha_ff,@p_fecha_ff_b)end
else
begin
set @p_result= @p_resul1+@p_resul2
end

RETURN @p_result
end



GO


