USP_DATAFORMTEMPLATE_ADD_DAILYSALESORDER_DISCOUNT
The save procedure used by the add dataform template "Daily Sales Order Item Discount Add 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_DAILYSALESORDER_DISCOUNT
(
@ID uniqueidentifier = null output,
@SALESORDERID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@DISCOUNTID uniqueidentifier = null,
@NUMBEROFDISCOUNTSPERORDER int = 0,
@ISLIMITED bit = 0
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate();
declare @LIMITAPPLICATIONTYPECODE tinyint = 0
select
@LIMITAPPLICATIONTYPECODE = [DISCOUNTLIMITAPPLICATIONTYPECODE]
from dbo.[DAILYSALEITEMDISCOUNT]
where [DISCOUNTID] = @DISCOUNTID
select
@ID = ID
from dbo.[SALESORDERMANUALDISCOUNT]
where [SALESORDERID] = @SALESORDERID
and [DISCOUNTID] = @DISCOUNTID
begin try
exec dbo.USP_SALESORDER_ISCOMPLETE_RAISERROR @SALESORDERID, @EXCLUDEGROUPSALES = 1;
if @ID is null
begin
exec dbo.USP_DATAFORMTEMPLATE_ADD_ORDERDISCOUNTMANUAL @ID output, @SALESORDERID, @CHANGEAGENTID, @DISCOUNTID, @NUMBEROFDISCOUNTSPERORDER, @ISLIMITED
end
else
begin
if @ISLIMITED = 1 and @LIMITAPPLICATIONTYPECODE = 1
begin
--Figure out the limit
select
@NUMBEROFDISCOUNTSPERORDER = @NUMBEROFDISCOUNTSPERORDER + coalesce([NUMBEROFDISCOUNTSPERORDER], 0)
from dbo.[SALESORDERDISCOUNTLIMITOVERRIDE]
where [SALESORDERID] = @SALESORDERID and
[DISCOUNTID] = @DISCOUNTID
--Don't let the limit input by the user be more than the system configured limit
select
@NUMBEROFDISCOUNTSPERORDER =
case when [LIMITDISCOUNTSPERORDER] = 1 and @NUMBEROFDISCOUNTSPERORDER > [NUMBEROFDISCOUNTSPERORDER] then
[NUMBEROFDISCOUNTSPERORDER]
else
@NUMBEROFDISCOUNTSPERORDER
end
from dbo.[DISCOUNT]
where [ID] = @DISCOUNTID;
--If we already have a limit, just update it. Otherwise, add it
if exists (select [ID] from dbo.[SALESORDERDISCOUNTLIMITOVERRIDE]
where [SALESORDERID] = @SALESORDERID and [DISCOUNTID] = @DISCOUNTID)
begin --update the limit
update dbo.[SALESORDERDISCOUNTLIMITOVERRIDE] set
[NUMBEROFDISCOUNTSPERORDER] = @NUMBEROFDISCOUNTSPERORDER,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where [SALESORDERID] = @SALESORDERID and [DISCOUNTID] = @DISCOUNTID
end
else
begin --add the limit
insert into dbo.[SALESORDERDISCOUNTLIMITOVERRIDE]
(ID, SALESORDERID, DISCOUNTID, NUMBEROFDISCOUNTSPERORDER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values
(newid(), @SALESORDERID, @DISCOUNTID, @NUMBEROFDISCOUNTSPERORDER, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
end
end
else if @ISLIMITED = 0
begin
declare @LIMITID uniqueidentifier = null
select @LIMITID = [ID]
from dbo.[SALESORDERDISCOUNTLIMITOVERRIDE]
where [SALESORDERID] = @SALESORDERID and [DISCOUNTID] = @DISCOUNTID
if @LIMITID is not null
begin
exec dbo.USP_SALESORDERDISCOUNTLIMITOVERRIDE_DELETEBYID_WITHCHANGEAGENTID @LIMITID, @CHANGEAGENTID
end
end
exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_CALCULATETAXES @SALESORDERID, @CHANGEAGENTID;
end
-- Is it really necessary to recalculate fees here? They don't seem to be affected by discounts at all (even percent-based fees use the item's original price).
exec dbo.USP_SALESORDER_CALCULATEFEES @SALESORDERID, @CHANGEAGENTID;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;