Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE FUNCTION dbo.VerificaHorario (
- /* Aarón García A.-
- Fecha: 10 Diciembre 2019
- Motivo: Determina si una fecha/hora cae en horario hábil o inhabil consdiderando un margen de 1 hora para ello.
- Recla de negocio:
- Horario habil: Lunes a Viernes 08:00 a 19:59, sabados 08:00 a 13:59
- Horario inhábil: Lunes a Viernes 20:00 a 07:59, sabado a partir de las 14:00.
- Domingos y festivos todo el día.
- Retorna 1 si es horario inhábil, 0 si es horario hábil.
- */
- @p_FechaActual DATETIME,
- @p_FechaAdm DATETIME
- )
- RETURNS int
- AS
- BEGIN
- DECLARE @v_HoraActual TIME
- DECLARE @v_FechaActual DATETIME
- DECLARE @v_HoraAdm DATETIME
- DECLARE @v_HoraAdm2 TIME
- DECLARE @v_HorarioIn TINYINT
- --SET @v_HoraActual = CONVERT (time, SYSDATETIME())
- SET @v_HoraActual = CONVERT (TIME, @p_FechaActual)
- SET @v_FechaActual = @p_FechaActual
- SET @v_HoraAdm = @p_FechaAdm
- SET @v_HorarioIn = 0
- --select @v_HoraActual
- --Verificamos que no sea feriado o dia domingo
- IF NOT EXISTS(SELECT 1 FROM Age_Feriado WHERE Fec_Feriado = CONVERT(VARCHAR(10), @v_HoraAdm, 103) OR DATEPART(dw, CONVERT(VARCHAR(10), @v_HoraAdm, 103)) = 7)
- BEGIN
- --Verificamos que no sea sabado posterior a las 14 horas
- IF (DATEPART(dw, CONVERT(VARCHAR(10), @v_HoraAdm, 103)) = 6
- AND ((@v_HoraActual >= '14:00' AND @v_HoraActual <= '23:59') OR (@v_HoraActual >= '00:00' AND @v_HoraActual <= '07:59')))
- BEGIN
- SET @v_HoraAdm2 = CONVERT (time, @v_HoraAdm)
- --verificamos horario de admisión para tomar holgura de 1 hora
- IF (DATEDIFF(hh, @v_HoraAdm, @v_FechaActual) < 2) AND (@v_HoraAdm2 >= '08:00' AND @v_HoraAdm2 < '14:00')
- SET @v_HoraActual = DATEADD(HOUR, -1, @v_HoraActual)
- END
- ELSE
- BEGIN
- IF (@v_HoraActual > '20:00' AND @v_HoraActual <= '23:59') OR (@v_HoraActual >= '00:00' AND @v_HoraActual <= '07:59')
- SET @v_HoraAdm2 = CONVERT (time, @v_HoraAdm)
- --verificamos horario para holgura de 1 hora
- IF (DATEDIFF(hh, @v_HoraAdm, @v_FechaActual) < 2) AND (@v_HoraAdm2 >= '08:00' AND @v_HoraAdm2 < '20:00')
- SET @v_HoraActual = DATEADD(HOUR, -1, @v_HoraActual)
- END
- --Si es dia sabado aplicamos regla de horario inhabil especifica
- IF (DATEPART(dw, CONVERT(VARCHAR(10), @v_HoraAdm, 103)) = 6)
- BEGIN
- IF (@v_HoraActual > '14:00' AND @v_HoraActual <= '23:59') OR (@v_HoraActual >= '00:00' AND @v_HoraActual <= '07:59')
- SET @v_HorarioIn = 1
- END
- ELSE
- BEGIN
- IF (@v_HoraActual > '20:00' AND @v_HoraActual <= '23:59') OR (@v_HoraActual >= '00:00' AND @v_HoraActual <= '07:59')
- SET @v_HorarioIn = 1
- END
- END
- ELSE
- BEGIN
- SET @v_HorarioIn = 1
- END
- RETURN @v_HorarioIn
- END
- GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement