USP_DATAFORMTEMPLATE_EDIT_SALESORDER_MANUALDISCOUNTS

The save procedure used by the edit dataform template "Order Manage Discounts Edit Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@MANUALDISCOUNTS xml IN

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_SALESORDER_MANUALDISCOUNTS (
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @MANUALDISCOUNTS xml
)
as
    set nocount on;

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

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

    begin try        
        declare @e int;
        declare @contextCache varbinary(128);
        declare @STATUSCODE tinyint;
        declare @SALESMETHODTYPECODE tinyint;

        select 
            @SALESMETHODTYPECODE = SALESMETHODTYPECODE,
            @STATUSCODE = STATUSCODE
        from dbo.SALESORDER
        where ID = @ID

        if @STATUSCODE in (1, 5) -- Complete or Cancelled

            raiserror('BBERR_INVALIDSTATUS', 13, 1);

        set @contextCache = CONTEXT_INFO();

        if not @CHANGEAGENTID is null
            set CONTEXT_INFO @CHANGEAGENTID

        --Delete the manual discounts and promotions that we chose to delete on the form

        delete from dbo.SALESORDERMANUALDISCOUNT
        where
            SALESORDERID = @ID and
            DISCOUNTID not in (select ID from dbo.UFN_ORDER_GETAPPLIEDDISCOUNTS_FROMITEMLISTXML(@MANUALDISCOUNTS))

        if @SALESMETHODTYPECODE <> 3 -- Group Sales

        begin
            delete from dbo.SALESORDERMEMBERSHIPPROMO
            where
                SALESORDERID = @ID and
                MEMBERSHIPPROMOID not in (select ID from dbo.UFN_ORDER_GETAPPLIEDDISCOUNTS_FROMITEMLISTXML(@MANUALDISCOUNTS))
        end

         --Delete the adjustable discounts that we chose to delete on the form

        delete from dbo.SALESORDERADJUSTABLEDISCOUNT
        where
            SALESORDERID = @ID and
            ID not in (select ID from dbo.UFN_ORDER_GETAPPLIEDDISCOUNTS_FROMITEMLISTXML(@MANUALDISCOUNTS))

        --Delete the adjustable discounts that we chose to delete on the form

        if @SALESMETHODTYPECODE <> 3 -- Group Sales

        begin
            delete from dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTION
            from dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTION 
            inner join dbo.SALESORDERITEM on
                SALESORDERITEMMEMBERSHIPITEMPROMOTION.SALESORDERITEMID = SALESORDERITEM.ID
            where
                SALESORDERITEM.SALESORDERID = @ID and
                SALESORDERITEMMEMBERSHIPITEMPROMOTION.ID not in (select ID from dbo.UFN_ORDER_GETAPPLIEDDISCOUNTS_FROMITEMLISTXML(@MANUALDISCOUNTS))
        end

        --Delete the corresponding limits

        delete from dbo.[SALESORDERDISCOUNTLIMITOVERRIDE]
        where
            [SALESORDERID] = @ID and
            [DISCOUNTID] not in (select [DISCOUNTID] from dbo.[SALESORDERMANUALDISCOUNT] where [SALESORDERID] = @ID)

        --Delete the limits where we chose to make the discount unlimited

        delete from dbo.[SALESORDERDISCOUNTLIMITOVERRIDE]
        where
            [SALESORDERID] = @ID and
            [DISCOUNTID] in (select [ID] from dbo.UFN_ORDER_GETAPPLIEDDISCOUNTS_FROMITEMLISTXML(@MANUALDISCOUNTS) where [LIMITAPPLICATIONTYPECODE] = 0)

        --Update the limits that were updated on the form

        update [LIMIT]
            set [LIMIT].[NUMBEROFDISCOUNTSPERORDER] = [UPDATEDVALUES].[TIMESLIMITED]
        from dbo.[SALESORDERDISCOUNTLIMITOVERRIDE] [LIMIT]
        inner join dbo.UFN_ORDER_GETAPPLIEDDISCOUNTS_FROMITEMLISTXML(@MANUALDISCOUNTS) [UPDATEDVALUES]
            on [LIMIT].[DISCOUNTID] = [UPDATEDVALUES].[ID]
        where [LIMIT].[SALESORDERID] = @ID and
            [UPDATEDVALUES].[LIMITAPPLICATIONTYPECODE] = 1

        --Add the limits that were previously not on the form

        insert into dbo.[SALESORDERDISCOUNTLIMITOVERRIDE] (
            [ID],
            [SALESORDERID],
            [DISCOUNTID],
            [NUMBEROFDISCOUNTSPERORDER],
            [ADDEDBYID],
            [CHANGEDBYID],
            [DATEADDED],
            [DATECHANGED])
        select
            newid(),
            @ID,
            [ID],
            [TIMESLIMITED],
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
        from dbo.UFN_ORDER_GETAPPLIEDDISCOUNTS_FROMITEMLISTXML(@MANUALDISCOUNTS) as [UPDATEDVALUES]
        where [ID] not in (select [DISCOUNTID] from dbo.[SALESORDERDISCOUNTLIMITOVERRIDE] where [SALESORDERID] = @ID) and
            [UPDATEDVALUES].[LIMITAPPLICATIONTYPECODE] = 1

        if not @contextCache is null
            set CONTEXT_INFO @contextCache

        select @e=@@error;

        if @e<>0 return -456; --always return non-zero sp result if an error occurs


        exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @ID, @CHANGEAGENTID;
        exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @ID, @CHANGEAGENTID;

        if @SALESMETHODTYPECODE <> 3 -- Group Sales

            exec dbo.USP_SALESORDER_UPDATEMEMBERSHIPPROMOS @ID, @CHANGEAGENTID;

        exec dbo.USP_SALESORDER_CALCULATETAXES @ID, @CHANGEAGENTID;
    end try
    begin catch
        exec dbo.USP_RAISE_ERROR
        return 1
    end catch

return 0;