USE [InnFront]
GO
/****** Object:  StoredProcedure [dbo].[ex_Ocupacion_Habit_Fecha_Futuras]    Script Date: 02/28/2012 08:05:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

-- =============================================
-- Author:		<OZ>
-- Create date: <27-02-12>
-- Description:	<Este procedimiento da como resultado la ocupacion por habitacion
--por dia>
-- =============================================
ALTER PROCEDURE [dbo].[ex_Ocupacion_Habit_Fecha_Futuras]  
					   @fecha     datetime    ,
					   @habitacion varchar(9)  ,
     					   @result       numeric(19,4) output
AS
BEGIN

 declare  @historico int,   
          @inhouse int,
          @rese int,
          @room int,
          @id_hab int

  Select @id_hab = dbo.ex_Get_Id_hab(@habitacion)


--Esta sentencia da el resultado si la habitacion estubo ocupada
Select @historico =   COUNT(*)
    From HOTEHHAB where id_habi = @id_hab and Datediff(day,fecha_ent,@fecha)>=0
                    and Datediff(day,@fecha,fecha_sal)>0
                    
                    
--Esta sentencia da el resultado si la habitacion esta en inhouse
 Select @inhouse =   COUNT(*)
    From Hoteface face inner join hotehabi habi on face.id_habi = habi.id_habi
                   inner join hoteuhab uhab on face.id_uhab = uhab.id_uhab
                   inner join hotethab thab on thab.id_thab = uhab.id_thab
                   inner join hotecont cont on face.id_cont = cont.id_cont
               Where Datediff(day,face.fecha_ent,@fecha)>=0
                    and Datediff(day,@fecha,face.fecha_sal)>0
                    and habi.id_habi = @id_hab
                    

--Esta sentencia da el resultado si la habitacion esta asignada en una reserva, 
--solicitada o confirmada
 
 Select @rese =   Count(*)
         From Hoterese rese inner join hotelres lres on rese.id_rese = lres.id_rese
                   inner join hoteuhab uhab on lres.id_uhab = uhab.id_uhab
                   inner join hotethab thab on thab.id_thab = uhab.id_thab
                   inner join hotecont cont on rese.id_cont = cont.id_cont
                   inner join hoteesre esre on rese.id_estado = esre.id_estado
                   inner join hotehabi habi on lres.id_habi = habi.id_habi
         Where rese.id_estado in (3,5) 
              and Datediff(day,rese.fecha_ent,@fecha)>=0
              and Datediff(day,@fecha,rese.fecha_sal)>0
              and lres.id_habi = @id_hab

--Esta sentencia da el resultado si la habitacion esta asignada en una rooming, 
--solicitada o confirmada

Select @room =   COUNT(*)
             From Hoteroom room inner join hoterool rool on room.id_room = rool.id_room
                   inner join hoteuhab uhab on rool.id_uhab = uhab.id_uhab
                   inner join hotethab thab on thab.id_thab = uhab.id_thab
                   inner join hotecont cont on room.id_cont = cont.id_cont
                   inner join hoteesre esre on rool.id_estado = esre.id_estado
                   inner join hotehabi habi on rool.id_habi = habi.id_habi
             Where rool.id_estado in (3,5)
                   and Datediff(day,rool.fecha_ent,@fecha)>=0
                   and Datediff(day,@fecha,rool.fecha_sal)>0
                   and habi.id_habi = @id_hab


  Select @result = @historico + @inhouse + @rese + @room
  --Este If es porque el historico y el inhouse pueden sumarse en un solo dia
  --para esos casos simplemente lo paso a 1
    if @result = 2
     begin
       select @result = 1
     end 
      
Return @result
END

