DROP PROCEDURE IF EXISTS [dbo].[SP_INSERTARTARJETAMINUTA]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		EChevez
-- Create date: 2020-01-22
-- Update date: 2020-05-13
-- Description:	Inserta en tabla temporal la tarjeta de la minuta actual.
-- =============================================
CREATE PROCEDURE [dbo].[SP_INSERTARTARJETAMINUTA]
	-- Add the parameters for the stored procedure here
	@SALA SMALLINT, 
	@MESA INT,
	@CODCLIENTE INT,
	@ALIASTARJETA VARCHAR(50), 
	@IDTIPOTARJETA INT,
	@CUPONCUMPLEANERO INT = 0
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	DECLARE @PROPINADEF FLOAT;
	DECLARE @ESSOCIO BIT = 0;
	DECLARE @IDMINUTA BIGINT;

	SET @IDMINUTA = (SELECT IDMINUTA FROM ICGFRONTREST.DBO.MINUTASCAB WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE = @CODCLIENTE);

	-- Insert statements for procedure here
	--DELETE FROM TARJETAMINUTAS 
	--WHERE SALA = @SALA 
	--AND MESA = @MESA 
	--AND CODCLIENTE = @CODCLIENTE
	--AND IDMINUTA = @IDMINUTA;

	UPDATE [ICGFRONTREST].[DBO].[MINUTASCAB] 
		SET PORCCARGO = 0,
		IDMOTIVODTO = -1,
		MOTIVODTOOBSERVACIONES = '',
		TARJETACONPLUGIN = 0, 
		TIPOTARJETA = 0,  
		IDTARJETA = 0, 
		ALIASTARJETA = ''
	WHERE SALA = @SALA 
	AND MESA = @MESA 
	AND CODCLIENTE = @CODCLIENTE;

	UPDATE [ICGFRONTREST].[DBO].[MINUTASLIN] 
		SET PORCCARGO = 0,
		IDMOTIVODTO = -1 
	WHERE SALA = @SALA 
	AND MESA = @MESA 
	AND CODCLIENTE = @CODCLIENTE;


	-- RESTABLECER PROPINA POR DEFECTO
	EXEC [dbo].[SP_RESTABLECERPROPINAMESA] @SALA, @MESA;

	IF @ALIASTARJETA != ''
	BEGIN
		DECLARE @IDTARJETA INT;

		SET @IDTARJETA = ISNULL((SELECT IDTARJETA FROM [ICGFRONTREST].[DBO].[TARJETAS] WHERE ALIAS = @ALIASTARJETA AND IDTIPOTARJETA = @IDTIPOTARJETA), 0);
		--SET @IDTARJETA = 25010;

		IF @IDTIPOTARJETA = 1 AND @IDTARJETA = 0
		BEGIN
			SET @IDTARJETA = ISNULL((SELECT IDTARJETA FROM [ICGFRONTREST].[DBO].[TARJETAS] WHERE ALIAS = @ALIASTARJETA AND IDTIPOTARJETA = 3), 0);
			SET @ESSOCIO = 1;
		END

		IF @IDTARJETA = 0 
		BEGIN
			RAISERROR('No se pudo encontrar la tarjeta asociada al empleado o socio.', 16, 217);
			RETURN;
		END

		BEGIN -- MODIFICAR PROPINA DE MESA Y RESPALDAR ACTUAL
			IF @SALA > 0 AND @MESA > 0 AND @IDTIPOTARJETA IN (1,3)
			BEGIN
				SELECT @PROPINADEF = ISNULL(PROPINADEF, 0)
				FROM [ICGFRONTREST].[DBO].[CONFIGSALA] 
				WHERE SALA = @SALA 
				AND NUMMESA = @MESA;

				IF NOT EXISTS (SELECT 1 FROM [DBO].ESTADOSSALA WHERE SALA = @SALA AND MESA = @MESA)
				BEGIN
					INSERT INTO ESTADOSSALA 
					(SALA, MESA, PROPINA) 
					VALUES
					(@SALA, @MESA, @PROPINADEF);

					UPDATE ICGFRONTREST.dbo.CONFIGSALA 
					SET PROPINADEF = 0
					WHERE SALA =  @SALA AND NUMMESA= @MESA;
				END
			END
		END -- MODIFICAR PROPINA DE MESA Y RESPALDAR ACTUAL

		DECLARE @IDMOTIVODTO INT = -1;
		DECLARE @PORCDTO FLOAT = 0;
		DECLARE @LIMDTO FLOAT;
		DECLARE @TOTALNETO FLOAT;
		DECLARE @MOTIVODTOOBSERVACIONES VARCHAR(500) = ''; 
		DECLARE @TOTALAPLICABLE FLOAT;

		-- SI ES CARNET DE EMPLEADO
		IF @IDTIPOTARJETA IN (1)
		BEGIN
			DECLARE @NOMBRES VARCHAR(90);
			DECLARE @APELLIDOS VARCHAR(90);
			DECLARE @PIN VARCHAR(4);

			SELECT @NOMBRES = NOMBRES,
			@APELLIDOS = APELLIDOS,
			@PIN = PIN 
			FROM EMPLEADOS WHERE IDTARJETA = @IDTARJETA;

			-- SI ES SOCIO
			IF @ESSOCIO = 1 
			BEGIN
				--UPDATE [ICGFRONTREST].[DBO].[MINUTASLIN] 
				--SET PRECIO = 0,
				--PRECIOIVA = 0, 
				--TIPO = 'I' 
				--WHERE SALA = @SALA 
				--AND MESA = @MESA 
				--AND CODCLIENTE = @CODCLIENTE 
				--AND TIPO != 'CI';


				DECLARE @IDCERTIFICADOREGALO INT;
				DECLARE @VALORCERTIFICADO NUMERIC(12,2);

				DECLARE @CERTIFICADO AS TABLE (
					IDCERTIFICADO INT, 
					IDEMPRESA INT,
					PIN VARCHAR(10),
					BANDA VARCHAR(50),
					VALOR NUMERIC(12,2)
				);

				INSERT INTO @CERTIFICADO 
				(IDCERTIFICADO, IDEMPRESA, PIN, BANDA, VALOR)
				EXEC ICGMANAGER.ICGSAP_BD.DBO.ICGSAP_SP_CertificadoObtener @ALIASTARJETA;

				SELECT @TOTALNETO = TOTALNETO 
				FROM ICGFRONTREST.DBO.MINUTASCAB 
				WHERE SALA = @SALA 
				AND MESA = @MESA 
				AND CODCLIENTE = @CODCLIENTE;

				SELECT TOP 1 
				@IDCERTIFICADOREGALO = IDCERTIFICADO,
				@VALORCERTIFICADO = VALOR
				FROM @CERTIFICADO;

				IF @TOTALNETO > @VALORCERTIFICADO
				BEGIN
					SET @TOTALNETO = @VALORCERTIFICADO;
				END

				EXEC DBO.SP_INSERTARCERTIFICADOREGALOMINUTA @SALA, @MESA, @CODCLIENTE, @IDCERTIFICADOREGALO, 2, @TOTALNETO;

				UPDATE [ICGFRONTREST].[DBO].[MINUTASCAB] 
					SET TARJETACONPLUGIN = 1, 
					TIPOTARJETA = 3,  
					IDTARJETA = @IDTARJETA, 
					ALIASTARJETA = @ALIASTARJETA  
					WHERE SALA = @SALA 
					AND MESA = @MESA 
					AND CODCLIENTE = @CODCLIENTE;

				UPDATE ICGFRONTREST.DBO.TIQUETSCAB 
					SET TARJETACONPLUGIN = 1, 
					TIPOTARJETA = 3, 
					IDTARJETA = @IDTARJETA 
				WHERE IDMINUTA = @IDMINUTA 
				AND SALA = @SALA 
				AND MESA = @MESA 
				AND CODCLIENTE = @CODCLIENTE
				AND SUBTOTAL = 'T';

			END
			-- SINO ES SOCIO
			ELSE
			BEGIN

				SELECT @TOTALNETO = SUM(ML.PRECIOIVA * ML.UNIDADES)
				FROM ICGFRONTREST.DBO.MINUTASLIN AS ML 
				WHERE ML.SALA = @SALA 
				AND ML.MESA = @MESA 
				AND ML.CODCLIENTE = @CODCLIENTE;

				SELECT @TOTALAPLICABLE = SUM(ML.PRECIOIVA * ML.UNIDADES)
				FROM ICGFRONTREST.DBO.MINUTASLIN AS ML 
				INNER JOIN ICGFRONTREST.DBO.ARTICULOS AS A 
				ON A.CODARTICULO = ML.CODARTICULO 
				WHERE ML.SALA = @SALA 
				AND ML.MESA = @MESA 
				AND ML.CODCLIENTE = @CODCLIENTE 
				AND (A.NODTOAPLICABLE = 0
				OR A.NODTOAPLICABLE IS NULL);

				-- SI MARCARON DESCUENTO CUMPLEAŅERO
				IF @CUPONCUMPLEANERO != 0
				BEGIN
					SET @IDMOTIVODTO = ISNULL((SELECT CAST(VALOR AS INT) FROM PARAMETROS WHERE CLAVE = 'MD_CUPON_CUMP'), 0);

					IF @IDMOTIVODTO = 0 
					BEGIN
						RAISERROR('No se pudo encontrar el DESCUENTO asociado al CUPON CUMPLEANERO.', 16, 217);
						RETURN;
					END

					--SET @PORCDTO = ISNULL((SELECT DTO FROM ICGFRONTREST.DBO.MOTIVOSDTO WHERE IDMOTIVO = @IDMOTIVODTO), 0);
					SET @PORCDTO = ISNULL((SELECT CAST(VALOR AS FLOAT) FROM PARAMETROS WHERE CLAVE = 'PRC_CUPON_CUMP'), 0);

					SET @LIMDTO = ISNULL((SELECT CAST(VALOR AS FLOAT) FROM PARAMETROS WHERE CLAVE = 'MNT_LIM_CUPON_CUMP'), 0);

					SET @MOTIVODTOOBSERVACIONES = CONCAT('DTO CUMPLEANERO ', CAST(@CUPONCUMPLEANERO AS VARCHAR(10)), ': ', @NOMBRES, ' ', @APELLIDOS);

					-- LIMITE DE $100						
					IF @TOTALAPLICABLE > @LIMDTO
					BEGIN
						SET @PORCDTO = ROUND(((@LIMDTO * (@PORCDTO / 100)) * 100) / @TOTALNETO, 2);
					END
					ELSE 
					BEGIN
						SET @PORCDTO = ROUND(((@TOTALAPLICABLE * (@PORCDTO / 100)) * 100) / @TOTALNETO, 2);
					END

					-- END LIMITE DE $100


				END
				-- SINO MARCARON DESCUENTO CUMPLEAŅERO
				ELSE 
				BEGIN 
					SET @IDMOTIVODTO = ISNULL((SELECT CAST(VALOR AS INT) FROM PARAMETROS WHERE CLAVE = 'MD_DTO_EMP'), 0);

					IF @IDMOTIVODTO = 0 
					BEGIN
						RAISERROR('No se pudo encontrar el DESCUENTO asociado al DESCUENTO DE EMPLEADO.', 16, 217);
						RETURN;
					END

					SET @PORCDTO = ISNULL((SELECT CAST(VALOR AS FLOAT) FROM PARAMETROS WHERE CLAVE = 'PRC_DTO_EMP'), 0);

					SET @MOTIVODTOOBSERVACIONES = CONCAT('DTO EMPLEADO: ', @NOMBRES, ' ', @APELLIDOS);

					SET @PORCDTO = ROUND(((@TOTALAPLICABLE * (@PORCDTO / 100)) * 100) / @TOTALNETO, 2);

				END
			END
		END

		IF @ESSOCIO != 1 
		BEGIN
			UPDATE [ICGFRONTREST].[DBO].[MINUTASCAB] 
				SET PORCCARGO = @PORCDTO * -1,
				IDMOTIVODTO = @IDMOTIVODTO,
				TOTALNETO =  CAST(@TOTALNETO - (@TOTALNETO * (ABS(CAST(@PORCDTO AS DECIMAL(12,2)) / 100))) AS DECIMAL(12,2)),
				MOTIVODTOOBSERVACIONES = @MOTIVODTOOBSERVACIONES, 
				TARJETACONPLUGIN = 1, 
				TIPOTARJETA = @IDTIPOTARJETA,  
				IDTARJETA = @IDTARJETA, 
				ALIASTARJETA = @ALIASTARJETA  
				WHERE SALA = @SALA 
				AND MESA = @MESA 
				AND CODCLIENTE = @CODCLIENTE;

			UPDATE ICGFRONTREST.DBO.TIQUETSCAB 
				SET TARJETACONPLUGIN = 1, 
				TIPOTARJETA = @IDTIPOTARJETA, 
				IDTARJETA = @IDTARJETA 
			WHERE IDMINUTA = @IDMINUTA 
			AND SALA = @SALA 
			AND MESA = @MESA 
			AND CODCLIENTE = @CODCLIENTE
			AND SUBTOTAL = 'T';
		END
	END
	SET NOCOUNT OFF

	--IF @CUPONCUMPLEANERO = 0
	--BEGIN
		--INSERT INTO TARJETAMINUTAS 
		--(
		--	SALA, 
		--	MESA, 
		--	CODCLIENTE, 
		--	IDTARJETA,
		--	IDMINUTA
		--)
		--VALUES 
		--(
		--	@SALA, 
		--	@MESA, 
		--	@CODCLIENTE, 
		--	@IDTARJETA,
		--	@IDMINUTA
		--);
	--END

END
GO