UFN_STUDENTSCHEDULE_TRANSFORM_COURSETERMS_TO_COURSEREQUESTS
Transform a course terms xml block to course requests.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@SESSIONID | uniqueidentifier | IN | |
@COURSETERMS | xml | IN |
Definition
Copy
CREATE function dbo.UFN_STUDENTSCHEDULE_TRANSFORM_COURSETERMS_TO_COURSEREQUESTS
(
@ID uniqueidentifier = null, --STUDENTID
@SESSIONID uniqueidentifier = null,
@COURSETERMS xml = null
)
returns @RESULTS TABLE
(
[ID] uniqueidentifier,
[COURSEID] uniqueidentifier,
[STARTTERMID] uniqueidentifier
)
as begin
declare @COURSEREQUESTS xml
declare @SESSION_STARTDATE date
declare @SESSION_ENDDATE date
select
@SESSION_STARTDATE = min(STARTDATE),
@SESSION_ENDDATE = max(ENDDATE)
from dbo.TERM
where TERM.SESSIONID = @SESSIONID
insert into @RESULTS
select
T.ID,
T.COURSEID,
T.TERMID as STARTTERMID
from
(
select
COURSETERMS.ID,
COURSETERMS.COURSEID,
case when STUDENTCOURSEREQUEST.ID is not null and STUDENTCOURSEREQUEST.CLASSSTARTDATE is null or
(COURSETERMS.TERMCOUNT > COURSERESTRICTION.LENGTHINTERMS)
then null
else TERM.ID
end as TERMID,
row_number() over (partition by COURSETERMS.ID, COURSETERMS.COURSEID order by TERM.STARTDATE) as ROW
from (select
T.c.value('(ID)[1]','uniqueidentifier') AS [ID],
T.c.value('(COURSEID)[1]','uniqueidentifier') AS [COURSEID],
T.c.value('(CLASSID)[1]','uniqueidentifier') AS [CLASSID],
T.c.value('(TERMID)[1]','uniqueidentifier') AS [TERMID],
count(T.c.value('(TERMID)[1]','uniqueidentifier')) over (partition by T.c.value('(ID)[1]','uniqueidentifier')) as TERMCOUNT
from @COURSETERMS.nodes('/COURSETERMS/ITEM') T(c)
) as COURSETERMS
left join dbo.STUDENTCOURSEREQUEST on COURSETERMS.ID = STUDENTCOURSEREQUEST.ID
inner join dbo.COURSE on COURSETERMS.COURSEID = COURSE.ID
inner join dbo.V_COURSERESTRICTION COURSERESTRICTION on COURSETERMS.COURSEID = COURSERESTRICTION.COURSEID
inner join dbo.COURSERESTRICTIONSTARTTERM on COURSERESTRICTION.ID = COURSERESTRICTIONSTARTTERM.COURSERESTRICTIONID
inner join dbo.TERM on
TERM.STARTDATE = COURSERESTRICTIONSTARTTERM.STARTDATE and
TERM.ENDDATE = COURSERESTRICTIONSTARTTERM.ENDDATE and
TERM.SESSIONID = @SESSIONID and
TERM.ID = COURSETERMS.TERMID
) T
where T.ROW = 1
return
end