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

CREATE PROCEDURE [dbo].[CP_CD_ES_Rpt_Anual_Ingresos]	@pAnio			SMALLINT,
														@pId_Accesos	VARCHAR(MAX)
AS
BEGIN

DECLARE @Cada_Semana				SMALLINT
DECLARE @Cant_Semanas_Anio			SMALLINT
DECLARE @Inicio_Anio				DATETIME
DECLARE @Inicio_Semana				DATETIME
DECLARE @Fin_Semana					DATETIME
DECLARE @Semana_Nro					VARCHAR(10)
DECLARE @Semana_Periodo				VARCHAR(15)
DECLARE @Cant_Ingresos_Lunes		INT
DECLARE @Cant_Ingresos_Martes		INT
DECLARE @Cant_Ingresos_Miercoles	INT
DECLARE @Cant_Ingresos_Jueves		INT
DECLARE @Cant_Ingresos_Viernes		INT
DECLARE @Cant_Ingresos_Sabados		INT
DECLARE @Cant_Ingresos_Domingos		INT
DECLARE @Cant_Total					INT
DECLARE @CadaAcceso					SMALLINT
DECLARE @SqlStr						NVARCHAR(MAX)
DECLARE @SqlStrCadaDia				NVARCHAR(MAX)
DECLARE @Parametros					NVARCHAR(100)

SET @Parametros = N'@Cant_IngresosOUT INT OUTPUT'; 

CREATE TABLE #CD_Rpt_Anual
(Semanas		VARCHAR(10),
Desde_Hasta		VARCHAR(15),
Lunes			INT,
Martes			INT,
Miercoles		INT,
Jueves			INT,
Viernes			INT,
Sabados			INT,
Domingos		INT,
Total			INT)


SET @Semana_Periodo				= ''
SET @Cada_Semana				= 0
SET @Cant_Semanas_Anio			= 52
SET @Cant_Ingresos_Lunes		= 0
SET @Cant_Ingresos_Martes		= 0
SET @Cant_Ingresos_Miercoles	= 0
SET @Cant_Ingresos_Jueves		= 0
SET @Cant_Ingresos_Viernes		= 0
SET @Cant_Ingresos_Sabados		= 0
SET @Cant_Ingresos_Domingos		= 0
SET @Cant_Total					= 0
SET @Inicio_Anio				= CONVERT(VARCHAR(4), @pAnio) + '0101'

WHILE @Cada_Semana < @Cant_Semanas_Anio
BEGIN   
	SET @Cada_Semana = @Cada_Semana + 1
	
	SET @Semana_Nro = 'Semana ' + RIGHT('00' + CONVERT(VARCHAR(10), @Cada_Semana), 2)
	PRINT @Semana_Nro

	IF(@Cada_Semana = 1)
	BEGIN
	   /*Línea modificada el 27/03/2019: se cambió para que detecte el primer día de la primera semana del año, incluyendo año anterior*/
		SET @Inicio_Semana	= (SELECT DATEADD(wk, 0, DATEADD(DAY, 1-DATEPART(WEEKDAY, @Inicio_Anio), DATEDIFF(dd, 0, @Inicio_Anio)))) --primera dia de la primera semana del año
	
		SET @Fin_Semana		= DATEADD(dd, 6, @Inicio_Semana)
	END
	ELSE
	BEGIN
		SET @Inicio_Semana	= DATEADD(dd, 1, @Fin_Semana)
		SET @Fin_Semana		= DATEADD(dd, 6, @Inicio_Semana)
	END

	SET @Semana_Periodo = CONVERT(VARCHAR(5), @Inicio_Semana, 103) + ' al ' + CONVERT(VARCHAR(5), @Fin_Semana, 103)

	IF(ISNULL(@pId_Accesos, '') = '')
	BEGIN
		SET @pId_Accesos = ''

		DECLARE curAccesosSelec CURSOR FOR 
		SELECT Id_Acceso FROM CD_Accesos

		OPEN curAccesosSelec
		FETCH NEXT FROM curAccesosSelec INTO @CadaAcceso
		WHILE @@FETCH_STATUS = 0
		BEGIN
			
			IF(@pId_Accesos = '')
			BEGIN
				SET @pId_Accesos = CONVERT(VARCHAR(10), @CadaAcceso)
			END
			ELSE
			BEGIN
				SET @pId_Accesos = @pId_Accesos + ',' + CONVERT(VARCHAR(10), @CadaAcceso)
			END

		FETCH NEXT FROM curAccesosSelec INTO @CadaAcceso
		END 
		CLOSE curAccesosSelec
		DEALLOCATE curAccesosSelec
		
	END

	DECLARE @Cant_Ingresos INT
	SET @SqlStr = 'SELECT @Cant_IngresosOUT = COUNT(*) FROM CD_ES WHERE Tipo = ''E'' AND Resultado = ''S'' AND Id_Acceso IN (' + @pId_Accesos +')  AND Fecha >= ''' + REPLACE(CONVERT(VARCHAR(10), @Inicio_Semana, 102), '.', '') + ''' AND Fecha < DATEADD(dd, 1, ''' + REPLACE(CONVERT(VARCHAR(10), @Fin_Semana, 102), '.', '') + ''') '

	/*LUNES*/
	SET @SqlStrCadaDia		= @SqlStr + 'AND (DATENAME(dw, Fecha) = ''Lunes'' OR DATENAME(dw, Fecha) = ''Monday'')'
	EXECUTE sp_executesql @SqlStrCadaDia, @Parametros, @Cant_IngresosOUT = @Cant_Ingresos OUTPUT

	SET @Cant_Ingresos_Lunes = @Cant_Ingresos
	PRINT 'Cant Ingresos Lunes: ' + CONVERT(VARCHAR(10), @Cant_Ingresos_Lunes)

	/*MARTES*/
	SET @SqlStrCadaDia		= @SqlStr + 'AND (DATENAME(dw, Fecha) = ''Martes'' OR DATENAME(dw, Fecha) = ''Tuesday'')'
	EXECUTE sp_executesql @SqlStrCadaDia, @Parametros, @Cant_IngresosOUT = @Cant_Ingresos OUTPUT

	SET @Cant_Ingresos_Martes = @Cant_Ingresos
	PRINT 'Cant Ingresos Martes: ' + CONVERT(VARCHAR(10), @Cant_Ingresos_Martes)

	/*MIERCOLES*/
	SET @SqlStrCadaDia		= @SqlStr + 'AND (DATENAME(dw, Fecha) = ''Miércoles'' OR DATENAME(dw, Fecha) = ''Wednesday'')'
	EXECUTE sp_executesql @SqlStrCadaDia, @Parametros, @Cant_IngresosOUT = @Cant_Ingresos OUTPUT

	SET @Cant_Ingresos_Miercoles = @Cant_Ingresos
	PRINT 'Cant Ingresos Miercoles: ' + CONVERT(VARCHAR(10), @Cant_Ingresos_Miercoles)

	/*JUEVES*/
	SET @SqlStrCadaDia		= @SqlStr + 'AND (DATENAME(dw, Fecha) = ''Jueves'' OR DATENAME(dw, Fecha) = ''Thursday'')'
	EXECUTE sp_executesql @SqlStrCadaDia, @Parametros, @Cant_IngresosOUT = @Cant_Ingresos OUTPUT

	SET @Cant_Ingresos_Jueves = @Cant_Ingresos
	PRINT 'Cant Ingresos Jueves: ' + CONVERT(VARCHAR(10), @Cant_Ingresos_Jueves)


	/*VIERNES*/
	SET @SqlStrCadaDia		= @SqlStr + 'AND (DATENAME(dw, Fecha) = ''Viernes'' OR DATENAME(dw, Fecha) = ''Friday'')'
	EXECUTE sp_executesql @SqlStrCadaDia, @Parametros, @Cant_IngresosOUT = @Cant_Ingresos OUTPUT

	SET @Cant_Ingresos_Viernes = @Cant_Ingresos
	PRINT 'Cant Ingresos Viernes: ' + CONVERT(VARCHAR(10), @Cant_Ingresos_Viernes)

	/*SABADO*/
	SET @SqlStrCadaDia		= @SqlStr + 'AND (DATENAME(dw, Fecha) = ''Sábado'' OR DATENAME(dw, Fecha) = ''Saturday'')'
	EXECUTE sp_executesql @SqlStrCadaDia, @Parametros, @Cant_IngresosOUT = @Cant_Ingresos OUTPUT

	SET @Cant_Ingresos_Sabados = @Cant_Ingresos
	PRINT 'Cant Ingresos Sabados: ' + CONVERT(VARCHAR(10), @Cant_Ingresos_Sabados)

	/*DOMIGO*/
	SET @SqlStrCadaDia		= @SqlStr + 'AND (DATENAME(dw, Fecha) = ''Domingo'' OR DATENAME(dw, Fecha) = ''Sunday'')'
	EXECUTE sp_executesql @SqlStrCadaDia, @Parametros, @Cant_IngresosOUT = @Cant_Ingresos OUTPUT

	SET @Cant_Ingresos_Domingos = @Cant_Ingresos
	PRINT 'Cant Ingresos Domingos: ' + CONVERT(VARCHAR(10), @Cant_Ingresos_Domingos)

	/*TOTAL SEMANAL*/
	SET @Cant_Total = @Cant_Ingresos_Lunes + @Cant_Ingresos_Martes + @Cant_Ingresos_Miercoles + @Cant_Ingresos_Jueves + @Cant_Ingresos_Viernes + @Cant_Ingresos_Sabados + @Cant_Ingresos_Domingos
	PRINT 'Cant Total en la semana: ' + CONVERT(VARCHAR(10), @Cant_Total)

	INSERT INTO #CD_Rpt_Anual
	(Semanas,	Desde_Hasta,
	Lunes,		Martes,		Miercoles,
	Jueves,		Viernes,	Sabados,
	Domingos,	Total)
	VALUES
	(@Semana_Nro,			@Semana_Periodo,
	@Cant_Ingresos_Lunes,	@Cant_Ingresos_Martes,		@Cant_Ingresos_Miercoles,
	@Cant_Ingresos_Jueves,	@Cant_Ingresos_Viernes,		@Cant_Ingresos_Sabados,
	@Cant_Ingresos_Domingos,@Cant_Total)
END

SELECT * FROM #CD_Rpt_Anual

DROP TABLE #CD_Rpt_Anual
END