UFN_QUERY_RECURRINGGIFTACTIVITY
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@INSTALLMENTSFILTERMODE | tinyint | IN | |
@AMENDMENTSFILTERMODE | tinyint | IN |
Definition
Copy
CREATE function dbo.UFN_QUERY_RECURRINGGIFTACTIVITY (
@ID uniqueidentifier,
@INSTALLMENTSFILTERMODE tinyint = 0,
@AMENDMENTSFILTERMODE tinyint = 0
)
returns table
as
return
with INSTALLMENT_BASE as (
select RGI.ID,
'I:'+ cast(RGI.ID as nvarchar(36)) DETAILID,
RGI.DATE,
RGI.TRANSACTIONAMOUNT AMOUNT,
dbo.UFN_RECURRINGGIFTINSTALLMENT_GETINSTALLMENTBALANCE(RGI.ID) BALANCE,
RGI.TRANSACTIONCURRENCYID,
RGI.STATUSCODE,
RGI.STATUS,
(select max(TYPECODE)
from dbo.RECURRINGGIFTWRITEOFF W
inner join dbo.RECURRINGGIFTINSTALLMENTWRITEOFF IW on W.ID = IW.WRITEOFFID
where RECURRINGGIFTINSTALLMENTID = RGI.ID) WRITEOFFTYPECODE,
--
-- Details column logic:
-- No activity - blank
-- Skipped - the Skip reason
-- Past due - the most recent CC/DD rejection code/message, otherwise, same logic as below
-- Otherwise:
-- If only a single payment or write-off has been applied, the Details column for that record (see UFN_RECURRINGGIFTINSTALLMENTACTIVITY).
-- If multiple records of a single type have been applied, "Multiple <x> applied", where <x> is the type of record.
-- If both payments and write-offs have been applied, "Partially paid and partially written off".
(select isnull(nullif(d.DETAILS,''),
(select case when count(*)=0 then null
when count(*)=1 then max(DETAILS)
when count(*)=2 and min(TYPECODE) = 2 and max(TYPECODE) = 9 then 'Paid (amount changed)'
when min(TYPECODE) = max(TYPECODE) then 'Multiple ' + case min(TYPECODE) when 2 then 'payments' else 'write-offs' end + ' applied'
else
case cast(max(case TYPECODE when 2 then 1 else 0 end) as nvarchar(1)) +
cast(max(case TYPECODE when 3 then 1 else 0 end) as nvarchar(1)) +
cast(max(case TYPECODE when 9 then 1 else 0 end) as nvarchar(1))
when '110' then 'Partially paid and partially written off'
when '111' then 'Partially paid and partially written off (amount changed)'
when '101' then 'Multiple payments applied (amount changed)'
when '011' then 'Written off and amount changed'
end
end
from dbo.UFN_RECURRINGGIFTINSTALLMENTACTIVITY(ID)
where TYPECODE in(2,3,9)))
from (select case
when RGI.STATUSCODE = 3 then (select DETAILS from dbo.UFN_RECURRINGGIFTINSTALLMENTACTIVITY(ID) where TYPECODE = 4)
when RGI.STATUSCODE = 1 then (select DETAILS from dbo.UFN_RECURRINGGIFTINSTALLMENTACTIVITY(ID) where TYPECODE = 1)
end DETAILS) d
) DETAILS
from dbo.RECURRINGGIFTINSTALLMENT RGI
where REVENUEID = @ID
union all
select null,
'M:'+cast(R.ID as nvarchar(36))+':'+convert(nvarchar(8),I.DATE,112),
I.DATE,
R.TRANSACTIONAMOUNT,
R.TRANSACTIONAMOUNT,
R.TRANSACTIONCURRENCYID,
0,
'Expected',
null,
null
from dbo.FINANCIALTRANSACTION R
cross apply dbo.UFN_RECURRINGGIFT_GETMISSINGINSTALLMENTS(R.ID) I
where R.ID = @ID
),
INSTALLMENTS as (
select ID,
DETAILID,
DATE,
AMOUNT,
BALANCE,
TRANSACTIONCURRENCYID,
STATUSCODE,
STATUS,
WRITEOFFTYPECODE,
row_number() over(order by DATE) INSTALLMENTNUMBER,
-- hide the skip option if the installment is skipped or has any payments or write-offs applied to it,
-- if installment is past due (statuscode = 1)
-- if the installment date is earlier than 5 days in the past,
-- or if any later installments have skips, payments, or write-offs (bug 441402)
case when BALANCE < AMOUNT or DATE < dateadd(d,-5,cast(getdate() as date)) or STATUSCODE = 1
or exists(select 'x' from dbo.RECURRINGGIFTINSTALLMENT i where i.REVENUEID = @ID and i.DATE > b.DATE and dbo.UFN_RECURRINGGIFTINSTALLMENT_GETINSTALLMENTBALANCE(i.ID) < i.AMOUNT) then 1
else 0 end HIDESKIP,
DETAILS
from INSTALLMENT_BASE b
),
AMENDMENTS as (
select a.ID,
'A:'+cast(a.ID as nvarchar(36)) DETAILID,
a.DATE,
a.AMENDMENTTYPE +
case
when a.AMENDMENTTYPECODE = 1 then ' to ' + a.STATUS
when a.AMENDMENTTYPECODE = 2 and a.REVENUEDEVELOPMENTFUNCTIONID is not null then ' - ' + REVENUEDEVELOPMENTFUNCTIONCODE.DESCRIPTION
else ''
end ACTIVITY,
case a.AMENDMENTTYPECODE
when 1 then case when a.STATUSCHANGETYPECODE = 0 then RECURRINGGIFTSTATUSREASONCODE.DESCRIPTION else STATUSCHANGETYPE end
/*when 2 then
case
when a.TRANSACTIONAMOUNT <> a.PREVIOUSTRANSACTIONAMOUNT then
case when a.FREQUENCYCODE <> a.PREVIOUSFREQUENCYCODE then 'From ' + cast(a.PREVIOUSTRANSACTIONAMOUNT as nvarchar(14)) + ' ' + lower(a.PREVIOUSFREQUENCY) + ' to ' + cast(a.TRANSACTIONAMOUNT as nvarchar(14)) + ' ' + lower(a.FREQUENCY)
else 'From ' + cast(a.PREVIOUSTRANSACTIONAMOUNT as nvarchar(14)) + ' to ' + cast(a.TRANSACTIONAMOUNT as nvarchar(14))
end
when a.FREQUENCYCODE <> a.PREVIOUSFREQUENCYCODE then 'From ' + lower(a.PREVIOUSFREQUENCY) + ' to ' + lower(a.PREVIOUSFREQUENCY)
end*/
when 3 then
case when a.PAYMENTMETHODCODE <> a.PREVIOUSPAYMENTMETHODCODE then 'From ' + lower(a.PREVIOUSPAYMENTMETHOD) + ' to ' + lower(a.PAYMENTMETHOD)
when a.PAYMENTMETHODCODE <> 9 then 'New ' + lower(a.PAYMENTMETHOD) + ' information'
end
when 4 then
'From ' + isnull(PREVIOUSCONSTITUENT.NAME, 'Former gift owner') + ' to ' + isnull(CONSTITUENT.NAME, 'Former gift owner')
end DETAILS,
a.DATEADDED
from dbo.RECURRINGGIFTAMENDMENT a
left join dbo.RECURRINGGIFTSTATUSREASONCODE on RECURRINGGIFTSTATUSREASONCODE.ID = a.RECURRINGGIFTSTATUSREASONCODEID
left join dbo.REVENUEDEVELOPMENTFUNCTION on REVENUEDEVELOPMENTFUNCTION.ID = a.REVENUEDEVELOPMENTFUNCTIONID
left join dbo.REVENUEDEVELOPMENTFUNCTIONCODE on REVENUEDEVELOPMENTFUNCTIONCODE.ID = REVENUEDEVELOPMENTFUNCTION.REVENUEDEVELOPMENTFUNCTIONCODEID
left join dbo.CONSTITUENT PREVIOUSCONSTITUENT on PREVIOUSCONSTITUENT.ID = a.PREVIOUSCONSTITUENTID
left join dbo.CONSTITUENT on CONSTITUENT.ID = a.CONSTITUENTID
where a.FINANCIALTRANSACTIONID = @ID
and (case AMENDMENTTYPECODE when 0 then 0 else AMENDMENTTYPECODE + 1 end = @AMENDMENTSFILTERMODE or @AMENDMENTSFILTERMODE = 0)
),
ALL_ACTIVITY as (
select ID,
DETAILID,
DATE,
'Installment ' + cast(INSTALLMENTNUMBER as nvarchar(4)) + ' - ' + STATUS as ACTIVITY,
AMOUNT,
BALANCE,
DETAILS,
TRANSACTIONCURRENCYID,
2 ACTIVITYTYPECODE,
null DATEADDED,
STATUSCODE,
WRITEOFFTYPECODE,
INSTALLMENTNUMBER,
HIDESKIP
from INSTALLMENTS
where STATUSCODE = case @INSTALLMENTSFILTERMODE when 0 then STATUSCODE when 1 then 99 else @INSTALLMENTSFILTERMODE-2 end
union all
select ID,
DETAILID,
DATE,
ACTIVITY,
null,
null,
DETAILS,
null,
case when ACTIVITY = 'Added' then 1 else 3 end ACTIVITYTYPECODE,
DATEADDED,
99 STATUSCODE,
null WRITEOFFTYPECODE,
null INSTALLMENTNUMBER,
1 HIDESKIP
from AMENDMENTS
)
select ID,
DETAILID,
DATE,
ACTIVITY,
AMOUNT,
BALANCE,
DETAILS,
TRANSACTIONCURRENCYID,
row_number() over(order by DATE, ACTIVITYTYPECODE, DATEADDED) SEQ,
STATUSCODE,
WRITEOFFTYPECODE,
INSTALLMENTNUMBER,
HIDESKIP
from ALL_ACTIVITY