UFN_REPORT_REGISTRANTREGISTRATIONINFORMATION

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@REGISTRANTID uniqueidentifier IN
@REGISTRATIONSECTIONSTOINCLUDE xml IN

Definition

Copy


CREATE function dbo.UFN_REPORT_REGISTRANTREGISTRATIONINFORMATION
(
    @REGISTRANTID uniqueidentifier,
    @REGISTRATIONSECTIONSTOINCLUDE xml = null
)
returns @RESULTS table
(
    RESPONSETYPECODE tinyint,
    NAME nvarchar(100),
    VALUE nvarchar(max)
)
begin    
    declare @EVENTID uniqueidentifier;
    declare @PROGRAMID uniqueidentifier;
    declare @HASCUSTOMREGISTRATIONINFORMATION bit;

    select
        @PROGRAMID = EVENT.PROGRAMID,
        @EVENTID = EVENT.ID,
        @HASCUSTOMREGISTRATIONINFORMATION = EVENT.HASCUSTOMREGISTRATIONINFORMATION
    from dbo.REGISTRANT
    inner join dbo.EVENT
        on REGISTRANT.EVENTID = EVENT.ID
    inner join dbo.PROGRAM
        on EVENT.PROGRAMID = PROGRAM.ID
    where REGISTRANT.ID = @REGISTRANTID;

    declare @SECTIONSTOINCLUDE table (
        REGISTRATIONSECTIONCODEID uniqueidentifier
    )

    if @REGISTRATIONSECTIONSTOINCLUDE is not null
        insert into @SECTIONSTOINCLUDE (REGISTRATIONSECTIONCODEID)
            select
                T.c.value('(REGISTRATIONSECTIONCODEID)[1]','uniqueidentifier')
            from @REGISTRATIONSECTIONSTOINCLUDE.nodes('/REGISTRATIONSECTIONSTOINCLUDE/ITEM') T(c);

    else
        insert into @SECTIONSTOINCLUDE (REGISTRATIONSECTIONCODEID)
            select
                ID
            from dbo.REGISTRATIONSECTIONCODE;

    declare @REGINFOSECTIONS table (
        REGISTRATIONINFORMATIONID uniqueidentifier,
        SECTIONSEQUENCE int,
        SEQUENCE int
    );

    if @HASCUSTOMREGISTRATIONINFORMATION = 1 begin
        insert into @REGINFOSECTIONS (REGISTRATIONINFORMATIONID, SECTIONSEQUENCE, SEQUENCE)
            select 
                PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.REGISTRATIONINFORMATIONID, 
                PROGRAMEVENTREGISTRATIONSECTION.SEQUENCE as SECTIONSEQUENCE, 
                PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.SEQUENCE
            from dbo.PROGRAMEVENTREGISTRATIONSECTION
            inner join @SECTIONSTOINCLUDE SECTIONSTOINCLUDE
                on PROGRAMEVENTREGISTRATIONSECTION.REGISTRATIONSECTIONCODEID = SECTIONSTOINCLUDE.REGISTRATIONSECTIONCODEID
            inner join dbo.PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION
                on PROGRAMEVENTREGISTRATIONSECTION.ID = PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.PROGRAMEVENTREGISTRATIONSECTIONID            
            where PROGRAMEVENTREGISTRATIONSECTION.EVENTID = @EVENTID;

    end else begin
        insert into @REGINFOSECTIONS (REGISTRATIONINFORMATIONID, SECTIONSEQUENCE, SEQUENCE)
            select 
                PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.REGISTRATIONINFORMATIONID, 
                PROGRAMEVENTREGISTRATIONSECTION.SEQUENCE as SECTIONSEQUENCE, 
                PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.SEQUENCE
            from dbo.PROGRAMEVENTREGISTRATIONSECTION
            inner join @SECTIONSTOINCLUDE SECTIONSTOINCLUDE
                on PROGRAMEVENTREGISTRATIONSECTION.REGISTRATIONSECTIONCODEID = SECTIONSTOINCLUDE.REGISTRATIONSECTIONCODEID
            inner join dbo.PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION
                on PROGRAMEVENTREGISTRATIONSECTION.ID = PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.PROGRAMEVENTREGISTRATIONSECTIONID
            where PROGRAMEVENTREGISTRATIONSECTION.PROGRAMID = @PROGRAMID;
    end

    declare @REGISTRANTREGISTRATIONINFORMATION table (
        RESPONSETYPECODE tinyint,
        NAME nvarchar(100),
        VALUE nvarchar(max),
        SECTIONSEQUENCE int,
        SEQUENCE int
    )

    insert into @REGISTRANTREGISTRATIONINFORMATION (RESPONSETYPECODE, NAME, VALUE, SECTIONSEQUENCE, SEQUENCE)
        select
            REGISTRATIONINFORMATION.RESPONSETYPECODE,
            REGISTRATIONINFORMATION.NAME,
            case 
                when REGISTRATIONINFORMATION.RESPONSETYPECODE in (0, 1) and REGISTRANTREGISTRATIONINFORMATION.TEXTVALUE <> '' then REGISTRANTREGISTRATIONINFORMATION.TEXTVALUE
                when REGISTRATIONINFORMATION.RESPONSETYPECODE = 2 then REGISTRATIONINFORMATIONOPTION.NAME
                when REGISTRATIONINFORMATION.RESPONSETYPECODE = 3 then 
                        case REGISTRANTREGISTRATIONINFORMATION.BOOLEANVALUE
                            when 1 then 'Yes'
                            else 'No'
                        end
            end as VALUE,
            coalesce(REGINFOSECTIONS.SECTIONSEQUENCE, 999) as SECTIONSEQUENCE,
            coalesce(REGINFOSECTIONS.SEQUENCE, 999) as SEQUENCE
        from dbo.REGISTRANTREGISTRATIONINFORMATION
        inner join dbo.REGISTRATIONINFORMATION
            on REGISTRANTREGISTRATIONINFORMATION.REGISTRATIONINFORMATIONID = REGISTRATIONINFORMATION.ID

        inner join @REGINFOSECTIONS REGINFOSECTIONS
            on REGISTRATIONINFORMATION.ID = REGINFOSECTIONS.REGISTRATIONINFORMATIONID

        left outer join dbo.REGISTRATIONINFORMATIONOPTION
            on REGISTRANTREGISTRATIONINFORMATION.REGISTRATIONINFORMATIONOPTIONID = REGISTRATIONINFORMATIONOPTION.ID

        where REGISTRANTREGISTRATIONINFORMATION.REGISTRANTID = @REGISTRANTID
            and REGISTRATIONINFORMATION.RESPONSETYPECODE <> 4;  -- Name/phone/email


    insert into @REGISTRANTREGISTRATIONINFORMATION (RESPONSETYPECODE, NAME, VALUE, SECTIONSEQUENCE, SEQUENCE)
        select
            4,
            REGISTRATIONINFORMATION.NAME,
            nullif(dbo.UDA_BUILDLISTWITHDELIMITER(nullif(REGISTRANTREGISTRATIONINFORMATION.TEXTVALUE, ''), ', '), ''),
            coalesce(REGINFOSECTIONS.SECTIONSEQUENCE, 999) as SECTIONSEQUENCE,
            coalesce(REGINFOSECTIONS.SEQUENCE, 999) as SEQUENCE
        from dbo.REGISTRANTREGISTRATIONINFORMATION
        inner join dbo.REGISTRATIONINFORMATION
            on REGISTRANTREGISTRATIONINFORMATION.REGISTRATIONINFORMATIONID = REGISTRATIONINFORMATION.ID

        inner join @REGINFOSECTIONS REGINFOSECTIONS
            on REGISTRATIONINFORMATION.ID = REGINFOSECTIONS.REGISTRATIONINFORMATIONID

        left outer join dbo.REGISTRATIONINFORMATIONOPTION
            on REGISTRANTREGISTRATIONINFORMATION.REGISTRATIONINFORMATIONOPTIONID = REGISTRATIONINFORMATIONOPTION.ID

        where REGISTRANTREGISTRATIONINFORMATION.REGISTRANTID = @REGISTRANTID
            and REGISTRATIONINFORMATION.RESPONSETYPECODE = 4  -- Name/phone/email

        group by REGISTRATIONINFORMATION.ID, REGISTRATIONINFORMATION.NAME, REGINFOSECTIONS.SECTIONSEQUENCE, REGINFOSECTIONS.SEQUENCE;

    insert into @RESULTS (RESPONSETYPECODE, NAME, VALUE)
        select
            RESPONSETYPECODE, 
            NAME, 
            VALUE
        from @REGISTRANTREGISTRATIONINFORMATION
        order by SECTIONSEQUENCE, SEQUENCE;

    return;
end