UFN_REGISTRANT_RELATEDREGISTRATIONS_TOITEMLISTXML

Gets all the registrations in an event hierarchy for the constituent (or unnamed guest) in a registrant record--in XML format

Return

Return Type
xml

Parameters

Parameter Parameter Type Mode Description
@REGISTRANTID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_REGISTRANT_RELATEDREGISTRATIONS_TOITEMLISTXML
(
    @REGISTRANTID uniqueidentifier,
    @CURRENTAPPUSERID uniqueidentifier
)
returns xml
with execute as caller
as begin
    declare @XML xml;
    declare @CONFLICTS as dbo.UDT_EVENTPAIR;

    insert into @CONFLICTS
    select
        RELATEDEVENTPAIRS.EVENTID1,
        RELATEDEVENTPAIRS.EVENTID2
    from
        dbo.UFN_EVENT_RELATEDEVENTPAIRSWITHSCHEDULECONFLICT(@REGISTRANTID) as RELATEDEVENTPAIRS;

    declare @CONSTITUENTID uniqueidentifier;
    declare @HOSTID uniqueidentifier;
    select
        @CONSTITUENTID = CONSTITUENTID,
        @HOSTID = GUESTOFREGISTRANTID
    from
        dbo.REGISTRANT
    where
        REGISTRANT.ID = @REGISTRANTID;

    declare @EVENTID uniqueidentifier;
    select @EVENTID = EVENTID from dbo.REGISTRANT where REGISTRANT.ID = @REGISTRANTID;
    declare @MAINEVENTID uniqueidentifier;
    select @MAINEVENTID = coalesce(EVENT.MAINEVENTID, EVENT.ID) from dbo.EVENT where EVENT.ID = @EVENTID;

    declare @EVENTS table
    (
        ID uniqueidentifier,
        NAME nvarchar(100),
        LEVEL int
    );

    insert into @EVENTS
        select
            EVENTSINHIERARCHY.ID,
            EVENTSINHIERARCHY.NAME,
            EVENTSINHIERARCHY.LEVEL
        from
            dbo.UFN_EVENT_GETALLEVENTSINHIERARCHY(@MAINEVENTID) as EVENTSINHIERARCHY
        where
            dbo.UFN_EVENT_USERHASSITEACCESS(@CURRENTAPPUSERID, EVENTSINHIERARCHY.ID) = 1;


    declare @RELATEDREGISTRANTS table
    (
        ID uniqueidentifier, 
        WILLNOTATTEND bit
        ONLINEREGISTRANT bit
        ATTENDED bit
        GUESTOFREGISTRANTID uniqueidentifier,
        EVENTNAME nvarchar(100), 
        LEVEL int,
        BASECURRENCYID uniqueidentifier,
        ISWALKIN bit,
        ISPROCESSED bit
    );

    insert into @RELATEDREGISTRANTS
        select 
            REGISTRANT.ID,
            REGISTRANT.WILLNOTATTEND,
            REGISTRANT.ONLINEREGISTRANT,
            REGISTRANT.ATTENDED,
            REGISTRANT.GUESTOFREGISTRANTID,
            EVENTS.NAME,
            EVENTS.LEVEL,
            EVENT.BASECURRENCYID,
            REGISTRANT.ISWALKIN,
            EVENT.ISPROCESSED
        from
            dbo.REGISTRANT
            inner join @EVENTS EVENTS on REGISTRANT.EVENTID = EVENTS.ID
            inner join dbo.EVENT on REGISTRANT.EVENTID = EVENT.ID
        where
            -- constitID is not null; i.e., not an unnamed guest

            REGISTRANT.CONSTITUENTID = @CONSTITUENTID;

    with HOST_CTE as
    (
        select 
            HOST.ID,
            EVENTS.NAME EVENTNAME,
            EVENTS.LEVEL,
            EVENT.BASECURRENCYID
        from
            dbo.REGISTRANT HOST
            inner join dbo.REGISTRANT on HOST.CONSTITUENTID = REGISTRANT.CONSTITUENTID
            inner join @EVENTS EVENTS on HOST.EVENTID = EVENTS.ID
            inner join dbo.EVENT on REGISTRANT.EVENTID = EVENT.ID
        where
            @CONSTITUENTID is null
            and REGISTRANT.ID = @HOSTID
    )
    insert into @RELATEDREGISTRANTS
        select
            UNNAMEDGUEST.ID,
            UNNAMEDGUEST.WILLNOTATTEND,
            UNNAMEDGUEST.ONLINEREGISTRANT,
            UNNAMEDGUEST.ATTENDED,
            UNNAMEDGUEST.GUESTOFREGISTRANTID,
            HOST_CTE.EVENTNAME,
            HOST_CTE.LEVEL,
            HOST_CTE.BASECURRENCYID,
            UNNAMEDGUEST.ISWALKIN,
            EVENT.ISPROCESSED
        from 
            dbo.REGISTRANT UNNAMEDGUEST
            inner join dbo.EVENT on EVENT.ID = UNNAMEDGUEST.EVENTID
            inner join HOST_CTE on
                UNNAMEDGUEST.GUESTOFREGISTRANTID = HOST_CTE.ID
                and UNNAMEDGUEST.CONSTITUENTID is null;

    declare @UNIQUERELATEDREGISTRANTS table
    (
        STATUS nvarchar(16),
        ISONLINEREGISTRANT nvarchar(3),
        BALANCE money,
        HOSTNAME nvarchar(124),
        ATTENDED nvarchar(7),
        SCHEDULECONFLICTEXISTS nvarchar(3),
        EVENTNAME nvarchar(100),
        EVENTLEVEL int,
        BASECURRENCYID uniqueidentifier,
        REGISTRATIONTYPE nvarchar(16)
    );

    insert into @UNIQUERELATEDREGISTRANTS
        select distinct -- must use "distinct" to avoid having multiple unnamed guests at one event show up as multiple rows

            case 
                when dbo.UFN_REGISTRANT_ISCANCELLED(REG.ID) = 1 then 'Canceled'
                when REG.WILLNOTATTEND = 1 then 'Will not attend'
                else 'Registered'
            end as [STATUS],
            case REG.ONLINEREGISTRANT
                when 1 then 'Yes'
                else ''
            end as ISONLINEREGISTRANT,
            dbo.UFN_EVENTREGISTRANT_GETBALANCE(REG.ID) as BALANCE,
            dbo.UFN_REGISTRANT_GETHOSTNAME(REG.ID, REG.GUESTOFREGISTRANTID) as HOSTNAME,
            case 
                when REG.ATTENDED = 1 then 'Yes'
                when REG.ISPROCESSED = 1 then 'No show'
                else 'No'
            end as ATTENDED,
            case dbo.UFN_REGISTRANT_HASCONFLICT(REG.ID, @CONFLICTS)
                when 1 then 'Yes'
                else ''
            end as SCHEDULECONFLICTEXISTS,
            REG.EVENTNAME,
            REG.LEVEL,
            REG.BASECURRENCYID,
            case
                when REG.ISWALKIN = 1 then 'Walk-in'
                else 'Preregistration'
            end as REGISTRATIONTYPE
        from
            @RELATEDREGISTRANTS REG;

    set @XML = (
        select 
            STATUS,
            ISONLINEREGISTRANT,
            BALANCE,
            HOSTNAME,
            ATTENDED,
            SCHEDULECONFLICTEXISTS,
            EVENTNAME,
            BASECURRENCYID,
            REGISTRATIONTYPE
        from
            @UNIQUERELATEDREGISTRANTS
        order by
            EVENTLEVEL,
            EVENTNAME
        for xml raw('ITEM'),type,elements,root('RELATEDREGISTRATIONS'),BINARY BASE64
    );

    return @XML;
end