USP_DATALIST_CONSTITUENTRECOGNITION
A list of recognition programs and levels for a constituent.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | Input parameter indicating the context ID for the data list. |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@SITEFILTERMODE | tinyint | IN | Sites |
@SITESSELECTED | xml | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | Input parameter indicating the ID of the feature to use for site security checking. |
@SECURITYFEATURETYPE | tinyint | IN | Input parameter indicating the type of the feature to use for site security checking. |
@CURRENCYCODE | tinyint | IN | Currency |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_CONSTITUENTRECOGNITION
(
@CONSTITUENTID uniqueidentifier,
@CURRENTAPPUSERID uniqueidentifier = null,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@CURRENCYCODE tinyint = 0
)
as
set nocount on;
declare @CURRENTDATE datetime = getdate();
--multi currency set up
declare @CURRENCYID uniqueidentifier
declare @MULTICURRENCYENABLED bit;
set @MULTICURRENCYENABLED = dbo.UFN_CONDITIONSETTING_EVALUATEEXISTSCONDITION('Multicurrency');
if @MULTICURRENCYENABLED = 0
set @CURRENCYCODE = 0
if @CURRENCYCODE = 1
set @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
if @CURRENCYCODE = 3
begin
set @CURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID);
if @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()
set @CURRENCYCODE = 1;
end
;with
[CONSTITUENT_CTE] as
(
select @CONSTITUENTID [ID]
union -- Check security against Constituent Recognition View Form
select ID from dbo.UFN_GROUP_GETCURRENTMEMBERS(@CONSTITUENTID, @CURRENTAPPUSERID, '0a58f120-563e-485d-99d4-e5bc76202f88', 0)
union
select ID from dbo.UFN_CONSTITUENT_GETGROUPS(@CONSTITUENTID) where dbo.UFN_CONSTITUENT_ISHOUSEHOLD(ID) = 1
)
select
CONSTITUENTRECOGNITION.ID,
CONSTITUENTRECOGNITION.STATUSCODE,
RECOGNITIONPROGRAM.NAME as RECOGNITIONPROGRAM,
RECOGNITIONLEVEL.NAME as RECOGNITIONLEVEL,
RECOGNITIONPROGRAM.TYPECODE,
(
select min(JOINDATE) from dbo.CONSTITUENTRECOGNITION CR
where CR.RECOGNITIONPROGRAMID = CONSTITUENTRECOGNITION.RECOGNITIONPROGRAMID
and CR.CONSTITUENTID = @CONSTITUENTID
) as JOINDATE,
CONSTITUENTRECOGNITION.JOINDATE as DATEACHIEVED,
CONSTITUENTRECOGNITION.EXPIRATIONDATE,
case @CURRENCYCODE
when 0 then CONSTITUENTRECOGNITION.TOTALAMOUNT
when 3 then
case
when CONSTITUENTRECOGNITION.BASECURRENCYID = @CURRENCYID
then CONSTITUENTRECOGNITION.TOTALAMOUNT
else
dbo.UFN_CURRENCY_CONVERT(CONSTITUENTRECOGNITION.TOTALAMOUNT, dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTINCLUDEEXPIRED(CONSTITUENTRECOGNITION.BASECURRENCYID, @CURRENCYID, CONSTITUENTRECOGNITION.JOINDATE, 1, null))
end
when 1 then CONSTITUENTRECOGNITION.ORGANIZATIONTOTALAMOUNT
end as TOTALAMOUNT,
dbo.UFN_CONSTITUENT_BUILDNAME(CONSTITUENTRECOGNITION.CONSTITUENTID) as CONSTITUENT,
case
when (CONSTITUENTRECOGNITION.STATUSCODE = 0 and CURRENTRECOGNITIONPROGRAM.EXPIRED = 1) then 'Lapsed'
else CONSTITUENTRECOGNITION.STATUS
end as STATUS,
case when RECOGNITIONLEVEL.AMOUNT <> (select MAX(AMOUNT) from dbo.RECOGNITIONLEVEL where RECOGNITIONPROGRAMID = RECOGNITIONPROGRAM.ID)
then (
select
case @CURRENCYCODE
when 1 then CUR.AMOUNT - CONSTITUENTRECOGNITION.ORGANIZATIONTOTALAMOUNT
when 3 then
case
when CONSTITUENTRECOGNITION.BASECURRENCYID = @CURRENCYID
then CUR.AMOUNT - CONSTITUENTRECOGNITION.TOTALAMOUNT
else
dbo.UFN_CURRENCY_CONVERT(CUR.AMOUNT, dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTINCLUDEEXPIRED(CONSTITUENTRECOGNITION.BASECURRENCYID,@CURRENCYID,CONSTITUENTRECOGNITION.JOINDATE,1,null))
- dbo.UFN_CURRENCY_CONVERT(CONSTITUENTRECOGNITION.TOTALAMOUNT, dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTINCLUDEEXPIRED(CONSTITUENTRECOGNITION.BASECURRENCYID,@CURRENCYID,CONSTITUENTRECOGNITION.JOINDATE,1,null))
end
else CUR.AMOUNT - CONSTITUENTRECOGNITION.TOTALAMOUNT
end
from
(
select
case @CURRENCYCODE
when 1 then min(RL.ORGANIZATIONAMOUNT)
else min(RL.AMOUNT)
end as AMOUNT
from dbo.RECOGNITIONLEVEL RL
inner join dbo.CONSTITUENTRECOGNITION CR on CR.RECOGNITIONPROGRAMID = RL.RECOGNITIONPROGRAMID
inner join [CONSTITUENT_CTE] on [CONSTITUENT_CTE].ID = CR.CONSTITUENTID
where
CR.JOINDATE = (
select max(JOINDATE) from dbo.CONSTITUENTRECOGNITION CR2
where CR2.CONSTITUENTID = CONSTITUENTRECOGNITION.CONSTITUENTID
and CR2.RECOGNITIONPROGRAMID = CONSTITUENTRECOGNITION.RECOGNITIONPROGRAMID
)
and RL.ID not in (
select RECOGNITIONLEVELID from dbo.CONSTITUENTRECOGNITIONDECLINEDLEVEL CRDL
where CR.RECOGNITIONPROGRAMID = CRDL.RECOGNITIONPROGRAMID
and CR.CONSTITUENTID = CRDL.CONSTITUENTID
)
and --amount in RECOGNITIONLEVEL greater than amount in CONSTITUENTRECOGNITION,
--taking into account whether we are measuring org amount or total amount
(
(case @CURRENCYCODE
when 1 then RL.ORGANIZATIONAMOUNT
else case
when CR.BASECURRENCYID = RL.BASECURRENCYID
then RL.AMOUNT
else
dbo.UFN_CURRENCY_CONVERT(RL.AMOUNT,dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTINCLUDEEXPIRED(RL.BASECURRENCYID,CR.BASECURRENCYID,CR.JOINDATE,1,null))
end
end) >
(case @CURRENCYCODE
when 1 then CONSTITUENTRECOGNITION.ORGANIZATIONTOTALAMOUNT
else CONSTITUENTRECOGNITION.TOTALAMOUNT
end)
)
and CR.RECOGNITIONPROGRAMID = CONSTITUENTRECOGNITION.RECOGNITIONPROGRAMID
and RL.ISACTIVE = 1
) CUR
)
else null
end as AMOUNTNEXT,
SITE.NAME as SITE,
case @CURRENCYCODE
when 0 then CONSTITUENTRECOGNITION.BASECURRENCYID
else @CURRENCYID
end as BASECURRENCYID
from dbo.UFN_CONSTITUENT_GETCURRENTRECOGNITIONPROGRAMS(@CURRENTDATE) as CURRENTRECOGNITIONPROGRAM
inner join CONSTITUENT_CTE on CURRENTRECOGNITIONPROGRAM.CONSTITUENTID = CONSTITUENT_CTE.ID
inner join dbo.CONSTITUENTRECOGNITION on CONSTITUENTRECOGNITION.ID = CURRENTRECOGNITIONPROGRAM.ID
inner join dbo.RECOGNITIONPROGRAM on CONSTITUENTRECOGNITION.RECOGNITIONPROGRAMID = RECOGNITIONPROGRAM.ID
inner join dbo.RECOGNITIONLEVEL on RECOGNITIONLEVEL.ID = CONSTITUENTRECOGNITION.RECOGNITIONLEVELID
left join dbo.SITE on SITE.ID = RECOGNITIONPROGRAM.SITEID
where
(dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[RECOGNITIONPROGRAM].[SITEID] or (SITEID is null and [RECOGNITIONPROGRAM].[SITEID] is null)))
and
(
@SITEFILTERMODE = 0
or RECOGNITIONPROGRAM.SITEID in (select SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED))
or @CURRENTAPPUSERID is null
)
order by CONSTITUENTRECOGNITION.EXPIRATIONDATE desc;