USE GLPLUGINS
GO
SET DATEFORMAT YMD;

-- VER. 1.0.0.10

UPDATE PARAMETROS SET VALOR = 'True' WHERE CLAVE = 'APL_TOK_EMPL';


-- CREAR TABLA MEMBRESIASMINUTAS
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='MEMBRESIASMINUTAS' and xtype='U')
BEGIN
	CREATE TABLE MEMBRESIASMINUTAS
	(
		IDMINUTA BIGINT NOT NULL,
		IDCLIENTE INT,
		DOCUMENTO VARCHAR(50) NOT NULL DEFAULT '',
		MEMBRESIA VARCHAR(16) NOT NULL DEFAULT '',
		FO SMALLINT,
		SERIE VARCHAR(4),
		NUMERO INT,
		N VARCHAR(1),
		FECHA DATETIME NOT NULL DEFAULT GETDATE(),
		TOKENCANJE VARCHAR(50),
		SALDOPUNTOS NUMERIC(12,2) NOT NULL DEFAULT 0.00,
		SALDODINERO NUMERIC(12,2) NOT NULL DEFAULT 0.00,
		MONTOPUNTOS NUMERIC(12,2) NOT NULL DEFAULT 0.00,
		MONTODINERO NUMERIC(12,2) NOT NULL DEFAULT 0.00,
		PROCESADO BIT NOT NULL DEFAULT 0,
		FECHAPROCESADO DATETIME,
		ANULADO BIT NOT NULL DEFAULT 0,
		FECHAANULADO DATETIME
	);
END
GO
-- END TABLA MEMBRESIASMINUTAS

-- CREAR TABLA EMPLEADOSMINUTAS
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='EMPLEADOSMINUTAS' and xtype='U')
BEGIN
	CREATE TABLE EMPLEADOSMINUTAS
	(
		IDMINUTA BIGINT NOT NULL,
		IDEMPLEADO INT,
		DOCUMENTO VARCHAR(50) NOT NULL DEFAULT '',
		PIN VARCHAR(10) NOT NULL DEFAULT '',
		FO SMALLINT,
		SERIE VARCHAR(4),
		NUMERO INT,
		N VARCHAR(1),
		FECHA DATETIME NOT NULL DEFAULT GETDATE(),
		TOKEN VARCHAR(50),
		SALDOCREDITO NUMERIC(12,2) NOT NULL DEFAULT 0.00,
		SALDOCUPON NUMERIC(12,2) NOT NULL DEFAULT 0.00,
		SALDOMENSUAL NUMERIC(12,2) NOT NULL DEFAULT 0.00,
		MONTOCREDITO NUMERIC(12,2) NOT NULL DEFAULT 0.00,
		MONTOCUPON NUMERIC(12,2) NOT NULL DEFAULT 0.00,
		MONTOMENSUAL NUMERIC(12,2) NOT NULL DEFAULT 0.00,
		APLICACUPONCUMPLEANERO BIT NOT NULL DEFAULT 0,
		PROCESADO BIT NOT NULL DEFAULT 0,
		FECHAPROCESADO DATETIME,
		ANULADO BIT NOT NULL DEFAULT 0,
		FECHAANULADO DATETIME
	);
END
GO
-- END TABLA EMPLEADOSMINUTAS

-- MODIFICAR TABLA DE CERTIFICADOSREGALOMINUTAS
	IF COL_LENGTH('dbo.CERTIFICADOSREGALOMINUTAS', 'SALDO') IS NULL
	BEGIN
		ALTER TABLE CERTIFICADOSREGALOMINUTAS ADD SALDO NUMERIC(12,2) NOT NULL DEFAULT 0.00;
	END
-- END MODIFICAR TABLA DE CERTIFICADOSREGALOMINUTAS

-- SP_INSERTARCERTIFICADOREGALOMINUTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_INSERTARCERTIFICADOREGALOMINUTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2022-08-01
	-- Update date: 2025-11-19
	-- Description:	Inserta en tabla temporal el certificado de la minuta actual.
	-- =============================================
	CREATE PROCEDURE [dbo].[SP_INSERTARCERTIFICADOREGALOMINUTA] --0, 1, 0, 7999, 5
		-- Add the parameters for the stored procedure here
		@SALA SMALLINT, 
		@MESA INT,
		@CODCLIENTE INT,
		@IDCERTIFICADOREGALO INT,
		@IDTIPOTRANSACCION INT,
		@MONTO NUMERIC(12,2),
		@SALDO NUMERIC(12,2)
	AS
	BEGIN
		BEGIN TRY
			BEGIN TRAN
				-- SET NOCOUNT ON added to prevent extra result sets from
				-- interfering with SELECT statements.
				SET NOCOUNT ON;

				-- Insert statements for procedure here

				DECLARE @IDMINUTA BIGINT;
				SET @IDMINUTA = ISNULL((SELECT IDMINUTA FROM [ICGFRONTREST].[DBO].[MINUTASCAB] WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE = @CODCLIENTE), 0);

				IF @IDMINUTA = 0 
				BEGIN
					RAISERROR('No se pudo encontrar la MINUTA asociada al CERTIFICADO DE REGALO.', 16, 217);
					RETURN;
				END

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

				DECLARE @IDMOTIVODTO INT;

				SET @IDMOTIVODTO = ISNULL((SELECT CAST(VALOR AS INT) FROM PARAMETROS WHERE CLAVE = 'MD_CERT_REG'), 0);
				IF @IDMOTIVODTO = 0 
				BEGIN
					RAISERROR('No se pudo encontrar el DESCUENTO asociado al CERTIFICADO DE REGALO.', 16, 217);
					RETURN;
				END

				DECLARE @PROPINADEF FLOAT = 0;
				DECLARE @PROPINAMESA FLOAT = 0;
				DECLARE @TOTALNETO FLOAT = 0;
				DECLARE @TOTALNETOCP FLOAT = 0;
				DECLARE @TOTALNETOSP FLOAT = 0;
				DECLARE @TOTALLINEAS FLOAT = 0;
				DECLARE @FECHA DATETIME = GETDATE();

				DECLARE @DIFERENCIA FLOAT = 0;

				SET @PROPINADEF = 10;
		
				SET @PROPINAMESA = ISNULL((SELECT TOP 1 PROPINADEF FROM ICGFRONTREST.DBO.CONFIGSALA WHERE SALA = @SALA AND NUMMESA = @MESA), 0);

				SET @FECHA = ISNULL((SELECT FECHAINI FROM ICGFRONTREST.DBO.MINUTASCAB WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE = @CODCLIENTE), GETDATE());

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

				SET @TOTALLINEAS = (SELECT ROUND(PRECIOIVA + (PRECIOIVA * (PORCCARGO / 100)), 2, 1) AS TOTALNETO 
				FROM (
				SELECT ISNULL(MC.SERIE, '') AS SERIE, 
				ISNULL(MC.NUMERO, 0) AS NUMERO,  
				ISNULL(MC.N, '') AS N, 
				MC.IDMINUTA, 
				SUM((ML.PRECIOIVA * ML.UNIDADES) + ((ML.PRECIOIVA * ML.UNIDADES) * (ML.PORCCARGO / 100))) AS PRECIOIVA,
				MC.PORCCARGO
				FROM ICGFRONTREST.DBO.MINUTASCAB AS MC  
				INNER JOIN ICGFRONTREST.DBO.MINUTASLIN AS ML ON MC.SALA = ML.SALA AND MC.MESA = ML.MESA AND MC.CODCLIENTE = ML.CODCLIENTE 
				WHERE MC.SALA = @SALA 
				AND MC.MESA = @MESA 
				AND MC.CODCLIENTE = @CODCLIENTE 
				GROUP BY MC.SERIE, MC.NUMERO, MC.N, MC.IDMINUTA, MC.PORCCARGO) AS TMP);

				SET @TOTALNETOCP = ROUND(@TOTALNETO * (1 + (@PROPINADEF / 100)), 2);
				SET @TOTALNETOSP = ROUND(@TOTALNETO / (1 + (@PROPINADEF / 100)), 2);

				IF (ABS(@TOTALLINEAS - @TOTALNETOCP) <= 0.02)
				BEGIN
					SET @TOTALNETO = @TOTALNETOCP;
				END
				ELSE IF (ABS(@TOTALLINEAS - @TOTALNETOSP) <= 0.02)
				BEGIN
					SET @TOTALNETO = @TOTALNETOSP;
				END


				DECLARE @TOTALFINAL FLOAT = IIF(@PROPINAMESA > 0, @TOTALNETO * (1 + (@PROPINAMESA / 100)),  @TOTALNETO);

				IF @MONTO > @TOTALFINAL 
				BEGIN
					SET @MONTO = @TOTALFINAL;
				END

				UPDATE ICGFRONTREST.DBO.MINUTASCAB 
				SET PORCCARGO = ((@MONTO / @TOTALFINAL)*100)*-1, 
				IDMOTIVODTO = @IDMOTIVODTO,
				MOTIVODTOOBSERVACIONES = '(-) CERTIFICADO DE REGALO $' + CAST(@MONTO AS VARCHAR(10))
				--TOTALNETO = @TOTALNETO - @MONTO
				WHERE IDMINUTA = @IDMINUTA;

				DELETE FROM CERTIFICADOSREGALOMINUTAS WHERE IDMINUTA = @IDMINUTA AND IDTIPOTRANSACCION = @IDTIPOTRANSACCION;
				-- BORRAR DE MEMBRESIA Y EMPLEADO
				DELETE FROM MEMBRESIASMINUTAS WHERE IDMINUTA = @IDMINUTA;
				DELETE FROM EMPLEADOSMINUTAS WHERE IDMINUTA = @IDMINUTA;

				INSERT INTO CERTIFICADOSREGALOMINUTAS 
				(
					IDMINUTA, 
					IDCERTIFICADOREGALO, 
					IDTIPOTRANSACCION, 
					FECHA, 
					MONTO,
					SALDO
				)
				VALUES 
				(
					@IDMINUTA, 
					@IDCERTIFICADOREGALO, 
					@IDTIPOTRANSACCION,
					@FECHA,
					@MONTO,
					@SALDO
				);
			COMMIT TRAN

			SELECT 1 AS RESULTADO;
		END TRY
		BEGIN CATCH
			ROLLBACK TRAN
			SELECT 0 AS RESULTADO;
		END CATCH
	END
	GO
-- END SP_INSERTARCERTIFICADOREGALOMINUTA

-- SP_INSERTARMEMBRESIAMINUTA
DROP PROCEDURE IF EXISTS [dbo].[SP_INSERTARMEMBRESIAMINUTA]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		EChevez
-- Create date: 2025-11-10
-- Update date: 2025-11-10
-- Description:	Inserta en tabla temporal la membresia de la minuta actual.
-- =============================================
-- [dbo].[SP_INSERTARMEMBRESIAMINUTA] 0, 1, -1, 19727, 044611429, 1234123412341991, 17.94, 7.00
CREATE PROCEDURE [dbo].[SP_INSERTARMEMBRESIAMINUTA]
	-- Add the parameters for the stored procedure here
	@SALA SMALLINT, 
	@MESA INT,
	@CODCLIENTE INT,
	@IDCLIENTE BIGINT,
	@DOCUMENTO VARCHAR(50),
	@MEMBRESIA VARCHAR(16),
	@TOKENCANJE VARCHAR(50),
	@SALDOPUNTOS NUMERIC(12,2),
	@SALDODINERO NUMERIC(12,2) 
AS
BEGIN
	BEGIN TRY
		BEGIN TRAN
			-- SET NOCOUNT ON added to prevent extra result sets from
			-- interfering with SELECT statements.
			SET NOCOUNT ON;

			-- Insert statements for procedure here

			DECLARE @IDMINUTA BIGINT;
			SET @IDMINUTA = ISNULL((SELECT IDMINUTA FROM [ICGFRONTREST].[DBO].[MINUTASCAB] WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE = @CODCLIENTE), 0);

			IF @IDMINUTA = 0 
			BEGIN
				RAISERROR('No se pudo encontrar la MINUTA asociada al CERTIFICADO DE REGALO.', 16, 217);
				RETURN;
			END

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

			DECLARE @FECHA DATETIME = GETDATE();


			SET @FECHA = ISNULL((SELECT FECHAINI FROM ICGFRONTREST.DBO.MINUTASCAB WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE = @CODCLIENTE), GETDATE());

			DELETE FROM MEMBRESIASMINUTAS WHERE IDMINUTA = @IDMINUTA;
			-- BORRAR DE CERTIFICADO DE REGALO Y EMPLEADO
			DELETE FROM CERTIFICADOSREGALOMINUTAS WHERE IDMINUTA = @IDMINUTA;
			DELETE FROM EMPLEADOSMINUTAS WHERE IDMINUTA = @IDMINUTA;

			INSERT INTO MEMBRESIASMINUTAS 
			(
				IDMINUTA, 
				IDCLIENTE, 
				DOCUMENTO,
				MEMBRESIA,
				FECHA, 
				TOKENCANJE,
				SALDOPUNTOS,
				SALDODINERO
			)
			VALUES 
			(
				@IDMINUTA, 
				@IDCLIENTE, 
				@DOCUMENTO,
				@MEMBRESIA,
				@FECHA,
				@TOKENCANJE,
				@SALDOPUNTOS,
				@SALDODINERO
			);

			--UPDATE ICGFRONTREST.DBO.MINUTASCAB 
			--SET IDTARJETA = CAST(@IDCLIENTE AS int),
			--TIPOTARJETA = 2, 
			--ALIASTARJETA = @MEMBRESIA 
			--WHERE SALA = @SALA 
			--AND MESA = @MESA 
			--AND CODCLIENTE = @CODCLIENTE;

		COMMIT TRAN

		SELECT 1 AS RESULTADO;
	END TRY
	BEGIN CATCH
		ROLLBACK TRAN
		SELECT 0 AS RESULTADO;
	END CATCH
END
GO
-- END SP_INSERTARMEMBRESIAMINUTA

-- SP_INSERTAREMPLEADOMINUTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_INSERTAREMPLEADOMINUTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2025-11-10
	-- Update date: 2025-11-10
	-- Description:	Inserta en tabla temporal la membresia de la minuta actual.
	-- =============================================
	-- [dbo].[SP_INSERTAREMPLEADOMINUTA] 0, 1, -1, 19727, 044611429, 1234123412341991, 17.94, 7.00
	CREATE PROCEDURE [dbo].[SP_INSERTAREMPLEADOMINUTA]
		-- Add the parameters for the stored procedure here
		@SALA SMALLINT, 
		@MESA INT,
		@CODCLIENTE INT,
		@IDEMPLEADO BIGINT,
		@DOCUMENTO VARCHAR(50),
		@PIN VARCHAR(16),
		@NOMBRES VARCHAR(90),
		@APELLIDOS VARCHAR(90),
		@TOKEN VARCHAR(50),
		@SALDOCREDITO NUMERIC(12,2),
		@SALDOCUPON NUMERIC(12,2),
		@SALDOMENSUAL NUMERIC(12,2),
		@APLICACUPONCUMPLEANERO BIT
	AS
	BEGIN
		BEGIN TRY
			BEGIN TRAN
				-- SET NOCOUNT ON added to prevent extra result sets from
				-- interfering with SELECT statements.
				SET NOCOUNT ON;

				-- Insert statements for procedure here

				DECLARE @IDMINUTA BIGINT;
				SET @IDMINUTA = ISNULL((SELECT IDMINUTA FROM [ICGFRONTREST].[DBO].[MINUTASCAB] WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE = @CODCLIENTE), 0);

				IF @IDMINUTA = 0 
				BEGIN
					RAISERROR('No se pudo encontrar la MINUTA asociada al EMPLEADO.', 16, 217);
					RETURN;
				END

				DECLARE @FECHA DATETIME = GETDATE();
				SET @FECHA = ISNULL((SELECT FECHAINI FROM ICGFRONTREST.DBO.MINUTASCAB WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE = @CODCLIENTE), GETDATE());

				DECLARE @MONTOMENSUAL NUMERIC(12,2) = 0;

				-- RESTABLECER DESCUENTOS CAB
				UPDATE [ICGFRONTREST].[DBO].[MINUTASCAB] 
					SET PORCCARGO = 0,
					IDMOTIVODTO = -1,
					MOTIVODTOOBSERVACIONES = ''
				WHERE SALA = @SALA 
				AND MESA = @MESA 
				AND CODCLIENTE = @CODCLIENTE;

				-- RESTABLECER DESCUENTOS LIN
				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;

				DECLARE @PROPINADEF FLOAT;

				IF (@SALA > 0 AND @MESA > 0)
				BEGIN
					SELECT @PROPINADEF = ISNULL(PROPINADEF, 0)
					FROM [ICGFRONTREST].[DBO].[CONFIGSALA] 
					WHERE SALA = @SALA 
					AND NUMMESA = @MESA;

					-- MODIFICAR PROPINA DE MESA Y RESPALDAR ACTUAL
					IF NOT EXISTS (SELECT 1 FROM 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 MODIFICAR PROPINA DE MESA Y RESPALDAR ACTUAL
				END

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

				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);

				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_CertificadoObtenerPin @PIN;

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

				IF EXISTS (SELECT * FROM @CERTIFICADO)
				BEGIN
					
					SELECT TOP 1 
					@IDCERTIFICADOREGALO = IDCERTIFICADO,
					@VALORCERTIFICADO = VALOR
					FROM @CERTIFICADO;

					SET @SALDOMENSUAL = @VALORCERTIFICADO;
				END

				
				-- ES SOCIO
				IF (EXISTS (SELECT * FROM @CERTIFICADO) AND ISNULL(@TOKEN, '') != '')
				BEGIN
					IF @TOTALNETO > @VALORCERTIFICADO
					BEGIN
						SET @TOTALNETO = @VALORCERTIFICADO;
					END

					SET @MONTOMENSUAL = @TOTALNETO;

					EXEC DBO.SP_INSERTARCERTIFICADOREGALOMINUTA @SALA, @MESA, @CODCLIENTE, @IDCERTIFICADOREGALO, 2, @TOTALNETO, @VALORCERTIFICADO;
				END
				ELSE -- NO ES SOCIO
				BEGIN
					IF @APLICACUPONCUMPLEANERO != 0
					BEGIN
						SELECT @IDMOTIVODTO = ISNULL(CAST(VALOR AS INT), 0)
						FROM PARAMETROS 
						WHERE CLAVE = 'MD_CUPON_CUMP';

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

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

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

						SET @MOTIVODTOOBSERVACIONES = CONCAT('DTO CUMPLEANERO: ', @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
					ELSE
					BEGIN
						SELECT @IDMOTIVODTO = ISNULL(CAST(VALOR AS INT), 0)
						FROM PARAMETROS 
						WHERE CLAVE = 'MD_DTO_EMP';

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

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

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

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

					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 
						WHERE SALA = @SALA 
						AND MESA = @MESA 
						AND CODCLIENTE = @CODCLIENTE;

					DELETE FROM EMPLEADOSMINUTAS WHERE IDMINUTA = @IDMINUTA;
					-- BORRAR DE CERTIFICADO DE REGALO Y MEMBRESIA
					DELETE FROM CERTIFICADOSREGALOMINUTAS WHERE IDMINUTA = @IDMINUTA;
					DELETE FROM MEMBRESIASMINUTAS WHERE IDMINUTA = @IDMINUTA;

				END
				-- END APLICAR DESCUENTO DE EMPLEADO


				INSERT INTO EMPLEADOSMINUTAS 
				(
					IDMINUTA, 
					IDEMPLEADO, 
					DOCUMENTO,
					PIN,
					FECHA, 
					TOKEN,
					SALDOCREDITO,
					SALDOCUPON,
					SALDOMENSUAL,
					MONTOMENSUAL,
					APLICACUPONCUMPLEANERO
				)
				VALUES 
				(
					@IDMINUTA, 
					@IDEMPLEADO, 
					@DOCUMENTO,
					@PIN,
					@FECHA,
					@TOKEN,
					@SALDOCREDITO,
					@SALDOCUPON,
					@SALDOMENSUAL,
					@MONTOMENSUAL,
					@APLICACUPONCUMPLEANERO
				);


			COMMIT TRAN

			SELECT 1 AS RESULTADO;
		END TRY
		BEGIN CATCH
			ROLLBACK TRAN

			DECLARE @ERRORMESSAGE NVARCHAR(4000);  
			DECLARE @ERRORSEVERITY INT;  
			DECLARE @ERRORSTATE INT;  
  
			SELECT @ERRORMESSAGE = ERROR_MESSAGE(),  
				@ERRORSEVERITY = ERROR_SEVERITY(),  
				@ERRORSTATE = ERROR_STATE();  
  
			-- Use RAISERROR inside the CATCH block to return error  
			-- information about the original error that caused  
			-- execution to jump to the CATCH block.  
			RAISERROR (@ERRORMESSAGE, -- Message text.  
					   @ERRORSEVERITY, -- Severity.  
					   @ERRORSTATE); -- State.  

			SELECT 0 AS RESULTADO;
		END CATCH
	END
	GO
-- END SP_INSERTAREMPLEADOMINUTA

-- SP_OBTENERCERTIFICADOREGALOMINUTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_OBTENERCERTIFICADOREGALOMINUTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2022-08-08
	-- Update date: 2022-08-08
	-- Description:	Obtener certificado de regalo de minuta
	-- =============================================
	CREATE PROCEDURE [dbo].[SP_OBTENERCERTIFICADOREGALOMINUTA] 
		@SALA SMALLINT, 
		@MESA INT,
		@CODCLIENTE INT
	AS
	BEGIN
		SET NOCOUNT ON;

		DECLARE @IDMINUTA BIGINT;
		SET @IDMINUTA = ISNULL((SELECT IDMINUTA FROM [ICGFRONTREST].[DBO].[MINUTASCAB] WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE = @CODCLIENTE), 0);

		IF @IDMINUTA = 0 
		BEGIN
			RAISERROR('No se pudo encontrar la MINUTA asociada al CERTIFICADO DE REGALO.', 16, 217);
			RETURN;
		END
		
		SELECT IDMINUTA, 
		IDCERTIFICADOREGALO, 
		FO, 
		SERIE, 
		NUMERO,
		N,
		IDTIPOTRANSACCION, 
		FECHA, 
		MONTO, 
		PROCESADO, 
		ANULADO,
		SALDO 
		FROM CERTIFICADOSREGALOMINUTAS 
		WHERE IDMINUTA = @IDMINUTA;
	END
	GO
-- END SP_OBTENERCERTIFICADOREGALOMINUTA

-- SP_OBTENERMEMBRESIAMINUTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_OBTENERMEMBRESIAMINUTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2022-08-08
	-- Update date: 2022-08-08
	-- Description:	Obtener membresía de minuta
	-- =============================================
	-- [dbo].[SP_OBTENERMEMBRESIAMINUTA] 0, 1, 0
	CREATE PROCEDURE [dbo].[SP_OBTENERMEMBRESIAMINUTA] 
		@SALA SMALLINT, 
		@MESA INT,
		@CODCLIENTE INT
	AS
	BEGIN
		SET NOCOUNT ON;

		DECLARE @IDMINUTA BIGINT;
		SET @IDMINUTA = ISNULL((SELECT IDMINUTA FROM [ICGFRONTREST].[DBO].[MINUTASCAB] WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE = @CODCLIENTE), 0);

		IF @IDMINUTA = 0 
		BEGIN
			RAISERROR('No se pudo encontrar la MINUTA asociada a la MEMBRESIA.', 16, 217);
			RETURN;
		END
		
		SELECT IDMINUTA, 
		IDCLIENTE, 
		DOCUMENTO, 
		MEMBRESIA, 
		FO, 
		SERIE, 
		NUMERO,
		N,
		FECHA, 
		TOKENCANJE, 
		SALDOPUNTOS, 
		SALDODINERO,
		MONTOPUNTOS,
		MONTODINERO, 
		PROCESADO, 
		ANULADO
		FROM MEMBRESIASMINUTAS 
		WHERE IDMINUTA = @IDMINUTA;
	END
	GO
-- END SP_OBTENERMEMBRESIAMINUTA

-- SP_OBTENEREMPLEADOMINUTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_OBTENEREMPLEADOMINUTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2025-11-26
	-- Update date: 2025-11-26
	-- Description:	Obtener empleado de minuta
	-- =============================================
	-- [dbo].[SP_OBTENEREMPLEADOMINUTA] 0, 1, 0
	CREATE PROCEDURE [dbo].[SP_OBTENEREMPLEADOMINUTA] 
		@SALA SMALLINT, 
		@MESA INT,
		@CODCLIENTE INT
	AS
	BEGIN
		SET NOCOUNT ON;

		DECLARE @IDMINUTA BIGINT;
		SET @IDMINUTA = ISNULL((SELECT IDMINUTA FROM [ICGFRONTREST].[DBO].[MINUTASCAB] WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE = @CODCLIENTE), 0);

		IF @IDMINUTA = 0 
		BEGIN
			RAISERROR('No se pudo encontrar la MINUTA asociada a la MEMBRESIA.', 16, 217);
			RETURN;
		END
		
		SELECT IDMINUTA, 
		IDEMPLEADO, 
		DOCUMENTO, 
		PIN, 
		FO, 
		SERIE, 
		NUMERO,
		N,
		FECHA,
		TOKEN,
		SALDOCREDITO, 
		SALDOCUPON,
		SALDOMENSUAL,
		MONTOCREDITO,
		MONTOCUPON, 
		MONTOMENSUAL, 
		APLICACUPONCUMPLEANERO, 
		PROCESADO, 
		ANULADO
		FROM EMPLEADOSMINUTAS  
		WHERE IDMINUTA = @IDMINUTA;
	END
	GO
-- END SP_OBTENEREMPLEADOMINUTA

-- SP_OBTENERCERTIFICADOREGALOMINUTATIQUET
	DROP PROCEDURE IF EXISTS [dbo].[SP_OBTENERCERTIFICADOREGALOMINUTATIQUET]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2022-08-08
	-- Update date: 2022-08-08
	-- Description:	Obtener certificado de regalo de minuta
	-- =============================================
	 -- [dbo].[SP_OBTENERCERTIFICADOREGALOMINUTATIQUET] 34, 'I001', 128, 'B'
	CREATE PROCEDURE [dbo].[SP_OBTENERCERTIFICADOREGALOMINUTATIQUET] 
		@FO INT,
		@SERIE VARCHAR(4), 
		@NUMERO INT,
		@N VARCHAR(1)
	AS
	BEGIN
		SET NOCOUNT ON;

		DECLARE @IDMINUTA BIGINT;
		SET @IDMINUTA = ISNULL((SELECT IDMINUTA FROM [ICGFRONTREST].[DBO].[TIQUETSCAB] WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = @N), -1000);
		
		SELECT IDMINUTA, 
		IDCERTIFICADOREGALO, 
		FO, 
		SERIE, 
		NUMERO,
		N,
		IDTIPOTRANSACCION, 
		FECHA, 
		MONTO, 
		PROCESADO, 
		ANULADO,
		SALDO
		FROM CERTIFICADOSREGALOMINUTAS 
		WHERE IDMINUTA = @IDMINUTA;
	END
	GO
-- END SP_OBTENERCERTIFICADOREGALOMINUTATIQUET

-- SP_OBTENERMEMBRESIAMINUTATIQUET
	DROP PROCEDURE IF EXISTS [dbo].[SP_OBTENERMEMBRESIAMINUTATIQUET]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2022-08-08
	-- Update date: 2022-08-08
	-- Description:	Obtener membresía de minuta
	-- =============================================
	-- [dbo].[SP_OBTENERMEMBRESIAMINUTATIQUET] 34, 'F001', 33873, 'B'
	CREATE PROCEDURE [dbo].[SP_OBTENERMEMBRESIAMINUTATIQUET] 
		@FO INT,
		@SERIE VARCHAR(4), 
		@NUMERO INT,
		@N VARCHAR(1)
	AS
	BEGIN
		SET NOCOUNT ON;

		DECLARE @IDMINUTA BIGINT;
		SET @IDMINUTA = ISNULL((SELECT IDMINUTA FROM [ICGFRONTREST].[DBO].[TIQUETSCAB] WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = @N), -1000);
		
		SELECT IDMINUTA, 
		IDCLIENTE, 
		DOCUMENTO, 
		MEMBRESIA, 
		FO, 
		SERIE, 
		NUMERO,
		N,
		FECHA, 
		TOKENCANJE,
		SALDOPUNTOS, 
		SALDODINERO,
		MONTOPUNTOS,
		MONTODINERO, 
		PROCESADO, 
		ANULADO
		FROM MEMBRESIASMINUTAS 
		WHERE IDMINUTA = @IDMINUTA;
	END
	GO
-- END SP_OBTENERMEMBRESIAMINUTATIQUET

-- SP_OBTENEREMPLEADOMINUTATIQUET
	DROP PROCEDURE IF EXISTS [dbo].[SP_OBTENEREMPLEADOMINUTATIQUET]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2022-08-08
	-- Update date: 2022-08-08
	-- Description:	Obtener certificado de regalo de minuta
	-- =============================================
	 -- [dbo].[SP_OBTENEREMPLEADOMINUTATIQUET] 34, 'I001', 130, 'B'
	CREATE PROCEDURE [dbo].[SP_OBTENEREMPLEADOMINUTATIQUET] 
		@FO INT,
		@SERIE VARCHAR(4), 
		@NUMERO INT,
		@N VARCHAR(1)
	AS
	BEGIN
		SET NOCOUNT ON;

		DECLARE @IDMINUTA BIGINT;
		SET @IDMINUTA = ISNULL((SELECT IDMINUTA FROM [ICGFRONTREST].[DBO].[TIQUETSCAB] WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = @N), -1000);
		
		SELECT IDMINUTA, 
		IDEMPLEADO,
		DOCUMENTO,
		PIN,
		FO, 
		SERIE, 
		NUMERO,
		N,
		FECHA, 
		TOKEN,
		SALDOCREDITO,
		SALDOCUPON, 
		SALDOMENSUAL, 
		MONTOCREDITO,
		MONTOCUPON, 
		MONTOMENSUAL,
		APLICACUPONCUMPLEANERO,
		PROCESADO, 
		ANULADO
		FROM EMPLEADOSMINUTAS 
		WHERE IDMINUTA = @IDMINUTA;
	END
	GO
-- END SP_OBTENEREMPLEADOMINUTATIQUET

-- SP_PROCESARCERTIFICADOREGALOMINUTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_PROCESARCERTIFICADOREGALOMINUTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2022-08-08
	-- Update date: 2022-08-08
	-- Description:	Procesar certificados de regalo en ventas
	-- =============================================
	CREATE PROCEDURE [dbo].[SP_PROCESARCERTIFICADOREGALOMINUTA] 
		@IDMINUTA BIGINT, 
		@IDCERTIFICADOREGALO INT, 
		@IDTIPOTRANSACCION INT 
	AS
	BEGIN
		SET NOCOUNT ON;

		BEGIN TRY
			SET NOCOUNT ON;
			SET DATEFORMAT YMD;


			DECLARE @FO SMALLINT;
			DECLARE @SERIE VARCHAR(4);
			DECLARE @NUMERO INT;
			DECLARE @N VARCHAR(1);

			SELECT @FO = ISNULL(FO,0), 
			@SERIE = ISNULL(SERIE,''), 
			@NUMERO = ISNULL(NUMERO, 0), 
			@N = ISNULL(N, '') 
			FROM ICGFRONTREST.DBO.TIQUETSCAB WHERE IDMINUTA = @IDMINUTA;

			UPDATE CERTIFICADOSREGALOMINUTAS 
			SET FO = @FO, 
			SERIE = @SERIE,
			NUMERO = @NUMERO, 
			N = @N, 
			PROCESADO = 1, 
			FECHAPROCESADO = GETDATE() 
			WHERE IDMINUTA = @IDMINUTA AND IDCERTIFICADOREGALO = @IDCERTIFICADOREGALO AND IDTIPOTRANSACCION = @IDTIPOTRANSACCION;

			SELECT 1 AS RESULTADO;
		END TRY
		BEGIN CATCH
			--ROLLBACK TRAN
			SELECT 0 AS RESULTADO;
		END CATCH
	END
	GO
-- END SP_PROCESARCERTIFICADOREGALOMINUTA

-- SP_PROCESARMEMBRESIAMINUTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_PROCESARMEMBRESIAMINUTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2025-11-23
	-- Update date: 2025-11-23
	-- Description:	Procesar membresias en ventas
	-- =============================================
	CREATE PROCEDURE [dbo].[SP_PROCESARMEMBRESIAMINUTA] 
		@IDMINUTA BIGINT, 
		@IDCLIENTE INT,
		@MEMBRESIA VARCHAR(20)
	AS
	BEGIN
		SET NOCOUNT ON;

		BEGIN TRY
			SET NOCOUNT ON;
			SET DATEFORMAT YMD;


			DECLARE @FO SMALLINT;
			DECLARE @SERIE VARCHAR(4);
			DECLARE @NUMERO INT;
			DECLARE @N VARCHAR(1);

			DECLARE @IDSUCURSAL INT;
			DECLARE @IDSUCURSALCENTURIA INT;
			DECLARE @CODVENDEDOR INT;
			DECLARE @VENDEDOR VARCHAR(255);
			DECLARE @CAJAFRONT INT;
			DECLARE @CAJAMANAGER INT;

			SELECT @FO = ISNULL(FO,0), 
			@SERIE = ISNULL(SERIE,''), 
			@NUMERO = ISNULL(NUMERO, 0), 
			@N = ISNULL(N, ''),
			@CODVENDEDOR = ISNULL(CODVENDEDOR, 0), 
			@CAJAFRONT = ISNULL(CAJA, 0)
			FROM ICGFRONTREST.DBO.TIQUETSCAB 
			WHERE IDMINUTA = @IDMINUTA;

			-- OBTENER CAJAMGR
			SELECT @CAJAMANAGER = ISNULL(CAJAMANAGER, 0) 
			FROM [ICGFRONTREST].[DBO].[REM_CAJASMGR] 
			WHERE CAJAFRONT = @CAJAFRONT;

			-- OBTENER ID DE SUCURSAL PARA CLIENTE ESTRELLA (CENTURIA).
			SELECT @IDSUCURSAL = ISNULL(IDSUCURSAL, 0),
			@IDSUCURSALCENTURIA = ISNULL(IDCENTURIA, 0) 
			FROM SUCURSALES 
			WHERE FO = @FO;

			-- OBTENER NOMBRE DE VENDEDOR.
			SELECT @VENDEDOR = ISNULL(NOMBREVENDEDOR, '')
			FROM [ICGFRONTREST].[DBO].[VENDEDORES] 
			WHERE CODVENDEDOR = @CODVENDEDOR;

			DECLARE @CODFORMAPAGOLEALTAD INT;

			-- OBTERNER CODIGO DE FORMA DE PAGO LEALTAD
			SELECT @CODFORMAPAGOLEALTAD = CAST(VALOR AS INT) 
			FROM PARAMETROS 
			WHERE CLAVE = 'FDP_LEALTAD';

			DECLARE @MONTODINERO NUMERIC(12,2);
			DECLARE @MONTOPUNTOS NUMERIC(12,2);

			SELECT @MONTODINERO = ISNULL(SUM(IMPORTE + PROPINA), 0) 
				FROM ICGFRONTREST.DBO.TIQUETSPAG 
				WHERE FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N 
				AND CODFORMAPAGO = @CODFORMAPAGOLEALTAD;

			SELECT @MONTOPUNTOS = ISNULL(SUM(IMPORTE + PROPINA), 0) 
				FROM ICGFRONTREST.DBO.TIQUETSPAG 
				WHERE FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N 
				AND CODFORMAPAGO IN (SELECT CODFORMAPAGO FROM FORMASPAGOLEALTAD);

			IF @MONTOPUNTOS > 0
			BEGIN 
				INSERT INTO MEMBRESIASTRANSACCIONES 
				(
					IDCLIENTE, 
					MEMBRESIA, 
					IDTIPOTRANSACCION,
					IDSUCURSAL, 
					FO,
					SERIE, 
					NUMERO, 
					N, 
					TIPODOCUMENTO, 
					FECHACAJA,
					MONTO, 
					TOTAL, 
					FECHA,
					CODVENDEDOR, 
					VENDEDOR, 
					CAJA
				)
				SELECT 
				@IDCLIENTE AS IDCLIENTE,
				@MEMBRESIA AS MEMBRESIA, 
				1 AS IDTIPOTRANSACCION, 
				@IDSUCURSALCENTURIA AS IDSUCURSAL, 
				FO, 
				SERIE,
				NUMERO, 
				N, 
				SERIE AS TIPODOCUMENTO, 
				FECHA AS FECHACAJA, 
				@MONTOPUNTOS AS MONTO, 
				(TOTALNETO + PROPINA) AS TOTAL, 
				GETDATE() AS FECHA, 
				@CODVENDEDOR AS CODVENDEDOR,
				@VENDEDOR AS VENDEDOR, 
				@CAJAMANAGER AS CAJA 
				FROM [ICGFRONTREST].[DBO].[TIQUETSCAB] 
				WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = @N;
			END

			-- SI HAY SALDO CANJEADO.
			IF @MONTODINERO > 0
			BEGIN

				INSERT INTO MEMBRESIASTRANSACCIONES 
				(
					IDCLIENTE, 
					MEMBRESIA, 
					IDTIPOTRANSACCION,
					IDSUCURSAL, 
					FO,
					SERIE, 
					NUMERO, 
					N, 
					TIPODOCUMENTO, 
					FECHACAJA, 
					MONTO,
					TOTAL, 
					FECHA,
					CODVENDEDOR, 
					VENDEDOR, 
					CAJA
				)
				SELECT 
				@IDCLIENTE AS IDCLIENTE,
				@MEMBRESIA AS MEMBRESIA, 
				2 AS IDTIPOTRANSACCION, 
				@IDSUCURSALCENTURIA AS IDSUCURSAL, 
				FO, 
				SERIE,
				NUMERO, 
				N, 
				SERIE AS TIPODOCUMENTO, 
				FECHA AS FECHACAJA, 
				@MONTODINERO AS MONTO, 
				(TOTALNETO + PROPINA) AS TOTAL, 
				GETDATE() AS FECHA, 
				@CODVENDEDOR AS CODVENDEDOR,
				@VENDEDOR AS VENDEDOR, 
				@CAJAMANAGER AS CAJA 
				FROM [ICGFRONTREST].[DBO].[TIQUETSCAB] 
				WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = @N;
			END

			UPDATE MEMBRESIASMINUTAS 
			SET FO = @FO, 
			SERIE = @SERIE,
			NUMERO = @NUMERO, 
			N = @N, 
			MONTOPUNTOS = @MONTOPUNTOS, 
			MONTODINERO = @MONTODINERO,
			PROCESADO = 1, 
			FECHAPROCESADO = GETDATE() 
			WHERE IDMINUTA = @IDMINUTA 
			AND IDCLIENTE = @IDCLIENTE;

			SELECT 1 AS RESULTADO;
		END TRY
		BEGIN CATCH
			--ROLLBACK TRAN
			PRINT(ERROR_MESSAGE());
			SELECT 0 AS RESULTADO;
		END CATCH
	END
	GO
-- END SP_PROCESARMEMBRESIAMINUTA

-- SP_PROCESAREMPLEADOMINUTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_PROCESAREMPLEADOMINUTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2022-08-08
	-- Update date: 2022-08-08
	-- Description:	Procesar certificados de regalo en ventas
	-- =============================================
	-- [dbo].[SP_PROCESAREMPLEADOMINUTA]  103545, 2374, 'R4Z9'
	CREATE PROCEDURE [dbo].[SP_PROCESAREMPLEADOMINUTA] 
		@IDMINUTA BIGINT, 
		@IDEMPLEADO INT, 
		@PIN VARCHAR(10)
	AS
	BEGIN
		SET NOCOUNT ON;

		BEGIN TRY
			SET NOCOUNT ON;
			SET DATEFORMAT YMD;


			DECLARE @FO SMALLINT;
			DECLARE @SERIE VARCHAR(4);
			DECLARE @NUMERO INT;
			DECLARE @N VARCHAR(1);
			DECLARE @FECHA DATETIME;

			DECLARE @IDSUCURSAL INT;
			DECLARE @CAJAFRONT INT;
			DECLARE @CAJAMANAGER INT;
			DECLARE @IDMOTIVODTO INT;

			SELECT @FO = ISNULL(FO,0), 
			@SERIE = ISNULL(SERIE,''), 
			@NUMERO = ISNULL(NUMERO, 0), 
			@N = ISNULL(N, ''),
			@FECHA = FECHA, 
			@CAJAFRONT = CAJA, 
			@IDMOTIVODTO = IDMOTIVODTO 
			FROM ICGFRONTREST.DBO.TIQUETSCAB WHERE IDMINUTA = @IDMINUTA;

			-- OBTENER CAJAMGR
			SELECT @CAJAMANAGER = ISNULL(CAJAMANAGER, 0) 
			FROM [ICGFRONTREST].[DBO].[REM_CAJASMGR] 
			WHERE CAJAFRONT = @CAJAFRONT;

			-- OBTENER ID DE SUCURSAL
			SELECT @IDSUCURSAL = ISNULL(IDSUCURSAL, 0)
			FROM SUCURSALES 
			WHERE FO = @FO;

			DECLARE @CODFORMAPAGOCREDITOEMPLEADO INT;
			DECLARE @CODFORMAPAGOCUPONEMPLEADO INT;

			-- OBTERNER CODIGO DE FORMA DE PAGO CREDITO DE EMPLEADO
			SELECT @CODFORMAPAGOCREDITOEMPLEADO = CAST(VALOR AS INT) 
			FROM PARAMETROS 
			WHERE CLAVE = 'FDP_CREDITO_EMPLEADO';

			-- OBTERNER CODIGO DE FORMA DE PAGO CUPON DE EMPLEADO
			SELECT @CODFORMAPAGOCUPONEMPLEADO = CAST(VALOR AS INT) 
			FROM PARAMETROS 
			WHERE CLAVE = 'FDP_CUPON_EMPLEADO';

			DECLARE @SALDOCREDITO NUMERIC(12,2);
			DECLARE @SALDOCUPON NUMERIC(12,2);

			SELECT @SALDOCREDITO = ISNULL(SALDOCREDITO, 0), 
			@SALDOCUPON = ISNULL(SALDOCUPON, 0)
			FROM EMPLEADOSMINUTAS 
			WHERE IDMINUTA = @IDMINUTA 
			AND IDEMPLEADO = @IDEMPLEADO;

			DECLARE @MONTOCREDITO NUMERIC(12,2) = 0;
			DECLARE @MONTOCUPON NUMERIC(12,2) = 0;

			DECLARE @IMPORTECREDITO NUMERIC(12,2);
			DECLARE @PROPINACREDITO NUMERIC(12,2);

			SELECT @IMPORTECREDITO = ISNULL(SUM(IMPORTE), 0) 
				FROM ICGFRONTREST.DBO.TIQUETSPAG 
				WHERE FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N 
				AND CODFORMAPAGO = @CODFORMAPAGOCREDITOEMPLEADO;

			SELECT @PROPINACREDITO = ISNULL(SUM(PROPINA), 0) 
				FROM ICGFRONTREST.DBO.TIQUETSPAG 
				WHERE FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N 
				AND CODFORMAPAGO = @CODFORMAPAGOCREDITOEMPLEADO;

			SET @MONTOCREDITO = @IMPORTECREDITO + @PROPINACREDITO;

			IF @SALDOCUPON > 0
			BEGIN
				DECLARE @CUPONREQASIST BIT;

				SELECT @CUPONREQASIST = CAST(VALOR AS BIT) 
				FROM PARAMETROS 
				WHERE CLAVE = 'CPN_REQ_AST';

				DECLARE @MARCACION BIT;

				-- VERIFICAR SI EL EMPLEADO HA MARCADO ASISTENCIA
				EXEC @MARCACION = SP_VERIFICAREMPLEADOMARCACION @FECHA, @IDEMPLEADO;

				IF @CUPONREQASIST = 0 OR @MARCACION = 1
				BEGIN
					--SI SALDO CUPON ES MAYOR AL MONTO DE CREDITO
					IF @SALDOCUPON >= @MONTOCREDITO
					BEGIN
						-- PASO TODO EL MONTO DE CREDITO A CUPON
						SET @MONTOCUPON = @MONTOCREDITO;
					END

					-- SI SALDO CUPON ES MENOR AL MONTO DE CREDITO
					IF @SALDOCUPON < @MONTOCREDITO
					BEGIN
						-- IGUALO EL MONTO AL SALDO
						SET @MONTOCUPON = @SALDOCUPON;
					END
				END

				SET @MONTOCREDITO = ISNULL(@MONTOCREDITO - @MONTOCUPON, 0);
			END

			IF @MONTOCREDITO > 0 OR @MONTOCUPON > 0
			BEGIN
				INSERT INTO EMPLEADOSTRANSACCIONES
				(
					IDEMPLEADO,
					IDTIPOTRANSACCION,
					IDSUCURSAL,
					FO,
					SERIE,
					NUMERO,
					N,
					TIPODOCUMENTO,
					FECHACAJA,
					MONTOCREDITO,
					MONTOCUPON,
					TOTAL,
					PROCESADO,
					FECHA, 
					CAJA
				)
				SELECT 
				@IDEMPLEADO AS IDEMPLEADO,
				2 AS IDTIPOTRANSACCION,
				@IDSUCURSAL AS IDSUCURSAL,
				FO,
				SERIE,
				NUMERO,
				N,
				SERIE AS TIPODOCUMENTO,
				FECHA AS FECHACAJA,
				@MONTOCREDITO AS MONTOCREDITO,
				@MONTOCUPON AS MONTOCUPON,
				(TOTALNETO + PROPINA) AS TOTAL,
				0 AS  PROCESADO,
				GETDATE() AS FECHA, 
				@CAJAMANAGER CAJA 
				FROM [ICGFRONTREST].[DBO].[TIQUETSCAB] 
				WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = @N;
			END

			-- VERIFICAR SI DEBO HACER CAMBIOS EN FORMAS DE PAGO
			-- SI TODO EL CREDITO PASA A SER CUPON, CAMBIO LA FORMA DE PAGO
			IF @MONTOCUPON > 0 AND @MONTOCREDITO = 0
			BEGIN
				UPDATE ICGFRONTREST.DBO.TIQUETSPAG 
				SET CODFORMAPAGO = @CODFORMAPAGOCUPONEMPLEADO 
				WHERE FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N 
				AND CODFORMAPAGO = @CODFORMAPAGOCREDITOEMPLEADO;
			END

			-- SI PARTE DEL CREDITO PASA A CUPON
			IF @MONTOCUPON > 0 AND @MONTOCREDITO > 0
			BEGIN
				UPDATE ICGFRONTREST.DBO.TIQUETSPAG 
				SET IMPORTE = @IMPORTECREDITO, 
				IMPORTE2 = @IMPORTECREDITO,
				PROPINA = ISNULL(@PROPINACREDITO, 0), 
				ENTREGADO = ISNULL(@MONTOCREDITO, 0)
				WHERE FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N 
				AND CODFORMAPAGO = @CODFORMAPAGOCREDITOEMPLEADO;

				DECLARE @NUMLINEA INT;

				SELECT @NUMLINEA = COUNT(FO) 
				FROM ICGFRONTREST.DBO.TIQUETSPAG 
				WHERE FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N;

				INSERT INTO ICGFRONTREST.DBO.TIQUETSPAG 
				(
					FO
					,SERIE
					,NUMERO
					,N
					,NUMLINEA
					,CODFORMAPAGO
					,CODMONEDA
					,IMPORTE
					,IMPORTE2
					,ENTREGADO
					,CAMBIO
					,CAMBIO2
					,PROPINA
					,BENEFICIO
					,PENDIENTE
					,FECHAVENCIM
					,AUTCODE
					,ESTADO
					,TIPOTARJETA
					,TITULARTARJETA
					,REDONDEO
					,NUMTRANSACCION
					,ACUENTAMNG
					,NUMTXNTEF
					,NUMRTSTEF
					,BINTARJETA
					,NUMENTREGACUENTA
					,TRANSACTIONDATA
				)
				VALUES
				(
					@FO
					,@SERIE
					,@NUMERO
					,@N
					,@NUMLINEA
					,@CODFORMAPAGOCUPONEMPLEADO
					,1
					,@MONTOCUPON
					,@MONTOCUPON
					,@MONTOCUPON
					,0
					,0
					,0
					,0
					,0
					,CAST(GETDATE() AS DATE)
					,''
					,0
					,''
					,''
					,0
					,0
					,''
					,''
					,''
					,''
					,-1
					,''
				);
			END

			-- OBTENER CODIGO DE DESCUENTO DE CUPON CUMPLEANERO
			DECLARE @CODMOTIVODTOCUPONCUMPLEANERO INT;

			SELECT @CODMOTIVODTOCUPONCUMPLEANERO = CAST(VALOR AS INT) 
			FROM PARAMETROS 
			WHERE CLAVE = 'MD_CUPON_CUMP';

			DECLARE @APLICATOKENEMPLEADO VARCHAR(5);

			SELECT @APLICATOKENEMPLEADO = ISNULL(VALOR, 'False') 
			FROM PARAMETROS 
			WHERE CLAVE = 'APL_TOK_EMPL';

			IF (@APLICATOKENEMPLEADO = 'True' AND @CODMOTIVODTOCUPONCUMPLEANERO = @IDMOTIVODTO) 
			BEGIN
				EXEC SP_INSERTARCUPONCUMPLEANERO @IDEMPLEADO, @FO, @SERIE, @NUMERO, @N;
			END

			UPDATE EMPLEADOSMINUTAS 
			SET FO = @FO, 
			SERIE = @SERIE,
			NUMERO = @NUMERO, 
			N = @N, 
			MONTOCREDITO = ISNULL(@MONTOCREDITO, 0),
			MONTOCUPON = ISNULL(@MONTOCUPON, 0),
			PROCESADO = 1, 
			FECHAPROCESADO = GETDATE()
			WHERE IDMINUTA = @IDMINUTA AND IDEMPLEADO = @IDEMPLEADO;

			SELECT 1 AS RESULTADO;
		END TRY
		BEGIN CATCH
			ROLLBACK TRAN
			--DECLARE @ERRORMESSAGE NVARCHAR(4000);  
			--DECLARE @ERRORSEVERITY INT;  
			--DECLARE @ERRORSTATE INT;  
  
			--SELECT @ERRORMESSAGE = ERROR_MESSAGE(),  
			--	@ERRORSEVERITY = ERROR_SEVERITY(),  
			--	@ERRORSTATE = ERROR_STATE();  
  
			---- Use RAISERROR inside the CATCH block to return error  
			---- information about the original error that caused  
			---- execution to jump to the CATCH block.  
			--RAISERROR (@ERRORMESSAGE, -- Message text.  
			--		   @ERRORSEVERITY, -- Severity.  
			--		   @ERRORSTATE); -- State.  
			SELECT 0 AS RESULTADO;
		END CATCH
	END
	GO
-- END SP_PROCESAREMPLEADOMINUTA

-- SP_OBTENERCERTIFICADOSREGALOANULACIONES
	DROP PROCEDURE IF EXISTS [SP_OBTENERCERTIFICADOSREGALOANULACIONES]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2021-02-11
	-- Update date: 2022-08-09
	-- Description:	Procesar documentos de venta anulados o abonados de Certificados de Regalo.
	-- =============================================
	CREATE PROCEDURE [dbo].[SP_OBTENERCERTIFICADOSREGALOANULACIONES]

	AS
	BEGIN
		DECLARE @FECHALIMITE DATE = DATEADD(DAY, -50, GETDATE());

		SELECT CRM.IDMINUTA, 
		CRM.IDCERTIFICADOREGALO, 
		CRM.MONTO, 
		CASE CRM.IDTIPOTRANSACCION 
		WHEN 1 THEN 2 
		WHEN 2 THEN 1
		ELSE 0 END AS IDTIPOTRANSACCION
		FROM CERTIFICADOSREGALOMINUTAS AS CRM 
		INNER JOIN ICGFRONTREST.DBO.TIQUETSCAB AS TC 
		ON CRM.IDMINUTA = TC.IDMINUTA 
		WHERE CRM.ANULADO = 0
		AND TC.FECHA >= @FECHALIMITE 
		AND (TC.SERIE LIKE 'F%'
		OR TC.SERIE LIKE 'E%'
		OR TC.SERIE LIKE 'I%')
		AND (
		(TC.ABONADO = 'T')
		OR
		(TC.FECHAANULACION >= DATEADD(YEAR, -2, GETDATE()) 
		AND TC.VENDEDORMODIFICADO != 0));
	END
	GO
-- END SP_OBTENERCERTIFICADOSREGALOANULACIONES

-- SP_ANULARMEMBRESIASTRANSACCIONES
	DROP PROCEDURE IF EXISTS [dbo].[SP_ANULARMEMBRESIASTRANSACCIONES]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2021-08-10
	-- Update date: 2022-08-10
	-- Description:	Procesar documentos de venta anulados o abonados de Membresias.
	-- =============================================
	CREATE PROCEDURE [dbo].[SP_ANULARMEMBRESIASTRANSACCIONES]
	AS
	BEGIN
		BEGIN TRY
			SET NOCOUNT ON;
			SET DATEFORMAT YMD;

			DECLARE @FECHALIMITE DATE = DATEADD(DAY, -7, GETDATE());

			DECLARE @CAJAFRONT INT;
			DECLARE @CAJAMANAGER INT;

			DECLARE @CODFORMAPAGOLEALTAD INT;

			-- OBTENER CODIGO DE FORMA DE PAGO LEALTAD.
			SET @CODFORMAPAGOLEALTAD = (SELECT CAST(VALOR AS INT) AS VALOR FROM PARAMETROS WHERE CLAVE = 'FDP_LEALTAD');

			DROP TABLE IF EXISTS #MEMBRESIASTRANSACCIONES;

			CREATE TABLE #MEMBRESIASTRANSACCIONES
			(
				ID INT IDENTITY(1,1),
				IDCLIENTE INT, 
				MEMBRESIA VARCHAR(16),
				IDTIPOTRANSACCION INT,
				IDSUCURSAL INT,
				FO SMALLINT,
				SERIE VARCHAR(4),
				NUMERO INT,
				N NCHAR(1),
				TIPODOCUMENTO VARCHAR(20),
				FECHACAJA DATETIME,
				MONTO NUMERIC(12, 2),
				TOTAL NUMERIC(12, 2),
				PROCESADO BIT,
				FECHA DATETIME,
				CODVENDEDOR INT,
				VENDEDOR VARCHAR(255),
				CAJA SMALLINT
			);

			INSERT INTO #MEMBRESIASTRANSACCIONES
			(
				IDCLIENTE, 
				MEMBRESIA, 
				IDTIPOTRANSACCION,
				IDSUCURSAL,
				FO,
				SERIE,
				NUMERO,
				N,
				TIPODOCUMENTO,
				FECHACAJA,
				MONTO,
				TOTAL,
				PROCESADO,
				FECHA,
				CODVENDEDOR,
				VENDEDOR,
				CAJA
			)
			-- REVERTIR ENTRADAS DE PUNTOS EN TIQUETS
			SELECT MT.IDCLIENTE, 
			MT.MEMBRESIA, 
			1 AS IDTIPOTRANSACCION, 
			MT.IDSUCURSAL, 
			MT.FO, 
			MT.SERIE, 
			MT.NUMERO, 
			MT.N, 
			MT.TIPODOCUMENTO, 
			MT.FECHACAJA, 
			(MT.MONTO * -1) AS MONTO, 
			(MT.TOTAL * -1) AS TOTAL, 
			'0' AS PROCESADO,
			GETDATE() AS FECHA,
			TC.CODVENDEDOR, 
			'' AS VENDEDOR, 
			ISNULL(RCM.CAJAMANAGER, 0) AS CAJA 
			FROM MEMBRESIASTRANSACCIONES AS MT 
			INNER JOIN [ICGFRONTREST].[DBO].TIQUETSCAB AS TC 
			ON MT.FO = TC.FO 
			AND MT.SERIE = TC.SERIE COLLATE Latin1_General_CS_AI
			AND MT.NUMERO = TC.NUMERO 
			AND MT.N = TC.N  COLLATE Latin1_General_CS_AI 
			LEFT JOIN [ICGFRONTREST].[DBO].[REM_CAJASMGR] AS RCM
			ON RCM.CAJAFRONT = TC.CAJA
			WHERE TC.FECHA >= @FECHALIMITE 
			AND (TC.SERIE LIKE 'T%' 
			OR TC.SERIE LIKE 'F%'
			OR TC.SERIE LIKE 'E%')
			AND TC.ABONADO = 'T' 
			AND MT.IDTIPOTRANSACCION = 1
			UNION ALL 
			-- REVERTIR ENTRADAS DE PUNTOS EN FACTURAS
			SELECT  MT.IDCLIENTE, 
			MT.MEMBRESIA, 
			1 AS IDTIPOTRANSACCION, 
			MT.IDSUCURSAL, 
			MT.FO, 
			MT.SERIE, 
			MT.NUMERO, 
			MT.N, 
			MT.TIPODOCUMENTO, 
			MT.FECHACAJA, 
			(MT.MONTO * -1) AS MONTO, 
			(MT.TOTAL * -1) AS TOTAL, 
			'0' AS PROCESADO,
			GETDATE() AS FECHA,
			TC.CODVENDEDOR, 
			'' AS VENDEDOR, 
			ISNULL(RCM.CAJAMANAGER, 0) AS CAJA 
			FROM MEMBRESIASTRANSACCIONES AS MT 
			INNER JOIN [ICGFRONTREST].[DBO].TIQUETSCAB AS TC 
			ON MT.FO = TC.FO 
			AND MT.SERIE = TC.SERIE COLLATE Latin1_General_CS_AI
			AND MT.NUMERO = TC.NUMERO 
			AND MT.N = TC.N  COLLATE Latin1_General_CS_AI 
			LEFT JOIN [ICGFRONTREST].[DBO].[REM_CAJASMGR] AS RCM
			ON RCM.CAJAFRONT = TC.CAJA
			WHERE TC.FECHA >= @FECHALIMITE 
			AND (TC.SERIE LIKE 'T%' 
			OR TC.SERIE LIKE 'F%'
			OR TC.SERIE LIKE 'E%')
			AND TC.FECHAANULACION >= DATEADD(YEAR, -2, GETDATE()) 
			AND TC.VENDEDORMODIFICADO != 0 
			AND MT.IDTIPOTRANSACCION = 1
			UNION ALL 
			-- REVERTIR CANJES DE DINERO EN TIQUETS
			SELECT MT.IDCLIENTE, 
			MT.MEMBRESIA, 
			2 AS IDTIPOTRANSACCION, 
			MT.IDSUCURSAL, 
			MT.FO, 
			MT.SERIE, 
			MT.NUMERO, 
			MT.N, 
			MT.TIPODOCUMENTO, 
			MT.FECHACAJA, 
			(MT.MONTO * -1) AS MONTO, 
			(MT.TOTAL * -1) AS TOTAL, 
			'0' AS PROCESADO,
			GETDATE() AS FECHA,
			TC.CODVENDEDOR, 
			'' AS VENDEDOR, 
			ISNULL(RCM.CAJAMANAGER, 0) AS CAJA 
			FROM MEMBRESIASTRANSACCIONES AS MT 
			INNER JOIN [ICGFRONTREST].[DBO].TIQUETSCAB AS TC 
			ON MT.FO = TC.FO 
			AND MT.SERIE = TC.SERIE COLLATE Latin1_General_CS_AI
			AND MT.NUMERO = TC.NUMERO 
			AND MT.N = TC.N  COLLATE Latin1_General_CS_AI 
			LEFT JOIN [ICGFRONTREST].[DBO].[REM_CAJASMGR] AS RCM
			ON RCM.CAJAFRONT = TC.CAJA
			WHERE TC.FECHA >= @FECHALIMITE 
			AND (TC.SERIE LIKE 'T%' 
			OR TC.SERIE LIKE 'F%'
			OR TC.SERIE LIKE 'E%')
			AND TC.ABONADO = 'T' 
			AND MT.IDTIPOTRANSACCION = 2
			UNION ALL 
			-- REVERTIR CANJES DE DINERO EN FACTURAS
			SELECT  MT.IDCLIENTE, 
			MT.MEMBRESIA, 
			2 AS IDTIPOTRANSACCION, 
			MT.IDSUCURSAL, 
			MT.FO, 
			MT.SERIE, 
			MT.NUMERO, 
			MT.N, 
			MT.TIPODOCUMENTO, 
			MT.FECHACAJA, 
			(MT.MONTO * -1) AS MONTO, 
			(MT.TOTAL * -1) AS TOTAL, 
			'0' AS PROCESADO,
			GETDATE() AS FECHA,
			TC.CODVENDEDOR, 
			'' AS VENDEDOR, 
			ISNULL(RCM.CAJAMANAGER, 0) AS CAJA  
			FROM MEMBRESIASTRANSACCIONES AS MT 
			INNER JOIN [ICGFRONTREST].[DBO].TIQUETSCAB AS TC 
			ON MT.FO = TC.FO 
			AND MT.SERIE = TC.SERIE COLLATE Latin1_General_CS_AI
			AND MT.NUMERO = TC.NUMERO 
			AND MT.N = TC.N  COLLATE Latin1_General_CS_AI 
			LEFT JOIN [ICGFRONTREST].[DBO].[REM_CAJASMGR] AS RCM
			ON RCM.CAJAFRONT = TC.CAJA
			WHERE TC.FECHA >= @FECHALIMITE 
			AND (TC.SERIE LIKE 'T%' 
			OR TC.SERIE LIKE 'F%'
			OR TC.SERIE LIKE 'E%') 
			AND TC.FECHAANULACION >= DATEADD(YEAR, -2, GETDATE()) 
			AND TC.VENDEDORMODIFICADO != 0 
			AND MT.IDTIPOTRANSACCION = 2

			DECLARE @CONTADORLEALTAD INT = 1;
			DECLARE @TOTALLEALTAD INT = (SELECT COUNT(ID) FROM #MEMBRESIASTRANSACCIONES);

			DECLARE @IDCLIENTE INT,
			@MEMBRESIA VARCHAR(16),
			@IDTIPOTRANSACCION INT,
			@IDSUCURSAL INT, 
			@FO SMALLINT, 
			@SERIE VARCHAR(4),
			@NUMERO INT, 
			@N NCHAR(1),
			@TIPODOCUMENTO VARCHAR(20),
			@FECHACAJA DATETIME,
			@MONTO NUMERIC(12,2);


			-- DEPURAR TRANSACCIONES EXISTENTES
			WHILE @CONTADORLEALTAD <= @TOTALLEALTAD 
			BEGIN
				SELECT @IDCLIENTE = IDCLIENTE, 
					@MEMBRESIA = MEMBRESIA,
					@IDTIPOTRANSACCION = IDTIPOTRANSACCION,
					@IDSUCURSAL = IDSUCURSAL, 
					@FO = FO, 
					@SERIE = SERIE, 
					@NUMERO = NUMERO, 
					@N = N,
					@TIPODOCUMENTO = TIPODOCUMENTO, 
					@FECHACAJA = FECHACAJA,
					@MONTO = MONTO 
				FROM #MEMBRESIASTRANSACCIONES 
				WHERE ID = @CONTADORLEALTAD;

				UPDATE MEMBRESIASMINUTAS 
				SET ANULADO = 1, 
				FECHAANULADO = GETDATE() 
				WHERE IDCLIENTE = @IDCLIENTE 
				AND MEMBRESIA = @MEMBRESIA 
				AND FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N
				AND ANULADO = 0;

				IF EXISTS
				(
					SELECT 1  
					FROM MEMBRESIASTRANSACCIONES 
					WHERE IDCLIENTE = @IDCLIENTE 
					AND MEMBRESIA = @MEMBRESIA 
					AND IDTIPOTRANSACCION = @IDTIPOTRANSACCION 
					AND IDSUCURSAL = @IDSUCURSAL 
					AND FO = @FO 
					AND SERIE = @SERIE 
					AND NUMERO = @NUMERO 
					AND N = @N 
					AND TIPODOCUMENTO = @TIPODOCUMENTO 
					AND FECHACAJA = @FECHACAJA 
					AND MONTO = @MONTO
				)
				BEGIN
					DELETE FROM #MEMBRESIASTRANSACCIONES 
					WHERE ID = @CONTADORLEALTAD;
				END

				SET @CONTADORLEALTAD = @CONTADORLEALTAD + 1;
			END
			-- END DEPURAR TRANSACCIONES EXISTENTES

			-- INSERTAR TRANSACCIONES LISTAS PARA SER PROCESADAS.
			INSERT INTO MEMBRESIASTRANSACCIONES 
			(
				IDCLIENTE, 
				MEMBRESIA, 
				IDTIPOTRANSACCION,
				IDSUCURSAL,
				FO,
				SERIE,
				NUMERO,
				N,
				TIPODOCUMENTO,
				FECHACAJA,
				MONTO,
				TOTAL,
				PROCESADO,
				FECHA,
				CODVENDEDOR,
				VENDEDOR,
				CAJA
			)
			SELECT IDCLIENTE, 
				MEMBRESIA, 
				IDTIPOTRANSACCION,
				IDSUCURSAL,
				FO,
				SERIE,
				NUMERO,
				N,
				TIPODOCUMENTO,
				FECHACAJA,
				MONTO,
				TOTAL,
				PROCESADO,
				FECHA,
				CODVENDEDOR,
				VENDEDOR,
				CAJA 
			FROM #MEMBRESIASTRANSACCIONES 
			ORDER BY ID;
			-- END INSERTAR TRANSACCIONES LISTAS PARA SER PROCESADAS.

			SELECT 1 AS RESULTADO;
		END TRY
		BEGIN CATCH
			SELECT 0 AS RESULTADO;
		END CATCH
	END
	GO
-- END SP_ANULARMEMBRESIASTRANSACCIONES

-- SP_ANULAREMPLEADOSTRANSACCIONES
	DROP PROCEDURE IF EXISTS [dbo].[SP_ANULAREMPLEADOSTRANSACCIONES]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2021-08-10
	-- Update date: 2022-08-10
	-- Description:	Procesar documentos de venta anulados o abonados de Empleados.
	-- =============================================
	CREATE PROCEDURE [dbo].[SP_ANULAREMPLEADOSTRANSACCIONES]
	AS
	BEGIN
		BEGIN TRY
			SET NOCOUNT ON;
			SET DATEFORMAT YMD;

			DECLARE @FECHALIMITE DATE = DATEADD(DAY, -7, GETDATE());

			DECLARE @CAJAFRONT INT;
			DECLARE @CAJAMANAGER INT;

			DECLARE @CODFORMAPAGOCREDITOEMPLEADO INT;
			DECLARE @CODFORMAPAGOCUPONEMPLEADO INT;

			-- OBTENER CODIGO DE FORMA DE PAGO CREDITO EMPLEADO.
			SET @CODFORMAPAGOCREDITOEMPLEADO = (SELECT CAST(VALOR AS INT) AS VALOR FROM PARAMETROS WHERE CLAVE = 'FDP_CREDITO_EMPLEADO');

			-- OBTENER CODIGO DE FORMA DE PAGO CUPON EMPLEADO.
			SET @CODFORMAPAGOCUPONEMPLEADO = (SELECT CAST(VALOR AS INT) AS VALOR FROM PARAMETROS WHERE CLAVE = 'FDP_CUPON_EMPLEADO');

			CREATE TABLE #EMPLEADOSTRANSACCIONES
			(
				ID INT IDENTITY(1,1),
				IDEMPLEADO INT,
				IDTIPOTRANSACCION INT,
				IDSUCURSAL INT,
				FO SMALLINT,
				SERIE VARCHAR(4),
				NUMERO INT,
				N NCHAR(1),
				TIPODOCUMENTO VARCHAR(20),
				FECHACAJA DATETIME,
				MONTOCREDITO NUMERIC(12, 2),
				MONTOCUPON NUMERIC(12, 2),
				TOTAL NUMERIC(12, 2),
				PROCESADO BIT,
				FECHA DATETIME,
				CAJA SMALLINT
			);

			-- BUSCAR TRANSACCIONES EMPLEADOS ANULADAS
			INSERT INTO #EMPLEADOSTRANSACCIONES
			(
				IDEMPLEADO, 
				IDTIPOTRANSACCION,
				IDSUCURSAL,
				FO,
				SERIE,
				NUMERO,
				N,
				TIPODOCUMENTO,
				FECHACAJA,
				MONTOCREDITO,
				MONTOCUPON,
				TOTAL,
				PROCESADO,
				FECHA,
				CAJA
			)
			SELECT ET.IDEMPLEADO, 
				1 AS IDTIPOTRANSACCION, 
				ET.IDSUCURSAL, 
				ET.FO, 
				ET.SERIE, 
				ET.NUMERO, 
				ET.N, 
				ET.TIPODOCUMENTO, 
				ET.FECHACAJA, 
				ET.MONTOCREDITO, 
				ET.MONTOCUPON, 
				ET.TOTAL, 
				'0' AS PROCESADO,
				GETDATE() AS FECHA, 
				ISNULL(RCM.CAJAMANAGER, 0) AS CAJA
			FROM EMPLEADOSTRANSACCIONES AS ET 
			INNER JOIN [ICGFRONTREST].[DBO].TIQUETSCAB AS TC 
			ON ET.FO = TC.FO 
			AND ET.SERIE = TC.SERIE COLLATE Latin1_General_CS_AI
			AND ET.NUMERO = TC.NUMERO 
			AND ET.N = TC.N  COLLATE Latin1_General_CS_AI 
			LEFT JOIN [ICGFRONTREST].[DBO].[REM_CAJASMGR] AS RCM
			ON RCM.CAJAFRONT = TC.CAJA
			WHERE TC.FECHA >= @FECHALIMITE 
			AND (TC.SERIE LIKE 'T%' 
			OR TC.SERIE LIKE 'F%'
			OR TC.SERIE LIKE 'E%')
			AND TC.ABONADO = 'T' 
			AND ET.IDTIPOTRANSACCION = 2
			UNION ALL 
			SELECT ET.IDEMPLEADO, 
				1 AS IDTIPOTRANSACCION, 
				ET.IDSUCURSAL, 
				ET.FO, 
				ET.SERIE, 
				ET.NUMERO, 
				ET.N, 
				ET.TIPODOCUMENTO, 
				ET.FECHACAJA, 
				ET.MONTOCREDITO, 
				ET.MONTOCUPON, 
				ET.TOTAL, 
				'0' AS PROCESADO,
				GETDATE() AS FECHA,
				ISNULL(RCM.CAJAMANAGER, 0) AS CAJA
			FROM EMPLEADOSTRANSACCIONES AS ET 
			INNER JOIN [ICGFRONTREST].[DBO].TIQUETSCAB AS TC 
			ON ET.FO = TC.FO 
			AND ET.SERIE = TC.SERIE COLLATE Latin1_General_CS_AI
			AND ET.NUMERO = TC.NUMERO 
			AND ET.N = TC.N  COLLATE Latin1_General_CS_AI 
			LEFT JOIN [ICGFRONTREST].[DBO].[REM_CAJASMGR] AS RCM
			ON RCM.CAJAFRONT = TC.CAJA
			WHERE TC.FECHA >= @FECHALIMITE 
			AND (TC.SERIE LIKE 'T%' 
			OR TC.SERIE LIKE 'F%'
			OR TC.SERIE LIKE 'E%')
			AND TC.FECHAANULACION >= DATEADD(YEAR, -2, GETDATE()) 
			AND TC.VENDEDORMODIFICADO != 0 
			AND ET.IDTIPOTRANSACCION = 2
			-- END BUSCAR TRANSACCIONES EMPLEADOS ANULADAS

			DECLARE @CONTADOREMPLEADO INT = 1;
			DECLARE @TOTALEMPLEADO INT = (SELECT COUNT(ID) FROM #EMPLEADOSTRANSACCIONES);

			DECLARE @IDEMPLEADO INT,
			@IDTIPOTRANSACCION INT,
			@IDSUCURSAL INT, 
			@FO SMALLINT, 
			@SERIE VARCHAR(4),
			@NUMERO INT, 
			@N NCHAR(1),
			@TIPODOCUMENTO VARCHAR(20),
			@FECHACAJA DATETIME,
			@MONTOCREDITO NUMERIC(12,2),
			@MONTOCUPON NUMERIC(12,2);


			-- DEPURAR TRANSACCIONES EXISTENTES
			WHILE @CONTADOREMPLEADO <= @TOTALEMPLEADO 
			BEGIN
				SELECT @IDEMPLEADO = IDEMPLEADO, 
					@IDTIPOTRANSACCION = IDTIPOTRANSACCION,
					@IDSUCURSAL = IDSUCURSAL, 
					@FO = FO, 
					@SERIE = SERIE, 
					@NUMERO = NUMERO, 
					@N = N,
					@TIPODOCUMENTO = TIPODOCUMENTO, 
					@FECHACAJA = FECHACAJA
				FROM #EMPLEADOSTRANSACCIONES 
				WHERE ID = @CONTADOREMPLEADO;

				UPDATE EMPLEADOSMINUTAS 
				SET ANULADO = 1, 
				FECHAANULADO = GETDATE() 
				WHERE IDEMPLEADO = @IDEMPLEADO 
				AND FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N
				AND ANULADO = 0;

				IF EXISTS 
				(
					SELECT 1  
					FROM EMPLEADOSTRANSACCIONES 
					WHERE IDEMPLEADO = @IDEMPLEADO 
					AND IDTIPOTRANSACCION = @IDTIPOTRANSACCION 
					AND IDSUCURSAL = @IDSUCURSAL 
					AND FO = @FO 
					AND SERIE = @SERIE 
					AND NUMERO = @NUMERO 
					AND N = @N 
					AND TIPODOCUMENTO = @TIPODOCUMENTO 
					AND FECHACAJA = @FECHACAJA
				)
				BEGIN
					DELETE FROM #EMPLEADOSTRANSACCIONES 
					WHERE ID = @CONTADOREMPLEADO;
				END

				SET @CONTADOREMPLEADO = @CONTADOREMPLEADO + 1;
			END
			-- END DEPURAR TRANSACCIONES EXISTENTES


			-- INSERTAR TRANSACCIONES LISTAS PARA SER PROCESADAS.
			INSERT INTO EMPLEADOSTRANSACCIONES 
			(
				IDEMPLEADO, 
				IDTIPOTRANSACCION,
				IDSUCURSAL,
				FO,
				SERIE,
				NUMERO,
				N,
				TIPODOCUMENTO,
				FECHACAJA,
				MONTOCREDITO,
				MONTOCUPON,
				TOTAL,
				PROCESADO,
				FECHA, 
				CAJA
			)
			SELECT IDEMPLEADO, 
				IDTIPOTRANSACCION,
				IDSUCURSAL,
				FO,
				SERIE,
				NUMERO,
				N,
				TIPODOCUMENTO,
				FECHACAJA,
				MONTOCREDITO,
				MONTOCUPON,
				TOTAL,
				PROCESADO,
				FECHA, 
				CAJA
			FROM #EMPLEADOSTRANSACCIONES 
			ORDER BY ID;
			-- END INSERTAR TRANSACCIONES LISTAS PARA SER PROCESADAS.


			SELECT 1 AS RESULTADO;
		END TRY
		BEGIN CATCH
			SELECT 0 AS RESULTADO;
		END CATCH
	END
	GO
-- END SP_ANULAREMPLEADOSTRANSACCIONES

-- SP_ANULARCERTIFICADOREGALOMINUTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_ANULARCERTIFICADOREGALOMINUTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2022-08-08
	-- Update date: 2022-08-08
	-- Description:	Anular certificado de regalo en venta
	-- =============================================
	CREATE PROCEDURE [dbo].[SP_ANULARCERTIFICADOREGALOMINUTA]
		@IDMINUTA BIGINT, 
		@IDCERTIFICADOREGALO INT
	AS
	BEGIN
		BEGIN TRY
			SET NOCOUNT ON;
			SET DATEFORMAT YMD;

			UPDATE CERTIFICADOSREGALOMINUTAS SET ANULADO = 1, FECHAANULADO = GETDATE() WHERE IDMINUTA = @IDMINUTA AND IDCERTIFICADOREGALO = @IDCERTIFICADOREGALO AND ANULADO = 0;
			UPDATE EMPLEADOSMINUTAS SET ANULADO = 1, FECHAANULADO = GETDATE() WHERE IDMINUTA = @IDMINUTA AND MONTOMENSUAL > 0 AND ANULADO = 0;

			SELECT 1 AS RESULTADO;
		END TRY
		BEGIN CATCH
			--ROLLBACK TRAN
			SELECT 0 AS RESULTADO;
		END CATCH
	END
	GO
-- END SP_ANULARCERTIFICADOREGALOMINUTA

-- SP_OBTENERMEMBRESIATRANSACCIONESPENDIENTES
	DROP PROCEDURE IF EXISTS [dbo].[SP_OBTENERMEMBRESIATRANSACCIONESPENDIENTES]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChavarria
	-- Create date: 2021-02-19
	-- Update date: 2025-11-24
	-- Description:	Obtener transacciones de membresias pendientes.
	-- =============================================
	CREATE PROCEDURE [dbo].[SP_OBTENERMEMBRESIATRANSACCIONESPENDIENTES]
	AS
	BEGIN
		SELECT
			MT.IDTIPOTRANSACCION,
			MT.IDCLIENTE,
			MT.MONTO AS TOTAL,
			MT.FECHACAJA,
			MT.NUMERO as IdComanda,
			MT.NUMERO, --DOCUMENTO,
			MT.TIPODOCUMENTO,
			MT.PROCESADO,
			MT.IDSUCURSAL,
			MT.MEMBRESIA,
			MT.FECHA,
			MT.CODVENDEDOR,
			MT.VENDEDOR,
			MT.CAJA
		FROM MEMBRESIASTRANSACCIONES MT
		WHERE MT.PROCESADO = 0; 
	END
	GO
-- END SP_OBTENERMEMBRESIATRANSACCIONESPENDIENTES

-- SP_VALIDARCUPONCUMPLEANERO
	DROP PROCEDURE IF EXISTS [dbo].[SP_VALIDARCUPONCUMPLEANERO]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO  
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2022-06-15
	-- Update date: 2022-06-15
	-- Description:	Verificar token de empleado.
	-- =============================================
	-- [dbo].[SP_VALIDARCUPONCUMPLEANERO] 2374, 34
	CREATE PROCEDURE [dbo].[SP_VALIDARCUPONCUMPLEANERO] 
		-- Add the parameters for the stored procedure here
		@IDEMPLEADO INT, 
		@FO INT
	AS
	BEGIN
		-- SET NOCOUNT ON added to prevent extra result sets from
		-- interfering with SELECT statements.
		SET NOCOUNT ON;
		SET DATEFORMAT YMD;

		DECLARE @IDSUCURSAL INT;
		DECLARE @IDMARCA INT;

		DECLARE @VALIDACION AS TABLE
		(
			RESULTADO BIT,
			MENSAJE VARCHAR(300)
		);

		SELECT @IDSUCURSAL = S.IDSUCURSAL, 
		@IDMARCA = M.IDMARCA 
		FROM SUCURSALES AS S 
		INNER JOIN MARCAS AS M 
		ON S.IDMARCA = M.IDMARCA 
		WHERE S.FO = @FO;
		
		BEGIN TRY
			DECLARE @TEST BIT;
			
			EXEC @TEST = sp_testlinkedserver ICGMANAGER;

			DECLARE @CUPONDISPONIBLE TABLE (
				RESULTADO BIT
			);

			INSERT INTO @CUPONDISPONIBLE 
			(RESULTADO) 
			EXEC ICGMANAGER.ICGSAP_BD.DBO.ICGSAP_SP_CuponCumpleaneroValidar @IDEMPLEADO, @IDMARCA;

			IF NOT EXISTS (SELECT * FROM @CUPONDISPONIBLE WHERE RESULTADO = 1)
			BEGIN
				INSERT INTO @VALIDACION
				(
					RESULTADO, MENSAJE
				)
				VALUES
				(
					0,
					'Cupón cumpleañero no disponible'
				);

				SELECT * FROM @VALIDACION;
				RETURN;
			END
			
			INSERT INTO @VALIDACION
			(
				RESULTADO, MENSAJE
			)
			VALUES
			(
				1,
				'Validación correcta'
			);
			SELECT * FROM @VALIDACION;
			RETURN;

		END TRY
		BEGIN CATCH
			INSERT INTO @VALIDACION
			(
				RESULTADO, MENSAJE
			)
			VALUES
			(
				0,
				'Error al conectar al Servidor Principal, favor intentar mas tarde'
			);

			SELECT * FROM @VALIDACION;
		END CATCH

	END
	GO
-- END SP_VALIDARCUPONCUMPLEANERO

-- SP_BORRARTARJETAMINUTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_BORRARTARJETAMINUTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2020-11-01
	-- Update date: 2020-11-01
	-- Description:	Borrar en tabla temporal la tarjeta de la minuta.
	-- =============================================
	-- [dbo].[SP_BORRARTARJETAMINUTA] 0, 1, 0
	CREATE PROCEDURE [dbo].[SP_BORRARTARJETAMINUTA]
		-- Add the parameters for the stored procedure here
		@SALA SMALLINT, 
		@MESA INT,
		@CODCLIENTE INT
	AS
	BEGIN
		-- SET NOCOUNT ON added to prevent extra result sets from
		SET NOCOUNT ON;

		DECLARE @IDMINUTA BIGINT;
		DECLARE @IDMOTIVODTO INT;

		SELECT @IDMINUTA = IDMINUTA, 
		@IDMOTIVODTO = IDMOTIVODTO 
		FROM ICGFRONTREST.DBO.MINUTASCAB 
		WHERE SALA = @SALA 
		AND MESA = @MESA 
		AND CODCLIENTE =  @CODCLIENTE;

		DECLARE @CODMOTIVODTOCERTIFICADO INT;
		DECLARE @CODMOTIVODTOEMPLEADO INT;
		DECLARE @CODMOTIVODTOCUPONCUMPLEANERO INT;

		-- OBTENER CODIGO DE MOTIVO DE DESCUENTO DE CERTIFICADO DE REGALO
		SELECT @CODMOTIVODTOCERTIFICADO = CAST(VALOR AS INT) 
		FROM PARAMETROS 
		WHERE CLAVE = 'MD_CERT_REG';

		-- OBTENER CODIGO DE MOTIVO DE DESCUENTO DE EMPLEADO
		SELECT @CODMOTIVODTOEMPLEADO = CAST(VALOR AS INT) 
		FROM PARAMETROS 
		WHERE CLAVE = 'MD_DTO_EMP';

		-- OBTENER CODIGO DE MOTIVO DE DESCUENTO DE CUPON CUMPLEANERO
		SELECT @CODMOTIVODTOCUPONCUMPLEANERO = CAST(VALOR AS INT) 
		FROM PARAMETROS 
		WHERE CLAVE = 'MD_CUPON_CUMP';


		--DELETE FROM TARJETAMINUTAS 
		--	WHERE SALA = @SALA 
		--	AND MESA = @MESA 
		--	AND CODCLIENTE = @CODCLIENTE
		--	AND IDMINUTA < @IDMINUTA;

		-- IF EXISTS (SELECT * FROM [ICGFRONTREST].[DBO].[MINUTASCAB] WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE =  @CODCLIENTE AND IDTARJETA != 0 AND (SALA != 0 OR MESA < 1000))
		IF EXISTS (SELECT * FROM [ICGFRONTREST].[DBO].[MINUTASCAB] WHERE SALA = @SALA AND MESA = @MESA AND CODCLIENTE =  @CODCLIENTE AND (SALA != 0 OR MESA < 1000))
		BEGIN
			--DELETE FROM TARJETAMINUTAS 
			--WHERE SALA = @SALA 
			--AND MESA = @MESA 
			--AND CODCLIENTE = @CODCLIENTE;

			IF @IDMOTIVODTO IN (@CODMOTIVODTOCERTIFICADO, @CODMOTIVODTOEMPLEADO, @CODMOTIVODTOCUPONCUMPLEANERO)
			BEGIN
				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;

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

			

			DELETE FROM CERTIFICADOSREGALOMINUTAS WHERE IDMINUTA = @IDMINUTA AND PROCESADO = 0;
			DELETE FROM MEMBRESIASMINUTAS WHERE IDMINUTA = @IDMINUTA AND PROCESADO = 0;
			DELETE FROM EMPLEADOSMINUTAS WHERE IDMINUTA = @IDMINUTA AND PROCESADO = 0;
		END

		

		--IF (@IDMOTIVODTOCERT = @IDMOTIVODTO)
		--BEGIN
		--	DECLARE @NOMBREDTO VARCHAR(255) = '';
		--	DECLARE @PORCDTO FLOAT = 0;
		--	DECLARE @MOTIVODTOOBSERVACIONES VARCHAR(500) = '';

		--	DECLARE @TOTALNETO FLOAT;

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

		--	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 
		--	WHERE SALA = @SALA 
		--	AND MESA = @MESA 
		--	AND CODCLIENTE = @CODCLIENTE;
		--END

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

		SET NOCOUNT OFF;

		SELECT 1 AS RESULTADO;
	END
	GO
-- END SP_BORRARTARJETAMINUTA

-- SP_VALIDARFACTVENTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_VALIDARFACTVENTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2025-11-19
	-- Update date: 2025-11-19
	-- Description:	Validar factura de venta.
	-- =============================================
	CREATE PROCEDURE [dbo].[SP_VALIDARFACTVENTA]
		@FO SMALLINT, 
		@SERIE VARCHAR(4), 
		@NUMERO INT,
		@N CHAR(1)
	AS
	BEGIN
		SET NOCOUNT ON;
		SET DATEFORMAT YMD;

		DECLARE @VALIDACION AS TABLE(
			RESULTADO BIT,
			MENSAJE VARCHAR(300)
		);

		DECLARE @SALA SMALLINT;
		DECLARE @MESA INT;
		DECLARE @FECHA DATETIME;
		DECLARE @CODCLIENTE INT;
		DECLARE @CODVENDEDOR INT;
		DECLARE @CAJA INT;
		DECLARE @CARGO DECIMAL(12,2);
		DECLARE @TOTALNETO DECIMAL(12,2);
		DECLARE @SUPEDIDO VARCHAR(15);
		DECLARE @IDMOTIVODTO INT;
		DECLARE @FECHAINI DATETIME;
		DECLARE @IDMINUTA BIGINT;
		
		DECLARE @FODISTRIBUIDOR SMALLINT;
		DECLARE @VENDEDOR VARCHAR(255);
		DECLARE @CAJAMANAGER INT;

		DECLARE @CODFORMAPAGOLEALTAD INT;
		DECLARE @CODFORMAPAGOCREDITOEMPLEADO INT;
		DECLARE @CODFORMAPAGOCUPONEMPLEADO INT;

		DECLARE @CODMOTIVODTOCERTIFICADO INT;
		DECLARE @CODMOTIVODTOEMPLEADO INT;
		DECLARE @CODMOTIVODTOCUPONCUMPLEANERO INT;

		-- OBTENER VALORES DE TIQUETSCAB
		SELECT @SALA = ISNULL(SALA, 0), 
		@MESA = ISNULL(MESA, 0),
		@FECHA = ISNULL(FECHA, GETDATE()),
		@CODCLIENTE = ISNULL(CODCLIENTE, 0),
		@CODVENDEDOR = ISNULL(CODVENDEDOR, 0),
		@CAJA = ISNULL(CAJA, 0),
		@CARGO = CAST(ISNULL(CARGO, 0) AS DECIMAL(12,2)), 
		@TOTALNETO =  CAST(ISNULL(TOTALNETO, 0) AS DECIMAL(10,2)),
		@SUPEDIDO = ISNULL(SUPEDIDO, ''), 
		@IDMOTIVODTO = ISNULL(IDMOTIVODTO, -1), 
		@FECHAINI = ISNULL(FECHAINI, GETDATE()), 
		@IDMINUTA = ISNULL(IDMINUTA, 0) 
		FROM ICGFRONTREST.DBO.TIQUETSCAB 
		WHERE FO = @FO 
		AND SERIE = @SERIE 
		AND NUMERO = @NUMERO 
		AND N = @N;

		-- OBTENER CODIGO DE FO DE DISTRIBUIDORES
		SELECT @FODISTRIBUIDOR = CAST(VALOR AS INT) 
		FROM PARAMETROS 
		WHERE CLAVE = 'FO_DISTRIBUIDOR';

		-- OBTENGA NOMBRE DE VENDEDOR
		SELECT @VENDEDOR = ISNULL(NOMBREVENDEDOR, '') 
		FROM [ICGFRONTREST].[DBO].[VENDEDORES] 
		WHERE CODVENDEDOR = @CODVENDEDOR;

		-- OBTENER CAJAMGR
		SELECT @CAJAMANAGER = ISNULL(CAJAMANAGER, 0) 
		FROM [ICGFRONTREST].[DBO].[REM_CAJASMGR] 
		WHERE CAJAFRONT = @CAJA;

		-- OBTERNER CODIGO DE FORMA DE PAGO LEALTAD
		SELECT @CODFORMAPAGOLEALTAD = CAST(VALOR AS INT) 
		FROM PARAMETROS 
		WHERE CLAVE = 'FDP_LEALTAD';

		-- OBTENER CODIGO DE FORMA DE PAGO CREDITO EMPLEADO
		SELECT @CODFORMAPAGOCREDITOEMPLEADO = CAST(VALOR AS INT) 
		FROM PARAMETROS 
		WHERE CLAVE = 'FDP_CREDITO_EMPLEADO';

		-- OBTENER CODIGO DE FORMA DE PAGO CUPON EMPLEADO
		SELECT @CODFORMAPAGOCUPONEMPLEADO = CAST(VALOR AS INT) 
		FROM PARAMETROS 
		WHERE CLAVE = 'FDP_CUPON_EMPLEADO';

		-- OBTENER CODIGO DE MOTIVO DE DESCUENTO DE CERTIFICADO DE REGALO
		SELECT @CODMOTIVODTOCERTIFICADO = CAST(VALOR AS INT) 
		FROM PARAMETROS 
		WHERE CLAVE = 'MD_CERT_REG';

		-- OBTENER CODIGO DE MOTIVO DE DESCUENTO DE EMPLEADO
		SELECT @CODMOTIVODTOEMPLEADO = CAST(VALOR AS INT) 
		FROM PARAMETROS 
		WHERE CLAVE = 'MD_DTO_EMP';

		-- OBTENER CODIGO DE MOTIVO DE DESCUENTO DE CUPON CUMPLEANERO
		SELECT @CODMOTIVODTOCUPONCUMPLEANERO = CAST(VALOR AS INT) 
		FROM PARAMETROS 
		WHERE CLAVE = 'MD_CUPON_CUMP';
		

		-- VALIDACIONES ENTRE SUCURSAL Y DISTRIBUIDORES
		IF @FO != @FODISTRIBUIDOR
		BEGIN
			-- VALIDAR FORMA DE PAGO ANTICIPO A PEDIDO EN ENCARGO DE SUCURSALES
			IF (@SUPEDIDO != '' AND EXISTS(SELECT * FROM ICGFRONTREST.DBO.TIQUETSPAG WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = @N AND CODFORMAPAGO != 52))
			BEGIN
				INSERT INTO @VALIDACION 
				VALUES
				(0, 'La única forma de pago permitida para ENCARGOS es ANTICIPO A PEDIDOS');
			END
		END
		ELSE 
		BEGIN
			-- VALIDACIONES PARA DISTRIBUIDORES
			IF @TOTALNETO > 0
			BEGIN
				DECLARE @ERROR NVARCHAR(MAX) = ''

				-- FORMA DE PAGO INVALIDA EN PEDIDOS
				IF (EXISTS(SELECT 1 FROM ICGFRONTREST.DBO.TIQUETSPAG WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = @N 
									AND CODFORMAPAGO NOT IN (SELECT CODFORMAPAGO FROM ICGFRONTREST.DBO.FORMASPAGO WHERE PENDIENTE = 'T')))
				BEGIN
					INSERT INTO @VALIDACION 
					VALUES
					(0, 'Las únicas forma de pago permitidas para facturacion de ENCARGOS son al CREDITO');
				END

				-- Facturacion omitiendo minuta (union minutas) de cliente al que se esta facturando
				IF (EXISTS(SELECT 1 FROM ICGFRONTREST.DBO.MINUTASCAB WHERE CODCLIENTE =@CODCLIENTE AND MESA IN 
										(SELECT NumeroPedido FROM MINUTAESPERA WHERE IdSucursal = @FO AND CodCliente = @CODCLIENTE AND Facturado = '0')))
				BEGIN
					INSERT INTO @VALIDACION 
					VALUES
					(0, 'No se ha realizado la UNION MINUTA de todas las minutas asociadas al cliente');
				END
			END
			ELSE
			BEGIN
				DECLARE @GuidFacturacionAnulacion UNIQUEIDENTIFIER = (SELECT TOP 1 GuidFacturacion FROM  [GLPLUGINS].[dbo].[MINUTAESPERA]  WHERE IdSucursal = @FO AND CodCliente = @CODCLIENTE AND Facturado = '1' AND NumeroPedido = @MESA)

				UPDATE MINUTAESPERA SET Facturado = '0', Entregado = '0' WHERE IdSucursal = @FO AND CodCliente = @CODCLIENTE AND GuidFacturacion = @GuidFacturacionAnulacion;
			END
		END
		-- END VALIDACIONES ENTRE SUCURSAL Y DISTRIBUIDORES

		-- VALIDAR PAGO CON CERTIFICADO DE REGALO
		IF @IDMOTIVODTO = @CODMOTIVODTOCERTIFICADO 
		BEGIN
			DECLARE @MONTOCERTIFICADO DECIMAL(12,2);
			DECLARE @SALDOCERTIFICADO DECIMAL(12,2);

			SELECT @MONTOCERTIFICADO = MONTO,
			@SALDOCERTIFICADO = SALDO 
			FROM CERTIFICADOSREGALOMINUTAS 
			WHERE FO = @FO 
			AND SERIE = @SERIE 
			AND NUMERO = @NUMERO 
			AND N = @N;

			IF @SALDOCERTIFICADO < @MONTOCERTIFICADO
			BEGIN
				INSERT INTO @VALIDACION 
				VALUES
				(0, 'El saldo del CERTIFICADO DE REGALO es menor al MONTO A PAGAR');
			END
		END
		-- END VALIDAR PAGO CON CERTIFICADO DE REGALO

		-- VALIDAR PAGO CON CREDITO DE EMPLEADO -> CUPON
		IF EXISTS(SELECT * FROM ICGFRONTREST.DBO.TIQUETSPAG WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = @N AND CODFORMAPAGO = @CODFORMAPAGOCREDITOEMPLEADO)
		BEGIN
			IF EXISTS (SELECT * FROM EMPLEADOSMINUTAS WHERE IDMINUTA = @IDMINUTA AND FECHA = @FECHAINI)
			BEGIN
				DECLARE @IDEMPLEADO INT;
				DECLARE @TOKEN VARCHAR(50);
				DECLARE @SALDOCREDITO DECIMAL(12,2);
				DECLARE @SALDOCUPON DECIMAL(12,2);
				DECLARE @MONTOCREDITO DECIMAL(12,2);
				DECLARE @MONTOCUPON DECIMAL(12,2);

				SELECT @IDEMPLEADO = IDEMPLEADO,
				@TOKEN = ISNULL(TOKEN, ''), 
				@SALDOCREDITO = ISNULL(SALDOCREDITO, 0),
				@SALDOCUPON = ISNULL(SALDOCUPON, 0)
				FROM EMPLEADOSMINUTAS 
				WHERE IDMINUTA = @IDMINUTA 
				AND PROCESADO = 0 
				AND ANULADO = 0;

				SELECT @MONTOCREDITO = ISNULL(SUM(IMPORTE + PROPINA), 0) 
				FROM ICGFRONTREST.DBO.TIQUETSPAG 
				WHERE FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N 
				AND CODFORMAPAGO = @CODFORMAPAGOCREDITOEMPLEADO;

				IF @TOKEN = ''
				BEGIN
					INSERT INTO @VALIDACION 
					VALUES
					(0, 'La forma de pago CREDITO DE EMPLEADO no fue validada con CODIGO DE VERIFICACION');
				END

				IF (@SALDOCREDITO + @SALDOCUPON) < @MONTOCREDITO
				BEGIN
					INSERT INTO @VALIDACION 
					VALUES
					(0, 'El saldo de EMPLEADO es menor al MONTO A PAGAR');
				END

				

				--IF @SALDOCUPON > 0
				--BEGIN
				--	DECLARE @CUPONREQASIST BIT;

				--	SELECT @CUPONREQASIST = CAST(VALOR AS BIT) 
				--	FROM PARAMETROS 
				--	WHERE CLAVE = 'CPN_REQ_AST';

				--	IF @CUPONREQASIST = 1
				--	BEGIN
				--		DECLARE @MARCACION BIT;

				--		-- VERIFICAR SI EL EMPLEADO HA MARCADO ASISTENCIA
				--		EXEC @MARCACION = SP_VERIFICAREMPLEADOMARCACION @FECHA, @IDEMPLEADO;

				--		IF @MARCACION = '0'
				--		BEGIN
				--			INSERT INTO @VALIDACION 
				--			VALUES
				--			(0, 'Empleado no ha marcado asistencia para hacer uso de cupón');
				--		END
				--	END
				--END

			END
			ELSE
			BEGIN
				INSERT INTO @VALIDACION 
				VALUES
				(0, 'La forma de pago CREDITO DE EMPLEADO debe asociarse a un GAFETE o DUI');
			END
		END
		-- END VALIDAR PAGO CON CREDITO DE EMPLEADO -> CUPON

		-- VALIDAR PAGO CON CLIENTE ESTRELLA
		IF EXISTS(SELECT * FROM ICGFRONTREST.DBO.TIQUETSPAG WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = @N AND CODFORMAPAGO = @CODFORMAPAGOLEALTAD)
		BEGIN
			IF EXISTS (SELECT * FROM MEMBRESIASMINUTAS WHERE IDMINUTA = @IDMINUTA AND FECHA = @FECHAINI)
			BEGIN
				DECLARE @TOKENCANJE VARCHAR(50);
				DECLARE @SALDODINERO DECIMAL(12,2);
				DECLARE @MONTODINERO DECIMAL(12,2);

				SELECT @TOKENCANJE = ISNULL(TOKENCANJE, ''),
				@SALDODINERO = ISNULL(SALDODINERO, 0) 
				FROM MEMBRESIASMINUTAS 
				WHERE IDMINUTA = @IDMINUTA 
				AND PROCESADO = 0
				AND ANULADO = 0;

				SELECT @MONTODINERO = ISNULL(SUM(IMPORTE + PROPINA), 0) 
				FROM ICGFRONTREST.DBO.TIQUETSPAG 
				WHERE FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N 
				AND CODFORMAPAGO = @CODFORMAPAGOLEALTAD;

				IF @TOKENCANJE = ''
				BEGIN
					INSERT INTO @VALIDACION 
					VALUES
					(0, 'La forma de pago CLIENTE ESTRELLA no fue validada con CODIGO DE VERIFICACION');
				END

				IF @SALDODINERO < @MONTODINERO 
				BEGIN
					INSERT INTO @VALIDACION 
					VALUES
					(0, 'El saldo de CLIENTE ESTRELLA es menor al MONTO A PAGAR');
				END

				DECLARE @CODCERTIFICADOREGALO INT;
				DECLARE @CODRECARGACERTIFICADOREGALO INT;

				SET @CODCERTIFICADOREGALO = (SELECT VALOR FROM PARAMETROS WHERE CLAVE = 'ART_CERT_REG');
				SET @CODRECARGACERTIFICADOREGALO = (SELECT VALOR FROM PARAMETROS WHERE CLAVE = 'ART_REC_CERT_REG');

				IF EXISTS (SELECT * FROM ICGFRONTREST.DBO.TIQUETSLIN WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = @N AND CODARTICULO IN (@CODCERTIFICADOREGALO, @CODRECARGACERTIFICADOREGALO))
				BEGIN
					INSERT INTO @VALIDACION 
					VALUES
					(0, 'La forma de pago CLIENTE ESTRELLA no puede usarse para pagar CERTIFICADOS DE REGALO, por favor realizar cuentas separadas');
				END
			END
			ELSE
			BEGIN
				INSERT INTO @VALIDACION 
				VALUES
				(0, 'La forma de pago CLIENTE ESTRELLA debe asociarse a una MEMBRESIA o DUI');
			END
		END
		-- END VALIDAR PAGO CON CLIENTE ESTRELLA

		IF NOT EXISTS(SELECT * FROM @VALIDACION)
		BEGIN
			INSERT INTO @VALIDACION 
			VALUES 
			(1, 'Factura de venta válida');
		END

		SELECT * FROM @VALIDACION;
	END
	GO
-- END SP_VALIDARFACTVENTA

-- SP_PROCESARFACTVENTA
	DROP PROCEDURE IF EXISTS [dbo].[SP_PROCESARFACTVENTA]
	GO

	SET ANSI_NULLS ON
	GO
	SET QUOTED_IDENTIFIER ON
	GO
	-- =============================================
	-- Author:		EChevez
	-- Create date: 2025-11-19
	-- Update date: 2025-11-19
	-- Description:	Validar factura de venta.
	-- =============================================
	CREATE PROCEDURE [dbo].[SP_PROCESARFACTVENTA]
		@FO SMALLINT, 
		@SERIE VARCHAR(4), 
		@NUMERO INT,
		@N CHAR(1)
	AS
	BEGIN
		SET NOCOUNT ON;
		SET DATEFORMAT YMD;

		BEGIN TRY
			BEGIN TRAN

				DECLARE @SALA SMALLINT;
				DECLARE @MESA INT;

				SELECT @SALA = ISNULL(SALA, 0),
				@MESA = ISNULL(MESA, 0) 
				FROM [ICGFRONTREST].[DBO].[TIQUETSCAB] 
				WHERE FO = @FO 
				AND SERIE = @SERIE 
				AND NUMERO = @NUMERO 
				AND N = @N;


				DELETE FROM [ICGFRONTREST].[DBO].[TIQUETSMODIF] 
				WHERE FO = @FO
				AND SERIE = @SERIE
				AND NUMERO = @NUMERO 
				AND N = @N 
				AND CODARTICULO = 0;

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


			COMMIT TRAN
		END TRY
		BEGIN CATCH
			ROLLBACK TRAN

			DECLARE @ERRORMESSAGE NVARCHAR(4000);  
			DECLARE @ERRORSEVERITY INT;  
			DECLARE @ERRORSTATE INT;  
  
			SELECT @ERRORMESSAGE = ERROR_MESSAGE(),  
				@ERRORSEVERITY = ERROR_SEVERITY(),  
				@ERRORSTATE = ERROR_STATE();  
  
			-- Use RAISERROR inside the CATCH block to return error  
			-- information about the original error that caused  
			-- execution to jump to the CATCH block.  
			RAISERROR (@ERRORMESSAGE, -- Message text.  
						@ERRORSEVERITY, -- Severity.  
						@ERRORSTATE); -- State.  
		END CATCH
	END
-- END SP_PROCESARFACTVENTA