USP_CHARGE_ADD

A generic stored procedure for adding charges.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@STUDENTID uniqueidentifier IN
@DUEDATE date IN
@AMOUNT money IN
@CHARGEDATE date IN
@POSTDATE datetime IN
@POSTSTATUSCODE tinyint IN
@BILLINGITEMID uniqueidentifier IN
@STUDENTPROGRESSIONID uniqueidentifier IN
@CHARGEID nvarchar(60) INOUT
@DESCRIPTION nvarchar(100) IN
@STUDENTENROLLMENTID uniqueidentifier IN
@AUTOAPPLY bit IN

Definition

Copy


CREATE procedure dbo.USP_CHARGE_ADD
(
    @ID uniqueidentifier = null output,
    @CHANGEAGENTID uniqueidentifier = null,
    @STUDENTID uniqueidentifier = null,    
    @DUEDATE date = null,  
    @AMOUNT money = 0,
    @CHARGEDATE date = null,
    @POSTDATE datetime = null,
    @POSTSTATUSCODE tinyint = 1,
      @BILLINGITEMID uniqueidentifier = null,
    @STUDENTPROGRESSIONID uniqueidentifier = null,
    @CHARGEID nvarchar(60) = null output,
    @DESCRIPTION nvarchar(100) = null,
    @STUDENTENROLLMENTID uniqueidentifier = null,
    @AUTOAPPLY bit = 0
)
as
begin
    set nocount on;

    if @ID is null
        set @ID = newid();

    if @CHANGEAGENTID is null
        exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

    declare @CURRENTDATE datetime;
    set @CURRENTDATE = getdate();

    begin try
        -- Transaction type 104 = Charge


        if @POSTSTATUSCODE = 3 and @POSTDATE is not null
            set @POSTDATE = null;

        if (@CHARGEID is null)
        begin
            set @CHARGEID = dbo.UFN_CHARGE_GETNEXTCHARGEID();
        end

        if (@DESCRIPTION is null)
        begin
            select @DESCRIPTION = PRODUCT.NAME
            from dbo.PRODUCT
            where PRODUCT.ID = @BILLINGITEMID;
        end

        exec dbo.USP_FINANCIALTRANSACTION_ADD @ID=@ID, @CHANGEAGENTID=@CHANGEAGENTID, @CONSTITUENTID=@STUDENTID, @TYPECODE=104, @AMOUNT=@AMOUNT, @DATE=@CHARGEDATE, @POSTDATE=@POSTDATE, @POSTSTATUSCODE=@POSTSTATUSCODE, @USERDEFINEDID=@CHARGEID;

        if @AMOUNT <= 0 
            raiserror('ERR_NOT_ALLOW_ZEROAMOUNT', 13, 1);

        if @STUDENTPROGRESSIONID is not null
        begin 
            set @STUDENTENROLLMENTID=null
        end

        -- handle inserting the basic charge data

        insert into dbo.CHARGE (
            ID, 
            DUEDATE, 
            ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        values (
            @ID
            @DUEDATE,
            @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);


        -- Handling student charge data.


        -- Check the price type first

        declare @PRICETYPECODE tinyint
        select @PRICETYPECODE=PRICETYPECODE from dbo.BILLINGITEM where dbo.BILLINGITEM.ID=@BILLINGITEMID

        if (@PRICETYPECODE=2 or @PRICETYPECODE = 3)
        begin
            insert into dbo.STUDENTCHARGE (
                ID,
                STUDENTPROGRESSIONID,
                EDUCATIONALHISTORYID,
                ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
            values (
                @ID,
                @STUDENTPROGRESSIONID,
                @STUDENTENROLLMENTID,
                @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
        end

        -- update the line items to handle the billing item

        insert into dbo.CHARGELINEITEM
            (ID,
            BILLINGITEMID,
            ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        select FINANCIALTRANSACTIONLINEITEM.ID,
                @BILLINGITEMID,
                @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
        from dbo.FINANCIALTRANSACTIONLINEITEM
        where (FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID);

        -- Update the basic line items with the new description

        update dbo.FINANCIALTRANSACTIONLINEITEM
            set DESCRIPTION = @DESCRIPTION,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
        from dbo.FINANCIALTRANSACTIONLINEITEM
        where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID;

        -- We can assume that the charge owner owns 100% of this charge so set that up here.

        insert into dbo.CHARGELINEITEMRESPONSIBILITY
            (ID, 
            FINANCIALTRANSACTIONLINEITEMID, 
            CONSTITUENTID, 
            PERCENTAGE, 
            DATEADDED, 
            ADDEDBYID, 
            DATECHANGED, 
            CHANGEDBYID)
        select newid(), 
                FINANCIALTRANSACTIONLINEITEM.ID,
                @STUDENTID,
                100,
                DATECHANGED,
                CHANGEDBYID,
                DATECHANGED,
                CHANGEDBYID
        from dbo.FINANCIALTRANSACTIONLINEITEM
        where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID

        if @AUTOAPPLY=1 
          exec dbo.USP_CHARGE_AUTOAPPLY @ID,@CHANGEAGENTID

    end try

    begin catch
        exec dbo.USP_RAISE_ERROR;
        return 1;
    end catch

return 0;
end