USP_DATALIST_OPPORTUNITIESBYLIKELIHOOD_DATE_AMOUNT

A datalist of opportunities filtered by likelihood, date range and amount range.

Parameters

Parameter Parameter Type Mode Description
@DATEFILTER tinyint IN
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@ORGPOSITIONSSELECTIONID uniqueidentifier IN
@PROSPECTPLANTYPECODEID uniqueidentifier IN Plan type
@RANGELOWERLIMIT varchar(100) IN
@INCLUDEUNQUALIFIED bit IN
@INCLUDEQUALIFIED bit IN
@INCLUDERESPONSEPENDING bit IN
@INCLUDEACCEPTED bit IN
@LIKELIHOODID uniqueidentifier IN
@NOLIKELIHOODSONLY bit IN
@LIKELIHOODLIST xml IN
@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.
@AMOUNTRANGEID uniqueidentifier IN Amount range ID

Definition

Copy


                CREATE procedure dbo.USP_DATALIST_OPPORTUNITIESBYLIKELIHOOD_DATE_AMOUNT(
                    @DATEFILTER tinyint = 2,
                    @CURRENTAPPUSERID uniqueidentifier = null
                    @ORGPOSITIONSSELECTIONID uniqueidentifier = null,
                    @PROSPECTPLANTYPECODEID uniqueidentifier = null,
                    @RANGELOWERLIMIT varchar(100) = '',
                    @INCLUDEUNQUALIFIED bit = 0,
                    @INCLUDEQUALIFIED bit = 0,
                    @INCLUDERESPONSEPENDING bit = 0,
                    @INCLUDEACCEPTED bit = 0,
                    @LIKELIHOODID uniqueidentifier = null,
                    @NOLIKELIHOODSONLY bit = 0,
                    @LIKELIHOODLIST as xml = null,
                    @SITEFILTERMODE tinyint = 0,
                    @SITESSELECTED xml = null,
                    @SECURITYFEATUREID uniqueidentifier = null,
                    @SECURITYFEATURETYPE tinyint = null,
                    @AMOUNTRANGEID uniqueidentifier = null
                ) as 
                    set nocount on;

                    declare @STARTDATE datetime;
                    declare @ENDDATE datetime;
                    exec dbo.USP_RESOLVEDATEFILTER @DATEFILTER, @STARTDATE output, @ENDDATE output;

                    --If the lower limit is set to 0.00 and an amount range ID is given, do a sanity check to ensure that this is truly the lower limit.


                    if (@RANGELOWERLIMIT = '0.00' or @RANGELOWERLIMIT= '') and @AMOUNTRANGEID is not null
                    begin
                        select @RANGELOWERLIMIT = cast(LOWERLIMIT as varchar(100))
                        from dbo.OPPORTUNITYAMOUNTBRACKET
                        where ID = @AMOUNTRANGEID
                    end

                    declare @LIKELIHOODIDS table(TYPECODE uniqueidentifier);
                    if @LIKELIHOODID is null
                        begin
                        if @LIKELIHOODLIST is not null
                            begin
                                insert into @LIKELIHOODIDS(TYPECODE) 
                                    select 
                                        T.c.value('(LIKELIHOODID)[1]','uniqueidentifier') AS 'TYPECODE'
                                    from @LIKELIHOODLIST.nodes('/LIKELIHOODID/ITEM') T(c) 
                            end
                        else --@LIKELIHOODLIST is null

                            begin
                                insert into @LIKELIHOODIDS(TYPECODE) 
                                    select ID from LIKELIHOODTYPECODE;
                                insert into @LIKELIHOODIDS(TYPECODE) values(null);
                            end
                        end            
                    else --@LIKELIHOODID is not null

                        begin
                            insert into @LIKELIHOODIDS(TYPECODE) values(@LIKELIHOODID)
                        end


                    declare @IDS as table(ID uniqueidentifier);
                    if @ORGPOSITIONSSELECTIONID is not null
                    begin
                        insert into @IDS exec USP_ORGANIZATIONHIERARCHY_IDSET_POSITIONHOLDERS @ORGPOSITIONSSELECTIONID, @CURRENTAPPUSERID;
                    end

                    if @NOLIKELIHOODSONLY=0 
                        begin
                            select
                                OPPORTUNITY.ID,
                                PROSPECTPLAN.ID,
                                PROSPECTPLAN.PROSPECTID,
                                NF.NAME,
                                PROSPECTPLANTYPECODE.DESCRIPTION,
                                dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(OPPORTUNITY.ID, OPPORTUNITYAMOUNTRANGES.BASECURRENCYID),
                                OPPORTUNITYAMOUNTRANGES.NAME,
                                coalesce(OPPORTUNITY.ASKDATE,OPPORTUNITY.EXPECTEDASKDATE),
                                dbo.UFN_PROSPECTPLAN_GETSITELIST(PROSPECTPLAN.ID) SITES,
                                OPPORTUNITYAMOUNTRANGES.BASECURRENCYID,
                                OPPORTUNITY.STATUS
                            from
                                dbo.OPPORTUNITY
                                inner join dbo.PROSPECTPLAN on PROSPECTPLAN.ID=OPPORTUNITY.PROSPECTPLANID
                                inner join dbo.PROSPECTPLANTYPECODE on PROSPECTPLANTYPECODE.ID=PROSPECTPLAN.PROSPECTPLANTYPECODEID
                                inner join dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) OPPORTUNITYAMOUNTRANGES on dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(OPPORTUNITY.ID, OPPORTUNITYAMOUNTRANGES.BASECURRENCYID) between OPPORTUNITYAMOUNTRANGES.LOWERLIMIT and OPPORTUNITYAMOUNTRANGES.UPPERLIMIT
                                cross apply dbo.UFN_CONSTITUENT_DISPLAYNAME(PROSPECTPLAN.PROSPECTID) NF
                                where
                                    (@INCLUDEUNQUALIFIED = 1 or OPPORTUNITY.STATUSCODE <> 0
                                    and (@INCLUDEQUALIFIED = 1 or OPPORTUNITY.STATUSCODE <> 1
                                    and (@INCLUDERESPONSEPENDING = 1 or OPPORTUNITY.STATUSCODE <> 2
                                    and (@INCLUDEACCEPTED = 1 or OPPORTUNITY.STATUSCODE <> 3
                                    and OPPORTUNITY.STATUSCODE not in (4,5)
                                    and (OPPORTUNITY.ASKDATE between @STARTDATE and @ENDDATE
                                             or OPPORTUNITY.ASKDATE is null and OPPORTUNITY.EXPECTEDASKDATE between @STARTDATE and @ENDDATE)
                                    and (@PROSPECTPLANTYPECODEID is null or PROSPECTPLAN.PROSPECTPLANTYPECODEID = @PROSPECTPLANTYPECODEID)
                                    and (@RANGELOWERLIMIT = '' or CAST(@RANGELOWERLIMIT as money) = OPPORTUNITYAMOUNTRANGES.LOWERLIMIT)
                                    and ((OPPORTUNITY.LIKELIHOODTYPECODEID is null 
                                            and (exists (select TYPECODE from @LIKELIHOODIDS where TYPECODE is null)))
                                        or (OPPORTUNITY.LIKELIHOODTYPECODEID in (select TYPECODE from @LIKELIHOODIDS)))
                                    and (
                                        select count(*
                                        from dbo.UFN_SITEID_MAPFROM_PROSPECTPLANID(PROSPECTPLAN.ID) as PROSPECTPLANSITE 
                                        where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[PROSPECTPLANSITE].[SITEID] or (SITEID is null and [PROSPECTPLANSITE].[SITEID] is null)))
                                    ) > 0
                                    and (
                                        @SITEFILTERMODE = 0
                                            or PROSPECTPLAN.ID in (
                                                select PROSPECTPLANSITE.PROSPECTPLANID
                                                from dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER
                                                    inner join dbo.PROSPECTPLANSITE on PROSPECTPLANSITE.SITEID = SITEFILTER.SITEID
                                            )
                                    )
                                    and (@ORGPOSITIONSSELECTIONID is null or exists (
                                        select SELECTION.ID
                                        from @IDS as SELECTION
                                        inner join dbo.ORGANIZATIONPOSITIONHOLDER as OPH on OPH.ID = SELECTION.ID
                                        where
                                            (OPH.CONSTITUENTID = PROSPECTPLAN.PRIMARYMANAGERFUNDRAISERID) or (OPH.CONSTITUENTID = PROSPECTPLAN.SECONDARYMANAGERFUNDRAISERID) or ((select count(SF.ID) from dbo.SECONDARYFUNDRAISER SF where SF.PROSPECTPLANID = PROSPECTPLAN.ID and SF.FUNDRAISERID = OPH.CONSTITUENTID) > 0)  
                                            and(
                                                coalesce(OPPORTUNITY.RESPONSEDATE, OPPORTUNITY.ASKDATE, OPPORTUNITY.EXPECTEDASKDATE) between OPH.DATEFROM and coalesce(OPH.DATETO, convert(nvarchar(8), getdate(), 112))
                                                    or coalesce(OPPORTUNITY.RESPONSEDATE, OPPORTUNITY.ASKDATE, OPPORTUNITY.EXPECTEDASKDATE) is null
                                            )
                                    ))
                            order by
                                OPPORTUNITY.AMOUNT desc;
                            end
                        else --@NOLIKELIHOODSONLY=1

                          begin
                            select
                                OPPORTUNITY.ID,
                                PROSPECTPLAN.ID,
                                PROSPECTPLAN.PROSPECTID,
                                NF.NAME,
                                PROSPECTPLANTYPECODE.DESCRIPTION,
                                dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(OPPORTUNITY.ID, OPPORTUNITYAMOUNTRANGES.BASECURRENCYID),
                                OPPORTUNITYAMOUNTRANGES.NAME,
                                OPPORTUNITY.ASKDATE,
                                dbo.UFN_PROSPECTPLAN_GETSITELIST(PROSPECTPLAN.ID) SITES,
                                  OPPORTUNITYAMOUNTRANGES.BASECURRENCYID,
                                OPPORTUNITY.STATUS
                            from
                                dbo.OPPORTUNITY
                                inner join dbo.PROSPECTPLAN on PROSPECTPLAN.ID=OPPORTUNITY.PROSPECTPLANID
                                inner join dbo.PROSPECTPLANTYPECODE on PROSPECTPLANTYPECODE.ID=PROSPECTPLAN.PROSPECTPLANTYPECODEID
                                inner join dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) OPPORTUNITYAMOUNTRANGES on dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(OPPORTUNITY.ID, OPPORTUNITYAMOUNTRANGES.BASECURRENCYID) between OPPORTUNITYAMOUNTRANGES.LOWERLIMIT and OPPORTUNITYAMOUNTRANGES.UPPERLIMIT
                                cross apply dbo.UFN_CONSTITUENT_DISPLAYNAME(PROSPECTPLAN.PROSPECTID) NF
                            where
                                (@INCLUDEUNQUALIFIED = 1 or OPPORTUNITY.STATUSCODE <> 0
                                and (@INCLUDEQUALIFIED = 1 or OPPORTUNITY.STATUSCODE <> 1
                                and (@INCLUDERESPONSEPENDING = 1 or OPPORTUNITY.STATUSCODE <> 2
                                and (@INCLUDEACCEPTED = 1 or OPPORTUNITY.STATUSCODE <> 3
                                and OPPORTUNITY.STATUSCODE not in (4,5)
                                and (OPPORTUNITY.ASKDATE between @STARTDATE and @ENDDATE
                                    or OPPORTUNITY.ASKDATE is null and OPPORTUNITY.EXPECTEDASKDATE between @STARTDATE and @ENDDATE)
                                and (@PROSPECTPLANTYPECODEID is null or PROSPECTPLAN.PROSPECTPLANTYPECODEID = @PROSPECTPLANTYPECODEID)
                                and (@RANGELOWERLIMIT = '' or @RANGELOWERLIMIT = OPPORTUNITYAMOUNTRANGES.LOWERLIMIT)
                                and OPPORTUNITY.LIKELIHOODTYPECODEID is null
                                and (
                                    select count(*
                                    from dbo.UFN_SITEID_MAPFROM_PROSPECTPLANID(PROSPECTPLAN.ID) as PROSPECTPLANSITE 
                                    where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[PROSPECTPLANSITE].[SITEID] or (SITEID is null and [PROSPECTPLANSITE].[SITEID] is null)))
                                ) > 0
                                and (
                                    @SITEFILTERMODE = 0
                                        or PROSPECTPLAN.ID in (
                                            select PROSPECTPLANSITE.PROSPECTPLANID
                                            from dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER
                                                inner join dbo.PROSPECTPLANSITE on PROSPECTPLANSITE.SITEID = SITEFILTER.SITEID
                                        )
                                )
                                and (@ORGPOSITIONSSELECTIONID is null or exists (
                                    select SELECTION.ID
                                    from @IDS as SELECTION
                                    inner join dbo.ORGANIZATIONPOSITIONHOLDER as OPH on OPH.ID = SELECTION.ID
                                    where
                                        (OPH.CONSTITUENTID = PROSPECTPLAN.PRIMARYMANAGERFUNDRAISERID) or (OPH.CONSTITUENTID = PROSPECTPLAN.SECONDARYMANAGERFUNDRAISERID) or ((select count(SF.ID) from dbo.SECONDARYFUNDRAISER SF where SF.PROSPECTPLANID = PROSPECTPLAN.ID and SF.FUNDRAISERID = OPH.CONSTITUENTID) > 0)  
                                        and(
                                            coalesce(OPPORTUNITY.RESPONSEDATE, OPPORTUNITY.ASKDATE, OPPORTUNITY.EXPECTEDASKDATE) between OPH.DATEFROM and coalesce(OPH.DATETO, convert(nvarchar(8), getdate(), 112))
                                                or coalesce(OPPORTUNITY.RESPONSEDATE, OPPORTUNITY.ASKDATE, OPPORTUNITY.EXPECTEDASKDATE) is null
                                        )
                                ))
                            order by
                                OPPORTUNITY.AMOUNT desc;
                        end