UFN_CONSTITUENT_HASCOMMITMENTS
Returns 1 iff the constituent has commitments.
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_CONSTITUENT_HASCOMMITMENTS
(
@CONSTITUENTID uniqueidentifier
)
returns bit
as
begin
--NOTE: There is now an inline table version of this function, UFN_REVENUE_CONSTITUENTSWITHCOMMITMENTS. Any new commitment logic
--needs to be added to both.
declare @HASPLEDGE bit;
declare @HASPLANNEDGIFT bit;
declare @HASMGPLEDGE bit;
declare @HASRECURRINGGIFT bit;
declare @HASEVENT bit;
declare @HASMEMBERSHIP bit;
declare @HASDONORCHALLENGE bit;
declare @HASGRANTAWARD bit;
select
@HASPLEDGE = 0,
@HASPLANNEDGIFT = 0,
@HASMGPLEDGE = 0,
@HASRECURRINGGIFT = 0,
@HASEVENT = 0,
@HASMEMBERSHIP = 0,
@HASDONORCHALLENGE = 0,
@HASGRANTAWARD = 0
/* JamesWill 2006-10-04 Optimized these 3 separate multi-joins into the single select below. Seem optimization in ver. 5 of UFN_CONSTITUENT_GETCOMMITMENTS
select
@HASPLEDGE = case when count(REVENUE.ID) = 0 then 0 else 1 end
from dbo.FINANCIALTRANSACTION REVENUE
where REVENUE.CONSTITUENTID = @CONSTITUENTID
and REVENUE.TYPECODE = 1
and dbo.UFN_PLEDGE_GETBALANCE(REVENUE.ID) > 0;
if @HASMGPLEDGE = 0
select
@HASMGPLEDGE = case when count(REVENUE.ID) = 0 then 0 else 1 end
from dbo.FINANCIALTRANSACTION REVENUE
where REVENUE.CONSTITUENTID = @CONSTITUENTID
and REVENUE.TYPECODE = 3
and dbo.UFN_PLEDGE_GETBALANCE(REVENUE.ID) > 0;
if @HASPLEDGE = 0 and @HASMGPLEDGE = 0
select
@HASRECURRINGGIFT = case when count(REVENUE.ID) = 0 then 0 else 1 end
from dbo.FINANCIALTRANSACTION REVENUE
inner join dbo.REVENUESCHEDULE on REVENUESCHEDULE.ID = REVENUE.ID
where REVENUE.CONSTITUENTID = @CONSTITUENTID
and REVENUE.TYPECODE = 2
and REVENUESCHEDULE.STATUSCODE in (0,5)
and REVENUE.TRANSACTIONAMOUNT > 0;
*/
--JamesWill 2006-10-04 Begin
select
@HASPLEDGE = coalesce(sum(
case when REVENUE.TYPECODE = 1 and dbo.UFN_PLEDGE_GETBALANCE(REVENUE.ID) > 0 and coalesce(REVENUESCHEDULE.ISPENDING,0) = 0 then 1 else 0 end
), 0),
@HASPLANNEDGIFT = coalesce(sum(
case when REVENUE.TYPECODE = 4 and dbo.UFN_PLEDGE_GETBALANCE(REVENUE.ID) > 0 and coalesce(REVENUESCHEDULE.ISPENDING,0) = 0 then 1 else 0 end
), 0),
@HASMGPLEDGE = coalesce(sum(
case when REVENUE.TYPECODE = 3 and dbo.UFN_PLEDGE_GETBALANCE(REVENUE.ID) > 0 and coalesce(REVENUESCHEDULE.ISPENDING,0) = 0 then 1 else 0 end
), 0),
@HASRECURRINGGIFT = coalesce(sum(
case when REVENUE.TYPECODE = 2 and REVENUE.TRANSACTIONAMOUNT > 0 and REVENUESCHEDULE.STATUSCODE in (0,5) and coalesce(REVENUESCHEDULE.ISPENDING,0) = 0 then 1 else 0 end
), 0),
@HASGRANTAWARD = coalesce(sum(
case when REVENUE.TYPECODE = 6 and dbo.UFN_PLEDGE_GETBALANCE(REVENUE.ID) > 0 and coalesce(REVENUESCHEDULE.ISPENDING,0) = 0 then 1 else 0 end
), 0),
--JamesWill 2011-06-17 Move donor challenge stuff into the super select to avoid having to run it every time.
@HASDONORCHALLENGE = coalesce(sum(
case when REVENUE.TYPECODE = 8 and dbo.UFN_PLEDGE_GETBALANCE(REVENUE.ID) > 0 then 1 else 0 end
), 0)
from dbo.FINANCIALTRANSACTION REVENUE
left join dbo.REVENUESCHEDULE on REVENUESCHEDULE.ID = REVENUE.ID
where REVENUE.CONSTITUENTID = @CONSTITUENTID
and REVENUE.TYPECODE in (1, 2, 3, 4, 6, 8)
--JamesWill 2006-10-04 End
if @HASPLEDGE = 0 and @HASPLANNEDGIFT = 0 and @HASMGPLEDGE = 0 and @HASRECURRINGGIFT = 0 and @HASGRANTAWARD = 0 and @HASDONORCHALLENGE = 0
select
@HASEVENT = case when count(REGISTRANT.ID) = 0 then 0 else 1 end
from dbo.REGISTRANT
where REGISTRANT.CONSTITUENTID = @CONSTITUENTID
and dbo.UFN_EVENTREGISTRANT_GETBALANCE(REGISTRANT.ID) > 0
--if @HASPLEDGE = 0 and @HASPLANNEDGIFT = 0 and @HASMGPLEDGE = 0 and @HASRECURRINGGIFT = 0 and @HASEVENT = 0 and @HASGRANTAWARD = 0 and @HASDONORCHALLENGE = 0
--select
-- @HASMEMBERSHIP = case when count(MEMBER.ID) = 0 then 0 else 1 end
--from dbo.MEMBER
--where MEMBER.CONSTITUENTID = @CONSTITUENTID
--and MEMBER.ISDROPPED = 0
if 1 in (@HASPLEDGE,
@HASPLANNEDGIFT,
@HASMGPLEDGE,
@HASRECURRINGGIFT,
@HASEVENT,
@HASMEMBERSHIP,
@HASDONORCHALLENGE,
@HASGRANTAWARD)
return 1;
return 0;
end