USP_DATALIST_DISCOUNT
Displays a list of discounts.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@INCLUDEINACTIVE | bit | IN | Include inactive |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_DISCOUNT
(
@INCLUDEINACTIVE bit = 1
)
as
set nocount on;
with VALUES_CTE as
(
select
DISCOUNT.ID,
case DISCOUNT.APPLIESTOCODE
when 1 then -- When item-level discount
case DISCOUNT.CALCULATIONTYPECODE
when 1 then --percent
case DISCOUNT.DISCOUNTTYPECODE
when 2 then
GROUPSIZEDISCOUNT.[PERCENT]
else
DISCOUNTPRICETYPE.[PERCENT]
end
else --amount or specific value
case DISCOUNT.DISCOUNTTYPECODE
when 2 then
cast(GROUPSIZEDISCOUNT.AMOUNT as decimal(8,2))
else
cast(DISCOUNTPRICETYPE.AMOUNT as decimal(8,2))
end
end
else --When order-level discount
case CALCULATIONTYPECODE
when 0 then cast(DISCOUNT.AMOUNT as decimal(8,2))
else DISCOUNT.[PERCENT]
end
end VALUE
from dbo.DISCOUNT
left join dbo.GROUPSIZEDISCOUNT on (DISCOUNT.DISCOUNTTYPECODE = 2 and GROUPSIZEDISCOUNT.DISCOUNTID = DISCOUNT.ID)
left join dbo.DISCOUNTPRICETYPE on (DISCOUNT.DISCOUNTTYPECODE <> 2 and DISCOUNTPRICETYPE.DISCOUNTID = DISCOUNT.ID)
where DISCOUNT.SUPERSEDEDBYID is null
and (@INCLUDEINACTIVE = 1 or ISACTIVE = 1)
union all
select ID, cast(MERCHANDISEAMOUNT as decimal(8,2))
from dbo.DISCOUNT
where DISCOUNT.SUPERSEDEDBYID is null
and (@INCLUDEINACTIVE = 1 or ISACTIVE = 1)
union all
select ID, MERCHANDISEPERCENT
from dbo.DISCOUNT
where DISCOUNT.SUPERSEDEDBYID is null
and (@INCLUDEINACTIVE = 1 or ISACTIVE = 1)
),
RANKEDVALUES_CTE as
(
select
ID,
cast(VALUE as nvarchar(20)) VALUE,
row_number() over (partition by ID order by VALUE desc) MAXRANK,
row_number() over (partition by ID order by VALUE asc) MINRANK
from VALUES_CTE
where VALUE <> 0
)
select
DISCOUNT.ID,
NAME,
DISCOUNTTYPE,
APPLIESTO,
APPLICATIONTYPE,
CALCULATIONTYPE,
case
when MINVALUES.VALUE = MAXVALUES.VALUE then MINVALUES.VALUE
else MINVALUES.VALUE + ' - ' + MAXVALUES.VALUE
end VALUE,
ISACTIVE,
DESCRIPTION
from dbo.DISCOUNT
left join RANKEDVALUES_CTE as MINVALUES on (MINVALUES.ID = DISCOUNT.ID and MINVALUES.MINRANK = 1)
left join RANKEDVALUES_CTE as MAXVALUES on (MAXVALUES.ID = DISCOUNT.ID and MAXVALUES.MAXRANK = 1)
where DISCOUNT.SUPERSEDEDBYID is null
and (@INCLUDEINACTIVE = 1 or ISACTIVE = 1)
order by NAME;
return 0;