IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'dbo.[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


					
BEGIN 

   SELECT ID_UNID_NEGOCIO INTO #UN FROM Empresas_Unid_Negocios 
   SELECT ID_FAMILIA INTO #FAMILIAS FROM Prod_Familias 
   SELECT ID_SUCURSAL INTO #SUCURSALES FROM EMPRESAS_SUC 
   
   
   SELECT * INTO #PRODUCTOS FROM PRODUCTOS WHERE 0=1
   
   IF @pid_producto <> ''
      BEGIN
          INSERT INTO #PRODUCTOS SELECT * FROM PRODUCTOS WHERE Id_Producto = @pid_producto 
      END
     ELSE
       BEGIN
     
          SELECT DISTINCT(I.ID_PRODUCTO) AS ID_PRODUCTO 
                 INTO #PROD_ID 
                 FROM Cbtes_Items I, CBTES C 
                 WHERE C.Id_Trans = I.Id_Trans 
                   AND C.FECHA >= @pFecha_Desde 
                   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
                   AND I.Id_Producto is not null     
     
           INSERT INTO #PRODUCTOS SELECT P.* FROM PRODUCTOS P, #PROD_ID I
                  WHERE I.Id_Producto  = P.ID_PRODUCTO

        END
        
   SELECT * INTO #CLIENTES FROM CLIENTES WHERE 0=1
   
   IF @pid_CLIENTE <> 0
      BEGIN
          INSERT INTO #CLIENTES SELECT * FROM CLIENTES WHERE Id_Cliente = @pid_CLIENTE 
      END
     ELSE
       BEGIN
     
          SELECT DISTINCT(C.ID_CLIENTE) AS ID_CLIENTE
                 INTO #CLI_ID 
                 FROM Cbtes_Items I, CBTES C 
                 WHERE C.Id_Trans = I.Id_Trans 
                   AND C.FECHA >= @pFecha_Desde 
                   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
                   AND C.Id_CLIENTE is not null     
     
           INSERT INTO #CLIENTES SELECT C.* FROM CLIENTES C, #CLI_ID I
                  WHERE I.Id_CLIENTE  = C.Id_CLIENTE
                
        END       
     
        

   IF @pid_familia <> 0
      DELETE #FAMILIAS WHERE ID_FAMILIA <> @pid_familia

   IF @id_Sucursal <> 0
      DELETE #SUCURSALES WHERE ID_SUCURSAL <> @id_Sucursal
      
      
/*
   SELECT ID_VENDEDOR INTO #VENDEDORES FROM VENDEDORES WHERE Activo = 1
   SELECT ID_PROVEEDOR INTO #PROVE FROM PROVEEDORES WHERE Activo = 1
   IF @pProveedor <> 0
      DELETE #PROVE WHERE ID_PROVEEDOR <> @pProveedor

   IF @pVendedor <> ''
      DELETE #VENDEDORES WHERE ID_VENDEDOR <> @pVendedor
*/     

	set @Venta_Total = 	(select sum(I.Imp_gravado*isnull(t.compromete_factura,0))
					   from cbtes c, cbtes_tipos t , Cbtes_items I, #PRODUCTOS P, #CLIENTES K,
					       #FAMILIAS F, #SUCURSALES S, #UN U     -- , #PROVE PR, #VENDEDORES V
					   where c.id_tipo_cbte  = t.id_tipo_cbte
					   AND T.Id_Unid_Negocio = U.Id_Unid_Negocio
					   And I.Id_trans = C.id_trans
					   And I.id_Producto = P.id_Producto
					   And P.id_Familia = F.Id_Familia
					  -- And P.Id_Proveedor = PR.Id_Proveedor
					   And T.Id_Sucursal = S.Id_Sucursal
					  -- and C.id_vendedor = V.id_vendedor
					   And c.Id_Estado_Cbte <> 3
					   AND C.Id_Cliente = k.Id_Cliente
   					   And T.Compromete_Factura in (1,-1)
					   AND C.FECHA >= @pFecha_Desde 
					   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
					   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN'))


 --  set @Id_Cliente = @pid_cliente
   
  
			Select I.Id_Producto as Producto,P.Descripcion_Detallada as Descripcion ,CAST(Sum(I.Cantidad*T.Compromete_Factura) AS INT) As Cantidad
			            ,sum(isnull(i.Imp_Gravado,0)*(1-C.Porc_Bonificacion/100)*isnull(t.compromete_factura,0)) as Importe,
						(sum(isnull(i.Imp_Gravado,0)*(1-C.Porc_Bonificacion/100)*isnull(t.compromete_factura,0)) / @Venta_Total) * 100 as Porcentaje
--             INTO #VENTAS
		     from cbtes c, cbtes_tipos t, Cbtes_Items I, #PRODUCTOS P, #UN U,
			           #FAMILIAS F, #SUCURSALES S, #CLIENTES K --, #PROVE PR, #VENDEDORES V
						   where c.id_tipo_cbte  = t.id_tipo_cbte
						   AND T.Id_Unid_Negocio = u.id_Unid_Negocio
						   and I.id_Trans = C.Id_Trans
						   And c.Id_Estado_Cbte <> 3
						   AND P.Id_Producto = I.Id_Producto
						   AND C.Id_Cliente = K.ID_CLIENTE
   						   And T.Compromete_Factura in (1,-1)
						   AND C.FECHA >= @pFecha_Desde 
						   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
					       And P.id_Familia = F.Id_Familia
					       --And P.Id_Proveedor = PR.Id_Proveedor
						   --and C.id_vendedor = V.id_vendedor
					       And T.Id_Sucursal = S.Id_Sucursal
						   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
						   group by I.Id_Producto,P.Descripcion_Detallada having Sum(I.Cantidad*T.Compromete_Factura) <> 0
						   order by Porcentaje Desc

/*
       select I.ID_PRODUCTO,ISNULL(sum(ISNULL(i.Cantidad,0)*isnull(t.compromete_Stock,1)),0) AS CANTIDAD
	       INTO #STOCK 
		   from cbtes c, cbtes_tipos t, cbtes_items i, #VENTAS V 
		   where c.id_tipo_cbte  = t.id_tipo_cbte
		   and I.Id_Trans = c.Id_Trans
		   And c.id_Estado_Cbte not in (0,3)
		  -- AND T.Id_Unid_Negocio = u.id_Unid_Negocio
		   and I.id_Producto = V.Producto 
		   and C.Id_Dep_Fisico < '90'
		   AND C.Id_Dep_Fisico NOT IN ('', '0')
		   And t.compromete_Stock in (1,-1)
		   AND I.FLAG_QA = 'A'
		   group by I.ID_PRODUCTO

       select I.ID_PRODUCTO,ISNULL(sum(ISNULL(i.Cantidad,0)*isnull(t.Compromete_Stock_Res,1)),0) AS CANTIDAD
		 INTO #RESERVAS
		 from cbtes c, cbtes_tipos t, cbtes_items i, #VENTAS V 
		   where c.id_tipo_cbte  = t.id_tipo_cbte
		   and I.Id_Trans = c.Id_Trans
		   And c.id_Estado_Cbte not in (0,3)
		   and C.Id_Dep_Fisico < '90'
		   AND C.Id_Dep_Fisico NOT IN ('', '0')
		   and I.id_Producto = V.Producto 
		   And t.Compromete_Stock_Res in (1,-1)
		   AND I.FLAG_QA = 'A'
		   group by I.ID_PRODUCTO
		   having sum(i.Cantidad*isnull(t.Compromete_Stock_Res,1)) > 0




         update #VENTAS set Stock = S.CANTIDAD FROM #VENTAS V, #STOCK S WHERE V.Producto = S.Id_Producto
         update #VENTAS set Stock = V.Stock - R.CANTIDAD FROM #VENTAS V, #RESERVAS R WHERE V.Producto = R.Id_Producto
*/
 --        SELECT * FROM #VENTAS  


 DROP TABLE #UN
 DROP TABLE #FAMILIAS  
 DROP TABLE #SUCURSALES
 -- DROP TABLE #VENTAS
 DROP TABLE #PRODUCTOS
 DROP TABLE #PROD_ID 
 DROP TABLE #CLIENTES
 DROP TABLE #CLI_ID 
 
-- DROP TABLE #STOCK
-- DROP TABLE #RESERVAS
-- DROP TABLE #PROVE  
 --DROP TABLE #VENDEDORES
END	


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

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