USE GLPLUGINS
GO
SET DATEFORMAT YMD;

-- VER. 1.0.0.29
-- CORREGIR TIQUETSPAG CON CREDITO Y CUPON DE EMPLEADO

-- 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 = @MONTOCREDITO, 
				IMPORTE2 = @MONTOCREDITO,
				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;


			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