USP_BANKACCOUNTDISBURSEMENTS_VOID

Handles voiding multiple checks

Parameters

Parameter Parameter Type Mode Description
@BANKACCOUNTTRANSACTIONIDS UDT_GENERICID IN
@REVERSALPOSTDATE datetime IN
@REVERSALPOSTDATETYPECODE tinyint IN
@VOIDDATE datetime IN
@VOIDDATETYPECODE tinyint IN
@CHANGEAGENTID uniqueidentifier IN
@SCHEDULEIDSNOTTODELETE UDT_GENERICID IN

Definition

Copy

        CREATE procedure dbo.USP_BANKACCOUNTDISBURSEMENTS_VOID(
    @BANKACCOUNTTRANSACTIONIDS UDT_GENERICID readonly
    ,@REVERSALPOSTDATE datetime
    ,@REVERSALPOSTDATETYPECODE tinyint
    ,@VOIDDATE datetime
    ,@VOIDDATETYPECODE tinyint
    ,@CHANGEAGENTID uniqueidentifier
    ,@SCHEDULEIDSNOTTODELETE UDT_GENERICID readonly
    )
as

    set nocount on;

    declare @CURRENTDATE datetime;
    set @CURRENTDATE = getdate();

    if @CHANGEAGENTID is null  
        exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
    if @REVERSALPOSTDATE is null
        set @REVERSALPOSTDATE = @CURRENTDATE;
    if @VOIDDATE is null
        set @VOIDDATE = @CURRENTDATE;

    begin try

        -- update bank account transaction for the check

        update dbo.BANKACCOUNTTRANSACTION set
            VOIDDATE = @VOIDDATE,        
            STATUSCODE = 4,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
        where ID in 
            (select ID from @BANKACCOUNTTRANSACTIONIDS);

        -- if the check has not been posted set the poststatuscode on the BAT to do not post

        update dbo.BANKACCOUNTTRANSACTION set
            POSTSTATUSCODE = 2
        where POSTSTATUSCODE = 1 and ID in 
            (select ID from @BANKACCOUNTTRANSACTIONIDS);

        -- if it has not been posted then

        -- update the associated financial transaction to do not post 

        update dbo.FINANCIALTRANSACTION set
            FINANCIALTRANSACTION.POSTSTATUSCODE = 3
            ,FINANCIALTRANSACTION.POSTDATE = null
            ,FINANCIALTRANSACTION.CHANGEDBYID = @CHANGEAGENTID
            ,FINANCIALTRANSACTION.DATECHANGED = @CURRENTDATE
        where FINANCIALTRANSACTION.ID in
            (select FT.ID from 
                dbo.FINANCIALTRANSACTION FT 
            where FT.ID in (select ID from @BANKACCOUNTTRANSACTIONIDS)
                and FT.POSTSTATUSCODE = 1);


        -- update the financial transaction application to deleted status

        update dbo.FINANCIALTRANSACTIONAPPLICATION set
            FINANCIALTRANSACTIONAPPLICATION.STATUSCODE = 2 
            ,FINANCIALTRANSACTIONAPPLICATION.CHANGEDBYID = @CHANGEAGENTID
            ,FINANCIALTRANSACTIONAPPLICATION.DATECHANGED = @CURRENTDATE
        where FINANCIALTRANSACTIONAPPLICATION.ID in 
            (select FTA.ID 
                from dbo.BANKACCOUNTTRANSACTION BAT
                join dbo.FINANCIALTRANSACTION FT on BAT.ID  = FT.ID
                join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FT.ID = FTA.FINANCIALTRANSACTIONID
            where BAT.ID in (select ID from @BANKACCOUNTTRANSACTIONIDs))

        --Get all schedules with all of their applications marked deleted

        declare @FTStoDelete table (ID uniqueidentifier);
        insert into @FTStoDelete
        select FTS.ID
        from dbo.FINANCIALTRANSACTIONSCHEDULE FTS
        inner join (select FTS1.ID, COUNT(FTA.ID) [FTACOUNT]
            from dbo.FINANCIALTRANSACTIONSCHEDULE FTS1
            inner join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FTS1.ID = FTA.FINANCIALTRANSACTIONSCHEDULEID and FTA.TYPECODE = 0
            where FTS1.ID in (select FTA.FINANCIALTRANSACTIONSCHEDULEID
                from dbo.FINANCIALTRANSACTIONAPPLICATION FTA
                inner join dbo.BANKACCOUNTTRANSACTION BAT on BAT.ID = FTA.FINANCIALTRANSACTIONID
                where BAT.ID in (select ID from @BANKACCOUNTTRANSACTIONIDs))
                group by FTS1.ID) as FTACOUNT on FTACOUNT.ID = FTS.ID
        inner join (select FTS1.ID, COUNT(FTA.ID) [FTACOUNT]
            from dbo.FINANCIALTRANSACTIONSCHEDULE FTS1
            inner join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FTS1.ID = FTA.FINANCIALTRANSACTIONSCHEDULEID and FTA.TYPECODE = 0 and FTA.STATUSCODE = 2
            where FTS1.ID in (select FTA.FINANCIALTRANSACTIONSCHEDULEID
                from dbo.FINANCIALTRANSACTIONAPPLICATION FTA
                inner join dbo.BANKACCOUNTTRANSACTION BAT on BAT.ID = FTA.FINANCIALTRANSACTIONID
                where BAT.ID in (select ID from @BANKACCOUNTTRANSACTIONIDs))
                group by FTS1.ID) as DELETEDFTA on DELETEDFTA.ID = FTS.ID
        where FTACOUNT.FTACOUNT = DELETEDFTA.FTACOUNT and FTS.ID not in (select ID from @SCHEDULEIDSNOTTODELETE)

        --Mark all schedules having all of their applications marked as deleted to deleted.

        update dbo.FINANCIALTRANSACTIONSCHEDULE set
            DELETED = 1
            ,CHANGEDBYID = @CHANGEAGENTID
            ,DATECHANGED = @CURRENTDATE
        where ID in (select ID from @FTStoDelete);

        --Create duplicates of the schedules that were marked as deleted.

        insert into dbo.FINANCIALTRANSACTIONSCHEDULE(
            ID
            ,FINANCIALTRANSACTIONID
            ,AMOUNT
            ,DUEDATE
            ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        select
            NEWID()
            ,FTS.FINANCIALTRANSACTIONID
            ,FTS.AMOUNT
            ,FTS.DUEDATE
            ,FTS.ADDEDBYID, FTS.CHANGEDBYID, FTS.DATEADDED, FTS.DATECHANGED
        from dbo.FINANCIALTRANSACTIONSCHEDULE FTS
        where FTS.ID in (select ID from @FTStoDelete);

        --Mark all invoices and credit memos associated with the disbursements as not having a zero balance

        update dbo.INVOICE set
            ZEROBALANCE = 0
            ,CHANGEDBYID = @CHANGEAGENTID
            ,DATECHANGED = @CURRENTDATE
        from dbo.INVOICE I
        inner join dbo.FINANCIALTRANSACTIONSCHEDULE FTS on FTS.FINANCIALTRANSACTIONID = I.ID
        inner join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FTA.FINANCIALTRANSACTIONSCHEDULEID = FTS.ID
        where FTA.FINANCIALTRANSACTIONID in (select ID from @BANKACCOUNTTRANSACTIONIDs)

        update dbo.CREDITMEMO set
            ZEROBALANCE = 0
            ,CHANGEDBYID = @CHANGEAGENTID
            ,DATECHANGED = @CURRENTDATE
        from dbo.CREDITMEMO CM
        inner join dbo.FINANCIALTRANSACTIONSCHEDULE FTS on FTS.FINANCIALTRANSACTIONID = CM.ID
        inner join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FTA.FINANCIALTRANSACTIONSCHEDULEID = FTS.ID
        where FTA.FINANCIALTRANSACTIONID in (select ID from @BANKACCOUNTTRANSACTIONIDs)


        /* TODO: Once we have post and we have a posted check, we need to
            copy the check FT and set the parent ID of the new FT to point
            to the original FT. If this is from the disbursement page (1 check)
            set the post date and status to the selected post date and status,
            something like this below but create a new SP_FINANCIALTRANSACTION_ADD
            that can accept multiple IDs.
                exec dbo.SP_FINANCIALTRANSACTION_ADD     
                    @CHANGEAGENTID,
                    @CONSTITUENTID,
                    @NUMBER,
                    254,
                    @AMOUNT,
                    @DATE,
                    @REVERSALDATE,
                    @REVERSALSTATUSCODE,
                    @DESCRIPTION,
                    null,
                    @INVOICEID;
        */

        -- Insert "voided" records into the history tab

        insert into dbo.DISBURSEMENTHISTORY
      (
          ID
          ,FINANCIALTRANSACTIONID
          ,ACTIONCODE
          ,ORIGINALNUMBER
        -- Standard stuff

          ,DATEADDED
          ,DATECHANGED
          ,CHANGEDBYID
          ,ADDEDBYID
      )
        select
            NEWID()
            ,BAT.ID
            ,1 --voided

            ,BAT.TRANSACTIONNUMBER
            -- Standard stuff

          ,@CURRENTDATE
          ,@CURRENTDATE
          ,@CHANGEAGENTID
          ,@CHANGEAGENTID
        from @BANKACCOUNTTRANSACTIONIDS BATID
        inner join dbo.BANKACCOUNTTRANSACTION BAT on BAT.ID = BATID.ID

        -- update invoice to reflect a balance since it is no longer paid

        exec dbo.USP_BANKACCOUNTDISBURSEMENTS_INVOICES_UPDATEZEROBALANCE @BANKACCOUNTTRANSACTIONIDS        


    end try
    begin catch
        exec dbo.USP_RAISE_ERROR
        return 1
    end catch