USP_DATAFORMTEMPLATE_EDIT_CONSTITUENTUPDATEBATCHDUPLICATEAUTOMATCH_2
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | nvarchar(255) | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@PRIMARYRECORDID | uniqueidentifier | IN | |
@DOMANUALREVIEWFORAUTOMATCH | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_CONSTITUENTUPDATEBATCHDUPLICATEAUTOMATCH_2
(
@ID nvarchar(255), -- The BATCHCONSTITUENTUPDATE.ID field for the row.
@CHANGEAGENTID uniqueidentifier = null,
@PRIMARYRECORDID uniqueidentifier,
@DOMANUALREVIEWFORAUTOMATCH bit
)
as
set nocount on;
declare @BATCHCONSTITUENTUPDATEID uniqueidentifier;
declare @CURRENTDATE datetime;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
set @CURRENTDATE = getdate()
set @BATCHCONSTITUENTUPDATEID = convert(uniqueidentifier, @ID);
begin try
declare @NEWCONSTITUENTLOOKUPID nvarchar(100)
select
@NEWCONSTITUENTLOOKUPID = LOOKUPID
from dbo.CONSTITUENT
where ID = @PRIMARYRECORDID
-- Pull in spouse fields
declare
@BATCHHASSPOUSE bit = 0,
@SPOUSE_ID uniqueidentifier,
@SPOUSE_TITLECODEID uniqueidentifier,
@SPOUSE_FIRSTNAME nvarchar(50),
@SPOUSE_NICKNAME nvarchar(50),
@SPOUSE_MIDDLENAME nvarchar(50),
@SPOUSE_MAIDENNAME nvarchar(100),
@SPOUSE_KEYNAME nvarchar(100),
@SPOUSE_SUFFIXCODEID uniqueidentifier,
@SPOUSE_GENDERCODE tinyint,
@SPOUSE_BIRTHDATE dbo.UDT_FUZZYDATE,
@SPOUSE_LOOKUPID nvarchar(100),
@SPOUSE_RELATIONSHIPTYPECODEID uniqueidentifier,
@SPOUSE_RECIPROCALTYPECODEID uniqueidentifier
--get existing spouse id from batch
select
@BATCHHASSPOUSE = case when SPOUSE_ID is not null or len(SPOUSE_LASTNAME) > 0 then 1 else 0 end
from dbo.BATCHCONSTITUENTUPDATE
where ID = @BATCHCONSTITUENTUPDATEID;
select
@SPOUSE_ID = CONSTITUENT_SPOUSE.ID,
@SPOUSE_TITLECODEID = CONSTITUENT_SPOUSE.TITLECODEID,
@SPOUSE_FIRSTNAME = CONSTITUENT_SPOUSE.FIRSTNAME,
@SPOUSE_NICKNAME = CONSTITUENT_SPOUSE.NICKNAME,
@SPOUSE_MIDDLENAME = CONSTITUENT_SPOUSE.MIDDLENAME,
@SPOUSE_MAIDENNAME = CONSTITUENT_SPOUSE.MAIDENNAME,
@SPOUSE_KEYNAME = CONSTITUENT_SPOUSE.KEYNAME,
@SPOUSE_SUFFIXCODEID = CONSTITUENT_SPOUSE.SUFFIXCODEID,
@SPOUSE_GENDERCODE = CONSTITUENT_SPOUSE.GENDERCODE,
@SPOUSE_BIRTHDATE = CONSTITUENT_SPOUSE.BIRTHDATE,
@SPOUSE_LOOKUPID = CONSTITUENT_SPOUSE.LOOKUPID,
@SPOUSE_RELATIONSHIPTYPECODEID = RELATIONSHIP.RELATIONSHIPTYPECODEID,
@SPOUSE_RECIPROCALTYPECODEID = RELATIONSHIP.RECIPROCALTYPECODEID
from dbo.RELATIONSHIP
inner join dbo.CONSTITUENT as CONSTITUENT_SPOUSE on
RELATIONSHIP.RECIPROCALCONSTITUENTID = CONSTITUENT_SPOUSE.ID and
RELATIONSHIP.ISSPOUSE = 1
where RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @PRIMARYRECORDID
-- Load spouse recognition defaults
declare
@SOURCETORECIPIENTEXISTS bit = 0,
@SOURCETORECIPIENTMATCHFACTOR decimal(5, 2),
@SOURCETORECIPIENTREVENUERECOGNITIONTYPECODEID uniqueidentifier,
@RECIPIENTTOSOURCEEXISTS bit = 0,
@RECIPIENTTOSOURCEMATCHFACTOR decimal(5, 2),
@RECIPIENTTOSOURCEREVENUERECOGNITIONTYPECODEID uniqueidentifier
--Only update spouse information if when they have a spouse on the record
--but no spouse on the batch row
if @SPOUSE_ID is not null and @BATCHHASSPOUSE = 0
begin
declare @RECOGNITIONDEFAULT table
(
SOURCECONSTITUENTID uniqueidentifier,
RECIPIENTCONSTITUENTID uniqueidentifier,
MATCHFACTOR decimal(5, 2),
REVENUERECOGNITIONTYPECODEID uniqueidentifier,
ARESETTHROUGHMEMBERDEFAULTINGALLOTHERMEMBERS bit
)
insert into @RECOGNITIONDEFAULT
(
SOURCECONSTITUENTID,
RECIPIENTCONSTITUENTID,
MATCHFACTOR,
REVENUERECOGNITIONTYPECODEID
)
select
SOURCECONSTITUENTID,
RECIPIENTCONSTITUENTID,
MATCHFACTOR,
REVENUERECOGNITIONTYPECODEID
from dbo.UFN_RECOGNITIONDEFAULTS_GETBETWEENTWOCONSTITUENTS(@PRIMARYRECORDID, @SPOUSE_ID)
select
@SOURCETORECIPIENTEXISTS = 1,
@SOURCETORECIPIENTMATCHFACTOR = MATCHFACTOR,
@SOURCETORECIPIENTREVENUERECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODEID
from @RECOGNITIONDEFAULT
where
SOURCECONSTITUENTID = @PRIMARYRECORDID and
RECIPIENTCONSTITUENTID = @SPOUSE_ID
select
@RECIPIENTTOSOURCEEXISTS = 1,
@RECIPIENTTOSOURCEMATCHFACTOR = MATCHFACTOR,
@RECIPIENTTOSOURCEREVENUERECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODEID
from @RECOGNITIONDEFAULT
where
SOURCECONSTITUENTID = @SPOUSE_ID and
RECIPIENTCONSTITUENTID = @PRIMARYRECORDID
update dbo.BATCHCONSTITUENTUPDATE set
SPOUSE_ID = @SPOUSE_ID,
SPOUSE_TITLECODEID = @SPOUSE_TITLECODEID,
SPOUSE_FIRSTNAME = coalesce(@SPOUSE_FIRSTNAME, ''),
SPOUSE_NICKNAME = coalesce(@SPOUSE_NICKNAME, ''),
SPOUSE_MIDDLENAME = coalesce(@SPOUSE_MIDDLENAME, ''),
SPOUSE_MAIDENNAME = coalesce(@SPOUSE_MAIDENNAME, ''),
SPOUSE_LASTNAME = coalesce(@SPOUSE_KEYNAME, ''),
SPOUSE_SUFFIXCODEID = @SPOUSE_SUFFIXCODEID,
SPOUSE_BIRTHDATE = coalesce(@SPOUSE_BIRTHDATE, '00000000'),
SPOUSE_GENDERCODE = coalesce(@SPOUSE_GENDERCODE, 0),
SPOUSE_LOOKUPID = coalesce(@SPOUSE_LOOKUPID, ''),
SPOUSE_RELATIONSHIPTYPECODEID = @SPOUSE_RELATIONSHIPTYPECODEID,
SPOUSE_RECIPROCALTYPECODEID = @SPOUSE_RECIPROCALTYPECODEID,
SPOUSE_RECIPROCALSOFTCREDITRELATIONSHIPEXISTS = @SOURCETORECIPIENTEXISTS,
SPOUSE_RECIPROCALSOFTCREDITMATCHFACTOR = coalesce(@SOURCETORECIPIENTMATCHFACTOR, 100),
SPOUSE_RECIPROCALRECOGNITIONTYPECODEID = @SOURCETORECIPIENTREVENUERECOGNITIONTYPECODEID,
SPOUSE_PRIMARYSOFTCREDITRELATIONSHIPEXISTS = @RECIPIENTTOSOURCEEXISTS,
SPOUSE_PRIMARYSOFTCREDITMATCHFACTOR = coalesce(@RECIPIENTTOSOURCEMATCHFACTOR, 100),
SPOUSE_PRIMARYRECOGNITIONTYPECODEID = @RECIPIENTTOSOURCEREVENUERECOGNITIONTYPECODEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @BATCHCONSTITUENTUPDATEID
end
-- the incoming primary address/phone/email should be made non-primary if the existing record has a primary address/email/phone since the rules are handling this below
if exists (select 'x' from dbo.ADDRESS where CONSTITUENTID = @PRIMARYRECORDID and ISPRIMARY = 1)
update dbo.BATCHCONSTITUENTUPDATEADDRESSES set
ISPRIMARY = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where BATCHCONSTITUENTUPDATEID = @BATCHCONSTITUENTUPDATEID
and ISPRIMARY = 1
and ADDRESSID is null;
if exists (select 'x' from dbo.PHONE where CONSTITUENTID = @PRIMARYRECORDID and ISPRIMARY = 1)
update dbo.BATCHCONSTITUENTUPDATEPHONES set
ISPRIMARY = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where BATCHCONSTITUENTUPDATEID = @BATCHCONSTITUENTUPDATEID
and ISPRIMARY = 1
and PHONEID is null;
if exists (select 'x' from dbo.EMAILADDRESS where CONSTITUENTID = @PRIMARYRECORDID and ISPRIMARY = 1)
update dbo.BATCHCONSTITUENTUPDATEEMAILADDRESSES set
ISPRIMARY = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where BATCHCONSTITUENTUPDATEID = @BATCHCONSTITUENTUPDATEID
and ISPRIMARY = 1
and EMAILADDRESSID is null;
declare @EARLIESTDATE date = '0001-01-01';
declare @LATESTDATE date = '9999-12-31';
-- add user-defined constituencies for matched constituent
insert into dbo.BATCHCONSTITUENTUPDATECONSTITUENCIES
(
BATCHCONSTITUENTUPDATEID,
CONSTITUENCYCODEID,
DATEFROM,
DATETO,
ORIGINALCONSTITUENCYID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
@BATCHCONSTITUENTUPDATEID,
CONSTITUENCYCODEID,
DATEFROM,
DATETO,
ID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
from
dbo.CONSTITUENCY
where
CONSTITUENTID = @PRIMARYRECORDID
and not exists
(
select 1
from
dbo.BATCHCONSTITUENTUPDATECONSTITUENCIES
where
BATCHCONSTITUENTUPDATECONSTITUENCIES.BATCHCONSTITUENTUPDATEID = @ID
and BATCHCONSTITUENTUPDATECONSTITUENCIES.CONSTITUENCYCODEID = CONSTITUENCY.CONSTITUENCYCODEID
and coalesce(BATCHCONSTITUENTUPDATECONSTITUENCIES.DATEFROM, @EARLIESTDATE) = coalesce(CONSTITUENCY.DATEFROM, @EARLIESTDATE)
and coalesce(BATCHCONSTITUENTUPDATECONSTITUENCIES.DATETO, @LATESTDATE) = coalesce(CONSTITUENCY.DATETO, @LATESTDATE)
);
-- add system constituencies for matched constituent
insert into dbo.BATCHCONSTITUENTUPDATECONSTITUENCIESSYSTEM
(
BATCHCONSTITUENTUPDATEID,
CONSTITUENCYCODEID,
DATEFROM,
DATETO,
ORIGINALCONSTITUENCYID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
@BATCHCONSTITUENTUPDATEID,
UPDATECONSTITUENCIES.CONSTITUENCYCODEID,
UPDATECONSTITUENCIES.DATEFROM,
UPDATECONSTITUENCIES.DATETO,
UPDATECONSTITUENCIES.ORIGINALCONSTITUENCYID,
UPDATECONSTITUENCIES.ADDEDBYID,
UPDATECONSTITUENCIES.CHANGEDBYID,
UPDATECONSTITUENCIES.DATEADDED,
UPDATECONSTITUENCIES.DATECHANGED
from
dbo.UFN_CONSTITUENT_GETCONSTITUENCIES_FORUPDATEBATCH(@PRIMARYRECORDID) as UPDATECONSTITUENCIES
left join dbo.CONSTITUENCYSYSTEMNAME
on CONSTITUENCYSYSTEMNAME.ID = UPDATECONSTITUENCIES.CONSTITUENCYCODEID
where
CONSTITUENCYSYSTEMNAME.ID is not null
and not exists
(
select 1
from
dbo.BATCHCONSTITUENTUPDATECONSTITUENCIESSYSTEM
where
BATCHCONSTITUENTUPDATECONSTITUENCIESSYSTEM.BATCHCONSTITUENTUPDATEID = @ID
and BATCHCONSTITUENTUPDATECONSTITUENCIESSYSTEM.CONSTITUENCYCODEID = UPDATECONSTITUENCIES.CONSTITUENCYCODEID
and coalesce(BATCHCONSTITUENTUPDATECONSTITUENCIESSYSTEM.DATEFROM, @EARLIESTDATE) = coalesce(UPDATECONSTITUENCIES.DATEFROM, @EARLIESTDATE)
and coalesce(BATCHCONSTITUENTUPDATECONSTITUENCIESSYSTEM.DATETO, @LATESTDATE) = coalesce(UPDATECONSTITUENCIES.DATETO, @LATESTDATE)
);
-- add solicit codes for matched constituent
insert into [dbo].[BATCHCONSTITUENTUPDATESOLICITCODE]
(
[ID],
[BATCHCONSTITUENTUPDATEID],
[SOLICITCODEID],
[CONSTITUENTSOLICITCODEID],
[STARTDATE],
[ENDDATE],
[COMMENTS],
[SEQUENCE],
[CONSENTPREFERENCECODE],
[SOURCECODEID],
[SOURCEFILEPATH],
[PRIVACYPOLICYFILEPATH],
[SUPPORTINGINFORMATION],
[CONSENTSTATEMENT],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
newid() ID,
@BATCHCONSTITUENTUPDATEID [BATCHCONSTITUENTUPDATEID],
[SOLICITCODEID],
[ID] [CONSTITUENTSOLICITCODEID],
[STARTDATE],
[ENDDATE],
[COMMENTS],
[SEQUENCE],
[CONSENTPREFERENCECODE],
[SOURCECODEID],
[SOURCEFILEPATH],
[PRIVACYPOLICYFILEPATH],
[SUPPORTINGINFORMATION],
[CONSENTSTATEMENT],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from dbo.CONSTITUENTSOLICITCODE
where [CONSTITUENTID] = @PRIMARYRECORDID;
-- get rules settings from the batch row
declare @NAMECODE tinyint;
declare @SIMILARADDRESSCODE tinyint;
declare @UNSIMILARADDRESSCODE tinyint;
declare @NEWADDRESSPRIMARYCODE tinyint;
declare @BIRTHDATERULECODE tinyint;
declare @DIFFERENTEMAILCODE tinyint;
declare @NEWEMAILPRIMARYCODE tinyint;
declare @DIFFERENTPHONECODE tinyint;
declare @NEWPHONEPRIMARYCODE tinyint;
select
@NAMECODE = NAMECODE,
@SIMILARADDRESSCODE = SIMILARADDRESSCODE,
@UNSIMILARADDRESSCODE = UNSIMILARADDRESSCODE,
@NEWADDRESSPRIMARYCODE = NEWADDRESSPRIMARYCODE,
@BIRTHDATERULECODE = BIRTHDATERULECODE,
@DOMANUALREVIEWFORAUTOMATCH = DOMANUALREVIEWFORAUTOMATCH,
@DIFFERENTEMAILCODE = DIFFERENTEMAILCODE,
@NEWEMAILPRIMARYCODE = NEWEMAILPRIMARYCODE,
@DIFFERENTPHONECODE = DIFFERENTPHONECODE,
@NEWPHONEPRIMARYCODE = NEWPHONEPRIMARYCODE
from dbo.BATCHCONSTITUENTUPDATE
where ID = @BATCHCONSTITUENTUPDATEID;
-- Apply constituent matching rules
if @DOMANUALREVIEWFORAUTOMATCH = 0
begin
exec dbo.USP_BATCHCONSTITUENT_APPLYBUSINESSRULES
@BATCHCONSTITUENTUPDATEID,
@PRIMARYRECORDID,
@CHANGEAGENTID,
@NAMECODE,
1,
@SIMILARADDRESSCODE,
@UNSIMILARADDRESSCODE,
@NEWADDRESSPRIMARYCODE,
@BIRTHDATERULECODE,
@DIFFERENTPHONECODE,
@NEWPHONEPRIMARYCODE,
@DIFFERENTEMAILCODE,
@NEWEMAILPRIMARYCODE;
end
update dbo.BATCHCONSTITUENTUPDATE set
PRIMARYRECORDID = @PRIMARYRECORDID,
LOOKUP_ID = coalesce(@NEWCONSTITUENTLOOKUPID, ''),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @BATCHCONSTITUENTUPDATEID;
-- address the auto end date issues for consent based solicit codes
declare @SOLICITCODES xml = dbo.UFN_CONSTITUENTUPDATEBATCH_GETSOLICITCODES_TOITEMLISTXML(@BATCHCONSTITUENTUPDATEID);
exec USP_CONSTITUENTUPDATEBATCH_ADJUSTSOLICITCODEDATERANGES @PRIMARYRECORDID, @SOLICITCODES, @CHANGEAGENTID;
-- Defaulting DATEFROM/DATETO if possible for constituency
declare @ALLCONSTITUENCY xml = dbo.UFN_CONSTITUENTUPDATEBATCH_GETCONSTITUENCIES_TOITEMLISTXML(@BATCHCONSTITUENTUPDATEID);
if @ALLCONSTITUENCY is not null
begin
exec USP_CONSTITUENTUPDATEBATCH_ADJUSTCONSTITUENCYDATERANGE @BATCHCONSTITUENTUPDATEID, @PRIMARYRECORDID, @ALLCONSTITUENCY, @CHANGEAGENTID;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;