UFN_COMBINATION_ELIGIBLEFORORDER

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

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@COMBINATIONID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN

Definition

Copy


CREATE function [dbo].[UFN_COMBINATION_ELIGIBLEFORORDER]
(
    @COMBINATIONID uniqueidentifier,
    @CONSTITUENTID uniqueidentifier
)
returns bit
with execute as caller
as begin

    declare @ELIGIBLEMEMBEREXISTS bit = 0;
    declare @ELIGIBLECONSTITUENCYEXISTS bit = 0;
    declare @CURRENTDATE datetime;
    declare @RESULT bit;

    set @RESULT = 1

    if exists(select COMBINATIONMEMBER.ID from dbo.COMBINATIONMEMBER where COMBINATIONID = @COMBINATIONID)
        set @ELIGIBLEMEMBEREXISTS = 1

    if exists(select COMBINATIONCONSTITUENCY.ID from dbo.COMBINATIONCONSTITUENCY where COMBINATIONID = @COMBINATIONID)
        set @ELIGIBLECONSTITUENCYEXISTS = 1

    if @ELIGIBLEMEMBEREXISTS = 1 or @ELIGIBLECONSTITUENCYEXISTS = 1
        begin

            if @CONSTITUENTID is null
                set @RESULT = 0;
            else
                begin

                    set @CURRENTDATE = getdate()

                    if @ELIGIBLECONSTITUENCYEXISTS = 1 
                        begin
                            -- If there is user-defined constituency the same as system constituency, 

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

                            if exists(
                                select CONSTITUENCY.ID, USERDEFINEDCONSTITUENCYDEFINITION.DESCRIPTION, SYSTEMCONSTITUENCYDEFINITION.DESCRIPTION
                                from 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 COMBINATIONCONSTITUENCY
                                    on (
                                        CONSTITUENCY.CONSTITUENCYCODEID = COMBINATIONCONSTITUENCY.CONSTITUENCYCODEID
                                        or SYSTEMCONSTITUENCYDEFINITION.ID = COMBINATIONCONSTITUENCY.CONSTITUENCYSYSTEMNAMEID
                                        )
                                where CONSTITUENCY.CONSTITUENTID = @CONSTITUENTID
                                    and COMBINATIONCONSTITUENCY.COMBINATIONID = @COMBINATIONID
                                    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 combination exists on constituent

                                set @RESULT = 1
                            end
                            -- Check system constituencies

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                set @RESULT = 0
                            end

                        end

                    if @ELIGIBLEMEMBEREXISTS = 1 and @RESULT = 1
                        begin
                            if exists(select
                                            MEMBER.ID
                                        from
                                            dbo.MEMBER
                                        inner join dbo.MEMBERSHIP on
                                            MEMBER.MEMBERSHIPID = MEMBERSHIP.ID
                                        inner join dbo.COMBINATIONMEMBER on
                                            MEMBERSHIP.MEMBERSHIPPROGRAMID = COMBINATIONMEMBER.MEMBERSHIPPROGRAMID and
                                            (COMBINATIONMEMBER.MEMBERSHIPLEVELID is null or
                                                MEMBERSHIP.MEMBERSHIPLEVELID = COMBINATIONMEMBER.MEMBERSHIPLEVELID)
                                        where
                                            MEMBER.CONSTITUENTID = @CONSTITUENTID and
                                            COMBINATIONMEMBER.COMBINATIONID = @COMBINATIONID and
                                            MEMBER.ISDROPPED = 0 and
                                            MEMBERSHIP.STATUSCODE = 0)
                                begin
                                    --at lesast one member/level from combination exists and is active on constituent

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

                                --need to check order

                                begin
                                    if exists(select
                                                    SALESORDERITEM.ID
                                                from
                                                    dbo.SALESORDERITEM
                                                inner join dbo.SALESORDERITEMMEMBERSHIP on
                                                    SALESORDERITEM.ID = SALESORDERITEMMEMBERSHIP.ID
                                                inner join dbo.COMBINATIONMEMBER on
                                                    SALESORDERITEMMEMBERSHIP.MEMBERSHIPPROGRAMID = COMBINATIONMEMBER.MEMBERSHIPPROGRAMID and
                                                    (COMBINATIONMEMBER.MEMBERSHIPLEVELID is null or
                                                        SALESORDERITEMMEMBERSHIP.MEMBERSHIPLEVELID = COMBINATIONMEMBER.MEMBERSHIPLEVELID)
                                                inner join dbo.SALESORDERITEMMEMBER on
                                                    SALESORDERITEMMEMBERSHIP.ID =SALESORDERITEMMEMBER.SALESORDERITEMMEMBERSHIPID
                                                inner join dbo.SALESORDER on
                                                    SALESORDER.ID = SALESORDERITEM.SALESORDERID
                                                where
                                                    SALESORDER.STATUSCODE = 0 and 
                                                    COMBINATIONMEMBER.COMBINATIONID = @COMBINATIONID and
                                                    SALESORDERITEM.TYPECODE = 1 and
                                                    SALESORDERITEMMEMBER.CONSTITUENTID = @CONSTITUENTID)
                                        begin
                                            --at least one member/level from combination exists in order

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

                                            set @RESULT = 0
                                        end
                                end
                        end
                end
        end

    return @RESULT
end