USP_DATAFORMTEMPLATE_CLEAR_STUDENTSCHEDULES
The save procedure used by the add dataform template "Clear Student Schedules Data Form".
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. |
@STUDENTS | xml | IN | The following students will have their schedules cleared |
@SELECTIONID | uniqueidentifier | IN | Selection |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_CLEAR_STUDENTSCHEDULES
(
@ID uniqueidentifier = null output,
@CURRENTAPPUSERID uniqueidentifier = null,
@CHANGEAGENTID uniqueidentifier = null,
@STUDENTS xml = null,
@SELECTIONID uniqueidentifier = null
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
if @SELECTIONID = '00000000-0000-0000-0000-000000000000'
set @SELECTIONID = null
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
declare @SESSION_STARTDATE date
declare @SESSION_ENDDATE date
declare @SESSIONID uniqueidentifier
declare @SCHOOLID uniqueidentifier
select
@SESSION_STARTDATE = min(TERM.STARTDATE),
@SESSION_ENDDATE = max(TERM.ENDDATE),
@SESSIONID = SESSION.ID,
@SCHOOLID = ACADEMICYEAR.SCHOOLID
from dbo.TERM
inner join dbo.APPUSERSESSION on TERM.SESSIONID = APPUSERSESSION.SESSIONID
inner join dbo.SESSION on APPUSERSESSION.SESSIONID = SESSION.ID
inner join dbo.ACADEMICYEAR on SESSION.ACADEMICYEARID = ACADEMICYEAR.ID
where APPUSERSESSION.ID = @CURRENTAPPUSERID
group by APPUSERSESSION.ID, SESSION.ID, ACADEMICYEAR.SCHOOLID;
-- Because of a performance quirk in SQL, we must do the XML processing for this query independent of the main query.
declare @STUDENTLIST table (ID uniqueidentifier)
insert into @STUDENTLIST
select T.c.value('(ID)[1]','uniqueidentifier')
from @STUDENTS.nodes('/STUDENTS/ITEM') T(c)
where coalesce(T.c.value('(CLEAR)[1]','bit'), 0) <> 0
declare @TempTbl table (
[STUDENTCLASSMEETINGGROUPID] uniqueidentifier,
[STUDENTID] uniqueidentifier,
[CLEAR] bit,
[HASGRADES] bit)
insert into @TempTbl
select
[STUDENTCLASSMEETINGGROUP].ID as [STUDENTCLASSMEETINGGROUPID],
EDUCATIONALHISTORY.CONSTITUENTID as [STUDENTID],
case when STUDENTLIST.ID is null then 0 else 1 end as [CLEAR],
case when exists(
select STUDENTMARKINGCOLUMNGRADE.ID
from dbo.STUDENTCOURSE
inner join dbo.STUDENTCLASSMEETINGGROUP on STUDENTCOURSE.ID = STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID
inner join dbo.CLASSMEETINGGROUP on STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
inner join dbo.STUDENTMARKINGCOLUMNGRADE on STUDENTCLASSMEETINGGROUP.ID = STUDENTMARKINGCOLUMNGRADE.STUDENTCLASSMEETINGGROUPID
where STUDENTCOURSE.STUDENTID = EDUCATIONALHISTORY.CONSTITUENTID
and CLASSMEETINGGROUP.CLASSID = CLASS.ID)
then 1
else 0
end as [HASGRADES]
from dbo.EDUCATIONALHISTORY
inner join dbo.STUDENTPROGRESSION on EDUCATIONALHISTORY.ID = STUDENTPROGRESSION.ENROLLMENTID
and not (STUDENTPROGRESSION.ENDDATE < @SESSION_STARTDATE or STUDENTPROGRESSION.STARTDATE > @SESSION_ENDDATE)
inner join dbo.SCHOOLGRADELEVEL on STUDENTPROGRESSION.SCHOOLGRADELEVELID = SCHOOLGRADELEVEL.ID
and SCHOOLGRADELEVEL.SCHOOLID = @SCHOOLID
inner join dbo.STUDENTCOURSE on EDUCATIONALHISTORY.CONSTITUENTID = STUDENTCOURSE.STUDENTID
inner join dbo.STUDENTCLASSMEETINGGROUP on STUDENTCOURSE.ID = STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID
and STUDENTCLASSMEETINGGROUP.STATUSCODE in (0, 3)
inner join dbo.CLASSMEETINGGROUP on STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
inner join dbo.CLASS on CLASSMEETINGGROUP.CLASSID = CLASS.ID
and not (CLASS.ENDDATE < @SESSION_STARTDATE or CLASS.STARTDATE > @SESSION_ENDDATE)
left join @STUDENTLIST STUDENTLIST on EDUCATIONALHISTORY.CONSTITUENTID = STUDENTLIST.ID
where @SELECTIONID is null or EDUCATIONALHISTORY.CONSTITUENTID in (
select ID
from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@SELECTIONID)
)
if not exists(select 1 from @TempTbl STUDENTCLASSES where STUDENTCLASSES.CLEAR <> 0 and STUDENTCLASSES.HASGRADES = 0)
begin
raiserror('BBERR_CLEAR_STUDENTSCHEDULES_ATLEASTONESTUDENT', 13, 1)
return
end
declare @contextCache varbinary(128);
declare @e int;
-- cache current context information
set @contextCache = CONTEXT_INFO();
-- set CONTEXT_INFO to @CHANGEAGENTID
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
-- delete any items that no longer exist in the XML table
delete from dbo.[STUDENTCLASSMEETINGGROUP]
from dbo.STUDENTCLASSMEETINGGROUP
inner join @TempTbl STUDENTCLASSES on STUDENTCLASSMEETINGGROUP.ID = STUDENTCLASSES.STUDENTCLASSMEETINGGROUPID
where STUDENTCLASSES.CLEAR <> 0
and STUDENTCLASSES.HASGRADES = 0
and STUDENTCLASSMEETINGGROUP.STATUSCODE in (0, 3)
select @e=@@error;
-- reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
if @e <> 0
return 2;