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

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

					
BEGIN 
 
   IF @pFamilia = 0
      BEGIN
		IF @pSucursal = 0
		   BEGIN
				   set @Venta_Total = 	(select sum((isnull(c.imp_Gravado,0)+isnull(c.imp_Gravado2,0)+isnull(c.imp_Gravado3,0)+isnull(c.imp_NoGravado,0)+isnull(c.imp_Exento,0))*isnull(t.compromete_factura,0))
				   from cbtes c, cbtes_tipos t 
				   where c.id_tipo_cbte  = t.id_tipo_cbte
				   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'))
			END
		  ELSE
			BEGIN
				   set @Venta_Total = 	(select sum((isnull(c.imp_Gravado,0)+isnull(c.imp_Gravado2,0)+isnull(c.imp_Gravado3,0)+isnull(c.imp_NoGravado,0)+isnull(c.imp_Exento,0))*isnull(t.compromete_factura,0))
				   from cbtes c, cbtes_tipos t 
				   where c.id_tipo_cbte  = t.id_tipo_cbte
				   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 T.ID_SUCURSAL = @pSucursal
				   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN'))
			END
	  END
	ELSE
	  BEGIN
		IF @pSucursal = 0
		   BEGIN
				   set @Venta_Total = 	(select sum(isnull(i.Imp_Gravado,0)*(1-C.Porc_Bonificacion/100)*isnull(t.compromete_factura,0))
				   from cbtes c, cbtes_tipos t, cbtes_items i, productos p
				   where c.id_tipo_cbte  = t.id_tipo_cbte
				   and i.id_trans = c.id_trans
				   and i.id_producto = p.id_producto
				   and p.Id_Familia = @pFamilia
				   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'))
			END
		  ELSE
			BEGIN
				   set @Venta_Total = 	(select sum(isnull(i.Imp_Gravado,0)*(1-C.Porc_Bonificacion/100)*isnull(t.compromete_factura,0))
				   from cbtes c, cbtes_tipos t, cbtes_items i, productos p
				   where c.id_tipo_cbte  = t.id_tipo_cbte
				   and i.id_trans = c.id_trans
				   and i.id_producto = p.id_producto
				   and p.Id_Familia = @pFamilia
				   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 T.ID_SUCURSAL = @pSucursal
				   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN'))
			END
	  END
  IF @pProveedor = 0
     BEGIN
			IF @pSucursal = 0
			   BEGIN
				   IF @pFamilia = 0
					  BEGIN
						select P.Id_Proveedor as Proveedor,PR.Razon_Social as Razon_Social ,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(I.Costo * V.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(I.Costo* V.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(I.Costo* V.Cotizacion,0) when 0 THEN 1 ELSE  I.Costo* V.Cotizacion END * I.cantidad * isnull(t.compromete_factura,0)),1) as Markup
							 from cbtes c, cbtes_tipos t, Cbtes_Items I, Productos P, Prod_Familias F,Valores_Monedas V,Proveedores PR
							   where c.id_tipo_cbte  = t.id_tipo_cbte
							   and P.Id_Moneda_C = V.Id_Moneda		
							   and P.id_familia = F.Id_Familia
							   and I.id_Trans = C.Id_Trans
							   And c.Id_Estado_Cbte <> 3
							   AND P.Id_Producto = I.Id_Producto
							   AND P.Id_Proveedor = PR.Id_Proveedor
   							   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')
							   group by P.Id_Proveedor,PR.Razon_Social 
							   having Sum(I.Cantidad*T.Compromete_Factura) <> 0
							   order by Porcentaje Desc
					   END
					ELSE 
					   BEGIN
						select P.Id_Proveedor as Proveedor,PR.Razon_Social as Razon_Social ,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(I.Costo * V.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(I.Costo* V.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(I.Costo* V.Cotizacion,0) when 0 THEN 1 ELSE  I.Costo* V.Cotizacion END * I.cantidad * isnull(t.compromete_factura,0)),1) as Markup
							 from cbtes c, cbtes_tipos t, Cbtes_Items I, Productos P, Prod_Familias F,Valores_Monedas V,Proveedores PR
							   where c.id_tipo_cbte  = t.id_tipo_cbte
							   and P.Id_Moneda_C = V.Id_Moneda		
							   and I.id_Trans = C.Id_Trans
		   					   And P.id_familia = F.Id_Familia
							   And c.Id_Estado_Cbte <> 3
							   AND P.Id_Producto = I.Id_Producto
							   AND P.Id_Proveedor = PR.Id_Proveedor
   							   And T.Compromete_Factura in (1,-1)
							   AND C.FECHA >= @pFecha_Desde 
							   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
							   AND P.ID_FAMILIA = @pFamilia
							   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
							   group by P.Id_Proveedor,PR.Razon_Social  
							   having Sum(I.Cantidad*T.Compromete_Factura) <> 0
							   order by Porcentaje Desc
					   END
					END
				ELSE
				   IF @pFamilia = 0
					  BEGIN
						select P.Id_Proveedor as Proveedor,PR.Razon_Social as Razon_Social  ,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(I.Costo * V.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(I.Costo* V.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(I.Costo* V.Cotizacion,0) when 0 THEN 1 ELSE  I.Costo* V.Cotizacion END * I.cantidad * isnull(t.compromete_factura,0)),1) as Markup
							 from cbtes c, cbtes_tipos t, Cbtes_Items I, Productos P, Prod_Familias F,Valores_Monedas V,Proveedores PR
							   where c.id_tipo_cbte  = t.id_tipo_cbte
							   and P.Id_Moneda_C = V.Id_Moneda		
							   and I.id_Trans = C.Id_Trans
							   and P.id_familia = F.Id_Familia
							   AND P.Id_Proveedor = PR.Id_Proveedor
							   And c.Id_Estado_Cbte <> 3
							   AND P.Id_Producto = I.Id_Producto
							   AND T.ID_SUCURSAL = @pSucursal
   							   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')
							   group by P.Id_Proveedor,PR.Razon_Social 
							   having Sum(I.Cantidad*T.Compromete_Factura) <> 0
							   order by Porcentaje Desc
					   END
					ELSE 
					   BEGIN
						select P.Id_Proveedor as Proveedor,PR.Razon_Social as Razon_Social ,Sum(I.Cantidad*T.Compromete_Factura) 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(I.Costo * V.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(I.Costo* V.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(I.Costo* V.Cotizacion,0) when 0 THEN 1 ELSE  I.Costo* V.Cotizacion END * I.cantidad * isnull(t.compromete_factura,0)),1) as Markup
							 from cbtes c, cbtes_tipos t, Cbtes_Items I, Productos P, Prod_Familias F,Valores_Monedas V,Proveedores PR
							   where c.id_tipo_cbte  = t.id_tipo_cbte
							   and P.Id_Moneda_C = V.Id_Moneda		
							   and P.id_familia = F.Id_Familia
							   AND P.Id_Proveedor = PR.Id_Proveedor
							   and I.id_Trans = C.Id_Trans
							   And c.Id_Estado_Cbte <> 3
							   AND P.Id_Producto = I.Id_Producto
   							   And T.Compromete_Factura in (1,-1)
							   AND C.FECHA >= @pFecha_Desde 
							   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
							   AND T.ID_SUCURSAL = @pSucursal
							   AND P.ID_FAMILIA = @pFamilia
							   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
							   group by  P.Id_Proveedor,PR.Razon_Social 
							   having Sum(I.Cantidad*T.Compromete_Factura) <> 0
							   order by Porcentaje Desc
					   END
	       END
		ELSE
		   BEGIN
			IF @pSucursal = 0
			   BEGIN
				   IF @pFamilia = 0
					  BEGIN
						select P.Id_Proveedor as Proveedor,PR.Razon_Social as Razon_Social ,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(I.Costo * V.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(I.Costo* V.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(I.Costo* V.Cotizacion,0) when 0 THEN 1 ELSE  I.Costo* V.Cotizacion END * I.cantidad * isnull(t.compromete_factura,0)),1) as Markup
							 from cbtes c, cbtes_tipos t, Cbtes_Items I, Productos P, Prod_Familias F,Valores_Monedas V,Proveedores PR
							   where c.id_tipo_cbte  = t.id_tipo_cbte
							   and P.Id_Moneda_C = V.Id_Moneda		
							   and P.id_familia = F.Id_Familia
							   and p.id_proveedor = @pProveedor
							   AND P.Id_Proveedor = PR.Id_Proveedor
							   and I.id_Trans = C.Id_Trans
							   And c.Id_Estado_Cbte <> 3
							   AND P.Id_Producto = I.Id_Producto
   							   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')
							   group by  P.Id_Proveedor,PR.Razon_Social
							   having Sum(I.Cantidad*T.Compromete_Factura) <> 0
							   order by Porcentaje Desc
					   END
					ELSE 
					   BEGIN
						select P.Id_Proveedor as Proveedor,PR.Razon_Social as Razon_Social ,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(I.Costo * V.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(I.Costo* V.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(I.Costo* V.Cotizacion,0) when 0 THEN 1 ELSE  I.Costo* V.Cotizacion END * I.cantidad * isnull(t.compromete_factura,0)),1) as Markup
							 from cbtes c, cbtes_tipos t, Cbtes_Items I, Productos P, Prod_Familias F,Valores_Monedas V,Proveedores PR
							   where c.id_tipo_cbte  = t.id_tipo_cbte
							   and P.Id_Moneda_C = V.Id_Moneda		
							   and I.id_Trans = C.Id_Trans
		   					   And P.id_familia = F.Id_Familia
							   AND P.Id_Proveedor = PR.Id_Proveedor
							   And c.Id_Estado_Cbte <> 3
							   AND P.Id_Producto = I.Id_Producto
   							   And T.Compromete_Factura in (1,-1)
							   AND C.FECHA >= @pFecha_Desde 
							   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
							   AND P.ID_FAMILIA = @pFamilia
							   and p.id_proveedor = @pProveedor
							   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
							   group by  P.Id_Proveedor,PR.Razon_Social 
							   having Sum(I.Cantidad*T.Compromete_Factura) <> 0
							   order by Porcentaje Desc
					   END
					END
				ELSE
				   IF @pFamilia = 0
					  BEGIN
						select P.Id_Proveedor as Proveedor,PR.Razon_Social as Razon_Social ,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(I.Costo * V.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(I.Costo* V.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(I.Costo* V.Cotizacion,0) when 0 THEN 1 ELSE  I.Costo* V.Cotizacion END * I.cantidad * isnull(t.compromete_factura,0)),1) as Markup
							 from cbtes c, cbtes_tipos t, Cbtes_Items I, Productos P, Prod_Familias F,Valores_Monedas V,Proveedores PR
							   where c.id_tipo_cbte  = t.id_tipo_cbte
							   and P.Id_Moneda_C = V.Id_Moneda		
							   and I.id_Trans = C.Id_Trans
							   and P.id_familia = F.Id_Familia
							   AND P.Id_Proveedor = PR.Id_Proveedor
							   And c.Id_Estado_Cbte <> 3
							   AND P.Id_Producto = I.Id_Producto
							   AND T.ID_SUCURSAL = @pSucursal
							   and p.id_proveedor = @pProveedor
   							   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')
							   group by  P.Id_Proveedor,PR.Razon_Social 
							   having Sum(I.Cantidad*T.Compromete_Factura) <> 0
							   order by Porcentaje Desc
					   END
					ELSE 
					   BEGIN
						select P.Id_Proveedor as Proveedor,PR.Razon_Social as Razon_Social ,Sum(I.Cantidad*T.Compromete_Factura) 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(I.Costo * V.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(I.Costo* V.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(I.Costo* V.Cotizacion,0) when 0 THEN 1 ELSE  I.Costo* V.Cotizacion END * I.cantidad * isnull(t.compromete_factura,0)),1) as Markup
							 from cbtes c, cbtes_tipos t, Cbtes_Items I, Productos P, Prod_Familias F,Valores_Monedas V,Proveedores PR
							   where c.id_tipo_cbte  = t.id_tipo_cbte
							   and P.Id_Moneda_C = V.Id_Moneda
							   and P.id_familia = F.Id_Familia
							   AND P.Id_Proveedor = PR.Id_Proveedor
							   and I.id_Trans = C.Id_Trans
							   And c.Id_Estado_Cbte <> 3
							   AND P.Id_Producto = I.Id_Producto
   							   And T.Compromete_Factura in (1,-1)
							   AND C.FECHA >= @pFecha_Desde 
							   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
							   AND T.ID_SUCURSAL = @pSucursal
							   and p.id_proveedor = @pProveedor
							   AND P.ID_FAMILIA = @pFamilia
							   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
							   group by  P.Id_Proveedor,PR.Razon_Social 
							   having Sum(I.Cantidad*T.Compromete_Factura) <> 0
							   order by Porcentaje Desc
					   END

		   END
   END


 /* 

SP_Ventas_por_Proveedor '20200801','20200831',154,0,0

SP_Ventas_por_Proveedor '20200801','20200831',0,0,0

SP_Ventas_por_Proveedor '20200801','20200831',0,0,141


 FIN */