USP_CHARGE_REVERSE
Executes the "Reverse charge" record operation.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | Input parameter indicating the ID of the record being updated. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the update. |
Definition
Copy
CREATE procedure dbo.USP_CHARGE_REVERSE
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier
)
as begin
set nocount on;
if dbo.UFN_CHARGE_ISREVERSED(@ID)=1
raiserror('ERR_CHARGE_REVERSED', 13, 1);
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
-- Get the change agent
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @STUDENTID uniqueidentifier
declare @AMOUNT money
declare @BILLINGITEMID uniqueidentifier
declare @DESCRIPTION nvarchar(100)
declare @SCHOOLID uniqueidentifier
declare @GRADELEVELID uniqueidentifier
-- If there are any applications they all need to be reversed.
exec dbo.USP_CHARGE_UNAPPLYALL @ID, @CHANGEAGENTID
select
@STUDENTID = dbo.FINANCIALTRANSACTION.CONSTITUENTID,
@AMOUNT = dbo.FINANCIALTRANSACTION.TRANSACTIONAMOUNT,
@SCHOOLID = ISNULL(dbo.SCHOOLGRADELEVEL.SCHOOLID, dbo.EDUCATIONALHISTORY.EDUCATIONALINSTITUTIONID),
@GRADELEVELID = dbo.SCHOOLGRADELEVEL.GRADELEVELID
from dbo.CHARGE inner join dbo.FINANCIALTRANSACTION on CHARGE.ID=FINANCIALTRANSACTION.ID
left outer join dbo.CONSTITUENT on dbo.FINANCIALTRANSACTION.CONSTITUENTID=dbo.CONSTITUENT.ID
left outer join dbo.STUDENTCHARGE on dbo.CHARGE.ID = dbo.STUDENTCHARGE.ID
left outer join dbo.STUDENTPROGRESSION on dbo.STUDENTCHARGE.STUDENTPROGRESSIONID = dbo.STUDENTPROGRESSION.ID
left outer join dbo.SCHOOLGRADELEVEL on dbo.STUDENTPROGRESSION.SCHOOLGRADELEVELID = dbo.SCHOOLGRADELEVEL.ID
left outer join dbo.EDUCATIONALHISTORY on dbo.STUDENTCHARGE.EDUCATIONALHISTORYID = dbo.EDUCATIONALHISTORY.ID
where CHARGE.ID = @ID;
select top 1 @BILLINGITEMID = CHARGELINEITEM.BILLINGITEMID,
@DESCRIPTION = FINANCIALTRANSACTIONLINEITEM.DESCRIPTION
from dbo.CHARGE inner join dbo.FINANCIALTRANSACTIONLINEITEM on CHARGE.ID=FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.CHARGELINEITEM on CHARGELINEITEM.ID=FINANCIALTRANSACTIONLINEITEM.ID
where (FINANCIALTRANSACTIONLINEITEM.TYPECODE = 0) and
(FINANCIALTRANSACTIONLINEITEM.DELETEDON is null) and
(FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID);
declare @RECEIVABLECREDITID uniqueidentifier;
set @RECEIVABLECREDITID = newid();
exec dbo.USP_DATAFORMTEMPLATE_ADD_RECEIVABLECREDIT @ID=@RECEIVABLECREDITID, @CHANGEAGENTID =@CHANGEAGENTID, @STUDENTID =@STUDENTID,@AMOUNT =@AMOUNT, @CREDITDATE =@CURRENTDATE, @POSTDATE =@CURRENTDATE, @POSTSTATUSCODE =1, @BILLINGITEMID=@BILLINGITEMID, @DESCRIPTION=@DESCRIPTION, @SCHOOLID=@SCHOOLID, @GRADELEVELID=@GRADELEVELID;
declare @RECEIVABLECREDITLINEITEMID uniqueidentifier;
select top 1 @RECEIVABLECREDITLINEITEMID=FTLI.ID
from dbo.FINANCIALTRANSACTIONLINEITEM FTLI
where FTLI.FINANCIALTRANSACTIONID=@RECEIVABLECREDITID and FTLI.DELETEDON is null and FTLI.TYPECODE = 0 ;
declare @CHARGERECEIVABLECREDITLINEITEMSID uniqueidentifier
set @CHARGERECEIVABLECREDITLINEITEMSID = newid();
insert into dbo.CHARGERECEIVABLECREDITLINEITEMS
(ID,
CHARGELINEITEMID,
RECEIVABLECREDITLINEITEMID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
select newid(),
FTLI.ID,
@RECEIVABLECREDITLINEITEMID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from dbo.FINANCIALTRANSACTIONLINEITEM FTLI
where FTLI.FINANCIALTRANSACTIONID=@ID and FTLI.DELETEDON is null and FTLI.TYPECODE = 0
declare @ACCOUNTINGMETHODCODE bit
select @ACCOUNTINGMETHODCODE = ACCOUNTINGMETHODCODE from dbo.APPLICATIONRULES
if @ACCOUNTINGMETHODCODE =1
begin
declare @APPLICATIONSTABLE table
(
ID uniqueidentifier NOT NULL,
SOURCELINEITEMID uniqueidentifier NOT NULL,
TARGETLINEITEMID uniqueidentifier NOT NULL,
AMOUNT money NOT NULL
)
insert into @APPLICATIONSTABLE
(ID,
SOURCELINEITEMID,
TARGETLINEITEMID,
AMOUNT)
select newid(),
(select top 1 FTLI.ID from dbo.FINANCIALTRANSACTIONLINEITEM FTLI where FTLI.FINANCIALTRANSACTIONID=@RECEIVABLECREDITID and FTLI.DELETEDON is null and FTLI.TYPECODE = 0) AS SOURCELINEITEMID,
FINANCIALTRANSACTIONLINEITEM.ID,
FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT
from dbo.FINANCIALTRANSACTIONLINEITEM
where (FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID) and
(FINANCIALTRANSACTIONLINEITEM.DELETEDON is null) and
(FINANCIALTRANSACTIONLINEITEM.TYPECODE = 0)
declare @APPLICATIONSXML xml;
--TODO: Postdate and poststatus will need to be changed to the lineitems poststatus/postdate
set @APPLICATIONSXML =
(select APPLICATIONSTABLE.ID,
APPLICATIONSTABLE.SOURCELINEITEMID,
APPLICATIONSTABLE.TARGETLINEITEMID,
APPLICATIONSTABLE.AMOUNT,
GETDATE() AS POSTDATE,
1 AS POSTSTATUSCODE
from @APPLICATIONSTABLE as APPLICATIONSTABLE
where APPLICATIONSTABLE.AMOUNT > 0
for xml raw('ITEM'),type,elements,root('APPLICATIONS'),BINARY BASE64);
-- Apply the items
exec dbo.USP_FINANCIALTRANSACTION_LINEITEMAPPLICATIONS_APPLYMULTIPLE @APPLICATIONSXML, @CHANGEAGENTID;
end
return 0;
end