UFN_ADJUSTMENTHISTORY_GETSTOCKDISTRIBUTION

Returns the GL distribution for a sold stock adjustment history item.

Return

Return Type
table

Definition

Copy


            CREATE function dbo.UFN_ADJUSTMENTHISTORY_GETSTOCKDISTRIBUTION
            (
            )
            returns @RESULT table
            (
                ID nvarchar(36),
                ADJUSTMENTHISTORYSTOCKID uniqueidentifier,
                TYPECODE tinyint,
                TYPE nvarchar(20),
                TRANSACTIONTYPECODE tinyint,
                TRANSACTIONTYPE nvarchar(50),
                ACCOUNT nvarchar(100),
                PROJECT nvarchar(100),
                REFERENCE nvarchar(255),
                AMOUNT money
            )
            as
            begin
                declare @STOCKSALEID uniqueidentifier;
                declare @ADJUSTMENTHISTORYSTOCKID uniqueidentifier;

                declare NEEDSGLCURSOR cursor local fast_forward for
                    select
                        ADJUSTMENTHISTORYSTOCKID 
                    from @RESULT
                    where ADJUSTMENTHISTORYSTOCKID not in (select ADJUSTMENTHISTORYSTOCKID from @RESULT where TYPECODE = 1);

                insert into @RESULT(ID, ADJUSTMENTHISTORYSTOCKID, TYPECODE, TYPE, TRANSACTIONTYPECODE, TRANSACTIONTYPE, ACCOUNT, PROJECT, REFERENCE, AMOUNT)
                    select
                        cast(ID as nvarchar(36)),
                        ADJUSTMENTHISTORYSTOCKID,
                        TYPECODE,
                        TYPE,
                        TRANSACTIONTYPECODE,
                        TRANSACTIONTYPE,
                        ACCOUNT,
                        PROJECT,
                        REFERENCE,
                        AMOUNT
                    from dbo.ADJUSTMENTHISTORYSTOCKDISTRIBUTION;

                /*for all the adjustmentstockhistories where the GL distribution hasn't been stored, return the calculated distribution*/
                open NEEDSGLCURSOR;
                    fetch next from NEEDSGLCURSOR into @ADJUSTMENTHISTORYSTOCKID;
                    while @@FETCH_STATUS = 0 
                    begin
                        declare @STOCKDETAILID uniqueidentifier

                        /*this should be the case for undeleted sold-stock so find that sold-stock*/
                        select
                            @STOCKSALEID = STOCKSALEADJUSTMENT.STOCKSALEID,
                            @STOCKDETAILID = STOCKSALE.STOCKDETAILID
                        from dbo.STOCKSALEADJUSTMENT
                        inner join dbo.ADJUSTMENTHISTORYSTOCK on ADJUSTMENTHISTORYSTOCK.STOCKSALEADJUSTMENTID = STOCKSALEADJUSTMENT.ID
                        inner join dbo.STOCKSALE on STOCKSALEADJUSTMENT.STOCKSALEID = STOCKSALE.ID
                        where ADJUSTMENTHISTORYSTOCK.ID = @ADJUSTMENTHISTORYSTOCKID

                        if not @STOCKSALEID is null /*if we couldn't find the stock detail, there's no sense in finding its GL info*/
                            insert into @RESULT(ID, ADJUSTMENTHISTORYSTOCKID, TYPECODE, TYPE, TRANSACTIONTYPECODE, TRANSACTIONTYPE, ACCOUNT, PROJECT, REFERENCE, AMOUNT)
                                select
                                    cast(row_number() over (order by AMOUNT) as nvarchar(36)),
                                    @ADJUSTMENTHISTORYSTOCKID,
                                    1,
                                    'Adjustment',
                                    TRANSACTIONTYPECODE,
                                    DEBITCREDIT,
                                    ACCOUNT,
                                    PROJECT,
                                    REFERENCE,
                                    AMOUNT
                                from dbo.UFN_REVENUE_GETSTOCKDETAILGLDISTRIBUTION(@STOCKDETAILID)
                                where STOCKSALEID = @STOCKSALEID;

                        fetch next from NEEDSGLCURSOR into @ADJUSTMENTHISTORYSTOCKID;
                    end
                --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long

                close NEEDSGLCURSOR;
                deallocate NEEDSGLCURSOR;

                return;
            end