USP_DATAFORMTEMPLATE_ADD_SALESORDERITEMEVENTREGISTRATION_ONLINE

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CURRENTAPPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@EVENTID uniqueidentifier IN
@HOSTCONSTITUENTID uniqueidentifier IN
@SINGLEEVENTREGISTRATIONS xml IN
@REGISTRANTMAPPINGS xml IN

Definition

Copy

                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_SALESORDERITEMEVENTREGISTRATION_ONLINE
                    (
                        @ID uniqueidentifier = null output,
                        @CURRENTAPPUSERID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @EVENTID uniqueidentifier,
                        @HOSTCONSTITUENTID uniqueidentifier = null,
                        @SINGLEEVENTREGISTRATIONS xml = null,
                        @REGISTRANTMAPPINGS xml = null
                    )
                    as
                        set nocount on;

                        declare @CURRENTDATE datetime;

                        if @CHANGEAGENTID is null  
                            exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

                        set @CURRENTDATE = getdate();

                        declare @UNKNOWNGUESTWELLKNOWNGUID uniqueidentifier = 'C776DAB5-65B2-4258-ADAE-AE396D28E251'; --Well-known GUID for unknown guest

                        begin try
                            declare @REGISTRANTS_TABLE table (
                                [ID] uniqueidentifier,
                                [EVENTID] uniqueidentifier,
                                [EVENTPRICEID] uniqueidentifier,
                                [REGISTRATIONSCOLLECTIONID] uniqueidentifier,
                                [PREFERENCES] xml,
                                [REGISTERLATER] bit,
                                [CONSTITUENTID] uniqueidentifier,
                                [FIRSTNAME] nvarchar(50),
                                [KEYNAME] nvarchar(100),
                                [PHONE] nvarchar(100),
                                [EMAIL] dbo.UDT_EMAILADDRESS,
                                [TITLECODEID] uniqueidentifier,
                                [ADDRESSBLOCK] nvarchar(150),
                                [CITY] nvarchar(50),
                                [STATEID] uniqueidentifier,
                                [POSTCODE] nvarchar(12),
                                [COUNTRYID] uniqueidentifier
                            );

                            insert into @REGISTRANTS_TABLE 
                            select
                                newid(),
                                T.registrants.value('(EVENTID)[1]','uniqueidentifier') as 'EVENTID',
                                T.registrants.value('(EVENTPRICEID)[1]','uniqueidentifier') as 'EVENTPRICEID',
                                T.registrants.value('(REGISTRATIONSCOLLECTIONID)[1]','uniqueidentifier') as 'REGISTRATIONSCOLLECTIONID',
                                T.registrants.query('(PREFERENCES)[1]') as 'PREFERENCES',

                                T.registrants.value('(REGISTERLATER)[1]','bit') as 'REGISTERLATER',
                                T.registrants.value('(GUESTCONSTITUENTID)[1]','uniqueidentifier') as 'CONSTITUENTID',
                                T.registrants.value('(FIRSTNAME)[1]','nvarchar(50)') as 'FIRSTNAME',
                                T.registrants.value('(KEYNAME)[1]','nvarchar(100)') as 'KEYNAME',
                                T.registrants.value('(PHONE)[1]','nvarchar(100)') as 'PHONE',
                                isnull(T.registrants.value('(EMAIL)[1]','dbo.UDT_EMAILADDRESS'),'') as 'EMAIL',
                                dbo.UFN_TITLECODE_GETID(T.registrants.value('(TITLE)[1]','nvarchar(100)')) as 'TITLECODEID',

                                T.registrants.value('(ADDRESSBLOCK)[1]','nvarchar(150)') as 'ADDRESSBLOCK',
                                T.registrants.value('(CITY)[1]','nvarchar(50)') as 'CITY',
                                T.registrants.value('(STATEID)[1]','uniqueidentifier') as 'STATEID',
                                T.registrants.value('(POSTCODE)[1]','nvarchar(12)') as 'POSTCODE',
                                T.registrants.value('(COUNTRYID)[1]','uniqueidentifier') as 'COUNTRYID'
                            from @REGISTRANTMAPPINGS.nodes('/REGISTRANTMAPPINGS/ITEM') T(registrants)

                            --Automatch prep (don't want to do this work each time through the registrant cursor)
                            declare @ADDRESSSUBSTITUTIONS dbo.UDT_STRINGPAIR_100
                            insert into @ADDRESSSUBSTITUTIONS
                            select 
                                [DESIGNATION],
                                [ABBREVIATION]
                            from dbo.UFN_ADDRESS_ADDRESSBLOCK_STANDARDUSABBREVIATIONS_LOWERCASE()

                            declare @CONSTITUENTMATCHES table (
                                [ID] uniqueidentifier
                            )
                            --End automatch prep

                            --Registrant cursor prep
                            --Matching/Creating constituent records for registrants without them
                            --Updating constituent records for title, firstname
                            declare 
                                @REGISTRANTID uniqueidentifier,
                                @REGISTRANTREGISTERLATER bit,
                                @REGISTRANTCONSTITUENTID uniqueidentifier,
                                @REGISTRANTFIRSTNAME nvarchar(50),
                                @REGISTRANTKEYNAME nvarchar(100),
                                @REGISTRANTPHONE nvarchar(100),
                                @REGISTRANTTITLECODEID uniqueidentifier,
                                @REGISTRANTEMAIL dbo.UDT_EMAILADDRESS,

                                @REGISTRANTCOUNTRYID uniqueidentifier,
                                @REGISTRANTSTATEID uniqueidentifier,
                                @REGISTRANTADDRESSBLOCK nvarchar(150),
                                @REGISTRANTCITY nvarchar(50),
                                @REGISTRANTPOSTCODE nvarchar(12)

                            declare REGISTRANT_CURSOR cursor local fast_forward for
                            select 
                                [ID],
                                isnull([REGISTERLATER], 1),
                                case when [CONSTITUENTID] = '00000000-0000-0000-0000-000000000000' then null else [CONSTITUENTID] end,
                                isnull([FIRSTNAME],''),
                                isnull([KEYNAME],''),
                                [TITLECODEID],
                                isnull([PHONE],''),
                                isnull([EMAIL],''),
                                [COUNTRYID],
                                [STATEID],
                                isnull([ADDRESSBLOCK],''),
                                isnull([CITY],''),
                                isnull([POSTCODE],'')
                            from @REGISTRANTS_TABLE;

                            declare @VALIDADDRESS bit = 0;
                            --End registrant cursor prep

                            --Starting registrant matching/creating work
                            open REGISTRANT_CURSOR
                            fetch next from REGISTRANT_CURSOR into 
                                @REGISTRANTID
                                @REGISTRANTREGISTERLATER,
                                @REGISTRANTCONSTITUENTID
                                @REGISTRANTFIRSTNAME
                                @REGISTRANTKEYNAME
                                @REGISTRANTTITLECODEID
                                @REGISTRANTPHONE
                                @REGISTRANTEMAIL,
                                @REGISTRANTCOUNTRYID,
                                @REGISTRANTSTATEID,
                                @REGISTRANTADDRESSBLOCK,
                                @REGISTRANTCITY,
                                @REGISTRANTPOSTCODE
                            while @@FETCH_STATUS = 0
                            begin 
                                set @VALIDADDRESS = 0
                                if @REGISTRANTSTATEID = '00000000-0000-0000-0000-000000000000'
                                    set @REGISTRANTSTATEID = null

                                set @REGISTRANTADDRESSBLOCK = isnull(@REGISTRANTADDRESSBLOCK,'')
                                set @REGISTRANTCITY = isnull(@REGISTRANTCITY, '')
                                set @REGISTRANTPOSTCODE = isnull(@REGISTRANTPOSTCODE, '')
                                if (@REGISTRANTCOUNTRYID is not null and @REGISTRANTCOUNTRYID <> '00000000-0000-0000-0000-000000000000') and
                                    (
                                        @REGISTRANTSTATEID is not null or
                                        @REGISTRANTADDRESSBLOCK <> '' or
                                        @REGISTRANTCITY <> '' or
                                        @REGISTRANTPOSTCODE <> ''
                                    )
                                begin
                                    set @VALIDADDRESS = 1
                                end

                                --Find a constituent record match if we don't have one for this registrant
                                if @REGISTRANTCONSTITUENTID is null and @REGISTRANTREGISTERLATER = 0
                                begin
                                    --See if we have a match first
                                    delete @CONSTITUENTMATCHES

                                    insert into @CONSTITUENTMATCHES
                                    select [CONSTITUENT].[ID]
                                    from dbo.UFN_WEBFORMS_CONSTITUENT_EXACTAUTOMATCH (
                                        50,
                                        @REGISTRANTKEYNAME,
                                        @REGISTRANTFIRSTNAME,
                                        @REGISTRANTTITLECODEID,
                                        @REGISTRANTADDRESSBLOCK,
                                        @REGISTRANTCITY,
                                        @REGISTRANTCOUNTRYID,
                                        @REGISTRANTSTATEID,
                                        @REGISTRANTPOSTCODE,
                                        @REGISTRANTPHONE,
                                        @REGISTRANTEMAIL,
                                        @ADDRESSSUBSTITUTIONS
                                    ) [CONSTITUENT]

                                    --Only a match if we have one or if the host is a match
                                    declare @CONSTITUENTMATCHID uniqueidentifier = null
                                    if (select count([ID]) from @CONSTITUENTMATCHES) = 1
                                        select @CONSTITUENTMATCHID = [ID] from @CONSTITUENTMATCHES
                                    else if exists(select top 1 [ID] from @CONSTITUENTMATCHES where [ID] = @HOSTCONSTITUENTID)
                                        select @CONSTITUENTMATCHID = @HOSTCONSTITUENTID

                                    if @CONSTITUENTMATCHID is not null
                                    begin
                                        if    --Not already a registrant for this event
                                            not exists(
                                                select 1
                                                from dbo.[REGISTRANT]
                                                where 
                                                    [REGISTRANT].[CONSTITUENTID] = @CONSTITUENTMATCHID and
                                                    [REGISTRANT].[EVENTID] = @EVENTID and
                                                    --Allow hosts that haven't been marked as attending to match
                                                    (
                                                        [REGISTRANT].[WILLNOTATTEND] = 0 or
                                                        exists(select top 1 [ID] from dbo.REGISTRANTREGISTRATIONMAP where [REGISTRANTID] = [REGISTRANT].[ID])
                                                    )
                                            ) and
                                            --Not already in registrant mapping
                                            not exists (
                                                select 1
                                                from @REGISTRANTS_TABLE [R]
                                                where [R].[CONSTITUENTID] = @CONSTITUENTMATCHID
                                            )
                                            begin
                                                set @REGISTRANTCONSTITUENTID = @CONSTITUENTMATCHID

                                                update @REGISTRANTS_TABLE
                                                set [CONSTITUENTID] = @REGISTRANTCONSTITUENTID
                                                where [ID] = @REGISTRANTID
                                            end
                                    end
                                end

                                --Find a match or add a constituent record if we don't have one for this registrant
                                if @REGISTRANTCONSTITUENTID is null and @REGISTRANTREGISTERLATER = 0
                                begin
                                    --If we had no match, let's create this constituent
                                    if @REGISTRANTCONSTITUENTID is null
                                    begin
                                        set @REGISTRANTCONSTITUENTID = newid()
                                        insert into dbo.CONSTITUENT
                                        (
                                            [ID],
                                            [KEYNAME],
                                            [FIRSTNAME],
                                            [TITLECODEID],
                                            [ADDEDBYID],
                                            [CHANGEDBYID],
                                            [DATEADDED],
                                            [DATECHANGED]
                                        )
                                        values (
                                            @REGISTRANTCONSTITUENTID,
                                            @REGISTRANTKEYNAME,
                                            @REGISTRANTFIRSTNAME,
                                            @REGISTRANTTITLECODEID,
                                            @CHANGEAGENTID,
                                            @CHANGEAGENTID,
                                            @CURRENTDATE,
                                            @CURRENTDATE
                                        )

                                        insert into dbo.CONSTITUENTORIGINATION (
                                            [ID],
                                            [ORIGINCODE],
                                            [ADDEDBYID],
                                            [CHANGEDBYID],
                                            [DATEADDED],
                                            [DATECHANGED]
                                        )
                                        values (
                                            @REGISTRANTCONSTITUENTID,
                                            1,
                                            @CHANGEAGENTID,
                                            @CHANGEAGENTID,
                                            @CURRENTDATE,
                                            @CURRENTDATE
                                        )

                                        if len(@REGISTRANTPHONE) > 0
                                        begin
                                            exec dbo.USP_PHONE_CREATE
                                                null, --@ID
                                                @CHANGEAGENTID,
                                                @CURRENTDATE,
                                                @REGISTRANTCONSTITUENTID,
                                                null, --@PHONETYPECODEID
                                                @REGISTRANTPHONE,
                                                1, --@PRIMARY
                                                @ORIGINCODE = 1,
                                                @COUNTRYID = @REGISTRANTCOUNTRYID;
                                        end

                                        if len(@REGISTRANTEMAIL) > 0
                                        begin
                                            exec dbo.USP_EMAILADDRESS_CREATE
                                                null, --@ID
                                                @CHANGEAGENTID,    
                                                @CURRENTDATE,
                                                @REGISTRANTCONSTITUENTID,
                                                null, --@EMAILADDRESSTYPECODEID
                                                @REGISTRANTEMAIL,
                                                1, --@PRIMARY
                                                @ORIGINCODE = 1;
                                        end

                                        if @VALIDADDRESS = 1
                                        begin
                                            exec dbo.USP_ADDRESS_CREATE
                                                null, --ID
                                                @CHANGEAGENTID,
                                                @REGISTRANTCONSTITUENTID,
                                                null, --ADDRESSTYPECODEID
                                                1, --Primary
                                                0, --Do not mail
                                                '0000', --Start Date
                                                '0000', --End Date
                                                @REGISTRANTCOUNTRYID,
                                                @REGISTRANTSTATEID,
                                                @REGISTRANTADDRESSBLOCK,
                                                @REGISTRANTCITY,
                                                @REGISTRANTPOSTCODE,
                                                @ORIGINCODE = 1;
                                        end

                                        /*Start name format defaults*/
                                        insert into [dbo].[NAMEFORMAT] (
                                            [CONSTITUENTID],
                                            [NAMEFORMATTYPECODEID],
                                            [NAMEFORMATFUNCTIONID],
                                            [ADDEDBYID],
                                            [CHANGEDBYID],
                                            [DATEADDED],
                                            [DATECHANGED],
                                            [PRIMARYADDRESSEE],
                                            [PRIMARYSALUTATION],
                                            [SEQUENCE]
                                        )
                                        select
                                            @REGISTRANTCONSTITUENTID,
                                            NFD.NAMEFORMATTYPECODEID,
                                            NFD.NAMEFORMATFUNCTIONID,
                                            @CHANGEAGENTID,
                                            @CHANGEAGENTID,
                                            @CURRENTDATE,
                                            @CURRENTDATE,
                                            NFD.PRIMARYADDRESSEE,
                                            NFD.PRIMARYSALUTATION,
                                            (
                                                select count(ID) 
                                                from dbo.NAMEFORMATDEFAULT as SUBNFD 
                                                where 
                                                    NFD.ID > SUBNFD.ID 
                                                    and NFD.APPLYTOCODE = SUBNFD.APPLYTOCODE
                                            )
                                        from dbo.NAMEFORMATDEFAULT as NFD
                                        where NFD.APPLYTOCODE = 0
                                    end

                                    update @REGISTRANTS_TABLE
                                    set [CONSTITUENTID] = @REGISTRANTCONSTITUENTID
                                    where [ID] = @REGISTRANTID
                                end
                                else if not @REGISTRANTCONSTITUENTID is null and @REGISTRANTREGISTERLATER = 0 --Update constituent
                                begin
                                    update dbo.[CONSTITUENT]
                                    set 
                                        [FIRSTNAME] = case when len([FIRSTNAME]) = 0 then @REGISTRANTFIRSTNAME else [FIRSTNAME] end,
                                        [TITLECODEID] = case when [TITLECODEID] is null then @REGISTRANTTITLECODEID else [TITLECODEID] end,
                                        [TITLE2CODEID] = case when [TITLECODEID] <> @REGISTRANTTITLECODEID and [TITLE2CODEID] is null then @REGISTRANTTITLECODEID else [TITLE2CODEID] end,
                                        [CHANGEDBYID] = @CHANGEAGENTID,
                                        [DATECHANGED] = @CURRENTDATE
                                    where [ID] = @REGISTRANTCONSTITUENTID

                                    if len(@REGISTRANTPHONE) > 0
                                    begin
                                        declare @PHONEEXISTS bit = 0
                                        declare @HASPRIMARYPHONE bit = 0
                                        declare @PHONENOFORMAT nvarchar(100) = dbo.UFN_PHONE_REMOVEFORMATTING(@REGISTRANTPHONE);
                                        select top 1
                                            @PHONEEXISTS = [PHONENUMBER].[EXISTS],
                                            @HASPRIMARYPHONE = [PHONE].[ISPRIMARY]
                                        from dbo.[PHONE] with (nolock)
                                        cross apply(select case when [NUMBERNOFORMAT] = @PHONENOFORMAT then 1 else 0 end as [EXISTS]) as [PHONENUMBER]
                                        where [CONSTITUENTID] = @REGISTRANTCONSTITUENTID
                                        --Order by: If the phone number exists already, we'll see that and not create the phone.  If not, the next thing we care about is whether they have a primary already.
                                        order by [PHONENUMBER].[EXISTS] desc, [ISPRIMARY] desc

                                        if @PHONEEXISTS = 0
                                        begin
                                            declare @PRIMARYPHONE bit = ~@HASPRIMARYPHONE
                                            exec dbo.USP_PHONE_CREATE
                                                null, --@ID
                                                @CHANGEAGENTID,
                                                @CURRENTDATE,
                                                @REGISTRANTCONSTITUENTID,
                                                null, --@PHONETYPECODEID
                                                @REGISTRANTPHONE,
                                                @PRIMARYPHONE, --@PRIMARY
                                                @ORIGINCODE = 1,
                                                @COUNTRYID = @REGISTRANTCOUNTRYID;
                                        end
                                    end

                                    if len(@REGISTRANTEMAIL) > 0
                                    begin
                                        declare @EMAILEXISTS bit = 0
                                        declare @HASPRIMARYEMAIL bit = 0
                                        select top 1
                                            @EMAILEXISTS = [EMAIL].[EXISTS],
                                            @HASPRIMARYEMAIL = [EMAILADDRESS].[ISPRIMARY]
                                        from dbo.[EMAILADDRESS] with (nolock)
                                        cross apply(select case when [EMAILADDRESS] = @REGISTRANTEMAIL then 1 else 0 end as [EXISTS]) as [EMAIL]
                                        where [CONSTITUENTID] = @REGISTRANTCONSTITUENTID
                                        --Order by: If the email address exists already, we'll see that and not create the email.  If not, the next thing we care about is whether they have a primary already.
                                        order by [EMAIL].[EXISTS] desc, [ISPRIMARY] desc;

                                        if @EMAILEXISTS = 0
                                        begin
                                            declare @PRIMARYEMAIL bit = ~@HASPRIMARYEMAIL
                                            exec dbo.USP_EMAILADDRESS_CREATE
                                                null, --@ID
                                                @CHANGEAGENTID,    
                                                @CURRENTDATE,
                                                @REGISTRANTCONSTITUENTID,
                                                null, --@EMAILADDRESSTYPECODEID
                                                @REGISTRANTEMAIL,
                                                @PRIMARYEMAIL, --@PRIMARY
                                                @ORIGINCODE = 1;
                                        end
                                    end

                                    if @VALIDADDRESS = 1
                                    begin
                                        declare @CREATEADDRESS bit = 0
                                        declare @PRIMARYADDRESS bit = 1

                                        --Web forms constituent match setting
                                        declare @LEFTPOSTCODECOUNT tinyint = 0
                                        select @LEFTPOSTCODECOUNT = [LEFTPOSTCODECOUNT]
                                        from dbo.[CONSTITUENTDUPLICATESEARCHSETTINGS]
                                        where [ID] = '7BDE63AA-73B8-4A31-BE9F-82D92B67E2F4'

                                        declare @HASPRIMARY bit = 0
                                        declare @ADDRESSEXISTS bit = 0
                                        select top 1
                                            @ADDRESSEXISTS = [ADDY].[EXISTS],
                                            @HASPRIMARY = [ADDRESS].[ISPRIMARY]
                                        from dbo.[ADDRESS] with (nolock)
                                        cross apply (
                                            select case 
                                                when 
                                                    dbo.UFN_ADDRESS_ADDRESSBLOCK_NORMALIZE_LOWERCASE([ADDRESS].[ADDRESSBLOCK], @ADDRESSSUBSTITUTIONS) = dbo.UFN_ADDRESS_ADDRESSBLOCK_NORMALIZE_LOWERCASE(@REGISTRANTADDRESSBLOCK, @ADDRESSSUBSTITUTIONS) and
                                                    lower([ADDRESS].[CITY]) = lower(@REGISTRANTCITY) and
                                                    left([ADDRESS].[POSTCODE], @LEFTPOSTCODECOUNT) = left(@REGISTRANTPOSTCODE, @LEFTPOSTCODECOUNT) and
                                                    [ADDRESS].[COUNTRYID] = @REGISTRANTCOUNTRYID and
                                                    ([ADDRESS].[STATEID] = @REGISTRANTSTATEID or @REGISTRANTSTATEID is null)
                                                        then 1
                                                else 0
                                            end as [EXISTS]
                                        ) [ADDY]
                                        where [ADDRESS].[CONSTITUENTID] = @REGISTRANTCONSTITUENTID
                                        order by [ADDY].[EXISTS] desc, [ADDRESS].[ISPRIMARY] desc

                                        set @CREATEADDRESS = ~@ADDRESSEXISTS
                                        set @PRIMARYADDRESS = ~@HASPRIMARY
                                    end
                                    else if not exists(select 1 from dbo.[ADDRESS] where [CONSTITUENTID] = @REGISTRANTCONSTITUENTID)
                                        set @CREATEADDRESS = 1

                                    if @CREATEADDRESS = 1
                                    begin
                                        exec dbo.USP_ADDRESS_CREATE
                                            null, --ID
                                            @CHANGEAGENTID,
                                            @REGISTRANTCONSTITUENTID,
                                            null, --ADDRESSTYPECODEID
                                            @PRIMARYADDRESS, --Primary
                                            0, --Do not mail
                                            '0000', --Start Date
                                            '0000', --End Date
                                            @REGISTRANTCOUNTRYID,
                                            @REGISTRANTSTATEID,
                                            @REGISTRANTADDRESSBLOCK,
                                            @REGISTRANTCITY,
                                            @REGISTRANTPOSTCODE,
                                            @ORIGINCODE = 1;
                                    end
                                end
                                else --Registrant is 'register later' but has constituent ID set.  Let's knock it out
                                begin
                                    update @REGISTRANTS_TABLE
                                    set [CONSTITUENTID] = @UNKNOWNGUESTWELLKNOWNGUID
                                    where [ID] = @REGISTRANTID
                                end

                                fetch next from REGISTRANT_CURSOR into 
                                    @REGISTRANTID
                                    @REGISTRANTREGISTERLATER,
                                    @REGISTRANTCONSTITUENTID
                                    @REGISTRANTFIRSTNAME
                                    @REGISTRANTKEYNAME
                                    @REGISTRANTTITLECODEID
                                    @REGISTRANTPHONE
                                    @REGISTRANTEMAIL,
                                    @REGISTRANTCOUNTRYID,
                                    @REGISTRANTSTATEID,
                                    @REGISTRANTADDRESSBLOCK,
                                    @REGISTRANTCITY,
                                    @REGISTRANTPOSTCODE
                                end
                            close REGISTRANT_CURSOR
                            deallocate REGISTRANT_CURSOR

                            declare @EVENTREGISTRANTMAPPINGS xml = (
                                select
                                    [R].[EVENTID],
                                    [R].[EVENTPRICEID],
                                    [R].[REGISTRATIONSCOLLECTIONID],
                                    '' as [REGISTRANTREGISTRATIONMAPS],
                                    (select [R].[PREFERENCES]),
                                    (select
                                        [R].[EVENTID],
                                        0 as [WAIVEBENEFITS]
                                        for xml raw('ITEM'),type,elements,root('REGISTRANTWAIVEBENEFITS'),binary base64
                                    ),
                                    [R].[CONSTITUENTID] as [GUESTCONSTITUENTID],
                                    0 as [BENEFITSWAIVED],
                                    0 as [WAIVEREGISTRATIONFEE],
                                    0 as [HASNOTIFICATIONS],
                                    1 as [ONLINEREGISTRANT]
                                from @REGISTRANTS_TABLE [R]
                                for xml raw('ITEM'),type,elements,root('REGISTRANTMAPPINGS'),binary base64
                            )

                            declare @HOSTREGISTRANTID uniqueidentifier = null
                            exec dbo.USP_REGISTRANT_UNIFIEDUPDATE
                                @ID = @HOSTREGISTRANTID output,
                                @CURRENTAPPUSERID = @CURRENTAPPUSERID,
                                @SECURITYCONTEXTFORMINSTANCEID = 'EA30FC33-570E-4F1B-B5BD-237F8BC89E5E', --Data form instance ID for this for
                                @CHANGEAGENTID = @CHANGEAGENTID,
                                @CURRENTDATE = @CURRENTDATE,
                                @EVENTID = @EVENTID,
                                @CONSTITUENTID = @HOSTCONSTITUENTID,
                                @DATEPURCHASED = @CURRENTDATE,
                                @PACKAGEREGISTRATIONS = null,
                                @PACKAGESPRICES = null,
                                @SINGLEEVENTREGISTRATIONS = @SINGLEEVENTREGISTRATIONS,
                                @WAIVEBENEFITS = 0,
                                @REGISTRANTMAPPINGS = @EVENTREGISTRANTMAPPINGS,
                                @DELETEDREGISTRANTREGISTRATIONMAPS = null,
                                @ISADD = 1,
                                @ISWALKIN = 0;

                            declare @EVENTNAME nvarchar(100)
                            select @EVENTNAME = [NAME] from dbo.[EVENT] where [ID] = @EVENTID

                            merge dbo.[SALESORDERITEMEVENTREGISTRATION] as [TARGET]
                            using (select @ID as ID) as [SOURCE]
                            on (TARGET.ID = SOURCE.ID)
                            when matched then
                                update 
                                set 
                                    REGISTRANTID = @HOSTREGISTRANTID,
                                    EVENTNAME = @EVENTNAME,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                            when not matched then
                                insert (
                                    ID, 
                                    REGISTRANTID, 
                                    EVENTNAME, 
                                    ADDEDBYID, 
                                    CHANGEDBYID, 
                                    DATEADDED, 
                                    DATECHANGED
                                )
                                values (
                                    @ID
                                    @HOSTREGISTRANTID
                                    @EVENTNAME
                                    @CHANGEAGENTID
                                    @CHANGEAGENTID
                                    @CURRENTDATE
                                    @CURRENTDATE
                                );


                            insert into dbo.[SALESORDERITEMEVENTREGISTRANTREGISTRATION]
                            (
                                [ID],
                                [SALESORDERITEMEVENTREGISTRATIONID],
                                [EVENTPRICEID],
                                [QUANTITY],
                                [AMOUNT],
                                [ADDEDBYID], 
                                [CHANGEDBYID], 
                                [DATEADDED], 
                                [DATECHANGED]
                            )
                            select
                                newid(),
                                @ID,
                                [REGISTRANTREGISTRATION].[EVENTPRICEID],
                                coalesce(sum([REGISTRANTREGISTRATION].[QUANTITY]),0),
                                coalesce(sum([REGISTRANTREGISTRATION].[AMOUNT]),0),
                                @CHANGEAGENTID
                                @CHANGEAGENTID
                                @CURRENTDATE
                                @CURRENTDATE
                            from dbo.[REGISTRANTREGISTRATION]
                            where [REGISTRANTREGISTRATION].[REGISTRANTID] = @HOSTREGISTRANTID
                            group by [REGISTRANTREGISTRATION].[EVENTPRICEID]

                        end try

                        begin catch
                            exec dbo.USP_RAISE_ERROR;
                            return 1;
                        end catch

                        return 0;