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

CREATE PROCEDURE dbo.CPJ_Contratos_PasajeGrupos	@pJson VARCHAR(8000)
AS
SET NOCOUNT ON

/*
VERSIONES:

06/07/2022: Creacion
07/07/2022: @Id_Contrato_Origen pasa a permitir muchos contratos separados por comas
08/07/2022: Se agregan parametros de entrada: @Fecha_Desde_Nuevo y @Fecha_Hasta_Nuevo
*/

/*Variables recibidas por parametro a traves del JSON*/
DECLARE @pModoDebug			    	TINYINT
DECLARE @pId_Usuario			    SMALLINT
DECLARE @pId_Contrato_Origen	    VARCHAR(8000)
DECLARE @pId_Tipo_Con_Nuevo			SMALLINT
DECLARE @pId_Grupo_Cont_Nuevo		VARCHAR(10)
DECLARE @pId_SubGrupo_Cont_Nuevo	VARCHAR(10)
DECLARE @pId_Producto_Nuevo			VARCHAR(14)
DECLARE @pFecha_Desde_Nuevo			DATETIME
DECLARE @pFecha_Hasta_Nuevo			DATETIME

SET @pModoDebug					= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'ModoDebug')), 0)
SET @pId_Usuario				= ISNULL(CONVERT(SMALLINT, dbo.CF_JSON_VALUE(@pJson,'Id_Usuario')), -1)
SET @pId_Contrato_Origen		= ISNULL(CONVERT(VARCHAR(8000), dbo.CF_JSON_VALUE(@pJson,'Id_Contrato_Origen')), '')
SET @pId_Tipo_Con_Nuevo			= ISNULL(CONVERT(SMALLINT, dbo.CF_JSON_VALUE(@pJson,'Id_Tipo_Con_Nuevo')), 0)
SET @pId_Grupo_Cont_Nuevo		= ISNULL(CONVERT(VARCHAR(10), dbo.CF_JSON_VALUE(@pJson,'Id_Grupo_Cont_Nuevo')), '')
SET @pId_SubGrupo_Cont_Nuevo	= ISNULL(CONVERT(VARCHAR(10), dbo.CF_JSON_VALUE(@pJson,'Id_SubGrupo_Cont_Nuevo')), '')
SET @pId_Producto_Nuevo			= ISNULL(CONVERT(VARCHAR(14), dbo.CF_JSON_VALUE(@pJson,'Id_Producto_Nuevo')), '')
SET @pFecha_Desde_Nuevo			= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha_Desde_Nuevo')), '19000101')
SET @pFecha_Hasta_Nuevo			= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha_Hasta_Nuevo')), '19000101')

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


/*Variables Locales*/
DECLARE @Usuario			VARCHAR(8000)
DECLARE @Id_Contrato_Nuevo	INT
DECLARE @Cant_Contratos		INT
DECLARE @cadaId_Contrato	INT
/*FIN Variables Locales*/

IF(@pModoDebug = 1)
BEGIN
	PRINT 'Ingreso a: CPJ_Contratos_PasajeGrupos'
	PRINT '@pId_Contrato_Origen: ' +  @pId_Contrato_Origen
	PRINT '@pId_Tipo_Con_Nuevo: ' + CONVERT(VARCHAR(10), @pId_Tipo_Con_Nuevo) + '. @pId_Grupo_Cont_Nuevo: ' + @pId_Grupo_Cont_Nuevo + '. @pId_SubGrupo_Cont_Nuevo: ' + @pId_SubGrupo_Cont_Nuevo +'. @pId_Producto_Nuevo: ' + @pId_Producto_Nuevo
END

SET @Usuario = (SELECT UPPER(LTRIM(RTRIM(ISNULL(FirstName, '')))) + ' ' + UPPER(LTRIM(RTRIM(ISNULL(LastName, '')))) FROM Seg_User WHERE No = @pId_Usuario)

IF(@pModoDebug = 1)
BEGIN
	PRINT '@Usuario: ' + @Usuario	
END

--Divido los contratos que me llegan
IF OBJECT_ID('tempdb..#Contratos_Cambiar') IS NOT NULL DROP TABLE #Contratos_Cambiar

SELECT * 
INTO #Contratos_Cambiar
FROM dbo.CF_Split(@pId_Contrato_Origen, ',') 

SET @Cant_Contratos = (SELECT COUNT(*) FROM #Contratos_Cambiar)

IF(@pModoDebug = 1)
BEGIN
	PRINT '@Cant_Contratos: ' + CONVERT(VARCHAR(10), @Cant_Contratos)	
END

DECLARE curCPJ_Contratos_PasajeGrupos CURSOR FOR
SELECT CONVERT(INT, columnA) AS Id_Contrato
FROM #Contratos_Cambiar

OPEN curCPJ_Contratos_PasajeGrupos
FETCH NEXT FROM curCPJ_Contratos_PasajeGrupos INTO @cadaId_Contrato
WHILE @@FETCH_STATUS = 0
BEGIN

	--Backup de Contrato Original
	IF OBJECT_ID('tempdb..#Contratos_Orig') IS NOT NULL DROP TABLE #Contratos_Orig

	SELECT * INTO #Contratos_Orig FROM Contratos WHERE Id_Contrato = @cadaId_Contrato
	
	IF OBJECT_ID('tempdb..#Contratos_Prod_Orig') IS NOT NULL DROP TABLE #Contratos_Prod_Orig

	SELECT * INTO #Contratos_Prod_Orig FROM Contratos_Prod WHERE Id_Contrato = @cadaId_Contrato

	--Actualiza los campos del backup con las variables nuevas
	UPDATE #Contratos_Orig
	SET
	Id_Tipo_Con			= @pId_Tipo_Con_Nuevo,
	Id_Grupo_Cont		= @pId_Grupo_Cont_Nuevo,
	Id_SubGrupo_Cont	= @pId_SubGrupo_Cont_Nuevo,
	Fecha_Desde			= @pFecha_Desde_Nuevo,
	Fecha_Hasta			= @pFecha_Hasta_Nuevo,
	Observacion			= LTRIM(RTRIM(CONVERT(VARCHAR(8000), Observacion))) + '. Contrato Creado a partir de Id_Contrato: ' + CONVERT(VARCHAR(10), @cadaId_Contrato) + ' por proceso de Pasaje de Grupos ejecutado el: ' + CONVERT(VARCHAR(10), GETDATE(), 3) + ' ' + CONVERT(VARCHAR(10), GETDATE(), 8) + ' por: ' + @Usuario + '.'

	UPDATE #Contratos_Prod_Orig
	SET
	Id_Producto = @pId_Producto_Nuevo

	--Da de baja el contrato Actual
	UPDATE Contratos
	SET
	Activo = 0,
	Fecha_Baja = GETDATE(),
	Observacion = LTRIM(RTRIM(CONVERT(VARCHAR(8000), Observacion))) + '. Dado de Baja por proceso de Cambio de Grupos. Fecha: ' + CONVERT(VARCHAR(10), GETDATE(), 3) + ' ' + CONVERT(VARCHAR(10), GETDATE(), 8)  + ' por: ' + @Usuario + '.'
	WHERE
	Id_Contrato = @cadaId_Contrato

	--Busca un numero nuevo de contrato
	SET @Id_Contrato_Nuevo = ISNULL((SELECT MAX(Id_Contrato) + 1 FROM Contratos), 1)
	
	IF(@pModoDebug = 1)
	BEGIN
		PRINT '@Id_Contrato_Nuevo: ' + CONVERT(VARCHAR(10), @Id_Contrato_Nuevo)	
	END

	--Actualiza el backup con el id_Contrato Nuevo e inserta en Contratos y Contratos_Prod el nuevo registro
	UPDATE #Contratos_Orig
	SET
	Id_Contrato = @Id_Contrato_Nuevo

	INSERT INTO Contratos
	SELECT * FROM #Contratos_Orig

	UPDATE #Contratos_Prod_Orig
	SET
	Id_Contrato = @Id_Contrato_Nuevo

	INSERT INTO Contratos_Prod
	SELECT * FROM #Contratos_Prod_Orig	

	FETCH NEXT FROM curCPJ_Contratos_PasajeGrupos INTO @cadaId_Contrato
	END
CLOSE curCPJ_Contratos_PasajeGrupos
DEALLOCATE curCPJ_Contratos_PasajeGrupos


IF(@pModoDebug = 1)
BEGIN
	PRINT 'FIN: CPJ_Contratos_PasajeGrupos'
END


/*
EXEC dbo.CPJ_Contratos_PasajeGrupos '{
							"ModoDebug":"1",
							"Id_Usuario":"-1",
							"Id_Contrato_Origen":"39137,39138",
							"Id_Tipo_Con_Nuevo":"12",
							"Id_Grupo_Cont_Nuevo":"RM10",
							"Id_SubGrupo_Cont_Nuevo":"RM10",
							"Id_Producto_Nuevo":"R ARAN INFANTI",
							"Fecha_Desde_Nuevo":"20220708",
							"Fecha_Hasta_Nuevo":"20221231"
							}'
*/
