USP_DATALIST_CONSTITUENTGROUP_EXPANDED_RECOGNITIONHISTORY
This datalist returns a filtered list of revenue associated with a constituent group.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | Input parameter indicating the context ID for the data list. |
@GROUPBY | tinyint | IN | Group by |
@TRANSACTIONTYPEOPTIONCODE | int | IN | Type |
@REVENUETYPEOPTIONCODE | int | IN | Revenue type |
@DATEFILTER | tinyint | IN | Date range |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@SITEFILTERMODE | tinyint | IN | Sites |
@SITESSELECTED | xml | 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. |
@INCLUDEGROUPMEMBERREVENUE | bit | IN | |
@RECOGNITIONFILTERID | uniqueidentifier | IN | Recognition |
@CURRENCYCODE | tinyint | IN | Currency |
@CAMPAIGNFILTERMODE | tinyint | IN | Campaigns |
@CAMPAIGNSSELECTED | xml | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_CONSTITUENTGROUP_EXPANDED_RECOGNITIONHISTORY
(
@CONSTITUENTID uniqueidentifier,
@GROUPBY tinyint = 0, -- 0=Commitment, 1=Transaction, null=None
@TRANSACTIONTYPEOPTIONCODE int = null, -- -1=All, otherwise revenue.transactiontypecode
@REVENUETYPEOPTIONCODE int = null, -- -1=All, otherwise revenuesplit.revenuetypecode
@DATEFILTER tinyint = 16,
@CURRENTAPPUSERID uniqueidentifier = null,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@INCLUDEGROUPMEMBERREVENUE bit = 0,
@RECOGNITIONFILTERID uniqueidentifier = null,
@CURRENCYCODE tinyint = 0,
@CAMPAIGNFILTERMODE tinyint = 0,
@CAMPAIGNSSELECTED xml = null,
@STARTDATE datetime = null,
@ENDDATE datetime = null
)
with execute as OWNER
as
set nocount on;
begin
declare
@ORGANIZATIONCURRENCYID uniqueidentifier,
@CURRENCYID uniqueidentifier,
@CURRENCYROUNDINGTYPECODE tinyint,
@CURRENCYISOCURRENCYCODE nvarchar(3) = null,
@CURRENCYDECIMALDIGITS tinyint = 0,
@CURRENCYSYMBOL nvarchar(5) = null,
@CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint = 0,
@CONSTITID uniqueidentifier,
@DATEFROM datetime,
@DATETO datetime,
@ISUK bit;
if @TRANSACTIONTYPEOPTIONCODE = -1
set @TRANSACTIONTYPEOPTIONCODE = null;
if @REVENUETYPEOPTIONCODE = -1
set @REVENUETYPEOPTIONCODE = null;
if @STARTDATE is null and @ENDDATE is null
exec [dbo].[USP_RESOLVEDATEFILTER] @DATEFILTER, @STARTDATE output, @ENDDATE output;
else
begin
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
end
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
if @CURRENCYCODE = 1
set @CURRENCYID = @ORGANIZATIONCURRENCYID
if @CURRENCYCODE = 3
begin
set @CURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID);
if @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()
set @CURRENCYCODE = 1
end
select
@CURRENCYISOCURRENCYCODE = CURRENCY.ISO4217,
@CURRENCYDECIMALDIGITS = CURRENCY.DECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE,
@CURRENCYSYMBOL = CURRENCY.CURRENCYSYMBOL,
@CURRENCYSYMBOLDISPLAYSETTINGCODE = CURRENCY.SYMBOLDISPLAYSETTINGCODE
from dbo.CURRENCY where ID = @CURRENCYID;
set @ISUK = dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D');
/* Get RevSplit IDs */
if object_id('tempdb..#TMP_DATA_REVENUEHISTORY_RECOGNITIONIDS') is not null
drop table #TMP_DATA_REVENUEHISTORY_RECOGNITIONIDS;
create table #TMP_DATA_REVENUEHISTORY_RECOGNITIONIDS
(
ID uniqueidentifier,
SPLITID uniqueidentifier,
REVENUEID uniqueidentifier,
TRANSACTIONTYPECODE tinyint
);
declare @SQL nvarchar(max) = '';
declare @RECOGNITIONCREDITS_SQL nvarchar(max) = '';
if @CAMPAIGNFILTERMODE != 0
begin
set @SQL = '
declare @CAMPAIGNFILTERTABLE table (ID uniqueidentifier)
insert into @CAMPAIGNFILTERTABLE
select T.c.value(''(ID)[1]'',''uniqueidentifier'')
from @CAMPAIGNSSELECTED.nodes(''/CAMPAIGNSSELECTED/ITEM'') T(c);' + char(13);
set @RECOGNITIONCREDITS_SQL = replace(@SQL, '@CAMPAIGNFILTERTABLE', '@CAMPAIGNFILTERTABLE_RC');
end
select @SQL = @SQL + '
with CONSTITS_CTE
as
(
select
@CONSTITUENTID as CONSTITUENTID,
null as STARTDATE,
null as ENDDATE
union all
select
GROUPMEMBER.MEMBERID as CONSTITUENTID,
GROUPMEMBERDATERANGE.DATEFROM STARTDATE,
GROUPMEMBERDATERANGE.DATETO ENDDATE
from dbo.GROUPMEMBER
left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
where
GROUPMEMBER.GROUPID = @CONSTITUENTID
)
insert into #TMP_DATA_REVENUEHISTORY_RECOGNITIONIDS(ID, SPLITID, REVENUEID, TRANSACTIONTYPECODE)
select distinct
REVENUERECOGNITION.ID, FINANCIALTRANSACTIONLINEITEM.ID, FINANCIALTRANSACTION.ID, FINANCIALTRANSACTION.TYPECODE
from dbo.REVENUERECOGNITION ' + char(13);
select @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL + replace(@SQL, 'REVENUERECOGNITION', 'RECOGNITIONCREDIT')
--BBNT\RyanDow 2012-04-20
--Pulling recognition and revenue filter SQL directly into this dynamic SQL for performance gains
--Bypass UFN_REVENUERECOGNITION_VALIDFILTER(@RECOGNITIONFILTERID)
--If this logic is changed, the other places that use revenue/recognition filters will need to be updated
declare @REVENUEFILTERID uniqueidentifier
declare @REVENUEFILTERFUNCTION nvarchar(250)
declare @PLEDGERECOGNITIONCODE tinyint
if @RECOGNITIONFILTERID is not null
begin
select
@REVENUEFILTERID = RECOGNITIONFILTER.REVENUEFILTERID,
@PLEDGERECOGNITIONCODE = RECOGNITIONFILTER.PLEDGERECOGNITIONCODE,
@REVENUEFILTERFUNCTION = REVENUEFILTER.FUNCTIONNAME
from
dbo.RECOGNITIONFILTER
left join dbo.REVENUEFILTER on REVENUEFILTER.ID = RECOGNITIONFILTER.REVENUEFILTERID
where
RECOGNITIONFILTER.ID = @RECOGNITIONFILTERID
if @REVENUEFILTERID is not null and @REVENUEFILTERFUNCTION is not null and @REVENUEFILTERFUNCTION <> ''
begin
select @SQL = @SQL + '
inner join ' + @REVENUEFILTERFUNCTION + '() FILTERED on FILTERED.ID = REVENUERECOGNITION.REVENUESPLITID ' + CHAR(13);
end
set @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL + 'inner join dbo.UFN_RECOGNITIONCREDIT_VALIDFILTER(@RECOGNITIONFILTERID) FILTERED on RECOGNITIONCREDIT.ID = FILTERED.ID ' + char(13);
end
set @SQL = @SQL +
'inner join dbo.FINANCIALTRANSACTIONLINEITEM
on FINANCIALTRANSACTIONLINEITEM.ID = REVENUERECOGNITION.REVENUESPLITID
inner join dbo.FINANCIALTRANSACTION
on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.REVENUESPLIT_EXT
on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join CONSTITS_CTE CONSTITS
on CONSTITS.CONSTITUENTID = REVENUERECOGNITION.CONSTITUENTID ' + char(13)
--BBNT\RyanDow 2012-04-20
--Pulling recognition and revenue filter SQL directly into this dynamic SQL for performance gains
--Bypass UFN_REVENUERECOGNITION_VALIDFILTER(@RECOGNITIONFILTERID)
--If this logic is changed, the other places that use revenue/recognition filters will need to be updated
if @RECOGNITIONFILTERID is not null
begin
select @SQL = @SQL + '
left join dbo.RECOGNITIONFILTERRECOGNTIONTYPE on RECOGNITIONFILTERRECOGNTIONTYPE.REVENUERECOGNITIONTYPECODEID = REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID
and RECOGNITIONFILTERRECOGNTIONTYPE.RECOGNITIONFILTERID = @RECOGNITIONFILTERID ' + char(13)
if @PLEDGERECOGNITIONCODE <> 1
begin
select @SQL = @SQL + '
left join dbo.INSTALLMENTSPLITPAYMENT on FINANCIALTRANSACTIONLINEITEM.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
left join dbo.FINANCIALTRANSACTION as PLEDGE on INSTALLMENTSPLITPAYMENT.PLEDGEID = PLEDGE.ID ' + CHAR(13)
end
end
select @SQL = @SQL + '
where
FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and
(@STARTDATE is null or REVENUERECOGNITION.EFFECTIVEDATE >= @STARTDATE)
and
(@ENDDATE is null or REVENUERECOGNITION.EFFECTIVEDATE <= @ENDDATE)
and
(CONSTITS.STARTDATE is null or REVENUERECOGNITION.EFFECTIVEDATE >= CONSTITS.STARTDATE)
and
(CONSTITS.ENDDATE is null or REVENUERECOGNITION.EFFECTIVEDATE <= CONSTITS.ENDDATE)' + char(13);
set @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL +
'left join dbo.DONORCHALLENGEENCUMBERED
on RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID = DONORCHALLENGEENCUMBERED.ID
left join dbo.FINANCIALTRANSACTIONLINEITEM
on FINANCIALTRANSACTIONLINEITEM.ID = DONORCHALLENGEENCUMBERED.REVENUESPLITID
left join dbo.FINANCIALTRANSACTION
on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
left join dbo.REVENUESPLIT_EXT
on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join CONSTITS_CTE CONSTITS
on CONSTITS.CONSTITUENTID = RECOGNITIONCREDIT.CONSTITUENTID
where
(@STARTDATE is null or RECOGNITIONCREDIT.EFFECTIVEDATE >= @STARTDATE)
and
(@ENDDATE is null or RECOGNITIONCREDIT.EFFECTIVEDATE <= @ENDDATE)
and
(CONSTITS.STARTDATE is null or RECOGNITIONCREDIT.EFFECTIVEDATE >= CONSTITS.STARTDATE)
and
(CONSTITS.ENDDATE is null or RECOGNITIONCREDIT.EFFECTIVEDATE <= CONSTITS.ENDDATE)
and
((RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 0) or (RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 1 and RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID is not null))' + char(13);
if @TRANSACTIONTYPEOPTIONCODE is not null
begin
set @SQL = @SQL + 'and FINANCIALTRANSACTION.TYPECODE = @TRANSACTIONTYPEOPTIONCODE ' + char(13);
--we want to filter donor challenge internal sponsor credits under donor challenge even though they are tied to payment
set @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL + 'and ((RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 0) or (FINANCIALTRANSACTION.TYPECODE = 0 and @TRANSACTIONTYPEOPTIONCODE = 8)) ' + char(13);
end
if @REVENUETYPEOPTIONCODE is not null
begin
set @SQL = @SQL + 'and REVENUESPLIT_EXT.TYPECODE = @REVENUETYPEOPTIONCODE ' + char(13);
set @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL + 'and ((RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 0) or (REVENUESPLIT_EXT.TYPECODE = @REVENUETYPEOPTIONCODE)) ' + char(13);
end
if @CAMPAIGNFILTERMODE != 0
begin
set @SQL = @SQL +
'and exists (
select 1
from dbo.REVENUESPLITCAMPAIGN
inner join @CAMPAIGNFILTERTABLE CAMPAIGNFILTER on REVENUESPLITCAMPAIGN.CAMPAIGNID = CAMPAIGNFILTER.ID
where REVENUESPLITCAMPAIGN.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
) ' + char(13);
set @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL +
'and ((RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 0) or exists (
select 1
from dbo.REVENUESPLITCAMPAIGN
inner join @CAMPAIGNFILTERTABLE_RC CAMPAIGNFILTER on REVENUESPLITCAMPAIGN.CAMPAIGNID = CAMPAIGNFILTER.ID
where REVENUESPLITCAMPAIGN.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
))' + char(13);
end
--BBNT\RyanDow 2012-04-20
--Pulling recognition and revenue filter SQL directly into this dynamic SQL for performance gains
--Bypass UFN_REVENUERECOGNITION_VALIDFILTER(@RECOGNITIONFILTERID)
--If this logic is changed, the other places that use revenue/recognition filters will need to be updated
if @RECOGNITIONFILTERID is not null
begin
if @PLEDGERECOGNITIONCODE <> 1
begin
select @SQL = @SQL + '
and
(
-- Find pledges
(FINANCIALTRANSACTION.TYPECODE = 1 and REVENUESPLIT_EXT.APPLICATIONCODE = 0)
or
-- Find payments without pledge recognition
(
(FINANCIALTRANSACTION.TYPECODE = 0 and REVENUESPLIT_EXT.APPLICATIONCODE = 2)
and
(not exists (select top 1 RR.ID from dbo.REVENUERECOGNITION as RR inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI on FTLI.ID = RR.REVENUESPLITID where RR.CONSTITUENTID = @CONSTITUENTID and FTLI.FINANCIALTRANSACTIONID = PLEDGE.ID))
)
) ' + char(13)
end
select @SQL = @SQL + '
and
(
RECOGNITIONFILTERRECOGNTIONTYPE.ID is not null
or not exists(select top 1 ID from dbo.RECOGNITIONFILTERRECOGNTIONTYPE RSUB where RSUB.RECOGNITIONFILTERID = @RECOGNITIONFILTERID)
) ' + char(13)
end
exec sp_executesql @SQL, N'@CONSTITUENTID uniqueidentifier, @RECOGNITIONFILTERID uniqueidentifier, @STARTDATE datetime, @ENDDATE datetime, @TRANSACTIONTYPEOPTIONCODE int, @REVENUETYPEOPTIONCODE int, @CAMPAIGNSSELECTED xml',
@CONSTITUENTID, @RECOGNITIONFILTERID, @STARTDATE, @ENDDATE, @TRANSACTIONTYPEOPTIONCODE, @REVENUETYPEOPTIONCODE, @CAMPAIGNSSELECTED;
exec sp_executesql @RECOGNITIONCREDITS_SQL, N'@CONSTITUENTID uniqueidentifier, @RECOGNITIONFILTERID uniqueidentifier, @STARTDATE datetime, @ENDDATE datetime, @TRANSACTIONTYPEOPTIONCODE int, @REVENUETYPEOPTIONCODE int, @CAMPAIGNSSELECTED xml',
@CONSTITUENTID, @RECOGNITIONFILTERID, @STARTDATE, @ENDDATE, @TRANSACTIONTYPEOPTIONCODE, @REVENUETYPEOPTIONCODE, @CAMPAIGNSSELECTED;
/*DELETE FOR SECURITY AND SITEFILTER*/
delete FILTERED
from #TMP_DATA_REVENUEHISTORY_RECOGNITIONIDS FILTERED
left join dbo.RECOGNITIONCREDIT on FILTERED.ID = RECOGNITIONCREDIT.ID
where not exists (
select top 1 REVSITES.SITEID
from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(FILTERED.SPLITID) REVSITES
where
-- Using a case statement since the standard site extension filters
-- resulted in a poor plan
case
when dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 then 1
when exists (
select 1
from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE)
where (RECOGNITIONCREDIT.ID is null and (SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
or (RECOGNITIONCREDIT.ID is not null and (SITEID=dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(RECOGNITIONCREDIT.DESIGNATIONID) or (SITEID is null and dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(RECOGNITIONCREDIT.DESIGNATIONID) is null)))
) then 1
else 0
end = 1
and (
@SITEFILTERMODE = 0
or exists(
select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID
from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED)
where ((RECOGNITIONCREDIT.ID is null) and UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
or (UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(RECOGNITIONCREDIT.DESIGNATIONID))
)
)
);
declare @RECOGNITIONINCURRENCY table
(
RECOGNITIONID uniqueidentifier,
SPLITID uniqueidentifier,
REVENUEID uniqueidentifier,
CONSTITUENTID uniqueidentifier,
TRANSACTIONTYPECODE tinyint,
AMOUNT money,
REVENUESPLITAMOUNT money,
CURRENCYID uniqueidentifier,
ISRECOGNITIONCREDIT bit
)
insert into @RECOGNITIONINCURRENCY
select
FILTERED.ID RECOGNITIONID,
FILTERED.SPLITID,
FILTERED.REVENUEID,
REVENUERECOGNITION.CONSTITUENTID,
FILTERED.TRANSACTIONTYPECODE,
--Just pull the base amounts for now and set the currencies later
REVENUERECOGNITION.AMOUNT,
FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT REVENUESPLITAMOUNT,
case
when @CURRENCYCODE = 0
then REVENUERECOGNITION.BASECURRENCYID
else @CURRENCYID
end CURRENCYID,
0 as ISRECOGNITIONCREDIT
from #TMP_DATA_REVENUEHISTORY_RECOGNITIONIDS FILTERED
inner join dbo.REVENUERECOGNITION on REVENUERECOGNITION.ID = FILTERED.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = FILTERED.SPLITID
union all
--insert other recognition credits
select
FILTERED.ID RECOGNITIONID,
FILTERED.SPLITID,
FILTERED.REVENUEID,
RECOGNITIONCREDIT.CONSTITUENTID,
FILTERED.TRANSACTIONTYPECODE,
--Just pull the base amounts for now and set the currencies later
RECOGNITIONCREDIT.AMOUNT,
FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT REVENUESPLITAMOUNT,
case
when @CURRENCYCODE = 0
then RECOGNITIONCREDIT.BASECURRENCYID
else @CURRENCYID
end CURRENCYID,
1 as ISRECOGNITIONCREDIT
from #TMP_DATA_REVENUEHISTORY_RECOGNITIONIDS FILTERED
inner join dbo.RECOGNITIONCREDIT on RECOGNITIONCREDIT.ID = FILTERED.ID
left join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = FILTERED.SPLITID
where ((RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 0) or (RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 1 and RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID is not null));
--Update the amounts to multicurrency if we aren't using the base currency
if @CURRENCYCODE <> 0
begin
update
RIC
set
RIC.AMOUNT = REVENUERECOGNITIONINCURRENCY.AMOUNTINCURRENCY
from
@RECOGNITIONINCURRENCY RIC
inner join dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(
@CURRENCYID,
@ORGANIZATIONCURRENCYID,
@CURRENCYDECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE
) as REVENUERECOGNITIONINCURRENCY on REVENUERECOGNITIONINCURRENCY.ID = RIC.RECOGNITIONID
where
RIC.ISRECOGNITIONCREDIT = 0;
update
RIC
set
RIC.AMOUNT = RECOGNITIONCREDITINCURRENCY.AMOUNTINCURRENCY
from
@RECOGNITIONINCURRENCY RIC
inner join dbo.UFN_RECOGNITIONCREDIT_GETAMOUNTINCURRENCY_BULK(
@CURRENCYID,
@ORGANIZATIONCURRENCYID,
@CURRENCYDECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE
) as RECOGNITIONCREDITINCURRENCY on RECOGNITIONCREDITINCURRENCY.ID = RIC.RECOGNITIONID
where
RIC.ISRECOGNITIONCREDIT = 1;
update
RIC
set
RIC.REVENUESPLITAMOUNT = REVENUESPLITINCURRENCY.AMOUNTINCURRENCY
from
@RECOGNITIONINCURRENCY RIC
left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(
@CURRENCYID,
@ORGANIZATIONCURRENCYID,
@CURRENCYDECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE
) as REVENUESPLITINCURRENCY on REVENUESPLITINCURRENCY.ID = RIC.SPLITID;
end;
with RECOGNITION_CTE as (
select
RECOGNITIONINCURRENCY.RECOGNITIONID,
RECOGNITIONINCURRENCY.SPLITID,
RECOGNITIONINCURRENCY.REVENUEID,
RECOGNITIONINCURRENCY.CONSTITUENTID,
case
when @GROUPBY = 0 then dbo.UFN_REVENUESPLIT_GETCOMMITMENTID(FINANCIALTRANSACTIONLINEITEM.ID, REVENUESPLIT_EXT.APPLICATIONCODE)
else null
end COMMITMENTREVENUEID,
RECOGNITIONINCURRENCY.AMOUNT,
case
when @ISUK = 0 then null
else
(
case
when RECOGNITIONINCURRENCY.REVENUESPLITAMOUNT > 0 then
case RECOGNITIONINCURRENCY.TRANSACTIONTYPECODE
when 0 then
case
when RECOGNITIONINCURRENCY.AMOUNT > RECOGNITIONINCURRENCY.REVENUESPLITAMOUNT
then dbo.UFN_GIFTAIDREVENUESPLIT_GETSPLITTAXCLAIMAMOUNT(RECOGNITIONINCURRENCY.SPLITID, 1) + RECOGNITIONINCURRENCY.AMOUNT
else RECOGNITIONINCURRENCY.AMOUNT/RECOGNITIONINCURRENCY.REVENUESPLITAMOUNT * dbo.UFN_GIFTAIDREVENUESPLIT_GETSPLITTAXCLAIMAMOUNT(RECOGNITIONINCURRENCY.SPLITID, 1) + RECOGNITIONINCURRENCY.AMOUNT
end
when 1 then
case
when RECOGNITIONINCURRENCY.AMOUNT > RECOGNITIONINCURRENCY.REVENUESPLITAMOUNT
then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGESPLITGROSSAMOUNT_2(RECOGNITIONINCURRENCY.SPLITID, RECOGNITIONINCURRENCY.CURRENCYID) - RECOGNITIONINCURRENCY.REVENUESPLITAMOUNT + RECOGNITIONINCURRENCY.AMOUNT
else RECOGNITIONINCURRENCY.AMOUNT/RECOGNITIONINCURRENCY.REVENUESPLITAMOUNT * (dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGESPLITGROSSAMOUNT_2(RECOGNITIONINCURRENCY.SPLITID, RECOGNITIONINCURRENCY.CURRENCYID) - RECOGNITIONINCURRENCY.REVENUESPLITAMOUNT) + RECOGNITIONINCURRENCY.AMOUNT
end
else RECOGNITIONINCURRENCY.AMOUNT
end
else REVENUESPLITAMOUNT
end
)
end as [GROSSAMOUNT],
RECOGNITIONINCURRENCY.TRANSACTIONTYPECODE,
REVENUESPLIT_EXT.APPLICATION,
REVENUESPLIT_EXT.TYPE REVENUETYPE,
REVENUESPLIT_EXT.DESIGNATIONID,
case when FINANCIALTRANSACTIONLINEITEM.DELETEDON is null then FINANCIALTRANSACTIONLINEITEM.DESCRIPTION else null end REVENUESPLITDESCRIPTION,
RECOGNITIONINCURRENCY.REVENUESPLITAMOUNT
from @RECOGNITIONINCURRENCY RECOGNITIONINCURRENCY
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = RECOGNITIONINCURRENCY.SPLITID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
),
SUMMEDREVENUE_CTE as (
select
RECOGNITION_CTE.CONSTITUENTID,
null as RECOGNITIONID,
REVENUEID,
null as PARENTID,
dbo.UDA_BUILDLIST(distinct RECOGNITION_CTE.APPLICATION) APPLICATION,
dbo.UDA_BUILDLIST(distinct RECOGNITION_CTE.REVENUETYPE) REVENUETYPE,
null RECOGNITIONCREDITTYPES,
null DESIGNATIONS,
null REVENUECATEGORIES,
null CAMPAIGNS,
null SITES,
sum(coalesce(RECOGNITION_CTE.AMOUNT,0)) AMOUNT,
sum(coalesce(RECOGNITION_CTE.GROSSAMOUNT,0)) GROSSAMOUNT,
sum(coalesce(RECOGNITION_CTE.REVENUESPLITAMOUNT,0)) REVENUESPLITAMOUNT
from RECOGNITION_CTE
where @GROUPBY = 1
group by
REVENUEID, RECOGNITION_CTE.CONSTITUENTID
having COUNT(*) > 1
union all
select
RECOGNITION_CTE.CONSTITUENTID,
null RECOGNITIONID,
REVENUEID,
null as PARENTID,
dbo.UDA_BUILDLIST(distinct RECOGNITION_CTE.APPLICATION) APPLICATION,
dbo.UDA_BUILDLIST(distinct RECOGNITION_CTE.REVENUETYPE) REVENUETYPE,
dbo.UDA_BUILDLIST(distinct REVENUERECOGNITIONTYPECODE.DESCRIPTION) RECOGNITIONCREDITTYPES,
dbo.UDA_BUILDLIST(case when DESIGNATIONID is null then REVENUESPLITDESCRIPTION else DESIGNATION.NAME end) DESIGNATIONS,
dbo.UDA_BUILDLIST(distinct GLREVENUECATEGORYMAPPING.REVENUECATEGORYNAME) REVENUECATEGORIES,
(
select dbo.UDA_BUILDLIST(distinct CAMPAIGN.NAME)
from dbo.REVENUESPLITCAMPAIGN
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLITCAMPAIGN.REVENUESPLITID
inner join dbo.CAMPAIGN on CAMPAIGN.ID = REVENUESPLITCAMPAIGN.CAMPAIGNID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = RECOGNITION_CTE.REVENUEID
) CAMPAIGNS,
(
select dbo.UDA_BUILDLIST(SITE.NAME)
from dbo.UFN_SITEID_MAPFROM_REVENUEID(RECOGNITION_CTE.REVENUEID) RSITE
inner join dbo.SITE on SITE.ID = RSITE.SITEID
) SITES,
sum(coalesce(RECOGNITION_CTE.AMOUNT,0)) AMOUNT,
sum(coalesce(RECOGNITION_CTE.GROSSAMOUNT,0)) GROSSAMOUNT,
sum(coalesce(RECOGNITION_CTE.REVENUESPLITAMOUNT,0)) REVENUESPLITAMOUNT
from RECOGNITION_CTE
inner join dbo.REVENUERECOGNITION on RECOGNITION_CTE.RECOGNITIONID = REVENUERECOGNITION.ID
left join dbo.REVENUERECOGNITIONTYPECODE on REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODE.ID
left join dbo.DESIGNATION on DESIGNATION.ID = RECOGNITION_CTE.DESIGNATIONID
left join dbo.REVENUECATEGORY on REVENUECATEGORY.ID = RECOGNITION_CTE.SPLITID
left join dbo.GLREVENUECATEGORYMAPPING on GLREVENUECATEGORYMAPPING.ID = REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID
where @GROUPBY = 0
and RECOGNITION_CTE.TRANSACTIONTYPECODE <> 0
group by
RECOGNITION_CTE.REVENUEID, RECOGNITION_CTE.CONSTITUENTID
union all
select
RECOGNITION_CTE.CONSTITUENTID,
RECOGNITION_CTE.RECOGNITIONID,
REVENUEID,
case @GROUPBY
when 0 then COMMITMENTREVENUEID
when 1 then REVENUEID
else null
end as PARENTID,
RECOGNITION_CTE.APPLICATION,
RECOGNITION_CTE.REVENUETYPE,
REVENUERECOGNITIONTYPECODE.DESCRIPTION RECOGNITIONCREDITTYPES,
case
when DESIGNATIONID is null then REVENUESPLITDESCRIPTION
else DESIGNATION.NAME
end DESIGNATIONS,
GLREVENUECATEGORYMAPPING.REVENUECATEGORYNAME REVENUECATEGORIES,
(
select dbo.UDA_BUILDLIST(CAMPAIGN.NAME)
from dbo.REVENUESPLITCAMPAIGN
inner join dbo.CAMPAIGN on CAMPAIGN.ID = REVENUESPLITCAMPAIGN.CAMPAIGNID
where REVENUESPLITCAMPAIGN.REVENUESPLITID = RECOGNITION_CTE.SPLITID
) CAMPAIGNS,
(
select dbo.UDA_BUILDLIST(SITE.NAME)
from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RECOGNITION_CTE.SPLITID) RSITE
inner join dbo.SITE on SITE.ID = RSITE.SITEID
) SITES,
RECOGNITION_CTE.AMOUNT,
RECOGNITION_CTE.GROSSAMOUNT,
RECOGNITION_CTE.REVENUESPLITAMOUNT
from RECOGNITION_CTE
inner join dbo.REVENUERECOGNITION on RECOGNITION_CTE.RECOGNITIONID = REVENUERECOGNITION.ID
left join dbo.REVENUERECOGNITIONTYPECODE on REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODE.ID
left join dbo.DESIGNATION on DESIGNATION.ID = RECOGNITION_CTE.DESIGNATIONID
left join dbo.REVENUECATEGORY on REVENUECATEGORY.ID = RECOGNITION_CTE.SPLITID
left join dbo.GLREVENUECATEGORYMAPPING on GLREVENUECATEGORYMAPPING.ID = REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID
where RECOGNITION_CTE.TRANSACTIONTYPECODE = 0
or coalesce(@GROUPBY, -1) <> 0
union all
select
RECOGNITION_CTE.CONSTITUENTID,
RECOGNITION_CTE.RECOGNITIONID,
REVENUEID,
case @GROUPBY
when 0 then COMMITMENTREVENUEID
when 1 then REVENUEID
else null
end as PARENTID,
RECOGNITION_CTE.APPLICATION,
RECOGNITION_CTE.REVENUETYPE,
REVENUERECOGNITIONTYPECODE.DESCRIPTION RECOGNITIONCREDITTYPES,
case
when RECOGNITION_CTE.DESIGNATIONID is null then RECOGNITION_CTE.REVENUESPLITDESCRIPTION
else DESIGNATION.NAME
end DESIGNATIONS,
GLREVENUECATEGORYMAPPING.REVENUECATEGORYNAME REVENUECATEGORIES,
(
select dbo.UDA_BUILDLIST(CAMPAIGN.NAME)
from dbo.REVENUESPLITCAMPAIGN
inner join dbo.CAMPAIGN on CAMPAIGN.ID = REVENUESPLITCAMPAIGN.CAMPAIGNID
where REVENUESPLITCAMPAIGN.REVENUESPLITID = RECOGNITION_CTE.SPLITID
) CAMPAIGNS,
(
select dbo.UDA_BUILDLIST(SITE.NAME)
from dbo.SITE
where SITE.ID = dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(RECOGNITIONCREDIT.DESIGNATIONID)
) SITES,
RECOGNITION_CTE.AMOUNT,
RECOGNITION_CTE.GROSSAMOUNT,
RECOGNITION_CTE.REVENUESPLITAMOUNT
from RECOGNITION_CTE
inner join dbo.RECOGNITIONCREDIT on RECOGNITION_CTE.RECOGNITIONID = RECOGNITIONCREDIT.ID
left join dbo.DONORCHALLENGEENCUMBERED on RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID = DONORCHALLENGEENCUMBERED.ID
left join dbo.REVENUERECOGNITIONTYPECODE on RECOGNITIONCREDIT.USERRECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODE.ID
left join dbo.DESIGNATION on DESIGNATION.ID = RECOGNITIONCREDIT.DESIGNATIONID
left join dbo.REVENUECATEGORY on REVENUECATEGORY.ID = RECOGNITION_CTE.SPLITID
left join dbo.GLREVENUECATEGORYMAPPING on GLREVENUECATEGORYMAPPING.ID = REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID
where (RECOGNITION_CTE.TRANSACTIONTYPECODE = 0
or coalesce(@GROUPBY, -1) <> 0)
and ((RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 0) or (RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 1 and RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID is not null))
)
select
case
when REVENUERECOGNITION.REVENUESPLITID is null
then
case
when RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID is null
then SUMMEDREVENUE_CTE.REVENUEID
else (select REVENUESPLITID from dbo.DONORCHALLENGEENCUMBERED where ID = RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID)
end
else REVENUERECOGNITION.REVENUESPLITID
end ID,
case when REVENUERECOGNITION.REVENUESPLITID is null
then (select REVENUESPLITID from dbo.DONORCHALLENGEENCUMBERED where ID = RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID)
else REVENUERECOGNITION.REVENUESPLITID
end as REVENUESPLITID,
case when RECOGNITIONCREDIT.ID is not null
then null --Disable go to payment for internal sponsor payment
else SUMMEDREVENUE_CTE.REVENUEID
end REVENUEID,
SUMMEDREVENUE_CTE.PARENTID,
case
when REVENUE_EXT.GIVENANONYMOUSLY = 1 then 'catalog:Blackbaud.AppFx.Fundraising.Catalog.dll,Blackbaud.AppFx.Fundraising.Catalog.gift_anonymous_16.png'
else ''
end IMAGEKEY,
case
when REVENUERECOGNITION.REVENUESPLITID is null and RECOGNITIONCREDIT.ID is null then 'F989EA79-EA4D-4FC7-B3F8-6EA606125CCA'
else '5DBB948F-BE5E-4E85-B652-CA3AEDE26A4F'
end VIEWFORMID,
coalesce(REVENUERECOGNITION.EFFECTIVEDATE, cast(FINANCIALTRANSACTION.DATE as datetime)) EFFECTIVEDATE,
C_NF.NAME,
SUMMEDREVENUE_CTE.AMOUNT,
SUMMEDREVENUE_CTE.GROSSAMOUNT,
RECOGNITIONCREDITTYPES as RECOGNITIONCREDITTYPE,
case
when RECOGNITIONCREDIT.ID is not null
then
'Donor challenge claim - Internal sponsor'
else FINANCIALTRANSACTION.TYPE
end as TRANSACTIONTYPE,
SUMMEDREVENUE_CTE.APPLICATION,
SUMMEDREVENUE_CTE.REVENUETYPE,
SUMMEDREVENUE_CTE.DESIGNATIONS,
SUMMEDREVENUE_CTE.REVENUECATEGORIES,
SUMMEDREVENUE_CTE.CAMPAIGNS,
cast(FINANCIALTRANSACTION.DATE as datetime),
SUMMEDREVENUE_CTE.REVENUESPLITAMOUNT,
case
when @ISUK = 0 then null
else
case @CURRENCYCODE
when 0 then
case
when SUMMEDREVENUE_CTE.RECOGNITIONID is null
then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(FINANCIALTRANSACTION.ID, 1,0)
else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUERECOGNITION.REVENUESPLITID, 1,0)
end
when 1 then
case
when SUMMEDREVENUE_CTE.RECOGNITIONID is null
then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(FINANCIALTRANSACTION.ID, 1,2)
else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUERECOGNITION.REVENUESPLITID, 1,2)
end
when 3 then
case @CURRENCYID
when case when FINANCIALTRANSACTION.DELETEDON is null then FINANCIALTRANSACTION.TRANSACTIONCURRENCYID else null end then
case
when SUMMEDREVENUE_CTE.RECOGNITIONID is null
then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(FINANCIALTRANSACTION.ID, 1,1)
else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUERECOGNITION.REVENUESPLITID,1,1)
end
else
case
when SUMMEDREVENUE_CTE.RECOGNITIONID is null
then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNTINCURRENCY(FINANCIALTRANSACTION.ID, 1,@CURRENCYID)
else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNTINCURRENCY(REVENUERECOGNITION.REVENUESPLITID,1,@CURRENCYID)
end
end
end
end REVENUESPLITGROSSAMOUNT,
case
when RECOGNITIONCREDIT.ID is not null
then
(select DONORCHALLENGESPONSORCODE.DESCRIPTION
from dbo.DONORCHALLENGEENCUMBERED
inner join dbo.DONORCHALLENGE on DONORCHALLENGEENCUMBERED.DONORCHALLENGEID = DONORCHALLENGE.ID
inner join dbo.DONORCHALLENGESPONSORCODE on DONORCHALLENGE.INTERNALSPONSORCODEID = DONORCHALLENGESPONSORCODE.ID
where DONORCHALLENGEENCUMBERED.ID = RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID)
else DONOR_NF.NAME
end,
SUMMEDREVENUE_CTE.SITES,
case @CURRENCYCODE
when 0 then case when FINANCIALTRANSACTION.DELETEDON is null then isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, V.BASECURRENCYID) else null end
when 1 then @ORGANIZATIONCURRENCYID
else @CURRENCYID
end as DISPLAYCURRENCY
from SUMMEDREVENUE_CTE
inner join dbo.FINANCIALTRANSACTION on SUMMEDREVENUE_CTE.REVENUEID = FINANCIALTRANSACTION.ID
inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
left join dbo.REVENUERECOGNITION on SUMMEDREVENUE_CTE.RECOGNITIONID = REVENUERECOGNITION.ID
left join dbo.RECOGNITIONCREDIT on SUMMEDREVENUE_CTE.RECOGNITIONID = RECOGNITIONCREDIT.ID
left outer join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTION.ID = V.FINANCIALTRANSACTIONID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(SUMMEDREVENUE_CTE.CONSTITUENTID) C_NF
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(FINANCIALTRANSACTION.CONSTITUENTID) DONOR_NF
order by EFFECTIVEDATE desc, C_NF.NAME, AMOUNT
end