UFN_RECURRINGGIFTINSTALLMENT_GETINSTALLMENTBALANCE_BULK

Returns recurring gift installments and their balances.

Return

Return Type
table

Definition

Copy


            CREATE function dbo.UFN_RECURRINGGIFTINSTALLMENT_GETINSTALLMENTBALANCE_BULK()
            returns table
            as
            return
            (
                with 
                PAYMENT_CTE(RECURRINGGIFTINSTALLMENTID,AMOUNT) as
                (
                    select
                        RECURRINGGIFTINSTALLMENTPAYMENT.RECURRINGGIFTINSTALLMENTID,
                        sum(coalesce(RECURRINGGIFTINSTALLMENTPAYMENT.AMOUNT,0))
                    from
                        dbo.RECURRINGGIFTINSTALLMENTPAYMENT
                    group by
                        RECURRINGGIFTINSTALLMENTPAYMENT.RECURRINGGIFTINSTALLMENTID
                ),
                WRITEOFF_CTE(RECURRINGGIFTINSTALLMENTID,TRANSACTIONAMOUNT, HASSKIP) as
                (
                    select
                        RECURRINGGIFTINSTALLMENTWRITEOFF.RECURRINGGIFTINSTALLMENTID,
                        sum(coalesce(RECURRINGGIFTINSTALLMENTWRITEOFF.TRANSACTIONAMOUNT,0)),
                        max(RECURRINGGIFTWRITEOFF.TYPECODE) HASSKIP
                    from
                        dbo.RECURRINGGIFTINSTALLMENTWRITEOFF 
                    inner join dbo.RECURRINGGIFTWRITEOFF on RECURRINGGIFTINSTALLMENTWRITEOFF.WRITEOFFID = RECURRINGGIFTWRITEOFF.ID
                    group by
                        RECURRINGGIFTINSTALLMENTWRITEOFF.RECURRINGGIFTINSTALLMENTID
                )
                select
                    RECURRINGGIFTINSTALLMENT.ID,
                    RECURRINGGIFTINSTALLMENT.REVENUEID,
                    RECURRINGGIFTINSTALLMENT.DATE,
                    case when WRITEOFF_CTE.HASSKIP = 1 then 0 else (RECURRINGGIFTINSTALLMENT.TRANSACTIONAMOUNT - coalesce(PAYMENT_CTE.AMOUNT,0) - coalesce(WRITEOFF_CTE.TRANSACTIONAMOUNT,0)) end as BALANCE,
                    RECURRINGGIFTINSTALLMENT.STATUSCODE
                from 
                    dbo.RECURRINGGIFTINSTALLMENT
                    -- Using left joins instead of sub-queries because the sub-queries resulted in worse performance

                    left join PAYMENT_CTE on PAYMENT_CTE.RECURRINGGIFTINSTALLMENTID = RECURRINGGIFTINSTALLMENT.ID
                    left join WRITEOFF_CTE on WRITEOFF_CTE.RECURRINGGIFTINSTALLMENTID = RECURRINGGIFTINSTALLMENT.ID            
            )