UFN_CONSTITUENT_GETCURRENTRECOGNITIONS
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CURRENTDATE | datetime | IN | |
@RECOGNITIONPROGRAMID | uniqueidentifier | IN |
Definition
Copy
create function dbo.UFN_CONSTITUENT_GETCURRENTRECOGNITIONS
(
@CURRENTDATE datetime,
@RECOGNITIONPROGRAMID uniqueidentifier
)
returns table
as
return
(
with
[PROGRAMRECOGNITIONS] as
(
select
case when max(EXPIRATIONDATE) is null or max(EXPIRATIONDATE) >= @CURRENTDATE then 0 else 1 end [EXPIRED],
CONSTITUENTID
from dbo.CONSTITUENTRECOGNITION
where CONSTITUENTRECOGNITION.RECOGNITIONPROGRAMID = @RECOGNITIONPROGRAMID
group by CONSTITUENTID
),
[RECOGNITIONLEVELS] as
(
select
CONSTITUENTRECOGNITION.ID,
CONSTITUENTRECOGNITION.JOINDATE,
case when CONSTITUENTRECOGNITION.EXPIRATIONDATE is null or CONSTITUENTRECOGNITION.EXPIRATIONDATE >= @CURRENTDATE then 0 else 1 end [EXPIRED],
CONSTITUENTRECOGNITION.CONSTITUENTID,
CONSTITUENTRECOGNITION.STATUSCODE,
RECOGNITIONLEVEL.AMOUNT as RECOGNITIONLEVELAMOUNT
from dbo.CONSTITUENTRECOGNITION
inner join dbo.RECOGNITIONLEVEL on RECOGNITIONLEVEL.ID = CONSTITUENTRECOGNITION.RECOGNITIONLEVELID
where CONSTITUENTRECOGNITION.RECOGNITIONPROGRAMID = @RECOGNITIONPROGRAMID
)
select
TOPLEVEL.ID,
PROGRAMRECOGNITIONS.EXPIRED,
PROGRAMRECOGNITIONS.CONSTITUENTID
from [PROGRAMRECOGNITIONS]
cross apply
(
select top 1 [RECOGNITIONLEVELS].ID
from [RECOGNITIONLEVELS]
where
[PROGRAMRECOGNITIONS].CONSTITUENTID = [RECOGNITIONLEVELS].CONSTITUENTID and
(
([PROGRAMRECOGNITIONS].EXPIRED = 0 and [RECOGNITIONLEVELS].EXPIRED = 0)
or ([PROGRAMRECOGNITIONS].EXPIRED = 1)
)
order by
-- Give priority to levels that aren't Inactive (Merge). Levels set to that status should only be used
-- if no other statuses for a constituent exist
case
when STATUSCODE <> 3 then 0 -- 3=Inactive (Merge)
else 1
end asc,
[RECOGNITIONLEVELS].JOINDATE desc, [RECOGNITIONLEVELS].RECOGNITIONLEVELAMOUNT desc
) [TOPLEVEL]
)