UFN_COMMUNICATIONS_GETCONSTITUENTSWITHRECENTCOMMUNICATIONS
This function returns the constituents who have received any of the given communications within the given time period from the given start date.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PERIODTYPECODE | tinyint | IN | |
@NUMPERIODS | int | IN | |
@STARTDATE | datetime | IN | |
@COMMUNICATIONTYPES | xml | IN |
Definition
Copy
CREATE function dbo.[UFN_COMMUNICATIONS_GETCONSTITUENTSWITHRECENTCOMMUNICATIONS]
(
@PERIODTYPECODE tinyint,
@NUMPERIODS integer,
@STARTDATE datetime,
@COMMUNICATIONTYPES xml
)
returns @CONSTITUENTS table ([CONSTITUENTID] uniqueidentifier)
as
begin
-- @PERIODTYPECODE
-- 0 - week
-- 1 - month
-- 2 - quarter
-- 3 - year
-- @COMMUNICATIONTYPES collection of communication types to be considered
-- <COMMUNICATIONTYPES><ITEM><COMMUNICATIONTYPECODE>?</COMMUNICATIONTYPECODE></ITEM></COMMUNICATIONTYPES>
-- 0 - Appeal communications
-- 1 - Event invitations
-- 2 - Membership renewal
-- 3 - Pledge reminder
-- 4 - Sponsorship effort
-- 5 - Marketing effort
declare @INCLUDEAPPEALCOMMUNICATIONS bit = 0;
declare @INCLUDEEVENTINVITATIONS bit = 0;
declare @INCLUDEMEMBERSHIPRENEWAL bit = 0;
declare @INCLUDEPLEDGEREMINDER bit = 0;
declare @INCLUDESPONSORSHIPEFFORT bit = 0;
declare @INCLUDEMARKETINGEFFORT bit = 0;
-- Parse communication types
declare @COMMUNICATIONTYPECODE tinyint;
declare TYPESCURSOR cursor local fast_forward for
select
COMMUNICATIONTYPECODE
from dbo.UFN_COMMUNICATIONLETTERACTIVITYEXCLUSION_GETCOMMUNICATIONTYPES_FROMITEMLISTXML(@COMMUNICATIONTYPES);
open TYPESCURSOR;
fetch next from TYPESCURSOR into @COMMUNICATIONTYPECODE;
while (@@FETCH_STATUS = 0)
begin
if @COMMUNICATIONTYPECODE = 0
set @INCLUDEAPPEALCOMMUNICATIONS = 1;
else if @COMMUNICATIONTYPECODE = 1
set @INCLUDEEVENTINVITATIONS = 1;
else if @COMMUNICATIONTYPECODE = 2
set @INCLUDEMEMBERSHIPRENEWAL = 1;
else if @COMMUNICATIONTYPECODE = 3
set @INCLUDEPLEDGEREMINDER = 1;
else if @COMMUNICATIONTYPECODE = 4
set @INCLUDESPONSORSHIPEFFORT = 1;
else if @COMMUNICATIONTYPECODE = 5
set @INCLUDEMARKETINGEFFORT = 1;
fetch next from TYPESCURSOR into @COMMUNICATIONTYPECODE;
end
close TYPESCURSOR;
deallocate TYPESCURSOR;
insert into @CONSTITUENTS
select
CONSTITUENT.ID as CONSTITUENTID
from dbo.CONSTITUENT
where exists (
select
CONSTITUENTSEGMENT.CONSTITUENTID
from dbo.CONSTITUENTSEGMENT
inner join dbo.MKTSEGMENTATIONSEGMENT
on CONSTITUENTSEGMENT.SEGMENTID = MKTSEGMENTATIONSEGMENT.ID
inner join dbo.MKTSEGMENTATION
on MKTSEGMENTATIONSEGMENT.SEGMENTATIONID = MKTSEGMENTATION.ID
where
CONSTITUENTSEGMENT.CONSTITUENTID = CONSTITUENT.ID
-- Exclude Marketing acknowledgments
and MKTSEGMENTATION.MAILINGTYPECODE <> 1
and (@INCLUDEAPPEALCOMMUNICATIONS = 1 or not (MKTSEGMENTATION.MAILINGTYPECODE = 0 and MKTSEGMENTATION.COMMUNICATIONTYPECODE = 1))
and (@INCLUDEEVENTINVITATIONS = 1 or not (MKTSEGMENTATION.MAILINGTYPECODE = 0 and MKTSEGMENTATION.COMMUNICATIONTYPECODE = 2))
and (@INCLUDEMEMBERSHIPRENEWAL = 1 or MKTSEGMENTATION.MAILINGTYPECODE <> 2)
and (@INCLUDESPONSORSHIPEFFORT = 1 or MKTSEGMENTATION.MAILINGTYPECODE <> 3)
and (@INCLUDEMARKETINGEFFORT = 1 or not (MKTSEGMENTATION.MAILINGTYPECODE = 0 and MKTSEGMENTATION.COMMUNICATIONTYPECODE = 0))
and (
(@PERIODTYPECODE = 0 and MKTSEGMENTATION.MAILDATE between DATEADD(ww, @NUMPERIODS * @NUMPERIODS * -1, @STARTDATE) and @STARTDATE)
or (@PERIODTYPECODE = 1 and MKTSEGMENTATION.MAILDATE between DATEADD(mm, @NUMPERIODS * -1, @STARTDATE) and @STARTDATE)
or (@PERIODTYPECODE = 2 and MKTSEGMENTATION.MAILDATE between DATEADD(qq, @NUMPERIODS * -1, @STARTDATE) and @STARTDATE)
or (@PERIODTYPECODE = 3 and MKTSEGMENTATION.MAILDATE between DATEADD(yy, @NUMPERIODS * -1, @STARTDATE) and @STARTDATE)
)
)
or exists (
-- Pledge reminder
select
REVENUE.CONSTITUENTID,
dbo.UFN_CONSTITUENT_BUILDNAME(REVENUE.CONSTITUENTID) as NAME
from dbo.PLEDGEREMINDERSENT
inner join dbo.REVENUE
on PLEDGEREMINDERSENT.REVENUEID = REVENUE.ID
where
@INCLUDEPLEDGEREMINDER = 1
and REVENUE.CONSTITUENTID = CONSTITUENT.ID
and (
(@PERIODTYPECODE = 0 and PLEDGEREMINDERSENT.SENTDATE between DATEADD(ww, @NUMPERIODS * -1, @STARTDATE) and @STARTDATE)
or (@PERIODTYPECODE = 1 and PLEDGEREMINDERSENT.SENTDATE between DATEADD(mm, @NUMPERIODS * -1, @STARTDATE) and @STARTDATE)
or (@PERIODTYPECODE = 2 and PLEDGEREMINDERSENT.SENTDATE between DATEADD(qq, @NUMPERIODS * -1, @STARTDATE) and @STARTDATE)
or (@PERIODTYPECODE = 3 and PLEDGEREMINDERSENT.SENTDATE between DATEADD(yy, @NUMPERIODS * -1, @STARTDATE) and @STARTDATE)
)
);
return;
end