IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'[dbo].[CP_SCA_ValidarTurno]') 
                   and OBJECTPROPERTY(id, N'IsProcedure') = 1 )
BEGIN
    DROP PROCEDURE [dbo].[CP_SCA_ValidarTurno] 
END
GO

CREATE PROCEDURE [dbo].[CP_SCA_ValidarTurno]@pId_Cliente			INT, 
											@pId_Acceso				SMALLINT, 
											@pFecha					DATETIME, 
											@pTipoAcceso			CHAR(1), 
											@pFechaEvento			DATETIME,
											@Flag_ValidarTurno_Rta	TINYINT OUTPUT
AS
BEGIN
DECLARE @Flag_Valida_Turno			TINYINT
DECLARE @Id_Sector					SMALLINT
DECLARE @Minutos_Gracia_Previos		SMALLINT
DECLARE @Minutos_Gracia_Posteriores	SMALLINT
DECLARE @Flag_Tiene_Turno			TINYINT
DECLARE @Turnos						TINYINT

SET @Flag_Tiene_Turno = 0
SET @Flag_ValidarTurno_Rta = 0

SET @Flag_Valida_Turno = ISNULL((SELECT MAX(1) FROM CD_Accesos_Emp_Sedes_Sec WHERE Id_Acceso = @pId_Acceso), 0)

IF(@Flag_Valida_Turno = 1)
BEGIN	
	DECLARE curCD_Accesos_Emp_Sedes_Sectores CURSOR FOR
	SELECT
	Id_Sector,
	Minutos_Gracia_Prev,
	Minutos_Gracia_Post
	FROM CD_Accesos_Emp_Sedes_Sec
	WHERE
	Id_Acceso = @pId_Acceso

	OPEN curCD_Accesos_Emp_Sedes_Sectores
	FETCH NEXT FROM curCD_Accesos_Emp_Sedes_Sectores INTO @Id_Sector, @Minutos_Gracia_Previos, @Minutos_Gracia_Posteriores
	WHILE @@FETCH_STATUS = 0
	BEGIN
		/*Busca si tiene un turno como titular CRM_Turnos*/
		SET @Flag_Tiene_Turno = ISNULL(	(SELECT MAX(1)
										FROM CRM_Turnos 
										WHERE
										Id_Cliente = @pId_Cliente
										AND Id_Recurso IN (SELECT Id_Recurso FROM Empresas_Sedes_Sec_Recursos WHERE Id_Sector = @Id_Sector)
										AND Fecha <= DATEADD(MINUTE, @Minutos_Gracia_Previos, @pFecha)
										AND Fecha >= DATEADD(MINUTE, (-1) * @Minutos_Gracia_Posteriores, @pFecha))
										, 0)

		IF(@Flag_Tiene_Turno = 1)
		BEGIN
			/*Tiene al menos 1 turno que cumple la condicion*/
			SET @Flag_ValidarTurno_Rta = 1
		END
		ELSE
		BEGIN
			/*Si no tiene como titular busca si tiene como integrante (CRM_Turnos_Clientes)*/
			SET @Flag_Tiene_Turno = ISNULL(	(SELECT MAX(1)
											FROM CRM_Turnos CT, CRM_Turnos_Clientes CTC
											WHERE
											CT.Id_Turno = CTC.Id_Turno
											AND CTC.Id_Cliente = @pId_Cliente
											AND CT.Id_Recurso IN (SELECT Id_Recurso FROM Empresas_Sedes_Sec_Recursos WHERE Id_Sector = @Id_Sector)
											AND CT.Fecha <= DATEADD(MINUTE, @Minutos_Gracia_Previos, @pFecha)
											AND CT.Fecha >= DATEADD(MINUTE, (-1) * @Minutos_Gracia_Posteriores, @pFecha))
											, 0)
			IF(@Flag_Tiene_Turno = 1)
			BEGIN
				/*Tiene al menos 1 turno como integrante que cumple la condicion*/
				SET @Flag_ValidarTurno_Rta = 1
			END
		END
		
		FETCH NEXT FROM curCD_Accesos_Emp_Sedes_Sectores INTO @Id_Sector, @Minutos_Gracia_Previos, @Minutos_Gracia_Posteriores
	END
	CLOSE curCD_Accesos_Emp_Sedes_Sectores
	DEALLOCATE curCD_Accesos_Emp_Sedes_Sectores
END
ELSE
BEGIN
	/*No valida Turno*/
	SET @Flag_ValidarTurno_Rta = 1
END

RETURN ISNULL(@Flag_ValidarTurno_Rta, 1)
END
