UFN_DISCOUNT_ELIGIBLEFORORDER

Determines if a discount is eligible for order - constituency code and memberships of constituent.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@DISCOUNTID uniqueidentifier IN
@SALESORDERID uniqueidentifier IN

Definition

Copy


CREATE function [dbo].[UFN_DISCOUNT_ELIGIBLEFORORDER]
(
    @DISCOUNTID uniqueidentifier,
    @SALESORDERID uniqueidentifier
)
returns bit
with execute as caller
as begin
    declare @CONSTITUENTID uniqueidentifier;
    declare @ELIGIBLEMEMBEREXISTS bit = 0;
    declare @ELIGIBLECONSTITUENCYEXISTS bit = 0;
    declare @ELIGIBLEADDRESSEXISTS bit = 0; -- LeeCh, 07/27/2009, Check address restriction

    declare @CURRENTDATE datetime;
    declare @RESULT bit;

    set @RESULT = 1

    if exists(select * from dbo.DISCOUNTMEMBER where DISCOUNTID = @DISCOUNTID)
        set @ELIGIBLEMEMBEREXISTS = 1

    if exists(select * from dbo.DISCOUNTCONSTITUENCY where DISCOUNTID = @DISCOUNTID)
        set @ELIGIBLECONSTITUENCYEXISTS = 1

    if exists(select ID from dbo.DISCOUNTADDRESS where ID = @DISCOUNTID)
        set @ELIGIBLEADDRESSEXISTS = 1

    if @ELIGIBLEMEMBEREXISTS = 1 or @ELIGIBLECONSTITUENCYEXISTS = 1 or @ELIGIBLEADDRESSEXISTS = 1
    begin
        declare @SALESMETHODTYPECODE tinyint;

        select
            @SALESMETHODTYPECODE = [SALESMETHODTYPECODE],
            @CONSTITUENTID = CONSTITUENTID
        from
            dbo.[SALESORDER]
        where
            [ID] = @SALESORDERID;

        --Pending online orders (for the most part) do not have constituents until payment.  We shouldn't exclude them.

        if @CONSTITUENTID is null and not @SALESMETHODTYPECODE = 2
            set @RESULT = 0;
        else
        begin

            set @CURRENTDATE = getdate()

            if @ELIGIBLECONSTITUENCYEXISTS = 1 
            begin
                -- LeeCh, 07/28/2009

                -- If there is user-defined constituency the same as system constituency, 

                -- the user-defined constituency should be eligible also.

                if exists
                (
                    select 
                        CONSTITUENCY.ID 
                    from 
                        dbo.CONSTITUENCY 
                        inner join CONSTITUENCYDEFINITION as USERDEFINEDCONSTITUENCYDEFINITION on CONSTITUENCY.CONSTITUENCYCODEID = USERDEFINEDCONSTITUENCYDEFINITION.ID and USERDEFINEDCONSTITUENCYDEFINITION.ISSYSTEM = 0
                        left join CONSTITUENCYDEFINITION as SYSTEMCONSTITUENCYDEFINITION on USERDEFINEDCONSTITUENCYDEFINITION.DESCRIPTION = SYSTEMCONSTITUENCYDEFINITION.DESCRIPTION and SYSTEMCONSTITUENCYDEFINITION.ISSYSTEM = 1                        
                        inner join dbo.DISCOUNTCONSTITUENCY on (CONSTITUENCY.CONSTITUENCYCODEID = DISCOUNTCONSTITUENCY.CONSTITUENCYCODEID or SYSTEMCONSTITUENCYDEFINITION.ID = DISCOUNTCONSTITUENCY.CONSTITUENCYSYSTEMNAMEID)
                    where 
                        CONSTITUENCY.CONSTITUENTID = @CONSTITUENTID and
                        DISCOUNTCONSTITUENCY.DISCOUNTID = @DISCOUNTID and
                        (CONSTITUENCY.DATEFROM is null or dbo.UFN_DATE_GETEARLIESTTIME(CONSTITUENCY.DATEFROM) <= @CURRENTDATE) and
                        (CONSTITUENCY.DATETO is null or dbo.UFN_DATE_GETLATESTTIME(CONSTITUENCY.DATETO) >= @CURRENTDATE)
                )
                begin
                    --at least one constituency from discount exists on constituent

                    set @RESULT = 1
                end
                -- LeeCh, 07/19/2009

                -- Check system constituencies

                else if dbo.UFN_DISCOUNT_ISCONSTITUENTRECOGNITION(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('3dfac92e-78bd-4051-abdc-02c675deb8f6', @DISCOUNTID) = 1 --Recognition

                    set @RESULT = 1
                else if dbo.UFN_DISCOUNT_ISCONSTITUENTMEMBER(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('2d11326e-8f3b-4322-9797-57c1aacfa5df', @DISCOUNTID) = 1 --Member

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISBOARDMEMBER(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('F828E957-5F5E-479A-8F23-2FFD6C7C68FF', @DISCOUNTID) = 1 --Board member

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISSTAFF(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('6093915E-ADE9-42BE-88AE-304731754467', @DISCOUNTID) = 1 --Staff

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISDONOR(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('70165682-4324-46EC-9439-83FC0CC67E7F', @DISCOUNTID) = 1 --Donor

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISFUNDRAISER(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('D2DCA06A-BE6E-40B3-B95D-59A926181923', @DISCOUNTID) = 1 --Fundraiser

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISVOLUNTEER(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('E7489703-3D63-4017-A2BC-88C092563C5D', @DISCOUNTID) = 1 --Volunteer

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISREGISTRANT(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('C49D4B46-72A7-4206-91AA-BEABA2323E3C', @DISCOUNTID) = 1 --Event registrant

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISPATRON(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('A843B859-4C6B-445B-97F3-179582E270A5', @DISCOUNTID) = 1 --Patron

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISPROSPECT(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('00E748FB-940D-4A7D-A133-C148B29410A8', @DISCOUNTID) = 1 --Major giving prospect

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISPLANNEDGIVER(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('CEE46FE7-3FBB-4DFE-97EB-BA67DD33C634', @DISCOUNTID) = 1 --Planned giver

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISSTUDENT(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('4DB8F4FC-BC43-421D-B592-69BEF109B5FC', @DISCOUNTID) = 1 --Student

                    set    @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISALUMNUS(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('46EC3424-BA54-4431-A7DC-C6CEBB3B4592', @DISCOUNTID) = 1 --Alumnus

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISLOYALDONOR(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('E5A0EA42-65BA-4B25-AFE2-9B709F99E72B', @DISCOUNTID) = 1 --Loyal donor

                    set @RESULT = 1
                else if dbo.UFN_CONSTITUENT_ISMAJORDONOR(@CONSTITUENTID) = 1 and dbo.UFN_DISCOUNT_HASCONSTITUENCY_2('1A9BFE80-604D-4B5B-8065-E751DDF6EF39', @DISCOUNTID) = 1 --Major donor

                    set @RESULT = 1
                else
                begin
                --no constituencies from discount exist on constituent

                    set @RESULT = 0
                end

            end


            if @ELIGIBLEMEMBEREXISTS = 1 and @RESULT = 1
            begin
                if exists
                (
                    select
                        *
                    from
                        dbo.MEMBER
                    inner join dbo.MEMBERSHIP on
                        MEMBER.MEMBERSHIPID = MEMBERSHIP.ID
                    inner join dbo.MEMBERSHIPLEVELTERM
                        on [MEMBERSHIP].[MEMBERSHIPLEVELTERMID] = [MEMBERSHIPLEVELTERM].[ID]
                    inner join dbo.DISCOUNTMEMBER on
                        MEMBERSHIP.MEMBERSHIPPROGRAMID = DISCOUNTMEMBER.MEMBERSHIPPROGRAMID and
                        (DISCOUNTMEMBER.MEMBERSHIPLEVELID is null or
                        MEMBERSHIP.MEMBERSHIPLEVELID = DISCOUNTMEMBER.MEMBERSHIPLEVELID)
                    where
                        MEMBER.CONSTITUENTID = @CONSTITUENTID and
                        DISCOUNTMEMBER.DISCOUNTID = @DISCOUNTID and
                        MEMBER.ISDROPPED = 0 and
                        MEMBERSHIP.STATUSCODE = 0 
                )        

                begin
                --at least one member/level from discount exists and is active on constituent

                    set @RESULT = 1
                end
                else
                --no member/levels from discount are active on constituent

                --need to check order

                begin
                    if exists
                    (
                        select
                            *
                        from
                            dbo.SALESORDERITEM
                        inner join dbo.SALESORDERITEMMEMBERSHIP on
                            SALESORDERITEM.ID = SALESORDERITEMMEMBERSHIP.ID
                        inner join dbo.DISCOUNTMEMBER on
                            SALESORDERITEMMEMBERSHIP.MEMBERSHIPPROGRAMID = DISCOUNTMEMBER.MEMBERSHIPPROGRAMID and
                            (DISCOUNTMEMBER.MEMBERSHIPLEVELID is null or
                            SALESORDERITEMMEMBERSHIP.MEMBERSHIPLEVELID = DISCOUNTMEMBER.MEMBERSHIPLEVELID)
                        left join dbo.SALESORDERITEMMEMBER on
                            SALESORDERITEMMEMBERSHIP.ID =SALESORDERITEMMEMBER.SALESORDERITEMMEMBERSHIPID                                                    
                        where
                            (
                                --Online orders will not have member records while the order is pending.  They are created on payment.

                                (@SALESMETHODTYPECODE = 2 and SALESORDERITEMMEMBERSHIP.[MEMBERSHIPID] is null) or
                                (SALESORDERITEMMEMBER.CONSTITUENTID = @CONSTITUENTID)
                            ) and
                            SALESORDERITEM.SALESORDERID = @SALESORDERID and
                            DISCOUNTMEMBER.DISCOUNTID = @DISCOUNTID and
                            SALESORDERITEM.TYPECODE = 1
                    )
                    begin
                        --at least one member/level from discount exists in order

                        set @RESULT = 1
                    end
                    else
                    begin
                        --no member/level from discount is active on constituent or in the order

                        set @RESULT = 0
                    end
                end
            end

            if @ELIGIBLEADDRESSEXISTS = 1 and @RESULT = 1
            begin
                declare @SELECTIONID uniqueidentifier
                select @SELECTIONID = IDSETREGISTERID 
                from dbo.DISCOUNTADDRESS
                where DISCOUNTADDRESS.ID = @DISCOUNTID

                if dbo.UFN_CONSTITUENT_ISINCONSTITUENTBYADDRESS(@CONSTITUENTID, @SELECTIONID) = 1
                    set @RESULT = 1;
                else
                    set @RESULT = 0;
            end
        end            
    end

    return @RESULT

end