Advertisement
Guest User

Untitled

a guest
Dec 10th, 2019
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.84 KB | None | 0 0
  1. CREATE FUNCTION dbo.VerificaHorario (
  2. /* Aarón García A.-
  3.    Fecha: 10 Diciembre 2019
  4.    Motivo: Determina si una fecha/hora  cae en horario hábil o inhabil consdiderando un margen de 1 hora para ello.
  5.  
  6.    Recla de negocio:
  7.    
  8.    Horario habil: Lunes a Viernes 08:00 a 19:59, sabados 08:00 a 13:59
  9.  
  10.    Horario inhábil: Lunes a Viernes 20:00 a 07:59, sabado a partir de las 14:00.
  11.                     Domingos y festivos todo el día.
  12.  
  13.    Retorna 1 si es horario inhábil, 0 si es horario hábil.
  14.  
  15.  
  16. */
  17.    
  18.    @p_FechaActual DATETIME,
  19.    @p_FechaAdm    DATETIME
  20.    )
  21.  
  22. RETURNS int
  23.  
  24. AS
  25. BEGIN
  26.  
  27.    DECLARE @v_HoraActual  TIME
  28.    DECLARE @v_FechaActual DATETIME
  29.    DECLARE @v_HoraAdm     DATETIME
  30.    DECLARE @v_HoraAdm2    TIME
  31.    DECLARE @v_HorarioIn   TINYINT
  32.    
  33.    --SET @v_HoraActual = CONVERT (time, SYSDATETIME())  
  34.    SET @v_HoraActual = CONVERT (TIME, @p_FechaActual)  
  35.    SET @v_FechaActual = @p_FechaActual
  36.    SET @v_HoraAdm = @p_FechaAdm
  37.    
  38.    SET @v_HorarioIn = 0
  39.    
  40.    --select @v_HoraActual
  41.    
  42.    --Verificamos que no sea feriado o dia domingo
  43.    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)
  44.    BEGIN
  45.    
  46.     --Verificamos que no sea sabado posterior a las 14 horas
  47.     IF (DATEPART(dw, CONVERT(VARCHAR(10), @v_HoraAdm, 103)) = 6
  48.        AND ((@v_HoraActual >= '14:00' AND @v_HoraActual <= '23:59')  OR (@v_HoraActual >= '00:00' AND @v_HoraActual <= '07:59')))
  49.     BEGIN
  50.         SET @v_HoraAdm2 = CONVERT (time, @v_HoraAdm)
  51.        
  52.         --verificamos horario de admisión para tomar holgura de 1 hora
  53.         IF (DATEDIFF(hh, @v_HoraAdm, @v_FechaActual) < 2) AND (@v_HoraAdm2 >= '08:00' AND @v_HoraAdm2 < '14:00')
  54.             SET @v_HoraActual = DATEADD(HOUR, -1, @v_HoraActual)
  55.     END
  56.     ELSE
  57.     BEGIN
  58.        
  59.         IF (@v_HoraActual > '20:00' AND @v_HoraActual <= '23:59')  OR (@v_HoraActual >= '00:00' AND @v_HoraActual <= '07:59')
  60.             SET @v_HoraAdm2 = CONVERT (time, @v_HoraAdm)
  61.        
  62.         --verificamos horario para  holgura de 1 hora
  63.         IF (DATEDIFF(hh, @v_HoraAdm, @v_FechaActual) < 2) AND (@v_HoraAdm2 >= '08:00' AND @v_HoraAdm2 < '20:00')
  64.             SET @v_HoraActual = DATEADD(HOUR, -1, @v_HoraActual)
  65.     END
  66.    
  67.    
  68.     --Si es dia sabado aplicamos regla de horario inhabil especifica
  69.     IF (DATEPART(dw, CONVERT(VARCHAR(10), @v_HoraAdm, 103)) = 6)
  70.     BEGIN
  71.         IF (@v_HoraActual > '14:00' AND @v_HoraActual <= '23:59')  OR (@v_HoraActual >= '00:00' AND @v_HoraActual <= '07:59')
  72.             SET @v_HorarioIn = 1
  73.     END
  74.     ELSE
  75.     BEGIN
  76.         IF (@v_HoraActual > '20:00' AND @v_HoraActual <= '23:59')  OR (@v_HoraActual >= '00:00' AND @v_HoraActual <= '07:59')
  77.             SET @v_HorarioIn = 1
  78.     END
  79.        
  80.    END
  81.    ELSE
  82.    BEGIN
  83.     SET @v_HorarioIn = 1
  84.    END
  85.  
  86.    RETURN @v_HorarioIn
  87.  
  88. END
  89. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement