USP_MERGETASK_CONSTITUENTSPONSORSHIP

Parameters

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

Definition

Copy


CREATE procedure dbo.USP_MERGETASK_CONSTITUENTSPONSORSHIP
(
    @SOURCEID uniqueidentifier,
    @TARGETID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier
)
as
    set nocount on;

    declare @CHANGEDATE datetime = getdate();

    -- cannot merge constituents if they both have an active/pending sponsorship to the same opportunity

    if exists(select SPONSORSHIPOPPORTUNITYID
              from dbo.SPONSORSHIP
              where CONSTITUENTID = @SOURCEID
              and STATUSCODE in(0,1)
              intersect
              select SPONSORSHIPOPPORTUNITYID
              from dbo.SPONSORSHIP
              where CONSTITUENTID = @TARGETID
              and STATUSCODE in(0,1))
        raiserror('Cannot merge constituents that both have active or pending sponsorships to the same sponsorship opportunity.', 13, 1)

    declare @CONTEXTCACHE varbinary(128);
    set @CONTEXTCACHE = CONTEXT_INFO();

    declare @CURRENTDATE datetime;
    set @CURRENTDATE = getdate();

    begin try
        -- update all sponsorship RGs for the source constituent, both gifts and non-gifts

        update dbo.REVENUE
        set CONSTITUENTID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
        where ID in(select REVENUEID
                    from dbo.REVENUESPLIT
                    inner join dbo.SPONSORSHIP on SPONSORSHIP.REVENUESPLITID = REVENUESPLIT.ID
                    where SPONSORSHIP.CONSTITUENTID = @SOURCEID
                    union all
                    select REVENUEID
                    from dbo.REVENUESPLIT
                    inner join dbo.SPONSORSHIP on SPONSORSHIP.REVENUESPLITID = REVENUESPLIT.ID
                    inner join dbo.SPONSORSHIPTRANSACTION on SPONSORSHIPTRANSACTION.TARGETSPONSORSHIPID = SPONSORSHIP.ID
                    where SPONSORSHIPTRANSACTION.GIFTFINANCIALSPONSORID = @SOURCEID)
        and CONSTITUENTID = @SOURCEID;

        update dbo.SPONSORSHIP
        set CONSTITUENTID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
        where CONSTITUENTID = @SOURCEID;

        update dbo.SPONSORSHIPCOMMITMENT
        set CONSTITUENTID = @TARGETID,
            COMMITMENTSEQUENCE = -COMMITMENTSEQUENCE,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CHANGEDATE
        where CONSTITUENTID = @SOURCEID;

        -- renumber the commitments

        update dbo.SPONSORSHIPCOMMITMENT
        set COMMITMENTSEQUENCE = X.SEQ, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
        from (
            select SPONSORSHIPCOMMITMENT.ID,
                   row_number() over (order by SPONSORSHIPTRANSACTION.TRANSACTIONDATE) SEQ
            from dbo.SPONSORSHIPCOMMITMENT
            inner join dbo.SPONSORSHIPTRANSACTION on SPONSORSHIPTRANSACTION.SPONSORSHIPCOMMITMENTID = SPONSORSHIPCOMMITMENT.ID and SPONSORSHIPTRANSACTION.TRANSACTIONSEQUENCE = 1
            where SPONSORSHIPCOMMITMENT.CONSTITUENTID = @TARGETID) X
        where SPONSORSHIPCOMMITMENT.ID = X.ID; 

        -- if corresponding and financial sponsors are now the same constituent, clear out gift financial sponsor

        update ST
        set GIFTFINANCIALSPONSORID = null, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
        from dbo.SPONSORSHIPTRANSACTION ST
        inner join dbo.SPONSORSHIP on SPONSORSHIP.ID = ST.TARGETSPONSORSHIPID
        where ST.GIFTFINANCIALSPONSORID in(@SOURCEID,@TARGETID)
        and SPONSORSHIP.CONSTITUENTID = @TARGETID;

        -- fix any remaining gift financial sponsors

        update dbo.SPONSORSHIPTRANSACTION
        set GIFTFINANCIALSPONSORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
        where GIFTFINANCIALSPONSORID = @SOURCEID;

        -- if corresponding and financial sponsors are now the same constituent, clear out gift financial sponsor

        -- otherwise update gift financial sponsor

        update SP
        set GIFTFINANCIALSPONSORID = case when SPONSORSHIP.CONSTITUENTID = @TARGETID then null else @TARGETID end,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CHANGEDATE
        from dbo.SPONSORSHIPPAYMENT SP
        inner join dbo.SPONSORSHIP on SPONSORSHIP.ID = SP.SPONSORSHIPID
        where SP.GIFTFINANCIALSPONSORID in(@SOURCEID,@TARGETID);

        ------------------------------------------------------------------------

        -- SPONSOR

        if not exists(select 'x' from dbo.SPONSOR where ID = @TARGETID)
        begin
            insert into dbo.SPONSOR
            (
                ID,
                DONOTTERMINATE,
                UNIQUEOPPORTUNITIESFORGIFTDONOR,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            select
                @TARGETID,
                DONOTTERMINATE,
                UNIQUEOPPORTUNITIESFORGIFTDONOR,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from dbo.SPONSOR
            where ID = @SOURCEID;
        end
        else
        begin
            -- update target fields w/ source values if target doesn't have changes

            update [TARGET]
            set DONOTTERMINATE = case [TARGET].DONOTTERMINATE when 0 then [SOURCE].DONOTTERMINATE else [TARGET].DONOTTERMINATE end,
                UNIQUEOPPORTUNITIESFORGIFTDONOR = case [TARGET].UNIQUEOPPORTUNITIESFORGIFTDONOR when 0 then [SOURCE].UNIQUEOPPORTUNITIESFORGIFTDONOR else [TARGET].UNIQUEOPPORTUNITIESFORGIFTDONOR end,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CHANGEDATE
            from dbo.SPONSOR [TARGET]
            inner join dbo.SPONSOR [SOURCE] on [SOURCE].ID = @SOURCEID
            where [TARGET].ID = @TARGETID;
        end

        -- delete source record

        exec dbo.USP_SPONSOR_DELETEBYID_WITHCHANGEAGENTID @SOURCEID, @CHANGEAGENTID

        ------------------------------------------------------------------------

        -- SPONSORDATERANGE


        exec dbo.USP_SPONSOR_REBUILDSPONSORSHIPCONSTITUENCIES @TARGETID, -1, @CHANGEAGENTID

        -- cache current context

        if @CHANGEAGENTID is not null
            set CONTEXT_INFO @CHANGEAGENTID

        -- remove sponsordaterange records from both constituents

        delete from dbo.SPONSORDATERANGE
        where CONSTITUENTID = @SOURCEID;

        -- restore cached context

        if not @CONTEXTCACHE is null
            set CONTEXT_INFO @CONTEXTCACHE

        ------------------------------------------------------------------------

        -- other tables


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

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

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

        update dbo.SPONSORSHIPAFFILIATEPROGRAM
        set AFFILIATEID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
        where AFFILIATEID = @SOURCEID;
    end try
    begin catch
        exec dbo.USP_RAISE_ERROR;
        return 1;
    end catch

    return 0;