USP_DATALIST_DISBURSEMENTPROCESS_HISTORY

Lists history of actions for each disbursement in a process.

Parameters

Parameter Parameter Type Mode Description
@DISBURSEMENTPROCESSID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@PAYMENTMETHODCODE tinyint IN Payment method
@STATUSCODE int IN Status

Definition

Copy


CREATE procedure dbo.USP_DATALIST_DISBURSEMENTPROCESS_HISTORY
(
    @DISBURSEMENTPROCESSID uniqueidentifier
    ,@PAYMENTMETHODCODE tinyint = null
    ,@STATUSCODE integer = null
)
as
    set nocount on;

    declare @temp table ([ID] uniqueidentifier, [FINANCIALTRANSACTIONID] uniqueidentifier, [ACTION] nvarchar(100), [ORIGINALNUMBER] int, [CHANGEDNUMBER] int, [FUTUREFINANCIALTRANSACTIONID] uniqueidentifier, [ADDEDBYID] uniqueidentifier, [DATEADDED] datetime);

    insert into @temp
    select H.ID, H.[FINANCIALTRANSACTIONID], H.[ACTION], H.[ORIGINALNUMBER], H.[CHANGEDNUMBER], H.[FUTUREFINANCIALTRANSACTIONID], H.[ADDEDBYID], H.[DATEADDED]
    from dbo.DISBURSEMENTHISTORY H
    left outer join dbo.BANKACCOUNTTRANSACTION_EXT as BATE on H.[FINANCIALTRANSACTIONID] = BATE.ID
    left outer join dbo.DISBURSEMENTPROCESSDISBURSEMENT DPD on H.FINANCIALTRANSACTIONID = DPD.ID
    where BATE.DISBURSEMENTPROCESSID = @DISBURSEMENTPROCESSID or DPD.DISBURSEMENTPROCESSID = @DISBURSEMENTPROCESSID

    update @temp
        set FUTUREFINANCIALTRANSACTIONID = T1.FUTUREFINANCIALTRANSACTIONID
    from @temp T
    inner join (select FINANCIALTRANSACTIONID, FUTUREFINANCIALTRANSACTIONID 
        from @temp where FUTUREFINANCIALTRANSACTIONID is not null) T1 on T1.FINANCIALTRANSACTIONID = T.FINANCIALTRANSACTIONID;

    update @temp
        set FUTUREFINANCIALTRANSACTIONID = null
    where FUTUREFINANCIALTRANSACTIONID not in (select FINANCIALTRANSACTIONID from @temp);

    WITH DisbursementHistoryInfo (ID, FINANCIALTRANSACTIONID, ORIGINALID)
    AS
    (
        select H.ID,  H.FINANCIALTRANSACTIONID, H.FINANCIALTRANSACTIONID
        from @temp H
        where H.FUTUREFINANCIALTRANSACTIONID is null

        union all

        select H.ID, HI.FINANCIALTRANSACTIONID, H.FINANCIALTRANSACTIONID
        from @temp H
        inner join DisbursementHistoryInfo HI on H.FUTUREFINANCIALTRANSACTIONID = HI.ORIGINALID and H.FINANCIALTRANSACTIONID not in (HI.ORIGINALID)
    )

    select DISTINCT FT.ID
        ,ISNULL(cast(BAT.TRANSACTIONNUMBER as nvarchar), 
            (select MAX(CASE WHEN T.CHANGEDNUMBER = 0 
                            THEN T.ORIGINALNUMBER 
                            ELSE T.CHANGEDNUMBER 
                        END
             from @temp T where T.FINANCIALTRANSACTIONID = FT.ID)) CHECKNUMBER
        ,CASE WHEN DPD.ID is not null or BAT.PROCESSING = 1 THEN 'In Process' ELSE CASE WHEN BAT.DELETED = 1 THEN 'Purged' ELSE BAT.STATUS END END [STATUS]
        ,C.NAME
        ,FT.TRANSACTIONAMOUNT [NETAMOUNT]
        ,'Check' PAYMENTMETHOD
        ,'' USERNAME
        ,null DATEADDED
        ,null PARENTID
        ,CASE WHEN BAT.PROCESSING = 0 THEN BAT.ID ELSE NULL END BANKACCOUNTTRANSACTIONID
        ,0 SORTORDER
    ,BAT.DELETED
    from dbo.FINANCIALTRANSACTION FT
    left outer join dbo.DISBURSEMENTPROCESSDISBURSEMENT DPD on DPD.ID = FT.ID and DPD.DISBURSEMENTPROCESSID = @DISBURSEMENTPROCESSID
  left outer join dbo.BANKACCOUNTTRANSACTION_EXT as BATE on BATE.ID = FT.ID and BATE.DISBURSEMENTPROCESSID = @DISBURSEMENTPROCESSID
    left outer join dbo.BANKACCOUNTTRANSACTION BAT on BAT.ID = BATE.ID
    inner join dbo.CONSTITUENT C on C.ID = FT.CONSTITUENTID
    where FT.ID in (select ISNULL(T1.FINANCIALTRANSACTIONID, T.FINANCIALTRANSACTIONID) 
            from @temp T
            left outer join (select Distinct ID, FINANCIALTRANSACTIONID from DisbursementHistoryInfo) T1 on T.ID = T1.ID)
        and ((BAT.DELETED = 0 or BAT.ID is null) or (BAT.DELETED = 1))
        and (@PAYMENTMETHODCODE is null or @PAYMENTMETHODCODE in (0, 1))
        and (@STATUSCODE is null or @STATUSCODE = -1 or (@STATUSCODE = -2 and BAT.STATUSCODE = 4 and BAT.DELETED = 1) or (@STATUSCODE = 0 AND (BAT.ID is null or BAT.PROCESSING = 1)) or @STATUSCODE = BAT.STATUSCODE and BAT.DELETED = 0)

    union all

    select T.ID
        ,CASE WHEN T.CHANGEDNUMBER = 0 THEN CAST(T.ORIGINALNUMBER as nvarchar) ELSE CAST(T.CHANGEDNUMBER as nvarchar) END
        ,T.ACTION
        ,''
        ,null
        ,''
        ,A.USERNAME
        ,T.DATEADDED
        ,ISNULL(T1.FINANCIALTRANSACTIONID, T.FINANCIALTRANSACTIONID) PARENTID
        ,ISNULL(BAT.ID, BAT1.ID)
        ,1 SORTORDER
    ,BAT.DELETED
    from @temp T
    left outer join (select Distinct ID, FINANCIALTRANSACTIONID, ORIGINALID from DisbursementHistoryInfo) T1 on T.ID = T1.ID
    inner join dbo.CHANGEAGENT as A on T.ADDEDBYID = A.ID
    left outer join dbo.BANKACCOUNTTRANSACTION BAT on (BAT.ID = ISNULL(ISNULL(T1.ORIGINALID, T1.FINANCIALTRANSACTIONID), T.FINANCIALTRANSACTIONID) and BAT.PROCESSING = 0
    left outer join dbo.BANKACCOUNTTRANSACTION BAT1 on (BAT.ID = ISNULL(T1.FINANCIALTRANSACTIONID, T.FINANCIALTRANSACTIONID) and BAT.PROCESSING = 0) and BAT.ID is null
    where (@PAYMENTMETHODCODE is null or @PAYMENTMETHODCODE in (0, 1))
        and (@STATUSCODE is null or @STATUSCODE = -1 or (@STATUSCODE = -2 and BAT.STATUSCODE = 4 and BAT.DELETED = 1) or (@STATUSCODE = 0 AND (BAT.ID is null or BAT.PROCESSING = 1)) or @STATUSCODE = BAT.STATUSCODE and BAT.DELETED = 0)
    order by CHECKNUMBER asc, DATEADDED asc, SORTORDER asc