USP_MERGETASK_CONSTITUENTPERSONALINFORMATION
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SOURCEID | uniqueidentifier | IN | |
@TARGETID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@NAMECRITERIA | int | IN | |
@INCLUDEPREFS | bit | IN | |
@PREFCRITERIA | int | IN | |
@CONTACTCRITERIA | int | IN | |
@PRESERVENAMEFIELDS | bit | IN | |
@DONOTMERGEDECEASEDINFOIFONLYSOURCEISDECEASED | bit | IN | |
@ORGANIZATIONDETAILSCRITERIA | tinyint | IN | |
@PRESERVEORGANIZATIONDETAILS | bit | IN | |
@GROUPDETAILSCRITERIA | tinyint | IN | |
@PRESERVEGROUPDETAILS | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_MERGETASK_CONSTITUENTPERSONALINFORMATION
(
@SOURCEID uniqueidentifier,
@TARGETID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@NAMECRITERIA int = 0,
@INCLUDEPREFS bit = 1,
@PREFCRITERIA int = 0,
@CONTACTCRITERIA int = 0,
@PRESERVENAMEFIELDS bit = 0,
@DONOTMERGEDECEASEDINFOIFONLYSOURCEISDECEASED bit = 0,
@ORGANIZATIONDETAILSCRITERIA tinyint = 0,
@PRESERVEORGANIZATIONDETAILS bit = 1,
@GROUPDETAILSCRITERIA tinyint = 0,
@PRESERVEGROUPDETAILS bit = 1
)
as
set nocount on;
declare @DATECHANGED datetime = getdate();
declare @TARGETNAME nvarchar(154);
declare @SOURCEISINACTIVE bit;
declare @SOURCEKEYNAME nvarchar(100);
declare @SOURCEKEYNAMEPREFIX nvarchar(50);
declare @SOURCEFIRSTNAME nvarchar(50);
declare @SOURCEMIDDLENAME nvarchar(50);
declare @SOURCEMAIDENNAME nvarchar(100);
declare @SOURCENICKNAME nvarchar(50);
declare @SOURCETITLECODEID uniqueidentifier;
declare @SOURCETITLE2CODEID uniqueidentifier;
declare @SOURCESUFFIXCODEID uniqueidentifier;
declare @SOURCESUFFIX2CODEID uniqueidentifier;
declare @SOURCEGENDERCODE tinyint;
declare @SOURCEBIRTHDATE dbo.UDT_FUZZYDATE;
declare @SOURCEGIVESANONYMOUSLY bit;
declare @SOURCENAME nvarchar(154);
declare @SOURCEWEBADDRESS dbo.UDT_WEBADDRESS;
declare @SOURCEPICTURE varbinary(max);
declare @SOURCEPICTURETHUMBNAIL varbinary(max);
declare @SOURCEMARITALSTATUSCODEID uniqueidentifier;
declare @SOURCEDONOTMAIL bit;
declare @SOURCEDONOTEMAIL bit;
declare @SOURCEDONOTPHONE bit;
declare @SOURCEINDUSTRYCODEID uniqueidentifier;
declare @SOURCENUMEMPLOYEES int;
declare @SOURCENUMSUBSIDIARIES int;
declare @SOURCEISPRIMARY bit;
declare @SOURCEGROUPINCEPTIONDATE datetime;
declare @SOURCEGROUPSTARTDATE datetime;
declare @SOURCEGROUPTYPECODE tinyint;
declare @SOURCEGROUPDESCRIPTION nvarchar(300);
declare @SOURCEGROUPNAMEFORMATFUNCTIONID uniqueidentifier;
declare @SOURCEGROUPTYPEID uniqueidentifier;
declare @SOURCEGENDERCODEID uniqueidentifier;
--Cache the Target record's NAME field
select
@TARGETNAME = NAME
from dbo.CONSTITUENT
where ID = @TARGETID
--Cache the Source record's field values
select
@SOURCEKEYNAME = CONSTITUENT.KEYNAME,
@SOURCEKEYNAMEPREFIX = CONSTITUENT.KEYNAMEPREFIX,
@SOURCEFIRSTNAME = CONSTITUENT.FIRSTNAME,
@SOURCEMIDDLENAME = CONSTITUENT.MIDDLENAME,
@SOURCEMAIDENNAME = CONSTITUENT.MAIDENNAME,
@SOURCENICKNAME = CONSTITUENT.NICKNAME,
@SOURCETITLECODEID = CONSTITUENT.TITLECODEID,
@SOURCETITLE2CODEID = CONSTITUENT.TITLE2CODEID,
@SOURCESUFFIXCODEID = CONSTITUENT.SUFFIXCODEID,
@SOURCESUFFIX2CODEID = CONSTITUENT.SUFFIX2CODEID,
@SOURCEGENDERCODE = CONSTITUENT.GENDERCODE,
@SOURCEBIRTHDATE = CONSTITUENT.BIRTHDATE,
@SOURCEISINACTIVE = CONSTITUENT.ISINACTIVE,
@SOURCEGIVESANONYMOUSLY = CONSTITUENT.GIVESANONYMOUSLY,
@SOURCENAME = CONSTITUENT.NAME,
@SOURCEWEBADDRESS = CONSTITUENT.WEBADDRESS,
@SOURCEPICTURE = CONSTITUENT.PICTURE,
@SOURCEPICTURETHUMBNAIL = CONSTITUENT.PICTURETHUMBNAIL,
@SOURCEMARITALSTATUSCODEID = CONSTITUENT.MARITALSTATUSCODEID,
@SOURCEDONOTMAIL = CONSTITUENT.DONOTMAIL,
@SOURCEDONOTEMAIL = CONSTITUENT.DONOTEMAIL,
@SOURCEDONOTPHONE = CONSTITUENT.DONOTPHONE,
@SOURCEINDUSTRYCODEID = ORGANIZATIONDATA.INDUSTRYCODEID,
@SOURCENUMEMPLOYEES = coalesce(ORGANIZATIONDATA.NUMEMPLOYEES, 0),
@SOURCENUMSUBSIDIARIES = coalesce(ORGANIZATIONDATA.NUMSUBSIDIARIES, 0),
@SOURCEISPRIMARY = coalesce(ORGANIZATIONDATA.ISPRIMARY, 0),
@SOURCEGROUPINCEPTIONDATE = coalesce(GROUPDATA.STARTDATE, GROUPDATA.DATEADDED),
@SOURCEGROUPSTARTDATE = GROUPDATA.STARTDATE,
@SOURCEGROUPTYPECODE = GROUPDATA.GROUPTYPECODE,
@SOURCEGROUPDESCRIPTION = GROUPDATA.DESCRIPTION,
@SOURCEGROUPNAMEFORMATFUNCTIONID = GROUPDATA.NAMEFORMATFUNCTIONID,
@SOURCEGROUPTYPEID = GROUPDATA.GROUPTYPEID,
@SOURCEGENDERCODEID = CONSTITUENT.GENDERCODEID
from dbo.CONSTITUENT
left join dbo.ORGANIZATIONDATA on CONSTITUENT.ID = ORGANIZATIONDATA.ID
left join dbo.GROUPDATA on CONSTITUENT.ID = GROUPDATA.ID
where CONSTITUENT.ID = @SOURCEID;
-- Handle Name
declare @nameID uniqueidentifier;
if @NAMECRITERIA = 0
set @nameID = @TARGETID
else if @NAMECRITERIA = 1
set @nameID = @SOURCEID
else
set @nameID = dbo.UFN_CONSTITUENTMERGEPROCESS_DETERMINEMOSTCOMPLETENAME(@SOURCEID, @TARGETID);
declare @ORGANIZATIONID uniqueidentifier;
if @ORGANIZATIONDETAILSCRITERIA = 0
set @ORGANIZATIONID = @TARGETID;
else if @ORGANIZATIONDETAILSCRITERIA = 1
set @ORGANIZATIONID = @SOURCEID;
else
begin
declare @NUMFIELDS_SOURCE integer;
declare @NUMFIELDS_TARGET integer;
select
@NUMFIELDS_SOURCE =
case when INDUSTRYCODEID is null then 0 else 1 end
+ case when NUMEMPLOYEES = 0 then 0 else 1 end
+ case when NUMSUBSIDIARIES = 0 then 0 else 1 end
+ ISPRIMARY
from dbo.ORGANIZATIONDATA
where ID = @SOURCEID;
select
@NUMFIELDS_TARGET =
case when INDUSTRYCODEID is null then 0 else 1 end
+ case when NUMEMPLOYEES = 0 then 0 else 1 end
+ case when NUMSUBSIDIARIES = 0 then 0 else 1 end
+ ISPRIMARY
from dbo.ORGANIZATIONDATA
where ID = @TARGETID;
if coalesce(@NUMFIELDS_TARGET, 0) >= coalesce(@NUMFIELDS_SOURCE, 0)
set @ORGANIZATIONID = @TARGETID;
else
set @ORGANIZATIONID = @SOURCEID;
end
declare @GROUPID uniqueidentifier;
if @GROUPDETAILSCRITERIA = 0 -- Target
set @GROUPID = @TARGETID;
else if @GROUPDETAILSCRITERIA = 1 -- Source
set @GROUPID = @SOURCEID;
else -- Most recent start date
begin
declare @TARGETGROUPSTARTDATE datetime;
select
@TARGETGROUPSTARTDATE = coalesce(STARTDATE, DATEADDED)
from
dbo.GROUPDATA
where
ID = @TARGETID;
if @TARGETGROUPSTARTDATE < @SOURCEGROUPINCEPTIONDATE
set @GROUPID = @SOURCEID;
else
set @GROUPID = @TARGETID;
end
-- Change the name format function for households based on the name criteria. Do it before the name is changed so that the triggers will not overwrite the custom keyname.
update dbo.GROUPDATA
set
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @DATECHANGED,
NAMEFORMATFUNCTIONID = case when (@nameid = @SOURCEID) then @SOURCEGROUPNAMEFORMATFUNCTIONID else NAMEFORMATFUNCTIONID end
where
ID = @TARGETID;
if @PRESERVENAMEFIELDS = 0 or @PRESERVENAMEFIELDS is null
update CONSTITUENT
set
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @DATECHANGED,
FIRSTNAME = case when (@nameid = @SOURCEID) then @SOURCEFIRSTNAME else FIRSTNAME end,
KEYNAME = case when (@nameid = @SOURCEID) then @SOURCEKEYNAME else KEYNAME end,
KEYNAMEPREFIX = case when (@nameid = @SOURCEID) then @SOURCEKEYNAMEPREFIX else KEYNAMEPREFIX end,
MIDDLENAME = case when (@nameid = @SOURCEID) then @SOURCEMIDDLENAME else MIDDLENAME end,
MAIDENNAME = case when (@nameid = @SOURCEID) then @SOURCEMAIDENNAME else MAIDENNAME end,
NICKNAME = case when (@nameid = @SOURCEID) then @SOURCENICKNAME else NICKNAME end,
TITLECODEID = case when (@nameid = @SOURCEID) then @SOURCETITLECODEID else TITLECODEID end,
TITLE2CODEID = case when (@nameid = @SOURCEID) then @SOURCETITLE2CODEID else TITLE2CODEID end,
SUFFIXCODEID = case when (@nameid = @SOURCEID) then @SOURCESUFFIXCODEID else SUFFIXCODEID end,
SUFFIX2CODEID = case when (@nameid = @SOURCEID) then @SOURCESUFFIX2CODEID else SUFFIX2CODEID end,
GENDERCODE = case when (GENDERCODE = 0) then @SOURCEGENDERCODE else GENDERCODE end,
BIRTHDATE = case when (BIRTHDATE = '00000000') then @SOURCEBIRTHDATE else BIRTHDATE end,
ISINACTIVE = case when (ISINACTIVE = 0) then @SOURCEISINACTIVE else ISINACTIVE end,
GIVESANONYMOUSLY = case when (GIVESANONYMOUSLY = 0) then @SOURCEGIVESANONYMOUSLY else GIVESANONYMOUSLY end,
WEBADDRESS = case when (WEBADDRESS = '') then @SOURCEWEBADDRESS else WEBADDRESS end,
PICTURE = case when (PICTURE is null) then @SOURCEPICTURE else PICTURE end,
PICTURETHUMBNAIL = case when (PICTURETHUMBNAIL is null) then @SOURCEPICTURETHUMBNAIL else PICTURETHUMBNAIL end,
MARITALSTATUSCODEID = case when (MARITALSTATUSCODEID is null) then @SOURCEMARITALSTATUSCODEID else MARITALSTATUSCODEID end,
DONOTMAIL = case when (DONOTMAIL = 0) then @SOURCEDONOTMAIL else DONOTMAIL end,
DONOTEMAIL = case when (DONOTEMAIL = 0) then @SOURCEDONOTEMAIL else DONOTEMAIL end,
DONOTPHONE = case when (DONOTPHONE = 0) then @SOURCEDONOTPHONE else DONOTPHONE end,
GENDERCODEID = case when GENDERCODEID IS NULL or (GENDERCODEID = (select dbo.UFN_GENDERCODEDEFAULTMAPPING_GETGENDERCODEID(0)) and @SOURCEGENDERCODEID IS NOT NULL) then @SOURCEGENDERCODEID else GENDERCODEID end
where
ID = @TARGETID;
else
update CONSTITUENT
set
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @DATECHANGED,
FIRSTNAME = case when (@nameid = @SOURCEID) then coalesce(nullif(@SOURCEFIRSTNAME, ''), FIRSTNAME) else coalesce(nullif(FIRSTNAME, ''), @SOURCEFIRSTNAME) end,
KEYNAME = case when (@nameid = @SOURCEID) then coalesce(nullif(@SOURCEKEYNAME, ''), KEYNAME) else coalesce(nullif(KEYNAME, ''), @SOURCEKEYNAME) end,
KEYNAMEPREFIX = case when (@nameid = @SOURCEID) then coalesce(nullif(@SOURCEKEYNAMEPREFIX, ''), KEYNAMEPREFIX) else coalesce(nullif(KEYNAMEPREFIX, ''), @SOURCEKEYNAMEPREFIX) end,
MIDDLENAME = case when (@nameid = @SOURCEID) then coalesce(nullif(@SOURCEMIDDLENAME, ''), MIDDLENAME) else coalesce(nullif(MIDDLENAME, ''), @SOURCEMIDDLENAME) end,
MAIDENNAME = case when (@nameid = @SOURCEID) then coalesce(nullif(@SOURCEMAIDENNAME, ''), MAIDENNAME) else coalesce(nullif(MAIDENNAME, ''), @SOURCEMAIDENNAME) end,
NICKNAME = case when (@nameid = @SOURCEID) then coalesce(nullif(@SOURCENICKNAME, ''), NICKNAME) else coalesce(nullif(NICKNAME, ''), @SOURCENICKNAME) end,
TITLECODEID = case when (@nameid = @SOURCEID) then coalesce(@SOURCETITLECODEID, TITLECODEID) else coalesce(TITLECODEID, @SOURCETITLECODEID) end,
TITLE2CODEID = case when (@nameid = @SOURCEID) then coalesce(@SOURCETITLE2CODEID, TITLE2CODEID) else coalesce(TITLE2CODEID, @SOURCETITLE2CODEID) end,
SUFFIXCODEID = case when (@nameid = @SOURCEID) then coalesce(@SOURCESUFFIXCODEID, SUFFIXCODEID) else coalesce(SUFFIXCODEID, @SOURCESUFFIXCODEID) end,
SUFFIX2CODEID = case when (@nameid = @SOURCEID) then coalesce(@SOURCESUFFIX2CODEID, SUFFIX2CODEID) else coalesce(SUFFIX2CODEID, @SOURCESUFFIX2CODEID) end,
GENDERCODE = case when (GENDERCODE = 0) then @SOURCEGENDERCODE else GENDERCODE end,
BIRTHDATE = case when (BIRTHDATE = '00000000') then @SOURCEBIRTHDATE else BIRTHDATE end,
ISINACTIVE = case when (ISINACTIVE = 0) then @SOURCEISINACTIVE else ISINACTIVE end,
GIVESANONYMOUSLY = case when (GIVESANONYMOUSLY = 0) then @SOURCEGIVESANONYMOUSLY else GIVESANONYMOUSLY end,
WEBADDRESS = case when (WEBADDRESS = '') then @SOURCEWEBADDRESS else WEBADDRESS end,
PICTURE = case when (PICTURE is null) then @SOURCEPICTURE else PICTURE end,
PICTURETHUMBNAIL = case when (PICTURETHUMBNAIL is null) then @SOURCEPICTURETHUMBNAIL else PICTURETHUMBNAIL end,
MARITALSTATUSCODEID = case when (MARITALSTATUSCODEID is null) then @SOURCEMARITALSTATUSCODEID else MARITALSTATUSCODEID end,
DONOTMAIL = case when (DONOTMAIL = 0) then @SOURCEDONOTMAIL else DONOTMAIL end,
DONOTEMAIL = case when (DONOTEMAIL = 0) then @SOURCEDONOTEMAIL else DONOTEMAIL end,
DONOTPHONE = case when (DONOTPHONE = 0) then @SOURCEDONOTPHONE else DONOTPHONE end,
GENDERCODEID = case when GENDERCODEID IS NULL or (GENDERCODEID = (select dbo.UFN_GENDERCODEDEFAULTMAPPING_GETGENDERCODEID(0)) and @SOURCEGENDERCODEID IS NOT NULL) then @SOURCEGENDERCODEID else GENDERCODEID end
where
ID = @TARGETID;
declare @TARGETISORGANIZATION bit;
select @TARGETISORGANIZATION = ISORGANIZATION from dbo.CONSTITUENT where ID = @TARGETID;
if @TARGETISORGANIZATION = 1
begin
update dbo.BATCHCONSTITUENT
set
PRIMARYBUSINESSID = @TARGETID
where
PRIMARYBUSINESSID = @SOURCEID
update dbo.BATCHCONSTITUENTUPDATE
set
BUSINESS_ID = @TARGETID
where
BUSINESS_ID = @SOURCEID
end
update dbo.BATCHPEOPLEFINDER
set
CONSTITUENTID = @TARGETID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @DATECHANGED
where
CONSTITUENTID = @SOURCEID
-- If we were missing an org data row for the target, create it before trying to update it.
if @TARGETISORGANIZATION = 1 and not exists (select 1 from dbo.ORGANIZATIONDATA where ID = @TARGETID)
begin
insert into dbo.ORGANIZATIONDATA
(
[ID],
[INDUSTRYCODEID],
[NUMEMPLOYEES],
[NUMSUBSIDIARIES],
[PARENTCORPID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
) values (
@TARGETID,
null,
0,
0,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@DATECHANGED,
@DATECHANGED
);
end
if isnull(@PRESERVEORGANIZATIONDETAILS, 0) = 0
update dbo.ORGANIZATIONDATA
set
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @DATECHANGED,
INDUSTRYCODEID = case when (@ORGANIZATIONID = @SOURCEID) then @SOURCEINDUSTRYCODEID else INDUSTRYCODEID end,
NUMEMPLOYEES = case when (@ORGANIZATIONID = @SOURCEID) then @SOURCENUMEMPLOYEES else NUMEMPLOYEES end,
NUMSUBSIDIARIES = case when (@ORGANIZATIONID = @SOURCEID) then @SOURCENUMSUBSIDIARIES else NUMSUBSIDIARIES end,
ISPRIMARY = case when (@ORGANIZATIONID = @SOURCEID) then @SOURCEISPRIMARY else ISPRIMARY end
where
ID = @TARGETID;
else
update dbo.ORGANIZATIONDATA
set
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @DATECHANGED,
INDUSTRYCODEID = case when (@ORGANIZATIONID = @SOURCEID) then coalesce(@SOURCEINDUSTRYCODEID, INDUSTRYCODEID) else coalesce(INDUSTRYCODEID, @SOURCEINDUSTRYCODEID) end,
NUMEMPLOYEES = case when (@ORGANIZATIONID = @SOURCEID) then coalesce(nullif(@SOURCENUMEMPLOYEES, 0), NUMEMPLOYEES) else coalesce(nullif(NUMEMPLOYEES, 0), @SOURCENUMEMPLOYEES) end,
NUMSUBSIDIARIES = case when (@ORGANIZATIONID = @SOURCEID) then coalesce(nullif(@SOURCENUMSUBSIDIARIES, 0), NUMSUBSIDIARIES) else coalesce(nullif(NUMSUBSIDIARIES, 0), @SOURCENUMSUBSIDIARIES) end,
ISPRIMARY = case when (@ORGANIZATIONID = @SOURCEID) then coalesce(nullif(@SOURCEISPRIMARY, 0), ISPRIMARY) else coalesce(nullif(ISPRIMARY, 0), @SOURCEISPRIMARY) end
where
ID = @TARGETID;
--Merge matching gift condition settings as these are part of organization info.
exec dbo.USP_MERGETASK_MATCHINGGIFTCONDITIONS @SOURCEID, @TARGETID, @CHANGEAGENTID, @PRESERVEORGANIZATIONDETAILS;
if isnull(@PRESERVEGROUPDETAILS, 0) = 0
begin
if @GROUPID = @SOURCEID
update dbo.GROUPDATA
set
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @DATECHANGED,
STARTDATE = @SOURCEGROUPSTARTDATE,
DESCRIPTION = @SOURCEGROUPDESCRIPTION,
GROUPTYPECODE = @SOURCEGROUPTYPECODE,
GROUPTYPEID = @SOURCEGROUPTYPEID
where
ID = @TARGETID;
end
else
begin
update dbo.GROUPDATA
set
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @DATECHANGED,
STARTDATE = case when (@GROUPID = @SOURCEID) then coalesce(@SOURCEGROUPSTARTDATE, STARTDATE) else coalesce(STARTDATE, @SOURCEGROUPSTARTDATE) end,
DESCRIPTION = case when (@GROUPID = @SOURCEID) then coalesce(nullif(@SOURCEGROUPDESCRIPTION, ''), DESCRIPTION) else coalesce(nullif(DESCRIPTION, ''), @SOURCEGROUPDESCRIPTION) end,
GROUPTYPECODE = case when (@GROUPID = @SOURCEID) then @SOURCEGROUPTYPECODE else GROUPTYPECODE end,
GROUPTYPEID = case when (@GROUPID = @SOURCEID) then @SOURCEGROUPTYPEID else GROUPTYPEID end
where
ID = @TARGETID;
end
--For the personal information merge task, since we don't know if revenue is being merged:
--only merge the origination data if the source has no REVENUEID and the target has no data
declare @SOURCEORIGINATIONSOURCEID uniqueidentifier = null;
declare @SOURCEORIGINCODE tinyint = null;
select
@SOURCEORIGINATIONSOURCEID = INFOSOURCECODEID,
@SOURCEORIGINCODE = ORIGINCODE
from
dbo.CONSTITUENTORIGINATION
where
ID = @SOURCEID
and REVENUEID is null
if @SOURCEORIGINATIONSOURCEID is not null or @SOURCEORIGINCODE <> 0
begin
declare @TARGETORIGINATIONSOURCEID uniqueidentifier = null;
declare @TARGETORIGINATIONREVENUEID uniqueidentifier = null;
declare @TARGETORIGINCODE tinyint = null;
declare @TARGETHASDATA bit = 0;
select
@TARGETHASDATA = 1,
@TARGETORIGINATIONSOURCEID = INFOSOURCECODEID,
@TARGETORIGINCODE = ORIGINCODE,
@TARGETORIGINATIONREVENUEID = REVENUEID
from
dbo.CONSTITUENTORIGINATION
where
ID = @TARGETID
if (@TARGETORIGINATIONSOURCEID is null) and (@TARGETORIGINATIONREVENUEID is null) and (@TARGETORIGINCODE is null or @TARGETORIGINCODE = 0)
begin
if @TARGETHASDATA = 1
update dbo.CONSTITUENTORIGINATION set
INFOSOURCECODEID = @SOURCEORIGINATIONSOURCEID,
ORIGINCODE = coalesce(@SOURCEORIGINCODE,0),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @DATECHANGED
where ID = @TARGETID
else
insert into dbo.CONSTITUENTORIGINATION(ID, INFOSOURCECODEID, ORIGINCODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(@TARGETID, @SOURCEORIGINATIONSOURCEID, coalesce(@SOURCEORIGINCODE,0), @CHANGEAGENTID, @CHANGEAGENTID, @DATECHANGED, @DATECHANGED)
end
end
-- Merge volunteer records where the source is the sponsor
-- so that the target will now be the sponsor
update dbo.VOLUNTEER set SPONSORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where SPONSORID = @SOURCEID;
--Update documentation records that were authored by the source
--so that their AuthorID's now point to the target.
update dbo.CONSTITUENTNOTE
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.CONSTITUENTMEDIALINK
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.CONSTITUENTATTACHMENT
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.INTERACTIONATTACHMENT
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.INTERACTIONNOTE
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.INTERACTIONMEDIALINK
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.JOBATTACHMENT
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.JOBMEDIALINK
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.JOBNOTE
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.REVENUEATTACHMENT
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.REVENUEMEDIALINK
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.REVENUENOTE
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.VOLUNTEERATTACHMENT
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.VOLUNTEERMEDIALINK
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.VOLUNTEERNOTE
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.PLANNEDGIFTATTACHMENT
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.PLANNEDGIFTMEDIALINK
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
update dbo.PLANNEDGIFTNOTE
set AUTHORID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where AUTHORID = @SOURCEID
--Move application user link
if not exists(select 1 from dbo.APPUSER where CONSTITUENTID = @TARGETID)
begin
update dbo.APPUSER
set CONSTITUENTID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where CONSTITUENTID = @SOURCEID;
end
-- Update attribute records that have a "Constituent" data type
-- that reference the source so that they reference the target
declare @TABLENAME nvarchar(50);
declare @VALUEFIELD nvarchar(50);
declare @SQL nvarchar(1000);
declare @SOURCEIDSTRING nvarchar(36);
declare @TARGETIDSTRING nvarchar(36);
declare @SOURCECONSTITIDSTRING nvarchar(36);
declare @TARGETCONSTITIDSTRING nvarchar(36);
declare @CHANGEAGENTIDSTRING nvarchar(36);
set @CHANGEAGENTIDSTRING = convert(nvarchar(36), @CHANGEAGENTID);
set @SOURCECONSTITIDSTRING = convert(nvarchar(36), @SOURCEID);
set @TARGETCONSTITIDSTRING = convert(nvarchar(36), @TARGETID);
declare ATTRTABLECURSOR cursor local fast_forward for
select
TABLECATALOG.TABLENAME
from ATTRIBUTECATEGORY
inner join TABLECATALOG on TABLECATALOG.ID = ATTRIBUTECATEGORY.TABLECATALOGID
inner join ATTRIBUTERECORDTYPE on ATTRIBUTERECORDTYPE.ID = ATTRIBUTECATEGORY.ATTRIBUTERECORDTYPEID
inner join RECORDTYPE on RECORDTYPE.ID = ATTRIBUTERECORDTYPE.RECORDTYPEID
where
ATTRIBUTECATEGORY.VALUECOLUMNNAME = 'CONSTITUENTVALUEID'
open ATTRTABLECURSOR;
fetch next from ATTRTABLECURSOR into @TABLENAME;
while @@fetch_status = 0
begin
set @SQL = '
update dbo.' + @TABLENAME +'
set CONSTITUENTVALUEID = ''' + @TARGETCONSTITIDSTRING + ''', CHANGEDBYID = ''' + @CHANGEAGENTIDSTRING + ''', DATECHANGED = getdate()
where CONSTITUENTVALUEID = ''' + @SOURCECONSTITIDSTRING + ''';'
exec(@SQL);
fetch next from ATTRTABLECURSOR into @TABLENAME;
end
close ATTRTABLECURSOR;
deallocate ATTRTABLECURSOR;
declare @SOURCEISGROUP bit;
declare @TARGETISGROUP bit;
-- Merge group membership info - if this constituent is a group member (merge members of this group in USP_MERGE_GROUPMEMBERS)
exec dbo.USP_MERGE_GROUPMEMBERSHIP @SOURCEID, @TARGETID, @CHANGEAGENTID, @DATECHANGED;
set @SOURCEISGROUP = dbo.UFN_CONSTITUENT_ISGROUP(@SOURCEID);
set @TARGETISGROUP = dbo.UFN_CONSTITUENT_ISGROUP(@TARGETID);
if (@SOURCEISGROUP <> @TARGETISGROUP)
begin
raiserror('These constituents were not merged because one is a group and the other is not a group.', 16, 1);
end
else if (@SOURCEISGROUP = 1 and @TARGETISGROUP = 1)
begin
exec dbo.USP_MERGE_GROUPMEMBERS @SOURCEID, @TARGETID, @CONTACTCRITERIA, @CHANGEAGENTID, @DATECHANGED;
end
--If both source and target are groups and we are merge mail preferences...
if @SOURCEISGROUP = 1 and @TARGETISGROUP = 1 and @INCLUDEPREFS = 1
begin
--Due to table constraints, we have to remove
--potential dupes before merging the preferences.
--If the target's preferences supersede,
--delete those the source has that would
--come over, but have a dupe on the target.
if @PREFCRITERIA = 0
begin
delete MAILPREFERENCE
where
ID in(
select mp.ID
from dbo.MAILPREFERENCE mp
inner join dbo.MAILPREFERENCEGROUPCONTACT mpgc on mpgc.MAILPREFERENCEID=mp.ID
inner join dbo.GROUPMEMBER gm on gm.MEMBERID=mpgc.CONSTITUENTID
where mp.CONSTITUENTID=@SOURCEID
and gm.GROUPID=@TARGETID
) and
dbo.UFN_MAILPREFERENCE_VALIDATEUNIQUE(ID,@TARGETID,MAILTYPECODE,BUSINESSUNITCODEID,CATEGORYCODEID,
EVENTCATEGORYCODEID,SITEID,ACKNOWLEDGEMENTID,CORRESPONDENCEID,PLEDGEREMINDERID,CORRESPONDENCECODEID,PURPOSEID)=0
end
--If the source's preferences supersede,
--delete those the target has that dupe
--a preference that is going to come over
if @PREFCRITERIA=1
begin
delete targetmp
from MAILPREFERENCE targetmp, MAILPREFERENCE sourcemp
where
targetmp.CONSTITUENTID=@TARGETID and
sourcemp.ID in (
select mp.ID
from dbo.MAILPREFERENCE mp
inner join dbo.MAILPREFERENCEGROUPCONTACT mpgc on mpgc.MAILPREFERENCEID=mp.ID
inner join dbo.GROUPMEMBER gm on gm.MEMBERID=mpgc.CONSTITUENTID
where mp.CONSTITUENTID=@SOURCEID
and gm.GROUPID=@TARGETID
) and
((targetmp.MAILTYPECODE = sourcemp.MAILTYPECODE) or (targetmp.MAILTYPECODE is null and sourcemp.MAILTYPECODE is null)) and
((targetmp.BUSINESSUNITCODEID = sourcemp.BUSINESSUNITCODEID) or (targetmp.BUSINESSUNITCODEID is null and sourcemp.BUSINESSUNITCODEID is null)) and
((targetmp.CATEGORYCODEID = sourcemp.CATEGORYCODEID) or (targetmp.CATEGORYCODEID is null and sourcemp.CATEGORYCODEID is null)) and
((targetmp.EVENTCATEGORYCODEID = sourcemp.EVENTCATEGORYCODEID) or (targetmp.EVENTCATEGORYCODEID is null and sourcemp.EVENTCATEGORYCODEID is null)) and
((targetmp.SITEID = sourcemp.SITEID) or (targetmp.SITEID is null and sourcemp.SITEID is null)) and
((targetmp.ACKNOWLEDGEMENTID = sourcemp.ACKNOWLEDGEMENTID) or (targetmp.ACKNOWLEDGEMENTID is null and sourcemp.ACKNOWLEDGEMENTID is null)) and
((targetmp.CORRESPONDENCEID = sourcemp.CORRESPONDENCEID) or (targetmp.CORRESPONDENCEID is null and sourcemp.CORRESPONDENCEID is null)) and
((targetmp.PLEDGEREMINDERID = sourcemp.PLEDGEREMINDERID) or (targetmp.PLEDGEREMINDERID is null and sourcemp.PLEDGEREMINDERID is null)) and
((targetmp.CORRESPONDENCECODEID = sourcemp.CORRESPONDENCECODEID) or (targetmp.CORRESPONDENCECODEID is null and sourcemp.CORRESPONDENCECODEID is null)) and
((targetmp.PURPOSEID = sourcemp.PURPOSEID) or (targetmp.PURPOSEID is null and sourcemp.PURPOSEID is null))
end
--Move mail preferences on the source that refer to members of the target.
update dbo.MAILPREFERENCE
set
CONSTITUENTID=@TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @DATECHANGED
where
ID in (
select MAILPREFERENCE.ID
from dbo.MAILPREFERENCE
inner join dbo.MAILPREFERENCEGROUPCONTACT on MAILPREFERENCEGROUPCONTACT.MAILPREFERENCEID=MAILPREFERENCE.ID
inner join dbo.GROUPMEMBER on GROUPMEMBER.MEMBERID=MAILPREFERENCEGROUPCONTACT.CONSTITUENTID or (MAILPREFERENCEGROUPCONTACT.USEPRIMARYCONTACT=1 and GROUPMEMBER.ISPRIMARY=1)
where MAILPREFERENCE.CONSTITUENTID=@SOURCEID
and GROUPMEMBER.GROUPID=@TARGETID
) and
dbo.UFN_MAILPREFERENCE_VALIDATEUNIQUE(ID,@TARGETID,MAILTYPECODE,BUSINESSUNITCODEID,CATEGORYCODEID,
EVENTCATEGORYCODEID,SITEID,ACKNOWLEDGEMENTID,CORRESPONDENCEID,PLEDGEREMINDERID,CORRESPONDENCECODEID,PURPOSEID)=1
end
-- Bring over source's deceased information
if exists (select 1 from dbo.DECEASEDCONSTITUENT where ID = @SOURCEID)
begin
if not exists (select 1 from dbo.DECEASEDCONSTITUENT where ID = @TARGETID)
begin
if @DONOTMERGEDECEASEDINFOIFONLYSOURCEISDECEASED = 0
begin
-- Mark the target as deceased using the source's information
insert into dbo.DECEASEDCONSTITUENT
(
ID,
DECEASEDDATE,
DECEASEDSOURCECODEID,
DECEASEDCONFIRMATIONCODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
@TARGETID,
DECEASEDDATE,
DECEASEDSOURCECODEID,
DECEASEDCONFIRMATIONCODE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@DATECHANGED,
@DATECHANGED
from dbo.DECEASEDCONSTITUENT
where ID = @SOURCEID
exec dbo.USP_CONSTITUENT_DECEASEFROMRULES @TARGETID, @CHANGEAGENTID
end
end
else
begin
declare
@SOURCEDECEASEDDATE dbo.UDT_FUZZYDATE,
@SOURCEDECEASEDSOURCECODEID uniqueidentifier,
@SOURCEDECEASEDCONFIRMATIONCODE tinyint
select
@SOURCEDECEASEDDATE = DECEASEDDATE,
@SOURCEDECEASEDCONFIRMATIONCODE = DECEASEDCONFIRMATIONCODE,
@SOURCEDECEASEDSOURCECODEID = DECEASEDSOURCECODEID
from dbo.DECEASEDCONSTITUENT
where ID = @SOURCEID
-- Copy any fields that are set on the source to the target when the target's value is blank or less specific
update dbo.DECEASEDCONSTITUENT set
DECEASEDDATE =
case
when DECEASEDCONSTITUENT.DECEASEDDATE = '00000000' then @SOURCEDECEASEDDATE
else DECEASEDCONSTITUENT.DECEASEDDATE
end,
DECEASEDSOURCECODEID =
case
when DECEASEDCONSTITUENT.DECEASEDSOURCECODEID is null then @SOURCEDECEASEDSOURCECODEID
else DECEASEDCONSTITUENT.DECEASEDSOURCECODEID
end,
DECEASEDCONFIRMATIONCODE =
case
when DECEASEDCONSTITUENT.DECEASEDCONFIRMATIONCODE = 0 then @SOURCEDECEASEDCONFIRMATIONCODE
else DECEASEDCONSTITUENT.DECEASEDCONFIRMATIONCODE
end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @DATECHANGED
where DECEASEDCONSTITUENT.ID = @TARGETID
end
end
return 0;