UFN_TERM_OVERLAP

Check to see if dates overlap an existing term for a session or dates of other sessions.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@SESSIONID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@WITHINSESSION bit IN

Definition

Copy


            CREATE function dbo.UFN_TERM_OVERLAP
            (
              @ID uniqueidentifier,
              @SESSIONID uniqueidentifier,
              @STARTDATE datetime,
              @ENDDATE datetime,
              @WITHINSESSION bit
            )
            returns BIT
            as begin
                declare @RETVAL bit = 0

                -- Make sure the data is OK...    

                if (@STARTDATE > @ENDDATE)
                begin
                    declare @DATESWAP datetime;
                    set @DATESWAP = @ENDDATE;
                    set @ENDDATE = @STARTDATE;
                    set @STARTDATE = @DATESWAP;
                end

                if (@WITHINSESSION = 1
                    begin                     
                    if exists(
                        (select 
                            TERM.ID 
                        from 
                            dbo.TERM
                        inner join 
                            dbo.SESSION on TERM.SESSIONID = SESSION.ID
                        where (TERM.ID <> @ID) and 
                              (TERM.SESSIONID = @SESSIONID) and
                              (SESSION.ACADEMICYEARID = (select ACADEMICYEARID from dbo.SESSION where ID = @SESSIONID)) and                            
                              ((TERM.STARTDATE between @STARTDATE and @ENDDATE) or 
                                (TERM.ENDDATE between @STARTDATE and @ENDDATE) or
                                ((TERM.STARTDATE <= @STARTDATE) and (TERM.ENDDATE >= @ENDDATE))
                                )))
                        set @RETVAL = 1;
                    end                    
                else 
                    -- check if the dates overlap other session dates, or will result in a session that overlaps other session dates.

                    begin
                        select @STARTDATE = coalesce(STARTDATE, @STARTDATE) from dbo.UFN_SESSION_GETDATES(@SESSIONID) where STARTDATE < @STARTDATE                 
                        select @ENDDATE = coalesce(ENDDATE, @ENDDATE) from dbo.UFN_SESSION_GETDATES(@SESSIONID) where ENDDATE > @ENDDATE                 
                        if exists(
                            (select 
                                SESSION.ID 
                            from 
                                dbo.TERM
                            inner join 
                                dbo.SESSION on TERM.SESSIONID = SESSION.ID
                            where ((TERM.ID <> @ID) or (@ID is null)) and 
                                  (TERM.SESSIONID <> @SESSIONID) and
                                  (SESSION.ACADEMICYEARID = (select ACADEMICYEARID from dbo.SESSION where ID = @SESSIONID))
                            group by SESSION.ID
                            having                            
                                  ((min(TERM.STARTDATE) between @STARTDATE and @ENDDATE) or 
                                    (max(TERM.ENDDATE) between @STARTDATE and @ENDDATE) or
                                    ((min(TERM.STARTDATE) <= @STARTDATE) and (max(TERM.ENDDATE) >= @ENDDATE)))))
                            set @RETVAL = 1;
                    end

                return @RETVAL;
            end