USP_GROUP_RECOGNITIONSUMMARYGET
Returns recognition summary values for a group.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@RECOGNITIONTOTALNUMBER | int | INOUT | |
@RECOGNITIONTOTALAMOUNT | money | INOUT | |
@RECOGNITIONTOTALGROUPAMOUNT | money | INOUT | |
@RECOGNITIONTOTALGROUPMEMBERAMOUNT | money | INOUT | |
@RECOGNITIONAVERAGEAMOUNT | money | INOUT | |
@RECOGNITIONMOSTFREQUENTAMOUNT | money | INOUT | |
@RECOGNITIONTOTALYEARS | int | INOUT | |
@RECOGNITIONCONSECUTIVEYEARS | int | INOUT | |
@RECOGNITIONGIVENSINCEFISCALYEAR | datetime | INOUT | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@SITEFILTERMODE | tinyint | IN | |
@SITESSELECTED | xml | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | |
@SECURITYFEATURETYPE | tinyint | IN | |
@RECOGNITIONGROUPMEMBERTAXCLAIMAMOUNT | money | INOUT | |
@CURRENCYID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_GROUP_RECOGNITIONSUMMARYGET
(
@CONSTITUENTID uniqueidentifier,
@RECOGNITIONTOTALNUMBER int = null output,
@RECOGNITIONTOTALAMOUNT money = null output,
@RECOGNITIONTOTALGROUPAMOUNT money = null output,
@RECOGNITIONTOTALGROUPMEMBERAMOUNT money = null output,
@RECOGNITIONAVERAGEAMOUNT money = null output,
@RECOGNITIONMOSTFREQUENTAMOUNT money = null output,
@RECOGNITIONTOTALYEARS int = null output,
@RECOGNITIONCONSECUTIVEYEARS int = null output,
@RECOGNITIONGIVENSINCEFISCALYEAR datetime = null output,
@CURRENTAPPUSERID uniqueidentifier = null,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@RECOGNITIONGROUPMEMBERTAXCLAIMAMOUNT money = null output,
@CURRENCYID uniqueidentifier = null
)
as
set nocount on
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
select @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(),
@DECIMALDIGITS = DECIMALDIGITS,
@ROUNDINGTYPECODE = ROUNDINGTYPECODE
from
dbo.CURRENCY
where
CURRENCY.ID = @CURRENCYID;
declare @GROUPINCLUDESMEMBERGIVING bit
select
@GROUPINCLUDESMEMBERGIVING =
case
when GD.GROUPTYPECODE = 0 then 1
when GD.GROUPTYPECODE = 1 then GT.INCLUDEMEMBERGIVING
end
from dbo.GROUPDATA GD
left join dbo.GROUPTYPE GT on GD.GROUPTYPEID = GT.ID
where GD.ID = @CONSTITUENTID
declare @RECOGNITIONGROUPMEMBERNUMBER integer;
select
@RECOGNITIONGROUPMEMBERNUMBER = count(RR.ID),
@RECOGNITIONTOTALGROUPMEMBERAMOUNT = sum(RR.AMOUNTINCURRENCY),
@RECOGNITIONGROUPMEMBERTAXCLAIMAMOUNT = sum(case when RS.AMOUNTINCURRENCY > 0 then
case R.TYPECODE when 0 then
case when RR.AMOUNTINCURRENCY > RS.AMOUNTINCURRENCY then RSGA.TAXCLAIMAMOUNTINCURRENCY
else RR.AMOUNTINCURRENCY/RS.AMOUNTINCURRENCY * RSGA.TAXCLAIMAMOUNTINCURRENCY end
when 1 then
case when RR.AMOUNTINCURRENCY > RS.AMOUNTINCURRENCY then PLEDGEINSTALLMENTSPLITTAXCLAIMAMOUNT.TAXCLAIMAMOUNTINCURRENCY
else RR.AMOUNTINCURRENCY/RS.AMOUNTINCURRENCY * PLEDGEINSTALLMENTSPLITTAXCLAIMAMOUNT.TAXCLAIMAMOUNTINCURRENCY end
else 0
end
else 0 end)
from
dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RR
inner join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RS on RR.REVENUESPLITID = RS.ID
inner join dbo.FINANCIALTRANSACTION R on RS.REVENUEID = R.ID
inner join dbo.GROUPMEMBER GM on RR.CONSTITUENTID = GM.MEMBERID
left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
left join dbo.UFN_REVENUESPLITGIFTAID_GETELIGIBLE(1) ELIGIBLEGIFTAID on ELIGIBLEGIFTAID.ID = RS.ID
left join dbo.UFN_REVENUESPLITGIFTAID_GETAMOUNTSINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RSGA on RSGA.ID = ELIGIBLEGIFTAID.ID
left join dbo.UFN_PLEDGEINSTALLMENTSPLIT_CALCULATETAXCLAIMAMOUNTSINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) PLEDGEINSTALLMENTSPLITTAXCLAIMAMOUNT on PLEDGEINSTALLMENTSPLITTAXCLAIMAMOUNT.REVENUESPLITID = RS.ID
where @GROUPINCLUDESMEMBERGIVING = 1
and R.DELETEDON is null
and GM.GROUPID = @CONSTITUENTID
and (R.TYPECODE = 1 or (R.TYPECODE = 0 and RS.APPLICATIONCODE in (0, 3, 18, 19)) or R.TYPECODE = 7) --Pledge, Payment (Gift or Recurring Gift Payment), or Auction Donation
and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= RR.EFFECTIVEDATE))
or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= RR.EFFECTIVEDATE))
or (GMDR.DATEFROM <= RR.EFFECTIVEDATE and GMDR.DATETO >= RR.EFFECTIVEDATE))
and exists
(
select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
where RSSUB.REVENUEID = R.ID
/*next line is #SITEEXTENTION code*/
and (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
and
(
@SITEFILTERMODE = 0
or
exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
)
)
declare @RECOGNITIONGROUPNUMBER integer;
select
@RECOGNITIONGROUPNUMBER = count(RR.ID),
@RECOGNITIONTOTALGROUPAMOUNT = sum(RR.AMOUNTINCURRENCY)
from dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RR
inner join dbo.FINANCIALTRANSACTIONLINEITEM RS on RR.REVENUESPLITID = RS.ID
inner join REVENUESPLIT_EXT RSE on RSE.ID = RS.ID
inner join dbo.FINANCIALTRANSACTION R on RS.FINANCIALTRANSACTIONID = R.ID
where (R.TYPECODE = 1 or (R.TYPECODE = 0 and RSE.APPLICATIONCODE in (0, 3, 18, 19)) or R.TYPECODE = 7) --Pledge, Payment (Gift or Recurring Gift Payment), or Auction Donation
and RR.CONSTITUENTID = @CONSTITUENTID
and R.DELETEDON is null
and RS.DELETEDON is null
and RS.TYPECODE <> 1
and exists
(
select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
where RSSUB.REVENUEID = R.ID
/*next line is #SITEEXTENTION code*/
and (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
and
(
@SITEFILTERMODE = 0
or
exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
)
);
set @RECOGNITIONGROUPNUMBER = coalesce(@RECOGNITIONGROUPNUMBER, 0);
set @RECOGNITIONGROUPMEMBERNUMBER = coalesce(@RECOGNITIONGROUPMEMBERNUMBER, 0);
set @RECOGNITIONTOTALNUMBER = @RECOGNITIONGROUPNUMBER + @RECOGNITIONGROUPMEMBERNUMBER;
set @RECOGNITIONTOTALGROUPAMOUNT = coalesce(@RECOGNITIONTOTALGROUPAMOUNT, 0);
set @RECOGNITIONTOTALGROUPMEMBERAMOUNT = coalesce(@RECOGNITIONTOTALGROUPMEMBERAMOUNT, 0);
set @RECOGNITIONTOTALAMOUNT = @RECOGNITIONTOTALGROUPAMOUNT + @RECOGNITIONTOTALGROUPMEMBERAMOUNT;
set @RECOGNITIONAVERAGEAMOUNT = 0;
if @RECOGNITIONTOTALNUMBER <> 0
set @RECOGNITIONAVERAGEAMOUNT = @RECOGNITIONTOTALAMOUNT / @RECOGNITIONTOTALNUMBER;
/*
For the most frequent, largest, first, and last gifts, the pattern taken is:
1. Figure out what the variant would be only for the group members IF
members are included in the giving.
2. Over-ride those values using the variant for the group itself IF the group
can be a donor AND a comparison passes (i.e. the largest gift from the group
is larger than the largest gift from the group members)
*/
-- most frequent group member amount
declare @RECOGNITIONGROUPMEMBERAMOUNTFREQUENCY integer;
declare @RECOGNITIONMOSTFREQUENTGROUPMEMBERAMOUNT money;
select top 1
@RECOGNITIONMOSTFREQUENTGROUPMEMBERAMOUNT = X.AMOUNT,
@RECOGNITIONGROUPMEMBERAMOUNTFREQUENCY = X.MAXCOUNT
from
(select
RR.AMOUNTINCURRENCY as AMOUNT,
count(RR.ID) TOTAL,
max(count(RR.ID)) over () MAXCOUNT
from
dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RR
inner join dbo.FINANCIALTRANSACTIONLINEITEM RS on RR.REVENUESPLITID = RS.ID
inner join dbo.REVENUESPLIT_EXT RSE on RSE.ID = RS.ID
inner join dbo.FINANCIALTRANSACTION R on RS.FINANCIALTRANSACTIONID = R.ID
inner join dbo.GROUPMEMBER GM on RR.CONSTITUENTID = GM.MEMBERID
left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
where @GROUPINCLUDESMEMBERGIVING = 1
and R.DELETEDON is null
and RS.DELETEDON is null
and RS.TYPECODE <> 1
and (R.TYPECODE = 1 or (R.TYPECODE = 0 and RSE.APPLICATIONCODE in (0, 3, 18, 19)) or R.TYPECODE = 7) --Pledge, Payment (Gift or Recurring Gift Payment), or Auction Donation
and GM.GROUPID = @CONSTITUENTID
and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= RR.EFFECTIVEDATE))
or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= RR.EFFECTIVEDATE))
or (GMDR.DATEFROM <= RR.EFFECTIVEDATE and GMDR.DATETO >= RR.EFFECTIVEDATE))
and exists
(
select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
where RSSUB.REVENUEID = R.ID
/*next line is #SITEEXTENTION code*/
and (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
and
(
@SITEFILTERMODE = 0
or
exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
)
)
group by RR.AMOUNTINCURRENCY) X
where
X.TOTAL = X.MAXCOUNT and X.TOTAL > 1
order by
X.AMOUNT desc;
-- most frequent group amount
declare @RECOGNITIONMOSTFREQUENTGROUPAMOUNT money;
declare @RECOGNITIONGROUPAMOUNTFREQUENCY integer;
select top 1
@RECOGNITIONMOSTFREQUENTGROUPAMOUNT = X.AMOUNT,
@RECOGNITIONGROUPAMOUNTFREQUENCY = X.MAXCOUNT
from
(select
RR.AMOUNTINCURRENCY as AMOUNT,
count(RR.ID) TOTAL,
max(count(RR.ID)) over () MAXCOUNT
from
dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RR
inner join dbo.FINANCIALTRANSACTIONLINEITEM RS on RR.REVENUESPLITID = RS.ID
inner join REVENUESPLIT_EXT RSE on RSE.ID = RS.ID
inner join dbo.FINANCIALTRANSACTION R on RS.FINANCIALTRANSACTIONID = R.ID
where RR.CONSTITUENTID = @CONSTITUENTID
and R.DELETEDON is null
and RS.DELETEDON is null
and RS.TYPECODE <> 1
and (R.TYPECODE = 1 or (R.TYPECODE = 0 and RSE.APPLICATIONCODE in (0, 3, 18, 19)) or R.TYPECODE = 7) --Pledge, Payment (Gift or Recurring Gift Payment), or Auction Donation
and exists
(
select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
where RSSUB.REVENUEID = R.ID
/*next line is #SITEEXTENTION code*/
and (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
and
(
@SITEFILTERMODE = 0
or
exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
)
)
group by RR.AMOUNTINCURRENCY) X
where
X.TOTAL = X.MAXCOUNT and X.TOTAL > 1
order by
X.AMOUNT desc;
select top(1)
@RECOGNITIONMOSTFREQUENTAMOUNT = coalesce(AMOUNT, 0)
from
(select @RECOGNITIONMOSTFREQUENTGROUPAMOUNT as AMOUNT, @RECOGNITIONGROUPAMOUNTFREQUENCY as FREQUENCY
union all
select @RECOGNITIONMOSTFREQUENTGROUPMEMBERAMOUNT as AMOUNT, @RECOGNITIONGROUPMEMBERAMOUNTFREQUENCY as FREQUENCY) X
order by X.AMOUNT desc;
--TOTALYEARS
select
@RECOGNITIONTOTALYEARS = count(distinct(dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(RR.EFFECTIVEDATE,0)))
from UFN_CONSTITUENT_GETGROUPRECOGNITIONS(@CONSTITUENTID, @GROUPINCLUDESMEMBERGIVING) RR
inner join dbo.FINANCIALTRANSACTIONLINEITEM RS on RR.REVENUESPLITID = RS.ID
inner join dbo.REVENUESPLIT_EXT RSE on RSE.ID = RS.ID
inner join dbo.FINANCIALTRANSACTION R on RS.FINANCIALTRANSACTIONID = R.ID
where (R.TYPECODE = 1 or (R.TYPECODE = 0 and RSE.APPLICATIONCODE in (0, 3)) or R.TYPECODE = 7) --Pledge, Payment (Gift or Recurring Gift Payment), or Auction Donation
and R.DELETEDON is null
and RS.DELETEDON is null
and RS.TYPECODE <> 1
and exists
(
select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
where RSSUB.REVENUEID = R.ID
/*next line is #SITEEXTENTION code*/
and (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
and
(
@SITEFILTERMODE = 0
or
exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
)
);
--CONSECUTIVE YEARS
declare @FISCALYEAR_FIRSTDAY datetime;
declare @PREVIOUSFISCALYEAR_FIRSTDAY datetime;
declare @CONTINUE bit;
declare FISCALYEARCURSOR cursor local fast_forward for
select
dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(RR.EFFECTIVEDATE,0) FISCALYEAR_FIRSTDAY
from UFN_CONSTITUENT_GETGROUPRECOGNITIONS(@CONSTITUENTID, @GROUPINCLUDESMEMBERGIVING) RR
inner join dbo.FINANCIALTRANSACTIONLINEITEM RS on RR.REVENUESPLITID = RS.ID
inner join dbo.REVENUESPLIT_EXT RSE on RSE.ID = RS.ID
inner join dbo.FINANCIALTRANSACTION R on RS.FINANCIALTRANSACTIONID = R.ID
where (R.TYPECODE = 1 or (R.TYPECODE = 0 and RSE.APPLICATIONCODE in (0, 3, 18, 19)) or R.TYPECODE = 7) --Pledge, Payment (Gift or Recurring Gift Payment), or Auction Donation
and R.DELETEDON is null
and RS.DELETEDON is null
and RS.TYPECODE <> 1
and exists
(
select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
where RSSUB.REVENUEID = R.ID
/*next line is #SITEEXTENTION code*/
and (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
and
(
@SITEFILTERMODE = 0
or
exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
)
)
group by
dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(RR.EFFECTIVEDATE,0)
order by
dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(RR.EFFECTIVEDATE,0) desc;
set @RECOGNITIONCONSECUTIVEYEARS = 0;
set @RECOGNITIONGIVENSINCEFISCALYEAR = null;
declare @CURRENTFIRSCALYEAR_FIRSTDAY datetime, @LASTFISCALYEAR_FIRSTDAY datetime
set @CURRENTFIRSCALYEAR_FIRSTDAY = dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(@CURRENTDATE,0)
set @LASTFISCALYEAR_FIRSTDAY = dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(dateadd(year,-1,@CURRENTDATE),0)
open FISCALYEARCURSOR;
fetch next from FISCALYEARCURSOR into @FISCALYEAR_FIRSTDAY;
if @@FETCH_STATUS = 0 begin
if @FISCALYEAR_FIRSTDAY > @CURRENTFIRSCALYEAR_FIRSTDAY begin
set @CONTINUE = 1;
fetch next from FISCALYEARCURSOR into @PREVIOUSFISCALYEAR_FIRSTDAY;
end
else if @FISCALYEAR_FIRSTDAY = @CURRENTFIRSCALYEAR_FIRSTDAY or
@FISCALYEAR_FIRSTDAY = @LASTFISCALYEAR_FIRSTDAY begin
set @RECOGNITIONCONSECUTIVEYEARS = @RECOGNITIONCONSECUTIVEYEARS + 1;
set @CONTINUE = 1;
fetch next from FISCALYEARCURSOR into @PREVIOUSFISCALYEAR_FIRSTDAY;
end
else
set @CONTINUE = 0;
end
while @@FETCH_STATUS = 0 and @CONTINUE = 1 begin
if @RECOGNITIONCONSECUTIVEYEARS = 0 begin
if @PREVIOUSFISCALYEAR_FIRSTDAY > @CURRENTFIRSCALYEAR_FIRSTDAY begin
set @FISCALYEAR_FIRSTDAY = @PREVIOUSFISCALYEAR_FIRSTDAY;
fetch next from FISCALYEARCURSOR into @PREVIOUSFISCALYEAR_FIRSTDAY;
end
else if @PREVIOUSFISCALYEAR_FIRSTDAY = @CURRENTFIRSCALYEAR_FIRSTDAY or
@PREVIOUSFISCALYEAR_FIRSTDAY = @LASTFISCALYEAR_FIRSTDAY begin
set @RECOGNITIONCONSECUTIVEYEARS = @RECOGNITIONCONSECUTIVEYEARS + 1;
set @FISCALYEAR_FIRSTDAY = @PREVIOUSFISCALYEAR_FIRSTDAY;
fetch next from FISCALYEARCURSOR into @PREVIOUSFISCALYEAR_FIRSTDAY;
end
else
set @CONTINUE = 0
end
else if @PREVIOUSFISCALYEAR_FIRSTDAY = dateadd(year, -1, @FISCALYEAR_FIRSTDAY) begin
set @RECOGNITIONCONSECUTIVEYEARS = @RECOGNITIONCONSECUTIVEYEARS + 1;
set @FISCALYEAR_FIRSTDAY = @PREVIOUSFISCALYEAR_FIRSTDAY;
fetch next from FISCALYEARCURSOR into @PREVIOUSFISCALYEAR_FIRSTDAY;
end
else
set @CONTINUE = 0;
end
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close FISCALYEARCURSOR;
deallocate FISCALYEARCURSOR;
if @RECOGNITIONCONSECUTIVEYEARS > 0
set @RECOGNITIONGIVENSINCEFISCALYEAR = @FISCALYEAR_FIRSTDAY;