USP_MERGETASK_CONSTITUENTINTERACTION

Parameters

Parameter Parameter Type Mode Description
@SOURCEID uniqueidentifier IN
@TARGETID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@DELETEDUPES bit IN

Definition

Copy


                CREATE procedure dbo.USP_MERGETASK_CONSTITUENTINTERACTION
                (
                    @SOURCEID uniqueidentifier,
                    @TARGETID uniqueidentifier,
                    @CHANGEAGENTID uniqueidentifier,
                    @DELETEDUPES bit = 0
                )
                as
                    set nocount on;

                    declare @CHANGEDATE datetime = getdate();

                    if @DELETEDUPES = 0
                        update dbo.INTERACTION
                        set CONSTITUENTID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
                        where CONSTITUENTID = @SOURCEID and PROSPECTPLANID is null -- Do not update the interactions that are associated with prospect plan that will be handle in USP_MERGETASK_CONSTITUENTMAJORGIVING.
                    else
                        --Omit duplicate interaction records if the @DELETEDUPES
                        --flag is set
                        update dbo.INTERACTION
                        set CONSTITUENTID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
                        where CONSTITUENTID = @SOURCEID
                        and ID not in
                        (
                            select a.ID
                            from dbo.INTERACTION a
                            inner join dbo.INTERACTION b
                            on (a.INTERACTIONTYPECODEID = b.INTERACTIONTYPECODEID or (a.INTERACTIONTYPECODEID is null and b.INTERACTIONTYPECODEID is null))
                            and a.EXPECTEDDATE = b.EXPECTEDDATE
                            and (a.ACTUALDATE = b.ACTUALDATE or (a.ACTUALDATE is null and b.ACTUALDATE is null))
                            and (a.EVENTID = b.EVENTID or (a.EVENTID is null and b.EVENTID is null))
                            where a.CONSTITUENTID = @SOURCEID
                            and b.CONSTITUENTID = @TARGETID
                        )

                    update dbo.INTERACTION
                    set FUNDRAISERID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
                    where FUNDRAISERID = @SOURCEID

                    -- Change the AuthorID of any interaction
                    -- notes and media that were authored by the
                    -- source
                    update dbo.INTERACTIONNOTE
                    set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
                    where AUTHORID = @SOURCEID;

                    update dbo.INTERACTIONMEDIALINK
                    set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
                    where AUTHORID = @SOURCEID;

                    update dbo.INTERACTIONATTACHMENT
                    set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
                    where AUTHORID = @SOURCEID;

                    -- Change CONSTITUENTID on any additional participants
                    update dbo.INTERACTIONPARTICIPANT
                    set CONSTITUENTID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
                    where CONSTITUENTID = @SOURCEID
                    and ID not in
                    (
                        select a.ID
                        from dbo.INTERACTIONPARTICIPANT a
                        inner join dbo.INTERACTIONPARTICIPANT b
                        on a.INTERACTIONID = b.INTERACTIONID
                        where a.CONSTITUENTID = @SOURCEID
                        and b.CONSTITUENTID = @TARGETID
                    )
                    -- If the owner of the interaction is already target, don't add them as a participant
                    and not exists (    select 1 
                                        from dbo.INTERACTION I
                                        where 
                                            I.ID = INTERACTIONPARTICIPANT.INTERACTIONID and 
                                            I.CONSTITUENTID = @TARGETID
                                    );

                    declare @CONTEXTCACHE varbinary(128);

                    /* Cache current context information@ */
                    set @CONTEXTCACHE = CONTEXT_INFO();

                    /* Set CONTEXT_INFO to @CHANGEAGENTID */
                    set CONTEXT_INFO @CHANGEAGENTID;

                    -- If the source wasn't replace by the target, remove the source as a participant
                    delete from dbo.INTERACTIONPARTICIPANT
                    where CONSTITUENTID = @SOURCEID

                    /* Reset CONTEXT_INFO to previous value */
                    if not @contextCache is null
                        set CONTEXT_INFO @CONTEXTCACHE;

                    return 0;