UFN_DAILYSALEITEM_BUILDDISCOUNTBUTTONTEXT
Returns the text for a daily sale discount button.
Return
Return Type |
---|
nvarchar(65) |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CURRENCYSYMBOL | nchar | IN |
Definition
Copy
CREATE function dbo.UFN_DAILYSALEITEM_BUILDDISCOUNTBUTTONTEXT
(
@ID uniqueidentifier,
@CURRENCYSYMBOL nchar(1)
)
returns nvarchar(65)
with execute as caller
as begin
declare @LINESEPARATOR nchar(1) = char(10)
declare @DESCRIPTIONTYPECODE1 tinyint
declare @DESCRIPTIONTYPECODE2 tinyint
declare @DESCRIPTIONTYPECODE3 tinyint
declare @DESCRIPTION1 nvarchar(20)
declare @DESCRIPTION2 nvarchar(20)
declare @DESCRIPTION3 nvarchar(20)
select
@DESCRIPTIONTYPECODE1 = DESCRIPTIONFIELD1TYPECODE,
@DESCRIPTIONTYPECODE2 = DESCRIPTIONFIELD2TYPECODE,
@DESCRIPTIONTYPECODE3 = DESCRIPTIONFIELD3TYPECODE,
@DESCRIPTION1 = DESCRIPTIONFIELD1,
@DESCRIPTION2 = DESCRIPTIONFIELD2,
@DESCRIPTION3 = DESCRIPTIONFIELD3
from dbo.DAILYSALEITEM
where ID = @ID
declare @NAME nvarchar(20)
declare @VALUE nvarchar(20)
declare @CALCULATIONTYPE nvarchar(20)
declare @MINVALUE nvarchar(20)
declare @MAXVALUE nvarchar(20)
select
@NAME = [D].[NAME],
@CALCULATIONTYPE = [D].[CALCULATIONTYPE],
@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]
inner join dbo.[DAILYSALEITEMDISCOUNT] [DSID] on [DSID].[DISCOUNTID] = [D].[ID]
left join dbo.[DISCOUNTPRICETYPE] on [DISCOUNTPRICETYPE].[DISCOUNTID] = [D].[ID]
where [DSID].[ID] = @ID;
if @MINVALUE = @MAXVALUE
set @VALUE = @MINVALUE
else
set @VALUE = @MINVALUE + ' - ' + @MAXVALUE
select @DESCRIPTION1 =
case @DESCRIPTIONTYPECODE1
when 1 then @DESCRIPTION1
when 8 then @NAME
when 9 then @VALUE
when 10 then @CALCULATIONTYPE
end
select @DESCRIPTION2 =
case @DESCRIPTIONTYPECODE2
when 1 then @DESCRIPTION2
when 8 then @NAME
when 9 then @VALUE
when 10 then @CALCULATIONTYPE
end
select @DESCRIPTION3 =
case @DESCRIPTIONTYPECODE3
when 1 then @DESCRIPTION3
when 8 then @NAME
when 9 then @VALUE
when 10 then @CALCULATIONTYPE
end
return coalesce(@DESCRIPTION1, '') + @LINESEPARATOR + coalesce(@DESCRIPTION2, '') + @LINESEPARATOR + coalesce(@DESCRIPTION3, '')
end