USP_DATAFORMTEMPLATE_EDIT_SALESORDERTAXEXEMPT

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@ISTAXEXEMPT bit IN
@SALESORDERTAXEXEMPTREASONCODEID uniqueidentifier IN
@COMMENTS nvarchar(255) IN

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_SALESORDERTAXEXEMPT 
(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @ISTAXEXEMPT bit,
    @SALESORDERTAXEXEMPTREASONCODEID uniqueidentifier,
    @COMMENTS nvarchar(255)
)
as
    set nocount on;

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

    declare @CURRENTDATE datetime = getdate();

    begin try
        declare @ISCURRENTLYEXEMPT bit = dbo.UFN_SALESORDER_ISTAXEXEMPT(@ID);
        declare @ISCOMPLETEORCANCELLED bit = 0;
        set @ISTAXEXEMPT = isnull(@ISTAXEXEMPT, 0);

        select
            @ISCOMPLETEORCANCELLED =
                case
                    when SALESORDER.STATUSCODE in (1,5) then 1  -- Complete, Cancelled
                    else 0
                end
        from dbo.SALESORDER
        where ID = @ID;

        if @ISCOMPLETEORCANCELLED = 1 and @ISCURRENTLYEXEMPT <> @ISTAXEXEMPT begin
            raiserror('BBERR_SALESORDERTAXEXEMPTINFOEDIT_CANNOTCHANGEWHENCOMPLETE', 13, 1);
        end

        if @ISTAXEXEMPT = 0 begin
            if @ISCURRENTLYEXEMPT = 1 begin
                exec dbo.USP_SALESORDERTAXEXEMPTINFO_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;
                exec dbo.USP_SALESORDER_CALCULATETAXES @ID, @CHANGEAGENTID;
            end
        end else begin
            if @ISCURRENTLYEXEMPT = 0 begin
                insert into dbo.SALESORDERTAXEXEMPTINFO (
                    ID,
                    SALESORDERTAXEXEMPTREASONCODEID,
                    COMMENTS,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                ) values (
                    @ID,
                    @SALESORDERTAXEXEMPTREASONCODEID,
                    @COMMENTS,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                );

                -- Delete existing taxes on the order
                declare @CONTEXTCACHE varbinary(128);
                set @CONTEXTCACHE = CONTEXT_INFO();
                set CONTEXT_INFO @CHANGEAGENTID;

                delete from dbo.SALESORDERITEMTAX
                where TAXITEMID in (select ID from dbo.SALESORDERITEM where SALESORDERID = @ID and TYPECODE = 4);

                if @@rowcount > 0 begin
                    delete from dbo.SALESORDERITEM
                    where SALESORDERID = @ID and TYPECODE = 4;  -- Tax
                end

                if @CONTEXTCACHE is not null begin
                    set CONTEXT_INFO @CONTEXTCACHE;
                end
            end else begin
                update dbo.SALESORDERTAXEXEMPTINFO set
                    SALESORDERTAXEXEMPTREASONCODEID = @SALESORDERTAXEXEMPTREASONCODEID,
                    COMMENTS = @COMMENTS,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @ID;
            end
        end
    end try

    begin catch
        exec dbo.USP_RAISE_ERROR;
        return 1;
    end catch

    return 0;