USP_SALESORDER_PREREGISTEREDPROGRAMEVENTTICKET_EDIT

Edits preregistered program event tickets.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@SALESORDERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@EVENTID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN
@REGISTRANTS xml IN
@CURRENTDATE datetime IN
@MARKREGISTRANTSATTENDED bit IN

Definition

Copy


CREATE procedure dbo.USP_SALESORDER_PREREGISTEREDPROGRAMEVENTTICKET_EDIT
(
    @ID uniqueidentifier,
    @SALESORDERID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @CURRENTAPPUSERID uniqueidentifier,
    @EVENTID uniqueidentifier = null,
    @CONSTITUENTID uniqueidentifier = null,
    @REGISTRANTS xml = null,
    @CURRENTDATE datetime = null,
    @MARKREGISTRANTSATTENDED bit = 0
)
as
    set nocount on;

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

    if @CURRENTDATE is null
        set @CURRENTDATE = getdate();

    exec dbo.USP_SALESORDER_PREREGISTEREDEVENT_UPDATEHOST @CHANGEAGENTID, @SALESORDERID, @EVENTID, @CONSTITUENTID

    declare @SALESMETHODTYPECODE tinyint;
    select @SALESMETHODTYPECODE = [SALESMETHODTYPECODE] from dbo.[SALESORDER] where [ID] = @SALESORDERID;

    declare @HOSTREGISTRANTID uniqueidentifier = null
    declare @HOSTCONSTITUENTID uniqueidentifier = null
    select top 1 
        @HOSTREGISTRANTID = [REGISTRANT].[GUESTOFREGISTRANTID],
        @HOSTCONSTITUENTID = (select [REG].[CONSTITUENTID] from dbo.[REGISTRANT] as [REG] where [REG].[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],
            @HOSTCONSTITUENTID = [REGISTRANT].[CONSTITUENTID]
        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

    -- Assign registrant IDs if they weren't passed in

    -- Assign the host registrant id if the host + guest record exists

    -- If a new constituent has taken the place of the host constituent, assign a new registrant id for that constituent

    set @REGISTRANTS = (
        select
            case 
                when T.registrants.value('(CONSTITUENTID)[1]', 'uniqueidentifier') = @HOSTCONSTITUENTID then @HOSTREGISTRANTID
                when T.registrants.value('(ID)[1]', 'uniqueidentifier') = @HOSTREGISTRANTID  then newid()
                else isnull(T.registrants.value('(ID)[1]', 'uniqueidentifier'), newid()) 
            end as [ID],
            T.registrants.value('(PRICETYPECODEID)[1]', 'uniqueidentifier') as [PRICETYPECODEID],
            T.registrants.value('(CONSTITUENTID)[1]', 'uniqueidentifier') as [CONSTITUENTID],
            T.registrants.value('(NOTES)[1]', 'nvarchar(255)') as [NOTES],
            T.registrants.query('./PREFERENCES/ITEM') as [PREFERENCES],
            T.registrants.query('./REGISTRANTREGISTRATIONINFORMATION/ITEM') as [REGISTRANTREGISTRATIONINFORMATION]
        from
            @REGISTRANTS.nodes('/REGISTRANTS/ITEM') T(registrants)
        for xml raw('ITEM'), type, elements, root('REGISTRANTS'), binary base64
    );

    declare @ORDERREGISTRANTS table
    (
        ID uniqueidentifier,
        PRICETYPECODEID uniqueidentifier,
        CONSTITUENTID uniqueidentifier,
        NOTES nvarchar(255),
        SALESORDERITEMID uniqueidentifier
    );

    declare @ORDERREGISTRANTPREFERENCES table
    (
        ID uniqueidentifier,
        REGISTRANTID uniqueidentifier,
        EVENTPREFERENCEID uniqueidentifier
    );

    declare @ORDERREGISTRANTREGISTRATIONINFORMATION table
    (
        ID uniqueidentifier,
        REGISTRANTID uniqueidentifier,
        REGISTRATIONINFORMATIONID uniqueidentifier,
        RESPONSETYPECODE tinyint,
        PERSONDETAILTYPECODE tinyint,
        TEXTVALUE nvarchar(max),
        REGISTRATIONINFORMATIONOPTIONID uniqueidentifier                                
    );

    declare @AVAILABLEPRICETYPES table
    (
        PRICETYPECODEID uniqueidentifier,
        DESCRIPTION nvarchar(100),
        FACEPRICE money
    );

    insert into @ORDERREGISTRANTS
    (
        ID,
        PRICETYPECODEID,
        CONSTITUENTID,
        NOTES
    )
    select
        T.registrants.value('(ID)[1]', 'uniqueidentifier'),
        T.registrants.value('(PRICETYPECODEID)[1]', 'uniqueidentifier'),
        T.registrants.value('(CONSTITUENTID)[1]', 'uniqueidentifier'),
        isnull(T.registrants.value('(NOTES)[1]', 'nvarchar(255)'), '')
    from
        @REGISTRANTS.nodes('/REGISTRANTS/ITEM') T(registrants);

    --Update order registrants with the sales order item id which they belong

    update @ORDERREGISTRANTS
    set SALESORDERITEMID = (
        select SALESORDERITEM.ID
        from SALESORDERITEM
        inner join dbo.SALESORDERITEMTICKET
            on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
        where
            SALESORDERITEM.SALESORDERID = @SALESORDERID and
            SALESORDERITEMTICKET.EVENTID = @EVENTID and
            SALESORDERITEMTICKET.PRICETYPECODEID = [@ORDERREGISTRANTS].PRICETYPECODEID
    )

    insert into @ORDERREGISTRANTPREFERENCES
    (
        ID,
        REGISTRANTID,
        EVENTPREFERENCEID
    )
    select
        isnull(T2.preferences.value('(ID)[1]', 'uniqueidentifier'), newid()),
        T.registrants.value('(ID)[1]', 'uniqueidentifier'),
        T2.preferences.value('(EVENTPREFERENCEID)[1]', 'uniqueidentifier')
    from
        @REGISTRANTS.nodes('/REGISTRANTS/ITEM') T(registrants)
    cross apply
        T.registrants.nodes('./PREFERENCES/ITEM') T2(preferences);

    insert into @ORDERREGISTRANTREGISTRATIONINFORMATION
    (
        ID,
        REGISTRANTID,
        REGISTRATIONINFORMATIONID,
        RESPONSETYPECODE,
        PERSONDETAILTYPECODE,
        TEXTVALUE,
        REGISTRATIONINFORMATIONOPTIONID                    
    )
    select
        isnull(T2.registrationinformation.value('(ID)[1]', 'uniqueidentifier'), newid()),
        T.registrants.value('(ID)[1]', 'uniqueidentifier'),
        T2.registrationinformation.value('(REGISTRATIONINFORMATIONID)[1]', 'uniqueidentifier'),                    
        T2.registrationinformation.value('(RESPONSETYPECODE)[1]', 'tinyint'),
        T2.registrationinformation.value('(PERSONDETAILTYPECODE)[1]', 'tinyint'),
        isnull(T2.registrationinformation.value('(TEXTVALUE)[1]', 'nvarchar(max)'), ''),
        cast(nullif(T2.registrationinformation.value('(REGISTRATIONINFORMATIONOPTIONID)[1]', 'nvarchar(36)'), '') as uniqueidentifier)
    from
        @REGISTRANTS.nodes('/REGISTRANTS/ITEM') T(registrants)
    cross apply
        T.registrants.nodes('./REGISTRANTREGISTRATIONINFORMATION/ITEM') T2(registrationinformation);

    insert into @AVAILABLEPRICETYPES
    (
        PRICETYPECODEID,
        DESCRIPTION,
        FACEPRICE
    )
    select
        PRICETYPECODE.ID,
        PRICETYPECODE.DESCRIPTION,
        PROGRAMEVENTPRICE.FACEPRICE
    from
        dbo.UFN_SALESMETHOD_ALLOWEDPRICETYPES(@SALESMETHODTYPECODE, 0) as PRICETYPECODE
    inner join
        dbo.UFN_PROGRAMEVENT_GETPRICES(@EVENTID, 0) as PROGRAMEVENTPRICE on PROGRAMEVENTPRICE.PRICETYPECODEID = PRICETYPECODE.ID;

    begin try
        if exists (
            select top 1 1 from @ORDERREGISTRANTS
            where PRICETYPECODEID not in (select PRICETYPECODEID from @AVAILABLEPRICETYPES)
        )
            raiserror('ERR_PRICETYPENOTFORSALE', 13, 1);

        declare @HOSTREGISTRANTCOUNT int;

        select 
            @HOSTREGISTRANTCOUNT = count(*)
        from @REGISTRANTS.nodes('/REGISTRANTS/ITEM') T(registrants)
        where T.registrants.value('(CONSTITUENTID)[1]', 'uniqueidentifier') = @HOSTCONSTITUENTID;

        if @HOSTREGISTRANTCOUNT > 1
            raiserror('ERR_ONEREGISTRANTPERPATRON', 13, 1);

        -- Remove registrants no longer registered for event

        declare @contextCache varbinary(128);

        --cache current context information

        set @contextCache = CONTEXT_INFO();

        --set CONTEXT_INFO to @CHANGEAGENTID

        set CONTEXT_INFO @CHANGEAGENTID;

        declare @DELETEREGISTRANTS table (
            REGISTRANTID uniqueidentifier
        );

        insert into @DELETEREGISTRANTS
        select REGISTRANT.ID
        from dbo.REGISTRANT
        inner join dbo.SALESORDERITEMTICKETREGISTRANT
            on REGISTRANT.ID = SALESORDERITEMTICKETREGISTRANT.REGISTRANTID
        inner join dbo.SALESORDERITEMTICKET
            on SALESORDERITEMTICKET.ID = SALESORDERITEMTICKETREGISTRANT.SALESORDERITEMTICKETID
        inner join dbo.SALESORDERITEM
            on SALESORDERITEMTICKET.ID = SALESORDERITEM.ID
        where
            SALESORDERITEM.SALESORDERID = @SALESORDERID and
            SALESORDERITEMTICKET.EVENTID = @EVENTID and
            not exists (
                select 1
                from @ORDERREGISTRANTS as [ORDERREGISTRANTS]
                where ORDERREGISTRANTS.ID = REGISTRANT.ID
            );

        delete from dbo.SALESORDERITEMTICKETREGISTRANT
        where 
            exists (
                select 1
                from @DELETEREGISTRANTS as [DELETEREGISTRANTS]
                where DELETEREGISTRANTS.REGISTRANTID = SALESORDERITEMTICKETREGISTRANT.REGISTRANTID
            )

        delete from dbo.REGISTRANT
        where 
            exists (
                select 1
                from @DELETEREGISTRANTS as [DELETEREGISTRANTS]
                where 
                    DELETEREGISTRANTS.REGISTRANTID = REGISTRANT.ID and
                    REGISTRANT.ID <> @HOSTREGISTRANTID
            )

        -- reset CONTEXT_INFO to previous value 

        if not @contextCache is null
            set CONTEXT_INFO @contextCache;

        -- Edit tickets

        declare @PRICETYPES xml;

        set @PRICETYPES = (
            select
                isnull([REGISTRANTS].[SALESORDERITEMID],newid()) as [ID],
                PRICETYPES.DESCRIPTION as [PRICETYPE],
                REGISTRANTS.PRICETYPECODEID,
                PRICETYPES.FACEPRICE,
                count(REGISTRANTS.PRICETYPECODEID) as [QUANTITY]
            from
                @ORDERREGISTRANTS as REGISTRANTS
            inner join
                @AVAILABLEPRICETYPES as PRICETYPES on REGISTRANTS.PRICETYPECODEID = PRICETYPES.PRICETYPECODEID
            group by
                REGISTRANTS.SALESORDERITEMID,
                PRICETYPES.DESCRIPTION,
                REGISTRANTS.PRICETYPECODEID,
                PRICETYPES.FACEPRICE
            for xml raw('ITEM'), type, elements, root('PRICETYPES'), binary base64
        );

        declare @PROGRAMID uniqueidentifier
        select @PROGRAMID = [EVENT].[PROGRAMID]
        from dbo.[EVENT]
        where [EVENT].[ID] = @EVENTID

        exec dbo.USP_SALESORDERITEMTICKETS_EDIT
            @ID,
            @EVENTID,
            @SALESORDERID,
            @PRICETYPES,
            0,
            @CHANGEAGENTID,
            @PROGRAMID,
            @CURRENTDATE;

        --Make sure that the constituent is marked as will not attend if not in orderregistrants

        update dbo.[REGISTRANT]
        set
            [WILLNOTATTEND] = 1,
            [CHANGEDBYID] = @CHANGEAGENTID,
            [DATECHANGED] = @CURRENTDATE
        where 
            REGISTRANT.ID = @HOSTREGISTRANTID and
            exists (
                select 1
                from @DELETEREGISTRANTS as [DELETEREGISTRANTS]
                where DELETEREGISTRANTS.REGISTRANTID = @HOSTREGISTRANTID
            )

        --Make sure that the constituent is marked as will attend if in orderregistrants

        update dbo.[REGISTRANT]
        set
            [WILLNOTATTEND] = 0,
            [CHANGEDBYID] = @CHANGEAGENTID,
            [DATECHANGED] = @CURRENTDATE
        where 
            REGISTRANT.ID = @HOSTREGISTRANTID and
            exists (
                select 1
                from @ORDERREGISTRANTS as [ORDERREGISTRANTS]
                where [ORDERREGISTRANTS].[ID] = @HOSTREGISTRANTID
            )

        --See if any registrant constituents have relocated to a different registrant id and null the constituent since just going straight to update could create a duplicate constituent registration

        update dbo.[REGISTRANT]
        set 
            [CONSTITUENTID] = null,
            [CHANGEDBYID] = @CHANGEAGENTID,
            [DATECHANGED] = @CURRENTDATE
        from @ORDERREGISTRANTS as [ORDERREGISTRANTS]
        where 
            [REGISTRANT].[ID] = [ORDERREGISTRANTS].[ID] and 
            (
                [REGISTRANT].[CONSTITUENTID] <> [ORDERREGISTRANTS].[CONSTITUENTID] or
                [ORDERREGISTRANTS].[CONSTITUENTID] is null
            )


        --Now update the registrants

        update dbo.[REGISTRANT]
        set
            [REGISTRANT].[CONSTITUENTID] = [ORDERREGISTRANTS].[CONSTITUENTID],
            [REGISTRANT].[NOTES] = [ORDERREGISTRANTS].[NOTES],
            [CHANGEDBYID] = @CHANGEAGENTID,
            [DATECHANGED] = @CURRENTDATE
        from @ORDERREGISTRANTS as [ORDERREGISTRANTS]
        where [REGISTRANT].[ID] = [ORDERREGISTRANTS].[ID]

        -- Mark all registrants that exist on this as attended if box is checked

        -- Otherwise don't touch them (we do not assume the negative of box unchecked unmarking all)

        if @MARKREGISTRANTSATTENDED = 1
        begin
            update dbo.[REGISTRANT] set
                [REGISTRANT].[ATTENDED] = 1,
                [CHANGEDBYID] = @CHANGEAGENTID,
                [DATECHANGED] = @CURRENTDATE
            from @ORDERREGISTRANTS as [ORDERREGISTRANTS]
            where [REGISTRANT].[ID] = [ORDERREGISTRANTS].[ID]
        end

        --Registrants might have changed pricetypes.  Make sure the registrant tickets point to the correct ticket id

        update dbo.[SALESORDERITEMTICKETREGISTRANT]
        set 
            [SALESORDERITEMTICKETREGISTRANT].[SALESORDERITEMTICKETID] = [TICKET].[TICKETID],
            [SALESORDERITEMTICKETREGISTRANT].[DATECHANGED] = @CURRENTDATE,
            [SALESORDERITEMTICKETREGISTRANT].[CHANGEDBYID] = @CHANGEAGENTID
        from @ORDERREGISTRANTS as [ORDERREGISTRANTS]
        cross apply (
            select top 1 [SALESORDERITEMTICKET].[ID] as [TICKETID]
            from dbo.[SALESORDERITEMTICKET]
            inner join dbo.[SALESORDERITEM]
                on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEM].[ID]
            where 
                [SALESORDERITEMTICKET].[EVENTID] = @EVENTID and
                [SALESORDERITEMTICKET].[PRICETYPECODEID] =  [ORDERREGISTRANTS].[PRICETYPECODEID] and
                [SALESORDERITEM].[SALESORDERID] = @SALESORDERID
        ) as [TICKET]
        where [SALESORDERITEMTICKETREGISTRANT].[REGISTRANTID] = [ORDERREGISTRANTS].[ID]

        insert into dbo.REGISTRANT
        (
            ID,
            EVENTID,
            CONSTITUENTID,
            WILLNOTATTEND,
            GUESTOFREGISTRANTID,
            NOTES,
            ATTENDED,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
        )
        select
            ID,
            @EVENTID,
            CONSTITUENTID,
            0,
            @HOSTREGISTRANTID,
            NOTES,
            @MARKREGISTRANTSATTENDED,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
        from @ORDERREGISTRANTS as [ORDERREGISTRANTS]
        where
            not exists (
                select 1
                from dbo.[REGISTRANT]
                where [REGISTRANT].[ID] = [ORDERREGISTRANTS].[ID]
            )

        --cache current context information

        set @contextCache = CONTEXT_INFO();

        --set CONTEXT_INFO to @CHANGEAGENTID

        set CONTEXT_INFO @CHANGEAGENTID;

        --Delete preferences that are no longer valid for the existing registrants

        delete from dbo.[REGISTRANTPREFERENCE]
        where 
            exists (
                select 1
                from @ORDERREGISTRANTS as [REGISTRANTS]
                where [REGISTRANTS].[ID] = [REGISTRANTPREFERENCE].[REGISTRANTID]
            ) and
            not exists (
                select 1
                from @ORDERREGISTRANTPREFERENCES as [PREFERENCES]
                where [PREFERENCES].[ID] = [REGISTRANTPREFERENCE].[ID]
            )

        -- reset CONTEXT_INFO to previous value 

        if not @contextCache is null
            set CONTEXT_INFO @contextCache;

        --Update registrant preferences

        update dbo.[REGISTRANTPREFERENCE]
        set
            [REGISTRANTPREFERENCE].[REGISTRANTID] = [PREFERENCES].[REGISTRANTID],
            [REGISTRANTPREFERENCE].[EVENTPREFERENCEID] = [PREFERENCES].[EVENTPREFERENCEID],
            [REGISTRANTPREFERENCE].[CHANGEDBYID] = @CHANGEAGENTID,
            [REGISTRANTPREFERENCE].[DATECHANGED] = @CURRENTDATE
        from @ORDERREGISTRANTPREFERENCES as [PREFERENCES]
        where [REGISTRANTPREFERENCE].[ID] = [PREFERENCES].[ID]

        insert into dbo.REGISTRANTPREFERENCE
        (
            ID,
            REGISTRANTID,
            EVENTPREFERENCEID,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
        )
        select
            ID,
            REGISTRANTID,
            EVENTPREFERENCEID,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
        from @ORDERREGISTRANTPREFERENCES as [PREFERENCES]
        where
            not exists (
                select 1
                from dbo.[REGISTRANTPREFERENCE]
                where [REGISTRANTPREFERENCE].[ID] = [PREFERENCES].[ID]
            )                    

        merge into dbo.REGISTRANTREGISTRATIONINFORMATION as target
        using (
            select
                ID,
                REGISTRANTID,
                REGISTRATIONINFORMATIONID,
                RESPONSETYPECODE,
                PERSONDETAILTYPECODE,
                TEXTVALUE,
                case RESPONSETYPECODE
                    when 3 then
                        case REGISTRATIONINFORMATIONOPTIONID
                            when '11111111-1111-1111-1111-111111111111' then 1
                            else 0
                        end
                    else 0
                end as BOOLEANVALUE,
                case RESPONSETYPECODE
                    when 2 then REGISTRATIONINFORMATIONOPTIONID
                    else null
                end as REGISTRATIONINFORMATIONOPTIONID
            from @ORDERREGISTRANTREGISTRATIONINFORMATION
        ) as source
            on target.ID = source.ID
        when matched and (
                target.REGISTRANTID <> source.REGISTRANTID
                or (source.RESPONSETYPECODE in (0,1,4) and source.TEXTVALUE <> target.TEXTVALUE)
                or (source.RESPONSETYPECODE = 2 
                    and
                        (source.REGISTRATIONINFORMATIONOPTIONID is null and target.REGISTRATIONINFORMATIONOPTIONID is not null)
                        or (source.REGISTRATIONINFORMATIONOPTIONID is not null and target.REGISTRATIONINFORMATIONOPTIONID is null)
                        or (source.REGISTRATIONINFORMATIONOPTIONID <> target.REGISTRATIONINFORMATIONOPTIONID)
                    )
                ) 
                or (source.RESPONSETYPECODE = 3 and target.BOOLEANVALUE <> source.BOOLEANVALUE)
            )then
            update
                set
                    target.REGISTRANTID = source.REGISTRANTID,
                    target.TEXTVALUE = source.TEXTVALUE,
                    target.REGISTRATIONINFORMATIONOPTIONID = source.REGISTRATIONINFORMATIONOPTIONID,
                    target.BOOLEANVALUE = source.BOOLEANVALUE,
                    target.CHANGEDBYID = @CHANGEAGENTID,
                    target.DATECHANGED = @CURRENTDATE
        when not matched by target then
            insert (ID, REGISTRANTID, REGISTRATIONINFORMATIONID, REGISTRATIONINFORMATIONOPTIONID, TEXTVALUE, BOOLEANVALUE, PERSONDETAILTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
            values (source.ID, source.REGISTRANTID, source.REGISTRATIONINFORMATIONID, source.REGISTRATIONINFORMATIONOPTIONID, source.TEXTVALUE, source.BOOLEANVALUE, source.PERSONDETAILTYPECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
        when not matched by source and target.REGISTRANTID in (select ID from @ORDERREGISTRANTS) then
            delete;


        insert into dbo.SALESORDERITEMTICKETREGISTRANT
        (
            ID,
            SALESORDERITEMTICKETID,
            REGISTRANTID,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
        )
        select
            newid(),
            SALESORDERITEMTICKET.ID,
            REGISTRANTS.ID,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
        from dbo.SALESORDERITEMTICKET
        inner join @ORDERREGISTRANTS as REGISTRANTS 
                on REGISTRANTS.PRICETYPECODEID = SALESORDERITEMTICKET.PRICETYPECODEID
        inner join
            dbo.SALESORDERITEM on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
        where
            SALESORDERITEM.SALESORDERID = @SALESORDERID and
            SALESORDERITEMTICKET.EVENTID = @EVENTID and
            not exists (
                select 1
                from dbo.[SALESORDERITEMTICKETREGISTRANT]
                where [SALESORDERITEMTICKETREGISTRANT].[REGISTRANTID] = [REGISTRANTS].[ID]
            )
    end try

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

return 0;