USP_EMAILADDRESS_CREATE
Creates an email address record.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@EMAILADDRESSTYPECODEID | uniqueidentifier | IN | |
@EMAILADDRESS | UDT_EMAILADDRESS | IN | |
@PRIMARY | bit | IN | |
@DONOTEMAIL | bit | IN | |
@INFOSOURCECODEID | uniqueidentifier | IN | |
@INFOSOURCECOMMENTS | nvarchar(256) | IN | |
@UPDATEMATCHINGHOUSEHOLDEMAILADDRESS | bit | IN | |
@RELATIONSHIPID | uniqueidentifier | IN | |
@ORIGINCODE | tinyint | IN | |
@STARTDATE | date | IN | |
@EMAILISCONFIDENTIAL | bit | IN | |
@DONOTEMAILREASONCODEID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_EMAILADDRESS_CREATE
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null,
@CONSTITUENTID uniqueidentifier,
@EMAILADDRESSTYPECODEID uniqueidentifier = null,
@EMAILADDRESS dbo.UDT_EMAILADDRESS,
@PRIMARY bit = 0,
@DONOTEMAIL bit = 0,
@INFOSOURCECODEID uniqueidentifier = null,
@INFOSOURCECOMMENTS nvarchar(256) = '',
@UPDATEMATCHINGHOUSEHOLDEMAILADDRESS bit = 0,
@RELATIONSHIPID uniqueidentifier = null,
@ORIGINCODE tinyint = 0,
@STARTDATE date = null,
@EMAILISCONFIDENTIAL bit = 0,
@DONOTEMAILREASONCODEID uniqueidentifier = null
) 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 @DONOTEMAIL = 0
begin
set @DONOTEMAILREASONCODEID = null;
end
declare @SEQUENCE int;
select
@SEQUENCE=coalesce(max(SEQUENCE),0)+1
from
dbo.EMAILADDRESS
where
CONSTITUENTID = @CONSTITUENTID;
if @ORIGINCODE is not null and @ORIGINCODE <> 0
set @INFOSOURCECODEID = null
else
set @ORIGINCODE = 0
begin try
if @PRIMARY = 1
update
dbo.EMAILADDRESS
set
ISPRIMARY = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
CONSTITUENTID = @CONSTITUENTID and
ISPRIMARY = 1;
insert into dbo.EMAILADDRESS
(
ID,
CONSTITUENTID,
EMAILADDRESSTYPECODEID,
EMAILADDRESS,
ISPRIMARY,
SEQUENCE,
DONOTEMAIL,
INFOSOURCECODEID,
INFOSOURCECOMMENTS,
RELATIONSHIPID,
ORIGINCODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
STARTDATE,
ISCONFIDENTIAL,
DONOTEMAILREASONCODEID
)
values
(
@ID,
@CONSTITUENTID,
@EMAILADDRESSTYPECODEID,
@EMAILADDRESS,
@PRIMARY,
@SEQUENCE,
@DONOTEMAIL,
@INFOSOURCECODEID,
@INFOSOURCECOMMENTS,
@RELATIONSHIPID,
@ORIGINCODE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@STARTDATE,
@EMAILISCONFIDENTIAL,
@DONOTEMAILREASONCODEID
);
if @UPDATEMATCHINGHOUSEHOLDEMAILADDRESS = 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 email
update @IDSTOUPDATE
set
HASPRIMARY = 1
from
@IDSTOUPDATE I
inner join dbo.EMAILADDRESS on I.ID = EMAILADDRESS.CONSTITUENTID
where
EMAILADDRESS.ISPRIMARY = 1;
-- create a table of all matching email addresses
declare @MATCHING table (ID uniqueidentifier);
insert into @MATCHING
select
ID
from
dbo.EMAILADDRESS
where
EMAILADDRESS = @EMAILADDRESS
and ( (EMAILADDRESSTYPECODEID = @EMAILADDRESSTYPECODEID) or (EMAILADDRESSTYPECODEID is null and @EMAILADDRESSTYPECODEID is null) )
and CONSTITUENTID in (select ID from @IDSTOUPDATE);
-- If the email does not exist, insert it, setting primary as necessary
insert into dbo.EMAILADDRESS
(CONSTITUENTID,EMAILADDRESSTYPECODEID,EMAILADDRESS,ISPRIMARY,INFOSOURCECODEID,INFOSOURCECOMMENTS,ORIGINCODE,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED,STARTDATE, DONOTEMAIL, ISCONFIDENTIAL, DONOTEMAILREASONCODEID)
select
IDSTOUPDATE.ID,@EMAILADDRESSTYPECODEID,@EMAILADDRESS, case when IDSTOUPDATE.HASPRIMARY = 1 then 0 else 1 end,@INFOSOURCECODEID,@INFOSOURCECOMMENTS,@ORIGINCODE,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE,@STARTDATE, @DONOTEMAIL, @EMAILISCONFIDENTIAL,@DONOTEMAILREASONCODEID
from
@IDSTOUPDATE IDSTOUPDATE
where
not exists (
select 'x'
from dbo.EMAILADDRESS
inner join @MATCHING as M on M.ID = EMAILADDRESS.ID
where EMAILADDRESS.CONSTITUENTID = IDSTOUPDATE.ID
);
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;