UFN_DISCOUNT_GENERATEVALUEDESCRIPTION
Generate a plain-english description of a discount's effect
Return
Return Type |
---|
nvarchar(40) |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DISCOUNTID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_DISCOUNT_GENERATEVALUEDESCRIPTION(@DISCOUNTID uniqueidentifier)
returns nvarchar(40)
with execute as caller
as begin
declare @DESCRIPTION nvarchar(40)
declare @VALUE nvarchar(20)
declare @MINVALUE nvarchar(20)
declare @MAXVALUE nvarchar(20)
declare @CURRENCYSYMBOL nchar(1) = '$'
select
@MINVALUE =
case [D].[APPLIESTOCODE]
when 1 then -- When item-level discount
case [D].[CALCULATIONTYPECODE]
when 1 then --percent
case [D].[DISCOUNTTYPECODE]
when 2 then
(select top (1) convert(nvarchar(20), [PERCENT]) from dbo.[GROUPSIZEDISCOUNT] where [GROUPSIZEDISCOUNT].[DISCOUNTID] = [D].[ID] order by [PERCENT] asc) + '%'
else
(select top (1) convert(nvarchar(20), [PERCENT]) from dbo.[DISCOUNTPRICETYPE] where [DISCOUNTPRICETYPE].[DISCOUNTID] = [D].[ID] order by [PERCENT] asc) + '%'
end
else --amount or specific value
case [D].[DISCOUNTTYPECODE]
when 2 then
@CURRENCYSYMBOL + (select top (1) convert(nvarchar(20), [AMOUNT]) from dbo.[GROUPSIZEDISCOUNT] where [GROUPSIZEDISCOUNT].[DISCOUNTID] = [D].[ID] order by [AMOUNT] asc)
else
@CURRENCYSYMBOL + (select top (1) convert(nvarchar(20), [AMOUNT]) from dbo.[DISCOUNTPRICETYPE] where [DISCOUNTPRICETYPE].[DISCOUNTID] = [D].[ID] order by [AMOUNT] asc)
end
end
else --When order-level discount
case [CALCULATIONTYPECODE]
when 0 then
@CURRENCYSYMBOL + convert(nvarchar(20), [D].[AMOUNT])
else
convert(nvarchar(20), [D].[PERCENT]) + '%'
end
end,
@MAXVALUE =
case [D].[APPLIESTOCODE]
when 1 then -- When item-level discount
case [D].[CALCULATIONTYPECODE]
when 1 then --percent
case [D].[DISCOUNTTYPECODE]
when 2 then
(select top (1) convert(nvarchar(20), [PERCENT]) from dbo.[GROUPSIZEDISCOUNT] where [GROUPSIZEDISCOUNT].[DISCOUNTID] = [D].[ID] order by [PERCENT] desc) + '%'
else
(select top (1) convert(nvarchar(20), [PERCENT]) from dbo.[DISCOUNTPRICETYPE] where [DISCOUNTPRICETYPE].[DISCOUNTID] = [D].[ID] order by [PERCENT] desc) + '%'
end
else --amount or specific value
case [D].[DISCOUNTTYPECODE]
when 2 then
@CURRENCYSYMBOL + (select top (1) convert(nvarchar(20), [AMOUNT]) from dbo.[GROUPSIZEDISCOUNT] where [GROUPSIZEDISCOUNT].[DISCOUNTID] = [D].[ID] order by [AMOUNT] desc)
else
@CURRENCYSYMBOL + (select top (1) convert(nvarchar(20), [AMOUNT]) from dbo.[DISCOUNTPRICETYPE] where [DISCOUNTPRICETYPE].[DISCOUNTID] = [D].[ID] order by [AMOUNT] desc)
end
end
else --When order-level discount
case [CALCULATIONTYPECODE]
when 0 then
@CURRENCYSYMBOL + convert(nvarchar(20), [D].[AMOUNT])
else
convert(nvarchar(20), [D].[PERCENT]) + '%'
end
end
from dbo.[DISCOUNT] [D]
where [D].[ID] = @DISCOUNTID
if @MINVALUE = @MAXVALUE
set @VALUE = @MINVALUE
else
set @VALUE = @MINVALUE + ' - ' + @MAXVALUE
select
@DESCRIPTION = case DISCOUNTTYPECODE
when 1 then 'Purchase ' + convert(nvarchar, NUMBERTOPURCHASE) + ' discount on ' + convert(nvarchar, NUMBERTODISCOUNT)
else
case [CALCULATIONTYPECODE]
when 2 then
@VALUE + ' per item'
else
@VALUE + ' off per ' + lower([APPLIESTO])
end
end
from dbo.DISCOUNT
where ID = @DISCOUNTID
return @DESCRIPTION
end