USP_DATALIST_RECURRINGGIFTINSTALLMENTHISTORY

A datalist of recurring gift installments and activity.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@PAYMENTSWRITEOFFSONLY bit IN Payments/Write-offs only

Definition

Copy


CREATE procedure dbo.USP_DATALIST_RECURRINGGIFTINSTALLMENTHISTORY(
    @ID uniqueidentifier,
    @PAYMENTSWRITEOFFSONLY bit = 0
)
as
    set nocount on;

    declare @HISTORY table (ID uniqueidentifier,
                            PARENTID uniqueidentifier,
                            ACTIVITYTYPE nvarchar(11),
                            AMOUNT money,
                            BALANCE money,
                            DATE date,
                            PAYMENTID uniqueidentifier,
                            WRITEOFFID uniqueidentifier,
                            TRANSACTIONCURRENCYID uniqueidentifier,
              CHILDORPARENTID uniqueidentifier)

    insert into @HISTORY
    -- existing installments

    select ID,
           null PARENTID,
           'Installment',
           TRANSACTIONAMOUNT,
           dbo.UFN_RECURRINGGIFTINSTALLMENT_GETINSTALLMENTBALANCE(ID),
           DATE,
           null,
           null,
           TRANSACTIONCURRENCYID,
       ID as CHILDORPARENTID
    from dbo.RECURRINGGIFTINSTALLMENT
    where REVENUEID = @ID
    and @PAYMENTSWRITEOFFSONLY = 0
    union all
    -- payments

    select null,
           RECURRINGGIFTINSTALLMENTPAYMENT.RECURRINGGIFTINSTALLMENTID,
           'Payment',
           RECURRINGGIFTINSTALLMENTPAYMENT.AMOUNT,
           null,
           REVENUE.DATE,
           REVENUE.ID,
           null,
           RECURRINGGIFTINSTALLMENTPAYMENT.APPLICATIONCURRENCYID,
       RECURRINGGIFTINSTALLMENTPAYMENT.ID as CHILDORPARENTID
    from dbo.RECURRINGGIFTINSTALLMENTPAYMENT
    inner join dbo.RECURRINGGIFTINSTALLMENT on RECURRINGGIFTINSTALLMENT.ID = RECURRINGGIFTINSTALLMENTPAYMENT.RECURRINGGIFTINSTALLMENTID
    left join dbo.REVENUE on REVENUE.ID = RECURRINGGIFTINSTALLMENTPAYMENT.PAYMENTID
    where RECURRINGGIFTINSTALLMENT.REVENUEID = @ID
    union all
    -- writeoffs

    select null,
           RECURRINGGIFTINSTALLMENTWRITEOFF.RECURRINGGIFTINSTALLMENTID,
           'Write-off',
           RECURRINGGIFTINSTALLMENTWRITEOFF.TRANSACTIONAMOUNT,
           null,
           RECURRINGGIFTWRITEOFF.DATE,
           null,
           RECURRINGGIFTINSTALLMENTWRITEOFF.WRITEOFFID,
           RECURRINGGIFTINSTALLMENTWRITEOFF.TRANSACTIONCURRENCYID,
       RECURRINGGIFTINSTALLMENTWRITEOFF.ID as CHILDORPARENTID
    from dbo.RECURRINGGIFTINSTALLMENTWRITEOFF
    inner join dbo.RECURRINGGIFTINSTALLMENT on RECURRINGGIFTINSTALLMENT.ID = RECURRINGGIFTINSTALLMENTWRITEOFF.RECURRINGGIFTINSTALLMENTID
    inner join dbo.RECURRINGGIFTWRITEOFF on RECURRINGGIFTWRITEOFF.ID = RECURRINGGIFTINSTALLMENTWRITEOFF.WRITEOFFID
    where RECURRINGGIFTINSTALLMENT.REVENUEID = @ID;

    -- add missing installments

    if @PAYMENTSWRITEOFFSONLY = 0
    begin
        insert into @HISTORY (ACTIVITYTYPE, AMOUNT, BALANCE, DATE, TRANSACTIONCURRENCYID)
        select 'Installment', R.TRANSACTIONAMOUNT, R.TRANSACTIONAMOUNT, I.DATE, R.TRANSACTIONCURRENCYID
        from REVENUE R
        cross apply dbo.UFN_RECURRINGGIFT_GETMISSINGINSTALLMENTS(R.ID) I
        where R.ID = @ID;

        select ID, PARENTID, ACTIVITYTYPE, AMOUNT, BALANCE, DATE, PAYMENTID, TRANSACTIONCURRENCYID, CHILDORPARENTID
        from @HISTORY
        order by DATE;
    end
    else
        select null, null, min(ACTIVITYTYPE), sum(AMOUNT), null, min(DATE), PAYMENTID, TRANSACTIONCURRENCYID, CHILDORPARENTID
        from @HISTORY
        group by PAYMENTID, WRITEOFFID, TRANSACTIONCURRENCYID, CHILDORPARENTID
        order by min(DATE);