USP_DATAFORMTEMPLATE_ADD_ORDERDISCOUNTWITHCODE

The save procedure used by the add dataform template "Order Discount With Code 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.
@PROMOTIONALCODE nvarchar(50) IN Promotion code

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_ORDERDISCOUNTWITHCODE
(
    @ID uniqueidentifier = null output,
    @SALESORDERID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @PROMOTIONALCODE nvarchar(50) = ''
)
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
    -- find the discount

    declare @DISCOUNTID uniqueidentifier;

    if not exists (select ID from dbo.PROMOTIONALCODE where PROMOTIONALCODE = @PROMOTIONALCODE)
    begin
        raiserror('BBERR_404CODE', 13, 1);
        return 1;
    end

    select
        @DISCOUNTID = DISCOUNTID
    from dbo.PROMOTIONALCODE
    where
        PROMOTIONALCODE = @PROMOTIONALCODE
        and (VALIDFROM is null or @CURRENTDATE >= dbo.UFN_DATE_GETEARLIESTTIME(VALIDFROM))
        and (VALIDTO is null or @CURRENTDATE <= dbo.UFN_DATE_GETLATESTTIME(VALIDTO))
        and dbo.UFN_DISCOUNT_AVAILABLEFORORDER(DISCOUNTID, @SALESORDERID) = 1;

    if @DISCOUNTID is null
    begin
        raiserror('BBERR_INVALIDCODE', 13, 1);
        return 1;
    end

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

    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;