USP_DATALIST_CONSTITUENT_REVENUESUMMARYBREAKDOWN_2
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@SITEFILTERMODE | tinyint | IN | |
@SITESSELECTED | nvarchar(max) | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | |
@SECURITYFEATURETYPE | tinyint | IN | |
@CURRENCYCODE | tinyint | IN | |
@DATEFILTER | tinyint | IN | |
@REVENUEFILTERID | uniqueidentifier | IN | |
@BREAKDOWNBY | tinyint | IN | |
@CAMPAIGNFILTERMODE | tinyint | IN | |
@CAMPAIGNSSELECTED | nvarchar(max) | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_CONSTITUENT_REVENUESUMMARYBREAKDOWN_2
(
@CONSTITUENTID uniqueidentifier,
@CURRENTAPPUSERID uniqueidentifier,
@SITEFILTERMODE tinyint = 0,
/*DanielCo [12/19/08] Dashboards don't support parameters that cannot
be cast as strings like this collection so an error will occur if
user selects more sites than fits here (~73)*/
@SITESSELECTED nvarchar(max) = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@CURRENCYCODE tinyint = 1,
@DATEFILTER tinyint,
@REVENUEFILTERID uniqueidentifier = null,
@BREAKDOWNBY tinyint = 0,
@CAMPAIGNFILTERMODE tinyint = 0,
@CAMPAIGNSSELECTED nvarchar(max) = null,
@STARTDATE datetime = null,
@ENDDATE datetime = null
)
with execute as OWNER
as
set nocount on;
declare
@ISGROUP bit = 0,
@HOUSEHOLDID uniqueidentifier = null,
@CURRENCYISOCURRENCYCODE nvarchar(3) = null,
@CURRENCYDECIMALDIGITS tinyint = 0,
@CURRENCYSYMBOL nvarchar(5) = null,
@CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint = 0,
@ORGANIZATIONCURRENCYID uniqueidentifier = null,
@CURRENCYID uniqueidentifier = null,
@CURRENCYROUNDINGTYPECODE tinyint,
@CONSTITID uniqueidentifier,
@DATEFROM datetime,
@DATETO datetime;
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
/*Get Household ID*/
select top(1) @HOUSEHOLDID = GM.GROUPID
from dbo.GROUPMEMBER as GM
left outer join dbo.GROUPDATA as GD on GD.ID = GM.GROUPID
where GM.MEMBERID = @CONSTITUENTID
and GD.GROUPTYPECODE = 0
and dbo.UFN_GROUPMEMBER_ISCURRENTMEMBER(GM.ID) = 1
declare @INCLUDEMEMBERGIVING bit = 0;
if @HOUSEHOLDID is null
select
@ISGROUP = 1,
@INCLUDEMEMBERGIVING =
case
when GROUPDATA.GROUPTYPECODE = 0 or GROUPTYPE.INCLUDEMEMBERGIVING = 1 then 1
else 0
end
from dbo.GROUPDATA
left join dbo.GROUPTYPE on GROUPDATA.GROUPTYPEID = GROUPTYPE.ID
where GROUPDATA.ID = @CONSTITUENTID;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
/* Get currency info */
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @ORIGINCODE tinyint
select @ORIGINCODE = ORGANIZATIONAMOUNTORIGINCODE
from dbo.MULTICURRENCYCONFIGURATION;
if @CURRENCYCODE = 1
set @CURRENCYID = @ORGANIZATIONCURRENCYID;
else
set @CURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID);
select
@CURRENCYISOCURRENCYCODE = CURRENCY.ISO4217,
@CURRENCYDECIMALDIGITS = CURRENCY.DECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE,
@CURRENCYSYMBOL = CURRENCY.CURRENCYSYMBOL,
@CURRENCYSYMBOLDISPLAYSETTINGCODE = CURRENCY.SYMBOLDISPLAYSETTINGCODE
from dbo.CURRENCY where ID = @CURRENCYID;
/* Get Revenue Splits IDs */
if object_id('tempdb..#TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUESPLITIDS') is not null
drop table #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUESPLITIDS;
if object_id('tempdb..#TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUES') is not null
drop table #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUES
create table #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUES
(
REVENUEID uniqueidentifier
,TRANSACTIONTYPECODE tinyint
,[DATE] datetime
,CONSTITUENTID uniqueidentifier
);
create table #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUESPLITIDS
(
ID uniqueidentifier,
REVENUEID uniqueidentifier,
TRANSACTIONTYPECODE tinyint,
[DATE] datetime,
CONSTITUENTID uniqueidentifier,
AMOUNT money
);
declare @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);
end
if @INCLUDEMEMBERGIVING = 1
set @SQL = @SQL + '
declare @CONSTITS table (CONSTITUENTID uniqueidentifier, STARTDATE datetime, ENDDATE datetime);
insert into @CONSTITS
select @CONSTITUENTID as CONSTITUENTID, @STARTDATE as STARTDATE, @ENDDATE as ENDDATE
union all
select
GROUPMEMBER.MEMBERID as CONSTITUENTID,
case
when GROUPMEMBERDATERANGE.DATEFROM is null or GROUPMEMBERDATERANGE.DATEFROM < @STARTDATE then
@STARTDATE
else
GROUPMEMBERDATERANGE.DATEFROM
end STARTDATE,
case
when GROUPMEMBERDATERANGE.DATETO is null or GROUPMEMBERDATERANGE.DATETO > @ENDDATE then
@ENDDATE
else
GROUPMEMBERDATERANGE.DATETO
end ENDDATE
from dbo.GROUPMEMBER
left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
where GROUPMEMBER.GROUPID = @CONSTITUENTID;' + char(13);
set @SQL = @SQL + '
insert into #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUES(REVENUEID, TRANSACTIONTYPECODE,[DATE],CONSTITUENTID)
select REVENUE.ID as REVENUEID, REVENUE.TYPECODE TRANSACTIONTYPECODE, REVENUE.CALCULATEDDATE as [DATE], REVENUE.CONSTITUENTID
from FINANCIALTRANSACTION as REVENUE' + char(13);
if @INCLUDEMEMBERGIVING = 1
set @SQL = @SQL + '
inner join @CONSTITS as CONSTITS on CONSTITS.CONSTITUENTID = REVENUE.CONSTITUENTID
where
(REVENUE.CALCULATEDDATE >= isnull(CONSTITS.STARTDATE, REVENUE.CALCULATEDDATE)) and
(REVENUE.CALCULATEDDATE <= isnull(CONSTITS.ENDDATE, REVENUE.CALCULATEDDATE)) ' + char(13);
else
begin
set @SQL = @SQL + 'where REVENUE.CONSTITUENTID = @CONSTITUENTID ' + char(13);
if @STARTDATE is not null
set @SQL = @SQL + 'and (REVENUE.CALCULATEDDATE >= @STARTDATE) '+ char(13);
if @ENDDATE is not null
set @SQL = @SQL + 'and (REVENUE.CALCULATEDDATE <= @ENDDATE) '+ char(13);
end
set @SQL = @SQL + '
and REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9,15)
and REVENUE.DELETEDON is null;' + char(13);
set @SQL = @SQL + '
insert into #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUESPLITIDS(ID,REVENUEID,TRANSACTIONTYPECODE,DATE,CONSTITUENTID,AMOUNT)
select FINANCIALTRANSACTIONLINEITEM.ID,FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID,REVENUE.TRANSACTIONTYPECODE,REVENUE.DATE, REVENUE.CONSTITUENTID,FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUES REVENUE
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = REVENUE.REVENUEID
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID' + char(13);
if @REVENUEFILTERID is not null
set @SQL = @SQL + 'inner join dbo.UFN_REVENUEFILTER_BYID(''' + cast(@REVENUEFILTERID as nvarchar(36)) + ''') FILTERED on FINANCIALTRANSACTIONLINEITEM.ID = FILTERED.ID ' + char(13);
set @SQL = @SQL +
'
where
-- Exclude order payment splits and use the order splits
REVENUESPLIT_EXT.APPLICATIONCODE <> 10 and
FINANCIALTRANSACTIONLINEITEM.DELETEDON is null ' + char(13);
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);
end
exec sp_executesql @SQL, N'@CONSTITUENTID uniqueidentifier, @STARTDATE datetime, @ENDDATE datetime, @CAMPAIGNSSELECTED xml',
@CONSTITUENTID, @STARTDATE, @ENDDATE, @CAMPAIGNSSELECTED;
/*remove based on site filter*/
if (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) <> 1 or @SITEFILTERMODE != 0) and exists(select top 1 1 from dbo.SITE)
begin
delete FILTERED
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUESPLITIDS FILTERED
where
not exists
(
select top 1 REVSITES.SITEID
from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(FILTERED.ID) 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 SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] 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 UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
)
)
end
if object_id('tempdb..#TMP_DATA_REVENUESUMMARYBREAKDOWN_HOUSEHOLDREVENUESPLITIDS') is not null
drop table #TMP_DATA_REVENUESUMMARYBREAKDOWN_HOUSEHOLDREVENUESPLITIDS;
create table #TMP_DATA_REVENUESUMMARYBREAKDOWN_HOUSEHOLDREVENUESPLITIDS
(
ID uniqueidentifier,
REVENUEID uniqueidentifier,
TRANSACTIONTYPECODE tinyint,
[DATE] datetime,
AMOUNT money
);
if @INCLUDEMEMBERGIVING = 1 or @HOUSEHOLDID is not null
begin
--Get the revenue to include
if @ISGROUP = 1
begin
--Insert members from previous get to keep from having to get them twice
insert into #TMP_DATA_REVENUESUMMARYBREAKDOWN_HOUSEHOLDREVENUESPLITIDS(ID,REVENUEID,[DATE],TRANSACTIONTYPECODE,AMOUNT)
select FILTERED.ID,FILTERED.REVENUEID,FILTERED.[DATE],FILTERED.TRANSACTIONTYPECODE,FILTERED.AMOUNT
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUESPLITIDS FILTERED
where FILTERED.CONSTITUENTID <> @CONSTITUENTID;
end
else
begin
set @SQL =
'declare @HOUSEHOLDANDMEMBERS table (CONSTITUENTID uniqueidentifier, STARTDATE datetime, ENDDATE datetime)
insert into @HOUSEHOLDANDMEMBERS (CONSTITUENTID, STARTDATE, ENDDATE)
select
@HOUSEHOLDID as CONSTITUENTID,
null as STARTDATE,
null as ENDDATE
union all
select
GROUPMEMBER.MEMBERID as CONSTITUENTID,
case when GROUPMEMBERDATERANGE.DATEFROM is null or GROUPMEMBERDATERANGE.DATEFROM < @STARTDATE then @STARTDATE else GROUPMEMBERDATERANGE.DATEFROM end STARTDATE,
case when GROUPMEMBERDATERANGE.DATETO is null or GROUPMEMBERDATERANGE.DATETO > @ENDDATE then @ENDDATE else GROUPMEMBERDATERANGE.DATETO end ENDDATE
from dbo.GROUPMEMBER
left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
where
GROUPMEMBER.GROUPID = @HOUSEHOLDID;
insert into #TMP_DATA_REVENUESUMMARYBREAKDOWN_HOUSEHOLDREVENUESPLITIDS(ID,REVENUEID,TRANSACTIONTYPECODE,DATE,AMOUNT)
select FINANCIALTRANSACTIONLINEITEM.ID,FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID,REVENUE.TYPECODE,cast(REVENUE.DATE as datetime),FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT
from @HOUSEHOLDANDMEMBERS CONSTITS
inner join dbo.FINANCIALTRANSACTION as REVENUE on REVENUE.CONSTITUENTID = CONSTITS.CONSTITUENTID
inner join dbo.REVENUE_EXT on REVENUE.ID = REVENUE_EXT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = REVENUE.ID
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID' + char(13);
if @REVENUEFILTERID is not null
set @SQL = @SQL + 'inner join dbo.UFN_REVENUEFILTER_BYID(''' + cast(@REVENUEFILTERID as nvarchar(36)) + ''') FILTERED on FINANCIALTRANSACTIONLINEITEM.ID = FILTERED.ID ' + char(13);
set @SQL = @SQL +
'
where
REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9,15) and
-- Exclude order payment splits and use the order splits
REVENUESPLIT_EXT.APPLICATIONCODE <> 10 and
FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and
(cast(REVENUE.DATE as datetime) >= isnull(CONSTITS.STARTDATE, cast(REVENUE.DATE as datetime))) and
(cast(REVENUE.DATE as datetime) <= isnull(CONSTITS.ENDDATE, cast(REVENUE.DATE as datetime)))' + char(13);
exec sp_executesql @SQL, N'@HOUSEHOLDID uniqueidentifier, @STARTDATE datetime, @ENDDATE datetime',
@HOUSEHOLDID, @STARTDATE, @ENDDATE;
end
if (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) <> 1 or @SITEFILTERMODE != 0) and exists(select top 1 1 from dbo.SITE)
begin
/*remove based on site filter*/
delete FILTERED
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_HOUSEHOLDREVENUESPLITIDS FILTERED
where
not exists
(
select top 1 REVSITES.SITEID
from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(FILTERED.ID) 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 SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] 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 UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
)
);
end
end;
--Do not check for the existence of refunds unless basic programs is installed
if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('BB1C17BC-9E0B-4683-B490-EE40D511FA05') = 1
with CONSTIT_CTE
as
(
select
case when @BREAKDOWNBY = 1 then dbo.UFN_GLFISCALYEAR_GETLABEL(FILTERED.DATE) else cast(YEAR(FILTERED.DATE) as nvarchar(24)) end [YEAR],
FILTERED.REVENUEID ID,
REVENUESPLIT.AMOUNTINCURRENCY AMOUNT
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUESPLITIDS FILTERED
left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(
@CURRENCYID,
@ORGANIZATIONCURRENCYID,
@CURRENCYDECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE) as REVENUESPLIT on FILTERED.ID = REVENUESPLIT.ID
where FILTERED.TRANSACTIONTYPECODE <> 2 --Exclude RGs
),
HH_CTE
as
(
select
case when @BREAKDOWNBY = 1 then dbo.UFN_GLFISCALYEAR_GETLABEL(FILTERED.DATE) else cast(YEAR(FILTERED.DATE) as nvarchar(24)) end [YEAR],
FILTERED.REVENUEID ID,
REVENUESPLIT.AMOUNTINCURRENCY AMOUNT
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_HOUSEHOLDREVENUESPLITIDS FILTERED
left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(
@CURRENCYID,
@ORGANIZATIONCURRENCYID,
@CURRENCYDECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE) as REVENUESPLIT on FILTERED.ID = REVENUESPLIT.ID
where FILTERED.TRANSACTIONTYPECODE <> 2 --Exclude RGs
)
select
coalesce(CONSTIT.YEAR, HH.YEAR) as [YEAR],
CONSTIT.TOTALNUMBER as TOTALNUMBER,
CONSTIT.TOTALAMOUNT - coalesce(CONSTITREFUNDS.AMOUNT, 0) as TOTALAMOUNT,
HH.TOTALAMOUNT - coalesce(HHREFUNDS.AMOUNT, 0) as TOTALAMOUNT_HOUSEHOLD,
@CURRENCYISOCURRENCYCODE as CURRENCYISOCURRENCYCODE,
@CURRENCYDECIMALDIGITS as CURRENCYDECIMALDIGITS,
@CURRENCYSYMBOL as CURRENCYSYMBOL,
@CURRENCYSYMBOLDISPLAYSETTINGCODE as CURRENCYSYMBOLDISPLAYSETTINGCODE
from
(
select YEAR,
count(distinct ID) TOTALNUMBER,
sum(AMOUNT) TOTALAMOUNT
from CONSTIT_CTE
group by [YEAR]
) CONSTIT
full join
(
select
[YEAR],
sum(AMOUNT) TOTALAMOUNT
from HH_CTE
group by [YEAR]
) HH
on CONSTIT.YEAR = HH.YEAR
left join
(
select
case when @BREAKDOWNBY = 1 then dbo.UFN_GLFISCALYEAR_GETLABEL(CREDIT.TRANSACTIONDATE) else cast(YEAR(CREDIT.TRANSACTIONDATE) as nvarchar(24)) end YEAR,
sum(CREDITITEM.TOTAL) - coalesce(sum(SALESORDERITEMORDERDISCOUNTDETAIL.AMOUNT),0.00) AMOUNT
from CREDITITEM
inner join dbo.CREDIT
on CREDITITEM.CREDITID = CREDIT.ID
inner join dbo.SALESORDER
on CREDIT.SALESORDERID = SALESORDER.ID
inner join
(
select distinct
SALESORDERPAYMENT.SALESORDERID, REVENUESPLIT_EXT.TYPE, REVENUESPLIT_EXT.TYPECODE
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUESPLITIDS FILTERED
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FILTERED.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join dbo.SALESORDER on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = SALESORDER.REVENUEID
inner join dbo.SALESORDERPAYMENT on SALESORDER.ID = SALESORDERPAYMENT.SALESORDERID
--kwb temp table has IDs for the order, not the payment so this join was wrong
--inner join dbo.SALESORDERPAYMENT on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = SALESORDERPAYMENT.PAYMENTID
where FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
) REVS
on SALESORDER.ID = REVS.SALESORDERID
and
((CREDITITEM.TYPE = REVS.TYPE) or (CREDITITEM.TYPECODE = 2 and REVS.TYPECODE = 0))
left outer join dbo.SALESORDERITEMORDERDISCOUNTDETAIL
on CREDITITEM.SALESORDERITEMID = SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMID
where CREDIT.TYPECODE = 0
group by case when @BREAKDOWNBY = 1 then dbo.UFN_GLFISCALYEAR_GETLABEL(CREDIT.TRANSACTIONDATE) else cast(YEAR(CREDIT.TRANSACTIONDATE) as nvarchar(24)) end
) CONSTITREFUNDS
on
CONSTITREFUNDS.YEAR = CONSTIT.YEAR
left join
(
select
case when @BREAKDOWNBY = 1 then dbo.UFN_GLFISCALYEAR_GETLABEL(CREDIT.TRANSACTIONDATE) else cast(YEAR(CREDIT.TRANSACTIONDATE) as nvarchar(24)) end YEAR,
sum(CREDITITEM.TOTAL) - coalesce(sum(SALESORDERITEMORDERDISCOUNTDETAIL.AMOUNT),0.00) AMOUNT
from CREDITITEM
inner join dbo.CREDIT
on CREDITITEM.CREDITID = CREDIT.ID
inner join dbo.SALESORDER
on CREDIT.SALESORDERID = SALESORDER.ID
inner join
(
select distinct
SALESORDERPAYMENT.SALESORDERID, REVENUESPLIT_EXT.TYPE, REVENUESPLIT_EXT.TYPECODE
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_HOUSEHOLDREVENUESPLITIDS FILTERED
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FILTERED.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join dbo.SALESORDER on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = SALESORDER.REVENUEID
inner join dbo.SALESORDERPAYMENT on SALESORDER.ID = SALESORDERPAYMENT.SALESORDERID
--kwb temp table has IDs for the order, not the payment so this join was wrong
--inner join dbo.SALESORDERPAYMENT on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = SALESORDERPAYMENT.PAYMENTID
where FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
) REVS
on SALESORDER.ID = REVS.SALESORDERID
and
((CREDITITEM.TYPE = REVS.TYPE) or (CREDITITEM.TYPECODE = 2 and REVS.TYPECODE = 0))
left outer join dbo.SALESORDERITEMORDERDISCOUNTDETAIL
on CREDITITEM.SALESORDERITEMID = SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMID
where CREDIT.TYPECODE = 0
group by case when @BREAKDOWNBY = 1 then dbo.UFN_GLFISCALYEAR_GETLABEL(CREDIT.TRANSACTIONDATE) else cast(YEAR(CREDIT.TRANSACTIONDATE) as nvarchar(24)) end
) HHREFUNDS
on
HHREFUNDS.YEAR = CONSTIT.YEAR
order by YEAR;
else
begin
--Do not compensate for multicurrency if it is not installed
if dbo.UFN_CONDITIONSETTING_EVALUATEEXISTSCONDITION(N'Multicurrency') = 0
with CONSTIT_CTE
as
(
select
case
when @BREAKDOWNBY = 1 then
dbo.UFN_GLFISCALYEAR_GETLABEL(FILTERED.DATE)
else
cast(YEAR(FILTERED.DATE) as nvarchar(24))
end [YEAR],
FILTERED.REVENUEID ID,
case
when FILTERED.TRANSACTIONTYPECODE in (
1, --Pledge
3, --Matching gift claim
4, --Planned gift
6, --Grant award
8, --Donor challenge claim
9, --Pending gift
15 --Membership Installment Plan
) then
dbo.UFN_PLEDGE_GETSPLITBALANCE(FILTERED.REVENUEID, FILTERED.ID)
else
FILTERED.AMOUNT
end AMOUNT
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUESPLITIDS FILTERED
where FILTERED.TRANSACTIONTYPECODE <> 2 --Exclude RGs
),
HH_CTE
as
(
select
case when @BREAKDOWNBY = 1 then dbo.UFN_GLFISCALYEAR_GETLABEL(FILTERED.DATE) else cast(YEAR(FILTERED.DATE) as nvarchar(24)) end [YEAR],
FILTERED.REVENUEID ID,
case
when FILTERED.TRANSACTIONTYPECODE in (
1, --Pledge
3, --Matching gift claim
4, --Planned gift
6, --Grant award
8, --Donor challenge claim
9, --Pending gift
15 --Membership Installment Plan
)
then
dbo.UFN_PLEDGE_GETSPLITBALANCE(FILTERED.REVENUEID, FILTERED.ID)
else
FILTERED.AMOUNT
end [AMOUNT]
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_HOUSEHOLDREVENUESPLITIDS FILTERED
where FILTERED.TRANSACTIONTYPECODE <> 2 --Exclude RGs
)
select
coalesce(CONSTIT.YEAR, HH.YEAR) as [YEAR],
CONSTIT.TOTALNUMBER as TOTALNUMBER,
CONSTIT.TOTALAMOUNT as TOTALAMOUNT,
HH.TOTALAMOUNT as TOTALAMOUNT_HOUSEHOLD,
@CURRENCYISOCURRENCYCODE as CURRENCYISOCURRENCYCODE,
@CURRENCYDECIMALDIGITS as CURRENCYDECIMALDIGITS,
@CURRENCYSYMBOL as CURRENCYSYMBOL,
@CURRENCYSYMBOLDISPLAYSETTINGCODE as CURRENCYSYMBOLDISPLAYSETTINGCODE
from (select
YEAR
,count(distinct ID) TOTALNUMBER
,sum(AMOUNT) TOTALAMOUNT
from CONSTIT_CTE
group by [YEAR]) CONSTIT
full join (select
[YEAR]
,sum(AMOUNT) TOTALAMOUNT
from HH_CTE
group by [YEAR]) HH on CONSTIT.YEAR = HH.YEAR
order by YEAR;
else
with CONSTIT_CTE
as
(
select
case when @BREAKDOWNBY = 1 then dbo.UFN_GLFISCALYEAR_GETLABEL(FILTERED.DATE) else cast(YEAR(FILTERED.DATE) as nvarchar(24)) end [YEAR],
FILTERED.REVENUEID ID,
case
when FILTERED.TRANSACTIONTYPECODE in (
1, --Pledge
3, --Matching gift claim
4, --Planned gift
6, --Grant award
8, --Donor challenge claim
9, --Pending gift
15 --Membership Installment Plan
)
then
(select REVENUESPLITBALANCE.BALANCE
from dbo.UFN_PLEDGE_GETREVALUEDSPLITBALANCESINCURRENCY(
FILTERED.REVENUEID,
@CURRENCYID,
@ORGANIZATIONCURRENCYID,
@CURRENCYDECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE,
@CURRENTDATE,
@ORIGINCODE,
@CURRENCYCODE
) as REVENUESPLITBALANCE
where REVENUESPLITBALANCE.ID = FILTERED.ID)
else REVENUESPLIT.AMOUNTINCURRENCY
end AMOUNT
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_CONSTITREVENUESPLITIDS FILTERED
left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(
@CURRENCYID,
@ORGANIZATIONCURRENCYID,
@CURRENCYDECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE) as REVENUESPLIT on FILTERED.ID = REVENUESPLIT.ID
where FILTERED.TRANSACTIONTYPECODE <> 2 --Exclude RGs
),
HH_CTE
as
(
select
case when @BREAKDOWNBY = 1 then dbo.UFN_GLFISCALYEAR_GETLABEL(FILTERED.DATE) else cast(YEAR(FILTERED.DATE) as nvarchar(24)) end [YEAR],
FILTERED.REVENUEID ID,
case
when FILTERED.TRANSACTIONTYPECODE in (
1, --Pledge
3, --Matching gift claim
4, --Planned gift
6, --Grant award
8, --Donor challenge claim
9, --Pending gift
15 --Membership Installment Plan
)
then
(select REVENUESPLITBALANCE.BALANCE
from dbo.UFN_PLEDGE_GETREVALUEDSPLITBALANCESINCURRENCY(
FILTERED.REVENUEID,
@CURRENCYID,
@ORGANIZATIONCURRENCYID,
@CURRENCYDECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE,
@CURRENTDATE,
@ORIGINCODE,
@CURRENCYCODE
) as REVENUESPLITBALANCE
where REVENUESPLITBALANCE.ID = FILTERED.ID)
else REVENUESPLIT.AMOUNTINCURRENCY
end
AMOUNT
from #TMP_DATA_REVENUESUMMARYBREAKDOWN_HOUSEHOLDREVENUESPLITIDS FILTERED
left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(
@CURRENCYID,
@ORGANIZATIONCURRENCYID,
@CURRENCYDECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE) as REVENUESPLIT on FILTERED.ID = REVENUESPLIT.ID
where FILTERED.TRANSACTIONTYPECODE <> 2 --Exclude RGs
)
select
coalesce(CONSTIT.YEAR, HH.YEAR) as [YEAR],
CONSTIT.TOTALNUMBER as TOTALNUMBER,
CONSTIT.TOTALAMOUNT as TOTALAMOUNT,
HH.TOTALAMOUNT as TOTALAMOUNT_HOUSEHOLD,
@CURRENCYISOCURRENCYCODE as CURRENCYISOCURRENCYCODE,
@CURRENCYDECIMALDIGITS as CURRENCYDECIMALDIGITS,
@CURRENCYSYMBOL as CURRENCYSYMBOL,
@CURRENCYSYMBOLDISPLAYSETTINGCODE as CURRENCYSYMBOLDISPLAYSETTINGCODE
from (select
YEAR
,count(distinct ID) TOTALNUMBER
,sum(AMOUNT) TOTALAMOUNT
from CONSTIT_CTE
group by [YEAR]) CONSTIT
full join (select
[YEAR]
,sum(AMOUNT) TOTALAMOUNT
from HH_CTE
group by [YEAR]) HH on CONSTIT.YEAR = HH.YEAR
order by YEAR;
end
return 0;