USP_DATALIST_OPPORTUNITYSUMMARYBYAMOUNTRANGEANDLIKELIHOOD

Parameters

Parameter Parameter Type Mode Description
@DATEFILTER tinyint IN
@CURRENTAPPUSERID uniqueidentifier IN
@ORGPOSITIONSSELECTIONID uniqueidentifier IN
@PROSPECTPLANTYPECODEID uniqueidentifier IN
@INCLUDEUNQUALIFIED bit IN
@INCLUDEQUALIFIED bit IN
@INCLUDERESPONSEPENDING bit IN
@INCLUDEACCEPTED bit IN
@LIKELIHOODS xml IN
@OPPORTUNITYAMOUNTRANGEID uniqueidentifier IN
@SECURITYFEATUREID uniqueidentifier IN
@SECURITYFEATURETYPE tinyint IN

Definition

Copy


CREATE procedure dbo.USP_DATALIST_OPPORTUNITYSUMMARYBYAMOUNTRANGEANDLIKELIHOOD
(
    @DATEFILTER tinyint = 2,
    @CURRENTAPPUSERID uniqueidentifier = null
    @ORGPOSITIONSSELECTIONID uniqueidentifier = null,
    @PROSPECTPLANTYPECODEID uniqueidentifier = null,
    @INCLUDEUNQUALIFIED bit = 0,
    @INCLUDEQUALIFIED bit = 0,
    @INCLUDERESPONSEPENDING bit = 0,
    @INCLUDEACCEPTED bit = 0,
    @LIKELIHOODS xml = null,
    @OPPORTUNITYAMOUNTRANGEID uniqueidentifier = null,
    @SECURITYFEATUREID uniqueidentifier = null,
    @SECURITYFEATURETYPE tinyint = null
)
as
    set nocount on;

    declare @STARTDATE datetime;
    declare @ENDDATE datetime;

    declare @USERBASECURRENCYID uniqueidentifier;
    set @USERBASECURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID)

    declare @ORGANIZATIONCURRENCYID uniqueidentifier;
    set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()

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

    declare @LIKELIHOODIDS table(TYPECODE uniqueidentifier);
    if @LIKELIHOODS is not null
        begin
            insert into @LIKELIHOODIDS(TYPECODE) 
                select 
                    T.c.value('(LIKELIHOODID)[1]','uniqueidentifier') AS 'TYPECODE'
                from 
                    @LIKELIHOODS.nodes('/LIKELIHOODID/ITEM') T(c) --Note: the root is named LIKELIHOODID to correspond with existing datalist CFF3A21B-C268-4A60-921C-D046964773BB, which is expecting it to be named in this manner.
        end
    else
        begin
            insert into @LIKELIHOODIDS(TYPECODE) 
                select ID from LIKELIHOODTYPECODE;

            insert into @LIKELIHOODIDS(TYPECODE) values(null);
        end

    declare @temp table(
        AMOUNTRANGE nvarchar(255), 
        LOWERLIMIT money,
        LIKELIHOODID uniqueidentifier, 
        LIKELIHOODNAME nvarchar(110), 
        ASKCOUNT integer
        ASKAMOUNT money, 
        PROJECTEDREVENUE money,
        CURRENCYID uniqueidentifier,
        SEQUENCE integer,
        AMOUNTRANGEID uniqueidentifier
    );


    if @ORGPOSITIONSSELECTIONID is null
    begin

        insert into @temp
        select
            OPPORTUNITYAMOUNTRANGES.NAME AMOUNTRANGE,
            OPPORTUNITYAMOUNTRANGES.LOWERLIMIT,
            coalesce(OPPORTUNITY.LIKELIHOODTYPECODEID,'00000000-0000-0000-0000-000000000000'),
            case when OPPORTUNITY.LIKELIHOODTYPECODEID is null then 'Undefined likelihood'
                else dbo.UFN_LIKELIHOODPERCENT_GETNAMEANDPERCENT(OPPORTUNITY.LIKELIHOODTYPECODEID)
            end DESCRIPTION,
            count(*) ASKCOUNT,
            sum(OPPORTUNITYBULK.AMOUNTINCURRENCY) ASKAMOUNT,
            sum(OPPORTUNITYBULK.AMOUNTINCURRENCY * coalesce(LIKELIHOODPERCENT.[PERCENT], 0) / 100) PROJECTEDREVENUE,
            @USERBASECURRENCYID [CURRENCYID],
            coalesce(LIKELIHOODTYPECODE.SEQUENCE, 0),
            OPPORTUNITYAMOUNTRANGES.ID AMOUNTRANGEID
        from 
            OPPORTUNITY
            inner join dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY_BULK(@USERBASECURRENCYID, @ORGANIZATIONCURRENCYID) OPPORTUNITYBULK on OPPORTUNITY.ID = OPPORTUNITYBULK.ID
            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
            left outer join dbo.LIKELIHOODTYPECODE on LIKELIHOODTYPECODE.ID = OPPORTUNITY.LIKELIHOODTYPECODEID
            left outer join dbo.LIKELIHOODPERCENT on LIKELIHOODTYPECODE.ID = LIKELIHOODPERCENT.ID
        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 (@LIKELIHOODS is null 
                        or OPPORTUNITY.LIKELIHOODTYPECODEID in (select typecode from @LIKELIHOODIDS)
                        or (OPPORTUNITY.LIKELIHOODTYPECODEID is null 
                            and (exists (select TYPECODE from @LIKELIHOODIDS where TYPECODE 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
        group by
            OPPORTUNITYAMOUNTRANGES.NAME,
            OPPORTUNITYAMOUNTRANGES.LOWERLIMIT,
            OPPORTUNITY.LIKELIHOODTYPECODEID,
            LIKELIHOODTYPECODE.SEQUENCE,
            LIKELIHOODPERCENT.[PERCENT],
            OPPORTUNITYAMOUNTRANGES.ID
    end

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

        insert into @temp
    select AMOUNTRANGE,
                LOWERLIMIT,
                LIKELIHOODTYPECODEID,
                DESCRIPTION,
                count(*) ASKCOUNT,
                sum(ASKAMOUNT),
                sum(ASKAMOUNT* coalesce([PERCENT], 0) / 100) PROJECTEDREVENUE,
                [CURRENCYID],
                SEQUENCE,
                AMOUNTRANGEID
    from 
    (
          select distinct
          OPPORTUNITY.ID,
            OPPORTUNITYAMOUNTRANGES.NAME AMOUNTRANGE,
            OPPORTUNITYAMOUNTRANGES.LOWERLIMIT LOWERLIMIT,
            coalesce(OPPORTUNITY.LIKELIHOODTYPECODEID,'00000000-0000-0000-0000-000000000000') LIKELIHOODTYPECODEID,
            case when OPPORTUNITY.LIKELIHOODTYPECODEID is null then 'Undefined likelihood'
                else dbo.UFN_LIKELIHOODPERCENT_GETNAMEANDPERCENT(OPPORTUNITY.LIKELIHOODTYPECODEID)
            end DESCRIPTION,
            OPPORTUNITYBULK.AMOUNTINCURRENCY ASKAMOUNT,
            LIKELIHOODPERCENT.[PERCENT] [PERCENT],
            @USERBASECURRENCYID [CURRENCYID],
            coalesce(LIKELIHOODTYPECODE.SEQUENCE, 0) SEQUENCE,
            OPPORTUNITYAMOUNTRANGES.ID AMOUNTRANGEID
          from 
              OPPORTUNITY
              inner join dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY_BULK(@USERBASECURRENCYID, @ORGANIZATIONCURRENCYID) OPPORTUNITYBULK on OPPORTUNITY.ID = OPPORTUNITYBULK.ID
              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
        inner join dbo.V_OPPORTUNITYSOLICITOR OS on OS.OPPORTUNITYID = OPPORTUNITY.ID
        inner join dbo.ORGANIZATIONPOSITIONHOLDER OPH on OPH.CONSTITUENTID = OS.FUNDRAISERID
              left outer join dbo.LIKELIHOODTYPECODE on LIKELIHOODTYPECODE.ID = OPPORTUNITY.LIKELIHOODTYPECODEID
              left outer join dbo.LIKELIHOODPERCENT on LIKELIHOODTYPECODE.ID = LIKELIHOODPERCENT.ID
          where
        OPH.ID in (select SELECTION.ID from @IDS as SELECTION)
              and (@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 (@LIKELIHOODS is null 
                          or OPPORTUNITY.LIKELIHOODTYPECODEID in (select typecode from @LIKELIHOODIDS)
                          or (OPPORTUNITY.LIKELIHOODTYPECODEID is null 
                              and (exists (select TYPECODE from @LIKELIHOODIDS where TYPECODE 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 (
                    coalesce(OPPORTUNITY.ASKDATE, OPPORTUNITY.EXPECTEDASKDATE) between OPH.DATEFROM and coalesce(OPH.DATETO, OPPORTUNITY.ASKDATE, OPPORTUNITY.EXPECTEDASKDATE)
              )
      ) as RESULT  
          group by
              AMOUNTRANGE,
              LOWERLIMIT,
              LIKELIHOODTYPECODEID,
              SEQUENCE,
              [PERCENT],
        DESCRIPTION,
        CURRENCYID,
              AMOUNTRANGEID
    end


    if @OPPORTUNITYAMOUNTRANGEID is null --Just return the opportunity data summarized by amount range
    begin
        select
            AMOUNTRANGEID as ID,
            AMOUNTRANGE as DESCRIPTION,
            sum(ASKCOUNT) as ASKCOUNT, 
            sum(ASKAMOUNT) as ASKAMOUNT,
            sum(PROJECTEDREVENUE) as PROJECTEDREVENUE,
            @USERBASECURRENCYID as CURRENCYID,
            AMOUNTRANGEID as AMOUNTRANGEID,
            null as LIKELIHOODID
        from 
            @temp
        group by
            AMOUNTRANGE,
            AMOUNTRANGEID,
            CURRENCYID,
            LOWERLIMIT
        order by
            LOWERLIMIT desc;
    end

    else --Return the opportunity data broken down for the given amount range
    begin

        select
            LIKELIHOODID as ID,
            LIKELIHOODNAME as DESCRIPTION,
            ASKCOUNT, 
            ASKAMOUNT,
            PROJECTEDREVENUE,
            @USERBASECURRENCYID as CURRENCYID,
            AMOUNTRANGEID as AMOUNTRANGEID,
            LIKELIHOODID as LIKELIHOODID
        from 
            @temp T
        where
            T.AMOUNTRANGEID = @OPPORTUNITYAMOUNTRANGEID
        order by
            SEQUENCE;
    end