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

CREATE PROCEDURE [dbo].[CP_SCA_ValidoCleverQR]			@pDma				VARCHAR(MAX),
														@pId_Acceso			SMALLINT,
														@pFecha				DATETIME, 
														@Flag_QRValido		INT OUTPUT
AS
BEGIN
DECLARE @Flag_Valida_Links		TINYINT
DECLARE @Existe_QR				INT
DECLARE @Flag_QR_Vigente		TINYINT
DECLARE @Flag_QR_YaUtilizado	TINYINT

/*
Valores Posibles de @Flag_QRValido:
1: Es valido o el acceso no controla QR en Clientes_Links o 
0: El QR no existe en Clientes_Links
-1: El QR existe en Clientes_links pero esta vencido
-2: El QR existe en Clientes_links no esta vencido pero ya esta utilizado
*/

SET @Flag_Valida_Links = ISNULL((SELECT ISNULL(Flag_Clientes_Links_Validar, 0) FROM CD_Accesos WHERE Id_Acceso = @pId_Acceso), 0)

IF(@Flag_Valida_Links = 1) 
BEGIN
	SET @Existe_QR = ISNULL(	(SELECT Id_Link
									FROM Clientes_Links
									WHERE
									LOWER(LTRIM(RTRIM(Url))) = LOWER(LTRIM(RTRIM(@pDma))))
								, 0)
	IF(@Existe_QR > 0)
	BEGIN
		SET @Flag_QR_Vigente = ISNULL(	(SELECT 1
										FROM Clientes_Links
										WHERE
										Id_Link = @Existe_QR
										AND Fecha_Desde <= @pFecha
										AND (Fecha_Hasta IS NULL OR Fecha_Hasta >= @pFecha))
									, 0)
									
		IF(@Flag_QR_Vigente = 1)
		BEGIN
			SET @Flag_QR_YaUtilizado = ISNULL(	(SELECT 1
											FROM Clientes_Links
											WHERE
											Id_Link = @Existe_QR
											AND Fecha_Desde <= @pFecha
											AND (Fecha_Hasta IS NULL OR Fecha_Hasta >= @pFecha)
											AND (Cant_Usos_Permitidos - Cant_Usos_Realizados) <= 0)
										, 0)
			IF(@Flag_QR_YaUtilizado = 0)
			BEGIN
				--El QR se puede utilizar
				SET @Flag_QRValido = 1
			END
			ELSE
			BEGIN
				--El QR existe en Clientes_links no esta vencido pero ya esta utilizado
				SET @Flag_QRValido = -2
			END
		END
		ELSE
		BEGIN
			--El QR existe en Clientes_links pero esta vencido
			SET @Flag_QRValido = -1
		END
	END
	ELSE
	BEGIN
		--El QR no existe en Clientes_Links
		SET @Flag_QRValido = 0
	END
END
ELSE
BEGIN
	/*El Acceso no valida QR (Clientes_Links)*/
	SET @Flag_QRValido = 1
END

RETURN ISNULL(@Flag_QRValido, 0)
END
