USP_DATALIST_OPPORTUNITYPYRAMID
A datalist of opportunities grouped by giving range for the opportunity pyramid.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@STATUSCODE | tinyint | IN | Show for |
@ORGPOSITIONSSELECTIONID | uniqueidentifier | IN | Organizational team |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@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. |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_OPPORTUNITYPYRAMID(
@STATUSCODE tinyint = 0,
@ORGPOSITIONSSELECTIONID uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null
) as
set nocount on;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @BASECURRENCYID uniqueidentifier;
declare @USERSITEID uniqueidentifier;
select @USERSITEID = SITEID from dbo.APPUSER where ID = @CURRENTAPPUSERID;
select
@BASECURRENCYID = OPPORTUNITYAMOUNTBRACKETGROUP.BASECURRENCYID
from
dbo.OPPORTUNITYAMOUNTBRACKETGROUP
inner join dbo.OPPORTUNITYAMOUNTBRACKETSITES
on OPPORTUNITYAMOUNTBRACKETSITES.OPPORTUNITYAMOUNTBRACKETGROUPID = OPPORTUNITYAMOUNTBRACKETGROUP.ID
where
OPPORTUNITYAMOUNTBRACKETSITES.SITEID = @USERSITEID;
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
select
@DECIMALDIGITS = CURRENCY.DECIMALDIGITS,
@ROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE
from
dbo.CURRENCY
where
CURRENCY.ID = @BASECURRENCYID;
if @ORGPOSITIONSSELECTIONID is null
begin
with AMOUNTS_CTE as (
select R.ID,
sum(O.AMOUNTINCURRENCY) as TOTALAMOUNT,
count(O.ID) as NUMOPPS
from dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) R
inner join dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY_BULK(@BASECURRENCYID, @ORGANIZATIONCURRENCYID) O on O.AMOUNTINCURRENCY between R.LOWERLIMIT and R.UPPERLIMIT
inner join dbo.PROSPECTPLAN on PROSPECTPLAN.ID = O.PROSPECTPLANID
where ((O.STATUSCODE = @STATUSCODE and O.STATUSCODE in (1,2,3)) or (@STATUSCODE = 0 and O.STATUSCODE in (1,2,3)))
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 R.ID
)
select
R.NAME,
R.LOWERLIMIT,
R.UPPERLIMIT,
coalesce(A.TOTALAMOUNT, 0) as TOTALAMOUNT,
coalesce(A.NUMOPPS, 0) as NUMOPPS,
R.BASECURRENCYID,
CURRENCYINFO.CURRENCYSYMBOL,
CURRENCYINFO.ISO4217,
CURRENCYINFO.DECIMALDIGITS,
CURRENCYINFO.SYMBOLDISPLAYSETTINGCODE
from
dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) R
left join AMOUNTS_CTE A on R.ID = A.ID
outer apply dbo.UFN_CURRENCY_GETPROPERTIES(R.BASECURRENCYID) as CURRENCYINFO
order by
R.LOWERLIMIT desc
end
else
begin
declare @IDS as table(ID uniqueidentifier);
insert into @IDS exec USP_ORGANIZATIONHIERARCHY_IDSET_POSITIONHOLDERS @ORGPOSITIONSSELECTIONID, @CURRENTAPPUSERID;
with AMOUNTS_CTE as (
select
ID,
sum(TOTALAMOUNT) as TOTALAMOUNT,
count(*) as NUMOPPS
from
(
select distinct
O.ID as OPPORTUNITYID,
R.ID as ID,
O.AMOUNTINCURRENCY as TOTALAMOUNT
from dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) R
inner join dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY_BULK(@BASECURRENCYID, @ORGANIZATIONCURRENCYID) O on O.AMOUNTINCURRENCY between R.LOWERLIMIT and R.UPPERLIMIT
inner join dbo.PROSPECTPLAN on PROSPECTPLAN.ID = O.PROSPECTPLANID
inner join dbo.V_OPPORTUNITYSOLICITOR OS on OS.OPPORTUNITYID = O.ID
inner join dbo.ORGANIZATIONPOSITIONHOLDER OPH on OPH.CONSTITUENTID = OS.FUNDRAISERID
where ((O.STATUSCODE = @STATUSCODE and O.STATUSCODE in (1,2,3)) or (@STATUSCODE = 0 and O.STATUSCODE in (1,2,3)))
and ( coalesce(O.ASKDATE, O.EXPECTEDASKDATE) between OPH.DATEFROM and coalesce(OPH.DATETO, O.ASKDATE, O.EXPECTEDASKDATE))
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 OPH.ID in (select SELECTION.ID from @IDS as SELECTION)
) as RESULT
group by ID
)
select
R.NAME,
R.LOWERLIMIT,
R.UPPERLIMIT,
coalesce(A.TOTALAMOUNT, 0) as TOTALAMOUNT,
coalesce(A.NUMOPPS, 0) as NUMOPPS,
R.BASECURRENCYID,
CURRENCYINFO.CURRENCYSYMBOL,
CURRENCYINFO.ISO4217,
CURRENCYINFO.DECIMALDIGITS,
CURRENCYINFO.SYMBOLDISPLAYSETTINGCODE
from
dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) R
left join AMOUNTS_CTE A on R.ID = A.ID
outer apply dbo.UFN_CURRENCY_GETPROPERTIES(R.BASECURRENCYID) as CURRENCYINFO
order by
R.LOWERLIMIT desc
end