USP_DATAFORMTEMPLATE_ADD_BATCHCOAUPDATECOMMIT
The save procedure used by the add dataform template "AddressFinder Batch Commit Add Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@VALIDATEONLY | bit | IN | Validate only |
@BATCHNUMBER | nvarchar(100) | IN | Batch number |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@COAUPDATEID | uniqueidentifier | IN | AddressFinder ID |
@ADDRESSID | uniqueidentifier | IN | Address ID |
@CONSTITUENTID | uniqueidentifier | IN | Constituent |
@ADDRESSBLOCK | nvarchar(150) | IN | Address |
@CITY | nvarchar(50) | IN | City |
@STATEID | uniqueidentifier | IN | State |
@POSTCODE | nvarchar(12) | IN | Zip |
@STDADDRESSBLOCK | nvarchar(150) | IN | Standardized address |
@STDCITY | nvarchar(50) | IN | Standardized city |
@STDSTATEID | uniqueidentifier | IN | Standardized state |
@STDPOSTCODE | nvarchar(12) | IN | Standardized ZIP |
@STDDPC | nvarchar(8) | IN | Standardized DPC |
@STDCART | nvarchar(10) | IN | Standardized CART |
@STDLOT | nvarchar(5) | IN | Standardized LOT |
@COAADDRESSBLOCK | nvarchar(150) | IN | Change of address |
@COACITY | nvarchar(50) | IN | Change of address city |
@COASTATEID | uniqueidentifier | IN | Change of address state |
@COAPOSTCODE | nvarchar(12) | IN | Change of address ZIP |
@COADPC | nvarchar(8) | IN | Change of address DPC |
@COACART | nvarchar(10) | IN | Change of address CART |
@COALOT | nvarchar(5) | IN | Change of address LOT |
@NCOARETURNCODE | tinyint | IN | NCOA return code |
@NCOAFOOTNOTECODE | tinyint | IN | NCOA footnote |
@NCOADPVFOOTNOTECODE | tinyint | IN | NCOA DPV footnote |
@NCOAMOVEDATE | UDT_FUZZYDATE | IN | NCOA move date |
@NCOAMAILGRADECODE | tinyint | IN | NCOA mail grade |
@NCOADMASUPPRESSION | bit | IN | NCOA DMA suppression |
@MOVETYPECODE | int | IN | Move type |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_BATCHCOAUPDATECOMMIT
(
@ID uniqueidentifier = null output,
@VALIDATEONLY bit = 0,
@BATCHNUMBER nvarchar(100),
@CHANGEAGENTID uniqueidentifier,
@COAUPDATEID uniqueidentifier,
@ADDRESSID uniqueidentifier = null,
@CONSTITUENTID uniqueidentifier = null,
@ADDRESSBLOCK nvarchar(150) = '',
@CITY nvarchar(50) = '',
@STATEID uniqueidentifier = null,
@POSTCODE nvarchar(12) = '',
@STDADDRESSBLOCK nvarchar(150) = '',
@STDCITY nvarchar(50) = '',
@STDSTATEID uniqueidentifier = null,
@STDPOSTCODE nvarchar(12) = '',
@STDDPC nvarchar(8) = '',
@STDCART nvarchar(10) = '',
@STDLOT nvarchar(5) = '',
@COAADDRESSBLOCK nvarchar(150) = '',
@COACITY nvarchar(50) = '',
@COASTATEID uniqueidentifier = null,
@COAPOSTCODE nvarchar(12) = '',
@COADPC nvarchar(8) = '',
@COACART nvarchar(10) = '',
@COALOT nvarchar(5) = '',
@NCOARETURNCODE tinyint = 0,
@NCOAFOOTNOTECODE tinyint = 0,
@NCOADPVFOOTNOTECODE tinyint = 0,
@NCOAMOVEDATE UDT_FUZZYDATE = null,
@NCOAMAILGRADECODE tinyint = 0,
@NCOADMASUPPRESSION bit = 0,
@MOVETYPECODE int = 0
)
as
set nocount on;
exec dbo.[USP_SKIPSEARCHCONSTITUENTUPDATES];--skip the triggers while committing
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
if @CHANGEAGENTID is null
exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;
set @MOVETYPECODE = isnull(@MOVETYPECODE, 0);
-- Get data tune-up settings and date last run
declare @UPDATEADDRESSCODE tinyint;
declare @SAVEFORMERADDRESS bit;
declare @ADDRESSTYPECODEID uniqueidentifier;
declare @NCOALASTSUBMITDATE datetime;
declare @STEPCODE tinyint;
declare @SUBMITHOUSEHOLD bit;
declare @DONOTMAILREASONCODEID uniqueidentifier;
declare @INFOSOURCECODEID uniqueidentifier;
select
@UPDATEADDRESSCODE = COAUPDATE.UPDATEADDRESSCODE,
@SAVEFORMERADDRESS = COAUPDATE.SAVEFORMERADDRESS,
@ADDRESSTYPECODEID = COAUPDATE.ADDRESSTYPECODEID,
@NCOALASTSUBMITDATE = COAUPDATESUBMITPROCESS.DATELASTRUN,
@STEPCODE = COAUPDATE.STEPCODE,
@SUBMITHOUSEHOLD = COAUPDATESUBMITPROCESS.SUBMITHOUSEHOLD,
@DONOTMAILREASONCODEID =
case when @NCOAMAILGRADECODE = 4
then COAUPDATE.MAILGRADEFREASONCODEID
else case @NCOAFOOTNOTECODE
when 1 then null -- Depreciated - "Forwardable move" not applicable for do not mail reasons.
when 2 then COAUPDATE.FOOTNOTECODE2REASONCODEID
when 3 then COAUPDATE.FOOTNOTECODE3REASONCODEID
when 4 then COAUPDATE.FOOTNOTECODE4REASONCODEID
when 5 then null -- Depreciated - "Forwardable move, but secondary address cannot be verified" not applicable for do not mail reasons.
when 6 then COAUPDATE.FOOTNOTECODE6REASONCODEID
when 7 then COAUPDATE.FOOTNOTECODE7REASONCODEID
else null
end
end,
@INFOSOURCECODEID = COAUPDATE.INFOSOURCECODEID
from
dbo.[COAUPDATE]
inner join dbo.[COAUPDATESUBMITPROCESS] on COAUPDATE.ID = COAUPDATESUBMITPROCESS.COAUPDATEID
where
COAUPDATE.ID = @COAUPDATEID;
-- Update change of address process step code
if @STEPCODE <> 3
update dbo.[COAUPDATE]
set
STEPCODE = 3,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @COAUPDATEID;
-- processing flags
declare @INSERT bit;
declare @UPDATE bit;
if @ADDRESSID is not null
begin
set @ID = @ADDRESSID;
if @UPDATEADDRESSCODE = 0 -- update only addresses with forwardable moves (NCOA changes)
begin
if @NCOAFOOTNOTECODE in (1,5) -- forwardable move
begin
if @SAVEFORMERADDRESS = 1
set @INSERT = 1;
else
set @UPDATE = 1;
end
end
else if @UPDATEADDRESSCODE = 1 -- update all addresses (NCOA changes AND validations)
begin
if @NCOAFOOTNOTECODE in (1,5) and @SAVEFORMERADDRESS = 1
set @INSERT = 1;
else
set @UPDATE = 1;
end
else -- update only NCOA changes (@UPDATEADDRESSCODE = 2, good and bad footnotes)
begin
if @NCOAFOOTNOTECODE in (1,5) -- forwardable move footnotes
begin
if @SAVEFORMERADDRESS = 1
set @INSERT = 1;
else
set @UPDATE = 1;
end
else if @NCOAFOOTNOTECODE in (2,3,4,6,7) -- all other NCOA footnotes (all remaining footnotes except 0 which indicates no change)
set @UPDATE = 1;
-- This if branch intentionally left without an ending else. If additional footnotes are returned in the future, they will need accommodated.
end
-- Declare variables to be used
declare @COUNTRYID uniqueidentifier;
declare @OLDISPRIMARY bit; -- Use this only when updating the main address, not shared addresses.
declare @OLDSTATEID uniqueidentifier;
declare @OLDADDRESSBLOCK nvarchar(150);
declare @OLDCITY nvarchar(50);
declare @OLDPOSTCODE nvarchar(12);
declare @OLDADDRESSTYPECODEID uniqueidentifier;
declare @OLDDONOTMAIL bit; -- Use this only when updating the main address, not shared addresses.
declare @OLDNCOALASTSUBMITDATE datetime;
declare @MATCHING table(ID uniqueidentifier, CONSTITUENTID uniqueidentifier, ISPRIMARY bit, DONOTMAIL bit, ADDRESSTYPECODEID uniqueidentifier, RELATIONSHIPID uniqueidentifier);
declare @UPDATEPRIMARYMEMBER bit;
declare @PRIMARYMEMBERID uniqueidentifier;
declare @PRIMARYMEMBERADDRESSID uniqueidentifier;
declare @PRIMARYMEMEBEROLDISPRIMARY bit;
declare @PRIMARYMEMEBEROLDDONOTMAIL bit;
declare @TABLENAME nvarchar(128) = 'COAUPDATECREATE_' + replace(cast(@COAUPDATEID as nvarchar(36)), '-', '_'); -- This table contains data submitted in current execution
declare @TEMPSQL nvarchar(max);
declare @DELETESQL nvarchar(max);
if object_id('tempdb..#MATCHINGCONSTITUENTS') is null
begin
create table #MATCHINGCONSTITUENTS (ID uniqueidentifier);
end
select
@COUNTRYID = (select ID from dbo.COUNTRY where USEFORCOAUPDATE = 1),
@OLDISPRIMARY = [ADDRESS].ISPRIMARY,
@OLDADDRESSBLOCK = [ADDRESS].ADDRESSBLOCK,
@OLDCITY = [ADDRESS].CITY,
@OLDSTATEID = [ADDRESS].STATEID,
@OLDPOSTCODE = [ADDRESS].POSTCODE,
@OLDADDRESSTYPECODEID = [ADDRESS].ADDRESSTYPECODEID,
@OLDDONOTMAIL = [ADDRESS].DONOTMAIL,
@OLDNCOALASTSUBMITDATE = ADDRESSVALIDATIONUPDATE.NCOALASTSUBMITDATE
from dbo.[ADDRESS]
left outer join dbo.[ADDRESSVALIDATIONUPDATE] on [ADDRESS].ID = ADDRESSVALIDATIONUPDATE.ID
where
[ADDRESS].ID = @ADDRESSID;
-- Check for household record, grab primary member address if individual move
if exists (select ID from dbo.CONSTITUENT where ID = @CONSTITUENTID and ISGROUP = 1) and @MOVETYPECODE = 1
begin
select
@PRIMARYMEMBERADDRESSID = [ADDRESS].ID,
@PRIMARYMEMBERID = [ADDRESS].CONSTITUENTID,
@PRIMARYMEMEBEROLDISPRIMARY = [ADDRESS].ISPRIMARY,
@PRIMARYMEMEBEROLDDONOTMAIL = [ADDRESS].DONOTMAIL,
@UPDATEPRIMARYMEMBER = case when ADDRESSVALIDATIONUPDATE.NCOALASTSUBMITDATE <> @NCOALASTSUBMITDATE or ADDRESSVALIDATIONUPDATE.NCOALASTSUBMITDATE is null then 1 else 0 end
from dbo.[ADDRESS]
inner join dbo.CONSTITUENT on [ADDRESS].CONSTITUENTID = CONSTITUENT.ID
inner join dbo.GROUPMEMBER on CONSTITUENT.ID = GROUPMEMBER.MEMBERID and GROUPMEMBER.ISPRIMARY = 1
left join dbo.[ADDRESSVALIDATIONUPDATE] on ADDRESSVALIDATIONUPDATE.ID = [ADDRESS].ID
where
GROUPMEMBER.GROUPID = @CONSTITUENTID
and(
[ADDRESS].ADDRESSBLOCK = @OLDADDRESSBLOCK
and [ADDRESS].CITY = @OLDCITY
and ( ([ADDRESS].STATEID = @OLDSTATEID) or ([ADDRESS].STATEID is null and @OLDSTATEID is null) )
and [ADDRESS].POSTCODE = @OLDPOSTCODE
and ( ([ADDRESS].ADDRESSTYPECODEID = @OLDADDRESSTYPECODEID) or ([ADDRESS].ADDRESSTYPECODEID is null and @OLDADDRESSTYPECODEID is null) ))
end
-- make sure the record hasn't already been updated
if @OLDNCOALASTSUBMITDATE <> @NCOALASTSUBMITDATE or @OLDNCOALASTSUBMITDATE is null
begin
--determine matching addresses
if (@INSERT = 1 or @UPDATE = 1)
begin
if @MOVETYPECODE = 2 --Household
begin
insert into #MATCHINGCONSTITUENTS
(ID)
(select distinct
CONSTITUENTID
from dbo.UFN_ADDRESS_MATCHINGHOUSEHOLDRECORDS(@CONSTITUENTID, @COUNTRYID, @OLDSTATEID, @OLDADDRESSBLOCK, @OLDCITY, @OLDPOSTCODE, @OLDADDRESSTYPECODEID));
--Delete constituents who are already present in current process execution, since they will be processed on their own
if exists(select 1 from sysobjects where XTYPE = 'U' and NAME = @TABLENAME) -- Checking table exist (In some unit test we don't have this process table we directly call commit)
begin
set @DELETESQL = 'delete from #MATCHINGCONSTITUENTS where ID in (Select CONSTITUENTID from dbo.' + @TABLENAME + ');'
exec(@DELETESQL);
end
-- create table of matching addresses
insert into @MATCHING
(ID, CONSTITUENTID, ISPRIMARY, DONOTMAIL)
(select
[ADDRESS].ID,
[ADDRESS].CONSTITUENTID,
[ADDRESS].ISPRIMARY,
[ADDRESS].DONOTMAIL
from
dbo.[ADDRESS]
left join dbo.[ADDRESSVALIDATIONUPDATE] on ADDRESSVALIDATIONUPDATE.ID = [ADDRESS].ID
where
COUNTRYID = @COUNTRYID
and ADDRESSBLOCK = @OLDADDRESSBLOCK
and CITY = @OLDCITY
and ( (STATEID = @OLDSTATEID) or (STATEID is null and @OLDSTATEID is null) )
and POSTCODE = @OLDPOSTCODE
and ( (ADDRESSTYPECODEID = @OLDADDRESSTYPECODEID) or (ADDRESSTYPECODEID is null and @OLDADDRESSTYPECODEID is null) )
and CONSTITUENTID in (select ID from #MATCHINGCONSTITUENTS)
and (ADDRESSVALIDATIONUPDATE.NCOALASTSUBMITDATE is null or ADDRESSVALIDATIONUPDATE.NCOALASTSUBMITDATE <> @NCOALASTSUBMITDATE));
drop table #MATCHINGCONSTITUENTS;
-- some constituent addresses may have already been updated by this process
-- so only keep their records if they have at least one matching address
-- that has not been updated
end
if @MOVETYPECODE = 3 --Business
begin
insert into @MATCHING
(ID, CONSTITUENTID, ISPRIMARY, DONOTMAIL, ADDRESSTYPECODEID, RELATIONSHIPID)
(select
[ADDRESS].ID, [ADDRESS].CONSTITUENTID, [ADDRESS].ISPRIMARY, [ADDRESS].DONOTMAIL, [ADDRESS].ADDRESSTYPECODEID, [ADDRESS].RELATIONSHIPID
from
dbo.[ADDRESS]
inner join dbo.RELATIONSHIP on RELATIONSHIP.ID = [ADDRESS].RELATIONSHIPID
left join dbo.[ADDRESSVALIDATIONUPDATE] on ADDRESSVALIDATIONUPDATE.ID = [ADDRESS].ID
where
RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @CONSTITUENTID
and RELATIONSHIP.ISCONTACT = 1
and [ADDRESS].COUNTRYID = @COUNTRYID
and [ADDRESS].ADDRESSBLOCK = @OLDADDRESSBLOCK
and [ADDRESS].CITY = @OLDCITY
and ( ([ADDRESS].STATEID = @OLDSTATEID) or ([ADDRESS].STATEID is null and @OLDSTATEID is null) )
and [ADDRESS].POSTCODE = @OLDPOSTCODE
-- Don't check address type code for contacts
--and ( (ADDRESSTYPECODEID = @OLDADDRESSTYPECODEID) or (ADDRESSTYPECODEID is null and @OLDADDRESSTYPECODEID is null) )
and (ADDRESSVALIDATIONUPDATE.NCOALASTSUBMITDATE is null or ADDRESSVALIDATIONUPDATE.NCOALASTSUBMITDATE <> @NCOALASTSUBMITDATE));
end
end
if @INSERT = 1
begin
set @ID = newID();
-- matching addresses to be updated on household members or business contacts
if exists (select top 1 1 from @MATCHING)
begin
-- Clear all the primary flags for the constituent if the @MATCHING
-- address for that constituent is primary.
update dbo.[ADDRESS]
set
ISPRIMARY = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
CONSTITUENTID in (
select [MATCHING].CONSTITUENTID from @MATCHING as MATCHING
where [MATCHING].ISPRIMARY = 1
)
and ISPRIMARY = 1;
-- update the existing records
update dbo.[ADDRESS]
set
ADDRESSTYPECODEID = @ADDRESSTYPECODEID,
DONOTMAIL = 1,
DONOTMAILREASONCODEID = @DONOTMAILREASONCODEID,
HISTORICALENDDATE = coalesce(dbo.UFN_DATE_FROMFUZZYDATE(@NCOAMOVEDATE), @CURRENTDATE),
RELATIONSHIPID =
case
when @MOVETYPECODE = 3 --Business
then null
else RELATIONSHIPID
end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
exists (
select ID
from @MATCHING
where ID = [ADDRESS].ID
);
-- insert address validation update data where there are no records with the new number
if @MOVETYPECODE = 0 --Only insert/update records if this was not a move
begin
update dbo.[ADDRESSVALIDATIONUPDATE]
set
NCOALASTSUBMITDATE = @NCOALASTSUBMITDATE,
NCOARETURNCODE = @NCOARETURNCODE,
NCOAFOOTNOTECODE = @NCOAFOOTNOTECODE,
NCOADPVFOOTNOTECODE = @NCOADPVFOOTNOTECODE,
NCOAMOVEDATE = @NCOAMOVEDATE,
NCOADMASUPPRESSION = @NCOADMASUPPRESSION,
NCOAMAILGRADECODE = @NCOAMAILGRADECODE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
INFOSOURCECODEID = coalesce(ADDRESSVALIDATIONUPDATE.INFOSOURCECODEID, @INFOSOURCECODEID)
where
exists (
select ID
from @MATCHING
where ID = ADDRESSVALIDATIONUPDATE.ID
);
insert into dbo.[ADDRESSVALIDATIONUPDATE]
(ID, NCOALASTSUBMITDATE, NCOARETURNCODE, NCOAFOOTNOTECODE, NCOADPVFOOTNOTECODE, NCOAMOVEDATE, NCOADMASUPPRESSION, NCOAMAILGRADECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, INFOSOURCECODEID)
(select
ID, @NCOALASTSUBMITDATE, @NCOARETURNCODE, @NCOAFOOTNOTECODE, @NCOADPVFOOTNOTECODE, @NCOAMOVEDATE, @NCOADMASUPPRESSION, @NCOAMAILGRADECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @INFOSOURCECODEID
from dbo.[ADDRESS]
where
exists (
select ID
from @MATCHING MATCHING
where ID = [ADDRESS].ID
and ID not in (select ID from dbo.[ADDRESSVALIDATIONUPDATE])
));
end
-- Bug 451186 Aaron Crawford - This is now able to add address validation update information to any
-- addresses added to shared household constituents by first pairing new address ID's with a constituent.
-- Create table variable for Address and Constituent ID pairings
declare @ADDRESSESTOADD table(ID uniqueidentifier default newId(), CONSTITUENTID uniqueidentifier, ADDRESSID uniqueidentifier);
-- insert new address
if @MOVETYPECODE = 3 --Business
begin
-- Create new guid/constituent pairings for inserting new addresses
-- A business contact may have the same address linked to the same business more than once, all addresses should be updated
insert into @ADDRESSESTOADD
(CONSTITUENTID, ADDRESSID)
(select
[MATCHING].CONSTITUENTID, [MATCHING].ID
from @MATCHING MATCHING);
-- Insert new addresses using pairings from above
insert into dbo.[ADDRESS]
(ID, CONSTITUENTID, ADDRESSTYPECODEID, ADDRESSBLOCK, CITY, STATEID, POSTCODE, CART, DPC, LOT, COUNTRYID, ISPRIMARY, DONOTMAIL, RELATIONSHIPID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
(select
PAIRED.ID, [MATCHING].CONSTITUENTID, [MATCHING].ADDRESSTYPECODEID, @STDADDRESSBLOCK, @STDCITY, @STDSTATEID, @STDPOSTCODE, @STDCART, @STDDPC, @STDLOT, @COUNTRYID, [MATCHING].ISPRIMARY, [MATCHING].DONOTMAIL, [MATCHING].RELATIONSHIPID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from
@ADDRESSESTOADD PAIRED
left join @MATCHING MATCHING
on PAIRED.ADDRESSID = [MATCHING].ID);
-- Insert new footnotes to show validation info for the newly created addresses
insert into dbo.[ADDRESSVALIDATIONUPDATE]
(ID, NCOALASTSUBMITDATE, NCOARETURNCODE, NCOAFOOTNOTECODE, NCOADPVFOOTNOTECODE, NCOAMOVEDATE, NCOADMASUPPRESSION, NCOAMAILGRADECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, INFOSOURCECODEID)
(select
ID, @NCOALASTSUBMITDATE, @NCOARETURNCODE, @NCOAFOOTNOTECODE, @NCOADPVFOOTNOTECODE, @NCOAMOVEDATE, @NCOADMASUPPRESSION, @NCOAMAILGRADECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @INFOSOURCECODEID
from @ADDRESSESTOADD);
end
else
begin
-- Create new guid/constituent pairings for inserting new addresses
-- Using "distinct" since non-business contacts shouldn't have the same address linked more than once
insert into @ADDRESSESTOADD
(CONSTITUENTID, ADDRESSID)
(select distinct
[MATCHING].CONSTITUENTID, [MATCHING].ID
from
@MATCHING MATCHING
where [MATCHING].ID in
(select top(1) TIEBREAKER.ID
from @MATCHING TIEBREAKER
where TIEBREAKER.CONSTITUENTID = [MATCHING].CONSTITUENTID
order by ISPRIMARY desc, DONOTMAIL desc)
); -- The tiebreaker here is used to pick one of multiple addresses that will be used for ISPRIMARY and DONOTMAIL attributes, giving precedence in that order.
-- Insert new addresses using pairings from above
insert into dbo.[ADDRESS]
(ID, CONSTITUENTID, ADDRESSTYPECODEID, ADDRESSBLOCK, CITY, STATEID, POSTCODE, CART, DPC, LOT, COUNTRYID, ISPRIMARY, DONOTMAIL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
(select
PAIRED.ID, [MATCHING].CONSTITUENTID, @OLDADDRESSTYPECODEID, @STDADDRESSBLOCK, @STDCITY, @STDSTATEID, @STDPOSTCODE, @STDCART, @STDDPC, @STDLOT, @COUNTRYID, [MATCHING].ISPRIMARY, [MATCHING].DONOTMAIL, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from
@ADDRESSESTOADD PAIRED
inner join @MATCHING MATCHING
on PAIRED.ADDRESSID = [MATCHING].ID);
-- Insert new footnotes to show validation info for the newly created addresses
insert into dbo.[ADDRESSVALIDATIONUPDATE]
(ID, NCOALASTSUBMITDATE, NCOARETURNCODE, NCOAFOOTNOTECODE, NCOADPVFOOTNOTECODE, NCOAMOVEDATE, NCOADMASUPPRESSION, NCOAMAILGRADECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, INFOSOURCECODEID)
(select
ID, @NCOALASTSUBMITDATE, @NCOARETURNCODE, @NCOAFOOTNOTECODE, @NCOADPVFOOTNOTECODE, @NCOAMOVEDATE, @NCOADMASUPPRESSION, @NCOAMAILGRADECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @INFOSOURCECODEID
from @ADDRESSESTOADD);
end
end
-- update existing address and remove primary indicator
update dbo.[ADDRESS]
set
ADDRESSTYPECODEID = @ADDRESSTYPECODEID,
DONOTMAIL = 1,
DONOTMAILREASONCODEID = @DONOTMAILREASONCODEID,
ISPRIMARY = 0,
HISTORICALENDDATE = coalesce(dbo.UFN_DATE_FROMFUZZYDATE(@NCOAMOVEDATE), @CURRENTDATE),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @ADDRESSID;
if exists (select ID from dbo.[ADDRESSVALIDATIONUPDATE] where ID = @ADDRESSID) and @MOVETYPECODE = 0
update dbo.[ADDRESSVALIDATIONUPDATE]
set
NCOALASTSUBMITDATE = @NCOALASTSUBMITDATE,
NCOARETURNCODE = @NCOARETURNCODE,
NCOAFOOTNOTECODE = @NCOAFOOTNOTECODE,
NCOADPVFOOTNOTECODE = @NCOADPVFOOTNOTECODE,
NCOAMOVEDATE = @NCOAMOVEDATE,
NCOADMASUPPRESSION = @NCOADMASUPPRESSION,
NCOAMAILGRADECODE = @NCOAMAILGRADECODE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
INFOSOURCECODEID = coalesce(ADDRESSVALIDATIONUPDATE.INFOSOURCECODEID, @INFOSOURCECODEID)
where
ID = @ADDRESSID;
else if @MOVETYPECODE = 0
insert into dbo.[ADDRESSVALIDATIONUPDATE]
(ID, NCOALASTSUBMITDATE, NCOARETURNCODE, NCOAFOOTNOTECODE, NCOADPVFOOTNOTECODE, NCOAMOVEDATE, NCOADMASUPPRESSION, NCOAMAILGRADECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, INFOSOURCECODEID)
values
(@ADDRESSID, @NCOALASTSUBMITDATE, @NCOARETURNCODE, @NCOAFOOTNOTECODE, @NCOADPVFOOTNOTECODE, @NCOAMOVEDATE, @NCOADMASUPPRESSION, @NCOAMAILGRADECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @INFOSOURCECODEID);
-- insert new address for the main constituent
insert into dbo.[ADDRESS]
(ID, CONSTITUENTID, ADDRESSTYPECODEID, ADDRESSBLOCK, CITY, STATEID, POSTCODE, CART, DPC, LOT, COUNTRYID, ISPRIMARY, DONOTMAIL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values
(@ID, @CONSTITUENTID, @OLDADDRESSTYPECODEID, @STDADDRESSBLOCK, @STDCITY, @STDSTATEID, @STDPOSTCODE, @STDCART, @STDDPC, @STDLOT, @COUNTRYID, @OLDISPRIMARY, @OLDDONOTMAIL, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
-- insert new address validation update data for new address
insert into dbo.[ADDRESSVALIDATIONUPDATE]
(ID, NCOALASTSUBMITDATE, NCOARETURNCODE, NCOAFOOTNOTECODE, NCOADPVFOOTNOTECODE, NCOAMOVEDATE, NCOADMASUPPRESSION, NCOAMAILGRADECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, INFOSOURCECODEID)
values
(@ID, @NCOALASTSUBMITDATE, @NCOARETURNCODE, @NCOAFOOTNOTECODE, @NCOADPVFOOTNOTECODE, @NCOAMOVEDATE, @NCOADMASUPPRESSION, @NCOAMAILGRADECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @INFOSOURCECODEID);
-- If primary member is already present in current process execution then we don't need to process it again so flipping the bit
if @UPDATEPRIMARYMEMBER = 1
begin
--Fetch CONSTITUENTS that are present in current process (i.e. submitted to Saboten)
if exists(select 1 from sysobjects where XTYPE = 'U' and NAME = @TABLENAME) -- Checking table exist (In some unit test we don't have this process table we directly call commit)
begin
SET @TEMPSQL = 'If exists(select CONSTITUENTID from dbo.' + @TABLENAME
SET @TEMPSQL = @TEMPSQL + ' WHERE CONSTITUENTID = ''' + CONVERT(nvarchar(36),@PRIMARYMEMBERID) + ''')'
SET @TEMPSQL = @TEMPSQL + ' SET @UPDATEPRIMARYMEMBER = 0;'
exec sp_executesql @TEMPSQL, N'@TABLENAME nvarchar(128), @PRIMARYMEMBERID uniqueidentifier, @UPDATEPRIMARYMEMBER bit OUTPUT',@TABLENAME , @PRIMARYMEMBERID , @UPDATEPRIMARYMEMBER OUTPUT;
end
end
-- If updating a household address and the move type is "Individual", update the primary member as well
if @UPDATEPRIMARYMEMBER = 1
begin
-- update existing address and remove primary indicator
update dbo.[ADDRESS]
set
ADDRESSTYPECODEID = @ADDRESSTYPECODEID,
DONOTMAIL = 1,
DONOTMAILREASONCODEID = @DONOTMAILREASONCODEID,
ISPRIMARY = 0,
HISTORICALENDDATE = coalesce(dbo.UFN_DATE_FROMFUZZYDATE(@NCOAMOVEDATE), @CURRENTDATE),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @PRIMARYMEMBERADDRESSID;
if exists (select ID from dbo.[ADDRESSVALIDATIONUPDATE] where ID = @PRIMARYMEMBERADDRESSID) and @MOVETYPECODE = 0
update dbo.[ADDRESSVALIDATIONUPDATE]
set
NCOALASTSUBMITDATE = @NCOALASTSUBMITDATE,
NCOARETURNCODE = @NCOARETURNCODE,
NCOAFOOTNOTECODE = @NCOAFOOTNOTECODE,
NCOADPVFOOTNOTECODE = @NCOADPVFOOTNOTECODE,
NCOAMOVEDATE = @NCOAMOVEDATE,
NCOADMASUPPRESSION = @NCOADMASUPPRESSION,
NCOAMAILGRADECODE = @NCOAMAILGRADECODE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
INFOSOURCECODEID = coalesce(ADDRESSVALIDATIONUPDATE.INFOSOURCECODEID, @INFOSOURCECODEID)
where
ID = @PRIMARYMEMBERADDRESSID;
else if @MOVETYPECODE = 0
insert into dbo.[ADDRESSVALIDATIONUPDATE]
(ID, NCOALASTSUBMITDATE, NCOARETURNCODE, NCOAFOOTNOTECODE, NCOADPVFOOTNOTECODE, NCOAMOVEDATE, NCOADMASUPPRESSION, NCOAMAILGRADECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, INFOSOURCECODEID)
values
(@PRIMARYMEMBERADDRESSID, @NCOALASTSUBMITDATE, @NCOARETURNCODE, @NCOAFOOTNOTECODE, @NCOADPVFOOTNOTECODE, @NCOAMOVEDATE, @NCOADMASUPPRESSION, @NCOAMAILGRADECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @INFOSOURCECODEID);
declare @PRIMARYMEMBERNEWADDRESSID uniqueidentifier = newid();
-- insert new address
insert into dbo.[ADDRESS]
(ID, CONSTITUENTID, ADDRESSTYPECODEID, ADDRESSBLOCK, CITY, STATEID, POSTCODE, CART, DPC, LOT, COUNTRYID, ISPRIMARY, DONOTMAIL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values
(@PRIMARYMEMBERNEWADDRESSID, @PRIMARYMEMBERID, @OLDADDRESSTYPECODEID, @STDADDRESSBLOCK, @STDCITY, @STDSTATEID, @STDPOSTCODE, @STDCART, @STDDPC, @STDLOT, @COUNTRYID, @PRIMARYMEMEBEROLDISPRIMARY, @PRIMARYMEMEBEROLDDONOTMAIL, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
-- insert new address validation update data for new address
insert into dbo.[ADDRESSVALIDATIONUPDATE]
(ID, NCOALASTSUBMITDATE, NCOARETURNCODE, NCOAFOOTNOTECODE, NCOADPVFOOTNOTECODE, NCOAMOVEDATE, NCOADMASUPPRESSION, NCOAMAILGRADECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, INFOSOURCECODEID)
values
(@PRIMARYMEMBERNEWADDRESSID, @NCOALASTSUBMITDATE, @NCOARETURNCODE, @NCOAFOOTNOTECODE, @NCOADPVFOOTNOTECODE, @NCOAMOVEDATE, @NCOADMASUPPRESSION, @NCOAMAILGRADECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @INFOSOURCECODEID);
end
end
if @UPDATE = 1
begin
-- matching addresses to be updated on household members or business contacts
if exists (select top 1 1 from @MATCHING)
begin
-- Clear all the primary flags for the constituent if the @MATCHING
-- address for that constituent is primary. (Don't clear the primary
-- flag for the primary address; this saves us an unnecessary update.)
update dbo.[ADDRESS]
set
ISPRIMARY = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
CONSTITUENTID in (
select M.CONSTITUENTID from @MATCHING M
where M.ISPRIMARY = 1
)
and ID not in (
select M.ID from @MATCHING M
where M.ISPRIMARY = 1
)
and ISPRIMARY = 1;
-- update the existing records
update
ADDRESS
set
[ADDRESS].ISPRIMARY = [MATCHING].ISPRIMARY,
[ADDRESS].ADDRESSBLOCK = @STDADDRESSBLOCK,
[ADDRESS].CITY = @STDCITY,
[ADDRESS].STATEID = @STDSTATEID,
[ADDRESS].POSTCODE = @STDPOSTCODE,
[ADDRESS].CART = @STDCART,
[ADDRESS].DPC = @STDDPC,
[ADDRESS].LOT = @STDLOT,
[ADDRESS].DONOTMAIL = case
when [ADDRESS].DONOTMAIL = 1 then 1
when @NCOAFOOTNOTECODE in (0, 1, 5, 7) and (@NCOAMAILGRADECODE is null or @NCOAMAILGRADECODE <> 4) then 0
else 1
end,
[ADDRESS].DONOTMAILREASONCODEID = case
when [ADDRESS].DONOTMAIL = 1 then [ADDRESS].DONOTMAILREASONCODEID
when @NCOAFOOTNOTECODE in (0, 1, 5, 7) and (@NCOAMAILGRADECODE is null or @NCOAMAILGRADECODE <> 4) then null
else @DONOTMAILREASONCODEID
end,
[ADDRESS].HISTORICALENDDATE = case
when [MATCHING].ISPRIMARY = 1 then null
else [ADDRESS].HISTORICALENDDATE end,
[ADDRESS].CHANGEDBYID = @CHANGEAGENTID,
[ADDRESS].DATECHANGED = @CURRENTDATE
from
dbo.[ADDRESS]
inner join
@MATCHING as MATCHING on [MATCHING].ID = [ADDRESS].ID;
update dbo.[ADDRESSVALIDATIONUPDATE]
set
NCOALASTSUBMITDATE = @NCOALASTSUBMITDATE,
NCOARETURNCODE = @NCOARETURNCODE,
NCOAFOOTNOTECODE = @NCOAFOOTNOTECODE,
NCOADPVFOOTNOTECODE = @NCOADPVFOOTNOTECODE,
NCOAMOVEDATE = @NCOAMOVEDATE,
NCOADMASUPPRESSION = @NCOADMASUPPRESSION,
NCOAMAILGRADECODE = @NCOAMAILGRADECODE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
INFOSOURCECODEID = coalesce(ADDRESSVALIDATIONUPDATE.INFOSOURCECODEID, @INFOSOURCECODEID)
where
exists (
select ID
from @MATCHING
where ID = ADDRESSVALIDATIONUPDATE.ID
);
insert into dbo.[ADDRESSVALIDATIONUPDATE]
(ID, NCOALASTSUBMITDATE, NCOARETURNCODE, NCOAFOOTNOTECODE, NCOADPVFOOTNOTECODE, NCOAMOVEDATE, NCOADMASUPPRESSION, NCOAMAILGRADECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, INFOSOURCECODEID)
select
ID, @NCOALASTSUBMITDATE, @NCOARETURNCODE, @NCOAFOOTNOTECODE, @NCOADPVFOOTNOTECODE, @NCOAMOVEDATE, @NCOADMASUPPRESSION, @NCOAMAILGRADECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @INFOSOURCECODEID
from dbo.[ADDRESS]
where
exists (
select ID
from @MATCHING
where ID = [ADDRESS].ID
and ID not in (select ID from dbo.[ADDRESSVALIDATIONUPDATE])
);
end
update dbo.[ADDRESS]
set
ADDRESSBLOCK = @STDADDRESSBLOCK,
CITY = @STDCITY,
STATEID = @STDSTATEID,
POSTCODE = @STDPOSTCODE,
CART = @STDCART,
DPC = @STDDPC,
LOT = @STDLOT,
DONOTMAIL = case
when DONOTMAIL = 1 then 1
when @NCOAFOOTNOTECODE in (0, 1, 5, 7) and (@NCOAMAILGRADECODE is null or @NCOAMAILGRADECODE <> 4) then 0
else 1
end,
DONOTMAILREASONCODEID = case
when DONOTMAIL = 1 then DONOTMAILREASONCODEID
when @NCOAFOOTNOTECODE in (0, 1, 5, 7) and (@NCOAMAILGRADECODE is null or @NCOAMAILGRADECODE <> 4) then null
else @DONOTMAILREASONCODEID
end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @ADDRESSID;
if exists (select ID from dbo.[ADDRESSVALIDATIONUPDATE] where ID = @ADDRESSID)
update dbo.[ADDRESSVALIDATIONUPDATE]
set
NCOALASTSUBMITDATE = @NCOALASTSUBMITDATE,
NCOARETURNCODE = @NCOARETURNCODE,
NCOAFOOTNOTECODE = @NCOAFOOTNOTECODE,
NCOADPVFOOTNOTECODE = @NCOADPVFOOTNOTECODE,
NCOAMOVEDATE = @NCOAMOVEDATE,
NCOADMASUPPRESSION = @NCOADMASUPPRESSION,
NCOAMAILGRADECODE = @NCOAMAILGRADECODE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
INFOSOURCECODEID = coalesce(ADDRESSVALIDATIONUPDATE.INFOSOURCECODEID, @INFOSOURCECODEID)
where
ID = @ADDRESSID;
else
insert into dbo.[ADDRESSVALIDATIONUPDATE]
(ID, NCOALASTSUBMITDATE, NCOARETURNCODE, NCOAFOOTNOTECODE, NCOADPVFOOTNOTECODE, NCOAMOVEDATE, NCOADMASUPPRESSION, NCOAMAILGRADECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, INFOSOURCECODEID)
values
(@ADDRESSID, @NCOALASTSUBMITDATE, @NCOARETURNCODE, @NCOAFOOTNOTECODE, @NCOADPVFOOTNOTECODE, @NCOAMOVEDATE, @NCOADMASUPPRESSION, @NCOAMAILGRADECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @INFOSOURCECODEID);
-- If updating a household address and the move type is "Individual", update the primary member as well
if @UPDATEPRIMARYMEMBER = 1
begin
update dbo.[ADDRESS]
set
ADDRESSBLOCK = @STDADDRESSBLOCK,
CITY = @STDCITY,
STATEID = @STDSTATEID,
POSTCODE = @STDPOSTCODE,
CART = @STDCART,
DPC = @STDDPC,
LOT = @STDLOT,
DONOTMAIL = case
when DONOTMAIL = 1 then 1
when @NCOAFOOTNOTECODE in (0, 1, 5, 7) and (@NCOAMAILGRADECODE is null or @NCOAMAILGRADECODE <> 4) then 0
else 1
end,
DONOTMAILREASONCODEID = case
when DONOTMAIL = 1 then DONOTMAILREASONCODEID
when @NCOAFOOTNOTECODE in (0, 1, 5, 7) and (@NCOAMAILGRADECODE is null or @NCOAMAILGRADECODE <> 4) then null
else @DONOTMAILREASONCODEID
end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @PRIMARYMEMBERADDRESSID;
if exists (select ID from dbo.[ADDRESSVALIDATIONUPDATE] where ID = @PRIMARYMEMBERADDRESSID)
update dbo.[ADDRESSVALIDATIONUPDATE]
set
NCOALASTSUBMITDATE = @NCOALASTSUBMITDATE,
NCOARETURNCODE = @NCOARETURNCODE,
NCOAFOOTNOTECODE = @NCOAFOOTNOTECODE,
NCOADPVFOOTNOTECODE = @NCOADPVFOOTNOTECODE,
NCOAMOVEDATE = @NCOAMOVEDATE,
NCOADMASUPPRESSION = @NCOADMASUPPRESSION,
NCOAMAILGRADECODE = @NCOAMAILGRADECODE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
INFOSOURCECODEID = coalesce(ADDRESSVALIDATIONUPDATE.INFOSOURCECODEID, @INFOSOURCECODEID)
where
ID = @PRIMARYMEMBERADDRESSID;
else
insert into dbo.[ADDRESSVALIDATIONUPDATE]
(ID, NCOALASTSUBMITDATE, NCOARETURNCODE, NCOAFOOTNOTECODE, NCOADPVFOOTNOTECODE, NCOAMOVEDATE, NCOADMASUPPRESSION, NCOAMAILGRADECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, INFOSOURCECODEID)
values
(@PRIMARYMEMBERADDRESSID, @NCOALASTSUBMITDATE, @NCOARETURNCODE, @NCOAFOOTNOTECODE, @NCOADPVFOOTNOTECODE, @NCOAMOVEDATE, @NCOADMASUPPRESSION, @NCOAMAILGRADECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @INFOSOURCECODEID);
end
end
end
end
return 0;