UFN_SMARTQUERY_DONORANNIVERSARY
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ANNIVERSARYDATE | datetime | IN | |
@REVENUESELECTIONID | uniqueidentifier | IN | |
@CONSTITUENTSELECTIONID | uniqueidentifier | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@AMOUNTTYPE | tinyint | IN | |
@AMOUNTONE | money | IN | |
@AMOUNTTWO | money | IN | |
@ONLYRETURNTOPDONORS | bit | IN | |
@RETURNVALUE | int | IN | |
@RETURNVALUEISPERCENT | bit | IN | |
@ANNIVERSARYDATEISCURRENTDATE | bit | IN | |
@REVENUEQUERYID | uniqueidentifier | IN | |
@REVENUEQUERYTYPE | nvarchar(10) | IN | |
@CONSTITUENTQUERYID | uniqueidentifier | IN | |
@CONSTITUENTQUERYTYPE | nvarchar(10) | IN | |
@CURRENCYID | uniqueidentifier | IN | |
@CURRENCYCODE | tinyint | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@MAXROWS | int | IN |
Definition
Copy
create function dbo.UFN_SMARTQUERY_DONORANNIVERSARY
(
@ANNIVERSARYDATE datetime,
@REVENUESELECTIONID uniqueidentifier = null,
@CONSTITUENTSELECTIONID uniqueidentifier = null,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@AMOUNTTYPE tinyint = null,
@AMOUNTONE money = null,
@AMOUNTTWO money = null,
@ONLYRETURNTOPDONORS bit = null,
@RETURNVALUE int = null,
@RETURNVALUEISPERCENT bit = null,
@ANNIVERSARYDATEISCURRENTDATE bit = null,
@REVENUEQUERYID uniqueidentifier = null,
@REVENUEQUERYTYPE nvarchar(10) = null,
@CONSTITUENTQUERYID uniqueidentifier = null,
@CONSTITUENTQUERYTYPE nvarchar(10) = null,
@CURRENCYID uniqueidentifier = null,
@CURRENCYCODE tinyint = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@MAXROWS int = null
)
returns @RETURNTABLE table
(
ID uniqueidentifier,
NAME nvarchar(154),
ADDRESSBLOCK nvarchar(150),
CITY nvarchar(50),
STATE nvarchar(50),
POSTCODE nvarchar(12),
REVENUEDATE datetime,
AMOUNT money,
CURRENCYID uniqueidentifier
)
as
begin
declare @ISADMIN bit;
set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
set @CURRENCYID = case @CURRENCYCODE
when 0 then dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID)
else dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()
end
declare @DAY int;
declare @MONTH int;
set @DAY = day(@ANNIVERSARYDATE);
set @MONTH = month(@ANNIVERSARYDATE);
select
@REVENUEQUERYID = dbo.UFN_IDSET_GETQUERYID(@REVENUESELECTIONID),
@REVENUEQUERYTYPE = dbo.UFN_IDSET_GETQUERYTYPE(@REVENUESELECTIONID),
@CONSTITUENTQUERYID = dbo.UFN_IDSET_GETQUERYID(@CONSTITUENTSELECTIONID),
@CONSTITUENTQUERYTYPE = dbo.UFN_IDSET_GETQUERYTYPE(@CONSTITUENTSELECTIONID);
-- Build list table of all revenue records that need to be included
declare @DATASET table
(
CONSTITUENTID uniqueidentifier,
REVENUEDATE datetime,
AMOUNT money
);
if @REVENUESELECTIONID is null and @CONSTITUENTSELECTIONID is null
begin
with REVENUE_CTE as
(
select
ID,
CONSTITUENTID,
DATE,
dbo.UFN_REVENUE_GETAMOUNTINCURRENCY(REVENUE.ID, @CURRENCYID) AMOUNT
from
dbo.REVENUE
with (INDEX (IX_REVENUE_CONSTITUENTID_TRANSACTIONTYPECODE_DATE))
where
@ISADMIN = 1 or
(
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORREVENUE(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.ID) = 1 )
and
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.CONSTITUENTID) = 1)
and
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT_BYSITE(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.CONSTITUENTID) = 1)
)
)
insert into @DATASET(CONSTITUENTID, REVENUEDATE, AMOUNT)
select
REVENUE_CTE.CONSTITUENTID,
REVENUE_CTE.DATE,
REVENUE_CTE.AMOUNT
from
REVENUE_CTE
--inner join REVENUE_CTE on REVENUE_CTE.ID = REVENUE.ID
where
day(REVENUE_CTE.DATE) = @DAY and
month(REVENUE_CTE.DATE) = @MONTH and
(@STARTDATE is null or REVENUE_CTE.DATE >= dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE)) and
(@ENDDATE is null or REVENUE_CTE.DATE <= dbo.UFN_DATE_GETLATESTTIME(@ENDDATE)) and
not exists(select 1 from REVENUE_CTE R where R.CONSTITUENTID = REVENUE_CTE.CONSTITUENTID and R.DATE > REVENUE_CTE.DATE)
end
else if @REVENUESELECTIONID is null
begin
with REVENUE_CTE as
(
select
ID,
CONSTITUENTID,
DATE,
dbo.UFN_REVENUE_GETAMOUNTINCURRENCY(REVENUE.ID, @CURRENCYID) AMOUNT
from
dbo.REVENUE
with (INDEX (IX_REVENUE_CONSTITUENTID_TRANSACTIONTYPECODE_DATE))
where
@ISADMIN = 1 or
(
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORREVENUE(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.ID) = 1 )
and
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.CONSTITUENTID) = 1)
and
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT_BYSITE(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.CONSTITUENTID) = 1)
)
)
insert into @DATASET(CONSTITUENTID, REVENUEDATE, AMOUNT)
select
REVENUE.CONSTITUENTID,
REVENUE.DATE,
REVENUE.AMOUNT
from
REVENUE_CTE as REVENUE
inner join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@CONSTITUENTSELECTIONID) SELECTION on REVENUE.CONSTITUENTID = SELECTION.ID and @CONSTITUENTSELECTIONID is not null
where
day(REVENUE.DATE) = @DAY and
month(REVENUE.DATE) = @MONTH and
(@STARTDATE is null or REVENUE.DATE >= dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE)) and
(@ENDDATE is null or REVENUE.DATE <= dbo.UFN_DATE_GETLATESTTIME(@ENDDATE)) and
not exists(select 1 from REVENUE_CTE R where R.CONSTITUENTID = REVENUE.CONSTITUENTID and R.DATE > REVENUE.DATE)
end
else if @CONSTITUENTSELECTIONID is null
begin
with REVENUE_CTE as
(
select
ID,
CONSTITUENTID,
DATE,
dbo.UFN_REVENUE_GETAMOUNTINCURRENCY(REVENUE.ID, @CURRENCYID) AMOUNT
from
dbo.REVENUE
with (INDEX (IX_REVENUE_CONSTITUENTID_TRANSACTIONTYPECODE_DATE))
where
@ISADMIN = 1 or
(
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORREVENUE(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.ID) = 1 )
and
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.CONSTITUENTID) = 1)
and
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT_BYSITE(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.CONSTITUENTID) = 1)
)
)
insert into @DATASET(CONSTITUENTID, REVENUEDATE, AMOUNT)
select
REVENUE.CONSTITUENTID,
REVENUE.DATE,
REVENUE.AMOUNT
from
REVENUE_CTE as REVENUE
inner join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@REVENUESELECTIONID) SELECTION on REVENUE.ID = SELECTION.ID and @REVENUESELECTIONID is not null
where
day(REVENUE.DATE) = @DAY and
month(REVENUE.DATE) = @MONTH and
(@STARTDATE is null or REVENUE.DATE >= dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE)) and
(@ENDDATE is null or REVENUE.DATE <= dbo.UFN_DATE_GETLATESTTIME(@ENDDATE)) and
not exists(select 1 from REVENUE_CTE R where R.CONSTITUENTID = REVENUE.CONSTITUENTID and R.DATE > REVENUE.DATE)
end
else
begin
with REVENUE_CTE as
(
select
ID,
CONSTITUENTID,
DATE,
dbo.UFN_REVENUE_GETAMOUNTINCURRENCY(REVENUE.ID, @CURRENCYID) AMOUNT
from
dbo.REVENUE
with (INDEX (IX_REVENUE_CONSTITUENTID_TRANSACTIONTYPECODE_DATE))
where
@ISADMIN = 1 or
(
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORREVENUE(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.ID) = 1 )
and
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.CONSTITUENTID) = 1)
and
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT_BYSITE(@CURRENTAPPUSERID, '6A51C0E5-B81C-4962-9BBA-03CD86AE5003', REVENUE.CONSTITUENTID) = 1)
)
)
insert into @DATASET(CONSTITUENTID, REVENUEDATE, AMOUNT)
select
REVENUE.CONSTITUENTID,
REVENUE.DATE,
REVENUE.AMOUNT
from
REVENUE_CTE as REVENUE
inner join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@REVENUESELECTIONID) REVENUESELECTION on REVENUE.ID = REVENUESELECTION.ID and @REVENUESELECTIONID is not null
inner join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@CONSTITUENTSELECTIONID) CONSTITUENTSELECTION on REVENUE.CONSTITUENTID = CONSTITUENTSELECTION.ID and @CONSTITUENTSELECTIONID is not null
where
day(REVENUE.DATE) = @DAY and
month(REVENUE.DATE) = @MONTH and
(@STARTDATE is null or REVENUE.DATE >= dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE)) and
(@ENDDATE is null or REVENUE.DATE <= dbo.UFN_DATE_GETLATESTTIME(@ENDDATE)) and
not exists(select 1 from REVENUE_CTE R where R.CONSTITUENTID = REVENUE.CONSTITUENTID and R.DATE > REVENUE.DATE)
end
-- Calculate number of rows returned
if @ONLYRETURNTOPDONORS = 1
begin
if @RETURNVALUEISPERCENT = 1
begin
select
@MAXROWS = ceiling(count(CONSTITUENTID) * (convert(decimal,@RETURNVALUE) / 100.00))
from
@DATASET;
end
else
set @MAXROWS = @RETURNVALUE;
end;
-- Insert filtered records into the return table
insert into @RETURNTABLE
select top(@MAXROWS) with ties
CONSTITUENT.ID,
CONSTITUENT.NAME,
ADDRESS.ADDRESSBLOCK,
ADDRESS.CITY,
dbo.UFN_STATE_GETABBREVIATION(ADDRESS.STATEID),
ADDRESS.POSTCODE,
DS.REVENUEDATE,
DS.AMOUNT,
@CURRENCYID
from
@DATASET DS
inner join
dbo.CONSTITUENT on CONSTITUENT.ID = DS.CONSTITUENTID
left join
dbo.ADDRESS on ADDRESS.CONSTITUENTID = CONSTITUENT.ID and ADDRESS.ISPRIMARY = 1
where
(DS.AMOUNT > @AMOUNTONE and @AMOUNTTYPE = 0) or
(DS.AMOUNT < @AMOUNTONE and @AMOUNTTYPE = 1) or
(DS.AMOUNT between @AMOUNTONE and @AMOUNTTWO and @AMOUNTTYPE = 2)
order by
(DS.AMOUNT) desc,CONSTITUENT.KEYNAME,CONSTITUENT.FIRSTNAME,CONSTITUENT.MIDDLENAME;
return;
end