USP_DATAFORMTEMPLATE_ADD_SALESORDERITEMDISCOUNTUPDATE

The save procedure used by the add dataform template "Sales Order Item Discount Update Add Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@DISCOUNTID uniqueidentifier IN
@SALESORDERID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@QUANTITY smallint IN

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_SALESORDERITEMDISCOUNTUPDATE(
                        @ID uniqueidentifier output,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @DISCOUNTID uniqueidentifier = null,
                        @SALESORDERID uniqueidentifier,
                        @QUANTITY smallint = 0

                    )
                    as

                        set nocount on;

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

                        declare @CURRENTDATE datetime;
                        set @CURRENTDATE = getdate();

                        begin try
                            exec dbo.USP_SALESORDER_ISCOMPLETE_RAISERROR @SALESORDERID, @EXCLUDEGROUPSALES = 1;

                            --Only update item discounts for standard and with required purchase types

                            if exists(select [ID] from dbo.[DISCOUNT] where [ID] = @DISCOUNTID and [APPLIESTOCODE] = 1 and [DISCOUNTTYPECODE] <> 2)
                            begin

                                --We want the quantity to be greater than zero

                                if @QUANTITY <= 0
                                    raiserror('BBERR_QUANTITY_GREATERTHANZERO', 13, 1);

                                --Don't let the user-entered limit exceed the system-wide configured limit

                                select
                                    @QUANTITY = 
                                        case when [LIMITDISCOUNTSPERORDER] = 1 and @QUANTITY > [NUMBEROFDISCOUNTSPERORDER] then
                                            [NUMBEROFDISCOUNTSPERORDER]
                                        else
                                            @QUANTITY
                                        end
                                from dbo.[DISCOUNT]
                                where [ID] = @DISCOUNTID;

                                if exists( select [ID] from [SALESORDERDISCOUNTLIMITOVERRIDE]
                                    where [SALESORDERID] = @SALESORDERID and [DISCOUNTID] = @DISCOUNTID)
                                begin
                                    update dbo.[SALESORDERDISCOUNTLIMITOVERRIDE] set
                                        [NUMBEROFDISCOUNTSPERORDER] = @QUANTITY,
                                        [CHANGEDBYID] = @CHANGEAGENTID,
                                        [DATECHANGED] = @CURRENTDATE
                                    where [SALESORDERID] = @SALESORDERID and
                                        [DISCOUNTID] = @DISCOUNTID;
                                end
                                else
                                begin
                                    insert into dbo.[SALESORDERDISCOUNTLIMITOVERRIDE]
                                        (ID, SALESORDERID, DISCOUNTID, NUMBEROFDISCOUNTSPERORDER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                    values
                                        (newid(), @SALESORDERID, @DISCOUNTID, @QUANTITY, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
                                end
                            end

                            exec dbo.USP_SALESORDER_CALCULATEFEES @SALESORDERID, @CHANGEAGENTID;
                            exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
                            exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
                            exec dbo.USP_SALESORDER_CALCULATETAXES @SALESORDERID, @CHANGEAGENTID;
                        end try
                        begin catch
                            exec dbo.USP_RAISE_ERROR
                            return 1
                        end catch

                        return 0;