UFN_SALESORDER_GETAVAILABLEMANUALDISCOUNTS
Gets active manual discounts that are valid for a given order
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SALESORDERID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_SALESORDER_GETAVAILABLEMANUALDISCOUNTS
(
@SALESORDERID uniqueidentifier
)
returns table
as return
select
ID,
NAME,
DISCOUNTTYPECODE,
CALCULATIONTYPECODE,
APPLIESTO,
0 as VALUE, --use min and max value now.
NUMBERTOPURCHASE,
NUMBERTODISCOUNT,
DESCRIPTION,
APPLIESTOCODE,
case [DISCOUNT].[APPLIESTOCODE]
when 1 then -- When item-level discount
case [DISCOUNT].[CALCULATIONTYPECODE]
when 1 then --percent
case [DISCOUNT].[DISCOUNTTYPECODE]
when 2 then
(select top (1) [PERCENT] from dbo.[GROUPSIZEDISCOUNT] where [GROUPSIZEDISCOUNT].[DISCOUNTID] = [DISCOUNT].[ID] order by [PERCENT] asc)
else
(select top (1) [PERCENT]
from
(select [PERCENT] from dbo.[DISCOUNTPRICETYPE] where [DISCOUNTPRICETYPE].[DISCOUNTID] = [DISCOUNT].[ID]
union all
select [DISCOUNT].[MERCHANDISEPERCENT] as [PERCENT]) as [PERCENTS]
where [PERCENT] > 0
order by [PERCENT] asc)
end
else --amount or specific value
case [DISCOUNT].[DISCOUNTTYPECODE]
when 2 then
(select top (1) [AMOUNT] from dbo.[GROUPSIZEDISCOUNT] where [GROUPSIZEDISCOUNT].[DISCOUNTID] = [DISCOUNT].[ID] order by [AMOUNT] asc)
else
(select top (1) [AMOUNT]
from
(select [AMOUNT] from dbo.[DISCOUNTPRICETYPE] where [DISCOUNTPRICETYPE].[DISCOUNTID] = [DISCOUNT].[ID]
union all
select [DISCOUNT].[MERCHANDISEAMOUNT] as [AMOUNT]) as [AMOUNTS]
where [AMOUNT] > 0
order by [AMOUNT] asc)
end
end
else --When order-level discount
case [CALCULATIONTYPECODE]
when 0 then
[DISCOUNT].[AMOUNT]
else
[DISCOUNT].[PERCENT]
end
end MINVALUE,
case [DISCOUNT].[APPLIESTOCODE]
when 1 then -- When item-level discount
case [DISCOUNT].[CALCULATIONTYPECODE]
when 1 then --percent
case [DISCOUNT].[DISCOUNTTYPECODE]
when 2 then
(select top (1) [PERCENT] from dbo.[GROUPSIZEDISCOUNT] where [GROUPSIZEDISCOUNT].[DISCOUNTID] = [DISCOUNT].[ID] order by [PERCENT] desc)
else
(select top (1) [PERCENT]
from
(select [PERCENT] from dbo.[DISCOUNTPRICETYPE] where [DISCOUNTPRICETYPE].[DISCOUNTID] = [DISCOUNT].[ID]
union all
select [DISCOUNT].[MERCHANDISEPERCENT] as [PERCENT]) as [PERCENTS]
order by [PERCENT] desc)
end
else --amount or specific value
case [DISCOUNT].[DISCOUNTTYPECODE]
when 2 then
(select top (1) [AMOUNT] from dbo.[GROUPSIZEDISCOUNT] where [GROUPSIZEDISCOUNT].[DISCOUNTID] = [DISCOUNT].[ID] order by [AMOUNT] desc)
else
(select top (1) [AMOUNT]
from
(select [AMOUNT] from dbo.[DISCOUNTPRICETYPE] where [DISCOUNTPRICETYPE].[DISCOUNTID] = [DISCOUNT].[ID]
union all
select [DISCOUNT].[MERCHANDISEAMOUNT] as [AMOUNT]) as [AMOUNTS]
order by [AMOUNT] desc)
end
end
else --When order-level discount
case [CALCULATIONTYPECODE]
when 0 then
[DISCOUNT].[AMOUNT]
else
[DISCOUNT].[PERCENT]
end
end MAXVALUE
from dbo.DISCOUNT
where
ISACTIVE = 1 and
APPLICATIONTYPECODE = 1 and --manually applied
dbo.UFN_DISCOUNT_AVAILABLEFORORDER(ID, @SALESORDERID) = 1