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


CREATE PROCEDURE [dbo].[CP_Ventas_por_Producto_CLI]
	@pFecha_Desde			DATETIME,
	@pFecha_Hasta			DATETIME,
	@pid_producto           varchar(14),
	@id_Sucursal            INT,
	@pid_familia            INT,
	@Venta_Total            DECIMAL(12,2),
	@pid_cliente            INT
AS
SET NOCOUNT ON

/*Declaracion Variables Locales*/

DECLARE @Mensaje			VARCHAR(100)
		,@UltError			INT
		,@Id_Trans			INT
		,@Id_Cliente		INT
		,@Importe			DECIMAL(16,2)
		,@Email_Cob			VARCHAR(256)
		,@Id_Trans_Rec		INT
		,@CursorOpen        INT
		,@Flag_Cbte_Tipo	SMALLINT
		,@Periodo           DATE 
		,@Existe      	    SMALLINT
		,@sql				VARCHAR(MAX)


					
BEGIN 

	UPDATE cbtes_tipos	SET id_sucursal		= 0		WHERE id_sucursal is null
	UPDATE productos	SET id_familia		= 0		WHERE id_familia is null
	UPDATE cbtes_tipos	SET id_unid_negocio	= ''	WHERE id_unid_negocio is null
	UPDATE PRODUCTOS 	SET ID_MONEDA_C 	= 'PES' WHERE ID_MONEDA_C = '' OR ID_MONEDA_C IS NULL
   
	UPDATE cbtes SET Porc_Bonificacion = 0 
			FROM cbtes c, cbtes_tipos t 
			WHERE c.id_tipo_cbte = t.id_tipo_cbte
			AND t.compromete_factura IN (1,-1)
			AND c.Porc_Bonificacion IS NULL
			AND C.FECHA >= @pFecha_Desde 
            AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)

	UPDATE cbtes_items SET Cantidad = 0 
			FROM cbtes_items i, cbtes c, cbtes_tipos t 
			WHERE i.id_trans = c.id_trans
			AND c.id_tipo_cbte = t.id_tipo_cbte
			AND t.compromete_factura IN (1,-1)
			AND i.Cantidad IS NULL
			AND C.FECHA >= @pFecha_Desde 
            AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)


	UPDATE cbtes_items SET Imp_Gravado = 0 
			FROM cbtes_items i, cbtes c, cbtes_tipos t 
			WHERE i.id_trans = c.id_trans
			AND c.id_tipo_cbte = t.id_tipo_cbte
			AND t.compromete_factura IN (1,-1)
			AND i.Imp_Gravado IS NULL
			AND C.FECHA >= @pFecha_Desde 
            AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)


   CREATE TABLE #Total (Tot DECIMAL(20,2))


   SET @sql = '     INSERT INTO #Total 
					SELECT SUM(I.Imp_gravado * t.compromete_factura) 
					   FROM cbtes c
					    JOIN  cbtes_tipos t ON c.id_tipo_cbte  = t.id_tipo_cbte And T.Compromete_Factura in (1,-1)
					    JOIN  Cbtes_items I ON I.Id_trans = C.id_trans
						JOIN  Productos P ON I.Id_Producto = P.Id_Producto
					   WHERE  C.Id_Estado_Cbte IN (1,2,4)
						   AND C.FECHA >= '''+  CONVERT(VARCHAR(8),@pFecha_Desde,112) + '''
					       AND C.FECHA < ''' + CONVERT(VARCHAR(8),DATEADD(dd,1,@pFecha_Hasta),112) + ''''
      
	IF (@pid_producto <> '')
		SET @sql += ' AND I.id_Producto = ''' +  @pid_producto + ''''

	IF (@id_Sucursal <> 0 )
		SET @sql += ' AND T.Id_Sucursal = ' +  CONVERT(VARCHAR,@id_Sucursal)

	IF (@pid_familia <> 0 )
		SET @sql += ' AND P.Id_Familia = ' +   CONVERT(VARCHAR,@pid_familia)

	IF (@pid_cliente <> 0)
		SET @sql += ' AND C.Id_Cliente = ' +   CONVERT(VARCHAR,@pid_cliente) 

	EXEC (@sql)
	SELECT @Venta_Total = Tot FROM #Total

    CREATE TABLE #Detalle (Producto VARCHAR(14),Descripcion VARCHAR(100),Cantidad DECIMAL(20,2),Importe DECIMAL(12,2),Porcentaje DECIMAL(6,2))

	SET @sql = 'INSERT INTO #Detalle
					SELECT	I.Id_Producto as Producto
							,P.Descripcion_Detallada  as Descripcion
							,SUM(I.Cantidad * T.Compromete_Factura) as Cantidad
							,SUM(i.Imp_Gravado * (1 - C.Porc_Bonificacion / 100 ) * t.compromete_factura ) as Importe
							,SUM(i.Imp_Gravado * (1 - C.Porc_Bonificacion / 100 ) * t.compromete_factura ) / ' + CONVERT(VARCHAR,@Venta_Total) + ' * 100 AS Porcentaje
					FROM cbtes c
					    JOIN  cbtes_tipos t ON c.id_tipo_cbte  = t.id_tipo_cbte And T.Compromete_Factura in (1,-1)
					    JOIN  Cbtes_items I ON I.Id_trans = C.id_trans
					    JOIN  Productos P	ON I.Id_Producto = P.Id_Producto 
					   WHERE  C.Id_Estado_Cbte IN (1,2,4)
						   AND C.FECHA >= '''+  CONVERT(VARCHAR(8),@pFecha_Desde,112) + '''
					       AND C.FECHA < ''' + CONVERT(VARCHAR(8),DATEADD(dd,1,@pFecha_Hasta),112) + '''' 
	IF (@pid_producto <> '')
		SET @sql += '		
						AND I.id_Producto = ''' +  @pid_producto + ''''


	IF (@id_Sucursal <> 0 )
		SET @sql += ' AND T.Id_Sucursal = ' +  CONVERT(VARCHAR,@id_Sucursal)

	IF (@pid_familia <> 0 )
		SET @sql += ' AND P.Id_Familia = ' +   CONVERT(VARCHAR,@pid_familia)

	IF (@pid_cliente <> 0)
		SET @sql += ' AND C.Id_Cliente = ' +   CONVERT(VARCHAR,@pid_cliente) 

	SET @sql +=  ' 
					GROUP BY I.Id_Producto,P.Descripcion_Detallada 
					    HAVING Sum(I.Cantidad*T.Compromete_Factura) <> 0
					    ORDER BY Porcentaje Desc '


	EXEC (@sql)
	SELECT * FROM #Detalle

	DROP TABLE #Total
	DROP TABLE #Detalle


END	


 /* 
 
 CP_Ventas_por_Producto_Cli '20241201','20241214','','0','0','0',0

 CP_Ventas_por_Producto_Cli '20221201','20221214','','0','0','0','0'
 */
