UFN_MERCHANDISEITEM_GETDISCOUNTS

Returns a table containing all the discounts available for a merchandise item.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@MERCHANDISEPRODUCTID uniqueidentifier IN
@INCLUDEINACTIVE bit IN

Definition

Copy


CREATE function dbo.UFN_MERCHANDISEITEM_GETDISCOUNTS
(
    @MERCHANDISEPRODUCTID uniqueidentifier,
    @INCLUDEINACTIVE bit = 0
)
returns table
as
    return (
        select distinct
            DISCOUNT.ID,
            DISCOUNT.NAME,
            DISCOUNT.CALCULATIONTYPECODE,
            DISCOUNT.CALCULATIONTYPE,
            case when DISCOUNT.APPLIESTOCODE = 0 and DISCOUNT.DISCOUNTTYPECODE = 0
                then
                    DISCOUNT.AMOUNT
            else
                DISCOUNT.MERCHANDISEAMOUNT
            end as MERCHANDISEAMOUNT,
            case when DISCOUNT.APPLIESTOCODE = 0 and DISCOUNT.DISCOUNTTYPECODE = 0
                then
                    DISCOUNT.[PERCENT]
            else
                DISCOUNT.MERCHANDISEPERCENT
            end as MERCHANDISEPERCENT
        from
            dbo.DISCOUNTGROUPDETAIL
        inner join
            dbo.DISCOUNTGROUP on DISCOUNTGROUP.ID = DISCOUNTGROUPDETAIL.DISCOUNTGROUPID
        inner join
            dbo.DISCOUNT on DISCOUNT.ID = DISCOUNTGROUP.DISCOUNTID
        left outer join
            dbo.DISCOUNTGROUPDETAILMERCHANDISEDEPARTMENT on DISCOUNTGROUPDETAILMERCHANDISEDEPARTMENT.ID = DISCOUNTGROUPDETAIL.ID
        left outer join
            dbo.DISCOUNTGROUPDETAILMERCHANDISEITEM on DISCOUNTGROUPDETAILMERCHANDISEITEM.ID = DISCOUNTGROUPDETAIL.ID
        where
            (
                DISCOUNTGROUPDETAIL.DISCOUNTGROUPDETAILAPPLICATIONCODE in (0, 5, 6)  -- All discountable merchandise

                or (
                    DISCOUNTGROUPDETAIL.DISCOUNTGROUPDETAILAPPLICATIONCODE = 1  -- Merchandise department

                    and DISCOUNTGROUPDETAILMERCHANDISEDEPARTMENT.MERCHANDISEDEPARTMENTID = (select MERCHANDISEDEPARTMENTID from dbo.MERCHANDISEPRODUCT where ID = @MERCHANDISEPRODUCTID)
                )
                or (
                    DISCOUNTGROUPDETAIL.DISCOUNTGROUPDETAILAPPLICATIONCODE = 2  -- Merchandise item

                    and DISCOUNTGROUPDETAILMERCHANDISEITEM.MERCHANDISEITEMID = @MERCHANDISEPRODUCTID
                )
            )
            and exists (
                select 1
                from dbo.MERCHANDISEPRODUCT
                where
                    ID = @MERCHANDISEPRODUCTID
                    and ISDISCOUNTABLE = 1
                    and dbo.UFN_MERCHANDISEDEPARTMENT_ISDISCOUNTABLE(MERCHANDISEDEPARTMENTID) = 1
            )
            and DISCOUNT.SUPERSEDEDBYID is null
            and (@INCLUDEINACTIVE = 1 or DISCOUNT.ISACTIVE = 1)
    );