USP_DATAFORMTEMPLATE_ADD_ORDERDISCOUNTMANUAL

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

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@SALESORDERID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@DISCOUNTID uniqueidentifier IN Discount
@NUMBEROFDISCOUNTSPERORDER int IN Number of discounts per order
@ISLIMITED bit IN Is limited

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_ORDERDISCOUNTMANUAL
(
    @ID uniqueidentifier = null output,
    @SALESORDERID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @DISCOUNTID uniqueidentifier = null,
    @NUMBEROFDISCOUNTSPERORDER int = 0,
    @ISLIMITED bit = 0
)
as

set nocount on;

if @ID is null
    set @ID = newid();

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

declare @CURRENTDATE datetime = getdate();

begin try
    if dbo.UFN_DISCOUNT_AVAILABLEFORORDER(@DISCOUNTID, @SALESORDERID) = 0
        raiserror('BBERR_DISCOUNTID_INVALID', 13, 1);

    insert into dbo.SALESORDERMANUALDISCOUNT
        (ID, SALESORDERID, DISCOUNTID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
    values
        (@ID, @SALESORDERID, @DISCOUNTID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

    if @ISLIMITED = 1
    begin
        insert into dbo.[SALESORDERDISCOUNTLIMITOVERRIDE]
            (ID, SALESORDERID, DISCOUNTID, NUMBEROFDISCOUNTSPERORDER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        values
            (newid(), @SALESORDERID, @DISCOUNTID, @NUMBEROFDISCOUNTSPERORDER, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
    end

    if (select APPLIESTOCODE from dbo.DISCOUNT where ID = @DISCOUNTID) = 1  -- Item-level

    begin
        -- No need to do this for order-level discounts because they are applied later (and don't affect item-level calculations).

        exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
    end

    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;