USP_DATALIST_RELATIONSHIPS_INDTOIND

This datalist returns all individual relationships for an individual.

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@ONLYCURRENT bit IN Only display current relationships
@RECIPROCALTYPECODEID uniqueidentifier IN Relationship type

Definition

Copy


                CREATE procedure dbo.USP_DATALIST_RELATIONSHIPS_INDTOIND 
                (
                    @CONSTITUENTID uniqueidentifier,
                    @ONLYCURRENT bit = 0,
                    @RECIPROCALTYPECODEID uniqueidentifier = null
                ) as
                    set nocount on;

                    declare @CURRENTDATE datetime
                    if @ONLYCURRENT = 1
                        set @CURRENTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate());

                    declare @HOUSEHOLDID uniqueidentifier;
                    select top(1)
                        @HOUSEHOLDID = HOUSEHOLD.ID
                    from 
                        dbo.GROUPMEMBER
                    inner join 
                        dbo.CONSTITUENT as HOUSEHOLD on GROUPMEMBER.GROUPID = HOUSEHOLD.ID
                    inner join 
                        dbo.GROUPDATA on GROUPDATA.ID = HOUSEHOLD.ID
                    where 
                        GROUPMEMBER.MEMBERID = @CONSTITUENTID
                    and 
                        dbo.UFN_GROUPMEMBER_ISCURRENTMEMBER(GROUPMEMBER.ID) = 1
                    and 
                        GROUPDATA.GROUPTYPECODE = 0;

                    -- Using a CTE strictly to allow ordering by KEYNAME (when 'union' is used, columns in the 'order by' clause must be in the select list)            

                    with RELATIONSHIPS_CTE as (
                        select    
                            RELATIONSHIP.ID,
                            RELATIONSHIP.RECIPROCALCONSTITUENTID,
                            (select DESCRIPTION from dbo.RELATIONSHIPTYPECODE where ID=RELATIONSHIP.RECIPROCALTYPECODEID) RELATIONSHIP,
                            (
                                rtrim(CONSTITUENT.NAME + ' ' +
                                    coalesce(
                                        replace(
                                            stuff(
                                                (select '' + STATUS from
                                                    (select ',(Deceased)' STATUS
                                                     from dbo.DECEASEDCONSTITUENT DC
                                                     where DC.ID = CONSTITUENT.ID
                                                     union all
                                                     select ',(Inactive)' STATUS
                                                     from dbo.CONSTITUENT C
                                                     where C.ID = CONSTITUENT.ID
                                                     and C.ISINACTIVE=1
                                                    ) as SUBQ for xml path(''))
                                            ,1,1,'')
                                        , '),(', ', ')
                                    ,'')
                                )
                            ) as NAME,
                            RELATIONSHIP.STARTDATE,
                            RELATIONSHIP.ENDDATE,
                            RELATIONSHIP.ISSPOUSE,
                            CONSTITUENT.KEYNAME,
                            case 
                                when exists (select 1 from dbo.GROUPMEMBER where GROUPMEMBER.GROUPID = @HOUSEHOLDID and GROUPMEMBER.MEMBERID = RELATIONSHIP.RECIPROCALCONSTITUENTID) then 1
                                else 0
                            end as INHOUSEHOLD,
                            1 as RECORDSOURCE
                        from 
                            dbo.RELATIONSHIP
                        inner join 
                            dbo.CONSTITUENT
                        on
                            RELATIONSHIP.RECIPROCALCONSTITUENTID = CONSTITUENT.ID
                        where 
                            RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @CONSTITUENTID 
                        and 
                            CONSTITUENT.ISORGANIZATION = 0 
                        and
                            CONSTITUENT.ISGROUP = 0
                        and (@RECIPROCALTYPECODEID is null
                                or RELATIONSHIP.RECIPROCALTYPECODEID = @RECIPROCALTYPECODEID
                            )

                        union

                        -- include members of the constituent's household for which explicit relationships do not already exist

                        select
                            null,
                            CONSTITUENT.ID,
                            '',
                            (
                                rtrim(CONSTITUENT.NAME + ' ' +
                                    coalesce(
                                        replace(
                                            stuff(
                                                (select '' + STATUS from
                                                    (select ',(Deceased)' STATUS
                                                     from dbo.DECEASEDCONSTITUENT DC
                                                     where DC.ID = CONSTITUENT.ID
                                                     union all
                                                     select ',(Inactive)' STATUS
                                                     from dbo.CONSTITUENT C
                                                     where C.ID = CONSTITUENT.ID
                                                     and C.ISINACTIVE=1
                                                    ) as SUBQ for xml path(''))
                                            ,1,1,'')
                                        , '),(', ', ')
                                    ,'')
                                )
                            ) as NAME,
                            GROUPMEMBERDATERANGE.DATEFROM,
                            GROUPMEMBERDATERANGE.DATETO,
                            0, -- can't tell spouse if the relationship record from above doesn't exist

                            CONSTITUENT.KEYNAME,
                            1, -- INHOUSEHOLD

                            2 -- RECORDSOURCE

                        from
                            dbo.GROUPMEMBER
                        inner join
                            dbo.CONSTITUENT on GROUPMEMBER.MEMBERID = CONSTITUENT.ID
                        left outer join
                            dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
                        where
                            GROUPMEMBER.GROUPID = @HOUSEHOLDID
                        and not exists (
                            select 1
                            from
                                dbo.RELATIONSHIP
                            where
                                RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @CONSTITUENTID
                            and
                                RELATIONSHIP.RECIPROCALCONSTITUENTID = GROUPMEMBER.MEMBERID
                        )
                        and 
                            not GROUPMEMBER.MEMBERID = @CONSTITUENTID
                    )
                    select
                        ID,
                        RECIPROCALCONSTITUENTID,
                        RELATIONSHIP,
                        NAME,
                        STARTDATE,
                        ENDDATE,
                        cast(ISSPOUSE as bit),
                        INHOUSEHOLD,
                        RECORDSOURCE
                    from
                        RELATIONSHIPS_CTE
                    where (@CURRENTDATE is null
                                or RELATIONSHIPS_CTE.STARTDATE is null
                                or RELATIONSHIPS_CTE.STARTDATE <= @CURRENTDATE
                            )
                        and (@CURRENTDATE is null
                                or RELATIONSHIPS_CTE.ENDDATE is null
                                or RELATIONSHIPS_CTE.ENDDATE >= @CURRENTDATE
                            )
                    order by
                        RELATIONSHIP, KEYNAME, NAME