USP_DESIGNATION_GETPLEDGEBALANCEBYPOSITION
Returns the unpaid pledge balance for a given designation.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@VALUE | money | INOUT | |
@DESIGNATIONID | uniqueidentifier | IN | |
@ORGPOSITIONSSELECTIONID | uniqueidentifier | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@ROLLUPTOTAL | bit | IN | |
@CURRENCYID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_DESIGNATION_GETPLEDGEBALANCEBYPOSITION
(
@VALUE money = null output,
@DESIGNATIONID uniqueidentifier,
@ORGPOSITIONSSELECTIONID uniqueidentifier,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@ROLLUPTOTAL bit = 0,
@CURRENCYID uniqueidentifier = null
)
as begin
set @VALUE = 0;
if @CURRENCYID is null
set @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()
if @ORGPOSITIONSSELECTIONID is null
begin
set @VALUE = dbo.UFN_DESIGNATION_GETPLEDGEBALANCE_INCURRENCY(@DESIGNATIONID,@STARTDATE,@ENDDATE,@ROLLUPTOTAL,@CURRENCYID);
return;
end
select @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE),
@ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
declare @IDS as table(ID uniqueidentifier);
insert into @IDS exec USP_ORGANIZATIONHIERARCHY_IDSET_POSITIONHOLDERS @ORGPOSITIONSSELECTIONID, null;
if @ROLLUPTOTAL = 0
select @VALUE =
(coalesce(sum(dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY(RDS.ID, @CURRENCYID)), 0)
-
(
coalesce(( --Subtract payments of the above pledges
select coalesce(sum(dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY(PAYSPLIT.ID, @CURRENCYID)), 0)
from dbo.REVENUESPLIT PAYSPLIT
inner join dbo.REVENUE PAY on PAY.ID = PAYSPLIT.REVENUEID
where
PAY.ID IN
(SELECT IP.PAYMENTID
FROM DBO.INSTALLMENTPAYMENT IP
inner join dbo.REVENUE PLEDGE on IP.PLEDGEID = PLEDGE.ID
inner join dbo.REVENUESPLIT PLEDGESPLIT on PLEDGE.ID = PLEDGESPLIT.REVENUEID
WHERE (PLEDGE.DATE >= @STARTDATE or @STARTDATE is null) and
(PLEDGE.DATE <= @ENDDATE or @ENDDATE is null) and
(PLEDGESPLIT.DESIGNATIONID = @DESIGNATIONID))
and
(PAY.DATE >= @STARTDATE or @STARTDATE is null) and
(PAY.DATE <= @ENDDATE or @ENDDATE is null) and
PAYSPLIT.DESIGNATIONID = @DESIGNATIONID
), 0)
+
coalesce(( --Subtract Writeoffs of the above pledges
select sum(dbo.UFN_WRITEOFFSPLIT_GETAMOUNTINCURRENCY(WOS.ID, @CURRENCYID))
from dbo.WRITEOFFSPLIT WOS
inner join dbo.WRITEOFF WO on WOS.WRITEOFFID = WO.ID
inner join dbo.REVENUE R on WO.REVENUEID = R.ID
where
(R.DATE >= @STARTDATE or @STARTDATE is null) and
(R.DATE <= @ENDDATE or @ENDDATE is null) and
WOS.DESIGNATIONID = @DESIGNATIONID and
R.TRANSACTIONTYPECODE in (1,3,4,6,8)
), 0))
)
from dbo.REVENUESPLIT RDS
inner join dbo.REVENUE R on R.ID = RDS.REVENUEID
inner join dbo.REVENUESOLICITOR RSOL on RDS.ID = RSOL.REVENUESPLITID
inner join dbo.ORGANIZATIONPOSITIONHOLDER OPH
on OPH.CONSTITUENTID = RSOL.CONSTITUENTID and R.DATE between OPH.DATEFROM and coalesce(OPH.DATETO, R.DATE)
inner join @IDS as SELECTION on OPH.[ID] = SELECTION.[ID]
where
(R.DATE >= @STARTDATE or @STARTDATE is null) and
(R.DATE <= @ENDDATE or @ENDDATE is null) and
RDS.DESIGNATIONID = @DESIGNATIONID and
R.TRANSACTIONTYPECODE in (1,3,4,6,8)
else
begin
declare @DL1ID uniqueidentifier;
declare @DL2ID uniqueidentifier;
declare @DL3ID uniqueidentifier;
declare @DL4ID uniqueidentifier;
declare @DL5ID uniqueidentifier;
select @DL1ID = DESIGNATIONLEVEL1ID,
@DL2ID = DESIGNATIONLEVEL2ID,
@DL3ID = DESIGNATIONLEVEL3ID,
@DL4ID = DESIGNATIONLEVEL4ID,
@DL5ID = DESIGNATIONLEVEL5ID
from dbo.DESIGNATION
where ID = @DESIGNATIONID;
with DESIGNATIONS_CTE as (
select ID
from dbo.DESIGNATION D
where D.DESIGNATIONLEVEL1ID = @DL1ID and
(D.DESIGNATIONLEVEL2ID = @DL2ID or @DL2ID is null) and
(D.DESIGNATIONLEVEL3ID = @DL3ID or @DL3ID is null) and
(D.DESIGNATIONLEVEL4ID = @DL4ID or @DL4ID is null) and
(D.DESIGNATIONLEVEL5ID = @DL5ID or @DL5ID is null)
)
select @VALUE =
(coalesce(sum(dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY(RDS.ID, @CURRENCYID)), 0)
-
(
coalesce(( --Subtract payments of the above pledges
select coalesce(sum(dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY(PAYSPLIT.ID, @CURRENCYID)), 0)
from dbo.REVENUESPLIT PAYSPLIT
inner join DESIGNATIONS_CTE PAYD on PAYSPLIT.DESIGNATIONID = PAYD.ID
inner join dbo.REVENUE PAY on PAY.ID = PAYSPLIT.REVENUEID
where
PAY.ID IN
(SELECT IP.PAYMENTID
FROM DBO.INSTALLMENTPAYMENT IP
inner join dbo.REVENUE PLEDGE on IP.PLEDGEID = PLEDGE.ID
inner join dbo.REVENUESPLIT PLEDGESPLIT on PLEDGE.ID = PLEDGESPLIT.REVENUEID
inner join DESIGNATIONS_CTE PD on PLEDGESPLIT.DESIGNATIONID = PD.ID
WHERE (PLEDGE.DATE >= @STARTDATE or @STARTDATE is null) and
(PLEDGE.DATE <= @ENDDATE or @ENDDATE is null))
and
(PAY.DATE >= @STARTDATE or @STARTDATE is null) and
(PAY.DATE <= @ENDDATE or @ENDDATE is null)
), 0)
+
coalesce(( --Subtract Writeoffs of the above pledges
select sum(dbo.UFN_WRITEOFFSPLIT_GETAMOUNTINCURRENCY(WOS.ID, @CURRENCYID))
from dbo.WRITEOFFSPLIT WOS
inner join DESIGNATIONS_CTE WOSD on WOS.DESIGNATIONID = WOSD.ID
inner join dbo.WRITEOFF WO on WOS.WRITEOFFID = WO.ID
inner join dbo.REVENUE R on WO.REVENUEID = R.ID
where
(R.DATE >= @STARTDATE or @STARTDATE is null) and
(R.DATE <= @ENDDATE or @ENDDATE is null) and
R.TRANSACTIONTYPECODE in (1,3,4,6,8)
), 0))
)
from dbo.REVENUESPLIT RDS
inner join DESIGNATIONS_CTE D on RDS.DESIGNATIONID = D.ID
inner join dbo.REVENUE R on R.ID = RDS.REVENUEID
inner join dbo.REVENUESOLICITOR RSOL on RDS.ID = RSOL.REVENUESPLITID
inner join dbo.ORGANIZATIONPOSITIONHOLDER OPH
on OPH.CONSTITUENTID = RSOL.CONSTITUENTID and R.DATE between OPH.DATEFROM and coalesce(OPH.DATETO, R.DATE)
inner join @IDS as SELECTION on OPH.[ID] = SELECTION.[ID]
where
(R.DATE >= @STARTDATE or @STARTDATE is null) and
(R.DATE <= @ENDDATE or @ENDDATE is null) and
R.TRANSACTIONTYPECODE in (1,3,4,6,8)
end
end