USP_ACQUISITIONLIST_ADDMEMBER
This procedure adds an acquisition list member as a new constituent record.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@FINDERNUMBER | bigint | IN |
Definition
Copy
CREATE procedure dbo.[USP_ACQUISITIONLIST_ADDMEMBER]
(
@ID uniqueidentifier output,
@CHANGEAGENTID uniqueidentifier = null,
@FINDERNUMBER bigint
)
as
set nocount on;
declare @SEGMENTATIONID uniqueidentifier;
declare @SEGMENTID uniqueidentifier;
declare @TESTSEGMENTID uniqueidentifier;
declare @LISTMEMBERID uniqueidentifier;
declare @CONSTITUENTID uniqueidentifier;
declare @RECORDSOURCEID uniqueidentifier;
declare @SOURCECODE nvarchar(50);
declare @APPEALID uniqueidentifier;
declare @DATESENT datetime;
declare @COMMENTS nvarchar(50);
declare @PACKAGEID uniqueidentifier;
declare @CHECKDIGIT bit;
if @CHANGEAGENTID is null
exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
select
@SEGMENTATIONID = dbo.[UFN_MKTSEGMENTATIONFINDERNUMBER_GETSEGMENTATION](@FINDERNUMBER),
@CHECKDIGIT = dbo.[UFN_MKTFINDERNUMBER_VALIDATE_MOD10](@FINDERNUMBER);
if @CHECKDIGIT = 0
begin
raiserror('Finder number failed check digit.', 13, 1);
return 1;
end
if @SEGMENTATIONID is null
begin
raiserror('Invalid finder number.', 13, 1);
return 1;
end
-- this is the record source ID for the standard BBEC/DM query view.
set @RECORDSOURCEID = dbo.[UFN_MKTRECORDSOURCE_GETFIRSTBBECRECORDSOURCEID]();
-- this table structure must match the one defined in the Marketing.Catalog\Segmentation\FinderNumber\FinderNumberLookup.DataList.xml
declare @CONSTITDATA as table(
[ID] nvarchar(36),
[CONSTITUENTID] nvarchar(36),
[FULLNAME] nvarchar(255),
[FIRSTNAME] nvarchar(255),
[MIDDLENAME] nvarchar(255),
[LASTNAME] nvarchar(255),
[TITLE] nvarchar(255),
[SUFFIX] nvarchar(255),
[COUNTRY] nvarchar(255),
[ADDRESSLINE1] nvarchar(255),
[ADDRESSLINE2] nvarchar(255),
[ADDRESSLINE3] nvarchar(255),
[ADDRESSLINE4] nvarchar(255),
[ADDRESSLINE5] nvarchar(255),
[CITY] nvarchar(255),
[STATE] nvarchar(255),
[POSTCODE] nvarchar(255),
[CART] nvarchar(255),
[DPC] nvarchar(255),
[LOT] nvarchar(255),
[PHONENUMBER] nvarchar(255),
[EMAILADDRESS] nvarchar(255),
[MAILINGIDINTEGER] int,
[MAILDATE] datetime,
[SOURCECODE] nvarchar(50),
[APPEALSYSTEMID] nvarchar(36),
[APPEALID] nvarchar(100),
[APPEALDESCRIPTION] nvarchar(100),
[PACKAGECODE] nvarchar(10),
[PACKAGENAME] nvarchar(100),
[PACKAGEDESCRIPTION] nvarchar(255),
[SEGMENTID] uniqueidentifier,
[SEGMENTNAME] nvarchar(203),
[LISTNAME] nvarchar(100),
[TITLE2] nvarchar(255),
[SUFFIX2] nvarchar(255)
);
insert into @CONSTITDATA
exec dbo.[USP_DATALIST_MKTFINDERNUMBERLOOKUP] @FINDERNUMBER, @RECORDSOURCEID;
-- if the [CONSTITUENTID] field is blank, but we returned a row, then this
-- person in a member of a List and needs to be added as a constituent. If
-- no rows are returned, then we didn't find anyone with a matching finder number
if exists(select * from @CONSTITDATA)
begin
-- [CONSTITUENTID] will be the BBEC Constituent.ID if this is a person from the house file,
-- or a list member who has become a donor. If the [CONSTITUENTID] field is empty (null or '') then
-- we want to create a new constituent using the [ID] that's returned by USP_DATALIST_MKTFINDERNUMBERLOOKUP.
-- That ID maps to the MKTLIST_<guid> or MKTFINDERFILE_<guid> [ID] field.
declare @TMPCONSTITUENTID nvarchar(36);
select top(1)
@LISTMEMBERID = [ID],
@TMPCONSTITUENTID = [CONSTITUENTID]
from @CONSTITDATA;
if @TMPCONSTITUENTID is null
set @CONSTITUENTID = @LISTMEMBERID;
else if len(@TMPCONSTITUENTID) < 36
set @CONSTITUENTID = @LISTMEMBERID;
else
set @CONSTITUENTID = @TMPCONSTITUENTID;
end
else
begin
raiserror('No member with this finder number was found in an acquisition list.', 13, 1);
return 1;
end
-- if the acquisition list member is not already in the CONSTITUENT table, add the member to the CONSTITUENT table
if not exists(select * from dbo.[CONSTITUENT] where [ID] = @CONSTITUENTID)
begin
-- insert constituent information
begin try
insert into dbo.[CONSTITUENT] ([ID], [FIRSTNAME], [MIDDLENAME], [KEYNAME], [TITLECODEID], [SUFFIXCODEID], [TITLE2CODEID], [SUFFIX2CODEID], [DATEADDED], [DATECHANGED], [ADDEDBYID], [CHANGEDBYID])
select
@CONSTITUENTID,
isnull([C].[FIRSTNAME], ''),
isnull([C].[MIDDLENAME], ''),
isnull([C].[LASTNAME], ''),
(select [ID] from dbo.[TITLECODE] where [DESCRIPTION] = [C].[TITLE]),
(select [ID] from dbo.[SUFFIXCODE] where [DESCRIPTION] = [C].[SUFFIX]),
(select [ID] from dbo.[TITLECODE] where [DESCRIPTION] = [C].[TITLE2]),
(select [ID] from dbo.[SUFFIXCODE] where [DESCRIPTION] = [C].[SUFFIX2]),
@CURRENTDATE,
@CURRENTDATE,
@CHANGEAGENTID,
@CHANGEAGENTID
from @CONSTITDATA as [C];
end try
begin catch
raiserror('Could not insert member into Constituent table.', 13, 1);
return 1;
end catch
/* Insert default sites from the temp constituent site table */
insert into dbo.[CONSTITUENTSITE]
(
[CONSTITUENTID],
[SITEID],
[DATEADDED],
[DATECHANGED],
[ADDEDBYID],
[CHANGEDBYID]
)
Select
@CONSTITUENTID,
[SITEID],
@CURRENTDATE,
@CURRENTDATE,
@CHANGEAGENTID,
@CHANGEAGENTID
from dbo.[MKTFINDERNUMBERCONSTITUENTSITE]
where [MKTFINDERNUMBERCONSTITUENTSITE].[MKTFINDERNUMBERCONSTITUENTID] = @CONSTITUENTID;
--remove from MKTFINDERNUMBERCONSTITUENT table
delete dbo.[MKTFINDERNUMBERCONSTITUENT] where [ID] = @CONSTITUENTID;
-- insert constituent name format defaults
begin try
insert into dbo.[NAMEFORMAT]
([CONSTITUENTID],
[NAMEFORMATTYPECODEID],
[NAMEFORMATFUNCTIONID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED],
[PRIMARYADDRESSEE],
[PRIMARYSALUTATION])
select
@CONSTITUENTID,
[NFD].[NAMEFORMATTYPECODEID],
[NFD].[NAMEFORMATFUNCTIONID],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
[NFD].[PRIMARYADDRESSEE],
[NFD].[PRIMARYSALUTATION]
from dbo.[NAMEFORMATDEFAULT] as [NFD]
where [NFD].[APPLYTOCODE] = 0;
end try
begin catch
raiserror('Could not insert into Name Formats table.', 13, 1);
return 1;
end catch
-- Check to make sure state is valid for the given country.
declare @COUNTRYID uniqueidentifier;
declare @STATEID uniqueidentifier;
select
@STATEID = case when (select count(1) from dbo.[STATE] where [ABBREVIATION] = [CONSTITDATA].[STATE] or [DESCRIPTION] = [CONSTITDATA].[STATE]) <= 1 then
(select top 1 [ID] from dbo.[STATE] where [ABBREVIATION] = [CONSTITDATA].[STATE] or [DESCRIPTION] = [CONSTITDATA].[STATE])
else
(select top 1 [ID] from dbo.[STATE] where ([ABBREVIATION] = [CONSTITDATA].[STATE] or [DESCRIPTION] = [CONSTITDATA].[STATE])
and ([COUNTRYID] = (select isnull((select top 1 [ID] from dbo.[COUNTRY]
where [ABBREVIATION] = [CONSTITDATA].[COUNTRY]
or [DESCRIPTION] = [CONSTITDATA].[COUNTRY]), dbo.[UFN_COUNTRY_GETDEFAULT]())))) end,
@COUNTRYID = (select isnull((select top(1) [ID] from dbo.[COUNTRY] where [ABBREVIATION] = [CONSTITDATA].[COUNTRY] or [DESCRIPTION] = [CONSTITDATA].[COUNTRY]), dbo.[UFN_COUNTRY_GETDEFAULT]()))
from @CONSTITDATA as [CONSTITDATA];
if dbo.[UFN_STATE_GETCOUNTRY](@STATEID, @COUNTRYID) != @COUNTRYID
raiserror('The state is not valid for the given country.', 13, 1);
-- insert address information
begin try
insert into dbo.[ADDRESS] (
[ID],
[CONSTITUENTID],
[ISPRIMARY],
[ADDRESSBLOCK],
[CITY],
[POSTCODE],
[COUNTRYID],
[STATEID],
[CART],
[DPC],
[LOT],
[DATEADDED],
[DATECHANGED],
[ADDEDBYID],
[CHANGEDBYID])
select
newid(),
@CONSTITUENTID,
1,
-- address block
-- BTR CR301069-052008 5/21/2008
-- was putting a space between line 1 and line 2, rather than a CRLF
isnull(dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES]([C].[ADDRESSLINE1],
dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES]([C].[ADDRESSLINE2],
dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES]([C].[ADDRESSLINE3],
dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES]([C].[ADDRESSLINE4], [C].[ADDRESSLINE5])))), ''),
isnull([C].[CITY], ''),
isnull([C].[POSTCODE], ''),
@COUNTRYID,
@STATEID,
isnull([C].[CART], ''),
isnull([C].[DPC], ''),
isnull([C].[LOT], ''),
@CURRENTDATE,
@CURRENTDATE,
@CHANGEAGENTID,
@CHANGEAGENTID
from @CONSTITDATA as [C];
end try
begin catch
raiserror('Could not insert into Address table.', 13, 1);
return 1;
end catch
-- insert phone number
declare @PHONE nvarchar(100);
select @PHONE = [PHONENUMBER] from @CONSTITDATA;
if len(@PHONE) > 0
insert into dbo.[PHONE] (
[ID],
[CONSTITUENTID],
[NUMBER],
[ISPRIMARY],
[COUNTRYID],
[DATEADDED],
[DATECHANGED],
[ADDEDBYID],
[CHANGEDBYID]
) values (
newid(),
@CONSTITUENTID,
@PHONE,
1,
@COUNTRYID,
@CURRENTDATE,
@CURRENTDATE,
@CHANGEAGENTID,
@CHANGEAGENTID
);
-- insert email address
declare @EMAIL nvarchar(100);
select @EMAIL = [EMAILADDRESS] from @CONSTITDATA;
if len(@EMAIL) > 0
insert into dbo.[EMAILADDRESS] (
[ID],
[CONSTITUENTID],
[EMAILADDRESS],
[ISPRIMARY],
[DATEADDED],
[DATECHANGED],
[ADDEDBYID],
[CHANGEDBYID]
) values (
newid(),
@CONSTITUENTID,
@EMAIL,
1,
@CURRENTDATE,
@CURRENTDATE,
@CHANGEAGENTID,
@CHANGEAGENTID
);
end
--Create a record in the CONSTITUENTAPPEAL table. If this were not an acquisition list, this row would have been created by BBDM's 'Update Constituent Appeal' business process before exporting the mailing
begin try
if not exists(select 1 from @CONSTITDATA where isnull([APPEALSYSTEMID], '') = '')
begin
select
@APPEALID = [C].[APPEALSYSTEMID],
@SOURCECODE = isnull([C].[SOURCECODE], ''),
@DATESENT = [C].[MAILDATE],
@PACKAGEID = isnull((select [PACKAGEID] from dbo.[MKTSEGMENTATIONTESTSEGMENT] where [ID] = [C].[SEGMENTID]), (select [PACKAGEID] from dbo.[MKTSEGMENTATIONSEGMENT] where [ID] = [C].[SEGMENTID])),
@SEGMENTID = (select [ID] from dbo.[MKTSEGMENTATIONSEGMENT] where [ID] = [C].[SEGMENTID]),
@TESTSEGMENTID = (select [ID] from dbo.[MKTSEGMENTATIONTESTSEGMENT] where [ID] = [C].[SEGMENTID])
from @CONSTITDATA as [C];
declare @CONSTITUENTAPPEALID uniqueidentifier;
select
@CONSTITUENTAPPEALID = [CONSTITUENTAPPEAL].[ID]
from dbo.[CONSTITUENTAPPEAL]
where [CONSTITUENTAPPEAL].[CONSTITUENTID] = @CONSTITUENTID
and [CONSTITUENTAPPEAL].[APPEALID] = @APPEALID
and [CONSTITUENTAPPEAL].[FINDERNUMBER] = @FINDERNUMBER
and [CONSTITUENTAPPEAL].[MKTPACKAGEID] = @PACKAGEID
and ([CONSTITUENTAPPEAL].[MKTSEGMENTATIONSEGMENTID] = @SEGMENTID or [CONSTITUENTAPPEAL].[MKTSEGMENTATIONTESTSEGMENTID] = @TESTSEGMENTID);
/* If record exists and the datesent value is different, update the datesent value. */
if @CONSTITUENTAPPEALID is not null
begin
if @DATESENT is not null and exists (select 1 from dbo.[CONSTITUENTAPPEAL] where [ID] = @CONSTITUENTAPPEALID and ([DATESENT] is null or [DATESENT] <> @DATESENT))
/* Only update if the datsent value is different. */
update dbo.[CONSTITUENTAPPEAL] set
[DATESENT] = @DATESENT
where [ID] = @CONSTITUENTAPPEALID;
end
else
insert into dbo.[CONSTITUENTAPPEAL](
[ID],
[CONSTITUENTID],
[APPEALID],
[MKTSEGMENTATIONID],
[SOURCECODE],
[FINDERNUMBER],
[DATESENT],
[COMMENTS],
[MKTPACKAGEID],
[MKTSEGMENTATIONSEGMENTID],
[MKTSEGMENTATIONTESTSEGMENTID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
) values (
newid(),
@CONSTITUENTID,
@APPEALID,
@SEGMENTATIONID,
@SOURCECODE,
@FINDERNUMBER,
@DATESENT,
'', --@COMMENTS
@PACKAGEID,
@SEGMENTID,
@TESTSEGMENTID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
end try
begin catch
raiserror('Run ''Update constituent appeal information'' process, then try again.', 13, 1);
return 1;
end catch
set @ID = @CONSTITUENTID;
return 0;