USP_KPI_MAJORGIVING_AVGDAYSTOCLOSEGIFTFUNDRAISER

Parameters

Parameter Parameter Type Mode Description
@VALUE int INOUT
@ASOFDATE datetime IN
@DATEFILTER tinyint IN
@PROSPECTPLANTYPECODEID uniqueidentifier IN
@OPPORTUNITYAMOUNTBRACKETID uniqueidentifier IN
@DESIGNATIONID uniqueidentifier IN
@FUNDRAISERID uniqueidentifier IN
@ORGPOSITIONSSELECTIONID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


        CREATE procedure dbo.USP_KPI_MAJORGIVING_AVGDAYSTOCLOSEGIFTFUNDRAISER
          @VALUE int output,
          @ASOFDATE datetime
          @DATEFILTER tinyint = null,
          @PROSPECTPLANTYPECODEID uniqueidentifier = null,
          @OPPORTUNITYAMOUNTBRACKETID uniqueidentifier = null,
          @DESIGNATIONID uniqueidentifier = null,
          @FUNDRAISERID uniqueidentifier = null,
          @ORGPOSITIONSSELECTIONID uniqueidentifier = null,
          @CURRENTAPPUSERID uniqueidentifier = null
        as

          set nocount on;

          if @DATEFILTER is null begin
            set @DATEFILTER = 10;  -- all dates;

          end

          declare @STARTDATE datetime;
          declare @ENDDATE datetime;

          exec dbo.USP_RESOLVEDATEFILTER @DATEFILTER=@DATEFILTER, @STARTDATE=@STARTDATE output, @ENDDATE=@ENDDATE output, @ASOFDATE=@ASOFDATE;

          declare @DAYS int;
          declare @ASKS int;

          if @ORGPOSITIONSSELECTIONID is null
            select 
              @ASKS = count(*),
              @DAYS = sum(case when I.FIRSTDATE>O.RESPONSEDATE then 0 else datediff(day, I.FIRSTDATE, O.RESPONSEDATE) end)
            from 
              dbo.OPPORTUNITY O
              inner join dbo.PROSPECTPLAN PP on PP.ID=O.PROSPECTPLANID
              inner join (
                select min(DATE) FIRSTDATE, PROSPECTPLANID 
                from dbo.INTERACTION 
                group by PROSPECTPLANID
              ) I on I.PROSPECTPLANID=PP.ID
              left outer join dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) R on dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID,R.BASECURRENCYID) between R.LOWERLIMIT and R.UPPERLIMIT
            where
              O.STATUSCODE=3
              and O.RESPONSEDATE between @STARTDATE and @ENDDATE
              and (@PROSPECTPLANTYPECODEID is null or PP.PROSPECTPLANTYPECODEID = @PROSPECTPLANTYPECODEID)
              and (@FUNDRAISERID is null or exists (select 1 from dbo.UFN_FUNDRAISER_PROSPECTPLANS(@FUNDRAISERID) FPP where PP.ID = FPP.ID))
              and (@DESIGNATIONID is null or exists(select 1 from dbo.OPPORTUNITYDESIGNATION OD where OD.OPPORTUNITYID=O.ID and OD.DESIGNATIONID=@DESIGNATIONID))
              and (@OPPORTUNITYAMOUNTBRACKETID is null or R.ID = @OPPORTUNITYAMOUNTBRACKETID)
          else
          begin
            declare @IDS as table(ID uniqueidentifier);
            insert into @IDS exec USP_ORGANIZATIONHIERARCHY_IDSET_POSITIONHOLDERS @ORGPOSITIONSSELECTIONID, null;

            select 
              @ASKS = count(*),
              @DAYS = sum(case when I.FIRSTDATE>O.RESPONSEDATE then 0 else datediff(day, I.FIRSTDATE, O.RESPONSEDATE) end)
            from 
              dbo.OPPORTUNITY O
              inner join dbo.PROSPECTPLAN PP on PP.ID=O.PROSPECTPLANID
              inner join (
                select min(DATE) FIRSTDATE, PROSPECTPLANID 
                from dbo.INTERACTION 
                group by PROSPECTPLANID
              ) I on I.PROSPECTPLANID=PP.ID
              inner join dbo.ORGANIZATIONPOSITIONHOLDER OPH
                  on (OPH.CONSTITUENTID = PP.PRIMARYMANAGERFUNDRAISERID) or (OPH.CONSTITUENTID = PP.SECONDARYMANAGERFUNDRAISERID) or ((select count(ID) from dbo.SECONDARYFUNDRAISER SF where SF.PROSPECTPLANID = PP.ID and SF.FUNDRAISERID = OPH.CONSTITUENTID) > 0
                  and O.RESPONSEDATE between OPH.DATEFROM and coalesce(OPH.DATETO, O.RESPONSEDATE)
              inner join @IDS as SELECTION on OPH.[ID] = SELECTION.[ID]
              left outer join dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) R on dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID,R.BASECURRENCYID) between R.LOWERLIMIT and R.UPPERLIMIT
            where
              O.STATUSCODE=3
              and O.RESPONSEDATE between @STARTDATE and @ENDDATE
              and (@PROSPECTPLANTYPECODEID is null or PP.PROSPECTPLANTYPECODEID = @PROSPECTPLANTYPECODEID)
              and (@FUNDRAISERID is null or exists (select 1 from dbo.UFN_FUNDRAISER_PROSPECTPLANS(@FUNDRAISERID) FPP where PP.ID = FPP.ID))
              and (@DESIGNATIONID is null or exists(select 1 from dbo.OPPORTUNITYDESIGNATION OD where OD.OPPORTUNITYID=O.ID and OD.DESIGNATIONID=@DESIGNATIONID))
              and (@OPPORTUNITYAMOUNTBRACKETID is null or  R.ID = @OPPORTUNITYAMOUNTBRACKETID)
          end

          if @ASKS>0 begin
            set @VALUE = convert(int,convert(decimal,@DAYS) / @ASKS + 0.5);
          end else begin
            set @VALUE = null;
          end