USP_DATAFORMTEMPLATE_DATALIST_OPPORTUNITIESSUMMARYPAST2
Fetches summary information.
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 | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | 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. |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_DATALIST_OPPORTUNITIESSUMMARYPAST2
(
@DATEFILTER tinyint,
@CURRENTAPPUSERID uniqueidentifier = null,
@ORGPOSITIONSSELECTIONID uniqueidentifier = null,
@PROSPECTPLANTYPECODEID uniqueidentifier = null,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null
)
as
begin
set nocount on;
/* Initialize parameters */
declare @TODAY datetime = getdate();
exec dbo.USP_RESOLVEDATEFILTER @DATEFILTER, @STARTDATE output, @ENDDATE output;
declare @CURRENCYID uniqueidentifier;
set @CURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID);
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
select
@DECIMALDIGITS = DECIMALDIGITS,
@ROUNDINGTYPECODE = ROUNDINGTYPECODE
from
dbo.CURRENCY
where
ID = @CURRENCYID;
/* Output variables */
declare @REJECTEDASKSCOUNT int;
declare @REJECTEDASKSAMOUNT money;
declare @ACCEPTEDASKSCOUNT int;
declare @ACCEPTEDASKSAMOUNT money;
declare @CANCELEDASKSCOUNT int;
declare @CANCELEDASKSAMOUNT money;
declare @HASACCEPTEDREJECTEDINFUTURE bit;
declare @TOTALREVENUECOMMITTEDCOUNT int;
declare @TOTALREVENUECOMMITTEDAMOUNT money;
declare @TOTALPAIDCOUNT int;
declare @TOTALPAIDAMOUNT money;
/* Store the prospect plans the current user has access to */
if object_id('tempdb..#PROSPECTPLAN_FILTER') is not null
drop table #PROSPECTPLAN_FILTER;
create table #PROSPECTPLAN_FILTER
(
PROSPECTPLANID uniqueidentifier
);
insert into
#PROSPECTPLAN_FILTER
select distinct
PROSPECTPLAN.ID
from
dbo.PROSPECTPLAN
where
(
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;
/* Store all the filtered and included opportunities */
if object_id('tempdb..#OPPORTUNITY_FILTER') is not null
drop table #OPPORTUNITY_FILTER;
create table #OPPORTUNITY_FILTER
(
ID uniqueidentifier,
AMOUNT money,
STATUSCODE tinyint
);
if @ORGPOSITIONSSELECTIONID is null
begin
insert into #OPPORTUNITY_FILTER
select distinct
OPPORTUNITY_CURRENCY.ID,
OPPORTUNITY_CURRENCY.AMOUNTINCURRENCY,
OPPORTUNITY_CURRENCY.STATUSCODE
from
dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID) as OPPORTUNITY_CURRENCY
inner join
dbo.PROSPECTPLAN on PROSPECTPLAN.ID = OPPORTUNITY_CURRENCY.PROSPECTPLANID
inner join
#PROSPECTPLAN_FILTER as PROSPECTPLAN_FILTER on PROSPECTPLAN_FILTER.PROSPECTPLANID = PROSPECTPLAN.ID
where
(@PROSPECTPLANTYPECODEID is null or PROSPECTPLAN.PROSPECTPLANTYPECODEID = @PROSPECTPLANTYPECODEID)
and
(
(OPPORTUNITY_CURRENCY.STATUSCODE in (3, 4) and (OPPORTUNITY_CURRENCY.RESPONSEDATE between @STARTDATE and @ENDDATE))
or
(
OPPORTUNITY_CURRENCY.STATUSCODE = 5
and
(
OPPORTUNITY_CURRENCY.ASKDATE is null
and
(
OPPORTUNITY_CURRENCY.EXPECTEDASKDATE >= convert(nvarchar(8), @STARTDATE, 112)
and
OPPORTUNITY_CURRENCY.EXPECTEDASKDATE <= convert(nvarchar(8), @ENDDATE, 112)
)
or
(
OPPORTUNITY_CURRENCY.ASKDATE >= convert(nvarchar(8), @STARTDATE, 112)
and
OPPORTUNITY_CURRENCY.ASKDATE <= convert(nvarchar(8), @ENDDATE, 112)
)
or
(OPPORTUNITY_CURRENCY.ASKDATE is null and OPPORTUNITY_CURRENCY.EXPECTEDASKDATE is null and @DATEFILTER = 10)
)
)
);
/*Set @HASACCEPTEDREJECTEDINFUTURE - possibly consolidate */
if exists(select 1 from dbo.OPPORTUNITY where STATUSCODE in (3, 4, 5) and RESPONSEDATE > @TODAY)
set @HASACCEPTEDREJECTEDINFUTURE = 1;
else
set @HASACCEPTEDREJECTEDINFUTURE = 0;
end
else
begin
declare @SELECTION_FILTER as table
(
ID uniqueidentifier
);
insert into @SELECTION_FILTER
exec dbo.USP_ORGANIZATIONHIERARCHY_IDSET_POSITIONHOLDERS @ORGPOSITIONSSELECTIONID, @CURRENTAPPUSERID;
insert into #OPPORTUNITY_FILTER
select distinct
OPPORTUNITY_CURRENCY.ID,
OPPORTUNITY_CURRENCY.AMOUNTINCURRENCY,
OPPORTUNITY_CURRENCY.STATUSCODE
from
dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID) as OPPORTUNITY_CURRENCY
inner join
dbo.PROSPECTPLAN on PROSPECTPLAN.ID = OPPORTUNITY_CURRENCY.PROSPECTPLANID
inner join
#PROSPECTPLAN_FILTER as PROSPECTPLAN_FILTER on PROSPECTPLAN_FILTER.PROSPECTPLANID = PROSPECTPLAN.ID
inner join
dbo.V_OPPORTUNITYSOLICITOR on V_OPPORTUNITYSOLICITOR.OPPORTUNITYID = OPPORTUNITY_CURRENCY.ID
inner join
dbo.ORGANIZATIONPOSITIONHOLDER on ORGANIZATIONPOSITIONHOLDER.CONSTITUENTID = V_OPPORTUNITYSOLICITOR.FUNDRAISERID
where
(@PROSPECTPLANTYPECODEID is null or PROSPECTPLAN.PROSPECTPLANTYPECODEID = @PROSPECTPLANTYPECODEID)
and
(
(OPPORTUNITY_CURRENCY.STATUSCODE in (3, 4) and (OPPORTUNITY_CURRENCY.RESPONSEDATE between @STARTDATE and @ENDDATE))
or
(
OPPORTUNITY_CURRENCY.STATUSCODE = 5
and
(
OPPORTUNITY_CURRENCY.ASKDATE is null
and
(
OPPORTUNITY_CURRENCY.EXPECTEDASKDATE >= convert(nvarchar(8), @STARTDATE, 112)
and
OPPORTUNITY_CURRENCY.EXPECTEDASKDATE <= convert(nvarchar(8), @ENDDATE, 112)
)
or
(
OPPORTUNITY_CURRENCY.ASKDATE >= convert(nvarchar(8), @STARTDATE, 112)
and
OPPORTUNITY_CURRENCY.ASKDATE <= convert(nvarchar(8), @ENDDATE, 112)
)
or
(OPPORTUNITY_CURRENCY.ASKDATE is null and OPPORTUNITY_CURRENCY.EXPECTEDASKDATE is null and @DATEFILTER = 10)
)
)
)
and
ORGANIZATIONPOSITIONHOLDER.ID in (select ID from @SELECTION_FILTER)
and
(
coalesce(OPPORTUNITY_CURRENCY.RESPONSEDATE, OPPORTUNITY_CURRENCY.ASKDATE, OPPORTUNITY_CURRENCY.EXPECTEDASKDATE) between
ORGANIZATIONPOSITIONHOLDER.DATEFROM and coalesce(ORGANIZATIONPOSITIONHOLDER.DATETO, @ENDDATE)
or
coalesce(OPPORTUNITY_CURRENCY.RESPONSEDATE, OPPORTUNITY_CURRENCY.ASKDATE, OPPORTUNITY_CURRENCY.EXPECTEDASKDATE) is null
);
/*Set @HASACCEPTEDREJECTEDINFUTURE - possibly consolidate*/
if exists(
select 1
from dbo.OPPORTUNITY
inner join dbo.PROSPECTPLAN on OPPORTUNITY.PROSPECTPLANID = PROSPECTPLAN.ID
inner join #PROSPECTPLAN_FILTER as PROSPECTPLAN_FILTER on PROSPECTPLAN.ID = PROSPECTPLAN_FILTER.PROSPECTPLANID
inner join dbo.V_OPPORTUNITYSOLICITOR on V_OPPORTUNITYSOLICITOR.OPPORTUNITYID = OPPORTUNITY.ID
inner join dbo.ORGANIZATIONPOSITIONHOLDER on ORGANIZATIONPOSITIONHOLDER.CONSTITUENTID = V_OPPORTUNITYSOLICITOR.FUNDRAISERID
where (
(OPPORTUNITY.STATUSCODE in (3,4) and OPPORTUNITY.RESPONSEDATE > @TODAY)
or
(
OPPORTUNITY.STATUSCODE = 5 and
(OPPORTUNITY.ASKDATE is null
and
(OPPORTUNITY.EXPECTEDASKDATE>convert(nvarchar(8), @TODAY, 112))
or
(OPPORTUNITY.ASKDATE > convert(nvarchar(8), @TODAY, 112)))
)
)
and (@PROSPECTPLANTYPECODEID is null or PROSPECTPLAN.PROSPECTPLANTYPECODEID = @PROSPECTPLANTYPECODEID)
and ORGANIZATIONPOSITIONHOLDER.ID in (select ID from @SELECTION_FILTER)
and (
coalesce(OPPORTUNITY.RESPONSEDATE, OPPORTUNITY.ASKDATE, OPPORTUNITY.EXPECTEDASKDATE) between
ORGANIZATIONPOSITIONHOLDER.DATEFROM and
coalesce(ORGANIZATIONPOSITIONHOLDER.DATETO, @ENDDATE)
or coalesce(OPPORTUNITY.RESPONSEDATE, OPPORTUNITY.ASKDATE, OPPORTUNITY.EXPECTEDASKDATE) is null
)
)
set @HASACCEPTEDREJECTEDINFUTURE = 1;
else
set @HASACCEPTEDREJECTEDINFUTURE = 0;
end
/* Calculations from opportunities */
select
@ACCEPTEDASKSCOUNT = count(ID),
@ACCEPTEDASKSAMOUNT = coalesce(sum(AMOUNT), 0)
from
#OPPORTUNITY_FILTER
where
STATUSCODE = 3;
select
@REJECTEDASKSCOUNT = count(ID),
@REJECTEDASKSAMOUNT = coalesce(sum(AMOUNT), 0)
from
#OPPORTUNITY_FILTER
where
STATUSCODE = 4;
select
@CANCELEDASKSCOUNT = count(ID),
@CANCELEDASKSAMOUNT = coalesce(sum(AMOUNT), 0)
from
#OPPORTUNITY_FILTER
where
STATUSCODE = 5;
/* Store revenue associated with opportunities */
if object_id('tempdb..#REVENUE_FILTER') is not null
drop table #REVENUE_FILTER;
create table #REVENUE_FILTER
(
OPPORTUNITYID uniqueidentifier,
AMOUNT money,
TRANSACTIONTYPECODE tinyint,
APPLICATIONCODE tinyint
);
insert into #REVENUE_FILTER
select
OPPORTUNITY_FILTER.ID,
REVENUESPLIT_CURRENCY.AMOUNTINCURRENCY,
REVENUESPLIT_CURRENCY.TRANSACTIONTYPECODE,
REVENUESPLIT_CURRENCY.APPLICATIONCODE
from
#OPPORTUNITY_FILTER as OPPORTUNITY_FILTER
inner join
dbo.REVENUEOPPORTUNITY on REVENUEOPPORTUNITY.OPPORTUNITYID = OPPORTUNITY_FILTER.ID
inner join
dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) as REVENUESPLIT_CURRENCY
on REVENUESPLIT_CURRENCY.ID = REVENUEOPPORTUNITY.ID
where
REVENUESPLIT_CURRENCY.TRANSACTIONTYPECODE in (0, 1, 2)
and
REVENUESPLIT_CURRENCY.APPLICATIONCODE in (0,2)
and
REVENUESPLIT_CURRENCY.TYPECODE = 0;
/* Calculations from revenue */
select
@TOTALREVENUECOMMITTEDCOUNT = count(distinct OPPORTUNITYID),
@TOTALREVENUECOMMITTEDAMOUNT = coalesce(sum(AMOUNT), 0)
from
#REVENUE_FILTER
where
APPLICATIONCODE = 0;
select
@TOTALPAIDCOUNT = count(distinct OPPORTUNITYID),
@TOTALPAIDAMOUNT = coalesce(sum(AMOUNT), 0)
from
#REVENUE_FILTER
where
TRANSACTIONTYPECODE = 0;
/* Return output */
select
@ACCEPTEDASKSCOUNT 'Accepted asks count',
@ACCEPTEDASKSAMOUNT 'Accepted asks amount',
@REJECTEDASKSCOUNT 'Rejected asks count',
@REJECTEDASKSAMOUNT 'Rejected asks amount',
@HASACCEPTEDREJECTEDINFUTURE HASACCEPTEDREJECTEDINFUTURE,
@TOTALREVENUECOMMITTEDCOUNT 'Total revenue committed count',
@TOTALREVENUECOMMITTEDAMOUNT 'Total revenue committed amount',
@TOTALPAIDCOUNT 'Total paid count',
@TOTALPAIDAMOUNT 'Total paid amount',
@CURRENCYID CURRENCYID,
@CANCELEDASKSCOUNT 'Canceled asks count',
@CANCELEDASKSAMOUNT 'Canceled asks amount';
return 0;
end