USP_CLASSMEETINGTEMPLATE_MOVE_GETNEWPERIODVALUES

Used to return valid valid template data given loosely defined period parameters

Parameters

Parameter Parameter Type Mode Description
@CLASSID uniqueidentifier IN
@STARTTIME UDT_HOURMINUTE IN
@ENDTIME UDT_HOURMINUTE IN
@CYCLEDAYID uniqueidentifier IN
@TIMETABLEDAYPERIODID uniqueidentifier INOUT
@LENGTHINPERIODS int INOUT
@STARTTIME_NEW UDT_HOURMINUTE INOUT
@ENDTIME_NEW UDT_HOURMINUTE INOUT

Definition

Copy


CREATE procedure dbo.USP_CLASSMEETINGTEMPLATE_MOVE_GETNEWPERIODVALUES
(
    @CLASSID uniqueidentifier,
    @STARTTIME dbo.UDT_HOURMINUTE,
    @ENDTIME dbo.UDT_HOURMINUTE,
    @CYCLEDAYID uniqueidentifier,
    @TIMETABLEDAYPERIODID uniqueidentifier output,
    @LENGTHINPERIODS int output,
    @STARTTIME_NEW dbo.UDT_HOURMINUTE output,
    @ENDTIME_NEW dbo.UDT_HOURMINUTE output
)
as
begin
    set nocount on

    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate()

    declare @TIMETABLEID uniqueidentifier
    select @TIMETABLEID = (select TIMETABLE.ID
        from dbo.TIMETABLE
            inner join dbo.SESSION on TIMETABLE.ID = SESSION.TIMETABLEID
        where SESSION.ID = dbo.UFN_SESSION_GET_FORSCHOOL_BYDATE(COURSE.SCHOOLID, CLASS.STARTDATE, CLASS.ENDDATE))
    from dbo.CLASS 
        inner join dbo.COURSE on COURSE.ID = CLASS.COURSEID 
        where CLASS.ID = @CLASSID

    declare @TIMETABLEDAYID uniqueidentifier
    select @TIMETABLEDAYID = ID 
        from TIMETABLEDAY where CYCLEDAYID = @CYCLEDAYID and TIMETABLEID = @TIMETABLEID

    declare @TIMEDIFF int
    set @TIMEDIFF = (DATEDIFF(MINUTE, dbo.UFN_HOURMINUTE_DISPLAYTIME(@STARTTIME), dbo.UFN_HOURMINUTE_DISPLAYTIME(@ENDTIME)))

    select top 1 @TIMETABLEDAYPERIODID = ID, @STARTTIME_NEW = STARTTIME
        from dbo.UFN_TIMETABLEDAY_GETTIMETABLEDAYPERIODS(@TIMETABLEDAYID)
        order by ABS(DATEDIFF(MINUTE,
            cast(dbo.UFN_HOURMINUTE_DISPLAYTIME(STARTTIME) as time),
            cast(dbo.UFN_HOURMINUTE_DISPLAYTIME(@STARTTIME) as time)))

    select top 1 @ENDTIME_NEW = ENDTIME
        from dbo.UFN_TIMETABLEDAY_GETTIMETABLEDAYPERIODS(@TIMETABLEDAYID)
        where ENDTIME > @STARTTIME_NEW
        order by ABS(DATEDIFF(MINUTE,
            cast(dbo.UFN_HOURMINUTE_DISPLAYTIME(ENDTIME) as time),
            DATEADD(MINUTE,@TIMEDIFF,cast(dbo.UFN_HOURMINUTE_DISPLAYTIME(@STARTTIME_NEW) as time))))

    declare @Temp table(ID uniqueidentifier, STARTTIME dbo.UDT_HOURMINUTE, ENDTIME dbo.UDT_HOURMINUTE, ROWNUMBER int)
    insert into @Temp
    select
        ID,
        STARTTIME,
        ENDTIME,
        (ROW_NUMBER() over (order by STARTTIME)) 
    from dbo.UFN_TIMETABLEDAY_GETTIMETABLEDAYPERIODS(@TIMETABLEDAYID)

    select @LENGTHINPERIODS = ((select ROWNUMBER from @Temp where ENDTIME = @ENDTIME_NEW
                            - (select ROWNUMBER from @Temp where STARTTIME = @STARTTIME_NEW)) 
                            + 1
    return 0
end