UFN_ADJUSTMENTHISTORY_GETDISTRIBUTION_FORADJUSTMENTHISTORYID

Returns the GL distribution for an adjustment history item.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@ADJUSTMENTHISTORYID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_ADJUSTMENTHISTORY_GETDISTRIBUTION_FORADJUSTMENTHISTORYID
            (
                @ADJUSTMENTHISTORYID uniqueidentifier
            )
            returns @RESULT table
            (
                ID nvarchar(36),
                ADJUSTMENTHISTORYID uniqueidentifier,
                TYPECODE tinyint,
                TYPE nvarchar(20),
                TRANSACTIONTYPECODE tinyint,
                TRANSACTIONTYPE nvarchar(50),
                ACCOUNT nvarchar(100),
                PROJECT nvarchar(100),
                REFERENCE nvarchar(255),
                AMOUNT money,
                TRANSACTIONAMOUNT money,
                ORGANIZATIONAMOUNT money,
                BASECURRENCYID uniqueidentifier,
                TRANSACTIONCURRENCYID uniqueidentifier
            )
            as
            begin
                declare @TEMP table
                (
                    ADJUSTMENTHISTORYID uniqueidentifier,
                    TYPECODE tinyint,
                    TYPE nvarchar(20),
                    TRANSACTIONTYPECODE tinyint,
                    TRANSACTIONTYPE nvarchar(50),
                    ACCOUNT nvarchar(100),
                    PROJECT nvarchar(100),
                    REFERENCE nvarchar(255),
                    AMOUNT money,
                    TRANSACTIONAMOUNT money,
                    ORGANIZATIONAMOUNT money,
                    BASECURRENCYID uniqueidentifier,
                    TRANSACTIONCURRENCYID uniqueidentifier
                );

                declare @REVENUEID uniqueidentifier;

                --Need to account for revenue added by the "Add revenue to posted" button. These will not have a distribution saved until after they are posted.

                declare @NEEDSGL bit
                declare @NEWREVENUE bit;

                insert into @TEMP(ADJUSTMENTHISTORYID, TYPECODE, TYPE, TRANSACTIONTYPECODE, TRANSACTIONTYPE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                    select 
                        ADJUSTMENTHISTORYID,
                        TYPECODE,
                        TYPE,
                        TRANSACTIONTYPECODE,
                        TRANSACTIONTYPE,
                        ACCOUNT,
                        PROJECT,
                        REFERENCE,
                        AMOUNT,
                        TRANSACTIONAMOUNT,
                        ORGANIZATIONAMOUNT,
                        BASECURRENCYID,
                        TRANSACTIONCURRENCYID
                    from dbo.ADJUSTMENTHISTORYDISTRIBUTION
                    where ADJUSTMENTHISTORYID = @ADJUSTMENTHISTORYID;

                set @NEEDSGL = 1;
                set @NEWREVENUE = 0;

                --If there's only a reversal here, and not an adjustment as well, then we need to include the current GL for this item.

                select
                    @NEEDSGL = case when TYPECODE = 1 then 0 else @NEEDSGL end
                from @TEMP;

                --If there's no ADJUSTMENTHISTORYDISTRIBUTION at all for this adjustment history record, it must be new revenue.

                if (select count(*) from @TEMP) = 0 
                    set @NEWREVENUE = 1;

                if @NEEDSGL = 1
                begin
                    set @REVENUEID = null;
                    /*this should only be the case for undeleted revenue, so find that revenue*/
                    select 
                        @REVENUEID = ADJUSTMENT.REVENUEID 
                    from dbo.ADJUSTMENT
                    inner join dbo.ADJUSTMENTHISTORY on ADJUSTMENTHISTORY.ADJUSTMENTID = ADJUSTMENT.ID
                    where ADJUSTMENTHISTORY.ID = @ADJUSTMENTHISTORYID;

                    if not @REVENUEID is null /*if we couldn't find the revenue, there's no sense in finding its GL info*/
                        insert into @TEMP(ADJUSTMENTHISTORYID, TYPECODE, TYPE, TRANSACTIONTYPECODE, TRANSACTIONTYPE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                            select
                                @ADJUSTMENTHISTORYID,
                                1
                                'Adjustment',
                                TRANSACTIONTYPECODE,
                                DEBITCREDIT,
                                ACCOUNT,
                                PROJECT,
                                REFERENCE,
                                AMOUNT,
                                TRANSACTIONAMOUNT,
                                ORGANIZATIONAMOUNT,
                                BASECURRENCYID,
                                TRANSACTIONCURRENCYID
                            from dbo.UFN_REVENUE_GETGLDISTRIBUTION(@REVENUEID);
                end


                --Need to account for revenues added by the "Add revenue to posted" button. These will not have a distribution saved until after they are posted.

                if @NEWREVENUE = 1
                begin
                    set @REVENUEID = null

                    select 
                        @REVENUEID = ADJUSTMENT.REVENUEID
                    from dbo.ADJUSTMENT
                    inner join dbo.ADJUSTMENTHISTORY on ADJUSTMENTHISTORY.ADJUSTMENTID = ADJUSTMENT.ID
                    where ADJUSTMENTHISTORY.ID = @ADJUSTMENTHISTORYID;

                    if not @REVENUEID is null
                        insert into @TEMP( ADJUSTMENTHISTORYID, TYPECODE, TYPE, TRANSACTIONTYPECODE, TRANSACTIONTYPE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                            select
                                @ADJUSTMENTHISTORYID,
                                1,
                                'Adjustment',
                                TRANSACTIONTYPECODE,
                                DEBITCREDIT,
                                ACCOUNT,
                                PROJECT,
                                REFERENCE,
                                AMOUNT,
                                TRANSACTIONAMOUNT,
                                ORGANIZATIONAMOUNT,
                                BASECURRENCYID,
                                TRANSACTIONCURRENCYID
                            from dbo.UFN_REVENUE_GETGLDISTRIBUTION(@REVENUEID);

                end

                --Make sure every row in @RESULT has a unique ID

                insert into @RESULT(ID, ADJUSTMENTHISTORYID, TYPECODE, TYPE, TRANSACTIONTYPECODE, TRANSACTIONTYPE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                    select
                        cast(row_number() over (order by AMOUNT) as nvarchar(36)),
                        ADJUSTMENTHISTORYID,
                        TYPECODE,
                        TYPE,
                        TRANSACTIONTYPECODE,
                        TRANSACTIONTYPE,
                        ACCOUNT,
                        PROJECT,
                        REFERENCE,
                        AMOUNT,
                        TRANSACTIONAMOUNT,
                        ORGANIZATIONAMOUNT,
                        BASECURRENCYID,
                        TRANSACTIONCURRENCYID
                    from @TEMP

                return;
            end