UFN_CONSTITUENT_GETCURRENTRECOGNITIONPROGRAMS
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CURRENTDATE | datetime | IN |
Definition
Copy
CREATE function dbo.UFN_CONSTITUENT_GETCURRENTRECOGNITIONPROGRAMS
(
@CURRENTDATE datetime
)
returns table
as
return
(
with
[PROGRAMS] as
(
select
CONSTITUENTRECOGNITION.RECOGNITIONPROGRAMID,
case when max(EXPIRATIONDATE) is null or max(EXPIRATIONDATE) >= @CURRENTDATE then 0 else 1 end [EXPIRED],
CONSTITUENTID
from dbo.CONSTITUENTRECOGNITION
group by RECOGNITIONPROGRAMID, CONSTITUENTID
),
[EXPIRATIONS] as
(
select
CONSTITUENTRECOGNITION.ID,
CONSTITUENTRECOGNITION.RECOGNITIONPROGRAMID,
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
)
select
LEVEL.ID,
PROGRAMS.EXPIRED,
PROGRAMS.CONSTITUENTID
from [PROGRAMS]
cross apply
(
select top 1 [EXPIRATIONS].ID
from [EXPIRATIONS]
where
[PROGRAMS].RECOGNITIONPROGRAMID = [EXPIRATIONS].RECOGNITIONPROGRAMID and
[PROGRAMS].CONSTITUENTID = [EXPIRATIONS].CONSTITUENTID and
(
([PROGRAMS].EXPIRED = 0 and [EXPIRATIONS].EXPIRED = 0)
or ([PROGRAMS].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,
[EXPIRATIONS].JOINDATE desc, [EXPIRATIONS].RECOGNITIONLEVELAMOUNT desc
) [LEVEL]
)