
/****** Object:  StoredProcedure [dbo].[Calc_Ing_Ocupacion]    Script Date: 02/17/2015 11:25:39 ******/

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO












ALTER PROCEDURE dbo.Calc_Ing_Ocupacion
	  @dia_inic DATETIME, 
	  @dia_fin  DATETIME, 
	  @mone     INT, 
	  @tasa_ext NUMERIC(13, 8), 
	  @ing_ocup NUMERIC(15, 2) OUTPUT
AS

/*

	-------------------------------------------------- SEVEN DSS -------------------------------------------------------------

	ADVERTENCIA: Este proceso nativo de Front se incluye en los scripts principales de Seven DSS.
	Se incluye porque tiene actualizaciones que lo hacen más preciso y permite que sus resultados sean los mismos que del DSS.
	Por favor indicar si este script fue actualizado para incluirlo en los scripts de Seven DSS y evitar
	des-actualizarlo por accidente al instalar o actualizar Seven DSS.
	
	--------------------------------------------------------------------------------------------------------------------------

*/

/*   Calcula el pron¢stico de ingresos de extras para el dia pasado como parametro por ocupaci¢n en la moneda base del Front  */

BEGIN
	SET NOCOUNT ON

	DECLARE @tasa_mb NUMERIC(13, 8)
	
	DECLARE @ImpuHospedaje NUMERIC(18, 2) = ISNULL((SELECT TOP 1 SUM(im.porc_impu) impu_hosp
												FROM       HOTETHAB th
												INNER JOIN HOTECON0 c0 ON th.id_con0 = c0.id_con0
												INNER JOIN HOTEPRE0 p0 ON c0.id_con0 = p0.id_con0
												INNER JOIN HOTEIMPU ip ON p0.id_pre0 = ip.id_pre0
												INNER JOIN SICLAIMP im ON ip.id_impu = im.id_impu
												INNER JOIN SICLAMON mo ON p0.id_mone = mo.id_mone
												WHERE mo.tasa = 1 --AND ip.incluido = 1
												GROUP BY th.id_thab), 0) / 100 + 1

	SELECT @tasa_mb = tasa
	FROM Hotetabl tabl
		 INNER JOIN Siclamon sicla ON tabl.id_mone = sicla.id_mone

	SELECT @ing_ocup = SUM(cantidad_linc * CONVERT(NUMERIC(15, 2), precio_linc) * CASE
																					   WHEN face1.id_mone != @mone THEN @tasa_ext / sicla.tasa
																					   ELSE 1
																				  END)
	FROM(
		SELECT fact.id_fact, 
			   pre0.id_pre0, 
			   face.id_mone
		FROM       Hoteface face
		INNER JOIN Hotefact fact ON face.id_face = fact.id_face
		INNER JOIN Hotehabi habi ON face.id_habi = habi.id_habi
		INNER JOIN Hotethab thab ON habi.id_thab = thab.id_thab
		INNER JOIN Hotepre0 pre0 ON face.id_mone = pre0.id_mone AND thab.id_con0 = pre0.id_con0
		) face1
	INNER JOIN Hotelinc linc ON face1.id_fact = linc.id_fact AND face1.id_pre0 = linc.id_pre0
	INNER JOIN Siclamon sicla ON face1.id_mone = sicla.id_mone
	WHERE DATEDIFF(day, linc.fecha_desde, @dia_inic) >= 0
	  AND DATEDIFF(day, @dia_inic, linc.fecha_hasta) > 0
	   OR DATEDIFF(day, linc.fecha_desde, @dia_fin) >= 0
	  AND DATEDIFF(day, @dia_fin, linc.fecha_hasta) > 0
	  
	SET @ing_ocup = @ing_ocup / @ImpuHospedaje

	SELECT @ing_ocup = COALESCE(@ing_ocup, 0)

END





