USP_DATAFORMTEMPLATE_ADD_TRANSACTIONTOGROUP

The save procedure used by the add dataform template "Add a Transaction to a Group Add Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@IDSETREGISTERID uniqueidentifier IN Selection
@CHARGEDATE date IN Charge date
@DUEDATE date IN Due date
@POSTDATE date IN Post date
@POSTSTATUSCODE tinyint IN Post status
@BILLINGITEMID uniqueidentifier IN Charging for
@DESCRIPTION nvarchar(100) IN Description
@SCHOOLS xml IN Add charges for
@AMOUNT money IN Charge amount
@CREATEOUTPUTIDSET bit IN Create output selection from results
@OUTPUTSELECTIONTYPEID uniqueidentifier IN Selection type
@OUTPUTSELECTIONNAME nvarchar(100) IN Selection name
@OVERWRITEOUTPUTSELECTION bit IN Overwrite existing selection
@CREATEEXCEPTIONIDSET bit IN Create exception selection from results
@EXCEPTIONSELECTIONTYPEID uniqueidentifier IN Selection type
@EXCEPTIONSELECTIONNAME nvarchar(100) IN Selection name
@OVERWRITEEXCEPTIONSELECTION bit IN Overwrite existing selection
@STUDENTS xml IN
@BILLINGITEMTYPE tinyint IN Type

Definition

Copy


        CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_TRANSACTIONTOGROUP
        (
            @ID uniqueidentifier = null output,
            @CHANGEAGENTID uniqueidentifier = null,            
            @IDSETREGISTERID uniqueidentifier = null,
            @CHARGEDATE date = null,
            @DUEDATE date = null,
            @POSTDATE date = null,
            @POSTSTATUSCODE tinyint = 1,
            @BILLINGITEMID uniqueidentifier = null,
            @DESCRIPTION nvarchar(100) = null,
            @SCHOOLS xml= null,            
            @AMOUNT money = 0,
            @CREATEOUTPUTIDSET bit = null,
            @OUTPUTSELECTIONTYPEID uniqueidentifier = null,
            @OUTPUTSELECTIONNAME nvarchar(100) = null,
            @OVERWRITEOUTPUTSELECTION bit = null,
            @CREATEEXCEPTIONIDSET bit = null,
            @EXCEPTIONSELECTIONTYPEID uniqueidentifier = null,
            @EXCEPTIONSELECTIONNAME nvarchar(100) = null,
            @OVERWRITEEXCEPTIONSELECTION bit = null,
            @STUDENTS xml = null,
            @BILLINGITEMTYPE tinyint = 0
        )
        as

        set nocount on;

        begin try
            declare @pricetypecode integer

            select @pricetypecode=dbo.UFN_BILLINGITEM_GETPRICETYPECODE(@BILLINGITEMID)

            if @pricetypecode=1
            begin
                if @AMOUNT<=0
                    raiserror('ERR_AMOUNT_GREATER_THAN_ZERO', 13, 1);
            end

            declare @SCHOOL table
            (
            SCHOOLID uniqueidentifier not null            
            )

            if @pricetypecode=2 or @pricetypecode=3
            begin
                insert into @SCHOOL (SCHOOLID)    
                SELECT T.C.value('(SCHOOLID)[1]','uniqueidentifier') AS 'SCHOOLID'                
                FROM @SCHOOLS.nodes('/SCHOOLS/ITEM') T(C)

                if (select count(SCHOOLID) from @SCHOOL)=0
                raiserror('ERR_SCHOOL_REQUIRED', 13, 1);            
            end            

            if @CREATEOUTPUTIDSET = 1 AND LEN(@OUTPUTSELECTIONNAME) = 0
                raiserror('ERR_OUTPUTSELECTIONNAME_REQUIRED', 13, 1);

            if @CREATEEXCEPTIONIDSET = 1 AND LEN(@EXCEPTIONSELECTIONNAME) = 0
                raiserror('ERR_EXCEPTIONSELECTIONNAME_REQUIRED', 13, 1);

            If @CREATEOUTPUTIDSET = 1 AND (select dbo.UFN_BUSINESSPROCESS_IDSETCANBECREATED(@OUTPUTSELECTIONNAME))=0
                raiserror('ERR_OUTPUTSELECTIONNAME_CANNOTOVERWRITEOUTPUTSELECTION', 13, 1);

            if @CREATEOUTPUTIDSET = 1 AND @OVERWRITEOUTPUTSELECTION =0 AND exists(select ID from dbo.IDSETREGISTER where NAME = @OUTPUTSELECTIONNAME)
                raiserror('ERR_OUTPUTSELECTIONNAME_OUTPUTSELECTIONEXISTS', 13, 1);

            If @CREATEEXCEPTIONIDSET = 1 AND (select dbo.UFN_BUSINESSPROCESS_IDSETCANBECREATED(@EXCEPTIONSELECTIONNAME))=0
                raiserror('ERR_EXCEPTIONSELECTIONNAME_CANNOTOVERWRITEEXCEPTIONSELECTION', 13, 1);

            if @CREATEEXCEPTIONIDSET = 1 AND @OVERWRITEEXCEPTIONSELECTION =0 AND exists(select ID from dbo.IDSETREGISTER where NAME = @EXCEPTIONSELECTIONNAME)
                raiserror('ERR_EXCEPTIONSELECTIONNAME_EXCEPTIONSELECTIONEXISTS', 13, 1);

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

            declare @CURRENTDATE datetime
            set @CURRENTDATE = getdate()

            set @OUTPUTSELECTIONTYPEID = case @CREATEOUTPUTIDSET when 1 then @OUTPUTSELECTIONTYPEID else null end
            set @EXCEPTIONSELECTIONTYPEID = case @CREATEEXCEPTIONIDSET when 1 then @EXCEPTIONSELECTIONTYPEID else null end


            declare @STUDENTRECORDS table
            (    
                ID uniqueidentifier not null,
                INCLUDE bit null,
                STUDENTID uniqueidentifier null
                STUDENTNAME nvarchar(210) null,
                SCHOOLID uniqueidentifier null,
                SCHOOL nvarchar(100) null,
                GRADELEVELID uniqueidentifier null,
                GRADELEVEL nvarchar(10) null,
                STUDENTPROGRESSIONID uniqueidentifier null,
                ENROLLMENTID uniqueidentifier null,
                AMOUNT money null,
                MESSAGE nvarchar(100) null,
                TRANSACTIONID uniqueidentifier,
                CHARGEID nvarchar(60)
            )

            declare @handle int;

            exec sp_xml_preparedocument @handle output, @STUDENTS
            insert into @STUDENTRECORDS (ID, INCLUDE, STUDENTNAME, STUDENTID, SCHOOL, GRADELEVEL, AMOUNT, MESSAGE)    
            select newid(), INCLUDE, STUDENTNAME, STUDENTID, SCHOOL, GRADELEVEL, TRANSACTIONAMOUNT, MESSAGE FROM OPENXML (@handle, '/STUDENTS/ITEM', 2) WITH 
              (INCLUDE bit,
                STUDENTNAME nvarchar(210),
                STUDENTID uniqueidentifier,
                SCHOOL nvarchar(100),                
                GRADELEVEL nvarchar(100),
                TRANSACTIONAMOUNT money,
                MESSAGE nvarchar(100)
              )
            EXEC sp_xml_removedocument @handle

            update s set message='Charge amount must be greater than zero.' from @STUDENTRECORDS s where AMOUNT<=0

            declare @TOTALTRANSACTIONS integer
            select @TOTALTRANSACTIONS =count(ID) from @STUDENTRECORDS s where INCLUDE=1 and AMOUNT>0

            if @TOTALTRANSACTIONS =0
                raiserror('ERR_ATLEASTONERECORD_REQUIRED', 13, 1);

      if @pricetypecode=2 or @pricetypecode=3
            begin

      update @STUDENTRECORDS set STUDENTPROGRESSIONID=STUDENTPROGRESSION.ID
            from @STUDENTRECORDS S inner join dbo.CONSTITUENT C on S.STUDENTID=C.ID
            inner join dbo.EDUCATIONALHISTORY on S.STUDENTID = EDUCATIONALHISTORY.CONSTITUENTID
            inner join dbo.STUDENTPROGRESSION on dbo.STUDENTPROGRESSION.[ENROLLMENTID] = dbo.EDUCATIONALHISTORY.[ID]
            inner join dbo.SCHOOLGRADELEVEL on dbo.STUDENTPROGRESSION.[SCHOOLGRADELEVELID] = dbo.SCHOOLGRADELEVEL.[ID]        
            inner join dbo.CONSTITUENT on dbo.CONSTITUENT.ID=SCHOOLGRADELEVEL.SCHOOLID
            inner join dbo.GRADELEVEL on dbo.SCHOOLGRADELEVEL.GRADELEVELID=dbo.GRADELEVEL.ID
            inner join @SCHOOL sch on sch.SCHOOLID = dbo.SCHOOLGRADELEVEL.SCHOOLID
            where dbo.STUDENTPROGRESSION.ID=dbo.UFN_STUDENT_GETSTUDENTPROGRESSIONBYDATE(@CHARGEDATE, S.STUDENTID, sch.SCHOOLID)
      and dbo.GRADELEVEL.ABBREVIATION=s.GRADELEVEL and dbo.CONSTITUENT.KEYNAME=s.SCHOOL
      and s.INCLUDE=1 AND s.AMOUNT>0

      update @STUDENTRECORDS set ENROLLMENTID=EDUCATIONALHISTORY.ID
          from @STUDENTRECORDS S inner join dbo.EDUCATIONALHISTORY on S.STUDENTID = EDUCATIONALHISTORY.CONSTITUENTID
          inner join dbo.CONSTITUENT C on S.STUDENTID=C.ID
          inner join dbo.CONSTITUENT on dbo.EDUCATIONALHISTORY.EDUCATIONALINSTITUTIONID = CONSTITUENT.ID
          inner join @SCHOOL sch on sch.SCHOOLID = CONSTITUENT.ID
          where S.STUDENTPROGRESSIONID is null AND dbo.EDUCATIONALHISTORY.ID=dbo.UFN_STUDENT_GETENROLLMENTBYDATE(S.STUDENTID, sch.SCHOOLID, @CHARGEDATE)
          and s.INCLUDE=1 AND s.AMOUNT>0 and dbo.CONSTITUENT.KEYNAME=s.SCHOOL
    end


            declare @BILLINGITEMNAME nvarchar(100);
            select @BILLINGITEMNAME = NAME from dbo.PRODUCT where ID=@BILLINGITEMID

            declare @ROWID uniqueidentifier
            declare @STUDENTID uniqueidentifier
            declare @STUDENTPROGRESSIONID uniqueidentifier
            declare @ENROLLMENTID uniqueidentifier        
            declare @TRANSACTIONID uniqueidentifier
            declare @TRANSACTIONAMOUNT money
            declare @CHARGEID nvarchar(60)

          declare @AUTOAPPLY bit
          select @AUTOAPPLY=CHARGE from dbo.APPLICATIONRULES 

            declare STUDENTTRANSACTIONCURSOR cursor local for
                select ID,
                    STUDENTID,
                    STUDENTPROGRESSIONID,
                    ENROLLMENTID,
                    AMOUNT,
                    TRANSACTIONID
                from @STUDENTRECORDS
                where INCLUDE=1 AND AMOUNT>0
                for update of TRANSACTIONID

            open STUDENTTRANSACTIONCURSOR
            fetch next from STUDENTTRANSACTIONCURSOR
            into @ROWID, @STUDENTID, @STUDENTPROGRESSIONID, @ENROLLMENTID, @TRANSACTIONAMOUNT, @TRANSACTIONID ;

            while @@fetch_status = 0
            begin
                set @CHARGEID = null;

                exec dbo.USP_CHARGE_ADD @ID=@TRANSACTIONID output, @CHANGEAGENTID=@CHANGEAGENTID, @STUDENTID=@STUDENTID, @DUEDATE=@DUEDATE, @AMOUNT=@TRANSACTIONAMOUNT, @POSTDATE=@POSTDATE, @POSTSTATUSCODE=@POSTSTATUSCODE, @CHARGEDATE=@CHARGEDATE, @BILLINGITEMID=@BILLINGITEMID, @STUDENTPROGRESSIONID=@STUDENTPROGRESSIONID, @CHARGEID=@CHARGEID output, @DESCRIPTION=@DESCRIPTION, @STUDENTENROLLMENTID=@ENROLLMENTID, @AUTOAPPLY=@AUTOAPPLY;

                update S
                    set CHARGEID = @CHARGEID,
                        TRANSACTIONID = @TRANSACTIONID
                    from @STUDENTRECORDS as S
                    where (S.ID = @ROWID);

                fetch next from STUDENTTRANSACTIONCURSOR
                into @ROWID, @STUDENTID, @STUDENTPROGRESSIONID, @ENROLLMENTID, @TRANSACTIONAMOUNT, @TRANSACTIONID;
            end

            close STUDENTTRANSACTIONCURSOR
            deallocate STUDENTTRANSACTIONCURSOR

            -- Create success and exception output tables.    

            if @CREATEOUTPUTIDSET =1
            begin                            
                delete from dbo.BILLING_ADDATRANSACTIONTOAGROUP_OUTPUT                
                insert into dbo.BILLING_ADDATRANSACTIONTOAGROUP_OUTPUT (STUDENTID) select STUDENTID from @STUDENTRECORDS where INCLUDE=1 and AMOUNT>0 and ((MESSAGE is null) or LEN(MESSAGE)=0)                
            end

            if @CREATEEXCEPTIONIDSET =1
            begin            
                delete from dbo.BILLING_ADDATRANSACTIONTOAGROUP_EXCEPTION                            
                insert into dbo.BILLING_ADDATRANSACTIONTOAGROUP_EXCEPTION (STUDENTID) select STUDENTID from @STUDENTRECORDS where LEN(MESSAGE)>0                
            end

        end try

        begin catch
            exec dbo.USP_RAISE_ERROR
            return 1
        end catch

        return 0