USP_GLTRANSACTION_ADDGIFTAIDREVERSALS

Adds gift aid reversal transactions for the given gift aid record.

Parameters

Parameter Parameter Type Mode Description
@REVENUESPLITGIFTAIDID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@POSTDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_GLTRANSACTION_ADDGIFTAIDREVERSALS
            (
                @REVENUESPLITGIFTAIDID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null,
                @POSTDATE datetime = null
            )
            as
                set nocount on;

                if @CHANGEAGENTID is null
                    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

                if @CHANGEDATE is null
                    set @CHANGEDATE = getdate();

                declare @JOURNAL nvarchar(50);
                set @JOURNAL = 'Blackbaud Enterprise';

                if @POSTDATE is null
                    set @POSTDATE = getdate();

                declare @REVERSALS table(
                    ORIGINALTRANSACTIONID uniqueidentifier,
                    REVERSALTRANSACTIONID uniqueidentifier,
                    ACCOUNT nvarchar(100),
                    AMOUNT money,
                    PROJECT nvarchar(100),
                    REFERENCE nvarchar(255),
                    TRANSACTIONTYPECODE tinyint,
                    BASECURRENCYID uniqueidentifier,
                    TRANSACTIONAMOUNT money,
                    TRANSACTIONCURRENCYID uniqueidentifier,
                    BASEEXCHANGERATEID uniqueidentifier,
                    ORGANIZATIONAMOUNT money,
                    ORGANIZATIONEXCHANGERATEID uniqueidentifier
                );

                insert into @REVERSALS(ORIGINALTRANSACTIONID, REVERSALTRANSACTIONID, ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE,
                                       BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID)
                select 
                    GIFTAIDGLDISTRIBUTION.GLTRANSACTIONID, newid(), ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE,
                    BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID
                from 
                    dbo.GIFTAIDGLDISTRIBUTION 
                where 
                    GIFTAIDGLDISTRIBUTION.REVENUESPLITGIFTAIDID = @REVENUESPLITGIFTAIDID and OUTDATED = 0;

        declare @REVENUEID uniqueidentifier;
                select @REVENUEID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID from dbo.FINANCIALTRANSACTIONLINEITEM inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID where FINANCIALTRANSACTIONLINEITEM.ID = @REVENUESPLITGIFTAIDID and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1;

        declare @ADJUSTMENTPOSTSTATUSCODE tinyint;
        set @ADJUSTMENTPOSTSTATUSCODE = 1;
        select @ADJUSTMENTPOSTSTATUSCODE = POSTSTATUSCODE from dbo.ADJUSTMENT
          where REVENUEID = @REVENUEID;

        if @ADJUSTMENTPOSTSTATUSCODE <> 2
          set @ADJUSTMENTPOSTSTATUSCODE = 1

                --Log reversal GL distributions

                insert into dbo.GLTRANSACTION(ID,REVERSEDGLTRANSACTIONID,TRANSACTIONTYPECODE,ACCOUNT,AMOUNT,PROJECT,REFERENCE,POSTDATE,JOURNAL,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED, POSTSTATUSCODE, GLACCOUNTID,
                                              BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID)
                select 
                    REVERSALTRANSACTIONID, 
                    ORIGINALTRANSACTIONID,
                    case TRANSACTIONTYPECODE when 0 then 1 else 0 end
                    ACCOUNT, 
                    AMOUNT, 
                    PROJECT, 
                    REFERENCE, 
                    dbo.UFN_DATE_GETEARLIESTTIME(@POSTDATE),
                    @JOURNAL,
                    @CHANGEAGENTID
                    @CHANGEAGENTID
                    @CHANGEDATE
                    @CHANGEDATE,
                    @ADJUSTMENTPOSTSTATUSCODE,
                      (select GLACCOUNTID from dbo.GLTRANSACTION where GLTRANSACTION.id = ORIGINALTRANSACTIONID),
                    BASECURRENCYID, 
                    TRANSACTIONAMOUNT, 
                    TRANSACTIONCURRENCYID, 
                    BASEEXCHANGERATEID, 
                    ORGANIZATIONAMOUNT, 
                    ORGANIZATIONEXCHANGERATEID
                from 
                    @REVERSALS

                update JEX set
                    REVENUESPLITGIFTAIDID = @REVENUESPLITGIFTAIDID
                from
                    @REVERSALS R
                    inner join dbo.JOURNALENTRY JE on JE.ID = R.REVERSALTRANSACTIONID
                    inner join dbo.JOURNALENTRY_EXT JEX on JEX.ID = JE.ID

                --Set the REVERSEDATE of the original GL transactions to the current date

                update dbo.GLTRANSACTION
                set 
                    REVERSEDATE = @CHANGEDATE,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CHANGEDATE
        where ID in (select ORIGINALTRANSACTIONID from @REVERSALS)

                --Set the reversed gift aid GL distributions as out of date

                merge into dbo.GIFTAIDGLDISTRIBUTION
                using @REVERSALS REV on GIFTAIDGLDISTRIBUTION.GLTRANSACTIONID = REV.ORIGINALTRANSACTIONID
                when matched then update set 
                    OUTDATED = 1,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CHANGEDATE
        ;                

                --Set the status of the gift aid record to not posted.

                exec dbo.USP_REVENUESPLITGIFTAIDPOSTED_DELETEBYID_WITHCHANGEAGENTID @REVENUESPLITGIFTAIDID, @CHANGEAGENTID;