USP_DATAFORMTEMPLATE_ADD_COPYPREVIOUS
The save procedure used by the add dataform template "Copy previous scheduling information".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@ACADEMICYEARID | uniqueidentifier | IN | Academic year |
@SESSIONID | uniqueidentifier | IN | Session |
@COPY_TEACHERS | bit | IN | Teachers |
@COPY_MEETINGS | bit | IN | Meetings |
@DELETE_CLASSES | bit | IN | Delete any existing classes |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_COPYPREVIOUS
(
@ID uniqueidentifier = null output,
@CURRENTAPPUSERID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@ACADEMICYEARID uniqueidentifier = null,
@SESSIONID uniqueidentifier = null,
@COPY_TEACHERS bit = null,
@COPY_MEETINGS bit = null,
@DELETE_CLASSES bit = null
)
AS
set NOCOUNT on;
if @CHANGEAGENTID is null
exec DBO.USP_CHANGEAGENT_GETORCREATECHANGEAGENT
@CHANGEAGENTID output
declare @CURRENTDATE datetime
declare @SESSIONID_COPYFROM uniqueidentifier
declare @SESSIONID_COPYTO uniqueidentifier
declare @ACADEMICYEARID_COPYTO uniqueidentifier
declare @ACADEMICYEARID_COPYFROM uniqueidentifier
declare @TT1 uniqueidentifier
declare @TT2 uniqueidentifier
declare @SCHOOLID uniqueidentifier
declare @STUDENTCOUNT int
set @CURRENTDATE = GETDATE()
set @SESSIONID_COPYFROM = @SESSIONID
set @ACADEMICYEARID_COPYFROM = @ACADEMICYEARID
select @SCHOOLID = AY.SCHOOLID
from ACADEMICYEAR AY
where AY.ID = @ACADEMICYEARID_COPYFROM
select
@SESSIONID_COPYTO = AU.SESSIONID,
@TT1 = SS1.TIMETABLEID,
@TT2 = SS2.TIMETABLEID,
@ACADEMICYEARID_COPYTO = SS1.ACADEMICYEARID
from APPUSERSESSION AU
inner join SESSION SS1
on SS1.ID = AU.SESSIONID
left join SESSION SS2
on SS2.ID = @SESSIONID_COPYFROM
where AU.ID = @CURRENTAPPUSERID
if @TT1 <> @TT2
begin
raiserror ('BBERR_SESSION_HAS_DIFFERENT_TIMETABLE',13,1);
return 1;
end
declare @CLASSCOUNT as int
exec USP_DATAFORMTEMPLATE_VIEW_COPYPREVIOUS_CLASSCOUNT
@SESSIONID_COPYFROM ,
null ,
@CLASSCOUNT output
if @CLASSCOUNT = 0
begin
raiserror ('BBERR_SESSION_HAS_NO_CLASSES',13,1);
return 1;
end ;
exec USP_DATAFORMTEMPLATE_VIEW_COPYPREVIOUS_CLASSCOUNT
@SESSIONID_COPYTO , null , @CLASSCOUNT output
if @CLASSCOUNT > 0 and @DELETE_CLASSES = 0
begin
raiserror ('BBERR_TO_SESSION_HAS_CLASSES',13,1);
return 1;
end ;
select
@STUDENTCOUNT = COUNT(SMG.ID)
from COURSE CR
inner join CLASS CL on CL.COURSEID = CR.ID
inner join CLASSMEETINGGROUP CMG on CMG.CLASSID = CL.ID
inner join STUDENTCLASSMEETINGGROUP SMG on SMG.CLASSMEETINGGROUPID = CMG.ID
inner join TERM TM on (CMG.STARTDATE = TM.STARTDATE) and (CMG.ENDDATE = TM.ENDDATE)
where CR.SCHOOLID = @SCHOOLID and TM.SESSIONID = @SESSIONID_COPYTO
if @STUDENTCOUNT > 0
begin
raiserror ('BBERR_TO_SESSION_HAS_ENROLLED_STUDENTS',13,1);
return 1 ;
end ;
declare @TERMS_MATCH bit
exec USP_SESSION_TERM_COMPARE
@SESSIONID_COPYTO ,
@SESSIONID_COPYFROM ,
@TERMS_MATCH output
if @TERMS_MATCH = 0
begin
raiserror ('BBERR_SESSION_TERMS_NO_MATCH',13,1);
return 1 ;
end ;
if @DELETE_CLASSES = 1
begin
delete from dbo.CLASS
from dbo.CLASS
inner join dbo.COURSE on CLASS.COURSEID = COURSE.ID
inner join dbo.UFN_SESSION_GETDATES(@SESSIONID_COPYTO) as SESSION_DATES
on SESSION_DATES.STARTDATE <= CLASS.STARTDATE
and SESSION_DATES.ENDDATE >= CLASS.ENDDATE
where COURSE.SCHOOLID = @SCHOOLID
end ;
declare @CREATEMEETINGS table
(
NEW_CLASSID uniqueidentifier,
ROWNUMBER int
)
declare @CLASSTOCOPY table
(
CLASSID uniqueidentifier,
CLASSMEETINGGROUPID uniqueidentifier,
ROWNUMBER int,
COPYFROM_SESSIONID uniqueidentifier,
COPYFROM_TERMID uniqueidentifier,
COPYFROM_TERMNAMECODEID uniqueidentifier,
SECTION nvarchar(20),
COURSEID uniqueidentifier,
PATTERNBLOCKID uniqueidentifier,
FACULTYID uniqueidentifier,
COPIED bit
)
insert into @CLASSTOCOPY
select
CL.ID CLASSID,
CMG.ID CLASSMEETINGGROUPID,
ROW_NUMBER() over(order by SS.ID asc) ROWNUMBER,
SS.ID COPYFROM_SESSIONID,
TM.ID COPYFROM_TERMID,
TM.TERMNAMECODEID COPYFROM_TERMNAMECODEID,
CL.SECTION SECTION,
CL.COURSEID COURSEID,
CMG.PATTERNBLOCKID,
FC.FACULTYID FACULTYID,
0
from COURSE CR
inner join COURSERESTRICTION CRT
on CRT.COURSEID = CR.ID
inner join CLASS CL
on CL.COURSEID = CR.ID
inner join CLASSMEETINGGROUP CMG
on CMG.CLASSID = CL.ID
inner join TERM TM
on (TM.STARTDATE = CMG.STARTDATE AND CL.STARTDATE = TM.STARTDATE)
inner join UFN_SESSION_GETDATES (@SESSIONID_COPYFROM) SSD
ON (CL.STARTDATE >= SSD.STARTDATE AND CL.ENDDATE <= SSD.ENDDATE )
inner join SESSION SS
on SS.ID = TM.SESSIONID
inner join ACADEMICYEAR AY
on AY.ID = SS.ACADEMICYEARID
left join FACULTYCLASSMEETINGGROUP FCMG
on FCMG.CLASSMEETINGGROUPID = CMG.ID
left join FACULTYCOURSE FC
on FCMG.FACULTYCOURSEID = FC.ID
where (CRT.STARTDATE <= CL.STARTDATE
and CRT.ENDDATE >= CL.ENDDATE)
and SS.ID = @SESSIONID_COPYFROM
and CR.SCHOOLID = AY.SCHOOLID
---LOOP THROUGH THE @CLASSTOCOPY
---RUN THROUGH DIFFERENT VALIDATIONS AND REMOVE OFFENDING ROWS
---WHAT IS LEFT, USE USP_DATAFORMTEMPLATE_ADD_CLASS TO ADD THE CLASS ONLY
declare @MAXROWID int
declare @CURRENT_CLASSID uniqueidentifier
declare @ROWNUMBER int
declare @COPYFROM_TERMNAMECODEID uniqueidentifier
declare @COPYTO_TERMID uniqueidentifier
declare @SECTION nvarchar(20)
declare @COURSEID uniqueidentifier
declare @PATTERNBLOCKID uniqueidentifier
declare @FACULTYID uniqueidentifier
declare @TEMP1 int
declare @TEMP2 int
declare @SESSION_STARTDATE date
declare @SESSION_ENDDATE date
declare @COURSENAME nvarchar(100)
declare @LENGTHINTERMS int
declare @START_DATETIME datetime
declare @END_DATETIME datetime
declare @COURSE_SKIPPED bit
declare @NEW_CLASSID uniqueidentifier
declare @NEW_CLASSMEETINGGROUPID uniqueidentifier
declare @OLD_CLASSMEETINGGROUPID uniqueidentifier
select
@ROWNUMBER = min(ROWNUMBER),
@MAXROWID = max(ROWNUMBER)
from @CLASSTOCOPY
declare @COURSES_SKIPPED table
(
COURSEID uniqueidentifier,
TERMNAMECODEID uniqueidentifier,
SKIPPED bit
)
select @SESSION_STARTDATE = STARTDATE,
@SESSION_ENDDATE = ENDDATE
from UFN_SESSION_GETDATES (@SESSIONID_COPYTO)
begin try
while @ROWNUMBER <= @MAXROWID
begin
select
@CURRENT_CLASSID = CP.CLASSID,
@OLD_CLASSMEETINGGROUPID = CP.CLASSMEETINGGROUPID,
@COPYFROM_TERMNAMECODEID = CP.COPYFROM_TERMNAMECODEID,
@PATTERNBLOCKID = CP.PATTERNBLOCKID,
@COURSEID = CP.COURSEID,
@SECTION = CP.SECTION,
@FACULTYID = CP.FACULTYID,
@COURSE_SKIPPED = 0
from @CLASSTOCOPY CP
where CP.ROWNUMBER = @ROWNUMBER
if not exists (select *
from @COURSES_SKIPPED IC
where IC.COURSEID = @COURSEID and IC.TERMNAMECODEID = @COPYFROM_TERMNAMECODEID)
begin
insert into @COURSES_SKIPPED values (@COURSEID,@COPYFROM_TERMNAMECODEID, 0)
end ;
select
@COURSE_SKIPPED = IC.SKIPPED
from @COURSES_SKIPPED IC
where IC.COURSEID = @COURSEID and IC.TERMNAMECODEID = @COPYFROM_TERMNAMECODEID
if @COURSE_SKIPPED = 1
begin
goto NEXT_ROW
end;
set @COURSE_SKIPPED = 1
---THIS VALIDATION CHECKS if THE COURSE BEING COPIED TO HAS THE SAME
-- LENGTH IN TERMS AS ONE BEING COPIED FROM.
select
@TEMP1 = LENGTHINTERMS
from COURSERESTRICTION CRC
inner join COURSE CR
on CR.ID = CRC.COURSEID
inner join ACADEMICYEAR AY
on AY.ID = @ACADEMICYEARID_COPYFROM
where CR.ID = @COURSEID
and CRC.STARTDATE >= AY.STARTDATE
and CRC.ENDDATE <= AY.ENDDATE
select
@TEMP2 = LENGTHINTERMS
from COURSERESTRICTION CRC
inner join COURSE CR
on CR.ID = CRC.COURSEID
inner join ACADEMICYEAR AY
on AY.ID = @ACADEMICYEARID_COPYTO
where CR.ID = @COURSEID
and CRC.STARTDATE >= AY.STARTDATE
and CRC.ENDDATE <= AY.ENDDATE
if @TEMP1 <> @TEMP2
begin
goto NEXT_ROW --TERMS DIFFERENT, HOP TO THE NEXT ROW
end
--CHECKING if COURSE RESTRICTIONS EXISTS...
select
@COURSENAME = COURSE.NAME,
@LENGTHINTERMS = COURSERESTRICTION.LENGTHINTERMS
from DBO.COURSE
inner join DBO.V_COURSERESTRICTION as COURSERESTRICTION
on COURSE.ID = COURSERESTRICTION.COURSEID
where COURSE.ID = @COURSEID
and COURSERESTRICTION.STARTDATE = @SESSION_STARTDATE
and COURSERESTRICTION.ENDDATE = @SESSION_ENDDATE
if @COURSENAME is null
begin
goto NEXT_ROW
end ;
--CHECK if START TERMS OF BOTH SESSIONS FOR THE COURSE MATCH, if IT DOESNT MATCH GO TO THE NEXT COURSE
exec USP_COURSERESTRICTION_TERM_COMPARE
@SESSIONID_COPYTO ,
@SESSIONID_COPYFROM ,
@COURSEID ,
@COPYFROM_TERMNAMECODEID,
@TERMS_MATCH output
if @TERMS_MATCH = 0
begin
goto NEXT_ROW
end
select
@COPYTO_TERMID = UFT.ID
from UFN_SESSION_GETTERMS (@SESSIONID_COPYTO ) UFT
where UFT.TERMNAMECODEID = @COPYFROM_TERMNAMECODEID
select
@START_DATETIME = STARTDATE
from DBO.TERM
where ID = @COPYTO_TERMID
select
@END_DATETIME = T.ENDDATE
from (select
ENDDATE,
ROW_NUMBER()
over(order by STARTDATE asc) as TERMNUMBER
from DBO.TERM
where SESSIONID = @SESSIONID_COPYTO
and STARTDATE >= @START_DATETIME) T
where T.TERMNUMBER = @LENGTHINTERMS
--INSERT THE ROW INTO CLASS AND CLASSMEETINGGROUP
--GET THE NEW CLASS ID
set @NEW_CLASSID = NEWID()
insert into DBO.CLASS
(ID,
COURSEID,
NAME,
SECTION,
CLASSSIZEMINIMUM,
CLASSSIZETARGET,
CLASSSIZEMAXIMUM,
CLASSESPERTERMMINIMUM,
CLASSESPERTERMTARGET,
CLASSESPERTERMMAXIMUM,
STARTDATE,
ENDDATE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
select
@NEW_CLASSID,
@COURSEID,
@COURSENAME,
@SECTION,
CLASSSIZEMINIMUM,
CLASSSIZETARGET,
CLASSSIZEMAXIMUM,
CLASSESPERTERMMINIMUM,
CLASSESPERTERMTARGET,
CLASSESPERTERMMAXIMUM,
@START_DATETIME,
@END_DATETIME,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from DBO.COURSE
where COURSE.ID = @COURSEID
--Do we need to copy PATTERNBLOCKID ?
--1. If Year1 has a certain Pattern associated with the restriction,
-- Meetings in Year2 will get the same Pattern.
--2. If Year1 has no pattern associated with the restriction,
-- Meetings in Year2 will have no Pattern information.
--3. If Year 1 has a certain Pattern associated with the restriction
-- but Year 2 has a different pattern or no pattern,
-- Meetings in Year 2 will not have pattern association.
--@PATTERNBLOCKID has the "From" Year ID
--Get the "To" year Patternblock ID
declare @IsValidPattern int
select @IsValidPattern = COUNT(PB.PATTERNID)
from COURSERESTRICTION CRT
inner join dbo.UFN_SESSION_GETDATES(@SESSIONID_COPYTO) as SESSION_DATES
ON CRT.STARTDATE = SESSION_DATES.STARTDATE and CRT.ENDDATE = SESSION_DATES.ENDDATE
inner join dbo.PATTERNBLOCK PB on PB.PATTERNID = CRT.PATTERNID
where CRT.COURSEID = @COURSEID AND PB.ID = @PATTERNBLOCKID
if @IsValidPattern = 0
begin
SET @PATTERNBLOCKID = NULL
end
insert into DBO.CLASSMEETINGGROUP
(ID,
CLASSID,
STARTDATE,
ENDDATE,
PATTERNBLOCKID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
select top ( @LENGTHINTERMS )
NEWID(),
@NEW_CLASSID,
STARTDATE,
ENDDATE,
@PATTERNBLOCKID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from DBO.TERM
where SESSIONID = @SESSIONID_COPYTO
and STARTDATE >= @START_DATETIME
order by TERM.STARTDATE
if @COPY_MEETINGS = 1
begin
insert into CLASSMEETINGTEMPLATE
(ID,
CLASSMEETINGGROUPID,
CYCLEDAYID,
STARTTIME,
ENDTIME,
TIMETABLEDAYPERIODID,
LENGTHINPERIODS,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
select
NEWID(),
CMG.ID,
CMT.CYCLEDAYID,
CMT.STARTTIME,
CMT.ENDTIME,
CMT.TIMETABLEDAYPERIODID,
CMT.LENGTHINPERIODS,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from CLASSMEETINGTEMPLATE CMT
inner join CLASSMEETINGGROUP CMG on CMG.CLASSID = @NEW_CLASSID
where CMT.CLASSMEETINGGROUPID = @OLD_CLASSMEETINGGROUPID
end
--LET'S ADD FACULTY NOW...
if (@FACULTYID is not null)
and (@COPY_TEACHERS = 1)
begin
declare @FACULTYCOURSEID uniqueidentifier
select
@FACULTYCOURSEID = ID
from DBO.FACULTYCOURSE
where FACULTYID = @FACULTYID
and COURSEID = @COURSEID
if @FACULTYCOURSEID is null
begin
set @FACULTYCOURSEID = NEWID()
insert into DBO.FACULTYCOURSE
(ID,
FACULTYID,
COURSEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
values (@FACULTYCOURSEID,
@FACULTYID,
@COURSEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE)
end
insert into DBO.FACULTYCLASSMEETINGGROUP
(ID,
FACULTYCOURSEID,
CLASSMEETINGGROUPID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
select
NEWID(),
@FACULTYCOURSEID,
CLASSMEETINGGROUP.ID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from DBO.CLASSMEETINGGROUP
where CLASSID = @NEW_CLASSID
end
set @COURSE_SKIPPED = 0
next_row:
if @COURSE_SKIPPED = 1
begin
update @COURSES_SKIPPED
set SKIPPED = 1
where COURSEID = @COURSEID and TERMNAMECODEID = @COPYFROM_TERMNAMECODEID
end
else
begin
update @CLASSTOCOPY
set COPIED = 1
where ROWNUMBER = @ROWNUMBER
if @COPY_MEETINGS = 1
begin
set @TEMP1 = 0
select @TEMP1 = count(* )
from @CLASSTOCOPY
where COPIED = 1
insert into @CREATEMEETINGS (NEW_CLASSID,ROWNUMBER)
values (@NEW_CLASSID, @TEMP1)
end
end;
set @ROWNUMBER = @ROWNUMBER + 1
end ---WHILE
--Now, for all the added classes let's add the meetings...
set @MAXROWID = -1
select
@ROWNUMBER = min(ROWNUMBER),
@MAXROWID = max(ROWNUMBER)
from @CREATEMEETINGS
while @ROWNUMBER <= @MAXROWID
begin
select
@NEW_CLASSID = CM.NEW_CLASSID
from @CREATEMEETINGS CM
where CM.ROWNUMBER = @ROWNUMBER
exec USP_CLASSMEETING_CREATEFROMTEMPLATES
@NEW_CLASSID ,
@CHANGEAGENTID
set @ROWNUMBER = @ROWNUMBER + 1
end -- 2nd WHILE
end try
begin catch
declare @sMsg nvarchar(255)
SELECT @sMsg = ERROR_MESSAGE() ;
begin
raiserror (@sMsg,13,1);
return 1;
end ;
end catch
return 0