USP_SCHEDULEDATE_ADJUSTENTRIES
Adjust schedule dates.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@TERMID | uniqueidentifier | IN | |
@STARTDATE | date | IN | |
@ENDDATE | date | IN | |
@TIMETABLEDAYID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE PROCEDURE [dbo].[USP_SCHEDULEDATE_ADJUSTENTRIES]
(
@TERMID uniqueidentifier,
@STARTDATE date = null, -- date to generate from
@ENDDATE date = null, -- date to generate to
@TIMETABLEDAYID uniqueidentifier = null, -- used to adjust the cycle day
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null
)
as
set nocount on
if @CHANGEAGENTID is null
exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
if @CHANGEDATE is null
set @CHANGEDATE = getdate()
if @STARTDATE is null
select @STARTDATE = STARTDATE from TERM where TERM.ID = @TERMID
if @ENDDATE is null
select @ENDDATE = ENDDATE from TERM where TERM.ID = @TERMID
declare @SCHOOLID uniqueidentifier
select
@SCHOOLID = ACADEMICYEAR.SCHOOLID
from
TERM
inner join SESSION
on SESSION.ID = TERM.SESSIONID
inner join ACADEMICYEAR
on ACADEMICYEAR.ID = SESSION.ACADEMICYEARID
where TERM.ID = @TERMID
-- remove invalid dates and adjustments
exec dbo.USP_SCHEDULEDATE_CLEANUP @CHANGEAGENTID
-- generate calendar entries
-- recreate all base date entries forward from start date and adjust below
-- this creates some overhead by recreating dates multiple times for each adjustment
-- but greatly simplifies the process
exec dbo.USP_SCHEDULEDATE_GENERATEENTRIES @TERMID, @STARTDATE, null, null, @CHANGEAGENTID
declare @TempTbl table (
ROWID int identity(1,1),
DATE date,
ADJUSTEDTIMETABLEDAYID uniqueidentifier,
NEXTTIMETABLEDAYID uniqueidentifier)
insert into @TempTbl (DATE, ADJUSTEDTIMETABLEDAYID, NEXTTIMETABLEDAYID)
select DATE, ADJUSTEDTIMETABLEDAYID, NEXTTIMETABLEDAYID
from
SCHEDULEDATEADJUSTMENT
where SCHOOLID = @SCHOOLID
AND DATE >= @STARTDATE and DATE <= @ENDDATE
order by DATE
declare @rowId int, @maxRowId int
declare @DATE date
declare @ADJUSTEDTIMETABLEDAYID uniqueidentifier
declare @NEXTTIMETABLEDAYID uniqueidentifier
declare @NEXTDATE date
select
@rowId = min(ROWID),
@MaxRowId = max(ROWID)
from @TempTbl
while @rowId <= @maxRowId
begin
select
@DATE = DATE,
@ADJUSTEDTIMETABLEDAYID = ADJUSTEDTIMETABLEDAYID,
@NEXTTIMETABLEDAYID = NEXTTIMETABLEDAYID
from
@TempTbl
where
ROWID = @rowId
if @ADJUSTEDTIMETABLEDAYID is null
begin
update SCHEDULEDATE set INSESSION = 0, TIMETABLEDAYID = null where DATE = @DATE and SCHOOLID = @SCHOOLID
set @NEXTDATE = dbo.UFN_SCHEDULEDATE_GETNEXTDATEINSESSION (@DATE, @SCHOOLID)
if not @NEXTDATE is null
exec dbo.USP_SCHEDULEDATE_GENERATEENTRIES @TERMID, @NEXTDATE, null, @NEXTTIMETABLEDAYID, @CHANGEAGENTID
end
else
exec dbo.USP_SCHEDULEDATE_GENERATEENTRIES @TERMID, @DATE, null, @ADJUSTEDTIMETABLEDAYID, @CHANGEAGENTID
set @rowId = @rowId + 1
end
return 0