USE GLPLUGINS
GO
SET DATEFORMAT YMD;

-- VER. 1.0.0.26
-- USAR FECHAINI COMO VALIDACION EN MINUTAS

-- 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 = 0 OR IDMINUTA = @IDMINUTA) AND FECHA = @FECHA AND PROCESADO = 0 AND ANULADO = 0;
				-- BORRAR DE MEMBRESIA Y EMPLEADO
				DELETE FROM MEMBRESIASMINUTAS WHERE (IDMINUTA = 0 OR IDMINUTA = @IDMINUTA) AND FECHA = @FECHA AND PROCESADO = 0 AND ANULADO = 0;
				DELETE FROM EMPLEADOSMINUTAS WHERE (IDMINUTA = 0 OR IDMINUTA = @IDMINUTA) AND FECHA = @FECHA AND PROCESADO = 0 AND ANULADO = 0;

				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 a la MEMBRESIA.', 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 = 0 OR IDMINUTA = @IDMINUTA) AND FECHA = @FECHA AND PROCESADO = 0 AND ANULADO = 0;
			-- BORRAR DE CERTIFICADO DE REGALO Y EMPLEADO
			DELETE FROM CERTIFICADOSREGALOMINUTAS WHERE (IDMINUTA = 0 OR IDMINUTA = @IDMINUTA) AND FECHA = @FECHA AND PROCESADO = 0 AND ANULADO = 0;
			DELETE FROM EMPLEADOSMINUTAS WHERE (IDMINUTA = 0 OR IDMINUTA = @IDMINUTA) AND FECHA = @FECHA AND PROCESADO = 0 AND ANULADO = 0;

			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 = 0 OR IDMINUTA = @IDMINUTA) AND FECHA = @FECHA AND PROCESADO = 0 AND ANULADO = 0;
					-- BORRAR DE CERTIFICADO DE REGALO Y MEMBRESIA
					DELETE FROM CERTIFICADOSREGALOMINUTAS WHERE (IDMINUTA = 0 OR IDMINUTA = @IDMINUTA) AND FECHA = @FECHA AND PROCESADO = 0 AND ANULADO = 0;
					DELETE FROM MEMBRESIASMINUTAS WHERE (IDMINUTA = 0 OR IDMINUTA = @IDMINUTA) AND FECHA = @FECHA AND PROCESADO = 0 AND ANULADO = 0;

				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_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] 
		@FO INT,
		@SERIE VARCHAR(4), 
		@NUMERO INT,
		@N VARCHAR(1), 
		@IDCERTIFICADOREGALO INT, 
		@IDTIPOTRANSACCION INT 
	AS
	BEGIN
		SET NOCOUNT ON;

		BEGIN TRY
			SET NOCOUNT ON;
			SET DATEFORMAT YMD;

			DECLARE @IDMINUTA BIGINT;

			DECLARE @FECHAINI DATETIME;

			SET @FECHAINI = (SELECT FECHA FROM CERTIFICADOSREGALOMINUTAS WHERE IDMINUTA = @IDMINUTA AND IDCERTIFICADOREGALO = @IDCERTIFICADOREGALO AND IDTIPOTRANSACCION = @IDTIPOTRANSACCION);

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

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

			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] 
		@FO INT,
		@SERIE VARCHAR(4), 
		@NUMERO INT,
		@N VARCHAR(1), 
		@IDCLIENTE INT,
		@MEMBRESIA VARCHAR(20)
	AS
	BEGIN
		SET NOCOUNT ON;

		BEGIN TRY
			SET NOCOUNT ON;
			SET DATEFORMAT YMD;

			DECLARE @IDMINUTA BIGINT;

			DECLARE @IDSUCURSAL INT;
			DECLARE @IDSUCURSALCENTURIA INT;
			DECLARE @CODVENDEDOR INT;
			DECLARE @VENDEDOR VARCHAR(255);
			DECLARE @CAJAFRONT INT;
			DECLARE @CAJAMANAGER INT;
			--DECLARE @NUEVOIDMINUTA BIGINT;
			DECLARE @FECHAINI DATETIME;

			--SET @FECHAINI = (SELECT FECHA FROM MEMBRESIASMINUTAS WHERE IDMINUTA = @IDMINUTA AND IDCLIENTE = @IDCLIENTE);

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

			-- 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 FECHA = @FECHAINI 
			AND IDCLIENTE = @IDCLIENTE
			AND PROCESADO = 0;

			UPDATE ICGFRONTREST.DBO.TIQUETSVENTACAMPOSLIBRES 
			SET IDTARJETA = @IDCLIENTE, 
			TIPOTARJETA = 2,
			ALIASTARJETA = @MEMBRESIA 
			WHERE FO = @FO 
			AND SERIE = @SERIE 
			AND NUMERO = @NUMERO
			AND N = @N;

 

			--DECLARE @SIGZ INT = 1;
			--DECLARE @TERMINAL VARCHAR(25);

			--SELECT @SIGZ =  ISNULL(MAX(NUMERO), 0) + 1  FROM [ICGFRONTREST].DBO.ARQUEOS WHERE ARQUEO = N'Z' AND CAJA = @CAJAFRONT;
			--SELECT @TERMINAL = ISNULL(TERMINAL, '') FROM [ICGFRONTREST].DBO.TIQUETSTERMINAL WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO;

			--IF NOT EXISTS (SELECT * FROM [ICGFRONTREST].DBO.REM_TRANSACCIONES WHERE TERMINAL = @TERMINAL AND CAJANUM = @CAJAFRONT AND Z = @SIGZ AND TIPO = 0 AND ACCION = 1 AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = 'B')
			--BEGIN
			--	INSERT INTO [ICGFRONTREST].DBO.REM_TRANSACCIONES
			--	(
			--		TERMINAL,
			--		CAJA,
			--		CAJANUM,
			--		Z,
			--		TIPO,
			--		ACCION,
			--		SERIE,
			--		NUMERO,
			--		N,
			--		FECHA,
			--		HORA,           
			--		FO,
			--		IDCENTRAL,
			--		TALLA,
			--		COLOR,
			--		CODIGOSTR
			--	)
			--	VALUES 
			--	(
			--		@TERMINAL,
			--		'',--CAJA
			--		@CAJAFRONT,--CAJANUM
			--		@SIGZ, --Z
			--		0,--TIPO
			--		1,--ACCION
			--		@SERIE,--SERIE
			--		@NUMERO,--NUMERO       
			--		N'B', --N
			--		N'1899-12-30 00:00:00',--FECHA
			--		N'1899-12-30 00:00:00',--HORA
			--		0,--FO
			--		1,--IDCENTRAL
			--		'.',--TALLA
			--		'.',--COLOR
			--		''
			--	); --CODIGOSTR
			--END

			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] 
		@FO INT,
		@SERIE VARCHAR(4), 
		@NUMERO INT,
		@N VARCHAR(1), 
		@IDEMPLEADO INT, 
		@PIN VARCHAR(10)
	AS
	BEGIN
		SET NOCOUNT ON;

		BEGIN TRY
			SET NOCOUNT ON;
			SET DATEFORMAT YMD;


			DECLARE @IDMINUTA BIGINT;
			DECLARE @FECHA DATETIME;

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

			DECLARE @NUEVOIDMINUTA BIGINT;
			DECLARE @FECHAINI DATETIME;

			--SET @FECHAINI = (SELECT FECHA FROM EMPLEADOSMINUTAS WHERE IDMINUTA = @IDMINUTA AND IDEMPLEADO = @IDEMPLEADO);

			SELECT @FECHA = FECHA, 
			@CAJAFRONT = CAJA, 
			@IDMOTIVODTO = IDMOTIVODTO, 
			@FECHAINI = FECHAINI, 
			@IDMINUTA = IDMINUTA 
			FROM ICGFRONTREST.DBO.TIQUETSCAB 
			WHERE FO = @FO 
			AND SERIE = @SERIE 
			AND NUMERO = @NUMERO 
			AND N = @N;

			-- 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 FECHA = @FECHAINI 
			AND IDEMPLEADO = @IDEMPLEADO
			AND PROCESADO = 0;

			UPDATE ICGFRONTREST.DBO.TIQUETSVENTACAMPOSLIBRES 
			SET IDTARJETA = @IDEMPLEADO , 
			TIPOTARJETA = 1 ,
			ALIASTARJETA = @PIN  
			WHERE FO = @FO 
			AND SERIE = @SERIE 
			AND NUMERO = @NUMERO
			AND N = @N;

			--DECLARE @SIGZ INT = 1;
			--DECLARE @TERMINAL VARCHAR(25);

			--SELECT @SIGZ =  ISNULL(MAX(NUMERO), 0) + 1  FROM [ICGFRONTREST].DBO.ARQUEOS WHERE ARQUEO = N'Z' AND CAJA = @CAJAFRONT;
			--SELECT @TERMINAL = ISNULL(TERMINAL, '') FROM [ICGFRONTREST].DBO.TIQUETSTERMINAL WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO;

			--IF NOT EXISTS (SELECT * FROM [ICGFRONTREST].DBO.REM_TRANSACCIONES WHERE TERMINAL = @TERMINAL AND CAJANUM = @CAJAFRONT AND Z = @SIGZ AND TIPO = 0 AND ACCION = 1 AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = 'B')
			--BEGIN
			--	INSERT INTO [ICGFRONTREST].DBO.REM_TRANSACCIONES
			--	(
			--		TERMINAL,
			--		CAJA,
			--		CAJANUM,
			--		Z,
			--		TIPO,
			--		ACCION,
			--		SERIE,
			--		NUMERO,
			--		N,
			--		FECHA,
			--		HORA,           
			--		FO,
			--		IDCENTRAL,
			--		TALLA,
			--		COLOR,
			--		CODIGOSTR
			--	)
			--	VALUES 
			--	(
			--		@TERMINAL,
			--		'',--CAJA
			--		@CAJAFRONT,--CAJANUM
			--		@SIGZ, --Z
			--		0,--TIPO
			--		1,--ACCION
			--		@SERIE,--SERIE
			--		@NUMERO,--NUMERO       
			--		N'B', --N
			--		N'1899-12-30 00:00:00',--FECHA
			--		N'1899-12-30 00:00:00',--HORA
			--		0,--FO
			--		1,--IDCENTRAL
			--		'.',--TALLA
			--		'.',--COLOR
			--		''
			--	); --CODIGOSTR
			--END

			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_VALIDARFACTVENTA 34, 'F001', 33926, 'B'
	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 OR FECHA = @FECHAINI) AND PROCESADO = 0)
			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 OR FECHA = @FECHAINI) AND PROCESADO = 0)
			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;
				DECLARE @CAJAFRONT INT;



				SELECT @SALA = ISNULL(SALA, 0),
				@MESA = ISNULL(MESA, 0),
				@CAJAFRONT = CAJA 
				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;

				DECLARE @SIGZ INT = 1;
				DECLARE @TERMINAL VARCHAR(25);

				SELECT @SIGZ =  ISNULL(MAX(NUMERO), 0) + 1  FROM [ICGFRONTREST].DBO.ARQUEOS WHERE ARQUEO = N'Z' AND CAJA = @CAJAFRONT;
				SELECT @TERMINAL = ISNULL(TERMINAL, '') FROM [ICGFRONTREST].DBO.TIQUETSTERMINAL WHERE FO = @FO AND SERIE = @SERIE AND NUMERO = @NUMERO;

				--IF NOT EXISTS (SELECT * FROM [ICGFRONTREST].DBO.REM_TRANSACCIONES WHERE TERMINAL = @TERMINAL AND CAJANUM = @CAJAFRONT AND Z = @SIGZ AND TIPO = 0 AND ACCION = 1 AND SERIE = @SERIE AND NUMERO = @NUMERO AND N = 'B')
				IF 1 = 1
				BEGIN
					INSERT INTO [ICGFRONTREST].DBO.REM_TRANSACCIONES
					(
						TERMINAL,
						CAJA,
						CAJANUM,
						Z,
						TIPO,
						ACCION,
						SERIE,
						NUMERO,
						N,
						FECHA,
						HORA,           
						FO,
						IDCENTRAL,
						TALLA,
						COLOR,
						CODIGOSTR
					)
					VALUES 
					(
						@TERMINAL,
						'',--CAJA
						@CAJAFRONT,--CAJANUM
						@SIGZ, --Z
						0,--TIPO
						1,--ACCION
						@SERIE,--SERIE
						@NUMERO,--NUMERO       
						N'B', --N
						N'1899-12-30 00:00:00',--FECHA
						N'1899-12-30 00:00:00',--HORA
						0,--FO
						1,--IDCENTRAL
						'.',--TALLA
						'.',--COLOR
						''
					); --CODIGOSTR
				END


			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