USP_SALESORDERMANUALDISCOUNT_DELETE

Executes the "Sales Order Manual Discount Delete" record operation.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN Input parameter indicating the ID of the record being deleted.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the delete.

Definition

Copy


CREATE procedure dbo.USP_SALESORDERMANUALDISCOUNT_DELETE
(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier
)
as begin
    declare @SALESORDERID uniqueidentifier;
    declare @DISCOUNTID uniqueidentifier;
    declare @SALESORDERDISCOUNTLIMITOVERRIDEID uniqueidentifier;

    -- check for item discount

    select
        @DISCOUNTID = DISCOUNTID,
        @SALESORDERID = SALESORDERID
    from dbo.SALESORDERMANUALDISCOUNT
    where ID = @ID;

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

        exec dbo.USP_SALESORDERMANUALDISCOUNT_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;

        -- delete the limit

        select
            @SALESORDERDISCOUNTLIMITOVERRIDEID = ID
        from dbo.SALESORDERDISCOUNTLIMITOVERRIDE
        where SALESORDERID = @SALESORDERID
            and DISCOUNTID = @DISCOUNTID;

        if @SALESORDERDISCOUNTLIMITOVERRIDEID is not null
            exec USP_SALESORDERDISCOUNTLIMITOVERRIDE_DELETEBYID_WITHCHANGEAGENTID @SALESORDERDISCOUNTLIMITOVERRIDEID, @CHANGEAGENTID;

        -- recalculate discounts


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

        begin
            -- No need to do this when deleting an order-level discount, because they 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;
end