UFN_GROUPINTERACTIONLIST_QUERY

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@GROUPID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@DATEFILTER tinyint IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@TYPEFILTER uniqueidentifier IN
@SITEFILTERMODE tinyint IN
@SITESSELECTED xml IN
@SECURITYFEATUREID uniqueidentifier IN
@SECURITYFEATURETYPE tinyint IN
@STATUS tinyint IN

Definition

Copy


CREATE function dbo.UFN_GROUPINTERACTIONLIST_QUERY (
    @GROUPID uniqueidentifier,
    @CURRENTAPPUSERID uniqueidentifier,
    @DATEFILTER tinyint = 0,
    @STARTDATE datetime = null,
    @ENDDATE datetime = null,
    @TYPEFILTER uniqueidentifier = null,
    @SITEFILTERMODE tinyint = 0,
    @SITESSELECTED xml = null,
    @SECURITYFEATUREID uniqueidentifier = null,
    @SECURITYFEATURETYPE tinyint = null,
    @STATUS tinyint = null
    )
returns @INTERACTIONS table (
    ID uniqueidentifier,
    DATE datetime,
    GROUPORPRIMARYSORTVALUE nvarchar(200),
    STATUS nvarchar(200),
    OWNERID uniqueidentifier,
    FUNDRAISER nvarchar(200),
    OBJECTIVE nvarchar(200),
    INTERACTIONTYPE nvarchar(200),
    ISSTEP bit,
    HASDOCUMENTATION bit,
    HASPERMISSIONS bit,
    GROUPORPRIMARYSORT nvarchar(200),
    CATEGORY nvarchar(200),
    SUBCATEGORY nvarchar(200),
    VIEWFORMID uniqueidentifier,
    SITES nvarchar(200),
    STARTTIME nvarchar(4),
    ENDTIME nvarchar(4),
    TIMEZONE nvarchar(200),
    ISSTEWARDSHIPSTEP bit,
    ISINDIVIDUALSTEP bit
    )
as
begin
    declare @QUERYVIEWID uniqueidentifier = '2d55a6fb-adeb-4b9d-a0dc-ddac51b39b8e';

    declare @ISSYSADMIN bit = 0;
    select @ISSYSADMIN = ISSYSADMIN from dbo.APPUSER where ID = @CURRENTAPPUSERID;

    declare @USERGRANTEDALLCONSTITUENTS bit = 0;
    set @USERGRANTEDALLCONSTITUENTS = dbo.UFN_SECURITY_APPUSER_GRANTED_QUERYVIEW_IN_NONRACROLE(@CURRENTAPPUSERID, @QUERYVIEWID);

    if @DATEFILTER is null
        set @DATEFILTER = 3; -- this month


    declare @ASOFDATE datetime = getdate();

    if @DATEFILTER = 0 -- all

    begin
        set @STARTDATE = null;
        set @ENDDATE = null;
    end

    if @DATEFILTER = 1 -- this year

    begin
        set @STARTDATE = dbo.UFN_DATE_THISCALENDARYEAR_FIRSTDAY(@ASOFDATE, 0);
        set @ENDDATE = dbo.UFN_DATE_THISCALENDARYEAR_LASTDAY(@ASOFDATE, 0);
    end

    if @DATEFILTER = 2 -- this quarter

    begin
        set @STARTDATE = dbo.UFN_DATE_THISQUARTER_FIRSTDAY(@ASOFDATE, 0);
        set @ENDDATE = dbo.UFN_DATE_THISQUARTER_LASTDAY(@ASOFDATE, 0);
    end

    if @DATEFILTER = 3 -- this month

    begin
        set @STARTDATE = dbo.UFN_DATE_THISMONTH_FIRSTDAY(@ASOFDATE, 0);
        set @ENDDATE = dbo.UFN_DATE_THISMONTH_LASTDAY(@ASOFDATE, 0);
    end

    if @DATEFILTER = 4 -- this week

    begin
        set @STARTDATE = dbo.UFN_DATE_THISWEEK_FIRSTDAY(@ASOFDATE, 0);
        set @ENDDATE = dbo.UFN_DATE_THISWEEK_LASTDAY(@ASOFDATE, 0);
    end

    if @DATEFILTER = 5 -- next week

    begin
        set @STARTDATE = dbo.UFN_DATE_NEXTWEEK_FIRSTDAY(@ASOFDATE, 0);
        set @ENDDATE = dbo.UFN_DATE_NEXTWEEK_LASTDAY(@ASOFDATE, 0);
    end

    if @DATEFILTER = 6 -- next month

    begin
        set @STARTDATE = dbo.UFN_DATE_NEXTMONTH_FIRSTDAY(@ASOFDATE, 0);
        set @ENDDATE = dbo.UFN_DATE_NEXTMONTH_LASTDAY(@ASOFDATE, 0);
    end

    if @DATEFILTER = 7 -- next quarter

    begin
        set @STARTDATE = dbo.UFN_DATE_NEXTQUARTER_FIRSTDAY(@ASOFDATE, 0);
        set @ENDDATE = dbo.UFN_DATE_NEXTQUARTER_LASTDAY(@ASOFDATE, 0);
    end

    if @DATEFILTER = 8 -- next year

    begin
        set @STARTDATE = dbo.UFN_DATE_NEXTCALENDARYEAR_FIRSTDAY(@ASOFDATE, 0);
        set @ENDDATE = dbo.UFN_DATE_NEXTCALENDARYEAR_LASTDAY(@ASOFDATE, 0);
    end



    declare @CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT table (
        ID uniqueidentifier,
        DATEFROM datetime,
        DATETO datetime,
        ISGROUP bit,
        ISPRIMARY bit
        );

    insert into @CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT
    select CONSTITUENT.ID as ID,
        GMDR.DATEFROM,
        GMDR.DATETO,
        0 as ISGROUP,
        GROUPMEMBER.ISPRIMARY
    from dbo.GROUPMEMBER
    inner join dbo.CONSTITUENT
        on CONSTITUENT.ID = GROUPMEMBER.MEMBERID
    left join dbo.GROUPMEMBERDATERANGE GMDR
        on GMDR.GROUPMEMBERID = GROUPMEMBER.ID
    where GROUPMEMBER.GROUPID = @GROUPID

    union all

    select @GROUPID,
        null as DATEFROM,
        null as DATETO,
        1 as ISGROUP,
        0 as ISPRIMARY;



    declare @INTERACTIONFORGROUPORMEMBER table (
        ID uniqueidentifier,
        LINKEDTHROUGHCONSTITUENTID uniqueidentifier
        );

    insert into @INTERACTIONFORGROUPORMEMBER (
        ID,
        LINKEDTHROUGHCONSTITUENTID
        )
    select V_CONSTITUENT_INTERACTION.ID,
        GROUPORMEMBERCONSTITUENT.ID as LINKEDTHROUGHCONSTITUENTID
    from dbo.V_CONSTITUENT_INTERACTION
    inner join @CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT GROUPORMEMBERCONSTITUENT
        on GROUPORMEMBERCONSTITUENT.ID = V_CONSTITUENT_INTERACTION.CONSTITUENTID

    union

    select V_CONSTITUENT_INTERACTION.ID,
        GROUPORMEMBERCONSTITUENT.ID as LINKEDTHROUGHCONSTITUENTID
    from dbo.V_CONSTITUENT_INTERACTION
    inner join @CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT GROUPORMEMBERCONSTITUENT
        on GROUPORMEMBERCONSTITUENT.ID = V_CONSTITUENT_INTERACTION.CONTACTPERSONID

    union

    select V_CONSTITUENT_INTERACTION.ID,
        GROUPORMEMBERCONSTITUENT.ID as LINKEDTHROUGHCONSTITUENTID
    from dbo.V_CONSTITUENT_INTERACTION
    inner join dbo.INTERACTIONPARTICIPANT
        on INTERACTIONPARTICIPANT.INTERACTIONID = V_CONSTITUENT_INTERACTION.ID
    inner join @CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT GROUPORMEMBERCONSTITUENT
        on GROUPORMEMBERCONSTITUENT.ID = INTERACTIONPARTICIPANT.CONSTITUENTID;



    with INTERACTION_CTE
    as (
        select INTERACTION.ID,
            INTERACTION.DATE,
            INTERACTION.STATUS,
            INTERACTION.FUNDRAISERID as OWNERID,
            INTERACTION.OBJECTIVE,
            INTERACTION.INTERACTIONTYPECODEID,
            case 
                when INTERACTION.INTERACTIONBASETYPE = 2
                    then case 
                            when exists (
                                    select 1
                                    from dbo.STEWARDSHIPNOTE
                                    where STEWARDSHIPNOTE.STEPID = INTERACTION.ID
                                    )
                                or exists (
                                    select 1
                                    from dbo.STEWARDSHIPATTACHMENT
                                    where STEWARDSHIPATTACHMENT.STEPID = INTERACTION.ID
                                    )
                                or exists (
                                    select 1
                                    from dbo.STEWARDSHIPMEDIALINK
                                    where STEWARDSHIPMEDIALINK.STEPID = INTERACTION.ID
                                    )
                                then 1
                            else 0
                            end
                else case 
                        when exists (
                                select 1
                                from dbo.INTERACTIONNOTE
                                where INTERACTIONNOTE.INTERACTIONID = INTERACTION.ID
                                )
                            or exists (
                                select 1
                                from dbo.INTERACTIONATTACHMENT
                                where INTERACTIONATTACHMENT.INTERACTIONID = INTERACTION.ID
                                )
                            or exists (
                                select 1
                                from dbo.INTERACTIONMEDIALINK
                                where INTERACTIONMEDIALINK.INTERACTIONID = INTERACTION.ID
                                )
                            then 1
                        else 0
                        end
                end as HASDOCUMENTATION,
            case 
                when INTERACTION.INTERACTIONBASETYPE = 1
                    then 1
                else 0
                end as ISMOVE,
            INTERACTION.EVENTID,
            coalesce(INTERACTIONCATEGORY.NAME, STEWARDSHIPSTEPCATEGORYCODE.DESCRIPTION) as CATEGORY,
            INTERACTIONSUBCATEGORY.NAME as SUBCATEGORY,
            INTERACTION.STARTTIME,
            INTERACTION.ENDTIME,
            INTERACTION.TIMEZONEENTRYID,
            case 
                when INTERACTION.INTERACTIONBASETYPE = 2
                    then 1
                else 0
                end as ISSTEWARDSHIPSTEP,
            case 
                when CONSTITUENT.ISGROUP = 1
                    then '0'
                else case 
                        when CONSTITUENT.ISPRIMARY = 1
                            then '1'
                        else '2' + CONSTITUENTDETAIL.KEYNAME + ' ' + CONSTITUENTDETAIL.FIRSTNAME + ' ' + cast(CONSTITUENT.ID as nvarchar(36))
                        end
                end as GROUPORPRIMARYSORT,
            CONSTITUENTDETAIL.NAME as GROUPORPRIMARYSORTVALUE,
            case 
                when @ISSYSADMIN = 1
                    or @USERGRANTEDALLCONSTITUENTS = 1
                    or CONSTITSECURITY.ID is not null
                    then 1
                else 0
                end HASPERMISSIONS,
            INTERACTION.INTERACTIONBASETYPE,
            INTERACTION.PROSPECTPLANID,
            INTERACTION.STEWARDSHIPPLANID,
            case 
                when INTERACTIONCONSTITUENT.ISGROUP = 1
                    then 0
                when INTERACTIONCONSTITUENT.ISORGANIZATION = 1
                    then 0
                else 1
                end as ISINDIVIDUALSTEP
        from @INTERACTIONFORGROUPORMEMBER GROUPINTERACTION
        inner join dbo.V_CONSTITUENT_INTERACTION INTERACTION
            on GROUPINTERACTION.ID = INTERACTION.ID
        left join dbo.INTERACTIONSUBCATEGORY
            on INTERACTIONSUBCATEGORY.ID = INTERACTION.INTERACTIONSUBCATEGORYID
        left join dbo.INTERACTIONCATEGORY
            on INTERACTIONCATEGORY.ID = INTERACTIONSUBCATEGORY.INTERACTIONCATEGORYID
        left join dbo.STEWARDSHIPSTEPCATEGORYCODE
            on STEWARDSHIPSTEPCATEGORYCODE.ID = INTERACTION.STEWARDSHIPSTEPCATEGORYCODEID
        left join dbo.INTERACTIONPARTICIPANT
            on INTERACTIONPARTICIPANT.INTERACTIONID = INTERACTION.ID
        inner join @CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT CONSTITUENT
            on GROUPINTERACTION.LINKEDTHROUGHCONSTITUENTID = CONSTITUENT.ID
        inner join dbo.CONSTITUENT as CONSTITUENTDETAIL
            on CONSTITUENT.ID = CONSTITUENTDETAIL.ID
        left join dbo.CONSTITUENT INTERACTIONCONSTITUENT
            on INTERACTIONCONSTITUENT.ID = INTERACTION.CONSTITUENTID
        left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORQUERYVIEW(@CURRENTAPPUSERID, @QUERYVIEWID) CONSTITSECURITY
            on CONSTITSECURITY.ID = CONSTITUENT.ID
        where (
                (
                    INTERACTION.DATE between @STARTDATE
                        and @ENDDATE
                    )
                or (
                    @STARTDATE is null
                    and @ENDDATE is null
                    )
                or (
                    INTERACTION.DATE >= @STARTDATE
                    and @ENDDATE is null
                    )
                or (
                    @STARTDATE is null
                    and INTERACTION.DATE <= @ENDDATE
                    )
                )
            and (
                INTERACTION.STATUSCODE = @STATUS
                or @STATUS is null
                )
            and (
                (
                    CONSTITUENT.DATEFROM is null
                    and (
                        CONSTITUENT.DATETO is null
                        or CONSTITUENT.DATETO > INTERACTION.date
                        )
                    )
     or (
                    CONSTITUENT.DATETO is null
                    and (
                        CONSTITUENT.DATEFROM is null
                        or CONSTITUENT.DATEFROM <= INTERACTION.DATE
                        )
                    )
                or (
                    CONSTITUENT.DATEFROM <= INTERACTION.DATE
                    and CONSTITUENT.DATETO > INTERACTION.DATE
                    )
                )
            and (
                @TYPEFILTER is null
                or INTERACTION.INTERACTIONTYPECODEID = @TYPEFILTER
                )
            and exists (
                select top 1 INTERACTIONSITE.SITEID
                from dbo.UFN_SITEID_MAPFROM_INTERACTIONID(INTERACTION.ID) INTERACTIONSITE
                where (
                        @ISSYSADMIN = 1
                        or exists (
                            select 1
                            from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID, @SECURITYFEATUREID, @SECURITYFEATURETYPE)
                            where SITEID = [INTERACTIONSITE].[SITEID]
                                or (
                                    SITEID is null
                                    and [INTERACTIONSITE].[SITEID] is null
                                    )
                            )
                        )
                )
            and (
                (@ISSYSADMIN = 1 and @SITEFILTERMODE <> 3)
                or @SITEFILTERMODE = 0
                or (
                    INTERACTION.INTERACTIONBASETYPE = 0
                    and INTERACTION.ID in (
                        select INTERACTIONSITE.INTERACTIONID
                        from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER
                        inner join dbo.INTERACTIONSITE
                            on INTERACTIONSITE.SITEID = SITEFILTER.SITEID
                        )
                    )
                or (
                    INTERACTION.INTERACTIONBASETYPE = 1
                    and INTERACTION.PROSPECTPLANID in (
                        select PROSPECTPLANSITE.PROSPECTPLANID
                        from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER
                        inner join dbo.PROSPECTPLANSITE
                            on PROSPECTPLANSITE.SITEID = SITEFILTER.SITEID
                        )
                    )
                or (
                    INTERACTION.INTERACTIONBASETYPE = 2
                    and INTERACTION.STEWARDSHIPPLANID in (
                        select STEWARDSHIPPLANSITE.STEWARDSHIPPLANID
                        from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER
                        inner join dbo.STEWARDSHIPPLANSITE
                            on STEWARDSHIPPLANSITE.SITEID = SITEFILTER.SITEID
                        )
                    )
                )
        )
    insert into @INTERACTIONS
    select I.ID,
        I.DATE,
        I.GROUPORPRIMARYSORTVALUE,
        I.STATUS,
        FC.ID OWNERID,
        FC.NAME FUNDRAISER,
        I.OBJECTIVE,
        INTERACTIONTYPECODE.DESCRIPTION INTERACTIONTYPE,
        I.ISMOVE ISSTEP,
        I.HASDOCUMENTATION,
        I.HASPERMISSIONS,
        min(I.GROUPORPRIMARYSORT) GROUPORPRIMARYSORT,
        I.CATEGORY,
        I.SUBCATEGORY,
        case 
            when I.INTERACTIONBASETYPE = 1
                then '6ce4b0e8-cfcf-4f57-94c3-00eea94fb499'
            when I.INTERACTIONBASETYPE = 2
                then '0a9d7c4b-018d-48b5-aa14-589cf6c0d97b'
            else 'b525985b-be02-4f02-a9b8-c110411cf936'
            end as VIEWFORMID,
        case 
            when I.INTERACTIONBASETYPE = 1
                then dbo.UFN_PROSPECTPLAN_GETSITELIST(I.PROSPECTPLANID)
            when I.INTERACTIONBASETYPE = 2
         then dbo.UFN_STEWARDSHIPPLAN_GETSITELIST(I.STEWARDSHIPPLANID)
            else dbo.UFN_CONSTITUENTINTERACTION_GETSITELIST(I.ID)
            end as SITES,
        I.STARTTIME,
        I.ENDTIME,
        TIMEZONEENTRY.DISPLAYNAME TIMEZONE,
        I.ISSTEWARDSHIPSTEP,
        I.ISINDIVIDUALSTEP
    from INTERACTION_CTE I
    inner join dbo.INTERACTIONTYPECODE
        on I.INTERACTIONTYPECODEID = INTERACTIONTYPECODE.ID
    left outer join dbo.CONSTITUENT FC
        on FC.ID = I.OWNERID
    left outer join dbo.TIMEZONEENTRY
        on I.TIMEZONEENTRYID = TIMEZONEENTRY.ID
    group by I.ID,
        I.DATE,
        I.GROUPORPRIMARYSORTVALUE,
        I.STATUS,
        FC.ID,
        FC.NAME,
        I.OBJECTIVE,
        I.INTERACTIONTYPECODEID,
        I.ISMOVE,
        I.HASDOCUMENTATION,
        I.HASPERMISSIONS,
        I.CATEGORY,
        I.SUBCATEGORY,
        I.INTERACTIONBASETYPE,
        I.PROSPECTPLANID,
        I.STEWARDSHIPPLANID,
        INTERACTIONTYPECODE.DESCRIPTION,
        I.STARTTIME,
        I.ENDTIME,
        TIMEZONEENTRY.DISPLAYNAME,
        I.ISSTEWARDSHIPSTEP,
        I.ISINDIVIDUALSTEP
    order by GROUPORPRIMARYSORT,
        I.DATE desc;

    return;
end