USP_DATAFORMTEMPLATE_VIEW_CONSTITUENTGROUP_GIVINGHISTORY
The load procedure used by the view dataform template "Constituent Group Giving History View Form"
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter used to load the fields defined on the form. |
@DATALOADED | bit | INOUT | Output parameter indicating whether or not data was actually loaded. |
@GROUPINCLUDESMEMBERGIVING | bit | INOUT | Group includes member giving |
@TOTALNUMBERFROMGROUP | int | INOUT | Total number of gifts from group |
@TOTALNUMBERFROMGROUPMEMBERS | int | INOUT | Total number of gifts from members |
@TOTALGROUPAMOUNT | money | INOUT | Total giving from group |
@TOTALGROUPMEMBERAMOUNT | money | INOUT | Total giving from members |
@ISHOUSEHOLD | bit | INOUT | Is household |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@TOTALGROUPMEMBERAMOUNTGIFTAID | money | INOUT | Total giving from members including Gift Aid |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_CONSTITUENTGROUP_GIVINGHISTORY (
@ID uniqueidentifier,
@DATALOADED bit = 0 output,
@GROUPINCLUDESMEMBERGIVING bit = null output,
@TOTALNUMBERFROMGROUP int = null output,
@TOTALNUMBERFROMGROUPMEMBERS int = null output,
@TOTALGROUPAMOUNT money = null output,
@TOTALGROUPMEMBERAMOUNT money = null output,
@ISHOUSEHOLD bit = null output,
@CURRENTAPPUSERID uniqueidentifier = null,
@TOTALGROUPMEMBERAMOUNTGIFTAID money = null output
) as
set nocount on;
set @DATALOADED = 0;
declare @CURRENTDATE datetime;
set @CURRENTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate());
declare @SECURITYFEATUREID uniqueidentifier;
declare @SECURITYFEATURETYPE tinyint;
set @SECURITYFEATUREID = '2253c9fe-3489-49f4-b174-3752090b8ec6';
set @SECURITYFEATURETYPE = 1;
-- households always include member giving, other types get looked up
select
@GROUPINCLUDESMEMBERGIVING =
case
when GD.GROUPTYPECODE = 0 then 1
when GD.GROUPTYPECODE = 1 then GT.INCLUDEMEMBERGIVING
end,
@ISHOUSEHOLD =
case
when GD.GROUPTYPECODE = 0 then 1
when GD.GROUPTYPECODE = 1 then 0
end,
@DATALOADED = 1
from dbo.GROUPDATA GD
left join dbo.GROUPTYPE GT on GD.GROUPTYPEID = GT.ID
where GD.ID=@ID;
-- calculate the member giving
if @GROUPINCLUDESMEMBERGIVING = 1
begin
select
@TOTALNUMBERFROMGROUPMEMBERS = count(R.ID),
@TOTALGROUPMEMBERAMOUNT = cast(sum(cast(RS.BASEAMOUNT as decimal(20,5)) - cast(coalesce(WO.AMOUNT, 0) as decimal(20,5))) as money),
@TOTALGROUPMEMBERAMOUNTGIFTAID = coalesce(cast(sum(cast(case R.TYPECODE when 0 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT(RS.ID, 1)
when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGESPLITGROSSAMOUNT(RS.ID)
else RS.BASEAMOUNT end as decimal(20,5)) - cast(coalesce(WO.AMOUNT, 0) as decimal(20,5))) as money), 0)
from
dbo.FINANCIALTRANSACTION R
inner join dbo.FINANCIALTRANSACTIONLINEITEM RS on RS.FINANCIALTRANSACTIONID = R.ID
inner join dbo.REVENUESPLIT_EXT RSE on RSE.ID = RS.ID
left join
(
select
WRITEOFF.REVENUEID,
sum(coalesce(INSTALLMENTWRITEOFF.AMOUNT,0)) AMOUNT
from
dbo.WRITEOFF
left join dbo.INSTALLMENTWRITEOFF on INSTALLMENTWRITEOFF.WRITEOFFID = WRITEOFF.ID
group by
WRITEOFF.REVENUEID
) WO on WO.REVENUEID = R.ID
left join
(
select
INSTALLMENTPAYMENT.PLEDGEID,
sum(coalesce(INSTALLMENTPAYMENT.AMOUNT,0)) AMOUNT
from
dbo.INSTALLMENTPAYMENT
group by
INSTALLMENTPAYMENT.PLEDGEID
) PAYMENT on PAYMENT.PLEDGEID = R.ID
inner join dbo.GROUPMEMBER GM on R.CONSTITUENTID = GM.MEMBERID
left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.ID
left join dbo.V_PLANNEDGIFTREVENUE_WITHADDITIONS PGR on PGR.REVENUEID = R.ID
left join dbo.PLANNEDGIFT PG on PG.ID = PGR.PLANNEDGIFTID
where GM.GROUPID = @ID
and R.DELETEDON is null
and RS.TYPECODE <> 1
and RS.DELETEDON is null
and (R.TYPECODE = 1
or (R.TYPECODE = 0 and RSE.APPLICATIONCODE in (0, 3))
or (R.TYPECODE = 4 and PG.VEHICLECODE in (0,1,2,5,6,7,8,9,10,11,12,13))
)
and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= R.DATE))
or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= R.DATE))
or (GMDR.DATEFROM <= R.DATE and GMDR.DATETO >= R.DATE))
and exists
(
select top 1 REVSITES.SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RS.ID) REVSITES
where (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)))
)
end
-- calculate the giving by the group itself
select
@TOTALNUMBERFROMGROUP = count(R.ID),
@TOTALGROUPAMOUNT = cast(sum(cast(RS.BASEAMOUNT as decimal(20,5)) - cast(coalesce(WO.AMOUNT, 0) as decimal(20,5))) as money)
from
dbo.FINANCIALTRANSACTION R
inner join dbo.FINANCIALTRANSACTIONLINEITEM RS on RS.FINANCIALTRANSACTIONID = R.ID
inner join dbo.REVENUESPLIT_EXT RSE on RSE.ID = RS.ID
left join
(select
WRITEOFF.REVENUEID,
sum(coalesce(INSTALLMENTWRITEOFF.AMOUNT,0)) AMOUNT
from
dbo.WRITEOFF
left join
dbo.INSTALLMENTWRITEOFF
on
INSTALLMENTWRITEOFF.WRITEOFFID = WRITEOFF.ID
group by
WRITEOFF.REVENUEID) WO
on
WO.REVENUEID = R.ID
left join
(select
INSTALLMENTPAYMENT.PLEDGEID,
sum(coalesce(INSTALLMENTPAYMENT.AMOUNT,0)) AMOUNT
from
dbo.INSTALLMENTPAYMENT
group by
INSTALLMENTPAYMENT.PLEDGEID) PAYMENT
on
PAYMENT.PLEDGEID = R.ID
left join dbo.V_PLANNEDGIFTREVENUE_WITHADDITIONS PGR on PGR.REVENUEID = R.ID
left join dbo.PLANNEDGIFT PG on PG.ID = PGR.PLANNEDGIFTID
where (R.TYPECODE = 1
or (R.TYPECODE = 0 and RSE.APPLICATIONCODE in (0, 3))
or (R.TYPECODE = 4 and PG.VEHICLECODE in (0,1,2,5,6,7,8,9,10,11,12,13))
)
and R.CONSTITUENTID = @ID
and exists
(
select top 1 REVSITES.SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RS.ID) REVSITES
where (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)))
);
select @TOTALGROUPMEMBERAMOUNT = coalesce(@TOTALGROUPMEMBERAMOUNT, 0);
select @TOTALGROUPAMOUNT = coalesce(@TOTALGROUPAMOUNT, 0);
select @TOTALNUMBERFROMGROUP = coalesce(@TOTALNUMBERFROMGROUP, 0);
select @TOTALNUMBERFROMGROUPMEMBERS = coalesce(@TOTALNUMBERFROMGROUPMEMBERS, 0);
return 0;