USP_DATAFORMTEMPLATE_ADJUST_STOCKSALE

The save procedure used by the edit dataform template "Stock Sale By Transaction Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@SALEDATE date IN Date of sale
@SALEAMOUNT money IN Sale amount
@FEE money IN Fees
@NUMBEROFUNITS decimal(20, 3) IN Units sold
@LOWPRICE decimal(19, 4) IN Low price
@MEDIANPRICE decimal(19, 4) IN Median price
@HIGHPRICE decimal(19, 4) IN High price
@ADJUSTMENTPOSTDATE datetime IN Adjustment post date
@ADJUSTMENTDATE datetime IN Adjustment date
@ADJUSTMENTREASON nvarchar(100) IN Adjustment reason

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADJUST_STOCKSALE
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier,
                        @SALEDATE date,
                        @SALEAMOUNT money,
                        @FEE money,
                        @NUMBEROFUNITS decimal(20,3),
                        @LOWPRICE decimal(19,4),
                        @MEDIANPRICE decimal(19,4),
                        @HIGHPRICE decimal(19,4),
                        @ADJUSTMENTPOSTDATE datetime,
                        @ADJUSTMENTDATE datetime,
                        @ADJUSTMENTREASON nvarchar(100)
                    )
                    as
                        set nocount on

                        declare @ORIGINALFEE money, @ORIGINALSALEAMOUNT money, @ORIGINALNUMBEROFUNITS decimal(20,3)
                        declare @SALEPOSTSTATUSCODE tinyint, @STOCKDETAILID uniqueidentifier, @REVENUEID uniqueidentifier
                        select
                            @ORIGINALFEE = STOCKSALE.FEE,
                            @ORIGINALSALEAMOUNT = STOCKSALE.SALEAMOUNT,
                            @SALEPOSTSTATUSCODE = STOCKSALE.SALEPOSTSTATUSCODE,
                            @STOCKDETAILID = STOCKSALE.STOCKDETAILID,
                            @ORIGINALNUMBEROFUNITS = STOCKSALE.NUMBEROFUNITS,
                            @REVENUEID = REVENUEPAYMENTMETHOD.REVENUEID
                        from dbo.STOCKSALE
                        inner join dbo.REVENUEPAYMENTMETHOD on STOCKSALE.STOCKDETAILID = REVENUEPAYMENTMETHOD.ID
                        where STOCKSALE.ID = @ID

                        declare @NEEDSADJUSTMENT bit
                        set @NEEDSADJUSTMENT = 0
                        if coalesce(@ORIGINALFEE, 0) <> coalesce(@FEE, 0) or
                            coalesce(@ORIGINALSALEAMOUNT, 0) <> coalesce(@SALEAMOUNT, 0) or
                            coalesce(@ORIGINALNUMBEROFUNITS, 0) <> coalesce(@NUMBEROFUNITS, 0)
                        begin
                            set @NEEDSADJUSTMENT = 1
                        end

                        -- Verify the transaction has already been posted            

                        if @SALEPOSTSTATUSCODE <> 0 -- Posted

                        begin
                            raiserror('STOCKSALEMUSTBEPOSTED', 13, 1)
                            return 1                        
                        end

                        -- Already adjusted

                        if @NEEDSADJUSTMENT = 0
                            if exists (    select 1 from dbo.STOCKSALEADJUSTMENT
                                        where STOCKSALEID = @ID and POSTSTATUSCODE = 1)
                                set @NEEDSADJUSTMENT = 1

                        -- Make sure the adjustment date fields are set if it will be adjusted

                        if @NEEDSADJUSTMENT = 1 and @ADJUSTMENTPOSTDATE is null
                        begin
                            raiserror('ADJUSTMENTPOSTDATEREQUIRED', 13, 1)
                            return 1
                        end

                        if @NEEDSADJUSTMENT = 1 and @ADJUSTMENTDATE is null
                        begin
                            raiserror('ADJUSTMENTDATEREQUIRED', 13, 1)
                            return 1
                        end

                        if @LOWPRICE < 0
                        begin
                            raiserror('BBERR_LOWPRICEPERSHARENEGATIVE', 13, 1)
                            return 1
                        end

                        if @MEDIANPRICE < 0
                        begin
                            raiserror('BBERR_MEDIANPRICEPERSHARENEGATIVE', 13, 1)
                            return 1
                        end

                        if @HIGHPRICE < 0
                        begin
                            raiserror('BBERR_HIGHPRICEPERSHARENEGATIVE', 13, 1)
                            return 1
                        end

                        declare @ADJUSTMENTID uniqueidentifier

                        if @CHANGEAGENTID is null
                            exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENTID @CHANGEAGENTID output

                        declare @CURRENTDATE datetime
                        set @CURRENTDATE = getdate()

                        begin try
                            if @NEEDSADJUSTMENT = 1
                                exec dbo.USP_SAVE_STOCKSALEADJUSTMENT @ID, @ADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON

                            update dbo.STOCKSALE set
                                SALEDATE = @SALEDATE,
                                SALEAMOUNT = @SALEAMOUNT,
                                FEE = @FEE,
                                NUMBEROFUNITS = @NUMBEROFUNITS,
                                LOWPRICE = @LOWPRICE,
                                MEDIANPRICE = @MEDIANPRICE,
                                HIGHPRICE = @HIGHPRICE,
                                DATECHANGED = @CURRENTDATE,
                                CHANGEDBYID = @CHANGEAGENTID
                            where
                                ID = @ID

                            if @NEEDSADJUSTMENT = 1
                            begin
                                --Clear GL

                                --Cache CONTEXT INFO

                                declare @contextCache varbinary(128);
                                set @contextCache = CONTEXT_INFO();

                                if not @CHANGEAGENTID is null
                                    set CONTEXT_INFO @CHANGEAGENTID;

                                delete from dbo.STOCKSALEGLDISTRIBUTION where STOCKSALEID = @ID and OUTDATED = 0

                                exec dbo.USP_SAVE_STOCKDETAILGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE, @ID

                                --Restore CONTEXT_INFO

                                if not @contextCache is null
                                    set CONTEXT_INFO @contextCache;

                                if @ADJUSTMENTID is not null
                                    exec dbo.USP_ADJUSTMENTHISTORY_STOCKSALE_SAVEHISTORY @ID, @CHANGEAGENTID, null, @ADJUSTMENTID
                            end
                        end try
                        begin catch
                            exec dbo.USP_RAISE_ERROR
                            return 1
                        end catch

                        return 0