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

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO













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

/*

	-------------------------------------------------- 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.
	
	--------------------------------------------------------------------------------------------------------------------------

*/

  /*  Calculo el total de cargos autom ticos en moneda base que no sean de aloj de todas las habitaciones (y facturas que tenga) 
       para el dia  pasado como parametro.*/

	SET NOCOUNT ON

	DECLARE @tasa_mb NUMERIC(13, 8)
	SELECT @tasa_mb = tasa
	FROM Hotetabl tabl
		 INNER JOIN Siclamon sicla ON tabl.id_mone = sicla.id_mone
		 
	SELECT cantidad_linc, precio_linc, fact.id_mone, sicla.tasa, SUM(ISNULL(im.porc_impu, 0)) porc_impu
	INTO   #CIngOExtr
	FROM       Hoteface face
	INNER JOIN Hotefact fact ON face.id_face = fact.id_face
	INNER JOIN Hotelinc linc ON fact.id_fact = linc.id_fact
	INNER JOIN Siclamon sicla ON fact.id_mone = sicla.id_mone
	LEFT  JOIN HOTEIMPU si    ON linc.id_pre0 = si.id_pre0
	LEFT  JOIN SICLAIMP im    ON si.id_impu   = im.id_impu
	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)
	 AND linc.id_pre0 NOT IN(
		SELECT pre0.id_pre0
		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)
	 AND linc.id_pre0 NOT IN(
		SELECT pre0.id_pre0
		FROM       HoteRali rali
		INNER JOIN Hotepre0 pre0 ON rali.id_con0 = pre0.id_con0)
	GROUP BY cantidad_linc, precio_linc, fact.id_mone, sicla.tasa

	SELECT @result = SUM(cantidad_linc * CONVERT(NUMERIC(15, 2), precio_linc) * CASE WHEN id_mone != @mone THEN @tasa_ext / tasa
																					 ELSE 1
																					 END
					 / ((ISNULL(porc_impu, 0) / 100) + 1))
	FROM   #CIngOExtr
	
	DROP TABLE #CIngOExtr

	IF @result IS NULL
		BEGIN
			SELECT @result = 0
		END
END





