UFN_SMARTQUERY_REVENUE_SYBUNT_DONORS
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@THISYEAR_DATERANGE | tinyint | IN | |
@THISYEAR_NMONTHS | tinyint | IN | |
@THISYEAR_STARTDATE | datetime | IN | |
@THISYEAR_ENDDATE | datetime | IN | |
@SELECTIONID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@MAXROWS | int | IN |
Definition
Copy
create function dbo.UFN_SMARTQUERY_REVENUE_SYBUNT_DONORS
(
@THISYEAR_DATERANGE tinyint=0, --0=This calendar year , 1=NMonths, 2=Specific range
@THISYEAR_NMONTHS tinyint=12,
@THISYEAR_STARTDATE datetime=null,
@THISYEAR_ENDDATE datetime=null,
@SELECTIONID uniqueidentifier=null,
@CURRENTAPPUSERID uniqueidentifier=null,
@MAXROWS int=500
)
returns @T table
(
ID uniqueidentifier not null,
LASTGIFTDATE datetime,
NAME nvarchar(154),
ADDRESSBLOCK nvarchar(150),
CITY nvarchar(50),
STATE nvarchar(50),
POSTCODE nvarchar(12),
LOOKUPID nvarchar(36)
)
as
begin
declare @SMARTQUERYCATALOGID uniqueidentifier = '12EF4951-0018-48cc-9458-B2C5D2419524';
declare @ISADMIN bit = 1;
declare @APPUSER_IN_NONRACROLE bit = 1;
declare @APPUSER_IN_NONSITEROLE bit = 1;
set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID)
if @ISADMIN = 0
begin
set @APPUSER_IN_NONRACROLE = dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_IN_NONRACROLE(@CURRENTAPPUSERID, @SMARTQUERYCATALOGID)
set @APPUSER_IN_NONSITEROLE = dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_IN_NONSITEROLE(@CURRENTAPPUSERID,@SMARTQUERYCATALOGID);
end
if (@THISYEAR_DATERANGE is null) or (@THISYEAR_DATERANGE not in (0,1,2))
set @THISYEAR_DATERANGE = 0;
declare @NOW datetime;
set @NOW=getdate();
--Calculate date range
set @THISYEAR_STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(
case @THISYEAR_DATERANGE
when 0 then dbo.UFN_DATE_THISCALENDARYEAR_FIRSTDAY(@NOW,0)
when 1 then dateadd(month,-@THISYEAR_NMONTHS, @NOW)
when 2 then coalesce(@THISYEAR_STARTDATE,'1753-01-01')
end
);
set @THISYEAR_ENDDATE = dbo.UFN_DATE_GETLATESTTIME(
--Revenue can be future dated. Exclude constituent with future revenue unless user has specified a particular date range.
case @THISYEAR_DATERANGE
when 0 then '9999-12-30'
when 1 then '9999-12-30'
when 2 then coalesce(@THISYEAR_ENDDATE,'9999-12-30')
end
);
declare @REVENUE table (DATE datetime, CONSTITUENTID uniqueidentifier, primary key (CONSTITUENTID,DATE));
insert into @REVENUE
--Find all revenue records we have access to
select distinct
DATE,
CONSTITUENTID
from
dbo.REVENUE
left join dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORREVENUE_BULK(@CURRENTAPPUSERID, @SMARTQUERYCATALOGID) as ISREVSECURE on ISREVSECURE.REVENUEID = REVENUE.ID and @ISADMIN <> 1 and @APPUSER_IN_NONSITEROLE <> 1
left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORSMARTQUERY(@CURRENTAPPUSERID, @SMARTQUERYCATALOGID) as ISCONSECURE on ISCONSECURE.ID = REVENUE.CONSTITUENTID and @ISADMIN <> 1 and @APPUSER_IN_NONRACROLE <> 1
left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORSMARTQUERY_BYSITE(@CURRENTAPPUSERID, @SMARTQUERYCATALOGID) as ISCONSITESECURE on ISCONSITESECURE.ID = REVENUE.CONSTITUENTID and @ISADMIN <> 1 and @APPUSER_IN_NONSITEROLE <> 1
left join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@SELECTIONID) as IDSETFILTER on IDSETFILTER.ID = REVENUE.CONSTITUENTID
where
(@SELECTIONID is null or IDSETFILTER.ID is not null)
and (@ISADMIN = 1
or (( @APPUSER_IN_NONSITEROLE = 1 or ISREVSECURE.REVENUEID is not null)
and ( @APPUSER_IN_NONRACROLE = 1 or ISCONSECURE.ID is not null)
and ( @APPUSER_IN_NONSITEROLE = 1 or ISCONSITESECURE.ID is not null))
)
and REVENUE.CONSTITUENTID is not null;
with REVENUE_CTE as (
--Find the recent record for each constituent
select
max(DATE) as DATE,
CONSTITUENTID
from
(
select
DATE,
CONSTITUENTID
from @REVENUE as REVENUE
-- Filter out constituents that have given in THISYEAR
where not exists
(
select CONSTITUENTID from @REVENUE as SUBREVENUE
where
SUBREVENUE.CONSTITUENTID = REVENUE.CONSTITUENTID
and SUBREVENUE.DATE >= @THISYEAR_STARTDATE
and
(
(@THISYEAR_DATERANGE = 2 and SUBREVENUE.DATE <= @THISYEAR_ENDDATE)
or
(@THISYEAR_DATERANGE <> 2)
)
)
) as REVENUE
group by CONSTITUENTID
)
insert into @T
select top (@MAXROWS)
CONSTITUENT.ID,
REVENUE_CTE.DATE as LASTGIFTDATE,
CONSTITUENT.NAME,
ADDRESS.ADDRESSBLOCK,
ADDRESS.CITY,
STATE.DESCRIPTION,
ADDRESS.POSTCODE,
CONSTITUENT.LOOKUPID
from
dbo.CONSTITUENT
with (nolock)
inner join REVENUE_CTE on CONSTITUENT.ID = REVENUE_CTE.CONSTITUENTID
left outer join dbo.ADDRESS with (nolock) on ADDRESS.CONSTITUENTID = CONSTITUENT.ID and ADDRESS.ISPRIMARY = 1
left outer join dbo.STATE on STATE.ID = ADDRESS.STATEID
order by LASTGIFTDATE desc;
return;
end;