USP_SAVE_STOCKSALEADJUSTMENT

Stored procedure to log adjustments to sold stock.

Parameters

Parameter Parameter Type Mode Description
@STOCKSALEID uniqueidentifier IN
@STOCKSALEADJUSTMENTID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@DATE datetime IN
@POSTDATE datetime IN
@ADJUSTMENTREASON nvarchar(300) IN
@ADJUSTMENTREASONCODEID uniqueidentifier IN
@POSTSTATUSCODE tinyint IN

Definition

Copy


            CREATE procedure dbo.USP_SAVE_STOCKSALEADJUSTMENT
            (
                @STOCKSALEID uniqueidentifier = null,
                @STOCKSALEADJUSTMENTID uniqueidentifier = null output,
                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null
                @DATE datetime = null,
                @POSTDATE datetime = null,
                @ADJUSTMENTREASON nvarchar(300) = null,
                @ADJUSTMENTREASONCODEID uniqueidentifier = null,
                @POSTSTATUSCODE tinyint = 1
            )
            with execute as owner
            as
            /*call this procedure before making changes to the stock detail tables.*/

            set nocount on;

            declare @STOCKDETAILPOSTDATE datetime;

            --Is the stock detail posted?

            if not exists (    select count(ID) from dbo.STOCKSALE
                            where ID = @STOCKSALEID and SALEPOSTSTATUSCODE = 0)
                raiserror('You cannot adjust an unposted sold stock', 13, 1)            

            --kwb Create FINANCIALTRANSACTIONLINEITEMADJUSTMENT records for original write-offs that will be adjusted

            exec dbo.USP_CREATEINITIALADJUSTMENTHISTORY @STOCKSALEID, @CHANGEAGENTID

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

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

            --JamesWill WI197067 2012-03-08 Ensure that the date used does not have a timestamp

            if not @DATE is null
                set @DATE = dbo.UFN_DATE_GETEARLIESTTIME(@DATE);

            select @STOCKSALEADJUSTMENTID = ID
            from dbo.STOCKSALEADJUSTMENT
            where STOCKSALEID = @STOCKSALEID and POSTSTATUSCODE <> 0;

            --Update unposted adjustment if existing

            if @STOCKSALEADJUSTMENTID is not null and exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT where ID = @STOCKSALEADJUSTMENTID)
                update dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT set
                    ADJUSTMENTREASONCODEID = @ADJUSTMENTREASONCODEID
                    ,REASON = @ADJUSTMENTREASON
                    ,DATE = @DATE
                    ,CHANGEDBYID = @CHANGEAGENTID
                    ,DATECHANGED = @CHANGEDATE
                where ID = @STOCKSALEADJUSTMENTID;
            else if @STOCKSALEADJUSTMENTID is not null
                insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
                    ID
                    ,ADJUSTMENTREASONCODEID
                    ,REASON
                    ,DATE
                    ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                values(
                    @STOCKSALEADJUSTMENTID
                    ,@ADJUSTMENTREASONCODEID
                    ,@ADJUSTMENTREASON
                    ,@DATE
                    ,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

            update dbo.STOCKSALEADJUSTMENT
            set DATE = @DATE
                POSTDATE = @POSTDATE,
                REASON = @ADJUSTMENTREASON,
                REASONCODEID = @ADJUSTMENTREASONCODEID,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CHANGEDATE,
                POSTSTATUSCODE = @POSTSTATUSCODE
            where ID = @STOCKSALEADJUSTMENTID;

            if @@ROWCOUNT = 0
            begin
                set @STOCKSALEADJUSTMENTID = newid();

                --Log Adjustment if new

                insert into dbo.STOCKSALEADJUSTMENT(ID, STOCKSALEID, PREVIOUSAMOUNT, DATE, POSTDATE, POSTSTATUSCODE, REASON, REASONCODEID, TRANSACTIONPREVIOUSAMOUNT, ORGANIZATIONPREVIOUSAMOUNT, BASECURRENCYID, ORGANIZATIONEXCHANGERATEID, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                    select @STOCKSALEADJUSTMENTID, STOCKSALE.ID, STOCKSALE.SALEAMOUNT, @DATE, @POSTDATE, @POSTSTATUSCODE, @ADJUSTMENTREASON, @ADJUSTMENTREASONCODEID, STOCKSALE.TRANSACTIONSALEAMOUNT, STOCKSALE.ORGANIZATIONSALEAMOUNT, STOCKSALE.BASECURRENCYID, STOCKSALE.ORGANIZATIONEXCHANGERATEID, STOCKSALE.TRANSACTIONCURRENCYID, STOCKSALE.BASEEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
                        from dbo.STOCKSALE
                        where STOCKSALE.ID = @STOCKSALEID;

                insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
                    ID
                    ,ADJUSTMENTREASONCODEID
                    ,REASON
                    ,DATE
                    ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                values(
                    @STOCKSALEADJUSTMENTID
                    ,@ADJUSTMENTREASONCODEID
                    ,@ADJUSTMENTREASON
                    ,@DATE
                    ,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                --Save the snapshot before deleting the GL information

                exec dbo.USP_ADJUSTMENTHISTORY_STOCK_SAVESNAPSHOT @STOCKSALEADJUSTMENTID, @CHANGEAGENTID;

                --Log reversals in the GLTRANSACTION table            work item 55993 - added postdate 

                exec dbo.USP_GLTRANSACTION_ADDSTOCKSALEREVERSALS @STOCKSALEID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE;

            end
            else /*make sure @STOCKSALEADJUSTMENTID gets set to the correct value */
            begin
                -- Update the post date on the GL transaction records

                update 
                    dbo.GLTRANSACTION
                set
                    GLTRANSACTION.POSTDATE = @POSTDATE,
                    GLTRANSACTION.DATECHANGED = @CHANGEDATE,
                    GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID
                where GLTRANSACTION.ID in (select GLTRANSACTION.ID                 
                from
                    dbo.GLTRANSACTION
                inner join
                    dbo.STOCKSALEGLDISTRIBUTION on GLTRANSACTION.ID = STOCKSALEGLDISTRIBUTION.GLTRANSACTIONID
                where    
                    STOCKSALEGLDISTRIBUTION.STOCKSALEID = @STOCKSALEID and STOCKSALEGLDISTRIBUTION.OUTDATED = 0);

        -- post date for unposted reversal should match the adjustment post date

        update
          dbo.GLTRANSACTION
        set
          GLTRANSACTION.POSTDATE = @POSTDATE,
          GLTRANSACTION.DATECHANGED = @CHANGEDATE,
          GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID,
          GLTRANSACTION.POSTSTATUSCODE = @POSTSTATUSCODE
        where GLTRANSACTION.ID in (select GLTRANSACTION.ID 
        from
          dbo.GLTRANSACTION
        inner join
          dbo.STOCKSALEGLDISTRIBUTION on GLTRANSACTION.REVERSEDGLTRANSACTIONID = STOCKSALEGLDISTRIBUTION.GLTRANSACTIONID
        where
          STOCKSALEGLDISTRIBUTION.STOCKSALEID = @STOCKSALEID and GLTRANSACTION.POSTSTATUSCODE > 0);

                --Save the snapshot before deleting the GL information

                exec dbo.USP_ADJUSTMENTHISTORY_STOCK_SAVESNAPSHOT @STOCKSALEADJUSTMENTID, @CHANGEAGENTID;
            end

            update dbo.FINANCIALTRANSACTIONLINEITEM set
                FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @STOCKSALEADJUSTMENTID
                ,CHANGEDBYID = @CHANGEAGENTID
                ,DATECHANGED = @CHANGEDATE
            where FINANCIALTRANSACTIONID = @STOCKSALEID and POSTSTATUSCODE = 1;

            declare @Error nvarchar(255) = ''
            if @@ROWCOUNT > 0 and @POSTSTATUSCODE <> 2
                set @Error = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE)

            if @Error <> '' 
                raiserror(@Error, 13, 1)