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

CREATE PROCEDURE [dbo].[CP_Ventas_por_Cliente]
	@pFecha_Desde			DATETIME,
	@pFecha_Hasta			DATETIME,
	@pTipoResumen           CHAR(1),
	@pId_Sucursal           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 @pId_Sucursal = 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.Id_Sucursal = @pId_Sucursal
   	       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


IF @pId_Sucursal = 0
   BEGIN 
	IF @pTipoResumen = 'D'
	   BEGIN
		select convert(nvarchar,c.fecha,112) as Periodo,C.Id_Cliente,K.Razon_Social,
		     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)) as Importe, 
		    (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)) / @Venta_Total) * 100 as Porcentaje
			 from cbtes c, cbtes_tipos t, Clientes K
			   where c.id_tipo_cbte  = t.id_tipo_cbte
			   and c.Id_Cliente = K.Id_Cliente
			   And c.Id_Estado_Cbte <> 3
   			   And T.Compromete_Factura in (1,-1)
			   AND ISNULL(C.ID_CLIENTE,0) <> 0
			   AND C.FECHA >= @pFecha_Desde 
			   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
			   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
			   group by convert(nvarchar,c.fecha,112),C.Id_Cliente,K.Razon_Social 
			   HAVING 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)) <> 0
			   order by Convert(nvarchar,c.fecha,112),Porcentaje Desc
	   END
	   
	IF @pTipoResumen = 'M'
	   BEGIN

		select substring(convert(nvarchar,c.fecha,112),1,6)+'01' as Periodo,C.Id_Cliente,K.Razon_Social,
		     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)) as Importe, 
		    (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)) / @Venta_Total) * 100 as Porcentaje
		     from cbtes c, cbtes_tipos t, Clientes K
			   where c.id_tipo_cbte  = t.id_tipo_cbte
			   and c.Id_Cliente = K.Id_Cliente
			   And c.Id_Estado_Cbte <> 3
 			   And T.Compromete_Factura in (1,-1)
			   AND ISNULL(C.ID_CLIENTE,0) <> 0
			   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
			   AND C.FECHA >= @pFecha_Desde 
			   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
			   group by substring(convert(nvarchar,c.fecha,112),1,6)+'01',C.Id_Cliente,K.Razon_Social 
			   HAVING 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)) <> 0
			   order by substring(convert(nvarchar,c.fecha,112),1,6)+'01',Porcentaje Desc
	   END
	IF @pTipoResumen = 'A'
	   BEGIN

		select substring(convert(nvarchar,c.fecha,112),1,4)+'0101' As Periodo,C.Id_Cliente,K.Razon_Social,
		     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)) as Importe, 
		    (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)) / @Venta_Total) * 100 as Porcentaje
	           from cbtes c, cbtes_tipos t, Clientes K 
			   where c.id_tipo_cbte  = t.id_tipo_cbte
			   and c.Id_Cliente = K.Id_Cliente
			   And c.Id_Estado_Cbte <> 3
 			   And T.Compromete_Factura in (1,-1)
			   AND ISNULL(C.ID_CLIENTE,0) <> 0
			   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
			   AND C.FECHA >= @pFecha_Desde 
			   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
			   group by substring(convert(nvarchar,c.fecha,112),1,4)+'0101',C.Id_Cliente,K.Razon_Social 
			   HAVING 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)) <> 0
			   order by substring(convert(nvarchar,c.fecha,112),1,4)+'0101',Porcentaje DESC
		END
	END 

IF @pId_Sucursal <> 0
   BEGIN
	IF @pTipoResumen = 'D'
	   BEGIN

		select C.FECHA as Periodo,C.Id_Cliente,K.Razon_Social,
		     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)) as Importe, 
		    (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)) / @Venta_Total) * 100 as Porcentaje
			 from cbtes c, cbtes_tipos t, Clientes K
			   where c.id_tipo_cbte  = t.id_tipo_cbte
			   and c.Id_Cliente = K.Id_Cliente
			   And c.Id_Estado_Cbte <> 3
   			   And T.Compromete_Factura in (1,-1)
			   AND ISNULL(C.ID_CLIENTE,0) <> 0
			   AND T.ID_SUCURSAL = @pId_Sucursal
			   AND C.FECHA >= @pFecha_Desde 
			   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
			   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
			   group by c.fecha,C.Id_Cliente,K.Razon_Social 
			   HAVING 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)) <> 0
			   order by c.fecha,Porcentaje Desc
	   END
	IF @pTipoResumen = 'M'
	   BEGIN

		select substring(convert(nvarchar(10),c.fecha,112),1,6)+'01' as Periodo,C.Id_Cliente,K.Razon_Social,
		     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)) as Importe, 
		    (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)) / @Venta_Total) * 100 as Porcentaje
	    	from cbtes c, cbtes_tipos t, Clientes K
			   where c.id_tipo_cbte  = t.id_tipo_cbte
			   and c.Id_Cliente = K.Id_Cliente
			   And c.Id_Estado_Cbte <> 3
 			   And T.Compromete_Factura in (1,-1)
			   AND ISNULL(C.ID_CLIENTE,0) <> 0
			   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
			   AND T.ID_SUCURSAL = @pId_Sucursal
			   AND C.FECHA >= @pFecha_Desde 
			   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
			   group by substring(convert(nvarchar(10),c.fecha,112),1,6)+'01',C.Id_Cliente,K.Razon_Social  
			   HAVING 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)) <> 0
			   order by substring(convert(nvarchar(10),c.fecha,112),1,6)+'01',Porcentaje Desc
	   END
	IF @pTipoResumen = 'A'
	   BEGIN

		select substring(convert(nvarchar(10),c.fecha,112),1,4)+'0101' As Periodo,C.Id_Cliente,K.Razon_Social,
		     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)) as Importe, 
		    (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)) / @Venta_Total) * 100 as Porcentaje
		    from cbtes c, cbtes_tipos t, Clientes K
			   where c.id_tipo_cbte  = t.id_tipo_cbte
			   and c.Id_Cliente = K.Id_Cliente
			   And c.Id_Estado_Cbte <> 3
 			   And T.Compromete_Factura in (1,-1)
			   AND ISNULL(C.ID_CLIENTE,0) <> 0
			   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
			   AND T.ID_SUCURSAL = @pId_Sucursal
			   AND C.FECHA >= @pFecha_Desde 
			   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
			   group by substring(convert(nvarchar(10),c.fecha,112),1,4)+'0101',C.Id_Cliente,K.Razon_Social  
			   HAVING 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)) <> 0
			   order by substring(convert(nvarchar(10),c.fecha,112),1,4)+'0101',Porcentaje DESC
		END
	END 
   END
 
 /* 

 [cP_Ventas_por_Cliente] '20200801','20200831','M',0
 [cP_Ventas_por_Cliente] '20200101','20201231','A',0
 [cP_Ventas_por_Cliente] '20200801','20200831','D',0

 FIN */