USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY

Stores historical adjustment information for reporting purposes.

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@ADJUSTMENTID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY
            (
                @REVENUEID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier,
                @CHANGEDATE datetime,
                @ADJUSTMENTID uniqueidentifier
            )
            as
            set nocount on;
            /*Before calling this procedure, be sure that you called USP_SAVE_ADJUSTMENT and then save all of the changes to the various revenue tables*/

            declare @ADJUSTMENTCOUNT int

            declare @PREVIOUSADJUSTMENTID uniqueidentifier;
            declare @PREVIOUSADJUSTMENTHISTORYID uniqueidentifier;
            declare @ADJUSTMENTHISTORYID uniqueidentifier; 
            declare @ISNEWREVENUE bit;
            declare @BASECURRENCYID uniqueidentifier;
            declare @TRANSACTIONCURRENCYID uniqueidentifier;
            declare @AMOUNTCHANGED bit;
            declare @SPLITSCHANGED bit;
            declare @REVENUESTREAMSCHANGED bit;
            declare @PAYMENTMETHODCHANGED bit;
            declare @CONSTITUENTCHANGED bit;
            declare @BASERATECHANGED bit;
            declare @ORGANIZATIONRATECHANGED bit;

            declare @EDITINGADJUSTMENT bit;

            declare @REVENUETYPECODE tinyint;

            set @AMOUNTCHANGED = 0;
            set @REVENUESTREAMSCHANGED = 0;
            set @PAYMENTMETHODCHANGED = 0;
            set @CONSTITUENTCHANGED = 0;
            set @BASERATECHANGED = 0;
            set @ORGANIZATIONRATECHANGED = 0;

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

            select @ADJUSTMENTCOUNT = count(ID) 
            from dbo.ADJUSTMENT 
            where ADJUSTMENT.REVENUEID = @REVENUEID 

            select @ADJUSTMENTHISTORYID = ID, @ISNEWREVENUE = ISNEWREVENUE
            from dbo.ADJUSTMENTHISTORY
            where ADJUSTMENTID = @ADJUSTMENTID and REVENUEIDENTIFIER = cast(@REVENUEID as nvarchar(36));

            select @BASECURRENCYID = CURRENCYSET.BASECURRENCYID
                ,@TRANSACTIONCURRENCYID = FT.TRANSACTIONCURRENCYID
            from dbo.FINANCIALTRANSACTION FT
            inner join dbo.PDACCOUNTSYSTEM on FT.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
            inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
            where FT.ID = @REVENUEID;

            /*if this is a new adjustment, there will only be a header row (no details or distributions). Otherwise, it's an edit*/
            if (select count(ID) from dbo.ADJUSTMENTHISTORYDETAIL where ADJUSTMENTHISTORYID = @ADJUSTMENTHISTORYID) = 0 
                    and (select count(ID) from dbo.ADJUSTMENTHISTORYDISTRIBUTION where ADJUSTMENTHISTORYID = @ADJUSTMENTHISTORYID) = 0
                set @EDITINGADJUSTMENT = 0;
            else
                set @EDITINGADJUSTMENT = 1;

            select 
                @REVENUETYPECODE = TYPECODE
            from dbo.FINANCIALTRANSACTION 
            where ID = @REVENUEID;

            if @EDITINGADJUSTMENT = 1 
            begin
                /*If we're editing the adjustment, delete the previous report information so we can recreate it */
                delete from ADJUSTMENTHISTORYDETAIL where ADJUSTMENTHISTORYID = @ADJUSTMENTHISTORYID
            end

            /*Determine what changed by comparing the snapshot to the live data; Note that nothing will have changed for a "new revenue" adjustment since that adjustment hasn't posted yet*/
            if @ISNEWREVENUE = 0 and (select AMOUNT from dbo.ADJUSTMENTHISTORYREVENUETRANSACTION where ID = @ADJUSTMENTHISTORYID
                    <> (select sum(FINANCIALTRANSACTION.BASEAMOUNT) from dbo.FINANCIALTRANSACTION inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID where FINANCIALTRANSACTION.ID = @REVENUEID and FINANCIALTRANSACTION.DELETEDON is null)
                set @AMOUNTCHANGED = 1;
            else
                set @AMOUNTCHANGED = 0;

            if @ISNEWREVENUE = 0 and (select PAYMENTMETHODCODE from dbo.ADJUSTMENTHISTORYREVENUETRANSACTION where ID = @ADJUSTMENTHISTORYID
                    <> (select PAYMENTMETHODCODE from dbo.REVENUEPAYMENTMETHOD where REVENUEID = @REVENUEID)
                set @PAYMENTMETHODCHANGED = 1;
            else
                set @PAYMENTMETHODCHANGED = 0;

            if @ISNEWREVENUE = 0 and @REVENUETYPECODE = 0 /*only payments have revenue streams which can change */
                set @REVENUESTREAMSCHANGED = dbo.UFN_ADJUSTMENTHISTORY_STREAMSCHANGED(@ADJUSTMENTHISTORYID, @REVENUEID);
            else
                set @REVENUESTREAMSCHANGED = 0;

            if @ISNEWREVENUE = 0 and (select CONSTITUENTIDENTIFIER from dbo.ADJUSTMENTHISTORYREVENUETRANSACTION where ID = @ADJUSTMENTHISTORYID)
                    <> (select FINANCIALTRANSACTION.CONSTITUENTID from dbo.FINANCIALTRANSACTION inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID where FINANCIALTRANSACTION.ID = @REVENUEID and FINANCIALTRANSACTION.DELETEDON is null)
                set @CONSTITUENTCHANGED = 1;
            else
                set @CONSTITUENTCHANGED = 0;

            if @ISNEWREVENUE = 0 and (select BASERATE from dbo.ADJUSTMENTHISTORYREVENUETRANSACTION where ID = @ADJUSTMENTHISTORYID
                    <> (select BASERATE.RATE from dbo.FINANCIALTRANSACTION inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID left join dbo.CURRENCYEXCHANGERATE BASERATE on BASERATE.ID = FINANCIALTRANSACTION.BASEEXCHANGERATEID where FINANCIALTRANSACTION.ID = @REVENUEID and FINANCIALTRANSACTION.DELETEDON is null)
                set @BASERATECHANGED = 1;
            else
                set @BASERATECHANGED = 0;

            if @ISNEWREVENUE = 0 and (select ORGANIZATIONRATE from dbo.ADJUSTMENTHISTORYREVENUETRANSACTION where ID = @ADJUSTMENTHISTORYID
                    <> (select ORGANIZATIONRATE.RATE from dbo.FINANCIALTRANSACTION inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID left join dbo.CURRENCYEXCHANGERATE ORGANIZATIONRATE on ORGANIZATIONRATE.ID = FINANCIALTRANSACTION.ORGEXCHANGERATEID where FINANCIALTRANSACTION.ID = @REVENUEID and FINANCIALTRANSACTION.DELETEDON is null)
                set @ORGANIZATIONRATECHANGED = 1;
            else
                set @ORGANIZATIONRATECHANGED = 0;

            /*Log the detail data for this adjustment*/
            if @AMOUNTCHANGED = 1
                insert into dbo.ADJUSTMENTHISTORYDETAIL(ADJUSTMENTHISTORYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, ISMONEY, ADJUSTEDFIELDPREVIOUSMONEYVALUE, ADJUSTEDFIELDADJUSTEDMONEYVALUE, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, TRANSACTIONADJUSTEDFIELDPREVIOUSMONEYVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDMONEYVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSMONEYVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDMONEYVALUE, BASECURRENCYID, TRANSACTIONCURRENCYID)
                    select 
                        @ADJUSTMENTHISTORYID,
                        'Amount',
                        T1.AMOUNT,
                        T3.BASEAMOUNT,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        1,
                        T1.AMOUNT,
                        T3.BASEAMOUNT,
                        T1.TRANSACTIONAMOUNT,
                        T3.TRANSACTIONAMOUNT,
                        T1.TRANSACTIONAMOUNT,
                        T3.TRANSACTIONAMOUNT,
                        T1.ORGANIZATIONAMOUNT,
                        T3.ORGAMOUNT,
                        T1.ORGANIZATIONAMOUNT,
                        T3.ORGAMOUNT,
                        isnull(T4.NONPOSTABLEBASECURRENCYID, @BASECURRENCYID),
                        T3.TRANSACTIONCURRENCYID
                    from dbo.ADJUSTMENTHISTORYREVENUETRANSACTION T1
                        join dbo.ADJUSTMENTHISTORY T2 on T1.ID = T2.ID
                        inner join dbo.FINANCIALTRANSACTION T3 on T3.ID = @REVENUEID
                        inner join dbo.REVENUE_EXT T4 on T3.ID = T4.ID
                    where T1.ID = @ADJUSTMENTHISTORYID;

            if @CONSTITUENTCHANGED = 1
                insert into dbo.ADJUSTMENTHISTORYDETAIL(ADJUSTMENTHISTORYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE)
                    select 
                        @ADJUSTMENTHISTORYID,
                        'Constituent',
                        dbo.UFN_CONSTITUENT_BUILDNAME(CONSTITUENTIDENTIFIER),
                        (select dbo.UFN_CONSTITUENT_BUILDNAME(FINANCIALTRANSACTION.CONSTITUENTID) from dbo.FINANCIALTRANSACTION inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID where FINANCIALTRANSACTION.ID = @REVENUEID and FINANCIALTRANSACTION.DELETEDON is null),
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        dbo.UFN_CONSTITUENT_BUILDNAME(CONSTITUENTIDENTIFIER),
                        (select dbo.UFN_CONSTITUENT_BUILDNAME(FINANCIALTRANSACTION.CONSTITUENTID) from dbo.FINANCIALTRANSACTION inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID where FINANCIALTRANSACTION.ID = @REVENUEID and FINANCIALTRANSACTION.DELETEDON is null),
                        dbo.UFN_CONSTITUENT_BUILDNAME(CONSTITUENTIDENTIFIER),
                        (select dbo.UFN_CONSTITUENT_BUILDNAME(FINANCIALTRANSACTION.CONSTITUENTID) from dbo.FINANCIALTRANSACTION inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID where FINANCIALTRANSACTION.ID = @REVENUEID and FINANCIALTRANSACTION.DELETEDON is null)
                    from dbo.ADJUSTMENTHISTORYREVENUETRANSACTION
                    where ID = @ADJUSTMENTHISTORYID;

            if @PAYMENTMETHODCHANGED = 1
                insert into dbo.ADJUSTMENTHISTORYDETAIL(ADJUSTMENTHISTORYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE)
                    select
                        @ADJUSTMENTHISTORYID,
                        'Payment method',
                        case when [SNAP].PAYMENTMETHODCODE = 0 then 'Cash'
                             when [SNAP].PAYMENTMETHODCODE = 1 then 'Check'
                             when [SNAP].PAYMENTMETHODCODE = 2 then 'Credit card'
                             when [SNAP].PAYMENTMETHODCODE = 3 then 'Direct debit'
                             when [SNAP].PAYMENTMETHODCODE = 4 then 'Stock'
                             when [SNAP].PAYMENTMETHODCODE = 5 then 'Property'
                             when [SNAP].PAYMENTMETHODCODE = 6 then 'Gift-in-kind'
                             when [SNAP].PAYMENTMETHODCODE = 9 then 'None'
                             when [SNAP].PAYMENTMETHODCODE = 10 then 'Other'
                             when [SNAP].PAYMENTMETHODCODE = 11 then 'Standing order'
                             when [SNAP].PAYMENTMETHODCODE = 101 then 'PayPal'
                             when [SNAP].PAYMENTMETHODCODE = 102 then 'Venmo'
                             else 'Unknown' end,
                        REVENUEPAYMENTMETHOD.PAYMENTMETHOD,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        case when [SNAP].PAYMENTMETHODCODE = 0 then 'Cash'
                             when [SNAP].PAYMENTMETHODCODE = 1 then 'Check'
                             when [SNAP].PAYMENTMETHODCODE = 2 then 'Credit card'
                             when [SNAP].PAYMENTMETHODCODE = 3 then 'Direct debit'
                             when [SNAP].PAYMENTMETHODCODE = 4 then 'Stock'
                             when [SNAP].PAYMENTMETHODCODE = 5 then 'Property'
                             when [SNAP].PAYMENTMETHODCODE = 6 then 'Gift-in-kind'
                             when [SNAP].PAYMENTMETHODCODE = 9 then 'None'
                             when [SNAP].PAYMENTMETHODCODE = 10 then 'Other'
                             when [SNAP].PAYMENTMETHODCODE = 11 then 'Standing order'
                             when [SNAP].PAYMENTMETHODCODE = 101 then 'PayPal'
                             when [SNAP].PAYMENTMETHODCODE = 102 then 'Venmo'
                             else 'Unknown' end,
                        REVENUEPAYMENTMETHOD.PAYMENTMETHOD,
                        case when [SNAP].PAYMENTMETHODCODE = 0 then 'Cash'
                             when [SNAP].PAYMENTMETHODCODE = 1 then 'Check'
                             when [SNAP].PAYMENTMETHODCODE = 2 then 'Credit card'
                             when [SNAP].PAYMENTMETHODCODE = 3 then 'Direct debit'
                             when [SNAP].PAYMENTMETHODCODE = 4 then 'Stock'
                             when [SNAP].PAYMENTMETHODCODE = 5 then 'Property'
                             when [SNAP].PAYMENTMETHODCODE = 6 then 'Gift-in-kind'
                             when [SNAP].PAYMENTMETHODCODE = 9 then 'None'
                             when [SNAP].PAYMENTMETHODCODE = 10 then 'Other'
                             when [SNAP].PAYMENTMETHODCODE = 11 then 'Standing order'
                             when [SNAP].PAYMENTMETHODCODE = 101 then 'PayPal'
                             when [SNAP].PAYMENTMETHODCODE = 102 then 'Venmo'
                             else 'Unknown' end,
                        REVENUEPAYMENTMETHOD.PAYMENTMETHOD
                    from dbo.ADJUSTMENTHISTORYREVENUETRANSACTION as [SNAP]
                    inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = @REVENUEID
                    where [SNAP].ID = @ADJUSTMENTHISTORYID

            if @REVENUESTREAMSCHANGED = 1
                insert into dbo.ADJUSTMENTHISTORYDETAIL(ADJUSTMENTHISTORYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE, BASECURRENCYID, TRANSACTIONCURRENCYID)
                    select 
                        @ADJUSTMENTHISTORYID,
                        'Applications',
                        dbo.UFN_ADJUSTMENTHISTORY_GETPREVIOUSSTREAMS_2(@ADJUSTMENTID, 0),
                        dbo.UFN_ADJUSTMENTHISTORY_GETADJUSTEDSTREAMS_2(@ADJUSTMENTID, 0),
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        dbo.UFN_ADJUSTMENTHISTORY_GETPREVIOUSSTREAMS_2(@ADJUSTMENTID, 2),
                        dbo.UFN_ADJUSTMENTHISTORY_GETADJUSTEDSTREAMS_2(@ADJUSTMENTID, 2),
                        dbo.UFN_ADJUSTMENTHISTORY_GETPREVIOUSSTREAMS_2(@ADJUSTMENTID, 1),
                        dbo.UFN_ADJUSTMENTHISTORY_GETADJUSTEDSTREAMS_2(@ADJUSTMENTID, 1),
                        @BASECURRENCYID,
                        @TRANSACTIONCURRENCYID;

            if @BASERATECHANGED = 1
            begin
                declare @OLDBASERATE decimal(20,8);
                select @OLDBASERATE = CURRENCYEXCHANGERATE.RATE 
                from dbo.FINANCIALTRANSACTION REVENUE
                left join dbo.CURRENCYEXCHANGERATE on CURRENCYEXCHANGERATE.ID = REVENUE.BASEEXCHANGERATEID 
                where REVENUE.ID = @REVENUEID                

                insert into dbo.ADJUSTMENTHISTORYDETAIL(ADJUSTMENTHISTORYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE)
                    select 
                        @ADJUSTMENTHISTORYID,
                        'Base exchange rate',
                        ADJUSTMENTHISTORYREVENUETRANSACTION.BASERATE,
                        @OLDBASERATE,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        ADJUSTMENTHISTORYREVENUETRANSACTION.BASERATE,
                        @OLDBASERATE,
                        ADJUSTMENTHISTORYREVENUETRANSACTION.BASERATE,
                        @OLDBASERATE
                    from dbo.ADJUSTMENTHISTORYREVENUETRANSACTION
                    where ID = @ADJUSTMENTHISTORYID;
            end

            if @ORGANIZATIONRATECHANGED = 1
            begin
                declare @OLDORGANIZATIONRATE decimal(20,8);
                select @OLDORGANIZATIONRATE = CURRENCYEXCHANGERATE.RATE 
                from dbo.FINANCIALTRANSACTION
                    inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                    left join dbo.CURRENCYEXCHANGERATE on CURRENCYEXCHANGERATE.ID = FINANCIALTRANSACTION.ORGEXCHANGERATEID
                where FINANCIALTRANSACTION.ID = @REVENUEID
                    and FINANCIALTRANSACTION.DELETEDON is null

                insert into dbo.ADJUSTMENTHISTORYDETAIL(ADJUSTMENTHISTORYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE)
                    select 
                        @ADJUSTMENTHISTORYID,
                        'Organization exchange rate',
                        ADJUSTMENTHISTORYREVENUETRANSACTION.ORGANIZATIONRATE,
                        @OLDORGANIZATIONRATE,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        ADJUSTMENTHISTORYREVENUETRANSACTION.ORGANIZATIONRATE,
                        @OLDORGANIZATIONRATE,
                        ADJUSTMENTHISTORYREVENUETRANSACTION.ORGANIZATIONRATE,
                        @OLDORGANIZATIONRATE
                    from dbo.ADJUSTMENTHISTORYREVENUETRANSACTION
                    where ID = @ADJUSTMENTHISTORYID;
            end

            if @ISNEWREVENUE = 0 --JamesWill No designations could have changed for a new revenue adjustment since it's not been posted yet

                exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_WRITEDESIGNATIONS @ADJUSTMENTHISTORYID, @CHANGEAGENTID, @CHANGEDATE;

            /*Record the GL reversal and adjustment information */
            if @EDITINGADJUSTMENT = 0 /*if this is a new adjustment, store the reversal that will take place*/
            begin
                insert into dbo.ADJUSTMENTHISTORYDISTRIBUTION(ADJUSTMENTHISTORYID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                    select
                        @ADJUSTMENTHISTORYID,
                        0, /*Reversal*/
                        TRANSACTIONTYPECODE,
                        ACCOUNT,
                        PROJECT,
                        REFERENCE,
                        AMOUNT, 
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        TRANSACTIONAMOUNT,
                        ORGANIZATIONAMOUNT,
                        BASECURRENCYID,
                        TRANSACTIONCURRENCYID
                    from dbo.ADJUSTMENTHISTORYDISTRIBUTIONSNAPSHOT
                    where @ISNEWREVENUE = 0 --JamesWill Don't write reversals for new revenue adjustments because they haven't been posted yet and there's nothing to reverse!

                        and ADJUSTMENTHISTORYID = @ADJUSTMENTHISTORYID;

                /*JamesWill 03/12/2008 If this adjustment is for adding a new revenue record to an already posted transaction, some weird things happen. We need to write the GL data to snapshot table so the NEXT 
                    adjustment will be able to reference it in its history. But we need to do that after the previous statement so we don't write reversals to the report that never happened. So write it here. The easiest 
                    way to tell that this is the case is if we didn't in fact, write anything in the past statement since this is the one time that an adjustment won't trigger a reversal.*/
                if @ISNEWREVENUE = 1
                begin
                    --Delete any previous distributions that may have been stored (in case this adjustment is being edited)

                    delete from ADJUSTMENTHISTORYDISTRIBUTIONSNAPSHOT where ADJUSTMENTHISTORYID = @ADJUSTMENTHISTORYID;

                    insert into dbo.ADJUSTMENTHISTORYDISTRIBUTIONSNAPSHOT(ADJUSTMENTHISTORYID, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                    select
                        @ADJUSTMENTHISTORYID,
                        case JE.TRANSACTIONTYPECODE when 0 then 1 else 0 end,
                        coalesce(GLACCOUNT.ACCOUNTNUMBER,JEX.ACCOUNT,''),
                        JEX.PROJECT,
                        JE.COMMENT,
                        JE.BASEAMOUNT,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        JE.TRANSACTIONAMOUNT,
                        JE.ORGAMOUNT,
                        @BASECURRENCYID,
                        JE.TRANSACTIONCURRENCYID
                    from dbo.FINANCIALTRANSACTIONLINEITEM LI
                    inner join dbo.JOURNALENTRY JE on JE.FINANCIALTRANSACTIONLINEITEMID = LI.ID
                    inner join dbo.JOURNALENTRY_EXT JEX on JEX.ID = JE.ID
                    left join dbo.GLACCOUNT on GLACCOUNT.ID = JE.GLACCOUNTID
                    where LI.FINANCIALTRANSACTIONID = @REVENUEID
                        and LI.DELETEDON is null
                        and LI.TYPECODE != 1;
                end
            end

            if @ADJUSTMENTCOUNT > 1 --if this is not the first adjustment, we need to copy our reversal information to be the adjustment information for the last adjustment

            begin 
                select top 1 
                    @PREVIOUSADJUSTMENTID = ID 
                from dbo.ADJUSTMENT 
                where REVENUEID = @REVENUEID
                    and ID <> @ADJUSTMENTID 
                order by TSLONG desc;

                --If there is a previous adjustment, write that same reversal as the "adjusted" portion of the previous adjustment

                if not @PREVIOUSADJUSTMENTID is null
                begin
                    select 
                        @PREVIOUSADJUSTMENTHISTORYID = ID
                    from dbo.ADJUSTMENTHISTORY
                    where ADJUSTMENTID = @PREVIOUSADJUSTMENTID and ISNEWREVENUE = 0

                    if not @PREVIOUSADJUSTMENTHISTORYID is null
                    begin
                        --first delete the previous adjustment record

                        delete from dbo.ADJUSTMENTHISTORYDISTRIBUTION where ADJUSTMENTHISTORYID = @PREVIOUSADJUSTMENTHISTORYID and TYPECODE = 1;

                        --then insert the updated one

                        insert into dbo.ADJUSTMENTHISTORYDISTRIBUTION(ADJUSTMENTHISTORYID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                            select
                                @PREVIOUSADJUSTMENTHISTORYID,
                                1, --Adjustment

                                case TRANSACTIONTYPECODE when 0 then 1 else 0 end,
                                ACCOUNT,
                                PROJECT,
                                REFERENCE,
                                AMOUNT, 
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CHANGEDATE,
                                @CHANGEDATE,
                                TRANSACTIONAMOUNT,
                                ORGANIZATIONAMOUNT,
                                BASECURRENCYID,
                                TRANSACTIONCURRENCYID
                            from dbo.ADJUSTMENTHISTORYDISTRIBUTIONSNAPSHOT
                            where ADJUSTMENTHISTORYID = @ADJUSTMENTHISTORYID;

                    end
                end
            end