USP_DATALIST_FUNDRAISERPROSPECTPLANS

A datalist of prospects and their plans for a given fundraiser.

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@FUNDRAISERID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@SITEFILTERMODE tinyint IN Sites
@SITESSELECTED xml IN
@SECURITYFEATUREID uniqueidentifier IN Input parameter indicating the ID of the feature to use for site security checking.
@SECURITYFEATURETYPE tinyint IN Input parameter indicating the type of the feature to use for site security checking.
@INCLUDEHISTORICALPLANS bit IN

Definition

Copy


        CREATE procedure dbo.USP_DATALIST_FUNDRAISERPROSPECTPLANS
        (
          @CURRENTAPPUSERID uniqueidentifier,
          @FUNDRAISERID uniqueidentifier,
          @SITEFILTERMODE tinyint = 0,
          @SITESSELECTED xml = null,
          @SECURITYFEATUREID uniqueidentifier = null,
          @SECURITYFEATURETYPE tinyint = null,
          @INCLUDEHISTORICALPLANS bit = 0
        )
        as begin
          set nocount on;

          declare @TODAY datetime;
          set @TODAY=getdate();

          declare @CURRENTDATEEARLIESTTIME datetime;
          set @CURRENTDATEEARLIESTTIME= dbo.UFN_DATE_GETEARLIESTTIME(@TODAY);

          declare @RESULTS as table
          (
            CONSTITUENTID uniqueidentifier,
            ID uniqueidentifier,
            LASTSTEP datetime,
            NORECENT nvarchar(100),
            NEXTSTEP datetime,
            CONSTITUENTNAME nvarchar(700),
            CONSTITUENTKEYNAME nvarchar(100),
            PROSPECTPLANTYPE nvarchar(100),
            PROSPECTPLANSTATUS nvarchar(100),
            FUNDRAISERROLE nvarchar(100),
            OPPORTUNITYAMOUNT money,
            OPPORTUNITYAMOUNTRANGENAME nvarchar(100),
            SITENAME nvarchar(max),
            PROSPECTPLANDATECHANGED datetime,
            HASPRIMARYMANAGER tinyint,
            HASSECONDARYMANAGER tinyint,
            PROSPECTMANAGER nvarchar(700),
            HASPROSPECTMANAGER tinyint,
            ISSTEWARDSHIPPLAN tinyint,
            BASECURRENCYID uniqueidentifier,
            QUALIFIEDAMOUNT money,
            RESPONSEPENDINGAMOUNT money,
            VIEWDATAFORMID uniqueidentifier,
            ISACTIVE bit
          );

          declare @RANGECURRENCYID uniqueidentifier;

          select distinct @RANGECURRENCYID = R.BASECURRENCYID
          from dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) R;

          insert into @RESULTS
          select
            CONSTITUENT.ID,
            PROSPECTPLAN.ID,
            (select max(ACTUALDATE) from dbo.INTERACTION where PROSPECTPLANID=PROSPECTPLAN.ID) LASTSTEP,
            case when PROSPECTPLAN.ISACTIVE = 1 and datediff(day,(select max(ACTUALDATE) from dbo.INTERACTION where PROSPECTPLANID=PROSPECTPLAN.ID),@TODAY)>=90 then 'RES:warning' else '' end NORECENT,
            (select INTERACTION.EXPECTEDDATE from dbo.INTERACTION where INTERACTION.ID = dbo.UFN_PROSPECTPLAN_GETNEXTSTEP(PROSPECTPLAN.ID)) NEXTSTEP,
            PROSPECT_NF.NAME,
            CONSTITUENT.KEYNAME,
            dbo.UFN_PROSPECTPLANTYPECODE_GETDESCRIPTION(PROSPECTPLAN.PROSPECTPLANTYPECODEID),
            dbo.UFN_PROSPECTPLANSTATUSCODE_GETDESCRIPTION(PROSPECTPLAN.PROSPECTPLANSTATUSCODEID),
            FUNDRAISERPROSPECTPLAN.FUNDRAISERROLE,
            PLANOPPORTUNITIES.PROSPECTPLANAMOUNT,
            OPPORTUNITYAMOUNTRANGE.NAME,
            dbo.UFN_PROSPECTPLAN_GETSITELIST(PROSPECTPLAN.ID) SITENAME,
            PROSPECTPLAN.DATECHANGED,
            --If manager's end date is a past date, It is assumed that no manager is associated with that prospect/plan

            (case when PROSPECTPLAN.PRIMARYMANAGERFUNDRAISERID is null or PROSPECTPLAN.PRIMARYMANAGERENDDATE < @CURRENTDATEEARLIESTTIME then 0 else 1 end) HASPRIMARYMANAGER, 
            (case when PROSPECTPLAN.SECONDARYMANAGERFUNDRAISERID is null or PROSPECTPLAN.SECONDARYMANAGERENDDATE < @CURRENTDATEEARLIESTTIME then 0 else 1 end) HASSECONDARYMANAGER,
            (case when PROSPECTMANAGER_NF.NAME is null or PROSPECT.PROSPECTMANAGERENDDATE < @CURRENTDATEEARLIESTTIME then '' else PROSPECTMANAGER_NF.NAME end) PROSPECTMANAGER,
            case when PROSPECT.PROSPECTMANAGERFUNDRAISERID is null or PROSPECT.PROSPECTMANAGERENDDATE < @CURRENTDATEEARLIESTTIME then 0 else 1 end as HASPROSPECTMANAGER,
            0 ISSTEWARDSHIPPLAN,
            PROSPECTPLAN.BASECURRENCYID as BASECURRENCYID,
QUALIFIEDOPPORTUNITIES.QUALIFIEDAMOUNT,
            RESPONSEPENDINGOPPORTUNITIES.RESPONSEPENDINGAMOUNT,
            'C48113CC-888F-44da-ACE1-F22A4420CC90' as VIEWDATAFORMID,
            PROSPECTPLAN.ISACTIVE
          from dbo.UFN_FUNDRAISER_PROSPECTPLANS_3(@FUNDRAISERID,1,@CURRENTDATEEARLIESTTIME) FUNDRAISERPROSPECTPLAN
            inner join dbo.PROSPECTPLAN PROSPECTPLAN on PROSPECTPLAN.ID = FUNDRAISERPROSPECTPLAN.ID
            inner join dbo.CONSTITUENT on CONSTITUENT.ID = PROSPECTPLAN.PROSPECTID
            outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(CONSTITUENT.ID) PROSPECT_NF
            inner join dbo.PROSPECT on PROSPECT.ID = PROSPECTPLAN.PROSPECTID
            left outer join
            (
              select
                OPPORTUNITY.PROSPECTPLANID,
                sum(R1.AMOUNTINCURRENCY) AMOUNT,
                sum(OPPORTUNITY.AMOUNT) as QUALIFIEDAMOUNT
              from dbo.OPPORTUNITY
                left join dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY_BULK(@RANGECURRENCYID,dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()) R1 on R1.ID = OPPORTUNITY.ID
              where OPPORTUNITY.STATUSCODE = 1
              group by OPPORTUNITY.PROSPECTPLANID
            ) QUALIFIEDOPPORTUNITIES on QUALIFIEDOPPORTUNITIES.PROSPECTPLANID=PROSPECTPLAN.ID
            left outer join
            (
              select
                OPPORTUNITY.PROSPECTPLANID,
                sum(R1.AMOUNTINCURRENCY) AMOUNT,
                sum(OPPORTUNITY.AMOUNT) as RESPONSEPENDINGAMOUNT
              from dbo.OPPORTUNITY
                left join dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY_BULK(@RANGECURRENCYID,dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()) R1 on R1.ID = OPPORTUNITY.ID
              where OPPORTUNITY.STATUSCODE = 2
              group by OPPORTUNITY.PROSPECTPLANID
            ) RESPONSEPENDINGOPPORTUNITIES on RESPONSEPENDINGOPPORTUNITIES.PROSPECTPLANID=PROSPECTPLAN.ID
            left outer join
            (
              select
                OPPORTUNITY.PROSPECTPLANID,
                sum(R1.AMOUNTINCURRENCY) AMOUNT,
                sum(OPPORTUNITY.AMOUNT) as PROSPECTPLANAMOUNT
              from dbo.OPPORTUNITY
                left join dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY_BULK(@RANGECURRENCYID,dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()) R1 on R1.ID = OPPORTUNITY.ID
              where OPPORTUNITY.STATUSCODE in (1,2,3)
              group by OPPORTUNITY.PROSPECTPLANID
            ) PLANOPPORTUNITIES on PLANOPPORTUNITIES.PROSPECTPLANID=PROSPECTPLAN.ID
            left outer join dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) OPPORTUNITYAMOUNTRANGE on PLANOPPORTUNITIES.AMOUNT between OPPORTUNITYAMOUNTRANGE.LOWERLIMIT and OPPORTUNITYAMOUNTRANGE.UPPERLIMIT
            outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(PROSPECT.PROSPECTMANAGERFUNDRAISERID) PROSPECTMANAGER_NF
          where
            dbo.UFN_CONSTITUENT_ISPROSPECT(PROSPECTPLAN.PROSPECTID) = 1
            and
            (
              select count(*)
              from dbo.UFN_SITEID_MAPFROM_PROSPECTPLANID(PROSPECTPLAN.ID) as PLANSITE
              where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[PLANSITE].[SITEID] or (SITEID is null and [PLANSITE].[SITEID] is null)))
            ) > 0
            and (@INCLUDEHISTORICALPLANS = 1 or PROSPECTPLAN.ISACTIVE = 1)

          union all

          select
            CONSTITUENT.ID,
            STEWARDSHIPPLAN.ID,
            (select max(ACTUALDATE) from dbo.STEWARDSHIPPLANSTEP where PLANID = STEWARDSHIPPLAN.ID) LASTSTEP,
            case when datediff(day, (select max(ACTUALDATE) from dbo.STEWARDSHIPPLANSTEP where PLANID = STEWARDSHIPPLAN.ID), @TODAY) >= 90 then 'RES:warning' else '' end NORECENT,
            (select STEWARDSHIPPLANSTEP.TARGETDATE from dbo.STEWARDSHIPPLANSTEP where STEWARDSHIPPLANSTEP.ID = dbo.UFN_STEWARDSHIPPLAN_GETNEXTSTEP(STEWARDSHIPPLAN.ID)) NEXTSTEP,
            PROSPECT_NF.NAME,
            CONSTITUENT.KEYNAME,
            'Stewardship',
            null,
            'Steward',
            null,
            null,
            dbo.UFN_STEWARDSHIPPLAN_GETSITELIST(STEWARDSHIPPLAN.ID) SITENAME,
            STEWARDSHIPPLAN.DATECHANGED,
            0 HASPRIMARYMANAGER, 
            0 HASSECONDARYMANAGER,
            isnull(PROSPECTMANAGER_NF.NAME,'') as PROSPECTMANAGER,
            case when STEWARDSHIPPLAN.MANAGERID is null then 0 else 1 end as HASPROSPECTMANAGER,
            1 ISSTEWARDSHIPPLAN,
            STEWARDSHIPPLAN.BASECURRENCYID,
            null,
            null,
            '30D20C5C-DF18-4DBD-AFDF-4A4034834563' as VIEWDATAFORMID,
            STEWARDSHIPPLAN.ISACTIVE
          from dbo.STEWARDSHIPPLAN
            inner join dbo.CONSTITUENT on CONSTITUENT.ID = STEWARDSHIPPLAN.CONSTITUENTID
            left join dbo.PROSPECT on CONSTITUENT.ID = PROSPECT.ID
            outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(CONSTITUENT.ID) PROSPECT_NF
            outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(PROSPECT.PROSPECTMANAGERFUNDRAISERID) PROSPECTMANAGER_NF
          where (@INCLUDEHISTORICALPLANS = 1 or STEWARDSHIPPLAN.ISACTIVE = 1) and
            (
              (
                STEWARDSHIPPLAN.MANAGERID = @FUNDRAISERID and
                (
                  STEWARDSHIPPLAN.MANAGERENDDATE is null or
                  STEWARDSHIPPLAN.MANAGERENDDATE >= @CURRENTDATEEARLIESTTIME
                )
              ) or
              exists
              (
                select CONSTITUENTID
                from dbo.STEWARDSHIPPLANSTEWARD
                where
                  PLANID = STEWARDSHIPPLAN.ID and
                  CONSTITUENTID = @FUNDRAISERID and
                  (
                    ENDDATE is null or
                    ENDDATE >= @CURRENTDATEEARLIESTTIME
                  )
              )
            ) and
            (
              select count(*)
              from dbo.UFN_SITEID_MAPFROM_STEWARDSHIPPLANID(STEWARDSHIPPLAN.ID) as PLANSITE
              where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[PLANSITE].[SITEID] or (SITEID is null and [PLANSITE].[SITEID] is null)))
            ) > 0;

          select
            CONSTITUENTID,
            ID,
            LASTSTEP,
            NORECENT,
            NEXTSTEP,
            CONSTITUENTNAME,
            PROSPECTPLANTYPE,
            PROSPECTPLANSTATUS,
            FUNDRAISERROLE,
            OPPORTUNITYAMOUNT,
            OPPORTUNITYAMOUNTRANGENAME,
            SITENAME,
            PROSPECTPLANDATECHANGED,
            HASPRIMARYMANAGER,
            HASSECONDARYMANAGER,
            PROSPECTMANAGER,
            HASPROSPECTMANAGER,
            ISSTEWARDSHIPPLAN,
            BASECURRENCYID,
            QUALIFIEDAMOUNT,
            RESPONSEPENDINGAMOUNT,
            VIEWDATAFORMID,
            ISACTIVE
          from @RESULTS RESULTS
          where
            case
              when @SITEFILTERMODE = 0 then 1
              else
                case
                  when ISSTEWARDSHIPPLAN = 1 then
                  case
                    when exists
                      (
                        select top 1 STEWARDSHIPPLANSITE.STEWARDSHIPPLANID
                        from dbo.STEWARDSHIPPLANSITE
                          inner join dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER on STEWARDSHIPPLANSITE.SITEID = SITEFILTER.SITEID
                        where STEWARDSHIPPLANSITE.STEWARDSHIPPLANID = RESULTS.ID
                      ) then 1
                    else 0
                  end
                  else
                    case
        when exists
                      (
                        select top 1 PROSPECTPLANSITE.PROSPECTPLANID
                        from dbo.PROSPECTPLANSITE
                          inner join dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER on PROSPECTPLANSITE.SITEID = SITEFILTER.SITEID  
                        where PROSPECTPLANSITE.PROSPECTPLANID = RESULTS.ID
                      ) then 1
                      else 0
                    end
                end
            end = 1
          order by CONSTITUENTKEYNAME, CONSTITUENTNAME;
        end