USP_DATALIST_EVENTLODGINGLOCATIONS

This datalist returns event lodging locations for an event.

Parameters

Parameter Parameter Type Mode Description
@EVENTID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@INCLUDESUBEVENTS bit IN Include sub-events

Definition

Copy


    CREATE procedure dbo.USP_DATALIST_EVENTLODGINGLOCATIONS(
        @EVENTID uniqueidentifier,
        @CURRENTAPPUSERID uniqueidentifier = null,
        @INCLUDESUBEVENTS bit = 0
    )
    as
        set nocount on;

        declare @EVENTS table
        (
            ID uniqueidentifier,
            EVENTNAME nvarchar(100)
        );

        insert into @EVENTS
        select 
            ID, NAME 
        from 
              dbo.UFN_CHILDEVENTSWITHSITEACCESS(@EVENTID, @CURRENTAPPUSERID) EVENTS
        where
            EVENTS.ID = @EVENTID
        or
            @INCLUDESUBEVENTS = 1

        declare @TOTALS table
        (
            EVENTLODGINGID uniqueidentifier,
            ALLOCATED int,
            ASSIGNED int
        );

        insert into @TOTALS
        (
            EVENTLODGINGID,
            ALLOCATED,
            ASSIGNED
        )
        (
            select
                EVENTLODGING.ID as EVENTLODGINGID,
                (select SUM(EVENTLODGINGROOM.ALLOCATED) from EVENTLODGINGROOM where EVENTLODGINGROOM.EVENTLODGINGID = EVENTLODGING.ID) as ALLOCATED,
                (select 
                    COUNT(EVENTLODGINGROOMINSTANCE.ID) 
                from
                    EVENTLODGINGROOMINSTANCE
                where 
                    EVENTLODGINGROOMINSTANCE.EVENTLODGINGID = EVENTLODGING.ID
                    -- Only count rooms with occupants

                    and EVENTLODGINGROOMINSTANCE.ID in (select EVENTLODGINGROOMINSTANCEID from dbo.REGISTRANTLODGING)
                ) as ASSIGNED
            from
                dbo.EVENTLODGING
            where 
                EVENTLODGING.EVENTID in (select ID from @EVENTS)
        );

        declare @ROOMTYPETOTALS table (EVENTLODGINGROOMID uniqueidentifier, ASSIGNED int);
        insert into @ROOMTYPETOTALS
        (EVENTLODGINGROOMID, ASSIGNED)
        (
            select
                EVENTLODGINGROOMINSTANCE.EVENTLODGINGROOMID as EVENTLODGINGID,
                COUNT(EVENTLODGINGROOMINSTANCE.ID) as ASSIGNED
            from
                dbo.EVENTLODGINGROOMINSTANCE
            inner join
                dbo.EVENTLODGING on EVENTLODGING.ID = EVENTLODGINGROOMINSTANCE.EVENTLODGINGID
            where 
                EVENTLODGING.EVENTID in (select ID from @EVENTS)
                -- Only count rooms with occupants

                and EVENTLODGINGROOMINSTANCE.ID in (select EVENTLODGINGROOMINSTANCEID from dbo.REGISTRANTLODGING)
            group by
                EVENTLODGINGROOMINSTANCE.EVENTLODGINGROOMID
        );

        select EVENTLODGING.ID as ID,
            null as PARENTID,
            EVENTLODGINGLOCATION.ID as EVENTLODGINGLOCATIONID,
            EVENTLODGINGLOCATION.NAME,
            TOTALS.ALLOCATED as TOTALALLOCATED,
            TOTALS.ASSIGNED as TOTALASSIGNED,
            case when TOTALS.ALLOCATED < TOTALS.ASSIGNED then 0
                else TOTALS.ALLOCATED - TOTALS.ASSIGNED 
                end as TOTALREMAINING,
            case when TOTALS.ASSIGNED < TOTALS.ALLOCATED then 0
                else TOTALS.ASSIGNED - TOTALS.ALLOCATED
                end as TOTALOVERASSIGNED,
            case when TOTALS.ASSIGNED <= TOTALS.ALLOCATED then 'RES:lv_spacer'
                else 'RES:warning'
                end as IMAGEKEY,
            EVENTLODGING.ID as DETAILID,
            0 as ROWTYPE,
            EVENTS.EVENTNAME
        from 
            dbo.EVENTLODGING
        inner join 
            dbo.EVENTLODGINGLOCATION on EVENTLODGINGLOCATION.ID = EVENTLODGING.EVENTLODGINGLOCATIONID
        inner join
            @TOTALS as TOTALS on TOTALS.EVENTLODGINGID = EVENTLODGING.ID
        inner join
            @EVENTS EVENTS on EVENTLODGING.EVENTID = EVENTS.ID 

        union all

        select
            newid() as ID,
            EVENTLODGING.ID as PARENTID,
            EVENTLODGING.EVENTLODGINGLOCATIONID as EVENTLODGINGLOCATIONID,
            EVENTLODGINGROOMTYPECODE.DESCRIPTION as NAME,
            EVENTLODGINGROOM.ALLOCATED as TOTALALLOCATED,
            coalesce(TOTALS.ASSIGNED, 0) as TOTALASSIGNED,
            case when EVENTLODGINGROOM.ALLOCATED < coalesce(TOTALS.ASSIGNED, 0) then 0
                else EVENTLODGINGROOM.ALLOCATED - coalesce(TOTALS.ASSIGNED, 0)
                end as TOTALREMAINING,
            case when coalesce(TOTALS.ASSIGNED, 0) < EVENTLODGINGROOM.ALLOCATED then 0
                else coalesce(TOTALS.ASSIGNED, 0) - EVENTLODGINGROOM.ALLOCATED
                end as TOTALOVERASSIGNED,
            case when coalesce(TOTALS.ASSIGNED, 0) <= EVENTLODGINGROOM.ALLOCATED then 'RES:lv_spacer'
                else 'RES:warning'
                end as IMAGEKEY,
            EVENTLODGING.ID as DETAILID,
            1 as ROWTYPE,
            EVENTS.EVENTNAME
        from
            dbo.EVENTLODGINGROOM
        inner join    
            dbo.EVENTLODGINGROOMTYPECODE on EVENTLODGINGROOMTYPECODE.ID = EVENTLODGINGROOM.ROOMTYPECODEID
        inner join
            dbo.EVENTLODGING on EVENTLODGING.ID = EVENTLODGINGROOM.EVENTLODGINGID
        left join
            @ROOMTYPETOTALS as TOTALS on TOTALS.EVENTLODGINGROOMID = EVENTLODGINGROOM.ID
        inner join
            @EVENTS EVENTS on EVENTLODGING.EVENTID = EVENTS.ID 

        union all

        select
            newid() as ID,
            EVENTLODGING.ID as PARENTID,
            EVENTLODGING.EVENTLODGINGLOCATIONID as EVENTLODGINGLOCATIONID,
            'Room type not specified' as NAME,
            0 as TOTALALLOCATED,
            count(EVENTLODGINGROOMINSTANCE.ID) as TOTALASSIGNED,
            0 as TOTALREMAILING,
            0 as TOTALOVERASSIGNED,
            case when count(EVENTLODGINGROOMINSTANCE.ID) > 0 then 'RES:warning' else 'RES:lv_spacer' end as IMAGEKEY,
            EVENTLODGING.ID as DETAILID,
            2 as ROWTYPE,
            EVENTS.EVENTNAME
        from
            dbo.EVENTLODGING
        left join
            dbo.EVENTLODGINGROOMINSTANCE on EVENTLODGINGROOMINSTANCE.EVENTLODGINGID = EVENTLODGING.ID
        -- Only for room instances that have an occupant.

        inner join
            dbo.REGISTRANTLODGING on REGISTRANTLODGING.EVENTLODGINGROOMINSTANCEID = EVENTLODGINGROOMINSTANCE.ID
        inner join
            @EVENTS EVENTS on EVENTLODGING.EVENTID = EVENTS.ID 
        where
            EVENTLODGINGROOMINSTANCE.EVENTLODGINGROOMID is null
        group by
            EVENTLODGING.ID, EVENTLODGING.EVENTLODGINGLOCATIONID, EVENTNAME 

        order by
            ROWTYPE, NAME