USP_PHONE_CREATE
Creates a phone record.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@PHONETYPECODEID | uniqueidentifier | IN | |
@NUMBER | nvarchar(100) | IN | |
@PRIMARY | bit | IN | |
@STARTTIME | UDT_HOURMINUTE | IN | |
@ENDTIME | UDT_HOURMINUTE | IN | |
@STARTDATE | date | IN | |
@DONOTCALL | bit | IN | |
@DONOTCALLREASONCODEID | uniqueidentifier | IN | |
@INFOSOURCECODEID | uniqueidentifier | IN | |
@INFOSOURCECOMMENTS | nvarchar(256) | IN | |
@COUNTRYID | uniqueidentifier | IN | |
@ISCONFIDENTIAL | bit | IN | |
@UPDATEMATCHINGHOUSEHOLDPHONE | bit | IN | |
@RELATIONSHIPID | uniqueidentifier | IN | |
@ORIGINCODE | tinyint | IN | |
@SEASONALSTARTDATE | UDT_MONTHDAY | IN | |
@SEASONALENDDATE | UDT_MONTHDAY | IN | |
@DONOTTEXT | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_PHONE_CREATE
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null,
@CONSTITUENTID uniqueidentifier,
@PHONETYPECODEID uniqueidentifier = null,
@NUMBER nvarchar(100),
@PRIMARY bit = 0,
@STARTTIME dbo.UDT_HOURMINUTE = '',
@ENDTIME dbo.UDT_HOURMINUTE = '',
@STARTDATE date = null,
@DONOTCALL bit = 0,
@DONOTCALLREASONCODEID uniqueidentifier = null,
@INFOSOURCECODEID uniqueidentifier = null,
@INFOSOURCECOMMENTS nvarchar(256) = '',
@COUNTRYID uniqueidentifier = null,
@ISCONFIDENTIAL bit = 0,
@UPDATEMATCHINGHOUSEHOLDPHONE bit = 0,
@RELATIONSHIPID uniqueidentifier = null,
@ORIGINCODE tinyint = 0,
@SEASONALSTARTDATE dbo.UDT_MONTHDAY = '0000',
@SEASONALENDDATE dbo.UDT_MONTHDAY = '0000',
@DONOTTEXT bit = 0
)
as
set nocount on;
if @ID is null
set @ID = newid();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = getdate();
if @DONOTCALL = 1
begin
set @STARTTIME = '';
set @ENDTIME = '';
end
else
begin
set @DONOTCALLREASONCODEID = null;
end
declare @SEQUENCE int;
select
@SEQUENCE=coalesce(max(SEQUENCE),0)+1
from
dbo.PHONE
where
CONSTITUENTID=@CONSTITUENTID;
if @ORIGINCODE is not null and @ORIGINCODE <> 0
set @INFOSOURCECODEID = null
else
set @ORIGINCODE = 0
set @ISCONFIDENTIAL = coalesce(@ISCONFIDENTIAL, 0);
begin try
if @PRIMARY = 1
update
dbo.[PHONE]
set
ISPRIMARY = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
CONSTITUENTID = @CONSTITUENTID and
ISPRIMARY = 1;
-- JNA <10/21/2009> Check for/remove country code
set @NUMBER = dbo.UFN_PHONE_REMOVECOUNTRYCODE(@NUMBER, @COUNTRYID);
insert into dbo.[PHONE]
(
[ID],
[CONSTITUENTID],
[PHONETYPECODEID],
[NUMBER],
[ISPRIMARY],
[DONOTCALL],
[STARTTIME],
[ENDTIME],
[INFOSOURCECODEID],
[INFOSOURCECOMMENTS],
[COUNTRYID],
[SEQUENCE],
[STARTDATE],
[DONOTCALLREASONCODEID],
[ISCONFIDENTIAL],
[RELATIONSHIPID],
[ORIGINCODE],
[SEASONALSTARTDATE],
[SEASONALENDDATE],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED],
[DONOTTEXT]
)
values
(
@ID,
@CONSTITUENTID,
@PHONETYPECODEID,
@NUMBER,
@PRIMARY,
@DONOTCALL,
@STARTTIME,
@ENDTIME,
@INFOSOURCECODEID,
@INFOSOURCECOMMENTS,
@COUNTRYID,
@SEQUENCE,
@STARTDATE,
@DONOTCALLREASONCODEID,
@ISCONFIDENTIAL,
@RELATIONSHIPID,
@ORIGINCODE,
@SEASONALSTARTDATE,
@SEASONALENDDATE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@DONOTTEXT
);
if @UPDATEMATCHINGHOUSEHOLDPHONE = 1 begin
declare @EARLIESTTIMECURRENTDATE date;
set @EARLIESTTIMECURRENTDATE = getdate();
-- if the constituent is an individual, householdid will be the household they are a member of
-- if the constituent is a household, householdid will be that household's id
declare @HOUSEHOLDID uniqueidentifier;
if dbo.UFN_CONSTITUENT_ISHOUSEHOLD(@CONSTITUENTID) = 1
set @HOUSEHOLDID = @CONSTITUENTID;
else
select
@HOUSEHOLDID = GM.GROUPID
from
dbo.GROUPMEMBER GM
left outer join
dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
left outer join
dbo.GROUPDATA GD on GD.ID = GM.GROUPID
where
GM.MEMBERID = @CONSTITUENTID
and
GD.GROUPTYPECODE = 0
and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO > @EARLIESTTIMECURRENTDATE))
or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= @EARLIESTTIMECURRENTDATE))
or (GMDR.DATEFROM <= @EARLIESTTIMECURRENTDATE and GMDR.DATETO > @EARLIESTTIMECURRENTDATE));
-- create a table of all of the members of the household previously identified
declare @IDSTOUPDATE table(ID uniqueidentifier, HASPRIMARY bit)
insert into @IDSTOUPDATE
select
GM.MEMBERID,
0
from
dbo.GROUPMEMBER GM
left outer join
dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
where
GM.GROUPID = @HOUSEHOLDID
and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO > @EARLIESTTIMECURRENTDATE))
or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= @EARLIESTTIMECURRENTDATE))
or (GMDR.DATEFROM <= @EARLIESTTIMECURRENTDATE and GMDR.DATETO > @EARLIESTTIMECURRENTDATE))
union all
select
@HOUSEHOLDID, 0; -- include the household itself (for the case where the constituent is an individual)
delete from @IDSTOUPDATE where ID = @CONSTITUENTID; -- (if the constituent was an individual, they'll show as a member - if they were a household it got union'd in)
-- Do not overwrite another constituent's primary phone
update @IDSTOUPDATE
set
HASPRIMARY = 1
from
@IDSTOUPDATE I
inner join dbo.PHONE on I.ID = PHONE.CONSTITUENTID
where
PHONE.ISPRIMARY = 1;
-- create a table of all of the matching phone numbers
declare @MATCHING table (ID uniqueidentifier);
insert into @MATCHING
select
ID
from
dbo.PHONE
where PHONE.NUMBER = @NUMBER
and PHONE.CONSTITUENTID in (select ID from @IDSTOUPDATE);
-- insert where there are no records with the new number
insert into dbo.PHONE
(CONSTITUENTID,PHONETYPECODEID,NUMBER,ISPRIMARY,DONOTCALL,STARTTIME,ENDTIME,INFOSOURCECODEID,INFOSOURCECOMMENTS,COUNTRYID, STARTDATE, DONOTCALLREASONCODEID, ISCONFIDENTIAL, ORIGINCODE, SEASONALSTARTDATE, SEASONALENDDATE, ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED,DONOTTEXT)
select
IDSTOUPDATE.ID,@PHONETYPECODEID,@NUMBER,case when IDSTOUPDATE.HASPRIMARY = 1 then 0 else 1 end,@DONOTCALL,@STARTTIME,@ENDTIME,@INFOSOURCECODEID,@INFOSOURCECOMMENTS,@COUNTRYID, @STARTDATE, @DONOTCALLREASONCODEID, @ISCONFIDENTIAL, @ORIGINCODE, @SEASONALSTARTDATE, @SEASONALENDDATE, @CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE,@DONOTTEXT
from
@IDSTOUPDATE IDSTOUPDATE
where
not exists (
select 'x'
from dbo.PHONE
inner join @MATCHING as M on M.ID = PHONE.ID
where PHONE.CONSTITUENTID = IDSTOUPDATE.ID
);
end -- update matching household phone
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;