
/****** Object:  StoredProcedure [dbo].[DSS_FRONT_Daily]    Script Date: 11/27/2014 15:21:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[DSS_FRONT_Daily]
(
	@Modo         INT, -- 1 - Gráfico, 0 - Tabla, 2 -- Actualizador
	@Ano          INT,
	@Moneda       INT,
	@JuegoDatos   INT,
	@IdDatos      INT,
	@FechaPronost DATE,
	@id_oper      INT = 0	
)
AS
BEGIN 

	/*
	 ----------------------------------------------------------------------------------
	 -> Forma correcta de comparar el ingreso total en el mes actual 
		Reportes Tradionales de FDK vs. Informe Diario vs. Informe Diario Anual:
	 ----------------------------------------------------------------------------------	
	 1. Tradicionales FDK: Pasado -> ESEX [Ing. Hosp + Ing. Otr] + 
	                       Presente y Futuro -> Pron. Ing [Total]
	 2. Informe Diario: Ingresos Habitaciones + Ingresos Extra
	 3. Informe Diario Anual: Ingreso Real + Ingreso Pronosticado.
	 ----------------------------------------------------------------------------------
	 */

	-- EXEC DSS_FRONT_Daily 0, 2015, 3, 1, 2, '2015-06-16', 0

	--Permite depurar caidas por durar mucho tiempo, ahi tiene 5 minutos de atraso.
	--WAITFOR DELAY '00:05'

    DECLARE @vSql     NVARCHAR(4000)
    DECLARE @NumError INT = 0, @MensajeError VARCHAR(255) = ''
	
	---------------------------------------------------------------------------------------------
	-- Declaración de variables y tablas temporales
	---------------------------------------------------------------------------------------------

	DECLARE @FechaHotelera     DATE, 
	        @FechaInicio       DATE,
	        @FechaInicioOri    DATE,
	        @FechaFinal        DATE,
	        @FechaI            DATE,
	        @HabOcupadas       INT,
	        @HabOcupadasDia    INT,
	        @HabOcupadasCPL    INT,
	        @HabOcupadasCPLDia INT,
	        @HabBloquedas      INT,
	        @HabBloquedasDia   INT,
	        @IngresosHabi      NUMERIC(21, 6),
	        @IngHabPronost     NUMERIC(21, 6),
	        @IngresosHospe     NUMERIC(21, 6),
	        @IngresosServ      NUMERIC(21, 6),
	        @IngresosExtra     NUMERIC(21, 6),
	        @Tasa              NUMERIC(13, 8),
	        @CodMoneda         CHAR(3),
	        @NumPersonas       INT,
	        @NumPersonasDia    INT,
	        @TotalHabi         INT,
	        @TotalPV           INT
	        
	DECLARE @Dummy NUMERIC(21, 2)
	
	CREATE TABLE #TempDatos
	(
		Fecha          DATE,
		TotalHabi      INT,
		HabOcupadas    INT,
		HabOcupadasCPL INT,
		PorcOcup       INT,
		HabBloquedas   INT,
		ADR            NUMERIC(18, 2),
		RevPAR         NUMERIC(18, 2),
		RevPOR         NUMERIC(18, 2),
		IngresosHab    NUMERIC(21, 6),
		IngresosExtra  NUMERIC(21, 6),
		IngHabPronost  NUMERIC(21, 6),
		NumPersonas    INT,
		NumPersonasFin INT,
		ADRPVEnc       VARCHAR(50),
		ADRPV          NUMERIC(19, 2),
		IngresosPVEnc  VARCHAR(50),
		IngresosPV     NUMERIC(19, 2),
		TotalPV        INT
	)
	
	CREATE TABLE #TempDatosFinal
	(
		Fecha          DATE,
		TotalHabi      INT,
		HabOcupadas    INT,
		HabOcupadasCPL INT,
		PorcOcup       INT,
		HabBloquedas   INT,
		ADR            NUMERIC(18, 2),
		RevPAR         NUMERIC(18, 2),
		RevPOR         NUMERIC(18, 2),
		IngresosHab    NUMERIC(21, 6),
		IngresosExtra  NUMERIC(21, 6),
		IngHabPronost  NUMERIC(21, 6),
		NumPersonas    INT,
		NumPersonasFin INT,
		ADRPVEnc       VARCHAR(50),
		ADRPV          NUMERIC(19, 2),
		IngresosPVEnc  VARCHAR(50),
		IngresosPV     NUMERIC(19, 2),
		Moneda         INT,
		Tasa           NUMERIC(13, 8),
		TotalPV        INT
	)
	
	EXEC dbo.Get_Fecha_Hotelera @FechaHotelera OUTPUT
	
	IF @Modo = 0 
	BEGIN
		SET @FechaPronost = @FechaHotelera
	END
	
	SELECT TOP 1 @Tasa      = tasa,
	             @CodMoneda = cod_mone
	FROM   SICLAMON
	WHERE  tasa  = 1
	
	IF @Tasa = 0 
	BEGIN
		SET @Tasa = 1
	END
	
	SET LANGUAGE ENGLISH
	
	SELECT @FechaInicio = CONVERT(DATE, CONVERT(VARCHAR(10), @Ano) + '-01-01')
	SELECT @FechaInicioOri = @FechaInicio
	SELECT @FechaFinal  = CONVERT(DATE, CONVERT(VARCHAR(10), @Ano) + '-12-31')
	
	SELECT @FechaInicio = ISNULL(DATEADD(DAY, 1, (SELECT MAX(dy.Fecha) 
	                                              FROM   HOTEDAILY dy
	                                              WHERE  YEAR(dy.Fecha) = @Ano
	                                                AND  id_oper = @id_oper)), 
	                             @FechaInicio)
	
	SET @FechaI = @FechaInicio
	
	SET @TotalHabi = (SELECT COUNT(*) FROM HOTEHABI WHERE eliminado = 0)
	
	---------------------------------------------------------------------------------------------
	-- Obtener los Puntos de Venta
	---------------------------------------------------------------------------------------------
	
	SELECT  IDENTITY(INT, 1, 1) AS Id,
	        base_datos
	INTO    #POSDATA
	FROM    IHSecurity..Datos
	WHERE   id_juego  = @JuegoDatos
		AND id_modulo = 3
		
	DECLARE @PosDBIni INT = (SELECT MIN(Id) FROM #POSDATA)
	DECLARE @PosDBFin INT = (SELECT MAX(Id) FROM #POSDATA)
	DECLARE @PosDBAct INT = @PosDBIni
	DECLARE @PosDB    CHAR(30) = ''
	
	CREATE TABLE #PVTAS
	(
		BaseDatos     CHAR(30),
		IdPuntoVenta  INT,
		CodPuntoVenta CHAR(5),
		PuntoVenta    CHAR(25)
	)
	
	WHILE @PosDBAct <= @PosDBFin
	BEGIN
	
		SET @PosDB = (SELECT base_datos FROM #POSDATA WHERE Id = @PosDBAct)
	
		SELECT  @vSql = 'INSERT INTO #PVTAS
						 SELECT ''{PosDB}''   AS BaseDatos,
		                        id_pvta       AS IdPuntoVenta,
		                        cod_pvta      AS CodPuntoVenta,
		                        desc_pvta     AS PuntoVenta
		                 FROM   {PosDB}..RESTPVTA
		                 WHERE  activo = 1 AND eliminado = 0'
		
		SET @vSql = REPLACE(@vSql, '{PosDB}', @PosDB)
		
		EXEC(@vSql)
	
		SET @PosDBAct = @PosDBAct + 1
	END
	
	SELECT IDENTITY(INT, 1, 1) AS Id, * INTO #PVTAS2 FROM #PVTAS
	
	--------------------------------------------------------------------------------------------
	-- Obtener los contratos que son CPL
	--------------------------------------------------------------------------------------------
	
	SELECT IDENTITY(INT, 1, 1) AS Id,
	       contrato
	INTO   #CPLS
	FROM   HOTECONT
	WHERE  ISNULL(TipoContrato, 0) = 1
	
	DECLARE @TotalCPL INT = (SELECT COUNT(*) FROM #CPLS) 
	
	DECLARE @ContCPL      VARCHAR(11) = ''
	DECLARE @CPLIni       INT = (SELECT ISNULL(MIN(Id), 0) FROM #CPLS)
	DECLARE @CPLFin       INT = (SELECT ISNULL(MAX(Id), 0) FROM #CPLS)
	DECLARE @CPLCont      INT = @CPLIni
	DECLARE @TotalOcupCPL INT = 0
	
	---------------------------------------------------------------------------------------------
	-- Obtener el pronóstico
	---------------------------------------------------------------------------------------------
	
	CREATE TABLE #Pronostico
	(
		cdia char(2),Dia Datetime,Reserv numeric(15,2),
		Ro_Al numeric(15,2),Re_Pen numeric(15,2),
		Ro_Pen numeric(15,2),Otr_Re numeric(15,2),
		Otr_Ro_Ag    numeric(15,2)
	)
	
	--DECLARE @FechaHoteleraTom DATE = DATEADD(dy, 1, @FechaHotelera)
	DECLARE @FechaHoteleraTom DATE = @FechaHotelera
	
	IF @FechaFinal >= @FechaHotelera
	BEGIN
		
		INSERT INTO #Pronostico
		EXEC Pronostico_Reservas @FechaHoteleraTom, @FechaFinal, 100, @CodMoneda, @id_oper, @Dummy OUTPUT

	END
	
	---------------------------------------------------------------------------------------------
	-- Comienza el ciclo principal
	---------------------------------------------------------------------------------------------
	
	WHILE @FechaI < DATEADD(DAY, 1, @FechaFinal)
	BEGIN
	
		-- Habitaciones Ocupadas
		
		--IF @FechaI <= @FechaHotelera
		IF @FechaI < @FechaHotelera
		BEGIN
		
			IF @id_oper = 0
			BEGIN
			
				SET @ContCPL = ''
				SET @CPLIni  = (SELECT ISNULL(MIN(Id), 0) FROM #CPLS)
				SET @CPLFin  = (SELECT ISNULL(MAX(Id), 0) FROM #CPLS)
				SET @CPLCont = @CPLIni
				SET @TotalOcupCPL = 0
				
				-- Habitaciones Ocupadas CPL
				
				IF @TotalCPL > 0
				BEGIN
				
					WHILE @CPLCont <= @CPLFin
					BEGIN
					
						SET @ContCPL = (SELECT contrato FROM #CPLS WHERE Id = @CPLCont)
					
						EXEC ex_Estancias_Habit_Fechas @FechaI, @FechaI, '', '', '', @ContCPL, '', -1, '', @HabOcupadasCPL OUTPUT
						
						SET @TotalOcupCPL = @TotalOcupCPL + @HabOcupadasCPL
						
						SET @CPLCont = @CPLCont + 1
						
					END
				
				END
			
				SET @HabOcupadasCPL = @TotalOcupCPL
				
				IF @FechaI = @FechaHotelera
				BEGIN
					SET @HabOcupadasCPLDia=0
					Execute Calc_Habit_Ocup_CPL_Hotel_Presente @FechaHotelera, @HabOcupadasCPLDia   output
					SET @HabOcupadasCPL = ISNULL(@HabOcupadasCPL, 0) + ISNULL(@HabOcupadasCPLDia, 0)
				END	
				
				-- Habitaciones Ocupadas
				
				EXEC ex_Estancias_Habit_Fechas @FechaI, @FechaI, '', '', '', '', '', -1, '', @HabOcupadas OUTPUT
				
				IF @FechaI = @FechaHotelera
				BEGIN
					SET @HabOcupadasDia=0
					Execute Calc_Habit_Ocup_Hotel_Presente @FechaHotelera, @HabOcupadasDia   output
					SET @HabOcupadas = ISNULL(@HabOcupadas, 0) + ISNULL(@HabOcupadasDia, 0)
				END	

				
				-- Habitaciones Bloquedas
				
				SET @HabBloquedas = (SELECT ge.habfo 
									 FROM       ESTAGENE ge 
									 INNER JOIN ESTADIAS di ON ge.id_dias = di.id_dias
									 WHERE  di.fecha = @FechaI)
									 
				IF @FechaI = @FechaHotelera
				BEGIN
					SET @HabBloquedasDia=0
					Execute Calc_Habit_Bloqueadas_Hotel_Presente @FechaHotelera, @HabBloquedasDia   output
					SET @HabBloquedas = ISNULL(@HabBloquedas, 0) + ISNULL(@HabBloquedasDia, 0)
				END	
									 
				-- Número de Personas
									 
				SET @NumPersonas = (SELECT SUM(al.a_estancia + al.n_estancia) 
		                        FROM       ESTAALOP al 
		                        INNER JOIN ESTADIAS di ON al.id_dias = di.id_dias
		                        WHERE  di.fecha = @FechaI)
		                        
		        IF @FechaI = @FechaHotelera
				BEGIN
					SET @NumPersonasDia=0
					Execute Calc_Clientes_Noche_Hotel @FechaHotelera, @NumPersonasDia   output
					SET @NumPersonas = ISNULL(@NumPersonas, 0) + ISNULL(@NumPersonasDia, 0)
				END	
			                     
			END
			                     
		    -- Ingresos Habitaciones
		    
		    EXEC DSS_Ingresos_Hospedaje_Fechas @FechaI, @FechaI, @Tasa, @id_oper, @IngresosHospe OUTPUT
		    
		    EXEC DSS_Ingresos_AyB_Fechas       @FechaI, @FechaI, @Tasa, @id_oper, @IngresosServ  OUTPUT
		    
		    SET @IngresosHabi = ISNULL(@IngresosHospe, 0) + ISNULL(@IngresosServ, 0)
		    
		    EXEC DSS_Ingresos_Otros_Fechas     @FechaI, @FechaI, @Tasa, @id_oper, @IngresosExtra OUTPUT
		    
		END
		ELSE
		BEGIN
			IF @Modo <> 2
			BEGIN
			
				IF @id_oper = 0
				BEGIN
			
					-- Habitaciones Ocupadas CPL
					
					SET @ContCPL = ''
					SET @CPLIni  = (SELECT ISNULL(MIN(Id), 0) FROM #CPLS)
					SET @CPLFin  = (SELECT ISNULL(MAX(Id), 0) FROM #CPLS)
					SET @CPLCont = @CPLIni
					SET @TotalOcupCPL = 0
					
            		EXEC DSS_Pronostico_Complementario_Futuro @FechaI, @TotalOcupCPL OUTPUT

					
					SET @HabOcupadasCPL = @TotalOcupCPL
					
					-- Habitaciones Ocupadas
					
					EXEC DSS_Pronostico_General_Futuro @FechaI, 7, @HabOcupadas OUTPUT
					
					-- Habitaciones Bloquedas
					
					EXEC DSS_Pronostico_General_Futuro @FechaI, 5, @HabBloquedas OUTPUT
					
					-- Número de Personas
				    
					EXEC DSS_Pronostico_General_Futuro @FechaI, 8, @NumPersonas OUTPUT
					
				END
					
				-- Ingresos Habitaciones
			    
				--EXEC Pronostico_Reservas @FechaI, @FechaI, 98, @CodMoneda, @IngresosHabi OUTPUT
				SELECT @IngresosHabi = (Reserv + Ro_Al + Re_Pen + Ro_Pen) 
				FROM   #Pronostico
				WHERE  Dia = @FechaI
				
				-- Ingresos Extra
				--EXEC Pronostico_Reservas @FechaI, @FechaI, 97, @CodMoneda, @IngresosExtra OUTPUT
				SELECT @IngresosExtra = (Otr_Re + Otr_Ro_Ag)
				FROM   #Pronostico
				WHERE  Dia = @FechaI
				
		    END
		END
		
		----------------------------------------------------------------------------------------
		-- Puntos de venta e inclusión de registros
		----------------------------------------------------------------------------------------
		
		DECLARE @PVIni INT = (SELECT MIN(Id) FROM #PVTAS2)
		DECLARE @PVFin INT = (SELECT MAX(Id) FROM #PVTAS2)
		DECLARE @PVAct INT = @PVIni
		DECLARE @PVDB  CHAR(30) = ''
		DECLARE @PVCod CHAR(5) = ''
		DECLARE @PV    CHAR(25) = ''
		DECLARE @PVIng NUMERIC(19, 2) = 0
		
		SET @TotalPV = @PVFin
		
		IF @TotalPV = 0
			SET @TotalPV = 1
		
		-- Datos para no calcular de nuevo por cada PV
		
		DECLARE @HabOcupadasFin   INT = 0,
		        @PorcOcup         INT = 0,
		        @HabBloquedasFin  INT = 0
		DECLARE @ADR              NUMERIC(18, 2) = 0,
				@RevPOR           NUMERIC(18, 2) = 0
		DECLARE @RevPAR           NUMERIC(18, 2) = 0,
		        @NumPersonasFin   INT = 0
		        
		IF @id_oper = 0
		BEGIN
		        
			SET @HabOcupadasFin   = ISNULL(@HabOcupadas, 0) - ISNULL(@HabOcupadasCPL, 0)
			SET @PorcOcup         = CASE ISNULL(@TotalHabi, 0)  WHEN 0 THEN 0 
												 ELSE (ISNULL(@HabOcupadas, 0) * 100) / @TotalHabi
												 END
			SET @HabBloquedasFin  = ISNULL(@HabBloquedas, 0)
			SET @ADR              = CASE ISNULL(@HabOcupadasFin, 0) WHEN 0 THEN 0 
															ELSE ISNULL(@IngresosHabi, 0) / @HabOcupadasFin 
															END
			-- SET @RevPOR        = CASE ISNULL(@HabOcupadasFin, 0) WHEN 0 THEN 0 
					--				     ELSE ISNULL(@IngresosHabi + @IngresosExtra, 0) / @HabOcupadasFin 
					--					 END
			SET @RevPOR           = 0
			SET @RevPAR           = ISNULL(@ADR, CONVERT(NUMERIC(5, 2), 0)) * CONVERT(NUMERIC(5, 2), (CONVERT(NUMERIC(5, 2), @PorcOcup) / CONVERT(NUMERIC(5, 2), 100)))
			SET @NumPersonasFin   = ISNULL(@NumPersonas, 0)
		
		END
		
		----------------------------------------------------------------------------------------------
		-- v2.0.74 (29/09/2015): Evitar que meta en HOTEDAILY si ya hay registros con esa fecha. 
		-- Sucede en concurrencia provocando registros dobles.
		----------------------------------------------------------------------------------------------
		DECLARE @existente BIT = 0
		IF EXISTS (SELECT Fecha FROM HOTEDAILY WHERE Fecha = @FechaI)
		BEGIN
			SET @existente = 1
		END
		----------------------------------------------------------------------------------------------
		        
		-- Datos de los PV
		
		DECLARE @TotalHabiFin INT = @TotalHabi
		
		DECLARE @NumPersonasFinOri INT = @NumPersonasFin
		
		WHILE @PVAct <= @PVFin
		BEGIN
			SELECT @PVDB  = BaseDatos,
			       @PVCod = CodPuntoVenta,
			       @PV    = PuntoVenta
			FROM #PVTAS2 WHERE Id = @PVAct
			
			IF @FechaI < @FechaHotelera
			BEGIN
			
				SELECT  @vSql = N'EXEC ' + @PVDB + '..DSS_Ventas_Pvta_Fechas @P2, @P3, @P3, @P4, @P5, @P6 OUTPUT'
				
				EXEC sp_executesql @vSql, N'@P2 CHAR(5), 
											@P3 DATE, 
											@P4 CHAR(3),
											@P5 NUMERIC(13, 8),
											@P6 NUMERIC(19, 2) OUTPUT', @P2 = @PVCod, 
																		@P3 = @FechaI,
																		@P4 = @CodMoneda,
																		@P5 = @Tasa,
																		@P6 = @PVIng OUTPUT 
			
			END
		
			--------------------------------------------------------------------------------------
			-- Guardar los datos en la tabla temporal #TempDatos
			--------------------------------------------------------------------------------------
			
			IF @FechaI >= @FechaHotelera 
				OR @existente = 1 -- v2.0.74: Evitar filas dobles por concurrencia.
			BEGIN
			
				INSERT INTO #TempDatos 
				(
					Fecha,
					TotalHabi,
					HabOcupadas,
					HabOcupadasCPL,
					PorcOcup,
					HabBloquedas,
					ADR,
					RevPAR,
					RevPOR,
					IngresosHab,
					IngresosExtra,
					IngHabPronost,
					NumPersonas,
					NumPersonasFin,
					ADRPVEnc,
					ADRPV,
					IngresosPVEnc,
					IngresosPV,
					TotalPV
				)
				VALUES
				(
					@FechaI,
					@TotalHabiFin,
					@HabOcupadasFin,
					@HabOcupadasCPL,
					@PorcOcup,
					@HabBloquedasFin,
					@ADR,
					@RevPAR,
					@RevPOR,
					@IngresosHabi,
					@IngresosExtra,
					ISNULL(@IngHabPronost, 0),
					@NumPersonasFinOri,
					@NumPersonasFin,
					'ADR ' + @PV,
					CASE @NumPersonasFinOri WHEN 0 THEN 0
						ELSE ISNULL(@PVIng / @NumPersonasFinOri, 0)
						END,
					'Ingresos ' + @PV,
					@PVIng,
					@TotalPV
				)
			
			END
			
			--------------------------------------------------------------------------------------
			-- Guardar en la tabla HOTEDAILY lo histórico para no calcularlo de nuevo.
			--------------------------------------------------------------------------------------
			
			IF @FechaI < @FechaHotelera 
				AND @existente = 0 -- v2.0.74: Evitar filas dobles por concurrencia.
			BEGIN
				
				INSERT INTO HOTEDAILY 
				(
					Fecha,
					TotalHabi,
					HabOcupadas,
					HabOcupadasCPL,
					PorcOcup,
					HabBloquedas,
					ADR,
					RevPAR,
					RevPOR,
					IngresosHab,
					IngresosExtra,
					--IngHabPronost,
					NumPersonas,
					NumPersonasFin,
					ADRPVEnc,
					ADRPV,
					IngresosPVEnc,
					IngresosPV,
					Moneda,
					Tasa,
					TotalPV,
					id_oper
				)
				VALUES
				(
					@FechaI,
					@TotalHabiFin,
					@HabOcupadasFin,
					@HabOcupadasCPL,
					@PorcOcup,
					@HabBloquedasFin,
					@ADR,
					@RevPAR,
					@RevPOR,
					@IngresosHabi,
					@IngresosExtra,
					--ISNULL(@IngHabPronost, 0),
					@NumPersonasFinOri,
					@NumPersonasFin,
					'ADR ' + @PV,
					CASE @NumPersonasFinOri WHEN 0 THEN 0
						ELSE ISNULL(@PVIng / @NumPersonasFinOri, 0)
						END,
					'Ingresos ' + @PV,
					@PVIng,
					@Moneda,
					@Tasa,
					@TotalPV,
					@id_oper
				)
				
			END
			
			-- Resetear los valores del día para que no se multipliquen en el informe por cada punto de venta
			
			SET @TotalHabiFin = 0
			SET @HabOcupadasFin = 0
			SET @HabOcupadasCPL = 0
			SET @PorcOcup = 0
			SET @HabBloquedasFin = 0
			SET @ADR = 0
			SET @RevPAR = 0
			SET @RevPOR = 0
			SET @IngresosHabi = 0
			SET @IngresosExtra = 0
			SET @IngHabPronost = 0
			SET @NumPersonasFin = 0
		
			SET @PVAct = @PVAct + 1
		END
		
		-- Calcular el RevPOR
		
		IF @id_oper = 0
		BEGIN
		
			UPDATE TOP (1) #TempDatos 
			SET RevPOR = CASE (SELECT MAX(HabOcupadas) FROM #TempDatos WHERE Fecha = @FechaI) 
							  WHEN 0 THEN 0 
							  ELSE ISNULL((SELECT MAX(IngresosHab) + MAX(IngresosExtra) + SUM(IngresosPV) FROM #TempDatos WHERE Fecha = @FechaI), 0) 
								/ (SELECT MAX(HabOcupadas) FROM #TempDatos WHERE Fecha = @FechaI) 
							  END
			WHERE Fecha = @FechaI
	        
			IF @FechaI < @FechaHotelera
			BEGIN
				UPDATE TOP (1) HOTEDAILY 
				SET RevPOR = CASE (SELECT MAX(HabOcupadas) FROM HOTEDAILY WHERE Fecha = @FechaI AND id_oper = @id_oper) 
								  WHEN 0 THEN 0 
								  ELSE ISNULL((SELECT MAX(IngresosHab) + MAX(IngresosExtra) + SUM(IngresosPV) FROM HOTEDAILY WHERE Fecha = @FechaI AND id_oper = @id_oper), 0) 
									/ (SELECT MAX(HabOcupadas) FROM HOTEDAILY WHERE Fecha = @FechaI AND id_oper = @id_oper) 
								  END
				WHERE Fecha = @FechaI AND id_oper = @id_oper
			END
		
		END
		
		SET @FechaI = DATEADD(DAY, 1, @FechaI)
	END
	
	--------------------------------------------------------------------------------------
	-- Convertir los datos a la tasa elegida
	--------------------------------------------------------------------------------------
	
	SELECT @Tasa      = 1 / tasa,
           @CodMoneda = cod_mone
	FROM   SICLAMON
	WHERE  id_mone    = @Moneda
	
	IF @TotalPV = 0
	BEGIN
		SET @TotalPV = 1
	END
	
	--------------------------------------------------------------------------------------
	-- Guardar los datos de HOTEDAILY en la tabla temporal #TempDatosFinal
	--------------------------------------------------------------------------------------

	INSERT INTO #TempDatosFinal
	SELECT Fecha,
		   TotalHabi,
		   HabOcupadas,
		   HabOcupadasCPL,
		   PorcOcup,
		   HabBloquedas,
		   ADR / @Tasa AS ADR,
		   RevPAR / @Tasa AS RevPAR,
		   RevPOR / @Tasa AS RevPOR,
		   IngresosHab / @Tasa AS IngresosHab,
		   IngresosExtra / @Tasa AS IngresosExtra,
		   IngHabPronost / @Tasa AS IngHabPronost,
		   NumPersonas,
		   NumPersonasFin,
		   ADRPVEnc,
		   ADRPV / @Tasa AS ADRPV,
		   IngresosPVEnc,
		   IngresosPV / @Tasa AS IngresosPV,
		   @Moneda AS Moneda, 
		   @Tasa AS Tasa,
		   --MONTH(Fecha) AS Mes,
		   TotalPV
	FROM   HOTEDAILY
	WHERE  Fecha BETWEEN @FechaInicioOri AND @FechaFinal
	  AND  id_oper = @id_oper
	
	--------------------------------------------------------------------------------------
	-- Guardar los datos de #TempDatos en la tabla temporal #TempDatosFinal
	--------------------------------------------------------------------------------------
	
	INSERT INTO #TempDatosFinal 
	SELECT Fecha,
		   TotalHabi,
		   HabOcupadas,
		   HabOcupadasCPL,
		   PorcOcup,
		   HabBloquedas,
		   ADR / @Tasa AS ADR,
		   RevPAR / @Tasa AS RevPAR,
		   RevPOR / @Tasa AS RevPOR,
		   IngresosHab / @Tasa AS IngresosHab,
		   IngresosExtra / @Tasa AS IngresosExtra,
		   IngHabPronost / @Tasa AS IngHabPronost,
		   NumPersonas,
		   NumPersonasFin,
		   ADRPVEnc,
		   ADRPV / @Tasa AS ADRPV,
		   IngresosPVEnc,
		   IngresosPV / @Tasa AS IngresosPV, 
		   @Moneda AS Moneda, 
		   @Tasa AS Tasa, 
		   --MONTH(Fecha) AS Mes, 
		   TotalPV 
    FROM #TempDatos 
	ORDER BY Fecha ASC
	
	--SELECT * FROM #TempDatosFinal 
	
	--------------------------------------------------------------------------------------------
	-- Reconstruir el pronóstico (Gráfico)
	--------------------------------------------------------------------------------------------
	
	IF @Modo = 1
	BEGIN
	    
		DECLARE @FecProIni DATE = (SELECT MIN(Fecha) FROM #TempDatosFinal)
		--DECLARE @FecProIni DATE = @FechaPronost
		DECLARE @FecProFin DATE = (SELECT MAX(Fecha) FROM #TempDatosFinal)
		
		-- v2.0.83: No pronostique desde fechas menores a la fecha de reconstrucción.
		IF @FecProIni < @FechaPronost
		BEGIN
			SET @FecProIni = @FechaPronost
		END
		
		DECLARE @MesAct INT = 1
		
		CREATE TABLE #Pronosticado(
			Mes int, Fyear int, Ing_Reserva numeric(15, 2),
			ing_reserva_Reg numeric(15, 2), ing_reserva_Otr numeric(15, 2),
			ing_Ro_Al  numeric(15, 2), ing_Ro_Pen numeric(15, 2),	
			ing_ROAgen numeric(15, 2)
		)
		
		INSERT INTO #Pronosticado
		EXEC DSS_Rec_Pronos_Rese @FecProIni, @FecProFin, @FechaPronost, @CodMoneda, @id_oper
		
		WHILE @MesAct <= 12
		BEGIN
		
		    SET @IngHabPronost = 0
		    
		    IF CONVERT(DATE, CONVERT(VARCHAR(10), @Ano) + '-' + CONVERT(VARCHAR(10), @MesAct) + '-01') 
				>= CONVERT(DATE, CONVERT(VARCHAR(10), YEAR(@FechaPronost)) + '-' + CONVERT(VARCHAR(10), MONTH(@FechaPronost)) + '-01')
			BEGIN
			
				SELECT @IngHabPronost = (ISNULL(ing_Reserva, 0) + ISNULL(ing_Ro_Al, 0) + ISNULL(ing_reserva_Reg, 0)
										+ ISNULL(ing_reserva_Otr, 0) + ISNULL(ing_Ro_Pen, 0) +ISNULL(ing_ROAgen, 0))
				FROM   #Pronosticado
				WHERE  Mes = @MesAct 
				   AND Fyear = @Ano
				
			END
			
			UPDATE #TempDatosFinal
			SET    IngHabPronost = ISNULL(@IngHabPronost, 0) / @Tasa
			WHERE  MONTH(Fecha) = @MesAct AND YEAR(Fecha) = @Ano
			
			SET @MesAct = @MesAct + 1
			
		END
	
	END
	
	--------------------------------------------------------------------------------------
	-- Devolver la información
	--------------------------------------------------------------------------------------
	
	IF @Modo = 0
	BEGIN
		
		SELECT fi.*,
			   CASE MONTH(fi.Fecha)
					WHEN 1 THEN 'Enero'
					WHEN 2 THEN 'Febrero'
					WHEN 3 THEN 'Marzo'
					WHEN 4 THEN 'Abril'
					WHEN 5 THEN 'Mayo'
					WHEN 6 THEN 'Junio'
					WHEN 7 THEN 'Julio'
					WHEN 8 THEN 'Agosto'
					WHEN 9 THEN 'Septiembre'
					WHEN 10 THEN 'Octubre'
					WHEN 11 THEN 'Noviembre'
					WHEN 12 THEN 'Diciembre'
					END 
			   AS Mes,
			   DATEPART(WEEK, fi.Fecha) Semana
		FROM   #TempDatosFinal fi
		ORDER BY MONTH(fi.Fecha)
	
	END
	ELSE
	BEGIN
		IF @Modo = 1
		BEGIN
		
			UPDATE #TempDatosFinal SET IngresosHab = 0 WHERE Fecha >= @FechaHotelera
			UPDATE #TempDatosFinal SET IngresosExtra = 0 WHERE Fecha >= @FechaHotelera
			
			SELECT SUM(fi.IngresosHab + fi.IngresosExtra /* / fi.TotalPV */)  AS IngresosHab,
			       MAX(fi.IngHabPronost /* / fi.TotalPV */)  AS IngHabPronost,
			       SUM((fi.IngresosHab + fi.IngresosPV) /* / fi.TotalPV */) AS IngresosMasPV,
				   CASE MONTH(fi.Fecha)
						WHEN 1  THEN 'ENE'
						WHEN 2  THEN 'FEB'
						WHEN 3  THEN 'MAR'
						WHEN 4  THEN 'ABR'
						WHEN 5  THEN 'MAY'
						WHEN 6  THEN 'JUN'
						WHEN 7  THEN 'JUL'
						WHEN 8  THEN 'AGO'
						WHEN 9  THEN 'SEP'
						WHEN 10 THEN 'OCT'
						WHEN 11 THEN 'NOV'
						WHEN 12 THEN 'DIC'
						END 
				   AS Periodo
			FROM   #TempDatosFinal fi
			GROUP BY MONTH(fi.Fecha)
			ORDER BY MONTH(fi.Fecha)
			
		END
	END

	RETURN
	
	ERROR:
		RAISERROR @NumError @MensajeError

END
