USP_SALESORDER_PREREGISTEREDEVENT_UPDATEHOST

Replaces pre-registered event host with the constituent on the order.

Parameters

Parameter Parameter Type Mode Description
@CHANGEAGENTID uniqueidentifier IN
@SALESORDERID uniqueidentifier IN
@EVENTID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_SALESORDER_PREREGISTEREDEVENT_UPDATEHOST
            (
                @CHANGEAGENTID uniqueidentifier = null,
                @SALESORDERID uniqueidentifier = null,
                @EVENTID uniqueidentifier = null,
                @CONSTITUENTID uniqueidentifier = null
            )
            as
            begin
                if @CHANGEAGENTID is null  
                    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

                declare @CURRENTDATE datetime
                set @CURRENTDATE = getdate()

                if @CONSTITUENTID is null
                begin
                    select @CONSTITUENTID = [SALESORDER].[CONSTITUENTID]
                    from dbo.[SALESORDER]
                    where [SALESORDER].[ID] = @SALESORDERID
                end

                declare @HOSTREGISTRANTID uniqueidentifier
                declare @HOSTWILLNOTATTEND bit = 0
                declare @HOSTHOSTSOTHERORDERS bit = 0
                select top 1 
                    @HOSTREGISTRANTID = [REGISTRANT].[GUESTOFREGISTRANTID],
                    @HOSTWILLNOTATTEND = (select [REG].[WILLNOTATTEND] from dbo.[REGISTRANT] as [REG] where [ID] =[REGISTRANT].[GUESTOFREGISTRANTID])
                from dbo.[REGISTRANT]
                inner join dbo.[SALESORDERITEMTICKETREGISTRANT]
                    on [REGISTRANT].[ID] = [SALESORDERITEMTICKETREGISTRANT].[REGISTRANTID]
                inner join dbo.[SALESORDERITEMTICKET]
                    on [SALESORDERITEMTICKETREGISTRANT].[SALESORDERITEMTICKETID] = [SALESORDERITEMTICKET].[ID]
                inner join dbo.[SALESORDERITEM]
                    on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEM].[ID]
                where
                    [SALESORDERITEM].[SALESORDERID] = @SALESORDERID and
                    [SALESORDERITEMTICKET].[EVENTID] = @EVENTID and
                    [REGISTRANT].[GUESTOFREGISTRANTID] is not null

                if @HOSTREGISTRANTID is null
                begin
                    --Host is only registrant

                    select top 1 
                        @HOSTREGISTRANTID = [REGISTRANT].[ID],
                        @HOSTWILLNOTATTEND = [REGISTRANT].[WILLNOTATTEND]
                    from dbo.[REGISTRANT]
                    inner join dbo.[SALESORDERITEMTICKETREGISTRANT]
                        on [REGISTRANT].[ID] = [SALESORDERITEMTICKETREGISTRANT].[REGISTRANTID]
                    inner join dbo.[SALESORDERITEMTICKET]
                        on [SALESORDERITEMTICKETREGISTRANT].[SALESORDERITEMTICKETID] = [SALESORDERITEMTICKET].[ID]
                    inner join dbo.[SALESORDERITEM]
                        on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEM].[ID]
                    where
                        [SALESORDERITEM].[SALESORDERID] = @SALESORDERID and
                        [SALESORDERITEMTICKET].[EVENTID] = @EVENTID
                end

                if (select count(distinct [SALESORDERITEM].[SALESORDERID])
                    from dbo.[SALESORDERITEM]
                    inner join dbo.[SALESORDERITEMTICKET]
                        on [SALESORDERITEM].[ID] = [SALESORDERITEMTICKET].[ID]
                    inner join dbo.[SALESORDERITEMTICKETREGISTRANT]
                        on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEMTICKETREGISTRANT].[SALESORDERITEMTICKETID]
                    inner join dbo.[REGISTRANT]
                        on [SALESORDERITEMTICKETREGISTRANT].[REGISTRANTID] = [REGISTRANT].[ID]
                    where 
                        [REGISTRANT].[EVENTID] = @EVENTID and
                        [REGISTRANT].[GUESTOFREGISTRANTID] = @HOSTREGISTRANTID
                    ) > 1
                        set @HOSTHOSTSOTHERORDERS = 1

                declare @CONSTITUENTREGISTRANTID uniqueidentifier
                declare @CONSTITUENTGUESTOFREGISTRANTID uniqueidentifier
                declare @CONSTITUENTREGISTRANTONORDER bit = 0
                select
                    @CONSTITUENTREGISTRANTID = [REGISTRANT].[ID],
                    @CONSTITUENTGUESTOFREGISTRANTID = [REGISTRANT].[GUESTOFREGISTRANTID]
                from dbo.[REGISTRANT]
                where 
                    [REGISTRANT].[EVENTID] = @EVENTID and
                    [REGISTRANT].[CONSTITUENTID] = @CONSTITUENTID

                select @CONSTITUENTREGISTRANTONORDER = 1
                from dbo.[SALESORDERITEMTICKETREGISTRANT]
                inner join dbo.[SALESORDERITEMTICKET]
                    on [SALESORDERITEMTICKETREGISTRANT].[SALESORDERITEMTICKETID] = [SALESORDERITEMTICKET].[ID]
                inner join dbo.[SALESORDERITEM]
                    on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEM].[ID]
                where 
                    [SALESORDERITEMTICKETREGISTRANT].[REGISTRANTID] = @CONSTITUENTREGISTRANTID and
                    [SALESORDERITEM].[SALESORDERID] = @SALESORDERID

                declare @GUESTOFREGISTRANTID uniqueidentifier
                begin try            
                    if @CONSTITUENTREGISTRANTID is not null and @CONSTITUENTGUESTOFREGISTRANTID is null
                        -- If current constituent is a host, we can put the registrants under them

                        set @GUESTOFREGISTRANTID = @CONSTITUENTREGISTRANTID 
                    else if @CONSTITUENTGUESTOFREGISTRANTID is not null and @CONSTITUENTREGISTRANTONORDER = 0
                        -- If the current constituent is a guest on another order, make their host everyone's

                        set @GUESTOFREGISTRANTID = @CONSTITUENTGUESTOFREGISTRANTID
                    else if @CONSTITUENTREGISTRANTID is not null
                    begin
                        -- Make this guest the host

                        set @GUESTOFREGISTRANTID = @CONSTITUENTREGISTRANTID
                        update dbo.[REGISTRANT]
                        set
                            [REGISTRANT].[GUESTOFREGISTRANTID] = null,
                            [REGISTRANT].[CHANGEDBYID] = @CHANGEAGENTID,
                            [REGISTRANT].[DATECHANGED] = @CURRENTDATE
                        where [REGISTRANT].[ID] = @CONSTITUENTREGISTRANTID
                    end
                    else if @HOSTWILLNOTATTEND = 1 and @HOSTHOSTSOTHERORDERS = 0
                    begin
                        -- If the old host was only a host and only the host for this order, we can replace them as the registrant constituent

                        set @GUESTOFREGISTRANTID = @HOSTREGISTRANTID
                        update dbo.[REGISTRANT]
                        set 
                            [REGISTRANT].[CONSTITUENTID] = @CONSTITUENTID,
                            [REGISTRANT].[CHANGEDBYID] = @CHANGEAGENTID,
                            [REGISTRANT].[DATECHANGED] = @CURRENTDATE
                        where [REGISTRANT].[ID] = @HOSTREGISTRANTID
                    end
                    else
                    begin
                        -- Otherwise, we need to add a host registrant record for the new constituent

                        set @GUESTOFREGISTRANTID = newid()
                        insert into dbo.[REGISTRANT]
                        (
                            [ID],
                            [EVENTID],
                            [CONSTITUENTID],
                            [WILLNOTATTEND],
                            [ADDEDBYID],
                            [CHANGEDBYID],
                            [DATEADDED],
                            [DATECHANGED]
                        )
                        values (
                            @GUESTOFREGISTRANTID,
                            @EVENTID,
                            @CONSTITUENTID,
                            1,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                        )
                    end

                    if @GUESTOFREGISTRANTID <> @HOSTREGISTRANTID
                    begin
                        --If there's a new host registrant, update the guests

                        update dbo.[REGISTRANT]
                        set
                            [REGISTRANT].[GUESTOFREGISTRANTID] = @GUESTOFREGISTRANTID,
                            [REGISTRANT].[DATECHANGED] = @CURRENTDATE,
                            [REGISTRANT].[CHANGEDBYID] = @CHANGEAGENTID
                        from dbo.[REGISTRANT]
                        inner join dbo.[SALESORDERITEMTICKETREGISTRANT]
                            on [REGISTRANT].[ID] = [SALESORDERITEMTICKETREGISTRANT].[REGISTRANTID]
                        inner join dbo.[SALESORDERITEMTICKET]
                            on [SALESORDERITEMTICKETREGISTRANT].[SALESORDERITEMTICKETID] = [SALESORDERITEMTICKET].[ID]
                        inner join dbo.[SALESORDERITEM]
                            on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEM].[ID]
                        where
                            [SALESORDERITEMTICKETREGISTRANT].[REGISTRANTID] = [REGISTRANT].[ID] and
                            [SALESORDERITEM].[SALESORDERID] = @SALESORDERID and
                            [SALESORDERITEMTICKET].[EVENTID] = @EVENTID and
                            [REGISTRANT].[ID] not in (@GUESTOFREGISTRANTID, @HOSTREGISTRANTID)

                        if @HOSTHOSTSOTHERORDERS = 0
                        begin
                            update dbo.[REGISTRANT]
                            set
                                [REGISTRANT].[GUESTOFREGISTRANTID] = @GUESTOFREGISTRANTID,
                                [REGISTRANT].[DATECHANGED] = @CURRENTDATE,
                                [REGISTRANT].[CHANGEDBYID] = @CHANGEAGENTID
                            from dbo.[SALESORDERITEMTICKETREGISTRANT]
                            inner join dbo.[SALESORDERITEMTICKET]
                                on [SALESORDERITEMTICKETREGISTRANT].[SALESORDERITEMTICKETID] = [SALESORDERITEMTICKET].[ID]
                            inner join dbo.[SALESORDERITEM]
                                on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEM].[ID]
                            where
                                [SALESORDERITEMTICKETREGISTRANT].[REGISTRANTID] = [REGISTRANT].[ID] and
                                [SALESORDERITEM].[SALESORDERID] = @SALESORDERID and
                                [SALESORDERITEMTICKET].[EVENTID] = @EVENTID and
                                [REGISTRANT].[ID] = @HOSTREGISTRANTID
                        end

                        if @CONSTITUENTREGISTRANTID is not null and @HOSTWILLNOTATTEND = 1 and @HOSTHOSTSOTHERORDERS = 0
                        begin
                            -- If we're using the new constituent's registrant record to host

                            -- and the old host is only a host and only hosting for this sales order, we should delete that registrant record

                            exec dbo.[USP_REGISTRANT_DELETEBYID_WITHCHANGEAGENTID] @HOSTREGISTRANTID, @CHANGEAGENTID;
                        end
                    end
                end try

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