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

CREATE PROCEDURE [dbo].[CPJ_Cbtes_Fac_Generar_Item]		@pJson VARCHAR(8000)
AS 
SET NOCOUNT ON 



/*Variables recibidas por parámetro a traves del JSON*/
DECLARE @pFlagUsarTrans			TINYINT
DECLARE @pModoDebug				TINYINT
DECLARE @pId_Trans				INT
DECLARE @pId_Producto			VARCHAR(14)
DECLARE @pCantidad				DECIMAL(15,5)
DECLARE @pFecha_QA				DATETIME
DECLARE @pFecha_Venc			DATETIME
DECLARE @pId_Cliente			INT
DECLARE @pBonif					DECIMAL(5,2)
DECLARE @pPorc_Iva				DECIMAL(5,2)
DECLARE @pPrecio_Grav			DECIMAL(15,5)
DECLARE @pPrecio_Exen			DECIMAL(15,5)
DECLARE @pId_Tiempo             CHAR(3)
DECLARE @pRefacturar            TINYINT
DECLARE @pFlag_Tabla_Temp       TINYINT
DECLARE @pLote					VARCHAR(20)

SET @pFlag_Tabla_Temp		    = ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'Flag_Tabla_Temp')), 0)
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_Producto				= ISNULL(CONVERT(VARCHAR(14), dbo.CF_JSON_VALUE(@pJson,'Id_Producto')), 0)
SET @pCantidad					= ISNULL(CONVERT(DECIMAL(15,5), dbo.CF_JSON_VALUE(@pJson,'Cantidad')), 0)
SET @pFecha_QA					= CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha_QA'))
SET @pFecha_Venc				= CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha_Venc'))
SET @pId_Cliente				= ISNULL(CONVERT(INT, dbo.CF_JSON_VALUE(@pJson,'Id_Cliente')), 0)
SET @pBonif						= ISNULL(CONVERT(DECIMAL(5,2), dbo.CF_JSON_VALUE(@pJson,'Bonif')), 0)
SET @pPorc_Iva					= ISNULL(CONVERT(DECIMAL(5,2), dbo.CF_JSON_VALUE(@pJson,'Porc_Iva')), 0)
SET @pPrecio_Grav 				= ISNULL(CONVERT(DECIMAL(15,5), dbo.CF_JSON_VALUE(@pJson,'Precio_Grav')), 0)
SET @pPrecio_Exen				= ISNULL(CONVERT(DECIMAL(15,5), dbo.CF_JSON_VALUE(@pJson,'Precio_Exen')), 0)
SET @pId_Tiempo	            	= ISNULL(CONVERT(CHAR(3), dbo.CF_JSON_VALUE(@pJson,'Id_Tiempo')), '')
SET @pRefacturar		        = ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'Refacturar')), 0)
SET @pId_Trans					= ISNULL(CONVERT(INT, dbo.CF_JSON_VALUE(@pJson,'Id_Trans')), 0)
SET @pLote						= ISNULL(CONVERT(VARCHAR(20), dbo.CF_JSON_VALUE(@pJson,'Lote')), '')

/*FIN Variables recibidas por parámetro a traves del JSON*/

/*Variable de Retorno del Stored*/
DECLARE @rtaErrorStored			INT
DECLARE @rtaMsjStored			VARCHAR(4000)
/*FIN Variable de Retorono del Stored*/

/*Declaracion Variables Locales*/
DECLARE @Item 					SMALLINT
DECLARE @Id_Estado_Cbte 		SMALLINT
DECLARE @Calle 					CHAR(5)
DECLARE @Columna 				CHAR(5)
DECLARE @Fila 					CHAR(5)
DECLARE @Bultos 				DECIMAL(15, 5)
DECLARE @Despacho 				VARCHAR(100)
DECLARE @Serie 					VARCHAR(100)
DECLARE @Millas 				INT
DECLARE @Cantidad_Saldo 		DECIMAL(15, 5)
DECLARE @Imp_Gravado 			DECIMAL(12, 2)
DECLARE @Imp_Exento 			DECIMAL(12, 2)
DECLARE @Analisis 				VARCHAR(30)
DECLARE @Flag_QA 				CHAR(1)
DECLARE @Descripcion_producto 	VARCHAR(100)
DECLARE @Id_Unidad_Medida 		CHAR(4)
DECLARE @Imp_Final				DECIMAL(15,5)
DECLARE @Costo 					DECIMAL(15, 5)
DECLARE @Imp_Iva 				DECIMAL(12, 2)
DECLARE @Id_Costo 				INT
DECLARE @Id_Tarea 				SMALLINT
DECLARE @Fecha_Caducidad 		DATETIME
DECLARE @Id_Pais 				CHAR(3)
DECLARE @Id_Usuario 			SMALLINT
DECLARE @Cantidad_Equiv 		DECIMAL(15, 5)
DECLARE @Costo_MO 				DECIMAL(15, 5)
DECLARE @Costo_GF 				DECIMAL(15, 5)
DECLARE @Id_Cond_Pago 			SMALLINT
DECLARE @Fecha_Proceso 			DATETIME
DECLARE @Id_Balanza 			CHAR(10)
DECLARE @Orden 					SMALLINT
DECLARE @Flag_NoImp_Factura 	TINYINT
DECLARE @Nro_Tag 				VARCHAR(30)
DECLARE @Fecha_Elaboracion 		DATETIME
DECLARE @Costo_Comparativo 		DECIMAL(13, 4)
DECLARE @Porc_Imp_Int 			DECIMAL(5, 2)
DECLARE @Id_Cta_Banco 			SMALLINT
DECLARE @Flag_Existe_Trans		TINYINT
DECLARE @Flag_Existe_Cliente	TINYINT
DECLARE @Flag_Existe_Producto	TINYINT
DECLARE @Observacion			VARCHAR(8000)
DECLARE @Id_Lista_Precio		SMALLINT
DECLARE @Precio_Gravado_Producto DECIMAL(13, 4)
DECLARE @Precio					DECIMAL(15,5)
DECLARE @Item_Facturado         SMALLINT
/*FIN Declaracion Variables Locales*/


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

	IF(@pModoDebug = 1)
	BEGIN
		PRINT 'Ingreso a Stored Procedure: CPJ_Cbtes_Fac_Generar_Item'
		PRINT 'Parámetros:'
		PRINT 'FlagUsarTrans: ' + CONVERT(VARCHAR(10), @pFlagUsarTrans) + ' Id_Trans: ' + CONVERT(VARCHAR(10), @pId_Trans) + ' Id_Producto: ' + @pId_Producto + ' Cantidad: ' + CONVERT(VARCHAR(10), @pCantidad) + ' Fecha_QA: ' + CONVERT(VARCHAR(10), @pFecha_QA, 103) + ' Fecha_Venc: ' + CONVERT(VARCHAR(10), @pFecha_Venc, 103) + ' Id_Cliente: ' + CONVERT(VARCHAR(10), @pId_Cliente) + ' Bonif: ' + CONVERT(VARCHAR(10), @pBonif) + ' Porc_Iva: ' + CONVERT(VARCHAR(10), @pPorc_Iva) + ' Precio_Grav: ' + CONVERT(VARCHAR(25), @pPrecio_Grav) + ' Precio_Exent: ' + CONVERT(VARCHAR(25), @pPrecio_Exen) 
	END

	/*===================================================================*/
    IF @pFlag_Tabla_Temp = 1  
	    SET @pId_Trans	= 0
	  ELSE
    	IF(@pId_Trans = 0)		RAISERROR ('Id_Trans can not be zero.', 16,  1 ) 

	IF(@pId_Cliente = 0)	RAISERROR ('Id_Cliente can not be zero.', 16,  1 ) 
	IF(@pId_Producto = '')	RAISERROR ('Id_Producto can not be blank.', 16,  1 ) 
    Set @Item_Facturado = 0
	IF @pRefacturar = 0 
	   	SET @Item_Facturado =  ( SELECT dbo.CFJ_Producto_Facturado  ('{ "Id_Cliente":"' + CONVERT(VARCHAR(15), @pId_Cliente) + '",' 
	                                                              + ' "id_producto":"' + CONVERT(VARCHAR(15), @pId_Producto) + '",'
																  + ' "Id_Tiempo":"' + CONVERT(VARCHAR(15), @pId_Tiempo) + '",'
																  + ' "Fecha":"' + CONVERT(VARCHAR(15), @pFecha_QA , 112 ) + '",'
																  + ' "Flag_Tabla_Temp":"' + CONVERT(VARCHAR(5), @pFlag_Tabla_Temp) + '",'
															      + ' "Refacturar":"' + CONVERT(VARCHAR(5), @pRefacturar) + '"}'))

    IF (@pRefacturar = 0 AND @Item_Facturado <> 0)
	    BEGIN
		     IF @pFlagUsarTrans <> 0 COMMIT


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

				SET @rtaMsjStored		=	'{' +
											dbo.CF_Json_ParsearVariable('id_trans', ISNULL(@pId_Trans,0), 'INT')  + ',' +
											dbo.CF_Json_ParsearVariable('item', ISNULL(@Item,0), 'SMALLINT')  + ',' +
											dbo.CF_Json_ParsearVariable('id_producto', ISNULL(@pId_Producto,''), 'VARCHAR')  + ',' +
											dbo.CF_Json_ParsearVariable('imp_final', ISNULL(@Imp_Final,0), 'DECIMAL') +
											'}'

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

			   RETURN 0
	    END


	/*************************************************************************************************/

	SELECT  @Id_Estado_Cbte	= ISNULL(Id_Estado_Cbte, 0),
			@pLote			= ISNULL(Lote, ''),
			@Id_Usuario		= ISNULL(Id_Usuario, '-1')
	FROM Cbtes
	WHERE 
	Id_Trans = @pId_Trans

	/*************************************************************************************************/

	SELECT  @Calle					= ISNULL(Calle, ''),
			@Columna				= ISNULL(Columna, ''),
			@Fila					= ISNULL(Fila, ''),
			@Despacho				= ISNULL(Despacho, ''),
			@Descripcion_producto	= ISNULL(Descripcion_Resumida, ''),
			@Id_Unidad_Medida		= ISNULL(Id_Unidad_Medida, ''),
			@Costo					= ISNULL(Costo, 0),
			@Id_Cond_Pago			= ISNULL(Id_Cond_Pago, 0),
			@Id_Cta_Banco			= ISNULL(Id_Cta_Banco, 0),
			@Precio_Gravado_Producto = ISNULL(Precio_Gravado, 0)
	FROM Productos
	WHERE 
	Id_Producto = @pId_Producto	
	

	/*************************************************************************************************/
    IF @pFlag_Tabla_Temp = 1  
    	SET @Item 					= (ISNULL((SELECT MAX(ISNULL(Item, 0)) FROM #ITEMS_CBTE WHERE Id_Trans = @pId_Trans), 0)) + 1
	  ELSE
     	SET @Item 					= (ISNULL((SELECT MAX(ISNULL(Item, 0)) FROM CBTES_ITEMS WHERE Id_Trans = @pId_Trans), 0)) + 1
	    
	SET @Precio					= @pPrecio_Grav + @pPrecio_Exen
	SET @pPrecio_Grav			= @Precio * (1 - (@pBonif / 100) )
	SET @pPrecio_Exen			= 0

	SET @Bultos 				= 0
	SET @Serie 					= ''
	SET @Millas 				= 0
	SET @Cantidad_Saldo 		= @pCantidad
	SET @Imp_Gravado 			= @pPrecio_Grav * @pCantidad
	SET @Imp_Exento 			= 0
	SET @Analisis 				= ''
	SET @Flag_QA 				= 'A'
	SET @Imp_Iva 				= ((@pPrecio_Grav * @pPorc_Iva) / 100)
	SET @Imp_Final				= (@Imp_Gravado + @Imp_Iva + @Imp_Exento)
	SET @Id_Costo 				= 0
	SET @Id_Tarea 				= 0
	SET @Fecha_Caducidad 		= NULL
	SET @Id_Pais 				= ''
	SET @Cantidad_Equiv 		= 0
	SET @Costo_MO 				= 0
	SET @Costo_GF 				= 0
	SET @Fecha_Proceso 			= NULL
	SET @Id_Balanza 			= ''
	SET @Orden 					= 0
	SET @Flag_NoImp_Factura 	= 0
	SET @Nro_Tag 				= ''
	SET @Fecha_Elaboracion 		= NULL
	SET @Costo_Comparativo 		= 0
	SET @Porc_Imp_Int 			= 0
	SET @Observacion			= ''	


	/*************************************************************************************************/
    IF @pFlag_Tabla_Temp = 1 
		INSERT INTO #ITEMS_CBTE
		(Id_Trans,		Item,					Id_Producto, 
		Id_Estado_Cbte, Cantidad,				Calle, 
		Columna,		Fila,					Bultos, 
		Despacho,		Serie,					Fecha_Venc,
		Observacion,	Millas,					Cantidad_Saldo, 
		Precio_Grav,	Precio_Exen,			Imp_Gravado, 
		Imp_Exento,		Analisis,				Lote, 
		Flag_QA,		Fecha_QA,				Porc_Iva, 
		Bonif,			Descripcion_producto,	Id_Unidad_Medida, 
		Imp_Final,		Costo,					Imp_Iva, 
		Precio,			Id_Costo,				Id_Cliente,
		Id_Tarea,		Fecha_Caducidad,		Id_Pais, 
		Id_Usuario,		Cantidad_Equiv,			Costo_MO, 
		Costo_GF,		Id_Cond_Pago,			Fecha_Proceso, 
		Id_Balanza,		Orden,					Flag_NoImp_Factura, 
		Nro_Tag,		Fecha_Elaboracion,		Costo_Comparativo, 
		Porc_Imp_Int,	Id_Cta_Banco)
		VALUES
		(@pId_Trans,		@Item,					@pId_Producto, 
		@Id_Estado_Cbte,	@pCantidad,				@Calle, 
		@Columna,			@Fila,					@Bultos, 
		@Despacho,			@Serie,					@pFecha_Venc,
		@Observacion,		@Millas,				@Cantidad_Saldo, 
		@pPrecio_Grav,		@pPrecio_Exen,			@Imp_Gravado, 
		@Imp_Exento,		@Analisis,				@pLote, 
		@Flag_QA,			@pFecha_QA,				@pPorc_Iva, 
		@pBonif,			@Descripcion_producto,	@Id_Unidad_Medida, 
		@Imp_Final,			@Costo,					@Imp_Iva, 
		@Precio,			@Id_Costo,				@pId_Cliente,
		@Id_Tarea,			@Fecha_Caducidad,		@Id_Pais, 
		@Id_Usuario,		@Cantidad_Equiv,		@Costo_MO, 
		@Costo_GF,			@Id_Cond_Pago,			@Fecha_Proceso, 
		@Id_Balanza,		@Orden,					@Flag_NoImp_Factura, 
		@Nro_Tag,			@Fecha_Elaboracion,		@Costo_Comparativo, 
		@Porc_Imp_Int,		@Id_Cta_Banco)
       
      ELSE
	    
		INSERT INTO CBTES_ITEMS
		(Id_Trans,		Item,					Id_Producto, 
		Id_Estado_Cbte, Cantidad,				Calle, 
		Columna,		Fila,					Bultos, 
		Despacho,		Serie,					Fecha_Venc,
		Observacion,	Millas,					Cantidad_Saldo, 
		Precio_Grav,	Precio_Exen,			Imp_Gravado, 
		Imp_Exento,		Analisis,				Lote, 
		Flag_QA,		Fecha_QA,				Porc_Iva, 
		Bonif,			Descripcion_producto,	Id_Unidad_Medida, 
		Imp_Final,		Costo,					Imp_Iva, 
		Precio,			Id_Costo,				Id_Cliente,
		Id_Tarea,		Fecha_Caducidad,		Id_Pais, 
		Id_Usuario,		Cantidad_Equiv,			Costo_MO, 
		Costo_GF,		Id_Cond_Pago,			Fecha_Proceso, 
		Id_Balanza,		Orden,					Flag_NoImp_Factura, 
		Nro_Tag,		Fecha_Elaboracion,		Costo_Comparativo, 
		Porc_Imp_Int,	Id_Cta_Banco)
	    VALUES
		(@pId_Trans,		@Item,					@pId_Producto, 
		@Id_Estado_Cbte,	@pCantidad,				@Calle, 
		@Columna,			@Fila,					@Bultos, 
		@Despacho,			@Serie,					@pFecha_Venc,
		@Observacion,		@Millas,				@Cantidad_Saldo, 
		@pPrecio_Grav,		@pPrecio_Exen,			@Imp_Gravado, 
		@Imp_Exento,		@Analisis,				@pLote, 
		@Flag_QA,			@pFecha_QA,				@pPorc_Iva, 
		@pBonif,			@Descripcion_producto,	@Id_Unidad_Medida, 
		@Imp_Final,			@Costo,					@Imp_Iva, 
		@Precio,			@Id_Costo,				@pId_Cliente,
		@Id_Tarea,			@Fecha_Caducidad,		@Id_Pais, 
		@Id_Usuario,		@Cantidad_Equiv,		@Costo_MO, 
		@Costo_GF,			@Id_Cond_Pago,			@Fecha_Proceso, 
		@Id_Balanza,		@Orden,					@Flag_NoImp_Factura, 
		@Nro_Tag,			@Fecha_Elaboracion,		@Costo_Comparativo, 
		@Porc_Imp_Int,		@Id_Cta_Banco)

	/*===================================================================*/
	
	IF @pFlagUsarTrans <> 0 
	BEGIN
		COMMIT
	END

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

	SET @rtaMsjStored		=	'{' +
								dbo.CF_Json_ParsearVariable('id_trans', @pId_Trans, 'INT')  + ',' +
								dbo.CF_Json_ParsearVariable('item',@Item, 'SMALLINT')  + ',' +
								dbo.CF_Json_ParsearVariable('id_producto', @pId_Producto, 'VARCHAR')  + ',' +
								dbo.CF_Json_ParsearVariable('imp_final',@Imp_Final, 'DECIMAL') +
								'}'

	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_Cbtes_Fac_Generar_Item'
	END
	
END TRY  


BEGIN CATCH  
    EXECUTE usp_GetErrorInfo

	IF @pFlagUsarTrans <> 0 
	BEGIN
		ROLLBACK
	END

	RETURN 9999
END CATCH

RETURN 0 
