USP_KPI_MAJORGIVING_OPPORTUNITIESAMOUNTFUNDRAISER
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@VALUE | money | INOUT | |
@ASOFDATE | datetime | IN | |
@INCLUDEUNQUALIFIED | bit | IN | |
@INCLUDEQUALIFIED | bit | IN | |
@INCLUDERESPONSEPENDING | bit | IN | |
@INCLUDEACCEPTED | bit | IN | |
@INCLUDEREJECTED | bit | IN | |
@INCLUDECANCELED | bit | IN | |
@DESIGNATIONID | uniqueidentifier | IN | |
@PROSPECTPLANTYPECODEID | uniqueidentifier | IN | |
@PROSPECTPLANSTATUSCODEID | uniqueidentifier | IN | |
@PROSPECTSTATUSCODEID | uniqueidentifier | IN | |
@OPPORTUNITYAMOUNTBRACKETID | uniqueidentifier | IN | |
@ASKDATEFILTER | tinyint | IN | |
@FUNDRAISERID | uniqueidentifier | IN | |
@ORGPOSITIONSSELECTIONID | uniqueidentifier | IN | |
@USEREVENUECOMMITTEDAMOUNT | bit | IN | |
@CURRENCYID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_KPI_MAJORGIVING_OPPORTUNITIESAMOUNTFUNDRAISER
@VALUE money output,
@ASOFDATE datetime,
@INCLUDEUNQUALIFIED bit = 0,
@INCLUDEQUALIFIED bit = 0,
@INCLUDERESPONSEPENDING bit = 0,
@INCLUDEACCEPTED bit = 0,
@INCLUDEREJECTED bit = 0,
@INCLUDECANCELED bit = 0,
@DESIGNATIONID uniqueidentifier = null,
@PROSPECTPLANTYPECODEID uniqueidentifier = null,
@PROSPECTPLANSTATUSCODEID uniqueidentifier = null,
@PROSPECTSTATUSCODEID uniqueidentifier = null,
@OPPORTUNITYAMOUNTBRACKETID uniqueidentifier = null,
@ASKDATEFILTER tinyint = null,
@FUNDRAISERID uniqueidentifier = null,
@ORGPOSITIONSSELECTIONID uniqueidentifier = null,
@USEREVENUECOMMITTEDAMOUNT bit = 0,
@CURRENCYID uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier = null
as
set nocount on;
if @CURRENCYID is null
set @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @STARTDATE datetime;
declare @ENDDATE datetime;
-- Leave STARTDATE and ENDDATE null if all dates is selected
-- so that these date filters aren't applied at all. Otherwise,
-- if the opportunity doesn't have a date set, it would never
-- be included if USP_RESOLVEDATEFILTER was called with all dates
-- since it sets STARTDATE and ENDDATE to min and max dates.
if @ASKDATEFILTER is not null and @ASKDATEFILTER <> 10
exec dbo.USP_RESOLVEDATEFILTER @DATEFILTER=@ASKDATEFILTER, @STARTDATE=@STARTDATE output, @ENDDATE=@ENDDATE output, @ASOFDATE=@ASOFDATE;
if @ORGPOSITIONSSELECTIONID is null
begin
with
OPPORTUNITIES_CTE as
(
select
case when @DESIGNATIONID is null then
case when O.STATUSCODE = 3 then
case when @USEREVENUECOMMITTEDAMOUNT = 1 then dbo.UFN_OPPORTUNITY_REVENUECOMMITTEDINCURRENCY(O.ID, @CURRENCYID)
else dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID, @CURRENCYID)
end
else
dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID, @CURRENCYID)
end
else
sum(dbo.UFN_OPPORTUNITYDESIGNATION_AMOUNTINCURRENCY(OD.ID, @CURRENCYID))
end AMOUNT
from
dbo.OPPORTUNITY O
inner join dbo.PROSPECTPLAN PP on PP.ID = O.PROSPECTPLANID
inner join dbo.PROSPECT P on P.ID = PP.PROSPECTID
left outer join dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER_NOSECURITY(@CURRENTAPPUSERID) R on dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID,R.BASECURRENCYID) between R.LOWERLIMIT and R.UPPERLIMIT
left join dbo.OPPORTUNITYDESIGNATION OD on OD.OPPORTUNITYID = O.ID
where
(
-- If STARTDATE and ENDDATE are null, it indicates all records should be included. Using this
-- rather than having STARTDATE and ENDDATE set to min and max date since opportunities with
-- null dates wouldn't be included
(@STARTDATE is null and @ENDDATE is null) or
(O.ASKDATE between @STARTDATE and @ENDDATE)
)
and (@FUNDRAISERID is null or exists (select 1 from dbo.V_OPPORTUNITYSOLICITOR OS where OS.FUNDRAISERID = @FUNDRAISERID AND OS.OPPORTUNITYID = O.ID))
and (@DESIGNATIONID is null or OD.DESIGNATIONID = @DESIGNATIONID)
and (@PROSPECTPLANTYPECODEID is null or PP.PROSPECTPLANTYPECODEID = @PROSPECTPLANTYPECODEID)
and (@PROSPECTPLANSTATUSCODEID is null or PP.PROSPECTPLANSTATUSCODEID = @PROSPECTPLANSTATUSCODEID)
and (@PROSPECTSTATUSCODEID is null or P.PROSPECTSTATUSCODEID = @PROSPECTSTATUSCODEID)
and (@OPPORTUNITYAMOUNTBRACKETID is null or R.ID = @OPPORTUNITYAMOUNTBRACKETID)
and (@INCLUDEUNQUALIFIED = 1 or O.STATUSCODE != 0)
and (@INCLUDEQUALIFIED = 1 or O.STATUSCODE != 1)
and (@INCLUDERESPONSEPENDING = 1 or O.STATUSCODE != 2)
and (@INCLUDEACCEPTED = 1 or O.STATUSCODE != 3)
and (@INCLUDEREJECTED = 1 or O.STATUSCODE != 4)
and (@INCLUDECANCELED = 1 or O.STATUSCODE != 5)
group by
O.ID, O.AMOUNT, O.STATUSCODE
)
select
@VALUE = coalesce(sum(OPPORTUNITIES_CTE.AMOUNT), 0)
from
OPPORTUNITIES_CTE;
end
else
begin
declare @IDS as table(ID uniqueidentifier);
insert into @IDS exec USP_ORGANIZATIONHIERARCHY_IDSET_POSITIONHOLDERS @ORGPOSITIONSSELECTIONID, null;
with
OPPORTUNITIES_CTE as
(
select
coalesce(sum(AMOUNT),0) as AMOUNT
from
(
select distinct O.ID,
case when @DESIGNATIONID is null then
case when O.STATUSCODE = 3 then
case when @USEREVENUECOMMITTEDAMOUNT = 1 then dbo.UFN_OPPORTUNITY_REVENUECOMMITTEDINCURRENCY(O.ID, @CURRENCYID)
else dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID, @CURRENCYID)
end
else
dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID, @CURRENCYID)
end
else
dbo.UFN_OPPORTUNITYDESIGNATION_AMOUNTINCURRENCY(OD.ID, @CURRENCYID)
end AMOUNT
from
dbo.OPPORTUNITY O
inner join dbo.PROSPECTPLAN PP on PP.ID = O.PROSPECTPLANID
inner join dbo.PROSPECT P on P.ID = PP.PROSPECTID
left outer join dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER_NOSECURITY(@CURRENTAPPUSERID) R on dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY(O.ID,R.BASECURRENCYID) between R.LOWERLIMIT and R.UPPERLIMIT
left join dbo.OPPORTUNITYDESIGNATION OD on OD.OPPORTUNITYID = O.ID
inner join dbo.V_OPPORTUNITYSOLICITOR OS on OS.OPPORTUNITYID = O.ID
inner join dbo.ORGANIZATIONPOSITIONHOLDER OPH on OPH.CONSTITUENTID = OS.FUNDRAISERID
and O.ASKDATE between OPH.DATEFROM and coalesce(OPH.DATETO, O.ASKDATE)
inner join @IDS as SELECTION on OPH.[ID] = SELECTION.[ID]
where
(
-- If STARTDATE and ENDDATE are null, it indicates all records should be included. Using this
-- rather than having STARTDATE and ENDDATE set to min and max date since opportunities with
-- null dates wouldn't be included
(@STARTDATE is null and @ENDDATE is null) or
(O.ASKDATE between @STARTDATE and @ENDDATE)
)
and (@FUNDRAISERID is null or @FUNDRAISERID = OS.FUNDRAISERID)
and (@DESIGNATIONID is null or OD.DESIGNATIONID = @DESIGNATIONID)
and (@PROSPECTPLANTYPECODEID is null or PP.PROSPECTPLANTYPECODEID = @PROSPECTPLANTYPECODEID)
and (@PROSPECTPLANSTATUSCODEID is null or PP.PROSPECTPLANSTATUSCODEID = @PROSPECTPLANSTATUSCODEID)
and (@PROSPECTSTATUSCODEID is null or P.PROSPECTSTATUSCODEID = @PROSPECTSTATUSCODEID)
and (@OPPORTUNITYAMOUNTBRACKETID is null or R.ID = @OPPORTUNITYAMOUNTBRACKETID)
and (@INCLUDEUNQUALIFIED = 1 or O.STATUSCODE != 0)
and (@INCLUDEQUALIFIED = 1 or O.STATUSCODE != 1)
and (@INCLUDERESPONSEPENDING = 1 or O.STATUSCODE != 2)
and (@INCLUDEACCEPTED = 1 or O.STATUSCODE != 3)
and (@INCLUDEREJECTED = 1 or O.STATUSCODE != 4)
and (@INCLUDECANCELED = 1 or O.STATUSCODE != 5)
group by
O.ID, O.AMOUNT, O.STATUSCODE, OD.ID
) as RESULT
)
select
@VALUE = coalesce(sum(OPPORTUNITIES_CTE.AMOUNT), 0)
from
OPPORTUNITIES_CTE;
end