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


CREATE PROCEDURE [dbo].[CPJ_Tarjetas_Cuotas_Opciones] @pJson VARCHAR(8000)
AS 
SET NOCOUNT ON 

/*Variables recibidas por parametro a traves del JSON*/
DECLARE @pModoDebug				TINYINT
DECLARE @pImporte				DECIMAL(12,2)
DECLARE @pFlag_Web				TINYINT
DECLARE @pProductos				VARCHAR(MAX)


SET @pModoDebug					= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'ModoDebug')), 0)
SET @pImporte					= ISNULL(CONVERT(DECIMAL(12,2), dbo.CF_JSON_VALUE(@pJson,'Importe')), 0)
SET @pFlag_Web					= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'Flag_Web')), 0)
SET @pProductos					= ISNULL(dbo.CF_JSON_VALUE(@pJson,'Productos'), '')

/*FIN Variables recibidas por parametro a traves del JSON*/

/*Tabla de Retorno*/
CREATE TABLE #Tarjetas_Cuotas
(
Id_Tarjeta				VARCHAR(10),
Descripcion				VARCHAR(50),
Descrip_Corta			VARCHAR(100),
Cant_Cuotas				TINYINT,
Importe_Cuota			DECIMAL(12,2),
Imp_Total_Orig			DECIMAL(12,2),
Imp_Total_Con_Recargo	DECIMAL(12,2),
Porc_Recargo			DECIMAL(12,5),
Bin_Autorizados			VARCHAR(8000),
Cuota_Gateway			TINYINT,
Flag_Promo				TINYINT
)
/*FIN Tabla de Retorno*/

CREATE TABLE #Valores_Tarjetas_Cred_Filtrada
(Id_Tarjeta				VARCHAR(10),
Descripcion				VARCHAR(50),
Descrip_Corta			VARCHAR(100),
Flag_Promo				TINYINT)

/*Variables Locales*/
DECLARE @SqlQry					NVARCHAR(1000)
DECLARE @Id_Tarjeta				VARCHAR(10)
DECLARE @Descripcion			VARCHAR(50)
DECLARE @Descrip_Corta			VARCHAR(100)
DECLARE @Cant_Cuotas			TINYINT
DECLARE @Cuota_Gateway			TINYINT
DECLARE @Importe_Cuota			DECIMAL(12,2)
DECLARE @Imp_Total_Orig			DECIMAL(12,2)
DECLARE @Imp_Total_Con_Recargo	DECIMAL(12,2)
DECLARE @Porc_Recargo			DECIMAL(12,5)
DECLARE @Cant_Total_Cuotas		INT
DECLARE @Coef_Adel				DECIMAL(7,5)
DECLARE @Coef_Venc				DECIMAL(7,5)
DECLARE @Bin_Autorizados		VARCHAR(8000)
DECLARE @Bin					VARCHAR(6)
DECLARE @CantFP					INT
DECLARE @CantProd				INT
DECLARE @Flag_Promo				TINYINT
/*FIN Variables Locales*/

SET @Imp_Total_Orig = @pImporte

IF @pModoDebug = 1
BEGIN
	PRINT 'Ingreso a Stored Procedure: CPJ_Tarjetas_Cuotas_Opciones'
	PRINT 'Parametros:'
	PRINT 'pImporte: ' + CONVERT(VARCHAR(20), @pImporte) + '. pFlag_Web: ' + CONVERT(VARCHAR(10), @pFlag_Web)
END

IF @pFlag_Web = 1
BEGIN
	SET @SqlQry =	'INSERT INTO #Valores_Tarjetas_Cred_Filtrada
					(Id_Tarjeta, Descripcion, Descrip_Corta, Flag_Promo)
					SELECT Id_Tarjeta, ISNULL(Descripcion, ''''), ISNULL(Descrip_Corta, Descripcion), ISNULL(Flag_Promo, 0) FROM Valores_Tarjetas_Cred
					WHERE
					ISNULL(Activo, 0) = 1
					AND Id_Tarjeta <> ''''
					AND ISNULL(Flag_Web, 0) = 1' 
END
ELSE
BEGIN
	SET @SqlQry =	'INSERT INTO #Valores_Tarjetas_Cred_Filtrada
					(Id_Tarjeta, Descripcion, Descrip_Corta, Flag_Promo)
					SELECT Id_Tarjeta, ISNULL(Descripcion, ''''), ISNULL(Descrip_Corta, Descripcion), ISNULL(Flag_Promo, 0) FROM Valores_Tarjetas_Cred
					WHERE
					ISNULL(Activo, 0) = 1
					AND Id_Tarjeta <> '''''
END

IF @pModoDebug = 1
BEGIN
	PRINT '@SqlQry: ' + @SqlQry
END

EXEC sp_executesql @SqlQry

DECLARE curTarjetas CURSOR FOR
SELECT Id_Tarjeta, Descripcion, Descrip_Corta, Flag_Promo FROM #Valores_Tarjetas_Cred_Filtrada

OPEN curTarjetas
FETCH NEXT FROM curTarjetas INTO @Id_Tarjeta, @Descripcion, @Descrip_Corta, @Flag_Promo
WHILE @@FETCH_STATUS = 0
BEGIN

	SET @Cant_Total_Cuotas	= ISNULL((SELECT ISNULL(COUNT(*), 0) FROM Valores_Tarjetas_Cuotas WHERE Id_Tarjeta = @Id_Tarjeta), 0)
	IF @pModoDebug = 1
	BEGIN
		PRINT '@Id_Tarjeta: ' + @Id_Tarjeta + '. @Cant_Total_Cuotas: ' + CONVERT(VARCHAR(10), @Cant_Total_Cuotas)
	END

	/*05/05/2020 Se agrega @Bin_Autorizados*/
	SET @Bin_Autorizados	= ''
	
	DECLARE curTarjetasBins CURSOR FOR
	SELECT LTRIM(RTRIM(ISNULL(Bin, ''))) FROM Valores_Tarjetas_Bin WHERE Id_Tarjeta = @Id_Tarjeta

	OPEN curTarjetasBins
	FETCH NEXT FROM curTarjetasBins INTO @Bin
	WHILE @@FETCH_STATUS = 0
	BEGIN

		IF @pModoDebug = 1
		BEGIN
			PRINT '@Bin: ' + @Bin
		END
		
		IF(@Bin_Autorizados = '')
		BEGIN
			SET @Bin_Autorizados = @Bin
		END
		ELSE
		BEGIN
			SET @Bin_Autorizados = @Bin_Autorizados + ',' + @Bin
		END		
		
		FETCH NEXT FROM curTarjetasBins INTO @Bin
	END
	CLOSE curTarjetasBins
	DEALLOCATE curTarjetasBins
	/*FIN 05/05/2020 Se agrega @Bin_Autorizados*/
	
	IF(@Cant_Total_Cuotas = 0)
	BEGIN
		SET @Cant_Cuotas			= 1
		SET @Porc_Recargo			= 0
		SET @Importe_Cuota			= @Imp_Total_Orig
		SET @Imp_Total_Con_Recargo	= @Imp_Total_Orig
		
		INSERT INTO #Tarjetas_Cuotas
		(Id_Tarjeta,			Descripcion,			Descrip_Corta,
		Cant_Cuotas,			Importe_Cuota,			Imp_Total_Orig,
		Imp_Total_Con_Recargo,	Porc_Recargo,			Bin_Autorizados,
		Cuota_Gateway,			Flag_Promo)
		VALUES
		(@Id_Tarjeta,			@Descripcion,		@Descrip_Corta,
		@Cant_Cuotas,			@Importe_Cuota,		@Imp_Total_Orig,
		@Imp_Total_Con_Recargo,	@Porc_Recargo,		@Bin_Autorizados,
		0,						@Flag_Promo)
	END
	ELSE
	BEGIN
		DECLARE curCuotas CURSOR FOR
		SELECT Cuota, ISNULL(Coef_Adel, 1), ISNULL(Coef_Venc, 1),ISNULL(Cuota_Gateway,0) FROM Valores_Tarjetas_Cuotas
		WHERE
		Id_Tarjeta = @Id_Tarjeta

		OPEN curCuotas
		FETCH NEXT FROM curCuotas INTO @Cant_Cuotas, @Coef_Adel, @Coef_Venc, @Cuota_Gateway
		WHILE @@FETCH_STATUS = 0
		BEGIN
			/*17/04/2020 Por ahora se multiplica siempre por @Coef_Venc porque en Clarion lo hace a traves de VALORES:Tarjeta_Crit_Cuota = 'V' y aca no lo recibe. Hablado Gabriel y Victor*/
			IF @pModoDebug = 1
			BEGIN
				PRINT '@Cant_Cuotas: ' + CONVERT(VARCHAR(10), @Cant_Cuotas) + '. @Coef_Adel: ' + CONVERT(VARCHAR(10), @Coef_Adel) + '. @Coef_Venc: ' + CONVERT(VARCHAR(10), @Coef_Venc) + '. @Cuota_Gateway: ' + CONVERT(VARCHAR(10), @Cuota_Gateway) + '. @Bin_Autorizados: ' + @Bin_Autorizados
			END


			IF @Coef_Venc = 0 SET @Coef_Venc = 1
			SET @Importe_Cuota			= ROUND(((@Imp_Total_Orig * @Coef_Venc) /  @Cant_Cuotas) , 2, 1)
			
			IF(@Coef_Venc in ( 1,0))
			BEGIN
				SET @Porc_Recargo		= 0
			END
			ELSE
			BEGIN
				SET @Porc_Recargo		= ((@Coef_Venc - 1) * 100)
			END
			
			SET @Imp_Total_Con_Recargo	= @Importe_Cuota * @Cant_Cuotas
			
			INSERT INTO #Tarjetas_Cuotas
			(Id_Tarjeta,			Descripcion,			Descrip_Corta,
			Cant_Cuotas,			Importe_Cuota,			Imp_Total_Orig,
			Imp_Total_Con_Recargo,	Porc_Recargo,			Bin_Autorizados,
			Cuota_Gateway,			Flag_Promo)
			VALUES
			(@Id_Tarjeta,			@Descripcion,		@Descrip_Corta,
			@Cant_Cuotas,			@Importe_Cuota,		@Imp_Total_Orig,
			@Imp_Total_Con_Recargo,	@Porc_Recargo,		@Bin_Autorizados,
			@Cuota_Gateway,			@Flag_Promo)

			FETCH NEXT FROM curCuotas INTO @Cant_Cuotas, @Coef_Adel, @Coef_Venc, @Cuota_Gateway
		END
		CLOSE curCuotas
		DEALLOCATE curCuotas
	END

	FETCH NEXT FROM curTarjetas INTO @Id_Tarjeta, @Descripcion, @Descrip_Corta, @Flag_Promo
END
CLOSE curTarjetas
DEALLOCATE curTarjetas


SET @pProductos = REPLACE(@pProductos,'"','''')

IF @pProductos <> ''
BEGIN
	SELECT * INTO #Productos_Forma_Pago FROM Productos_Forma_Pago WHERE 1=0
	SET @SqlQry = 'INSERT INTO #Productos_Forma_Pago SELECT * FROM Productos_Forma_Pago WHERE Id_Producto IN ('+ @pProductos + ');'
	EXEC sp_executesql @SqlQry
	SELECT @CantFP = COUNT(*) FROM #Productos_Forma_Pago
	UPDATE #Productos_Forma_Pago SET Cuota = 1 WHERE ISNULL(Cuota,0) = 0

	IF @CantFP > 0
	BEGIN
	   SET @CantProd = (SELECT COUNT(DISTINCT(Id_Producto)) FROM #Productos_Forma_Pago) --GROUP BY Id_Producto)
	   SELECT Id_Tarjeta,Cuota,COUNT(*)AS Cant 
					INTO #Productos_Forma_Pago_Filtrado 
					FROM #Productos_Forma_Pago 
					GROUP BY Id_Tarjeta,Cuota HAVING COUNT(*) = @CantProd

	   SELECT * FROM #Tarjetas_Cuotas T, #Productos_Forma_Pago_Filtrado P
			WHERE T.Id_Tarjeta COLLATE Modern_Spanish_CI_AI = P.Id_Tarjeta COLLATE Modern_Spanish_CI_AI
			AND T.Cant_Cuotas = P.Cuota
	   DROP TABLE #Productos_Forma_Pago_Filtrado

	END 
	ELSE
	BEGIN
		SELECT * FROM #Tarjetas_Cuotas
	END
	DROP TABLE #Productos_Forma_Pago
END
ELSE
BEGIN
	SELECT * FROM #Tarjetas_Cuotas
END


/*

EXEC CPJ_Tarjetas_Cuotas_Opciones '{"Productos":"1207","1208","Importe":"1000","Flag_Web":1}' 

EXEC CPJ_Tarjetas_Cuotas_Opciones '{"Productos":{"id":"1207","id2":"1208"},{"id":"1207","id2":"1208"},"Importe":"1000","Flag_Web":1}' 

EXEC CPJ_Tarjetas_Cuotas_Opciones '{"Productos":{"1207","1208"},"Importe":"1000","Flag_Web":1}' 


*/
