USP_KPI_MAJORGIVING_OPPORTUNITIESCOUNTFUNDRAISER

Parameters

Parameter Parameter Type Mode Description
@VALUE int INOUT
@ASOFDATE datetime IN
@INCLUDEUNQUALIFIED bit IN
@INCLUDEQUALIFIED bit IN
@INCLUDERESPONSEPENDING bit IN
@INCLUDEACCEPTED bit IN
@INCLUDEREJECTED bit IN
@INCLUDECANCELED bit IN
@DESIGNATIONID uniqueidentifier IN
@PROSPECTPLANTYPECODEID uniqueidentifier IN
@PROSPECTPLANSTATUSCODEID uniqueidentifier IN
@PROSPECTSTATUSCODEID uniqueidentifier IN
@OPPORTUNITYAMOUNTBRACKETID uniqueidentifier IN
@ASKDATEFILTER tinyint IN
@FUNDRAISERID uniqueidentifier IN
@ORGPOSITIONSSELECTIONID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


          CREATE procedure dbo.USP_KPI_MAJORGIVING_OPPORTUNITIESCOUNTFUNDRAISER
            @VALUE int output,
            @ASOFDATE datetime,
            @INCLUDEUNQUALIFIED bit = 0,
            @INCLUDEQUALIFIED bit = 0,
            @INCLUDERESPONSEPENDING bit = 0,
            @INCLUDEACCEPTED bit = 0,
            @INCLUDEREJECTED bit = 0,
            @INCLUDECANCELED bit = 0,
            @DESIGNATIONID uniqueidentifier = null,
            @PROSPECTPLANTYPECODEID uniqueidentifier = null,
            @PROSPECTPLANSTATUSCODEID uniqueidentifier = null,
            @PROSPECTSTATUSCODEID uniqueidentifier = null,
            @OPPORTUNITYAMOUNTBRACKETID uniqueidentifier = null,
            @ASKDATEFILTER tinyint = null,
            @FUNDRAISERID uniqueidentifier = null,
            @ORGPOSITIONSSELECTIONID uniqueidentifier = null,
            @CURRENTAPPUSERID uniqueidentifier = null
          as
            set nocount on;

            declare @STARTDATE datetime;
            declare @ENDDATE datetime;

            -- JamesWill 2011-04-26 WI151871 Copy what the amounts KPI does so unqualified opportunities (which don't have ask dates) work with this KPI

            -- Leave STARTDATE and ENDDATE null if all dates is selected

            -- so that these date filters aren't applied at all.  Otherwise,

            -- if the opportunity doesn't have a date set, it would never

            -- be included if USP_RESOLVEDATEFILTER was called with all dates

            -- since it sets STARTDATE and ENDDATE to min and max dates.

            if @ASKDATEFILTER is not null and @ASKDATEFILTER <> 10
              exec dbo.USP_RESOLVEDATEFILTER @DATEFILTER=@ASKDATEFILTER, @STARTDATE=@STARTDATE output, @ENDDATE=@ENDDATE output, @ASOFDATE=@ASOFDATE;

            if @ORGPOSITIONSSELECTIONID is null
              select
                @VALUE = coalesce(count(distinct O.ID), 0)
              from
                dbo.OPPORTUNITY O
                inner join dbo.PROSPECTPLAN PP on PP.ID = O.PROSPECTPLANID
                inner join dbo.PROSPECT P on P.ID = PP.PROSPECTID
                left outer join dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER_NOSECURITY(@CURRENTAPPUSERID) R on dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID,R.BASECURRENCYID) between R.LOWERLIMIT and R.UPPERLIMIT
                --left outer join dbo.UFN_OPPORTUNITYAMOUNTRANGES() R on dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID,R.BASECURRENCYID) between R.LOWERLIMIT and R.UPPERLIMIT

                left join dbo.OPPORTUNITYDESIGNATION OD on OD.OPPORTUNITYID = O.ID
              where
                (   -- JamesWill 2011-04-26 WI151871 Copy what the amounts KPI does so unqualified opportunities (which don't have ask dates) work with this KPI

                    -- If STARTDATE and ENDDATE are null, it indicates all records should be included.  Using this

                    -- rather than having STARTDATE and ENDDATE set to min and max date since opportunities with

                    -- null dates wouldn't be included

                    (@STARTDATE is null and @ENDDATE is null) or
                    (O.ASKDATE between @STARTDATE and @ENDDATE)
                  )
                and (@FUNDRAISERID is null or exists (select 1 from dbo.V_OPPORTUNITYSOLICITOR OS where OS.FUNDRAISERID = @FUNDRAISERID AND OS.OPPORTUNITYID = O.ID))
                and (@DESIGNATIONID is null or OD.DESIGNATIONID = @DESIGNATIONID)
                and (@PROSPECTPLANTYPECODEID is null or PP.PROSPECTPLANTYPECODEID = @PROSPECTPLANTYPECODEID)
                and (@PROSPECTPLANSTATUSCODEID is null or PP.PROSPECTPLANSTATUSCODEID = @PROSPECTPLANSTATUSCODEID)
                and (@PROSPECTSTATUSCODEID is null or P.PROSPECTSTATUSCODEID = @PROSPECTSTATUSCODEID)
                and (@OPPORTUNITYAMOUNTBRACKETID is null or  R.ID = @OPPORTUNITYAMOUNTBRACKETID)
                and (@INCLUDEUNQUALIFIED = 1 or O.STATUSCODE != 0)
                and (@INCLUDEQUALIFIED = 1 or O.STATUSCODE != 1)
                and (@INCLUDERESPONSEPENDING = 1 or O.STATUSCODE != 2)
                and (@INCLUDEACCEPTED = 1 or O.STATUSCODE != 3)
                and (@INCLUDEREJECTED = 1 or O.STATUSCODE != 4)
                and (@INCLUDECANCELED = 1 or O.STATUSCODE != 5);
            else
            begin
              declare @IDS as table(ID uniqueidentifier);
              insert into @IDS exec USP_ORGANIZATIONHIERARCHY_IDSET_POSITIONHOLDERS @ORGPOSITIONSSELECTIONID, null;

              select
                @VALUE = coalesce(count(distinct O.ID), 0)
              from
                dbo.OPPORTUNITY O
                inner join dbo.PROSPECTPLAN PP on PP.ID = O.PROSPECTPLANID
                inner join dbo.PROSPECT P on P.ID = PP.PROSPECTID
                inner join dbo.V_OPPORTUNITYSOLICITOR OS on OS.OPPORTUNITYID = O.ID
                inner join dbo.ORGANIZATIONPOSITIONHOLDER OPH on OPH.CONSTITUENTID = OS.FUNDRAISERID
                    and O.ASKDATE between OPH.DATEFROM and coalesce(OPH.DATETO, O.ASKDATE)
                inner join @IDS as SELECTION on OPH.[ID] = SELECTION.[ID]
                left outer join dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER_NOSECURITY(@CURRENTAPPUSERID) R on dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID,R.BASECURRENCYID) between R.LOWERLIMIT and R.UPPERLIMIT
                left join dbo.OPPORTUNITYDESIGNATION OD on OD.OPPORTUNITYID = O.ID
              where
                 (   -- JamesWill 2011-04-26 WI151871 Copy what the amounts KPI does so unqualified opportunities (which don't have ask dates) work with this KPI

                    -- If STARTDATE and ENDDATE are null, it indicates all records should be included.  Using this

                    -- rather than having STARTDATE and ENDDATE set to min and max date since opportunities with

                    -- null dates wouldn't be included

                    (@STARTDATE is null and @ENDDATE is null) or
                    (O.ASKDATE between @STARTDATE and @ENDDATE)
                  )
                and (@FUNDRAISERID is null or @FUNDRAISERID = OS.FUNDRAISERID)
                and (@DESIGNATIONID is null or OD.DESIGNATIONID = @DESIGNATIONID)
                and (@PROSPECTPLANTYPECODEID is null or PP.PROSPECTPLANTYPECODEID = @PROSPECTPLANTYPECODEID)
                and (@PROSPECTPLANSTATUSCODEID is null or PP.PROSPECTPLANSTATUSCODEID = @PROSPECTPLANSTATUSCODEID)
                and (@PROSPECTSTATUSCODEID is null or P.PROSPECTSTATUSCODEID = @PROSPECTSTATUSCODEID)
                and (@OPPORTUNITYAMOUNTBRACKETID is null or R.ID = @OPPORTUNITYAMOUNTBRACKETID)
                and (@INCLUDEUNQUALIFIED = 1 or O.STATUSCODE != 0)
                and (@INCLUDEQUALIFIED = 1 or O.STATUSCODE != 1)
                and (@INCLUDERESPONSEPENDING = 1 or O.STATUSCODE != 2)
                and (@INCLUDEACCEPTED = 1 or O.STATUSCODE != 3)
                and (@INCLUDEREJECTED = 1 or O.STATUSCODE != 4)
                and (@INCLUDECANCELED = 1 or O.STATUSCODE != 5);

            end