USP_DATALIST_PROGRAMDISCOUNT
Lists the discounts associated with a program.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PROGRAMID | uniqueidentifier | IN | Input parameter indicating the context ID for the data list. |
@INCLUDEINACTIVE | bit | IN | Include inactive |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_PROGRAMDISCOUNT
(
@PROGRAMID uniqueidentifier,
@INCLUDEINACTIVE bit = 0
)
as
set nocount on;
with VALUES_CTE as
(
select distinct
[D].[ID],
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
(select top (1) convert(nvarchar(20), [AMOUNT]) from dbo.[GROUPSIZEDISCOUNT] where [GROUPSIZEDISCOUNT].[DISCOUNTID] = [D].[ID] order by [AMOUNT] asc)
else
(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
convert(nvarchar(20), [D].[AMOUNT])
else
convert(nvarchar(20), [D].[PERCENT])
end
end 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] 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
(select top (1) convert(nvarchar(20), [AMOUNT]) from dbo.[GROUPSIZEDISCOUNT] where [GROUPSIZEDISCOUNT].[DISCOUNTID] = [D].[ID] order by [AMOUNT] desc)
else
(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
convert(nvarchar(20), [D].[AMOUNT])
else
convert(nvarchar(20), [D].[PERCENT])
end
end MAXVALUE
from dbo.[DISCOUNT] [D]
left join dbo.[DISCOUNTPRICETYPE] on [DISCOUNTPRICETYPE].[DISCOUNTID] = [D].[ID]
)
select
distinct D.ID,
DG.ID as DISCOUNTGROUPID,
D.NAME,
D.DISCOUNTTYPE,
D.APPLIESTO,
D.APPLICATIONTYPE,
D.CALCULATIONTYPE,
case
when [MINVALUE] = [MAXVALUE] then
[MINVALUE]
else
[MINVALUE] + ' - ' + [MAXVALUE]
end [VALUE],
ISACTIVE,
D.[DESCRIPTION]
from dbo.DISCOUNT D
inner join dbo.DISCOUNTGROUP DG on D.ID = DG.DISCOUNTID
inner join dbo.DISCOUNTGROUPDETAIL DGD on DG.ID = DGD.DISCOUNTGROUPID
inner join dbo.DISCOUNTGROUPDETAILPROGRAM DGDP on DGD.ID = DGDP.ID
inner join [VALUES_CTE] as [VALUES] on [VALUES].[ID] = [D].[ID]
where
DGDP.PROGRAMID = @PROGRAMID and
D.SUPERSEDEDBYID is null and
(@INCLUDEINACTIVE = 1 or D.ISACTIVE = 1)
order by NAME;
return 0;