UFN_RECEIVABLEPAYMENTAPPLICATIONS
Gets a list of all the receivable payment applications for a given payment
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@RECEIVABLEPAYMENTLINEITEMID | uniqueidentifier | IN | |
@RECEIVABLEPAYMENTOWNERID | uniqueidentifier | IN | |
@INCLUDEPOSSIBLEAPPLICATIONS | bit | IN |
Definition
Copy
CREATE function dbo.UFN_RECEIVABLEPAYMENTAPPLICATIONS
(
@RECEIVABLEPAYMENTLINEITEMID uniqueidentifier = null,
@RECEIVABLEPAYMENTOWNERID uniqueidentifier = null,
@INCLUDEPOSSIBLEAPPLICATIONS bit = 1
)
returns @APPLICATIONS table
(
ID uniqueidentifier,
SOURCELINEITEMID uniqueidentifier,
APPLIEDTOLINEITEMID uniqueidentifier NOT NULL,
APPLIEDTOID uniqueidentifier NOT NULL,
APPLIEDTOLINEITEMDESCRIPTION nvarchar(100),
CHARGEDUEDATE datetime,
APPLICATIONDATE datetime,
DATE datetime NOT NULL,
NAME nvarchar(100) NOT NULL,
BILLINGITEMNAME nvarchar(100) NOT NULL,
CHARGEAMOUNT money NOT NULL,
CHARGEAMOUNTREMAINING money NOT NULL,
AMOUNT money 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 @RECEIVABLEPAYMENTLINEITEMID is null) and (not @RECEIVABLEPAYMENTOWNERID is null))
return;
-- Check the basic rule that one of the two IDs must be passed in
if ((@RECEIVABLEPAYMENTLINEITEMID is null) and (@RECEIVABLEPAYMENTOWNERID is null))
return;
-- Generate a table with all the existing applications
if (not @RECEIVABLEPAYMENTLINEITEMID is null)
begin
insert into @APPLICATIONS
(ID,
SOURCELINEITEMID,
APPLIEDTOLINEITEMID,
APPLIEDTOID,
APPLIEDTOLINEITEMDESCRIPTION,
CHARGEDUEDATE,
APPLICATIONDATE,
DATE,
NAME,
BILLINGITEMNAME,
CHARGEAMOUNT,
CHARGEAMOUNTREMAINING,
AMOUNT)
select FINANCIALTRANSACTIONLINEITEMAPPLICATION.ID,
FINANCIALTRANSACTIONLINEITEMAPPLICATION.SOURCELINEITEMID,
FINANCIALTRANSACTIONLINEITEMAPPLICATION.APPLIEDTOLINEITEMID,
FINANCIALTRANSACTION_CHARGE.ID,
FINANCIALTRANSACTIONLINEITEM_CHARGE.DESCRIPTION,
CHARGE.DUEDATE,
FINANCIALTRANSACTIONLINEITEM_APPLICATION.DATEADDED,
FINANCIALTRANSACTION_CHARGE.DATE,
CONSTITUENT_CHARGEOWNER.NAME,
BILLINGITEM.NAME,
FINANCIALTRANSACTIONLINEITEM_CHARGE.AMOUNT,
FINANCIALTRANSACTIONLINEITEM_CHARGE.AMOUNT,
FINANCIALTRANSACTIONLINEITEM_APPLICATION.AMOUNT
from dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENT
inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_RECEIVABLEPAYMENT
on FINANCIALTRANSACTION_RECEIVABLEPAYMENT.ID = FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENT.FINANCIALTRANSACTIONID
inner join dbo.FINANCIALTRANSACTIONLINEITEMAPPLICATION
on FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENT.ID = FINANCIALTRANSACTIONLINEITEMAPPLICATION.SOURCELINEITEMID
inner join FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_APPLICATION
on FINANCIALTRANSACTIONLINEITEMAPPLICATION.ID = FINANCIALTRANSACTIONLINEITEM_APPLICATION.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_CHARGE
on FINANCIALTRANSACTIONLINEITEM_CHARGE.ID = FINANCIALTRANSACTIONLINEITEMAPPLICATION.APPLIEDTOLINEITEMID
inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_CHARGE
on FINANCIALTRANSACTIONLINEITEM_CHARGE.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION_CHARGE.ID
inner join dbo.CHARGE
on CHARGE.ID =FINANCIALTRANSACTION_CHARGE.ID
inner join dbo.CONSTITUENT as CONSTITUENT_CHARGEOWNER
on FINANCIALTRANSACTION_CHARGE.CONSTITUENTID = CONSTITUENT_CHARGEOWNER.ID
inner join dbo.CHARGELINEITEM
on CHARGELINEITEM.ID = FINANCIALTRANSACTIONLINEITEM_CHARGE.ID
inner join dbo.BILLINGITEM
on BILLINGITEM.ID = CHARGELINEITEM.BILLINGITEMID
where (FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENT.ID = @RECEIVABLEPAYMENTLINEITEMID) and
(FINANCIALTRANSACTIONLINEITEM_APPLICATION.DELETED = 0);
end
-- Are we including possible applications
if ((@INCLUDEPOSSIBLEAPPLICATIONS = 1) or (not @RECEIVABLEPAYMENTOWNERID is null))
begin
-- Get the payment owner
if (@RECEIVABLEPAYMENTOWNERID is null)
begin
select @RECEIVABLEPAYMENTOWNERID = FINANCIALTRANSACTION.CONSTITUENTID
from dbo.FINANCIALTRANSACTION
inner join dbo.FINANCIALTRANSACTIONLINEITEM
on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
where FINANCIALTRANSACTIONLINEITEM.ID = @RECEIVABLEPAYMENTLINEITEMID;
end
-- Find all the possible charge line items for this payment that do not already have applications
-- and that this payment owner is responsible for.
insert into @APPLICATIONS
(ID,
SOURCELINEITEMID,
APPLIEDTOLINEITEMID,
APPLIEDTOID,
APPLIEDTOLINEITEMDESCRIPTION,
CHARGEDUEDATE,
DATE,
NAME,
BILLINGITEMNAME,
CHARGEAMOUNT,
CHARGEAMOUNTREMAINING,
AMOUNT)
select null,
@RECEIVABLEPAYMENTLINEITEMID,
FINANCIALTRANSACTIONLINEITEM_CHARGE.ID,
FINANCIALTRANSACTION_CHARGE.ID,
FINANCIALTRANSACTIONLINEITEM_CHARGE.DESCRIPTION,
CHARGE.DUEDATE,
FINANCIALTRANSACTION_CHARGE.DATE,
CONSTITUENT_CHARGEOWNER.NAME,
BILLINGITEM.NAME,
FINANCIALTRANSACTIONLINEITEM_CHARGE.AMOUNT,
FINANCIALTRANSACTIONLINEITEM_CHARGE.AMOUNT,
0
from dbo.CHARGE
inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_CHARGE
on CHARGE.ID = FINANCIALTRANSACTION_CHARGE.ID
inner join dbo.CONSTITUENT as CONSTITUENT_CHARGEOWNER
on FINANCIALTRANSACTION_CHARGE.CONSTITUENTID = CONSTITUENT_CHARGEOWNER.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_CHARGE
on FINANCIALTRANSACTION_CHARGE.ID = FINANCIALTRANSACTIONLINEITEM_CHARGE.FINANCIALTRANSACTIONID
inner join dbo.CHARGELINEITEM
on CHARGELINEITEM.ID = FINANCIALTRANSACTIONLINEITEM_CHARGE.ID
inner join dbo.BILLINGITEM
on BILLINGITEM.ID = CHARGELINEITEM.BILLINGITEMID
inner join dbo.V_QUERY_CHARGELINEITEMRESPONSIBILITY
on (V_QUERY_CHARGELINEITEMRESPONSIBILITY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM_CHARGE.ID) and
(V_QUERY_CHARGELINEITEMRESPONSIBILITY.CONSTITUENTID = @RECEIVABLEPAYMENTOWNERID)
left outer join @APPLICATIONS as APPLICATIONS
on APPLICATIONS.APPLIEDTOLINEITEMID = FINANCIALTRANSACTIONLINEITEM_CHARGE.ID
where (APPLICATIONS.ID is null);
end
-- Now subtract the already made payments
update @APPLICATIONS
set CHARGEAMOUNTREMAINING = CHARGEAMOUNTREMAINING - (select sum(FINANCIALTRANSACTIONLINEITEM_APPLICATION.AMOUNT)
from dbo.FINANCIALTRANSACTIONLINEITEMAPPLICATION
inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_APPLICATION
on FINANCIALTRANSACTIONLINEITEM_APPLICATION.ID = FINANCIALTRANSACTIONLINEITEMAPPLICATION.ID
where (FINANCIALTRANSACTIONLINEITEM_APPLICATION.DELETED = 0) and
(FINANCIALTRANSACTIONLINEITEMAPPLICATION.APPLIEDTOLINEITEMID = APPLICATIONS.APPLIEDTOLINEITEMID)
group by FINANCIALTRANSACTIONLINEITEMAPPLICATION.APPLIEDTOLINEITEMID)
from @APPLICATIONS as APPLICATIONS;
return;
end