USP_CONSTITUENTUPDATEBATCH_APPLYNAMERULES
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@PRIMARYRECORDID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@NAMECODE | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_CONSTITUENTUPDATEBATCH_APPLYNAMERULES (
@ID uniqueidentifier,
@PRIMARYRECORDID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@NAMECODE tinyint = 1
)
as
begin
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
declare @UNKNOWNGENDERCODEID uniqueidentifier = (select dbo.UFN_GENDERCODEDEFAULTMAPPING_GETGENDERCODEID(0))
set @CURRENTDATE = getdate()
declare @FIRSTNAME nvarchar(100)
declare @KEYNAME nvarchar(200)
declare @MIDDLENAME nvarchar(100)
declare @ORIGINAL_KEYNAME nvarchar(100)
declare @ORIGINAL_FIRSTNAME nvarchar(50)
declare @SUFFIXCODEID uniqueidentifier
declare @TITLECODEID uniqueidentifier
declare @EXISTINGFIRSTNAME nvarchar(100)
declare @EXISTINGKEYNAME nvarchar(200)
declare @EXISTINGMIDDLENAME nvarchar(100)
declare @EXISTINGSUFFIXCODEID uniqueidentifier
declare @EXISTINGTITLECODEID uniqueidentifier
-- secondary name fields for existing and incoming constituents
declare @GENDERCODE tinyint
declare @MARITALSTATUSCODEID uniqueidentifier
declare @MAIDENNAME nvarchar(100)
declare @NICKNAME nvarchar(50)
declare @DECEASED bit
declare @DECEASEDDATE dbo.UDT_FUZZYDATE
declare @GIVESANONYMOUSLY bit
declare @WEBSITE dbo.UDT_WEBADDRESS
declare @EXISTINGGENDERCODE tinyint
declare @EXISTINGMARITALSTATUSCODEID uniqueidentifier
declare @EXISTINGMAIDENNAME nvarchar(100)
declare @EXISTINGNICKNAME nvarchar(50)
declare @EXISTINGDECEASED bit
declare @EXISTINGDECEASEDDATE dbo.UDT_FUZZYDATE
declare @EXISTINGGIVESANONYMOUSLY bit
declare @EXISTINGWEBSITE dbo.UDT_WEBADDRESS
declare @UPDATESECONDARYDATA bit = 0
declare @NOCONFLICTS bit = 0
declare @GENDERCODEID uniqueidentifier
declare @EXISTINGGENDERCODEID uniqueidentifier
-- Get existing constituent names
select @EXISTINGFIRSTNAME = FIRSTNAME,
@EXISTINGKEYNAME = KEYNAME,
@EXISTINGMIDDLENAME = MIDDLENAME,
@EXISTINGSUFFIXCODEID = SUFFIXCODEID,
@EXISTINGTITLECODEID = TITLECODEID,
@EXISTINGGENDERCODE = GENDERCODE,
@EXISTINGMARITALSTATUSCODEID = MARITALSTATUSCODEID,
@EXISTINGMAIDENNAME = MAIDENNAME,
@EXISTINGNICKNAME = NICKNAME,
@EXISTINGDECEASED = case when DC.ID is not null then 1 else 0 end,
@EXISTINGDECEASEDDATE = case when DC.DECEASEDDATE is not null then DC.DECEASEDDATE else '00000000' end,
@EXISTINGGIVESANONYMOUSLY = GIVESANONYMOUSLY,
@EXISTINGWEBSITE = WEBADDRESS,
@EXISTINGGENDERCODEID = GENDERCODEID
from dbo.CONSTITUENT C
left join dbo.DECEASEDCONSTITUENT DC on DC.ID = C.ID
where C.ID = @PRIMARYRECORDID;
-- Get names in batch
select @FIRSTNAME = FIRSTNAME,
@KEYNAME = KEYNAME,
@MIDDLENAME = MIDDLENAME,
@SUFFIXCODEID = SUFFIXCODEID,
@TITLECODEID = TITLECODEID,
@GENDERCODE = GENDERCODE,
@MARITALSTATUSCODEID = MARITALSTATUSCODEID,
@MAIDENNAME = MAIDENNAME,
@NICKNAME = NICKNAME,
@DECEASED = DECEASED,
@DECEASEDDATE = DECEASEDDATE,
@GIVESANONYMOUSLY = GIVESANONYMOUSLY,
@WEBSITE = WEBADDRESS,
@GENDERCODEID = GENDERCODEID,
@ORIGINAL_KEYNAME = ORIGINAL_KEYNAME,
@ORIGINAL_FIRSTNAME = ORIGINAL_FIRSTNAME
from dbo.BATCHCONSTITUENTUPDATE
where ID = @ID;
-- If the original names match those in the database case-sensitive
-- then we should store the original values
if @EXISTINGKEYNAME <> @ORIGINAL_KEYNAME COLLATE Latin1_General_CS_AS set @ORIGINAL_KEYNAME = null
if @EXISTINGFIRSTNAME <> @ORIGINAL_FIRSTNAME COLLATE Latin1_General_CS_AS set @ORIGINAL_FIRSTNAME = null
update dbo.BATCHCONSTITUENTUPDATE
set
KEYNAME = isnull(@ORIGINAL_KEYNAME, KEYNAME),
FIRSTNAME = isnull(@ORIGINAL_FIRSTNAME, FIRSTNAME)
where
ID = @ID
-- check to see if there are any conflicts in the core fields. If none, we are allowed to apply any new information.
-- If there are conflicts we don't want to apply new information. So if 'Tim J Littleton' is coming in
-- and 'Tim Jones' is the existing name, we don't want to add the J to the existing record.
-- if its an update or ignore or Alias, see if there are any conflicts. If not set to replace to fill in any new data to current record.
if @NAMECODE <> 1 and (@EXISTINGFIRSTNAME = '' or @EXISTINGFIRSTNAME = @FIRSTNAME or @FIRSTNAME = '') and (@EXISTINGKEYNAME = '' or @EXISTINGKEYNAME = @KEYNAME or @KEYNAME = '') and (@EXISTINGMIDDLENAME = '' or @EXISTINGMIDDLENAME = @MIDDLENAME or @MIDDLENAME = '') and (@EXISTINGSUFFIXCODEID is null or @SUFFIXCODEID is null or @EXISTINGSUFFIXCODEID = @SUFFIXCODEID) and (@EXISTINGTITLECODEID is null or @TITLECODEID is null or @EXISTINGTITLECODEID = @TITLECODEID)
set @NOCONFLICTS = 1
if @NAMECODE = 1 or @NOCONFLICTS = 1
begin
if @NAMECODE <> 0
set @UPDATESECONDARYDATA = 1
--check for conflicts in secondary fields
else
if (@EXISTINGGENDERCODE = 0 or @EXISTINGGENDERCODE = @GENDERCODE or @GENDERCODE = 0 or @EXISTINGGENDERCODEID = null or @EXISTINGGENDERCODEID = @GENDERCODEID or @EXISTINGGENDERCODEID = @UNKNOWNGENDERCODEID ) and (@EXISTINGMARITALSTATUSCODEID is null or @EXISTINGMARITALSTATUSCODEID = @MARITALSTATUSCODEID or @MARITALSTATUSCODEID is null) and (@EXISTINGMAIDENNAME = '' or @EXISTINGMAIDENNAME = @MAIDENNAME or @MAIDENNAME = '') and (@EXISTINGNICKNAME = '' or @EXISTINGNICKNAME = @NICKNAME or @NICKNAME = '') and (@EXISTINGDECEASED = @DECEASED or @DECEASED = 0) and (@EXISTINGDECEASEDDATE = '00000000' or @EXISTINGDECEASEDDATE = @DECEASEDDATE or @DECEASEDDATE = '00000000') and (@EXISTINGGIVESANONYMOUSLY = @GIVESANONYMOUSLY or @GIVESANONYMOUSLY = 0) and (@EXISTINGWEBSITE = '' or @EXISTINGWEBSITE = @WEBSITE or @WEBSITE = '')
set @UPDATESECONDARYDATA = 1
else
set @UPDATESECONDARYDATA = 0
if @UPDATESECONDARYDATA = 1 -- update core and secondary fields
update dbo.BATCHCONSTITUENTUPDATE
set FIRSTNAME = coalesce(NULLIF(FIRSTNAME, ''), @EXISTINGFIRSTNAME),
KEYNAME = coalesce(NULLIF(KEYNAME, ''), @EXISTINGKEYNAME),
MIDDLENAME = coalesce(NULLIF(MIDDLENAME, ''), @EXISTINGMIDDLENAME),
SUFFIXCODEID = coalesce(SUFFIXCODEID, @EXISTINGSUFFIXCODEID),
TITLECODEID = coalesce(TITLECODEID, @EXISTINGTITLECODEID),
GENDERCODE = coalesce(NULLIF(GENDERCODE, 0), @EXISTINGGENDERCODE),
GENDERCODEID = case when GENDERCODEID is null or (GENDERCODEID = @UNKNOWNGENDERCODEID and @EXISTINGGENDERCODEID is not null)
then @EXISTINGGENDERCODEID
else GENDERCODEID end,
MARITALSTATUSCODEID = coalesce(MARITALSTATUSCODEID, @EXISTINGMARITALSTATUSCODEID),
MAIDENNAME = coalesce(NULLIF(MAIDENNAME, ''), @EXISTINGMAIDENNAME),
NICKNAME = coalesce(NULLIF(NICKNAME, ''), @EXISTINGNICKNAME),
DECEASED = coalesce(NULLIF(DECEASED, 0), @EXISTINGDECEASED),
DECEASEDDATE = coalesce(NULLIF(DECEASEDDATE, '00000000'), @EXISTINGDECEASEDDATE),
GIVESANONYMOUSLY = coalesce(NULLIF(GIVESANONYMOUSLY, 0), @EXISTINGGIVESANONYMOUSLY),
WEBADDRESS = coalesce(NULLIF(WEBADDRESS, ''), @EXISTINGWEBSITE),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID
else -- there are secondary conflicts so only update core fields and ignore secondary fields
-- If the setting is replace we want to populate any name conflicts with the newly entered value.
-- If there is no new value, we want to use the existing value.
update dbo.BATCHCONSTITUENTUPDATE
set FIRSTNAME = coalesce(NULLIF(FIRSTNAME, ''), @EXISTINGFIRSTNAME),
KEYNAME = coalesce(NULLIF(KEYNAME, ''), @EXISTINGKEYNAME),
MIDDLENAME = coalesce(NULLIF(MIDDLENAME, ''), @EXISTINGMIDDLENAME),
SUFFIXCODEID = coalesce(SUFFIXCODEID, @EXISTINGSUFFIXCODEID),
TITLECODEID = coalesce(TITLECODEID, @EXISTINGTITLECODEID),
GENDERCODE = @EXISTINGGENDERCODE,
GENDERCODEID = @EXISTINGGENDERCODEID,
MARITALSTATUSCODEID = @EXISTINGMARITALSTATUSCODEID,
MAIDENNAME = @EXISTINGMAIDENNAME,
NICKNAME = @EXISTINGNICKNAME,
DECEASED = @EXISTINGDECEASED,
DECEASEDDATE = @EXISTINGDECEASEDDATE,
REMOVESPOUSE = 0,
GIVESANONYMOUSLY = @EXISTINGGIVESANONYMOUSLY,
WEBADDRESS = @EXISTINGWEBSITE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID
end
--If the setting is Do not replace we want to populate any name conflicts with what already exists in the constituent table.
--In this case we can blank out values in the Batch line if the existing value in the database table is blank.
else
if @NAMECODE in (
0,
3
) -- ignore core and secondary fields also here
update dbo.BATCHCONSTITUENTUPDATE
set FIRSTNAME = @EXISTINGFIRSTNAME,
KEYNAME = @EXISTINGKEYNAME,
MIDDLENAME = @EXISTINGMIDDLENAME,
SUFFIXCODEID = @EXISTINGSUFFIXCODEID,
TITLECODEID = @EXISTINGTITLECODEID,
GENDERCODE = @EXISTINGGENDERCODE,
GENDERCODEID = @EXISTINGGENDERCODEID,
MARITALSTATUSCODEID = @EXISTINGMARITALSTATUSCODEID,
MAIDENNAME = @EXISTINGMAIDENNAME,
NICKNAME = @EXISTINGNICKNAME,
DECEASED = @EXISTINGDECEASED,
DECEASEDDATE = @EXISTINGDECEASEDDATE,
REMOVESPOUSE = 0,
GIVESANONYMOUSLY = @EXISTINGGIVESANONYMOUSLY,
WEBADDRESS = @EXISTINGWEBSITE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID
-- Handle Alias. Insert into Alias table and ignore name in batch since we don't want to replace during commit.
if @NAMECODE = 3
begin try
declare @IGNOREDUPLICATE bit = 1;--if we are here we want to ignore the duplicate error message and continue on.
exec dbo.USP_ADD_INDIVIDUAL_ALIAS @CHANGEAGENTID = @CHANGEAGENTID,
@CONSTITUENTID = @PRIMARYRECORDID,
@KEYNAME = @KEYNAME,
@FIRSTNAME = @FIRSTNAME,
@MIDDLENAME = @MIDDLENAME,
@TITLECODEID = @TITLECODEID,
@SUFFIXCODEID = @SUFFIXCODEID,
@IGNOREDUPLICATE = @IGNOREDUPLICATE;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
end