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