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

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


/*Variables recibidas por parámetro a traves del JSON*/
DECLARE @pFlagUsarTrans			TINYINT
DECLARE @pModoDebug				TINYINT
DECLARE @pId_Contrato			INT
DECLARE @pId_Usuario			SMALLINT
DECLARE @pFecha					DATETIME
DECLARE @pLote					VARCHAR(20)
DECLARE @pFecha_QA				DATETIME
DECLARE @pFecha_Venc			DATETIME
DECLARE @pFecha_Rem_Desde		DATETIME
DECLARE @pFecha_Rem_Hasta		DATETIME

SET @pFlagUsarTrans				= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'FlagUsarTrans')), 0)
SET @pModoDebug					= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'ModoDebug')), 0)
SET @pId_Contrato				= ISNULL(CONVERT(INT, dbo.CF_JSON_VALUE(@pJson,'Id_Contrato')), 0)
SET @pId_Usuario				= ISNULL(CONVERT(SMALLINT, dbo.CF_JSON_VALUE(@pJson,'Id_Usuario')), 0)
SET @pFecha						= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha')),GETDATE())
SET @pLote						= ISNULL(CONVERT(VARCHAR(20), dbo.CF_JSON_VALUE(@pJson,'Lote')), '')
SET @pFecha_QA					= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha_QA')),GETDATE())
SET @pFecha_Venc				= CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha_Venc'))
SET @pFecha_Rem_Desde			= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha_Rem_Desde')),GETDATE())
SET @pFecha_Rem_Hasta			= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha_Rem_Hasta')),GETDATE())
/*FIN Variables recibidas por parámetro a traves del JSON*/


/*Variable de Retorno del Stored*/
DECLARE @rtaErrorStored						INT
DECLARE @rtaMsjStored						VARCHAR(4000)
DECLARE @Result_Stored_Invocado				INT
DECLARE @Result_Tabla_Stored_Invocado TABLE (ErrorNumber	INT,
											ErrorSeverity	INT,
											ErrorState		INT,
											ErrorProcedure  VARCHAR(1000),
											ErrorLine		INT,
											ErrorMessage	VARCHAR(4000))
DECLARE @JSON_Parametros_Stored_Invocado	VARCHAR(8000)
DECLARE @rta_JSON_Stored_Invocado			VARCHAR(8000)
/*FIN Variable de Retorono del Stored*/


/*Declaracion de Variables*/
DECLARE @Id_Trans					INT
DECLARE @Id_Cliente					INT
DECLARE @Id_Tipo_Cbte				CHAR(4)
DECLARE @Id_Cond_Pago				SMALLINT
DECLARE @Id_Moneda					CHAR(3)
DECLARE @Cotizacion					DECIMAL(12, 4)
DECLARE @Plazo_Venc					SMALLINT
DECLARE @FechaVence					DATETIME
DECLARE @Id_Tipo_Con				SMALLINT
DECLARE @Id_Producto				VARCHAR(14)
DECLARE @Cantidad					DECIMAL(15,5)
DECLARE @Bonif						DECIMAL(5,2)
DECLARE @Porc_Iva					DECIMAL(5,2)
DECLARE @Precio_Grav				DECIMAL(15,5)
DECLARE @Precio_Exen				DECIMAL(15,5)
DECLARE @Flag_Agru_Cli_Ref			TINYINT
DECLARE @Id_Cliente_Integ			INT
DECLARE @Observacion_Incluye_Integ	VARCHAR(8000)
DECLARE	@Compromete_Factura			SMALLINT
DECLARE	@Compromete_Remitos			SMALLINT
DECLARE @Flag_Remitos				TINYINT
DECLARE @Id_Tipo_Cbte_Remito		CHAR(4)
DECLARE @Fecha_QA					DATETIME
DECLARE @Fecha_Venc					DATETIME
DECLARE @Id_Trans_Remito			INT
/*FIN Declaracion de Variables*/


BEGIN TRY
	
	IF @pFlagUsarTrans <> 0 
	BEGIN
		BEGIN TRAN
	END

	IF(@pModoDebug = 1)
	BEGIN
		PRINT 'Ingreso a Stored Procedure: CPJ_Contrato_Facturar'
		PRINT 'Parámetros:'
		PRINT 'ModoDebug: ' + CONVERT(VARCHAR(10), @pModoDebug) + '. Id_Contrato: ' + CONVERT(VARCHAR(10), @pId_Contrato)
	END

	/*===================================================================*/	

	/*2) CPJ_Cbtes_Fac_Generar*/
	IF(@pModoDebug = 1)
	BEGIN
		PRINT '2) CPJ_Cbtes_Fac_Generar'
	END
	
	SELECT 
			@Id_Cliente		= ISNULL(Id_Cliente, 0),
			@Id_Tipo_Cbte	= ISNULL(Id_Tipo_Cbte, ''),
			@Id_Cond_Pago	= ISNULL(Id_Cond_Pago, 0),
			@Id_Tipo_Con	= ISNULL(Id_Tipo_Con, 0)
			FROM Contratos 
			WHERE 
			Id_Contrato		= @pId_Contrato

	IF(@Id_Cond_Pago = 0)
	BEGIN
		SET @Id_Cond_Pago = (SELECT ISNULL(Id_Cond_Pago, 0) FROM Clientes WHERE Id_Cliente = @Id_Cliente)
	END
	
	SELECT
			@Id_Moneda			= ISNULL(Id_Moneda, ''),
			@Compromete_Factura	= ISNULL(Compromete_Factura, 0),
			@Compromete_Remitos	= ISNULL(Compromete_Remitos, 0)
			FROM Cbtes_Tipos
			WHERE
			Id_Tipo_Cbte = @Id_Tipo_Cbte
	
	IF(@Id_Moneda = '')
	BEGIN
		SET @Id_Moneda = (dbo.CF_xParam('Moneda_Nacional'))
	END

	SELECT
			@Cotizacion		= ISNULL(Cotizacion, 1) 
			FROM Valores_Monedas 
			WHERE 
			Id_Moneda = @Id_Moneda

	SELECT 
			@Plazo_Venc		= ISNULL(Plazo_Venc, 0)
			FROM Cbtes_Cond_Pago
			WHERE
			Id_Cond_Pago = @Id_Cond_Pago

	SET @FechaVence = DATEADD(dd, @Plazo_Venc, @pFecha)

	SET @JSON_Parametros_Stored_Invocado =	'{' +
											dbo.CF_Json_ParsearVariable('FlagUsarTrans', 0, 'TINYINT') + ',' +
											dbo.CF_Json_ParsearVariable('ModoDebug', @pModoDebug, 'TINYINT') + ',' +
											dbo.CF_Json_ParsearVariable('Id_Usuario', @pId_Usuario, 'SMALLINT') + ',' +
											dbo.CF_Json_ParsearVariable('Lote', @pLote, 'VARCHAR(20)') + ',' +
											dbo.CF_Json_ParsearVariable('Fecha', @pFecha, 'DATETIME') + ',' +
											dbo.CF_Json_ParsearVariable('FechaVence', @FechaVence, 'DATETIME') + ',' +
											dbo.CF_Json_ParsearVariable('Id_Cliente', @Id_Cliente, 'INT') + ',' +
											dbo.CF_Json_ParsearVariable('Id_Tipo_Cbte', @Id_Tipo_Cbte, 'CHAR(4)') + ',' +
											dbo.CF_Json_ParsearVariable('Id_Cond_Pago', @Id_Cond_Pago, 'SMALLINT') + ',' +
											dbo.CF_Json_ParsearVariable('Id_Moneda', @Id_Moneda, 'CHAR(3)') + ',' +
											dbo.CF_Json_ParsearVariable('Cotizacion', @Cotizacion, 'DECIMAL(12,4)') + ',' +
											dbo.CF_Json_ParsearVariable('Id_Contrato', @pId_Contrato, 'INT') +
											'}'

	DELETE @Result_Tabla_Stored_Invocado

	IF(@Compromete_Factura = 1)
		INSERT INTO @Result_Tabla_Stored_Invocado	EXEC @Result_Stored_Invocado = dbo.CPJ_Cbtes_Fac_Generar @JSON_Parametros_Stored_Invocado

	IF(@Compromete_Remitos = 1)
		INSERT INTO @Result_Tabla_Stored_Invocado EXEC @Result_Stored_Invocado = dbo.CPJ_Cbtes_Rem_Generar @JSON_Parametros_Stored_Invocado

	IF ISNULL(@Result_Stored_Invocado, 0) <> 0  RAISERROR ('Error when calling CPJ_Cbtes_Rem_Generar', 16,  1 ) 

	SELECT TOP 1 @rta_JSON_Stored_Invocado = ErrorMessage FROM @Result_Tabla_Stored_Invocado
	SET @Id_Trans = ISNULL(CONVERT(INT, dbo.CF_JSON_VALUE(@rta_JSON_Stored_Invocado,'Id_Trans')), 0)

	IF @Id_Trans = 0  RAISERROR ('Id_trans can not be zero.', 16,  1 )    /*El CPJ_Cbtes_Fac_Generarv debería devolver el SELECT con el error*/
	
	/*===================================================================*/

	/*3) CPJ_Cbtes_Fac_Generar_Item*/
	IF(@pModoDebug = 1) PRINT '3) CPJ_Cbtes_Fac_Generar_Item'
	

	/*-------------------------------------------------------------------*/

	/*3.1) Por Contratos_Tipos_Prod*/
	IF(@pModoDebug = 1) PRINT '3.1) Por Contratos_Tipos_Prod'

	DECLARE curContratoGenerarCbtes_ItemsXContratos_Tipos CURSOR FOR
			SELECT Id_Producto, Cantidad
				FROM Contratos_Tipos_Prod
				WHERE
				Id_Tipo_Con = @Id_Tipo_Con
				AND Id_Tipo_Con <> 0

	OPEN curContratoGenerarCbtes_ItemsXContratos_Tipos
	FETCH NEXT FROM curContratoGenerarCbtes_ItemsXContratos_Tipos INTO @Id_Producto, @Cantidad
	WHILE @@FETCH_STATUS = 0
	BEGIN

		SET @Bonif = 0
		SET @Porc_Iva = 0 

		SET @JSON_Parametros_Stored_Invocado =	'{' +
												dbo.CF_Json_ParsearVariable('FlagUsarTrans', 0, 'TINYINT') + ',' +
												dbo.CF_Json_ParsearVariable('ModoDebug', @pModoDebug, 'TINYINT') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Producto', @Id_Producto, 'VARCHAR(14)') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Cliente', @Id_Cliente, 'INT') + ',' +
												dbo.CF_Json_ParsearVariable('Fecha', @pFecha_QA, 'DATETIME') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Contrato', @pId_Contrato, 'INT') +
												'}'
		DELETE @Result_Tabla_Stored_Invocado

		INSERT INTO @Result_Tabla_Stored_Invocado
		EXEC @Result_Stored_Invocado = CPJ_Produc_Precio @JSON_Parametros_Stored_Invocado

		IF ISNULL(@Result_Stored_Invocado, 0) <> 0 RAISERROR ('Error when calling CPJ_Produc_Precio', 16,  1 ) 
	
		SELECT TOP 1 @rta_JSON_Stored_Invocado = ErrorMessage FROM @Result_Tabla_Stored_Invocado

		SET @Precio_Grav = ISNULL(CONVERT(DECIMAL(12,2), dbo.CF_JSON_VALUE(@rta_JSON_Stored_Invocado,'Precio_Grav')), 0)
		SET @Precio_Exen = ISNULL(CONVERT(DECIMAL(12,2), dbo.CF_JSON_VALUE(@rta_JSON_Stored_Invocado,'Precio_Exen')), 0)
		IF(@pModoDebug = 1)
		BEGIN
			PRINT '3.1) @Id_Producto: ' + @Id_Producto + ' @Precio_Grav: ' + CONVERT(VARCHAR(10), @Precio_Grav) + ' @Precio_Exen: ' + CONVERT(VARCHAR(10), @Precio_Grav)
		END

		SET @JSON_Parametros_Stored_Invocado =	'{' +
												dbo.CF_Json_ParsearVariable('FlagUsarTrans', 0, 'TINYINT') + ',' +
												dbo.CF_Json_ParsearVariable('ModoDebug', @pModoDebug, 'TINYINT') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Trans', @Id_Trans, 'INT') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Producto', @Id_Producto, 'VARCHAR(14)') + ',' +
												dbo.CF_Json_ParsearVariable('Cantidad', @Cantidad, 'DECIMAL(15,5)') + ',' +
												dbo.CF_Json_ParsearVariable('Fecha_QA', @pFecha_QA, 'DATETIME') + ',' +
												dbo.CF_Json_ParsearVariable('Fecha_Venc', @pFecha_Venc, 'DATETIME') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Cliente', @Id_Cliente, 'INT') + ',' +
												dbo.CF_Json_ParsearVariable('Bonif', @Bonif, 'DECIMAL(5,2)') + ',' +
												dbo.CF_Json_ParsearVariable('Porc_Iva', @Porc_Iva, 'DECIMAL(5,2)') + ',' +
												dbo.CF_Json_ParsearVariable('Precio_Grav', @Precio_Grav, 'DECIMAL(15,5)') + ',' +
												dbo.CF_Json_ParsearVariable('Precio_Exen', @Precio_Exen, 'DECIMAL(15,5)') + 
												'}'

		DELETE @Result_Tabla_Stored_Invocado

		IF(@Compromete_Factura = 1)
		BEGIN
			INSERT INTO @Result_Tabla_Stored_Invocado
			EXEC @Result_Stored_Invocado = CPJ_Cbtes_Fac_Generar_Item @JSON_Parametros_Stored_Invocado
		END

		IF(@Compromete_Remitos = 1)
		BEGIN
			INSERT INTO @Result_Tabla_Stored_Invocado
			EXEC @Result_Stored_Invocado = CPJ_Cbtes_Fac_Generar_Item @JSON_Parametros_Stored_Invocado
		END

		IF ISNULL(@Result_Stored_Invocado, 0) <> 0 RAISERROR ('Error when calling CPJ_Cbtes_Fac_Generarv', 16,  1 )  
	
		SELECT TOP 1 @rta_JSON_Stored_Invocado = ErrorMessage FROM @Result_Tabla_Stored_Invocado

		FETCH NEXT FROM curContratoGenerarCbtes_ItemsXContratos_Tipos INTO @Id_Producto, @Cantidad
	END
	CLOSE curContratoGenerarCbtes_ItemsXContratos_Tipos
	DEALLOCATE curContratoGenerarCbtes_ItemsXContratos_Tipos

	/*-------------------------------------------------------------------*/

	/*3.2) Por Contratos_Prod*/
	IF(@pModoDebug = 1)
	BEGIN
		PRINT '3.2) Por Contratos_Prod'
	END

	DECLARE curContratoGenerarCbtes_ItemsXContratos_Prod CURSOR FOR
	SELECT Id_Producto, Cantidad
	FROM Contratos_Prod
	WHERE
	Id_Contrato = @pId_Contrato
	AND ISNULL(Flag_Facturable, 0) = 1

	OPEN curContratoGenerarCbtes_ItemsXContratos_Prod
	FETCH NEXT FROM curContratoGenerarCbtes_ItemsXContratos_Prod INTO @Id_Producto, @Cantidad
	WHILE @@FETCH_STATUS = 0
	BEGIN

		SET @Bonif = 0
		SET @Porc_Iva = 0 

		SET @JSON_Parametros_Stored_Invocado =	'{' +
												dbo.CF_Json_ParsearVariable('FlagUsarTrans', 0, 'TINYINT') + ',' +
												dbo.CF_Json_ParsearVariable('ModoDebug', @pModoDebug, 'TINYINT') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Producto', @Id_Producto, 'VARCHAR(14)') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Cliente', @Id_Cliente, 'INT') + ',' +
												dbo.CF_Json_ParsearVariable('Fecha', @pFecha_QA, 'DATETIME') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Contrato', @pId_Contrato, 'INT') +
												'}'
		DELETE @Result_Tabla_Stored_Invocado

		INSERT INTO @Result_Tabla_Stored_Invocado
		EXEC @Result_Stored_Invocado = CPJ_Produc_Precio @JSON_Parametros_Stored_Invocado

		IF ISNULL(@Result_Stored_Invocado, 0) <> 0 RAISERROR ('Error when calling CPJ_Produc_Precio', 16,  1 )  

	
		SELECT TOP 1 @rta_JSON_Stored_Invocado = ErrorMessage FROM @Result_Tabla_Stored_Invocado

		SET @Precio_Grav = ISNULL(CONVERT(DECIMAL(12,2), dbo.CF_JSON_VALUE(@rta_JSON_Stored_Invocado,'Precio_Grav')), 0)
		SET @Precio_Exen = ISNULL(CONVERT(DECIMAL(12,2), dbo.CF_JSON_VALUE(@rta_JSON_Stored_Invocado,'Precio_Exen')), 0)
		IF(@pModoDebug = 1)
		BEGIN
			PRINT '3.2) @Id_Producto: ' + @Id_Producto + ' @Precio_Grav: ' + CONVERT(VARCHAR(10), @Precio_Grav) + ' @Precio_Exen: ' + CONVERT(VARCHAR(10), @Precio_Grav)
		END

		SET @JSON_Parametros_Stored_Invocado =	'{' +
												dbo.CF_Json_ParsearVariable('FlagUsarTrans', 0, 'TINYINT') + ',' +
												dbo.CF_Json_ParsearVariable('ModoDebug', @pModoDebug, 'TINYINT') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Trans', @Id_Trans, 'INT') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Producto', @Id_Producto, 'VARCHAR(14)') + ',' +
												dbo.CF_Json_ParsearVariable('Cantidad', @Cantidad, 'DECIMAL(15,5)') + ',' +
												dbo.CF_Json_ParsearVariable('Fecha_QA', @pFecha_QA, 'DATETIME') + ',' +
												dbo.CF_Json_ParsearVariable('Fecha_Venc', @pFecha_Venc, 'DATETIME') + ',' +
												dbo.CF_Json_ParsearVariable('Id_Cliente', @Id_Cliente, 'INT') + ',' +
												dbo.CF_Json_ParsearVariable('Bonif', @Bonif, 'DECIMAL(5,2)') + ',' +
												dbo.CF_Json_ParsearVariable('Porc_Iva', @Porc_Iva, 'DECIMAL(5,2)') + ',' +
												dbo.CF_Json_ParsearVariable('Precio_Grav', @Precio_Grav, 'DECIMAL(15,5)') + ',' +
												dbo.CF_Json_ParsearVariable('Precio_Exen', @Precio_Exen, 'DECIMAL(15,5)') + 
												'}'

		DELETE @Result_Tabla_Stored_Invocado

		IF(@Compromete_Factura = 1)
		BEGIN
			INSERT INTO @Result_Tabla_Stored_Invocado
			EXEC @Result_Stored_Invocado = CPJ_Cbtes_Fac_Generar_Item @JSON_Parametros_Stored_Invocado
		END

		IF(@Compromete_Remitos = 1)
		BEGIN
			INSERT INTO @Result_Tabla_Stored_Invocado
			EXEC @Result_Stored_Invocado = CPJ_Cbtes_Rem_Generar_Item @JSON_Parametros_Stored_Invocado
		END

		IF ISNULL(@Result_Stored_Invocado, 0) <> 0 RAISERROR ('Error when calling CPJ_Cbtes_Rem_Generar_Item', 16,  1 ) 
	
		SELECT TOP 1 @rta_JSON_Stored_Invocado = ErrorMessage FROM @Result_Tabla_Stored_Invocado

		FETCH NEXT FROM curContratoGenerarCbtes_ItemsXContratos_Prod INTO @Id_Producto, @Cantidad
	END
	CLOSE curContratoGenerarCbtes_ItemsXContratos_Prod
	DEALLOCATE curContratoGenerarCbtes_ItemsXContratos_Prod

	/*-------------------------------------------------------------------*/
	/*3.3) Por Clientes Integrantes Agrupados*/
	IF(@pModoDebug = 1)
	BEGIN
		PRINT '3.3) Por Clientes Integrantes Agrupados'
	END
	
	SET @Flag_Agru_Cli_Ref  = 0
	SET @Flag_Remitos		= 0
	SET @Id_Tipo_Cbte_Remito= ''

	IF(@Id_Tipo_Con > 0)
	BEGIN
		SELECT	
		@Flag_Agru_Cli_Ref	= ISNULL(Flag_Agru_Cli_Ref, 0),
		@Flag_Remitos		= ISNULL(Flag_Remitos, 0),
		@Id_Tipo_Cbte_Remito= ISNULL(Id_Tipo_Cbte_Remito, '')
		FROM Contratos_Tipos
		WHERE
		Id_Tipo_Con = @Id_Tipo_Con
	END 

	IF(@Flag_Agru_Cli_Ref = 1)
	BEGIN
		SET @Observacion_Incluye_Integ = ''

		DECLARE curContratoGenerarCbtes_ItemsXClientesIntAgrup CURSOR FOR
		SELECT DISTINCT CTInt.Id_Cliente, CPInt.Id_Producto, CPInt.Cantidad
		FROM Contratos CTInt, Contratos_Prod CPInt
		WHERE
		CTInt.Id_Contrato = CPInt.Id_Contrato
		AND CTInt.Id_Tipo_Con = @Id_Tipo_Con
		AND CONVERT(DATE, ISNULL(CTInt.Fecha_Desde, '19000101')) <= CONVERT(DATE, @pFecha_QA)
		AND (CONVERT(DATE, ISNULL(CTInt.Fecha_Hasta, '19000101')) >= CONVERT(DATE, @pFecha_QA) OR CTInt.Fecha_Hasta IS NULL)
		AND CTInt.Id_Cliente IN (SELECT DISTINCT Id_Cliente FROM Clientes WHERE ISNULL(Id_Cliente_Ref, 0) = @Id_Cliente AND Fecha_Baja IS NULL)

		OPEN curContratoGenerarCbtes_ItemsXClientesIntAgrup
		FETCH NEXT FROM curContratoGenerarCbtes_ItemsXClientesIntAgrup INTO @Id_Cliente_Integ, @Id_Producto, @Cantidad
		WHILE @@FETCH_STATUS = 0
		BEGIN

			IF(@Observacion_Incluye_Integ = '')
			BEGIN
				SET @Observacion_Incluye_Integ = 'Incluye Socio: ' + CONVERT(VARCHAR(10), @Id_Cliente_Integ) 
			END
			ELSE
			BEGIN
				SET @Observacion_Incluye_Integ = @Observacion_Incluye_Integ + ', ' + CONVERT(VARCHAR(10), @Id_Cliente_Integ) 
			END

			SET @Bonif = 0
			SET @Porc_Iva = 0 

			SET @JSON_Parametros_Stored_Invocado =	'{' +
													dbo.CF_Json_ParsearVariable('FlagUsarTrans', 0, 'TINYINT') + ',' +
													dbo.CF_Json_ParsearVariable('ModoDebug', @pModoDebug, 'TINYINT') + ',' +
													dbo.CF_Json_ParsearVariable('Id_Producto', @Id_Producto, 'VARCHAR(14)') + ',' +
													dbo.CF_Json_ParsearVariable('Id_Cliente', @Id_Cliente_Integ, 'INT') + ',' +
													dbo.CF_Json_ParsearVariable('Fecha', @pFecha_QA, 'DATETIME') + ',' +
													dbo.CF_Json_ParsearVariable('Id_Contrato', @pId_Contrato, 'INT') +
													'}'
			DELETE @Result_Tabla_Stored_Invocado

			INSERT INTO @Result_Tabla_Stored_Invocado
			EXEC @Result_Stored_Invocado = CPJ_Produc_Precio @JSON_Parametros_Stored_Invocado

			IF ISNULL(@Result_Stored_Invocado, 0) <> 0 RAISERROR ('Error when calling CPJ_Produc_Precio', 16,  1 ) 
	
			SELECT TOP 1 @rta_JSON_Stored_Invocado = ErrorMessage FROM @Result_Tabla_Stored_Invocado

			SET @Precio_Grav = ISNULL(CONVERT(DECIMAL(12,2), dbo.CF_JSON_VALUE(@rta_JSON_Stored_Invocado,'Precio_Grav')), 0)
			SET @Precio_Exen = ISNULL(CONVERT(DECIMAL(12,2), dbo.CF_JSON_VALUE(@rta_JSON_Stored_Invocado,'Precio_Exen')), 0)
			IF(@pModoDebug = 1)
			BEGIN
				PRINT '3.3) @Id_Cliente_Integ: '+ CONVERT(VARCHAR(10), @Id_Cliente_Integ) + ' @Id_Producto: ' + @Id_Producto + ' @Precio_Grav: ' + CONVERT(VARCHAR(10), @Precio_Grav) + ' @Precio_Exen: ' + CONVERT(VARCHAR(10), @Precio_Grav)
			END

			SET @JSON_Parametros_Stored_Invocado =	'{' +
													dbo.CF_Json_ParsearVariable('FlagUsarTrans', 0, 'TINYINT') + ',' +
													dbo.CF_Json_ParsearVariable('ModoDebug', @pModoDebug, 'TINYINT') + ',' +
													dbo.CF_Json_ParsearVariable('Id_Trans', @Id_Trans, 'INT') + ',' +
													dbo.CF_Json_ParsearVariable('Id_Producto', @Id_Producto, 'VARCHAR(14)') + ',' +
													dbo.CF_Json_ParsearVariable('Cantidad', @Cantidad, 'DECIMAL(15,5)') + ',' +
													dbo.CF_Json_ParsearVariable('Fecha_QA', @pFecha_QA, 'DATETIME') + ',' +
													dbo.CF_Json_ParsearVariable('Fecha_Venc', @pFecha_Venc, 'DATETIME') + ',' +
													dbo.CF_Json_ParsearVariable('Id_Cliente', @Id_Cliente_Integ, 'INT') + ',' +
													dbo.CF_Json_ParsearVariable('Bonif', @Bonif, 'DECIMAL(5,2)') + ',' +
													dbo.CF_Json_ParsearVariable('Porc_Iva', @Porc_Iva, 'DECIMAL(5,2)') + ',' +
													dbo.CF_Json_ParsearVariable('Precio_Grav', @Precio_Grav, 'DECIMAL(15,5)') + ',' +
													dbo.CF_Json_ParsearVariable('Precio_Exen', @Precio_Exen, 'DECIMAL(15,5)') + 
													'}'

			DELETE @Result_Tabla_Stored_Invocado

			IF(@Compromete_Factura = 1)
			BEGIN
				INSERT INTO @Result_Tabla_Stored_Invocado
				EXEC @Result_Stored_Invocado = CPJ_Cbtes_Fac_Generar_Item @JSON_Parametros_Stored_Invocado
			END

			IF(@Compromete_Remitos = 1)
			BEGIN
				INSERT INTO @Result_Tabla_Stored_Invocado
				EXEC @Result_Stored_Invocado = CPJ_Cbtes_Rem_Generar_Item @JSON_Parametros_Stored_Invocado
			END

			IF ISNULL(@Result_Stored_Invocado, 0) <> 0 RAISERROR ('Error when calling CPJ_Cbtes_Rem_Generar_Item', 16,  1 ) 
	
			SELECT TOP 1 @rta_JSON_Stored_Invocado = ErrorMessage FROM @Result_Tabla_Stored_Invocado

			FETCH NEXT FROM curContratoGenerarCbtes_ItemsXClientesIntAgrup INTO @Id_Cliente_Integ, @Id_Producto, @Cantidad
		END
		CLOSE curContratoGenerarCbtes_ItemsXClientesIntAgrup
		DEALLOCATE curContratoGenerarCbtes_ItemsXClientesIntAgrup

		IF(@Observacion_Incluye_Integ <> '')
		BEGIN
			UPDATE Cbtes
			SET
			Observacion =  @Observacion_Incluye_Integ
			WHERE
			Id_Trans = @Id_Trans
		END
	END
	/*-------------------------------------------------------------------*/
		
	/*3.4) Items de remitos propios*/
	IF(@pModoDebug = 1)
	BEGIN
		PRINT '3.4) Items de remitos propios'
	END

	IF(@Flag_Remitos = 1)
	BEGIN
		DECLARE curContratoGenerarCbtes_ItemsXRemitosPropiosTr CURSOR FOR
		SELECT DISTINCT CB.Id_Trans
		FROM Cbtes CB, Cbtes_Items CI, Cbtes_Tipos CT
		WHERE
		CB.Id_Trans = CI.Id_Trans
		AND ISNULL(CB.Id_Tipo_Cbte, '') = CT.Id_Tipo_Cbte
		AND CT.Compromete_Remitos IN (1)
		AND ISNULL(CB.Id_Estado_Cbte, 0) = 1
		AND CONVERT(DATE, ISNULL(CB.Fecha, '19000101')) <= CONVERT(DATE, @pFecha_Rem_Desde)
		AND CONVERT(DATE, ISNULL(CB.Fecha, '19000101')) >= CONVERT(DATE, @pFecha_Rem_Hasta)
		AND CB.Id_Cliente = @Id_Cliente /*No es por Cbtes_Items sino por la cabecera*/

		OPEN curContratoGenerarCbtes_ItemsXRemitosPropiosTr
		FETCH NEXT FROM curContratoGenerarCbtes_ItemsXRemitosPropiosTr INTO @Id_Trans_Remito
		WHILE @@FETCH_STATUS = 0
		BEGIN

			DECLARE curContratoGenerarCbtes_ItemsXRemitosPropios CURSOR FOR
			SELECT CI.Id_Producto, CI.Cantidad, CI.Fecha_QA, CI.Fecha_Venc, CI.Precio_Grav, CI.Precio_Exen, CI.Bonif, CI.Porc_Iva
			FROM  Cbtes_Items CI
			WHERE
			CI.Id_Trans = @Id_Trans_Remito

			OPEN curContratoGenerarCbtes_ItemsXRemitosPropios
			FETCH NEXT FROM curContratoGenerarCbtes_ItemsXRemitosPropios INTO @Id_Producto, @Cantidad, @Fecha_QA, @Fecha_Venc, @Precio_Grav, @Precio_Exen, @Bonif, @Porc_Iva
			WHILE @@FETCH_STATUS = 0
			BEGIN

				IF(@pModoDebug = 1)
				BEGIN
					PRINT '3.4) @Id_Producto: ' + @Id_Producto + ' @Precio_Grav: ' + CONVERT(VARCHAR(10), @Precio_Grav) + ' @Precio_Exen: ' + CONVERT(VARCHAR(10), @Precio_Grav)
				END

				SET @JSON_Parametros_Stored_Invocado =	'{' +
														dbo.CF_Json_ParsearVariable('FlagUsarTrans', 0, 'TINYINT') + ',' +
														dbo.CF_Json_ParsearVariable('ModoDebug', @pModoDebug, 'TINYINT') + ',' +
														dbo.CF_Json_ParsearVariable('Id_Trans', @Id_Trans, 'INT') + ',' +
														dbo.CF_Json_ParsearVariable('Id_Producto', @Id_Producto, 'VARCHAR(14)') + ',' +
														dbo.CF_Json_ParsearVariable('Cantidad', @Cantidad, 'DECIMAL(15,5)') + ',' +
														dbo.CF_Json_ParsearVariable('Fecha_QA', @Fecha_QA, 'DATETIME') + ',' +
														dbo.CF_Json_ParsearVariable('Fecha_Venc', @Fecha_Venc, 'DATETIME') + ',' +
														dbo.CF_Json_ParsearVariable('Id_Cliente', @Id_Cliente, 'INT') + ',' +
														dbo.CF_Json_ParsearVariable('Bonif', @Bonif, 'DECIMAL(5,2)') + ',' +
														dbo.CF_Json_ParsearVariable('Porc_Iva', @Porc_Iva, 'DECIMAL(5,2)') + ',' +
														dbo.CF_Json_ParsearVariable('Precio_Grav', @Precio_Grav, 'DECIMAL(15,5)') + ',' +
														dbo.CF_Json_ParsearVariable('Precio_Exen', @Precio_Exen, 'DECIMAL(15,5)') + 
														'}'

				DELETE @Result_Tabla_Stored_Invocado

				IF(@Compromete_Factura = 1)
				BEGIN
					INSERT INTO @Result_Tabla_Stored_Invocado
					EXEC @Result_Stored_Invocado = CPJ_Cbtes_Fac_Generar_Item @JSON_Parametros_Stored_Invocado
				END

				IF(@Compromete_Remitos = 1)
				BEGIN
					INSERT INTO @Result_Tabla_Stored_Invocado
					EXEC @Result_Stored_Invocado = CPJ_Cbtes_Rem_Generar_Item @JSON_Parametros_Stored_Invocado
				END

				IF ISNULL(@Result_Stored_Invocado, 0) <> 0  RAISERROR ('Error when calling CPJ_Cbtes_Rem_Generar_Item', 16,  1 ) 

	
				SELECT TOP 1 @rta_JSON_Stored_Invocado = ErrorMessage FROM @Result_Tabla_Stored_Invocado

				FETCH NEXT FROM curContratoGenerarCbtes_ItemsXRemitosPropios INTO  @Id_Producto, @Cantidad, @Fecha_QA, @Fecha_Venc, @Precio_Grav, @Precio_Exen, @Bonif, @Porc_Iva
			END
			CLOSE curContratoGenerarCbtes_ItemsXRemitosPropios
			DEALLOCATE curContratoGenerarCbtes_ItemsXRemitosPropios

			UPDATE Cbtes
			SET
			Id_Estado_Cbte = 2 /*Completo*/
			WHERE
			Id_Trans = @Id_Trans_Remito

			FETCH NEXT FROM curContratoGenerarCbtes_ItemsXRemitosPropiosTr INTO @Id_Trans_Remito
		END
		CLOSE curContratoGenerarCbtes_ItemsXRemitosPropiosTr
		DEALLOCATE curContratoGenerarCbtes_ItemsXRemitosPropiosTr
	END
	/*-------------------------------------------------------------------*/

	/*===================================================================*/
	/*4) CPJ_Cbtes_Fac_Fin*/
	IF(@pModoDebug = 1)
	BEGIN
		PRINT '4) Por CPJ_Cbtes_Fac_Fin'
	END

	SET @JSON_Parametros_Stored_Invocado =	'{' +
											dbo.CF_Json_ParsearVariable('FlagUsarTrans', 0, 'TINYINT') + ',' +
											dbo.CF_Json_ParsearVariable('ModoDebug', @pModoDebug, 'TINYINT') + ',' +
											dbo.CF_Json_ParsearVariable('Id_Trans', @Id_Trans, 'INT') + 
											'}'

	DELETE @Result_Tabla_Stored_Invocado

	IF(@Compromete_Factura = 1)
	BEGIN
		INSERT INTO @Result_Tabla_Stored_Invocado
		EXEC @Result_Stored_Invocado = dbo.CPJ_Cbtes_Fac_Fin @JSON_Parametros_Stored_Invocado
	END

	IF(@Compromete_Remitos = 1)
	BEGIN
		INSERT INTO @Result_Tabla_Stored_Invocado
		EXEC @Result_Stored_Invocado = dbo.CPJ_Cbtes_Rem_Fin @JSON_Parametros_Stored_Invocado
	END

	IF ISNULL(@Result_Stored_Invocado, 0) <> 0 RAISERROR ('Error when calling CPJ_Cbtes_Rem_Fin', 16,  1 ) 
	
	SELECT TOP 1 @rta_JSON_Stored_Invocado = ErrorMessage FROM @Result_Tabla_Stored_Invocado

	/*===================================================================*/

	SET @rtaMsjStored		=	'{' +
								dbo.CF_Json_ParsearVariable('Id_Trans', @Id_Trans, 'INT') +
								'}'

	SELECT	 0				AS ErrorNumber 
			,0				AS ErrorSeverity  
			,0				AS ErrorState 
			,0				AS ErrorProcedure  
			,0				AS ErrorLine		
			,@rtaMsjStored	AS ErrorMessage

	IF(@pModoDebug = 1)
	BEGIN
		PRINT 'Fin Stored Procedure: CPJ_Contrato_Facturar'
	END

END TRY  


BEGIN CATCH  
    EXECUTE usp_GetErrorInfo

	IF @pFlagUsarTrans <> 0 
	BEGIN
		ROLLBACK
	END
	---------------------------------------------------------------------------------------
	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXContratos_Tipos') ) = -1
	   DEALLOCATE curContratoGenerarCbtes_ItemsXContratos_Tipos		 

	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXContratos_Tipos') ) = 1
	BEGIN
	   CLOSE curContratoGenerarCbtes_ItemsXContratos_Tipos
	   DEALLOCATE curContratoGenerarCbtes_ItemsXContratos_Tipos		 
	END
	---------------------------------------------------------------------------------------

	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXContratos_Prod') ) = -1
	   DEALLOCATE curContratoGenerarCbtes_ItemsXContratos_Prod		 

	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXContratos_Prod') ) = 1
	BEGIN
	   CLOSE curContratoGenerarCbtes_ItemsXContratos_Prod
	   DEALLOCATE curContratoGenerarCbtes_ItemsXContratos_Prod		 
	END
	---------------------------------------------------------------------------------------

	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXClientesIntAgrup') ) = -1
	   DEALLOCATE curContratoGenerarCbtes_ItemsXClientesIntAgrup		 

	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXClientesIntAgrup') ) = 1
	BEGIN
	   CLOSE curContratoGenerarCbtes_ItemsXClientesIntAgrup
	   DEALLOCATE curContratoGenerarCbtes_ItemsXClientesIntAgrup		 
	END
	---------------------------------------------------------------------------------------

	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXRemitosPropios') ) = -1
	   DEALLOCATE curContratoGenerarCbtes_ItemsXRemitosPropios		 

	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXRemitosPropios') ) = 1
	BEGIN
	   CLOSE curContratoGenerarCbtes_ItemsXRemitosPropios
	   DEALLOCATE curContratoGenerarCbtes_ItemsXRemitosPropios		 
	END
	---------------------------------------------------------------------------------------

	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXRemitosPropios') ) = -1
	   DEALLOCATE curContratoGenerarCbtes_ItemsXRemitosPropios		 

	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXRemitosPropios') ) = 1
	BEGIN
	   CLOSE curContratoGenerarCbtes_ItemsXRemitosPropios
	   DEALLOCATE curContratoGenerarCbtes_ItemsXRemitosPropios		 
	END
	---------------------------------------------------------------------------------------

	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXRemitosPropiosTr') ) = -1
	   DEALLOCATE curContratoGenerarCbtes_ItemsXRemitosPropiosTr		 

	IF (SELECT CURSOR_STATUS('global','curContratoGenerarCbtes_ItemsXRemitosPropiosTr') ) = 1
	BEGIN
	   CLOSE curContratoGenerarCbtes_ItemsXRemitosPropiosTr
	   DEALLOCATE curContratoGenerarCbtes_ItemsXRemitosPropiosTr		 
	END
	---------------------------------------------------------------------------------------








	RETURN 9999
END CATCH

RETURN 0
