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
*/

/*Variables recibidas por parametro a traves del JSON*/
DECLARE @pModoDebug			    	TINYINT
DECLARE @pId_Usuario			    SMALLINT
DECLARE @pId_Contrato_Origen	    INT
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)

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(INT, dbo.CF_JSON_VALUE(@pJson,'Id_Contrato_Origen')), 0)
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')), '')

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


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

IF(@pModoDebug = 1)
BEGIN
	PRINT 'Ingreso a: CPJ_Contratos_PasajeGrupos'
	PRINT '@pId_Contrato_Origen: ' + CONVERT(VARCHAR(10), @pId_Contrato_Origen) + '. @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

--Backup de Contrato Original
SELECT * INTO #Contratos_Orig FROM Contratos WHERE Id_Contrato = @pId_Contrato_Origen
SELECT * INTO #Contratos_Prod_Orig FROM Contratos_Prod WHERE Id_Contrato = @pId_Contrato_Origen

--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,
Observacion			= LTRIM(RTRIM(CONVERT(VARCHAR(8000), Observacion))) + '. Contrato Creado a partir de Id_Contrato: ' + CONVERT(VARCHAR(10), @pId_Contrato_Origen) + ' 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 = @pId_Contrato_Origen

--Busca un numero nuevo de contrato
SET @Id_Contrato_Nuevo = ISNULL((SELECT MAX(Id_Contrato) + 1 FROM Contratos), 1)

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

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


/*
EXEC dbo.CPJ_Contratos_PasajeGrupos '{
							"ModoDebug":"1",
							"Id_Usuario":"-1",
							"Id_Contrato_Origen":"39136",
							"Id_Tipo_Con_Nuevo":"12",
							"Id_Grupo_Cont_Nuevo":"RM10",
							"Id_SubGrupo_Cont_Nuevo":"RM10",
							"Id_Producto_Nuevo":"R ARAN INFANTI"
							}'
*/
