USP_MERGETASK_MATCHINGGIFTCONDITIONS

Parameters

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

Definition

Copy


CREATE procedure dbo.USP_MERGETASK_MATCHINGGIFTCONDITIONS
(
    @SOURCEID uniqueidentifier,
    @TARGETID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier,
    @PRESERVEORGANIZATIONDETAILS bit
)
as
begin
    set nocount on;

    declare @DATECHANGED datetime = getdate();

    --Move source MG criteria to target if target does not have duplicate condition type (this is prevented in the one-off add MG criteria form)

    --MATCHINGGIFTCONDITIONRELATIONSHIP only has a FK to MATCHINGGIFTCONDITION so doesn't need to be merged

    update dbo.MATCHINGGIFTCONDITION
    set
        CHANGEDBYID = @CHANGEAGENTID,
        DATECHANGED = @DATECHANGED,
        ORGANIZATIONID = @TARGETID
    where
        ORGANIZATIONID = @SOURCEID
        and not exists
        (
            select
                1
            from
                dbo.MATCHINGGIFTCONDITION as TARGETMGC
            where
                TARGETMGC.ORGANIZATIONID = @TARGETID
                and TARGETMGC.MATCHINGGIFTCONDITIONTYPECODEID = MATCHINGGIFTCONDITION.MATCHINGGIFTCONDITIONTYPECODEID
        )
        and not exists
        (
            select
                1
            from
                dbo.MATCHINGGIFTCONDITIONRELATIONSHIP
            where
                MATCHINGGIFTCONDITIONRELATIONSHIP.MATCHINGGIFTCONDITIONID = MATCHINGGIFTCONDITION.ID
                and dbo.UFN_MATCHINGGIFTCONDITIONRELATIONSHIP_UNIQUERELATIONSHIPFORORGANIZATION_2(MATCHINGGIFTCONDITION.ID, MATCHINGGIFTCONDITIONRELATIONSHIP.RELATIONSHIPTYPECODEID,
                    MATCHINGGIFTCONDITIONRELATIONSHIP.JOBSCHEDULECODEID, MATCHINGGIFTCONDITIONRELATIONSHIP.CAREERLEVELCODEID, @TARGETID, MATCHINGGIFTCONDITION.REVENUETYPECODE) = 0
        )

    --There were duplicate condition types

    if exists (select top 1 1 from dbo.MATCHINGGIFTCONDITION where ORGANIZATIONID = @SOURCEID)
    begin

        --If the matching gift conditions match exactly, update any MGC revenue and put the target condition ID on them.

        declare @DUPLICATECONDITIONS table (SOURCEID uniqueidentifier, TARGETID uniqueidentifier);
        insert into @DUPLICATECONDITIONS (SOURCEID, TARGETID)
        select
            SOURCEMGC.ID,
            TARGETMGC.ID
        from
            dbo.MATCHINGGIFTCONDITION as SOURCEMGC
            inner join dbo.MATCHINGGIFTCONDITION as TARGETMGC on TARGETMGC.MATCHINGGIFTCONDITIONTYPECODEID = SOURCEMGC.MATCHINGGIFTCONDITIONTYPECODEID
        where
            SOURCEMGC.ORGANIZATIONID = @SOURCEID
            and TARGETMGC.ORGANIZATIONID = @TARGETID
            and SOURCEMGC.MATCHINGFACTOR = TARGETMGC.MATCHINGFACTOR
            and SOURCEMGC.MAXMATCHANNUAL = TARGETMGC.MAXMATCHANNUAL
            and SOURCEMGC.MAXMATCHPERGIFT = TARGETMGC.MAXMATCHPERGIFT
            and SOURCEMGC.MAXMATCHTOTAL = TARGETMGC.MAXMATCHTOTAL
            and SOURCEMGC.MINMATCHPERGIFT = TARGETMGC.MINMATCHPERGIFT
            and SOURCEMGC.MATCHTYPECODE = TARGETMGC.MATCHTYPECODE
            and SOURCEMGC.REVENUETYPECODE = TARGETMGC.REVENUETYPECODE
            and SOURCEMGC.BASECURRENCYID = TARGETMGC.BASECURRENCYID
            and SOURCEMGC.ORGANIZATIONMAXMATCHANNUAL = TARGETMGC.ORGANIZATIONMAXMATCHANNUAL
            and SOURCEMGC.ORGANIZATIONMAXMATCHPERGIFT = TARGETMGC.ORGANIZATIONMAXMATCHPERGIFT
            and SOURCEMGC.ORGANIZATIONMAXMATCHTOTAL = TARGETMGC.ORGANIZATIONMAXMATCHTOTAL
            and SOURCEMGC.ORGANIZATIONMINMATCHPERGIFT = TARGETMGC.ORGANIZATIONMINMATCHPERGIFT
            and
                (
                    SOURCEMGC.ORGANIZATIONEXCHANGERATEID = TARGETMGC.ORGANIZATIONEXCHANGERATEID
                    or
                    (
                        SOURCEMGC.ORGANIZATIONEXCHANGERATEID is null
                        and TARGETMGC.ORGANIZATIONEXCHANGERATEID is null
                    )
                )
            --same number of relationships

            and (select count(*) from dbo.MATCHINGGIFTCONDITIONRELATIONSHIP where MATCHINGGIFTCONDITIONID = SOURCEMGC.ID) = (select count(*) from dbo.MATCHINGGIFTCONDITIONRELATIONSHIP where MATCHINGGIFTCONDITIONID = TARGETMGC.ID)
            --relationships match exactly

            and
            (
                select
                    count(*)
                from
                    dbo.MATCHINGGIFTCONDITIONRELATIONSHIP as SOURCERELATIONSHIP
                    inner join dbo.MATCHINGGIFTCONDITIONRELATIONSHIP as TARGETRELATIONSHIP on
                        TARGETRELATIONSHIP.RELATIONSHIPTYPECODEID = SOURCERELATIONSHIP.RELATIONSHIPTYPECODEID
                        and TARGETRELATIONSHIP.JOBSCHEDULECODEID = SOURCERELATIONSHIP.JOBSCHEDULECODEID
                        and TARGETRELATIONSHIP.CAREERLEVELCODEID = SOURCERELATIONSHIP.CAREERLEVELCODEID
                where
                    SOURCERELATIONSHIP.MATCHINGGIFTCONDITIONID = SOURCEMGC.ID
                    and TARGETRELATIONSHIP.MATCHINGGIFTCONDITIONID = TARGETMGC.ID
            ) = (select count(*) from dbo.MATCHINGGIFTCONDITIONRELATIONSHIP where MATCHINGGIFTCONDITIONID = TARGETMGC.ID)

        -- update NOTES on target if they are blank in target and not blank in source

        if @PRESERVEORGANIZATIONDETAILS = 1
        begin
            update TARGETMGC
            set
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @DATECHANGED,
                TARGETMGC.NOTES = SOURCEMGC.NOTES
            from
                dbo.MATCHINGGIFTCONDITION as TARGETMGC
                inner join @DUPLICATECONDITIONS as DUPES on DUPES.TARGETID = TARGETMGC.ID
                inner join dbo.MATCHINGGIFTCONDITION as SOURCEMGC on DUPES.SOURCEID = SOURCEMGC.ID
            where
                TARGETMGC.NOTES is not null and TARGETMGC.NOTES = N''
                and SOURCEMGC.NOTES is not null and SOURCEMGC.NOTES <> N'';
        end

        update dbo.REVENUEMATCHINGGIFT
        set
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @DATECHANGED,
            MATCHINGGIFTCONDITIONID = DUPES.TARGETID
        from
            dbo.REVENUEMATCHINGGIFT
            inner join @DUPLICATECONDITIONS as DUPES on DUPES.SOURCEID = REVENUEMATCHINGGIFT.MATCHINGGIFTCONDITIONID;

        update dbo.BATCHREVENUE
        set
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @DATECHANGED,
            MGCONDITIONID = DUPES.TARGETID
        from
            dbo.BATCHREVENUE
            inner join @DUPLICATECONDITIONS as DUPES on DUPES.SOURCEID = BATCHREVENUE.MGCONDITIONID;

        update dbo.BATCHREVENUEENHANCEDMATCHINGGIFTS
        set
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @DATECHANGED,
            MATCHINGGIFTCONDITIONID = DUPES.TARGETID
        from
            dbo.BATCHREVENUEENHANCEDMATCHINGGIFTS
            inner join @DUPLICATECONDITIONS as DUPES on DUPES.SOURCEID = BATCHREVENUEENHANCEDMATCHINGGIFTS.MATCHINGGIFTCONDITIONID;

        if exists
        (
            select top 1
                1
            from
                dbo.MATCHINGGIFTCONDITION
                left join dbo.REVENUEMATCHINGGIFT on REVENUEMATCHINGGIFT.MATCHINGGIFTCONDITIONID = MATCHINGGIFTCONDITION.ID
                left join dbo.BATCHREVENUE on BATCHREVENUE.MGCONDITIONID = MATCHINGGIFTCONDITION.ID
                left join dbo.BATCHREVENUEENHANCEDMATCHINGGIFTS on BATCHREVENUEENHANCEDMATCHINGGIFTS.MATCHINGGIFTCONDITIONID = MATCHINGGIFTCONDITION.ID
            where
                MATCHINGGIFTCONDITION.ORGANIZATIONID = @SOURCEID
                and
                (
                    REVENUEMATCHINGGIFT.ID is not null
                    or BATCHREVENUE.ID is not null
                    or BATCHREVENUEENHANCEDMATCHINGGIFTS.ID is not null
                )
        )
        begin
            --we have already moved all MGC with duplicate criteria (if any existed)

            --other MGC created using this criteria exist, and the criteria is not exactly the same

            --we don't know what to do here, throw an error

            raiserror('Cannot merge organization information because there are duplicate matching gift conditions.',13,1);
        end

        --no MGC revenue associated, okay to delete criteria


        declare @contextCache varbinary(128);
        --cache current context information

        set @contextCache = CONTEXT_INFO();
        --set CONTEXT_INFO to @CHANGEAGENTID

        set CONTEXT_INFO @CHANGEAGENTID;

        delete dbo.MATCHINGGIFTCONDITION
        where ORGANIZATIONID = @SOURCEID;

        --reset CONTEXT_INFO to previous value

        if not @contextCache is null
            set CONTEXT_INFO @contextCache;

    end
end