UFN_RECURRINGGIFTINSTALLMENT_GETINSTALLMENTBALANCE_BY_RECURRINGGIFTINSTALLMENTID

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@RECURRINGGIFTINSTALLMENTID uniqueidentifier IN

Definition

Copy


            create function dbo.UFN_RECURRINGGIFTINSTALLMENT_GETINSTALLMENTBALANCE_BY_RECURRINGGIFTINSTALLMENTID
      (
        @RECURRINGGIFTINSTALLMENTID uniqueidentifier
      )
            returns table
            as
            return
            (
                with 
                PAYMENT_CTE(RECURRINGGIFTINSTALLMENTID,AMOUNT) as
                (
                    select
                        RECURRINGGIFTINSTALLMENTPAYMENT.RECURRINGGIFTINSTALLMENTID,
                        sum(coalesce(RECURRINGGIFTINSTALLMENTPAYMENT.AMOUNT,0))
                    from
                        dbo.RECURRINGGIFTINSTALLMENTPAYMENT
          where
            RECURRINGGIFTINSTALLMENTPAYMENT.RECURRINGGIFTINSTALLMENTID = @RECURRINGGIFTINSTALLMENTID
                    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
          where
            RECURRINGGIFTINSTALLMENTWRITEOFF.RECURRINGGIFTINSTALLMENTID = @RECURRINGGIFTINSTALLMENTID
                    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
        where
          RECURRINGGIFTINSTALLMENT.ID = @RECURRINGGIFTINSTALLMENTID
            )