USP_DATALIST_OPPORTUNITIESBYAMOUNTRANGEANDLIKELIHOOD
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 | |
@SECURITYFEATUREID | uniqueidentifier | IN | |
@SECURITYFEATURETYPE | tinyint | IN | |
@LIKELIHOOD1NAME | nvarchar(100) | INOUT | |
@LIKELIHOOD2NAME | nvarchar(100) | INOUT | |
@LIKELIHOOD3NAME | nvarchar(100) | INOUT | |
@LIKELIHOOD4NAME | nvarchar(100) | INOUT | |
@LIKELIHOOD5NAME | nvarchar(100) | INOUT | |
@TOTALOPPORTUNITIES | int | INOUT | |
@TOTALAMOUNT | money | INOUT | |
@TOTALPROJECTEDREVENUE | money | INOUT | |
@USERBASECURRENCYID | uniqueidentifier | INOUT |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_OPPORTUNITIESBYAMOUNTRANGEANDLIKELIHOOD
(
@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,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@LIKELIHOOD1NAME nvarchar(100) = null output,
@LIKELIHOOD2NAME nvarchar(100) = null output,
@LIKELIHOOD3NAME nvarchar(100) = null output,
@LIKELIHOOD4NAME nvarchar(100) = null output,
@LIKELIHOOD5NAME nvarchar(100) = null output,
@TOTALOPPORTUNITIES int = null output,
@TOTALAMOUNT money = null output,
@TOTALPROJECTEDREVENUE money = null output,
@USERBASECURRENCYID uniqueidentifier = null output
)
as
set nocount on;
declare @STARTDATE datetime;
declare @ENDDATE datetime;
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 @LIKELIHOOD1ID uniqueidentifier;
declare @LIKELIHOOD2ID uniqueidentifier;
declare @LIKELIHOOD3ID uniqueidentifier;
declare @LIKELIHOOD4ID uniqueidentifier;
declare @LIKELIHOOD5ID uniqueidentifier;
select
@LIKELIHOOD1ID = coalesce(T.c.value('(LIKELIHOODID)[1]','uniqueidentifier'), '00000000-0000-0000-0000-000000000000'),
@LIKELIHOOD1NAME = T.c.value('(LIKELIHOODNAME)[1]','nvarchar(100)')
from
@LIKELIHOODS.nodes('/LIKELIHOODID/ITEM') T(c)
where
T.c.value('(SEQUENCE)[1]','tinyint') = 1;
select
@LIKELIHOOD2ID = coalesce(T.c.value('(LIKELIHOODID)[1]','uniqueidentifier'), '00000000-0000-0000-0000-000000000000'),
@LIKELIHOOD2NAME = T.c.value('(LIKELIHOODNAME)[1]','nvarchar(100)')
from
@LIKELIHOODS.nodes('/LIKELIHOODID/ITEM') T(c)
where
T.c.value('(SEQUENCE)[1]','tinyint') = 2;
select
@LIKELIHOOD3ID = coalesce(T.c.value('(LIKELIHOODID)[1]','uniqueidentifier'), '00000000-0000-0000-0000-000000000000'),
@LIKELIHOOD3NAME = T.c.value('(LIKELIHOODNAME)[1]','nvarchar(100)')
from
@LIKELIHOODS.nodes('/LIKELIHOODID/ITEM') T(c)
where
T.c.value('(SEQUENCE)[1]','tinyint') = 3;
select
@LIKELIHOOD4ID = coalesce(T.c.value('(LIKELIHOODID)[1]','uniqueidentifier'), '00000000-0000-0000-0000-000000000000'),
@LIKELIHOOD4NAME = T.c.value('(LIKELIHOODNAME)[1]','nvarchar(100)')
from
@LIKELIHOODS.nodes('/LIKELIHOODID/ITEM') T(c)
where
T.c.value('(SEQUENCE)[1]','tinyint') = 4;
select
@LIKELIHOOD5ID = coalesce(T.c.value('(LIKELIHOODID)[1]','uniqueidentifier'), '00000000-0000-0000-0000-000000000000'),
@LIKELIHOOD5NAME = T.c.value('(LIKELIHOODNAME)[1]','nvarchar(100)')
from
@LIKELIHOODS.nodes('/LIKELIHOODID/ITEM') T(c)
where
T.c.value('(SEQUENCE)[1]','tinyint') = 5;
declare @temp table(
AMOUNTRANGE nvarchar(255),
LIKELIHOODID uniqueidentifier,
LIKELIHOODNAME nvarchar(110),
ASKCOUNT integer,
ASKAMOUNT money,
PROJECTEDREVENUE money,
LOWERLIMIT money
);
if @ORGPOSITIONSSELECTIONID is null
begin
insert into @temp
select
OPPORTUNITYAMOUNTRANGES.NAME AMOUNTRANGE,
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,
OPPORTUNITYAMOUNTRANGES.LOWERLIMIT
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,
OPPORTUNITYAMOUNTRANGES.LOWERLIMIT
order by
OPPORTUNITYAMOUNTRANGES.LOWERLIMIT DESC,
LIKELIHOODTYPECODE.SEQUENCE;
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,
LIKELIHOODTYPECODEID,
DESCRIPTION,
count(*) ASKCOUNT,
sum(ASKAMOUNT),
sum(ASKAMOUNT * [PERCENT] / 100) PROJECTEDREVENUE,
LOWERLIMIT
from
(
select distinct
OPPORTUNITY.ID,
OPPORTUNITYAMOUNTRANGES.NAME AMOUNTRANGE,
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,
coalesce(LIKELIHOODPERCENT.[PERCENT], 0) [PERCENT],
OPPORTUNITYAMOUNTRANGES.LOWERLIMIT LOWERLIMIT
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
(@INCLUDEUNQUALIFIED = 1 or OPPORTUNITY.STATUSCODE <> 0)
and OPH.ID in (select SELECTION.ID from @IDS as SELECTION)
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,
[PERCENT],
DESCRIPTION
end
select
AMOUNTRANGE,
case when @LIKELIHOOD1ID is not null then (select coalesce(sum(t.ASKCOUNT), 0) from @temp t where (t.LIKELIHOODID = @LIKELIHOOD1ID) and t.AMOUNTRANGE = OPPORTUNITYDATA.AMOUNTRANGE) else null end as LIKELIHOOD1ASKCOUNT,
case when @LIKELIHOOD2ID is not null then (select coalesce(sum(t.ASKCOUNT), 0) from @temp t where (t.LIKELIHOODID = @LIKELIHOOD2ID) and t.AMOUNTRANGE = OPPORTUNITYDATA.AMOUNTRANGE) else null end as LIKELIHOOD2ASKCOUNT,
case when @LIKELIHOOD3ID is not null then (select coalesce(sum(t.ASKCOUNT), 0) from @temp t where (t.LIKELIHOODID = @LIKELIHOOD3ID) and t.AMOUNTRANGE = OPPORTUNITYDATA.AMOUNTRANGE) else null end as LIKELIHOOD3ASKCOUNT,
case when @LIKELIHOOD4ID is not null then (select coalesce(sum(t.ASKCOUNT), 0) from @temp t where (t.LIKELIHOODID = @LIKELIHOOD4ID) and t.AMOUNTRANGE = OPPORTUNITYDATA.AMOUNTRANGE) else null end as LIKELIHOOD4ASKCOUNT,
case when @LIKELIHOOD5ID is not null then (select coalesce(sum(t.ASKCOUNT), 0) from @temp t where (t.LIKELIHOODID = @LIKELIHOOD5ID) and t.AMOUNTRANGE = OPPORTUNITYDATA.AMOUNTRANGE) else null end as LIKELIHOOD5ASKCOUNT
from
@temp OPPORTUNITYDATA
group by
AMOUNTRANGE, LOWERLIMIT
order by
LOWERLIMIT
select
@TOTALOPPORTUNITIES = sum(ASKCOUNT),
@TOTALAMOUNT = sum(ASKAMOUNT),
@TOTALPROJECTEDREVENUE = sum(PROJECTEDREVENUE)
from @temp;