USP_SIMPLEDATALIST_INTERACTIONPARTICIPANTCANDIDATE

List of candidates likely to participate in a step.

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN Constituent ID

Definition

Copy


                CREATE procedure dbo.USP_SIMPLEDATALIST_INTERACTIONPARTICIPANTCANDIDATE
                (
                    @CONSTITUENTID uniqueidentifier
                )
                as
                    set nocount on;

                    -- Create a table variable to hold the participants.  This is used rather than 

                    -- a union to prevent the same constituent from being returned multiple times.

                    declare @participants table
                    (
                        CONSTITUENTID uniqueidentifier,
                        DESCRIPTION nvarchar(100),
                        PRIMARYCONSTITUENT bit,
                        KEYNAME nvarchar(100),
                        FIRSTNAME nvarchar(100)
                    );

                    declare @CURRENTDATE date;
                    set @CURRENTDATE = getdate();

                    -- the record if it's a household, or the household an individual belongs to    

                    declare @HOUSEHOLDID uniqueidentifier; 
                    if exists(select 1 from dbo.CONSTITUENT where ID = @CONSTITUENTID and ISGROUP = 1)
                        set @HOUSEHOLDID = @CONSTITUENTID;
                    else
                        select
                            @HOUSEHOLDID = GM.GROUPID
                        from
                            dbo.GROUPMEMBER GM
                        left outer join
                            dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
                        left outer join
                            dbo.GROUPDATA GD on GD.ID = GM.GROUPID
                        where
                            GM.MEMBERID = @CONSTITUENTID
                        and
                            GD.GROUPTYPECODE = 0
                        and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO > dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE)))
                            or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATE))) 
                            or (GMDR.DATEFROM <= dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATE) and GMDR.DATETO > dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE)));

                    insert into @participants (CONSTITUENTID, DESCRIPTION, PRIMARYCONSTITUENT, KEYNAME, FIRSTNAME)
                    select
                        C.ID,
                        case 
                            when GM.ISPRIMARY = 1 then substring(NF.NAME + ' - Member (Primary contact)', 0, 100)
                            else substring(NF.NAME + ' - Member', 0, 100)
                        end,
                        GM.ISPRIMARY,
                        C.KEYNAME,
                        C.FIRSTNAME
                    from
                        dbo.GROUPMEMBER GM
                    inner join
                        dbo.CONSTITUENT C on GM.MEMBERID = C.ID
                    left join 
                        dbo.GROUPMEMBERDATERANGE GMDR on GM.ID = GMDR.GROUPMEMBERID
                    outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(C.ID) NF
                    where
                        GM.GROUPID = @HOUSEHOLDID
                    and
                        GM.MEMBERID <> @CONSTITUENTID
                    and 
                        ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO > dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE)))
                        or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATE))) 
                        or (GMDR.DATEFROM <= dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATE) and GMDR.DATETO > dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE)));

                    -- relationships for all

                    insert into @participants (CONSTITUENTID, DESCRIPTION, PRIMARYCONSTITUENT, KEYNAME, FIRSTNAME)
                    select
                        C.ID,
                        substring((NF.NAME + ' - ' + (select DESCRIPTION from dbo.RELATIONSHIPTYPECODE where ID=R.RECIPROCALTYPECODEID)), 0, 100),
                        ISPRIMARYCONTACT,
                        C.KEYNAME,
                        C.FIRSTNAME
                    from
                        dbo.RELATIONSHIP R
                    inner join
                        dbo.CONSTITUENT C on R.RECIPROCALCONSTITUENTID = C.ID
                    outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(C.ID) NF
                    where
                        R.RELATIONSHIPCONSTITUENTID = @CONSTITUENTID 
                    and
                        not exists (select 1 from @participants where CONSTITUENTID = C.ID)

                    select
                        CONSTITUENTID as 'VALUE',
                        DESCRIPTION as 'LABEL'
                    from
                        @participants
                    order by
                        PRIMARYCONSTITUENT desc,
                        KEYNAME,
                        FIRSTNAME