USP_MERGETASK_CONSTITUENTFOUNDATION

Parameters

Parameter Parameter Type Mode Description
@SOURCEID uniqueidentifier IN
@TARGETID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@TYPECRITERIA int IN
@CONTACTCRITERIA int IN

Definition

Copy


create procedure dbo.USP_MERGETASK_CONSTITUENTFOUNDATION (
    @SOURCEID uniqueidentifier
    ,@TARGETID uniqueidentifier
    ,@CHANGEAGENTID uniqueidentifier
    ,@TYPECRITERIA int = 0
    ,@CONTACTCRITERIA int = 0
    )
as
set nocount on;

declare @CHANGEDATE datetime = getdate();

if exists (select GRANTOR.ID from dbo.GRANTOR where GRANTOR.ID = @TARGETID)
begin

    if exists (
        select T.TITLE
        from dbo.GRANTS S
        cross join dbo.GRANTS T
        where S.GRANTORID = @SOURCEID
        and T.GRANTORID = @TARGETID
        and S.TITLE = T.TITLE)
        raiserror ('These constituents were not merged because they have grant programs with the same name.  Please resolve this conflict and then run the merge again.',16,1);

    update dbo.GRANTS
    set GRANTORID = @TARGETID
        ,CHANGEDBYID = @CHANGEAGENTID
        ,DATECHANGED = @CHANGEDATE
    where GRANTORID = @SOURCEID;

    update dbo.GRANTOR
    set GRANTORTYPECODEID = case when @TYPECRITERIA = 1 then
            (select S.GRANTORTYPECODEID
            from dbo.GRANTOR S
            where S.ID = @SOURCEID) else
            (select T.GRANTORTYPECODEID
            from dbo.GRANTOR T
            where T.ID = @TARGETID) end
        ,CONTACTID = case when @CONTACTCRITERIA = 1 then
            (
                coalesce(
                    (-- if source and target have same relationship types with some individual and it's the source's contact then the source's duplicate relationship information is deleted later on and we must fall back to target's relationship even though they specified source's contact

                        select TARGET_ORG_RELATIONSHIP.ID from GRANTOR SG
                        inner join RELATIONSHIP SOURCE_ORG_RELATIONSHIP on SOURCE_ORG_RELATIONSHIP.ID = SG.CONTACTID
                        inner join RELATIONSHIP SOURCE_CONTACT_RELATIONSHIP on SOURCE_ORG_RELATIONSHIP.RECIPROCALCONSTITUENTID = SOURCE_CONTACT_RELATIONSHIP.RELATIONSHIPCONSTITUENTID
                        inner join RELATIONSHIP TARGET_ORG_RELATIONSHIP on TARGET_ORG_RELATIONSHIP.RECIPROCALCONSTITUENTID = SOURCE_ORG_RELATIONSHIP.RECIPROCALCONSTITUENTID
                        inner join RELATIONSHIP TARGET_INDIVIDUAL_RELATIONSHIP on TARGET_ORG_RELATIONSHIP.RECIPROCALCONSTITUENTID = TARGET_INDIVIDUAL_RELATIONSHIP.RELATIONSHIPCONSTITUENTID
                        where SG.ID = @SOURCEID 
                        and TARGET_ORG_RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @TARGETID
                        and SOURCE_ORG_RELATIONSHIP.RELATIONSHIPCONSTITUENTID = SOURCE_CONTACT_RELATIONSHIP.RECIPROCALCONSTITUENTID
                        and TARGET_ORG_RELATIONSHIP.RELATIONSHIPCONSTITUENTID = TARGET_INDIVIDUAL_RELATIONSHIP.RECIPROCALCONSTITUENTID
                        and SOURCE_ORG_RELATIONSHIP.RECIPROCALTYPECODEID = TARGET_ORG_RELATIONSHIP.RECIPROCALTYPECODEID
                        and SOURCE_CONTACT_RELATIONSHIP.RECIPROCALTYPECODEID = TARGET_INDIVIDUAL_RELATIONSHIP.RECIPROCALTYPECODEID
                    )
                ,
                    (
                        select S.CONTACTID
                        from dbo.GRANTOR S
                        where S.ID = @SOURCEID
                    )
                )
            ) else
            (select T.CONTACTID
            from dbo.GRANTOR T
            where T.ID = @TARGETID) end
        ,CHANGEDBYID = @CHANGEAGENTID
        ,DATECHANGED = @CHANGEDATE
    where ID = @TARGETID;

    exec USP_GRANTOR_DELETE @ID=@SOURCEID,@CHANGEAGENTID=@CHANGEAGENTID;
end
else
begin
    insert into dbo.GRANTOR (
        ID
        ,GRANTORTYPECODEID
        ,CONTACTID
        ,ADDEDBYID
        ,CHANGEDBYID
        ,DATEADDED
        ,DATECHANGED
        )
    select @TARGETID
        ,GRANTORTYPECODEID
        ,CONTACTID
        ,@CHANGEAGENTID ADDEDBYID
        ,@CHANGEAGENTID CHANGEDBYID
        ,@CHANGEDATE DATEADDED
        ,@CHANGEDATE DATECHANGED
    from dbo.GRANTOR
    where GRANTOR.ID = @SOURCEID;

    update dbo.GRANTS
    set GRANTORID = @TARGETID
        ,CHANGEDBYID = @CHANGEAGENTID
        ,DATECHANGED = @CHANGEDATE
    where GRANTORID = @SOURCEID;

    exec USP_GRANTOR_DELETE @ID=@SOURCEID,@CHANGEAGENTID=@CHANGEAGENTID;
end

return 0;