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

CREATE  PROCEDURE [dbo].[CP_Ventas_por_Objetivo]
	@pFecha_Desde			DATETIME,
	@pFecha_Hasta			DATETIME,
	@pSucursal              INT,
	@pImp_Objetivo          DECIMAL(14,2),
	@pCant_dias             SMALLINT

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
		,@Fecha_Aux         DATETIME
		,@D                 SMALLINT




DECLARE	        @objetivo_dia DECIMAL(16,2),
			    @Vta_Acum DECIMAL(16,2),
				@cumplido DECIMAL(16,2),
				@diferencia DECIMAL(16,2),
				@saldo DECIMAL(16,2),
				@valor_diario DECIMAL(16,2),
				@vta_proyectada DECIMAL(16,2),
				@cantidad_dias INT,
				@dia smallint

    
	IF @pImp_Objetivo = 0
	   BEGIN
	       IF @pSucursal = 0   
		      BEGIN
     	         SET @pImp_Objetivo = (SELECT SUM(MONTO_VENTAS) FROM OBJETIVOS WHERE Periodo >= @pFecha_Desde and Periodo < dateadd(dd,1,@pFecha_Hasta) )
	          END
			ELSE
		      BEGIN
     	         SET @pImp_Objetivo = (SELECT SUM(MONTO_VENTAS) FROM OBJETIVOS WHERE Periodo >= @pFecha_Desde and Periodo < dateadd(dd,1,@pFecha_Hasta) AND Id_sucursal = @pSucursal)
	          END			  
      END

    SET  @dia = 0
	SET  @Vta_Acum = 0
	SET  @saldo = @pImp_Objetivo
				
  CREATE Table #RESUMEN  (
				periodo 		DATE,
				objetivo	   	DECIMAL(16,2),
				vta_dia         DECIMAL(16,2),
			    vta_acum	   	DECIMAL(16,2),
				cumplido	   	DECIMAL(16,2),
				diferencia      DECIMAL(16,2),
				saldo   	   	DECIMAL(16,2),	
				valor_diario	DECIMAL(16,2),
				vta_proy	   	DECIMAL(16,2)
				)	


BEGIN  

      SET @FECHA_AUX = @pFecha_Desde 
      SET @D = 0
      WHILE @FECHA_AUX < @pFecha_Hasta
	    BEGIN
		   SET @FECHA_AUX = dateadd(dd,@D,@FECHA_AUX)

		   SET  @EXISTE = ISNULL((SELECT COUNT(*) FROM Tab_Feriados WHERE DATEPART(DD,@FECHA_AUX) = Dia AND DATEPART(MM,@FECHA_AUX) = Mes),0)

		   IF DATEPART(DW,@FECHA_AUX) <> 6 AND  DATEPART(DW,@FECHA_AUX) <> 7 AND @EXISTE = 0
              INSERT INTO #RESUMEN VALUES (@FECHA_AUX,0,0,0,0,0,0,0,0)

		   SET @D = 1
        END

  SET @pCant_dias = ISNULL((SELECT COUNT(*) FROM #RESUMEN),26)


  DECLARE RESUMENCursor CURSOR FOR SELECT PERIODO FROM #RESUMEN
	OPEN RESUMENCursor

	FETCH NEXT FROM RESUMENCursor INTO @Periodo 
	SET @CursorOpen = 0	
	SET @UltError = 0 
	SET @dia = 0
	WHILE @@FETCH_STATUS=0 AND @UltError  = 0
	    BEGIN
		      SET  @dia = @dia+1
	          SET  @objetivo_dia = (@pImp_Objetivo / @pCant_dias) * @dia
			  UPDATE #RESUMEN SET Objetivo = @objetivo_dia where periodo = @Periodo
			  FETCH NEXT FROM RESUMENCursor INTO @Periodo 
		 END
	CLOSE RESUMENCursor
	DEALLOCATE RESUMENCursor

	
IF @pSucursal = 0
   BEGIN
    DECLARE TagCbtesCursor CURSOR FOR 
	select c.fecha as Periodo,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 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')
		   group by c.fecha
		   order by c.fecha
   END
ELSE
   BEGIN
   DECLARE TagCbtesCursor CURSOR FOR 
   select  c.fecha as Periodo,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 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 = @pSucursal
 		   And T.Compromete_Factura in (1,-1)
		   AND C.ID_TIPO_CBTE NOT IN ('CFIN','DFIN')
		   AND C.FECHA >= @pFecha_Desde 
		   AND C.FECHA < dateadd(dd,1,@pFecha_Hasta)
		   group by c.Fecha 
		   order by C.Fecha 
   END


	OPEN TagCbtesCursor

    SET  @dia = 0
	FETCH NEXT FROM TagCbtesCursor INTO @Periodo,@Importe 
	SET @CursorOpen = 0	
	SET @UltError = 0
	WHILE @@FETCH_STATUS=0 AND @UltError  = 0
	BEGIN
	   SET  @dia = @dia+1

       SET  @objetivo_dia = (select objetivo from #RESUMEN where Periodo = @Periodo)

	   SET  @Vta_Acum = @Vta_Acum + @Importe 

	   SET  @cumplido = (@Vta_Acum / @objetivo_dia) * 100

	   SET	@diferencia =  @objetivo_dia - @Vta_Acum

	   SET	@saldo = @saldo -  @Importe

	   IF  (@pCant_dias-@dia) <> 0
	        BEGIN
	          SET	@valor_diario = @saldo / (@pCant_dias-@dia)
            END
		ELSE
	        BEGIN
	          SET	@valor_diario = 0
            END

	   SET	@vta_proyectada = @pImp_Objetivo * (@cumplido/100)     

		UPDATE #RESUMEN SET  
				vta_dia = @Importe,     
				vta_acum = @Vta_Acum,
				cumplido = @cumplido,	   
				diferencia = @diferencia,      
				saldo = @saldo,   	    
				valor_diario = @valor_diario,	 
				vta_proy = @vta_proyectada	    
             where Periodo = @Periodo

	UPDATE #RESUMEN SET  
				vta_acum = @Vta_Acum,
				cumplido = @cumplido	   
                where Periodo > @Periodo
        
   		FETCH NEXT FROM TagCbtesCursor INTO @Periodo,@Importe 

	END
	CLOSE TagCbtesCursor
	DEALLOCATE TagCbtesCursor

		/*FIN */
		

END 

 SELECT * FROM #RESUMEN ORDER BY 1

DROP TABLE #RESUMEN


 /* 

 SP_Ventas_por_Objetivo '20200901','20200930',0,10000000,0

 SP_Ventas_por_Objetivo '20200901','20200930',0,0,0


SELECT SUM(MONTO_VENTAS) FROM OBJETIVOS WHERE Periodo >= '20200901' and Periodo < '20201001'



 FIN */
