USP_DATAFORMTEMPLATE_ADD_BATCHPHONEFINDERBATCHCOMMIT
The save procedure used by the add dataform template "PhoneFinder Batch Row 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 | |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@PHONEFINDERID | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | Constituent |
@ADDRESSID | uniqueidentifier | IN | |
@PHONENUMBER | nvarchar(20) | IN | Phone number |
@PHONEMATCHTYPE | nvarchar(1) | IN | Phone match type |
@MATCHCOMPOSITESCORE | nvarchar(5) | IN | Match composite score |
@PHONESTATUS | nvarchar(1) | IN | Phone status |
@DONOTCALLSTATUS | nvarchar(1) | IN | Do not call status |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_BATCHPHONEFINDERBATCHCOMMIT
(
@ID uniqueidentifier = null output,
@VALIDATEONLY bit = 0,
@CHANGEAGENTID uniqueidentifier,
@PHONEFINDERID uniqueidentifier = null,
@CONSTITUENTID uniqueidentifier = null,
@ADDRESSID uniqueidentifier = null,
@PHONENUMBER nvarchar(20) = '',
@PHONEMATCHTYPE nvarchar(1) = null,
@MATCHCOMPOSITESCORE nvarchar(5) = null,
@PHONESTATUS nvarchar(1) = null,
@DONOTCALLSTATUS nvarchar(1) = null
)
as begin
set nocount on;
/* Perform some validation: */
if not exists(select 1 from dbo.CONSTITUENT where CONSTITUENT.[ID] = @CONSTITUENTID)
raiserror('ERR_INVALID_CONSTITUENT', 13, 1);
declare @CURRENTDATE datetime = getdate();
if @ID is null
set @ID = newid();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
begin try
-- A = 10-digit input phone matches appended phone
-- C = 10-digit phone number corrected by appended phone
-- D = Input phone was invalid; 10-digit corrected phone provided
-- F = 10-digit input phone did not match appended 10-digit phone; 10-digit phone provided
--if len(@PHONENUMBER) = 10 -- and @PHONEMATCHTYPE in (N'A', N'C', N'D', N'F')
--begin
/* Get PhoneFinder options: */
declare @INDIVIDUALPHONETYPECODEID uniqueidentifier;
declare @INDIVIDUALMARKASPRIMARY bit;
declare @ORGANIZATIONPHONETYPECODEID uniqueidentifier;
declare @ORGANIZATIONMARKASPRIMARY bit;
declare @INFOSOURCECODEID uniqueidentifier;
select
@INDIVIDUALPHONETYPECODEID = PHONEFINDER.[INDIVIDUALPHONETYPECODEID],
@INDIVIDUALMARKASPRIMARY = PHONEFINDER.[INDIVIDUALMARKASPRIMARY],
@ORGANIZATIONPHONETYPECODEID = PHONEFINDER.[ORGANIZATIONPHONETYPECODEID],
@ORGANIZATIONMARKASPRIMARY = PHONEFINDER.[ORGANIZATIONMARKASPRIMARY],
@INFOSOURCECODEID = PHONEFINDER.[INFOSOURCECODEID]
from
dbo.PHONEFINDER
where
PHONEFINDER.[ID] = @PHONEFINDERID;
/* Determine if this record is an individual or organization and use the correct settings: */
declare @MARKASPRIMARY bit;
declare @PHONETYPECODEID uniqueidentifier
select
@MARKASPRIMARY =
case
when CONSTITUENT.[ISORGANIZATION] = 1 then @ORGANIZATIONMARKASPRIMARY
else @INDIVIDUALMARKASPRIMARY end,
@PHONETYPECODEID =
case
when CONSTITUENT.[ISORGANIZATION] = 1 then @ORGANIZATIONPHONETYPECODEID
else @INDIVIDUALPHONETYPECODEID end
from
dbo.CONSTITUENT
where
CONSTITUENT.[ID] = @CONSTITUENTID;
declare @UNFORMATTEDNUMBER nvarchar(100) = dbo.UFN_PHONE_REMOVEFORMATTING(@PHONENUMBER);
/* Mark existing phone records as not primary: */
if @MARKASPRIMARY = 1
update dbo.PHONE
set
PHONE.[ISPRIMARY] = 0,
PHONE.[DATECHANGED] = @CURRENTDATE,
PHONE.[CHANGEDBYID] = @CHANGEAGENTID
from dbo.PHONE
where
PHONE.[CONSTITUENTID] = @CONSTITUENTID and
PHONE.[NUMBERNOFORMAT] <> @UNFORMATTEDNUMBER and
ISPRIMARY = 1
/* Determine DNC status: */
declare @DONOTCALL bit;
-- Blank = Not on DMA/FTC DNC list and no state DNC list
-- D = Not on DMA/FTC DNC list and state DNC list not available
-- H = Not on DMA/FTC DNC list and phone number is not on state DNC list
select @DONOTCALL =
case when @DONOTCALLSTATUS in (N'', N'H', N'D') or @DONOTCALLSTATUS is null then 0 else 1 end;
/* Check to see if existing phone numbers exist and update them: */
declare @COUNT int = 0;
select @COUNT = count(PHONE.[ID])
from dbo.PHONE
where PHONE.[CONSTITUENTID] = @CONSTITUENTID and PHONE.[NUMBERNOFORMAT] = @UNFORMATTEDNUMBER;
if @COUNT > 0
begin
--When updating a phone number keep its primary status, even if the process options said not to
select top 1
@ID = PHONE.ID,
@MARKASPRIMARY =
case
when @MARKASPRIMARY = 0 then PHONE.ISPRIMARY
else @MARKASPRIMARY
end
from dbo.PHONE
where
PHONE.[CONSTITUENTID] = @CONSTITUENTID and
PHONE.[NUMBERNOFORMAT] = @UNFORMATTEDNUMBER
order by PHONE.ISPRIMARY desc;
update dbo.PHONE
set
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE,
[INFOSOURCECODEID] = @INFOSOURCECODEID,
[ISPRIMARY] = case when @COUNT = 1 then @MARKASPRIMARY else [ISPRIMARY] end,
[DONOTCALL] = @DONOTCALL,
[NUMBER] = @PHONENUMBER
where
[CONSTITUENTID] = @CONSTITUENTID and
[NUMBERNOFORMAT] = @UNFORMATTEDNUMBER;
end
else
begin
--When adding a phone number make it primary if no other numbers exist, even if the process options said not to
if not exists (select 1 from dbo.PHONE where PHONE.CONSTITUENTID = @CONSTITUENTID)
set @MARKASPRIMARY = 1;
/* Add new phone record: */
exec dbo.USP_DATAFORMTEMPLATE_ADD_PHONE
@ID,
@CHANGEAGENTID,
@CONSTITUENTID,
@PHONETYPECODEID,
@PHONENUMBER,
@MARKASPRIMARY,
@DONOTCALL,
null,
null,
N'',
N'',
@INFOSOURCECODEID,
N'', -- Info source comments
null,
null,
null,
0;
end
--end
end try
begin catch
exec.dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;
end