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

CREATE  PROCEDURE [dbo].[CP_Ventas_por_Producto]
	@pFecha_Desde			DATETIME,
	@pFecha_Hasta			DATETIME,
	@pFamilia               Int,
	@pSucursal              Int,
	@pProveedor             Int,
	@pVendedor              VARCHAR(20)
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 
		,@Id_sucursal	    SMALLINT
		,@Existe      	    SMALLINT
		,@Venta_Total       DECIMAL(16,2)

					
BEGIN 

   SELECT * INTO #UN FROM Empresas_Unid_Negocios

   SELECT ID_PROVEEDOR INTO #PROVE FROM PROVEEDORES WHERE Activo = 1
   SELECT ID_FAMILIA INTO #FAMILIAS FROM Prod_Familias WHERE Activo = 1
   SELECT ID_SUCURSAL INTO #SUCURSALES FROM EMPRESAS_SUC WHERE ACTIVO = 1 and Id_Sucursal < 90 and Id_Sucursal > 1
   SELECT ID_VENDEDOR INTO #VENDEDORES FROM VENDEDORES WHERE Activo = 1

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

   IF @pSucursal <> 0
      DELETE #SUCURSALES WHERE ID_SUCURSAL <> @pSucursal

   IF @pProveedor <> 0
      DELETE #PROVE WHERE ID_PROVEEDOR <> @pProveedor

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

	set @Venta_Total = 	(select sum(I.Imp_Final*isnull(t.compromete_factura,0))
					   from cbtes c, cbtes_tipos t , Cbtes_items I, Productos P, #UN U,
					       #FAMILIAS F, #SUCURSALES S, #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 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'))
					   
		--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
		--				,sum(isnull(I.Costo,0) * M.Cotizacion * I.cantidad * isnull(t.compromete_factura,0)) as Costo
		--				,sum(isnull(I.Imp_Gravado,0)*(1-C.Porc_Bonificacion/100)*isnull(t.compromete_factura,0)) - sum(isnull(I.Costo,0)* M.Cotizacion* I.cantidad * isnull(t.compromete_factura,0)) as Renta
		--				,sum(isnull(I.Imp_Gravado,0)*(1-C.Porc_Bonificacion/100)*isnull(t.compromete_factura,0)) / isnull(sum(CASE ISNULL(isnull(I.Costo,0)* M.Cotizacion,0) when 0 THEN 1 ELSE  isnull(I.Costo,0)* M.Cotizacion END * I.cantidad * isnull(t.compromete_factura,0)),1) as Markup
  --           INTO #VENTAS
		--     from cbtes c, cbtes_tipos t, Cbtes_Items I, Productos P, #UN U,
		--	           #FAMILIAS F, #SUCURSALES S, #PROVE PR, #VENDEDORES V,Valores_Monedas M
		--				   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 P.Id_Moneda_C = M.Id_Moneda
  -- 						   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 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
     					,sum(isnull(I.cantidad * (P.Costo * M.Cotizacion) * t.compromete_factura,0))  as Costo
						,sum(isnull(I.Imp_Gravado,0)*(1-C.Porc_Bonificacion/100)*isnull(t.compromete_factura,0)) - sum(isnull(I.cantidad * (P.Costo * M.Cotizacion) * t.compromete_factura,0)) as Renta
						,sum(isnull(I.Imp_Gravado,0)*(1-C.Porc_Bonificacion/100)*isnull(t.compromete_factura,0)) / isnull(sum(CASE ISNULL(isnull(P.Costo,0)* M.Cotizacion,0) when 0 THEN 1 ELSE  (P.Costo * M.Cotizacion) END * I.cantidad * isnull(t.compromete_factura,0)),1) as Markup
             INTO #VENTAS
		     from cbtes c, cbtes_tipos t, Cbtes_Items I, Productos P, #UN U,
			           #FAMILIAS F, #SUCURSALES S, #PROVE PR, #VENDEDORES V,Valores_Monedas M
						   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 P.Id_Moneda_C = M.Id_Moneda
   						   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  

 END

 DROP TABLE #UN 
 DROP TABLE #PROVE  
 DROP TABLE #FAMILIAS  
 DROP TABLE #SUCURSALES
 DROP TABLE #VENDEDORES
 DROP TABLE #VENTAS
 
 --DROP TABLE #STOCK
 --DROP TABLE #RESERVAS
 /* 

CP_Ventas_por_Producto '20200801','20200831',154,0,141
CP_Ventas_por_Producto '20200801','20200831',0,0,141

CP_Ventas_por_Producto '20230101','20230131',0,0,0,'' 



 SELECT PRECIO_GRAV,COSTO,COSTO_MO,* FROM CBTES_ITEMS I, CBTES C 
 WHERE C.ID_TRANS = I.ID_TRANS AND C.ID_TIPO_CBTE IN ('FA25','FB25')
 AND C.ID_ESTADO_CBTE <> 3

  SELECT * FROM CBTES WHERE ID_TRANS = 9067826

  SELECT * FROM CBTES WHERE ID_CLIENTE = 33204653 ORDER BY ID_TRANS

 FIN */