USP_DATAFORMTEMPLATE_ADD_SETUPNEXTACADEMICYEAR_COPYNEXT

The save procedure used by the add dataform template "Set up next academic year".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CONTEXTID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@ACADEMICYEARID uniqueidentifier IN Academic year
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@COPYORCREATE int IN Copy from previous year
@COPYCOURSERESTRICTION bit IN Course restrictions
@COPYCOURSEGRADING bit IN Course grading information
@COPYBILLINGITEMCOSTHISTORY bit IN Billing item cost history
@TOACADEMICYEARNAME uniqueidentifier IN Name
@SCHOOLSTARTDATE datetime IN School starts
@SCHOOLENDDATE datetime IN School ends
@BILLINGSTARTDATE datetime IN Billing start date
@BILLINGENDDATE datetime IN Billing end date
@SESSIONTERMS xml IN Terms

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_SETUPNEXTACADEMICYEAR_COPYNEXT
(
        @ID uniqueidentifier = null output,
        @CONTEXTID uniqueidentifier,
        @ACADEMICYEARID uniqueidentifier = null,
        @CHANGEAGENTID uniqueidentifier = null,
        @COPYORCREATE integer = 0
        @COPYCOURSERESTRICTION bit = 0,
        @COPYCOURSEGRADING bit = 0,
        @COPYBILLINGITEMCOSTHISTORY bit = 0,
        @TOACADEMICYEARNAME uniqueidentifier = null,
        @SCHOOLSTARTDATE datetime = null,
        @SCHOOLENDDATE datetime = null,
        @BILLINGSTARTDATE datetime = null,
        @BILLINGENDDATE datetime = null,
        @SESSIONTERMS xml = null
)
as
         begin

            set nocount on;

            --Variables

            declare @SCHOOLID uniqueidentifier
            declare @CURRENTDATE datetime
            declare @NEWSESSIONID uniqueidentifier
            declare @OLDSESSIONID uniqueidentifier


            set @CURRENTDATE = getdate()

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

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

            select @SCHOOLID = AY.SCHOOLID 
            from ACADEMICYEAR AY
            where AY.ID = @ACADEMICYEARID



        -- 1. Check if the dates are not null...


            if @COPYBILLINGITEMCOSTHISTORY = 1
            begin
                if @BILLINGSTARTDATE is null
                begin
                    raiserror ('BBERR_TO_BILLING_STARTDATE_ISNULL',13,1);
                    return 1 ;
                end

                if @BILLINGENDDATE is null
                begin
                    raiserror ('BBERR_TO_BILLING_ENDDATE_ISNULL',13,1);
                    return 1 ;
                end
            end

            begin try

                insert into dbo.ACADEMICYEAR
                (ID, SCHOOLID, STARTDATE, ENDDATE, ACADEMICYEARNAMECODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,BILLINGSTARTDATE,BILLINGENDDATE)
                values
                (@ID, @SCHOOLID, @SCHOOLSTARTDATE, @SCHOOLENDDATE, @TOACADEMICYEARNAME, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE,@BILLINGSTARTDATE,@BILLINGENDDATE)

            end try

            begin catch
                exec dbo.USP_RAISE_ERROR
                return 1
            end catch

            if @COPYORCREATE = 0 ---Rest of the code is only if Copying information.

            begin
                  --Let's add sessions...

                declare  @SESSION_COPY  table
                (
                    ROWNUMBER int identity(1,1),
                    OLDSESSIONID uniqueidentifier,
                    NEWSESSIONID uniqueidentifier,
                    ACADEMICYEARID uniqueidentifier
                )

                declare @TERM_DATES table
                (
                    TERMNAMECODEID uniqueidentifier,
                    STARTDATE date,
                    ENDDATE date
                )

                declare @session_count tinyint
                declare @session_row tinyint
                declare @Term_RowID int
                declare @Term_CountID int   
                declare @child_ROW int
                declare @child_COUNT int

                declare @SESSIONNAMECODEID uniqueidentifier
                declare @TERMNAMECODEID uniqueidentifier
                declare @TERMSTARTDATE date
                declare @TERMENDDATE date
                declare @TIMETABLEDAYID uniqueidentifier

                declare @SESSION_oldSTARTDATE date
                declare @SESSION_oldENDDATE date
                declare @SESSION_newSTARTDATE date
                declare @SESSION_newENDDATE date    

                delete from @SESSION_COPY            

                insert into @SESSION_COPY(OLDSESSIONID, NEWSESSIONID,ACADEMICYEARID)
                    select SS.ID,newid(),@ID
                    from SESSION SS
                    inner join ACADEMICYEAR AY
                        ON SS.ACADEMICYEARID = AY.ID
                    where AY.SCHOOLID = @SCHOOLID AND AY.ID = @ACADEMICYEARID    


                insert into DBO.SESSION(
                        ID,ACADEMICYEARID,
                        ADDEDBYID,CHANGEDBYID,
                        DATEADDED,DATECHANGED,
                        SESSIONNAMECODEID,MARKINGCOLUMNSETID,TIMETABLEID,
                        SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY)
                select
                    SSC.NEWSESSIONID,SSC.ACADEMICYEARID,
                    @CHANGEAGENTID,@CHANGEAGENTID,
                    @CURRENTDATE,@CURRENTDATE,
                    SESSIONNAMECODEID,MARKINGCOLUMNSETID,TIMETABLEID,
                    SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY
                from @SESSION_COPY SSC
                    inner join SESSION SS on SS.ID = SSC.OLDSESSIONID

                select @session_row=MIN(ROWNUMBER),
                       @session_count = MAX(ROWNUMBER)
                from @SESSION_COPY

                while @session_row <= @session_count
                    begin

                        select @NEWSESSIONID = NEWSESSIONID,@OLDSESSIONID=OLDSESSIONID 
                        from @SESSION_COPY 
                        where ROWNUMBER=@session_row

                        select @SESSIONNAMECODEID = SESSIONNAMECODEID
                        from SESSION where ID = @OLDSESSIONID

                        begin -- Copy Term


                            insert into dbo.TERM(ID,SESSIONID,STARTDATE,ENDDATE,ADDEDBYID,CHANGEDBYID,
                                            DATEADDED,DATECHANGED,TIMETABLEDAYID,TERMNAMECODEID,WITHDRAWALDATE)
                            select
                            NEWID(),@NEWSESSIONID,
                            SessionTerms.STARTDATE,    SessionTerms.ENDDATE,
                            @CHANGEAGENTID,    @CHANGEAGENTID,
                            @CURRENTDATE, @CURRENTDATE,
                            SessionTerms.TIMETABLEDAYID, TM.TERMNAMECODEID,
                            SessionTerms.WITHDRAWALDATE
                            from
                            (select 
                            T.c.value('(SESSIONNAMECODEID)[1]','uniqueidentifier') as SESSIONNAMECODEID,
                            T.c.value('(TERMNAMECODEID)[1]','uniqueidentifier') as TERMNAMECODEID,
                            T.c.value('(STARTDATE)[1]','date') as STARTDATE,
                            T.c.value('(ENDDATE)[1]','date') as ENDDATE,
                            T.c.value('(WITHDRAWALDATE)[1]','date') as WITHDRAWALDATE,
                            T.c.value('(TIMETABLEDAYID)[1]','uniqueidentifier') as TIMETABLEDAYID
                            from @SESSIONTERMS.nodes('/SESSIONTERMS/ITEM') T(c)) as SessionTerms 
                            inner join TERM tm on SessionTerms.TERMNAMECODEID = tm.TERMNAMECODEID
                                and tm.SESSIONID = @OLDSESSIONID
                            where SessionTerms.SESSIONNAMECODEID = @SESSIONNAMECODEID;

                            --Let's save the TERM info for use while adding Start terms for Course restrictions

                            delete from @TERM_DATES

                            insert into @TERM_DATES
                                select
                                TM.TERMNAMECODEID,SessionTerms.STARTDATE,SessionTerms.ENDDATE
                                from
                                (select 
                                 T.c.value('(TERMNAMECODEID)[1]','uniqueidentifier') as TERMNAMECODEID,
                                 T.c.value('(STARTDATE)[1]','date') as STARTDATE,
                                 T.c.value('(ENDDATE)[1]','date') as ENDDATE,
                                 T.c.value('(WITHDRAWALDATE)[1]','date') as WITHDRAWALDATE,
                                 T.c.value('(SESSIONNAMECODEID)[1]','uniqueidentifier') as SESSIONNAMECODEID
                                from @SESSIONTERMS.nodes('/SESSIONTERMS/ITEM') T(c)) as SessionTerms 
                                inner join TERM tm on SessionTerms.TERMNAMECODEID = tm.TERMNAMECODEID
                                    and tm.SESSIONID = @OLDSESSIONID
                                where SessionTerms.SESSIONNAMECODEID = @SESSIONNAMECODEID;                                                        

                        --Now add the calendar entries to the newly added terms


                            declare @TempTermTable table (
                               ROWNUMBER int identity(1,1), TERMID uniqueidentifier)

                            delete from @TempTermTable

                            insert into @TempTermTable (TERMID) 
                                select ID from dbo.TERM where SESSIONID = @NEWSESSIONID

                            select @Term_RowID=MIN(ROWNUMBER),@Term_CountID=MAX(ROWNUMBER)
                            from @TempTermTable

                            declare @TermID uniqueidentifier = null

                            while @Term_RowID <= @Term_CountID
                            begin
                                select @TERMID = TERMID
                                from @TempTermTable
                                where ROWNUMBER = @Term_RowID

                                exec dbo.USP_SCHEDULEDATE_GENERATEENTRIES @TermID, null, null, null, @CHANGEAGENTID

                                set @Term_RowID = @Term_RowID + 1
                            end

                        end

                        select @SESSION_oldSTARTDATE=STARTDATE, @SESSION_oldENDDATE=ENDDATE 
                        from UFN_SESSION_GETDATES(@OLDSESSIONID)

                        select @SESSION_newSTARTDATE=STARTDATE, @SESSION_newENDDATE=ENDDATE 
                        from UFN_SESSION_GETDATES(@NEWSESSIONID)                            

                        if @COPYCOURSERESTRICTION = 1
                        begin

                            declare @newCOURSERESTRICTIONID uniqueidentifier
                            declare @oldCOURSERESTRICTIONID uniqueidentifier


                            declare @tempCOURSERESTRICTIONS  table
                            (
                                ROWNUMBER int identity(1,1),
                                OLDCOURSERESTRICTIONID uniqueidentifier
                            )

                            delete from @tempCOURSERESTRICTIONS

                            insert into @tempCOURSERESTRICTIONS(OLDCOURSERESTRICTIONID)
                                select CRT.ID from COURSERESTRICTION CRT
                                    INNER JOIN COURSE CR ON CRT.COURSEID = CR.ID
                                    where (CRT.STARTDATE = @SESSION_oldSTARTDATE AND CRT.ENDDATE = @SESSION_oldENDDATE)
                                    and CR.SCHOOLID = @SCHOOLID and CR.ISINACTIVE = 0

                            select @child_ROW=MIN(ROWNUMBER),@child_COUNT=MAX(ROWNUMBER)
                            from @tempCOURSERESTRICTIONS

                            while @child_ROW <= @child_COUNT
                            begin

                                select @oldCOURSERESTRICTIONID = OLDCOURSERESTRICTIONID 
                                from @tempCOURSERESTRICTIONS 
                                where ROWNUMBER = @child_ROW

                                set @newCOURSERESTRICTIONID = newid()

                                insert into COURSERESTRICTION
                                (
                                    ID,COURSEID,
                                    STARTDATE,ENDDATE,
                                    LENGTHINTERMS,PATTERNID,
                                    ADDEDBYID,CHANGEDBYID,
                                    DATEADDED,DATECHANGED
                                )
                                    select 
                                    @newCOURSERESTRICTIONID, CRT.COURSEID,
                                    @SESSION_newSTARTDATE,@SESSION_newENDDATE,
                                    CRT.LENGTHINTERMS,CRT.PATTERNID,
                                    @CHANGEAGENTID,@CHANGEAGENTID,
                                    @CURRENTDATE,@CURRENTDATE
                                    from COURSERESTRICTION CRT
                                    where CRT.ID = @oldCOURSERESTRICTIONID

                                insert into COURSERESTRICTIONSTARTTERM
                                (
                                    ID,COURSERESTRICTIONID,
                                    STARTDATE,ENDDATE,
                                    ADDEDBYID,CHANGEDBYID,
                                    DATEADDED,DATECHANGED
                                )
                                select 
                                NEWID(),@newCOURSERESTRICTIONID,
                                TD.STARTDATE,TD.ENDDATE,
                                @CHANGEAGENTID,@CHANGEAGENTID,
                                @CURRENTDATE,@CURRENTDATE
                                from COURSERESTRICTION CR
                                inner join (select
                                            CRT.ID,TM.TERMNAMECODEID
                                            from COURSERESTRICTION CRT
                                            inner join COURSERESTRICTIONSTARTTERM CRST
                                                on CRT.ID = CRST.COURSERESTRICTIONID
                                            inner join TERM TM 
                                                on (CRST.STARTDATE = TM.STARTDATE 
                                                    and CRST.ENDDATE = TM.ENDDATE)    
                                                and TM.SESSIONID = @OLDSESSIONID
                                            inner join COURSE CR 
                                                on (CRT.COURSEID = CR.ID)
                                            where CR.SCHOOLID = @SCHOOLID
                                            and CR.ISINACTIVE = 0) OLD_CR
                                    on CR.ID = OLD_CR.ID
                                inner join @TERM_DATES TD
                                    on TD.TERMNAMECODEID = OLD_CR.TERMNAMECODEID    
                                where OLD_CR.ID = @oldCOURSERESTRICTIONID                                                    


                            set @child_ROW = @child_ROW + 1
                            end --COURSERESTRICTION/STARTERM


                        end --Course restrictions copy 


                        if @COPYCOURSEGRADING = 1
                        begin

                            declare @CGRADING table
                            (
                                ROWNUMBER int identity(1,1),
                                CGRADINGID uniqueidentifier
                            )
                            declare @oldCOURSEGRADINGID uniqueidentifier
                            declare @newCOURSEGRADINGID uniqueidentifier

                            delete from @CGRADING

                            insert into @CGRADING(CGRADINGID)
                            select CG.ID from COURSEGRADING CG
                            inner join COURSE CR on CG.COURSEID = CR.ID
                            where (CG.STARTDATE = @SESSION_oldSTARTDATE AND CG.ENDDATE = @SESSION_oldENDDATE)
                                and CR.ISINACTIVE = 0
                                and CR.SCHOOLID = @SCHOOLID

                            select @child_ROW=MIN(ROWNUMBER),@child_COUNT=MAX(ROWNUMBER)
                            from @CGRADING

                            while @child_ROW <= @child_COUNT
                            begin

                                select 
                                    @oldCOURSEGRADINGID=CG.CGRADINGID,
                                    @newCOURSEGRADINGID = NEWID()
                                from @CGRADING CG where CG.ROWNUMBER = @child_ROW

                                insert into COURSEGRADING
                                (
                                    ID,COURSEID,
                                    ADDEDBYID,CHANGEDBYID,
                                    DATEADDED,DATECHANGED,
                                    STARTDATE,ENDDATE
                                )

                                select 
                                @newCOURSEGRADINGID,CG.COURSEID,
                                @CHANGEAGENTID,@CHANGEAGENTID,
                                @CURRENTDATE,@CURRENTDATE,
                                @SESSION_newSTARTDATE,@SESSION_newENDDATE
                                from COURSEGRADING CG
                                where CG.ID = @oldCOURSEGRADINGID
                                and (CG.STARTDATE = @SESSION_oldSTARTDATE 
                                    and CG.ENDDATE = @SESSION_oldENDDATE)

                                insert into COURSEGRADINGMARKINGCOLUMN
                                (
                                    ID,COURSEGRADINGID,MARKINGCOLUMNID,GRADED,
                                    TRANSLATIONTABLEID,VALUESALLOWEDCODE,
                                    ADDEDBYID,CHANGEDBYID,
                                    DATEADDED,DATECHANGED
                                )
                                select NEWID(),@newCOURSEGRADINGID,CGM.MARKINGCOLUMNID, CGM.GRADED,
                                CGM.TRANSLATIONTABLEID,CGM.VALUESALLOWEDCODE,
                                @CHANGEAGENTID,@CHANGEAGENTID,
                                @CURRENTDATE,@CURRENTDATE
                                from COURSEGRADINGMARKINGCOLUMN CGM
                                where CGM.COURSEGRADINGID = @oldCOURSEGRADINGID    

                                set @child_ROW = @child_ROW + 1
                            end --COURSEGRADING LOOP


                        end --Course grading copy


                        set @session_row = @session_row + 1
                    end -- end of session loop                


                    -- Since we copy all Billing items not limited to a certain school

                    -- this copy is outside the session loop


                if @COPYBILLINGITEMCOSTHISTORY = 1
                    begin
                        declare @oldBILLINGITEMID uniqueidentifier
                        declare @newBILLINGITEMDATESID uniqueidentifier
                        declare @oldBILLINGITEMDATESID uniqueidentifier
                        declare @oldBILLINGSTARTDATE date
                        declare @oldBILLINGENDDATE date


                        declare @BILLINGITEMCOPY table
                        (
                            OLDBILLINGITEMID uniqueidentifier 
                        )

                        declare @BILLINGITEMDATESCOPY table
                        (
                            ROWNUMBER int identity(1,1),
                            OLDBILLINGITEMDATESID uniqueidentifier 
                        )                            

                        delete from @BILLINGITEMCOPY
                        delete from @BILLINGITEMDATESCOPY

                        select
                            @oldBILLINGSTARTDATE=AY.BILLINGSTARTDATE,
                            @oldBILLINGENDDATE=AY.BILLINGENDDATE
                        from ACADEMICYEAR AY
                        where AY.ID = @ACADEMICYEARID

                        -- Copy only Academic year items

                        insert into @BILLINGITEMCOPY(OLDBILLINGITEMID)
                        select DISTINCT BI.ID
                        from BILLINGITEM BI
                        left join BILLINGITEMPRICE BIP
                            on BIP.BILLINGITEMID = BI.ID
                        left join BILLINGITEMDATES BID
                            on BID.BILLINGITEMID = BI.ID                                    
                        where BI.ISINACTIVE = 0 
                             and (BID.DATERANGETYPECODE = 2 or BIP.DATERANGETYPECODE = 2)


                        -- 1. Copy BILLINGITEMPRICE

                        insert into BILLINGITEMPRICE
                        (
                            ID,BILLINGITEMID,
                            STARTDATE,ENDDATE,
                            ADDEDBYID,CHANGEDBYID,
                            DATEADDED,DATECHANGED,
                            PRICE,DATERANGETYPECODE
                        )
                        select 
                            NEWID(),BIC.OLDBILLINGITEMID,
                            @BILLINGSTARTDATE,@BILLINGENDDATE,
                            @CHANGEAGENTID,@CHANGEAGENTID,
                            @CURRENTDATE,@CURRENTDATE,
                            BIP.PRICE,BIP.DATERANGETYPECODE
                        from BILLINGITEMPRICE BIP
                        inner join @BILLINGITEMCOPY BIC
                            on BIP.BILLINGITEMID = BIC.OLDBILLINGITEMID
                        where (BIP.STARTDATE = @oldBILLINGSTARTDATE and BIP.ENDDATE = @oldBILLINGENDDATE)                                


                        insert into @BILLINGITEMDATESCOPY(OLDBILLINGITEMDATESID)
                        select DISTINCT BID.ID
                        from BILLINGITEMDATES BID
                        inner join BILLINGITEM BI
                            on BID.BILLINGITEMID = BI.ID
                        where (BID.STARTDATE = @oldBILLINGSTARTDATE and BID.ENDDATE = @oldBILLINGENDDATE)
                            and (BID.STARTDATE <> @BILLINGSTARTDATE and BID.ENDDATE <> @BILLINGENDDATE)
                            and BID.DATERANGETYPECODE = 2 and BI.ISINACTIVE = 0


                         select @child_ROW=MIN(ROWNUMBER),@child_COUNT=MAX(ROWNUMBER)
                         from @BILLINGITEMDATESCOPY

                        while @child_ROW<=@child_COUNT
                        begin

                            set @newBILLINGITEMDATESID = NEWID()

                            select @oldBILLINGITEMDATESID = BIPC.OLDBILLINGITEMDATESID
                            from @BILLINGITEMDATESCOPY BIPC
                            where BIPC.ROWNUMBER = @child_ROW

                            -- 3. Copy BILLINGITEMDATES

                            insert into BILLINGITEMDATES
                            ( 
                                ID,BILLINGITEMID,
                                STARTDATE,ENDDATE,
                                ADDEDBYID,CHANGEDBYID,
                                DATEADDED,DATECHANGED,
                                DATERANGETYPECODE
                            )
                            select
                            @newBILLINGITEMDATESID,BID.BILLINGITEMID,
                            @BILLINGSTARTDATE,@BILLINGENDDATE,
                            @CHANGEAGENTID,@CHANGEAGENTID,
                            @CURRENTDATE,@CURRENTDATE,BID.DATERANGETYPECODE
                            from BILLINGITEMDATES BID
                                INNER JOIN @BILLINGITEMDATESCOPY BIDC
                                    ON BID.ID = BIDC.OLDBILLINGITEMDATESID
                            where BIDC.OLDBILLINGITEMDATESID = @oldBILLINGITEMDATESID


                            -- 4. Copy BILLINGITEMPRICEBYGRADELEVEL

                            insert into BILLINGITEMPRICEBYGRADELEVEL
                            (
                                ID,BILLINGITEMDATESID,GRADELEVELID,PRICE,
                                DATEADDED,DATECHANGED,
                                ADDEDBYID,CHANGEDBYID
                            )    
                            select
                                NEWID(),@newBILLINGITEMDATESID,
                                BIPG.GRADELEVELID,BIPG.PRICE,
                                @CURRENTDATE,@CURRENTDATE,
                                @CHANGEAGENTID,@CHANGEAGENTID
                            from BILLINGITEMPRICEBYGRADELEVEL BIPG
                                inner join BILLINGITEMDATES BID
                                    on BIPG.BILLINGITEMDATESID = BID.ID
                                inner join @BILLINGITEMDATESCOPY BIDC
                                    on BID.ID = BIDC.OLDBILLINGITEMDATESID
                            where BIDC.OLDBILLINGITEMDATESID = @oldBILLINGITEMDATESID


                            -- 5. Copy BILLINGITEMPRICEBYSCHOOL    

                            insert into BILLINGITEMPRICEBYSCHOOL
                            (
                                ID,BILLINGITEMDATESID,SCHOOLID,PRICE,
                                DATEADDED,DATECHANGED,
                                ADDEDBYID,CHANGEDBYID
                            )
                            select
                                NEWID(),@newBILLINGITEMDATESID,
                                BIPS.SCHOOLID,BIPS.PRICE,
                                @CURRENTDATE,@CURRENTDATE,
                                @CHANGEAGENTID,@CHANGEAGENTID
                            from BILLINGITEMPRICEBYSCHOOL BIPS
                                inner join BILLINGITEMDATES BID
                                    on BIPS.BILLINGITEMDATESID = BID.ID
                                inner join @BILLINGITEMDATESCOPY BIDC
                                    on BID.ID = BIDC.OLDBILLINGITEMDATESID
                            where BIDC.OLDBILLINGITEMDATESID = @oldBILLINGITEMDATESID                                

                            set @child_ROW = @child_ROW + 1 ;
                        end

                    end ; -- COPY BILLING ITEMS                    

            end ; -- Copy not Create


            return 0 ;
        end ;