USP_ADJUSTMENTHISTORY_WRITEOFF_SAVEHISTORY

Store historical writeoff adjustment information for reporting purposes.

Parameters

Parameter Parameter Type Mode Description
@WRITEOFFID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@WRITEOFFADJUSTMENTID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_ADJUSTMENTHISTORY_WRITEOFF_SAVEHISTORY
            (
                @WRITEOFFID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier,
                @CHANGEDATE datetime,
                @WRITEOFFADJUSTMENTID uniqueidentifier
            )
            as
            set nocount on;
            /*Before calling this procedure, be sure that you call USP_SAVE_WRITEOFFADJUSTMENT and then save changes to the WRITEOFF table*/


            declare @ADJUSTMENTCOUNT int;
            declare @PREVIOUSWRITEOFFADJUSTMENTID uniqueidentifier;
            declare @PREVIOUSADJUSTMENTHISTORYWRITEOFFID uniqueidentifier;
            declare @ADJUSTMENTHISTORYWRITEOFFID uniqueidentifier;

            declare @EDITINGADJUSTMENT bit;

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

            select @ADJUSTMENTCOUNT = count(ID) 
            from dbo.WRITEOFFADJUSTMENT
            where WRITEOFFADJUSTMENT.WRITEOFFID = @WRITEOFFID;

            select @ADJUSTMENTHISTORYWRITEOFFID = ID
            from dbo.ADJUSTMENTHISTORYWRITEOFF
            where WRITEOFFADJUSTMENTID = @WRITEOFFADJUSTMENTID 


            /*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.ADJUSTMENTHISTORYWRITEOFFDETAIL where ADJUSTMENTHISTORYWRITEOFFID = @ADJUSTMENTHISTORYWRITEOFFID) = 0 
                and (select count(ID) from dbo.ADJUSTMENTHISTORYWRITEOFFDISTRIBUTION where ADJUSTMENTHISTORYWRITEOFFID = @ADJUSTMENTHISTORYWRITEOFFID) = 0
                set @EDITINGADJUSTMENT = 0;
            else
                set @EDITINGADJUSTMENT = 1;

            /*delete the previous report information so we can recreate it*/
            delete from ADJUSTMENTHISTORYWRITEOFFDETAIL where ADJUSTMENTHISTORYWRITEOFFID = @ADJUSTMENTHISTORYWRITEOFFID;


            /*Log the detail for this adjustment*/


            /*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.ADJUSTMENTHISTORYWRITEOFFDISTRIBUTION(ADJUSTMENTHISTORYWRITEOFFID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                    select
                        @ADJUSTMENTHISTORYWRITEOFFID,
                        0, /*Reversal*/
                        TRANSACTIONTYPECODE,
                        ACCOUNT,
                        PROJECT,
                        REFERENCE,
                        AMOUNT,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        TRANSACTIONAMOUNT,
                        ORGANIZATIONAMOUNT,
                        BASECURRENCYID,
                        TRANSACTIONCURRENCYID
                    from dbo.ADJUSTMENTHISTORYWRITEOFFDISTRIBUTIONSNAPSHOT
                    where ADJUSTMENTHISTORYWRITEOFFID = @ADJUSTMENTHISTORYWRITEOFFID;
            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 
                    @PREVIOUSWRITEOFFADJUSTMENTID = ID
                from dbo.WRITEOFFADJUSTMENT
                where WRITEOFFID = @WRITEOFFID
                and ID <> @WRITEOFFADJUSTMENTID
                order by TSLONG desc;

                /*If there is a previous adjustment, write the same reversal as the "adjusted" portion of the previous adjustment */
                if not @PREVIOUSWRITEOFFADJUSTMENTID is null
                begin
                    select 
                        @PREVIOUSADJUSTMENTHISTORYWRITEOFFID = ID
                    from dbo.ADJUSTMENTHISTORYWRITEOFF
                    where WRITEOFFADJUSTMENTID = @PREVIOUSWRITEOFFADJUSTMENTID;

                    /*first, delete the previous adjustment record*/
                    delete from dbo.ADJUSTMENTHISTORYWRITEOFFDISTRIBUTION where ADJUSTMENTHISTORYWRITEOFFID = @PREVIOUSADJUSTMENTHISTORYWRITEOFFID and TYPECODE = 1;

                    /*then insert the updated ones*/
                    insert into dbo.ADJUSTMENTHISTORYWRITEOFFDISTRIBUTION(ADJUSTMENTHISTORYWRITEOFFID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                        select
                            @PREVIOUSADJUSTMENTHISTORYWRITEOFFID,
                            1, /*Adjustment*/
                            TRANSACTIONTYPECODE,
                            ACCOUNT,
                            PROJECT,
                            REFERENCE,
                            AMOUNT,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CHANGEDATE,
                            @CHANGEDATE,
                            TRANSACTIONAMOUNT,
                            ORGANIZATIONAMOUNT,
                            BASECURRENCYID,
                            TRANSACTIONCURRENCYID
                        from dbo.ADJUSTMENTHISTORYWRITEOFFDISTRIBUTIONSNAPSHOT
                        where ADJUSTMENTHISTORYWRITEOFFID = @ADJUSTMENTHISTORYWRITEOFFID;
                end
            end