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;