UFN_CHARGEAPPLICATIONS
Gets a list of all the charge applications for a given charge.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CHARGELINEITEMID | uniqueidentifier | IN | |
@CHARGEOWNERID | uniqueidentifier | IN | |
@INCLUDEPOSSIBLEAPPLICATIONS | bit | IN |
Definition
Copy
CREATE function dbo.UFN_CHARGEAPPLICATIONS
(
@CHARGELINEITEMID uniqueidentifier = null,
@CHARGEOWNERID uniqueidentifier = null,
@INCLUDEPOSSIBLEAPPLICATIONS bit = 1
)
returns @APPLICATIONS table
(
ID uniqueidentifier,
SOURCELINEITEMID uniqueidentifier,
TARGETLINEITEMID uniqueidentifier NOT NULL,
SOURCEID uniqueidentifier NOT NULL,
DATE datetime NOT NULL,
APPLICATIONDATE datetime,
TYPE nvarchar(100) NOT NULL,
NAME nvarchar(100) NOT NULL,
DESCRIPTION nvarchar(100) NOT NULL,
TOTALAMOUNT money NOT NULL,
TOTALAMOUNTREMAINING money NOT NULL,
AMOUNT money NOT NULL,
POSTDATE date NULL,
POSTSTATUSCODE tinyint NOT NULL
)
with execute as caller
as
begin
-- Check the basic rule that only one of the two IDs can be passed in
if ((not @CHARGELINEITEMID is null) and (not @CHARGEOWNERID is null))
return;
-- Check the basic rule that one of the two IDs must be passed in
if ((@CHARGELINEITEMID is null) and (@CHARGEOWNERID is null))
return;
-- Generate a table with all the existing applications
if (not @CHARGELINEITEMID is null)
begin
insert into @APPLICATIONS
(ID,
SOURCELINEITEMID,
TARGETLINEITEMID,
SOURCEID,
DATE,
APPLICATIONDATE,
TYPE,
NAME,
DESCRIPTION,
TOTALAMOUNT,
TOTALAMOUNTREMAINING,
AMOUNT,
POSTDATE,
POSTSTATUSCODE)
select FINANCIALTRANSACTIONLINEITEM_APPLICATION.ID,
FINANCIALTRANSACTIONLINEITEM_APPLICATION.SOURCELINEITEMID,
FINANCIALTRANSACTIONLINEITEM_APPLICATION.TARGETLINEITEMID,
FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.ID,
FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE,
case when (FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE > FINANCIALTRANSACTION_CHARGE.DATE) then
FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE
else
FINANCIALTRANSACTION_CHARGE.DATE
end,
FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.TYPE,
case FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.TYPECODE
when 105 then
CONSTITUENT_PAYER.NAME
else
''
end,
case FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.TYPECODE
when 105 then
RECEIVABLEPAYMENT.PAYMENTMETHOD
when 106 then
BILLINGITEM.NAME
end,
FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT.TRANSACTIONAMOUNT,
FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT.TRANSACTIONAMOUNT,
FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT,
FINANCIALTRANSACTIONLINEITEM_APPLICATION.POSTDATE,
FINANCIALTRANSACTIONLINEITEM_APPLICATION.POSTSTATUSCODE
from dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT
inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT
on FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.ID = FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT.FINANCIALTRANSACTIONID
inner join FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_APPLICATION
on FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT.ID = FINANCIALTRANSACTIONLINEITEM_APPLICATION.SOURCELINEITEMID
inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_CHARGE
on FINANCIALTRANSACTIONLINEITEM_CHARGE.ID = FINANCIALTRANSACTIONLINEITEM_APPLICATION.TARGETLINEITEMID
inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_CHARGE
on FINANCIALTRANSACTIONLINEITEM_CHARGE.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION_CHARGE.ID
inner join dbo.CONSTITUENT as CONSTITUENT_RECEIVABLEPAYMENTCREDITOWNER
on FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.CONSTITUENTID = CONSTITUENT_RECEIVABLEPAYMENTCREDITOWNER.ID
left outer join dbo.RECEIVABLEPAYMENT
on RECEIVABLEPAYMENT.ID =FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.ID
left outer join dbo.CONSTITUENT as CONSTITUENT_PAYER
on RECEIVABLEPAYMENT.CONSTITUENTID = CONSTITUENT_PAYER.ID
left outer join dbo.RECEIVABLECREDITLINEITEM
on RECEIVABLECREDITLINEITEM.ID =FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT.ID
left outer join dbo.BILLINGITEM
on BILLINGITEM.ID = RECEIVABLECREDITLINEITEM.BILLINGITEMID
where (FINANCIALTRANSACTIONLINEITEM_CHARGE.ID = @CHARGELINEITEMID) and
(FINANCIALTRANSACTIONLINEITEM_APPLICATION.DELETEDON is null);
end
-- Are we including possible applications
if ((@INCLUDEPOSSIBLEAPPLICATIONS = 1) or (not @CHARGEOWNERID is null))
begin
-- Get the charge owner
if (@CHARGEOWNERID is null)
begin
select @CHARGEOWNERID = FINANCIALTRANSACTION.CONSTITUENTID
from dbo.FINANCIALTRANSACTION
inner join dbo.FINANCIALTRANSACTIONLINEITEM
on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
where FINANCIALTRANSACTIONLINEITEM.ID = @CHARGELINEITEMID;
end
-- Find all the possible receivable payment line items for this charge that do not already have applications
-- and that this charge owner is the owner of.
insert into @APPLICATIONS
(ID,
SOURCELINEITEMID,
TARGETLINEITEMID,
SOURCEID,
DATE,
TYPE,
NAME,
DESCRIPTION,
TOTALAMOUNT,
TOTALAMOUNTREMAINING,
AMOUNT,
POSTDATE,
POSTSTATUSCODE)
select null,
FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENT.ID,
@CHARGELINEITEMID,
FINANCIALTRANSACTION_RECEIVABLEPAYMENT.ID,
FINANCIALTRANSACTION_RECEIVABLEPAYMENT.DATE,
FINANCIALTRANSACTION_RECEIVABLEPAYMENT.TYPE,
CONSTITUENT_PAYMENTOWNER.NAME,
RECEIVABLEPAYMENT.PAYMENTMETHOD,
FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENT.TRANSACTIONAMOUNT,
FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENT.TRANSACTIONAMOUNT,
0,
null,
1
from dbo.RECEIVABLEPAYMENT
inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_RECEIVABLEPAYMENT
on (RECEIVABLEPAYMENT.ID = FINANCIALTRANSACTION_RECEIVABLEPAYMENT.ID) and
(FINANCIALTRANSACTION_RECEIVABLEPAYMENT.CONSTITUENTID = @CHARGEOWNERID)
inner join dbo.CONSTITUENT as CONSTITUENT_PAYMENTOWNER
on RECEIVABLEPAYMENT.CONSTITUENTID = CONSTITUENT_PAYMENTOWNER.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENT
on (FINANCIALTRANSACTION_RECEIVABLEPAYMENT.ID = FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENT.FINANCIALTRANSACTIONID) and
(FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENT.TYPECODE = 0)
left outer join @APPLICATIONS as APPLICATIONS
on APPLICATIONS.SOURCELINEITEMID = FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENT.ID
where (APPLICATIONS.ID is null);
-- Find all the possible receivable credit line items for this charge that do not already have applications
-- and that this charge owner is the owner of.
insert into @APPLICATIONS
(ID,
SOURCELINEITEMID,
TARGETLINEITEMID,
SOURCEID,
DATE,
TYPE,
NAME,
DESCRIPTION,
TOTALAMOUNT,
TOTALAMOUNTREMAINING,
AMOUNT,
POSTDATE,
POSTSTATUSCODE)
select null,
FINANCIALTRANSACTIONLINEITEM_RECEIVABLECREDIT.ID,
@CHARGELINEITEMID,
FINANCIALTRANSACTION_RECEIVABLECREDIT.ID,
FINANCIALTRANSACTION_RECEIVABLECREDIT.DATE,
FINANCIALTRANSACTION_RECEIVABLECREDIT.TYPE,
'',
BILLINGITEM.NAME,
FINANCIALTRANSACTIONLINEITEM_RECEIVABLECREDIT.TRANSACTIONAMOUNT,
FINANCIALTRANSACTIONLINEITEM_RECEIVABLECREDIT.TRANSACTIONAMOUNT,
0,
null,
1
from dbo.RECEIVABLECREDIT
inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_RECEIVABLECREDIT
on (RECEIVABLECREDIT.ID = FINANCIALTRANSACTION_RECEIVABLECREDIT.ID) and
(FINANCIALTRANSACTION_RECEIVABLECREDIT.CONSTITUENTID = @CHARGEOWNERID)
inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_RECEIVABLECREDIT
on (FINANCIALTRANSACTION_RECEIVABLECREDIT.ID = FINANCIALTRANSACTIONLINEITEM_RECEIVABLECREDIT.FINANCIALTRANSACTIONID) and
(FINANCIALTRANSACTIONLINEITEM_RECEIVABLECREDIT.TYPECODE = 0)
inner join dbo.RECEIVABLECREDITLINEITEM
on RECEIVABLECREDITLINEITEM.ID =FINANCIALTRANSACTIONLINEITEM_RECEIVABLECREDIT.ID
inner join dbo.BILLINGITEM
on BILLINGITEM.ID = RECEIVABLECREDITLINEITEM.BILLINGITEMID
left outer join @APPLICATIONS as APPLICATIONS
on APPLICATIONS.SOURCELINEITEMID = FINANCIALTRANSACTIONLINEITEM_RECEIVABLECREDIT.ID
where (APPLICATIONS.ID is null);
end
-- Now subtract the already made payments
update @APPLICATIONS
set TOTALAMOUNTREMAINING = TOTALAMOUNTREMAINING - isnull((select sum(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT)
from dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_APPLICATION
where (FINANCIALTRANSACTIONLINEITEM_APPLICATION.DELETEDON is null) and
(FINANCIALTRANSACTIONLINEITEM_APPLICATION.SOURCELINEITEMID = APPLICATIONS.SOURCELINEITEMID)
group by FINANCIALTRANSACTIONLINEITEM_APPLICATION.SOURCELINEITEMID), 0)
from @APPLICATIONS as APPLICATIONS;
-- Now remove any possible payments where the amount left to be applied is zero
delete from @APPLICATIONS
where (ID is null) and (TOTALAMOUNTREMAINING = 0);
return;
end