<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/css" href="Release-Notes.css"?>
<!DOCTYPE release-history PUBLIC "-//UniTime//UniTime Release Notes DTD/EN" "Release-Notes.dtd">
<!-- 
 * UniTime 3.3 (University Timetabling Application)
 * Copyright (C) 2008 - 2012, UniTime LLC
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along
 * with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 -->

<release-history>

<doc-title>UniTime 3.3 Release Notes</doc-title>

<release>
	<version>3.3.187</version>
	<release-date>Thu, 24 May 2012</release-date>
	<category>
		<title>Event Management</title>
		<item>
			<name>Event Timetable</name>
			<description>
				<line>
					Personal Timetable: Administrators and schedule deputies can see instructor / student  class / examination schedules even when
					the session does not allow instructors / students to see their schedules (session status does not have the no-role reports flag(s) enabled).
				</line>
				<line>
					Event grid (all resources): When a range of two or more weeks is selected (but not All Weeks), display dates for events that do not meet every
					week in the range. This fixes the issue of not showing dates at all when there is a range of two or more weeks selected.
				</line>
			</description>
		</item>
	</category>
	<category>
		<title>Course Timetabling</title>
		<item>
			<name>Timetable Grid: class mouseover</name>
			<description>
				<line>Student Conflicts: also show committed, hard and distance student conflicts.</line>
			</description>
		</item>
	</category>
	<category>
		<title>Online Student Scheduling</title>
		<item>
			<name>Student Scheduling Assistant</name>
			<description>
				<line>Log in: when the page is opened and the user is not logged-in automatically popup the login dialog.
					<line>This behavior can be change in the student scheduling constants,
						together with the ability to disable guest access.</line>
				</line>
				<line>Log In: clear user name and password every time the authentication dialog is closed.</line>
			</description>
		</item>
		<item>
			<name>Student Scheduling Dashboard</name>
			<description>
				<line>Enrollments, Classes, Assistant dialogs: widths changed so that the dialog size better fits the content.</line>
			</description>
		</item>
		<item>
			<name>Student Scheduling Assistant: Reservations</name>
			<description>
				<line>When a reservation is created, updated, or deleted while the student assistant is enabled (locking is not required in this case), notify the online sectioning server about an offering change.</line>
			</description>
		</item>
		<item>
			<name>Find Assignment, Compute Suggestions</name>
			<description>
				<line>When reservations are changed so that a student that is already enrolled in the course would not be able to enroll anymore:
					<line>Ensure that the student will be able to remain in the course by creating a dummy reservation for the student and his/her current enrollment.</line>
					<line>Without this change, a student (that no longer meets the required reservations) would not be able to make any changes in his/her schedule without dropping from the problematic course.</line>
				</line>
			</description>
		</item>
		<item>
			<name>Online Student Sectioning Server Updater</name>
			<description>
				<line>Check for updates: failure of getting a hibernate session (e.g., due to a temporary database unavailability) should not make the updater thread to stop.</line>
			</description>
		</item>
	</category>
	<category>
		<title>Other</title>
		<item>
			<name>HQL Reports</name>
			<description>
				<line>Sorting by: When comparing two cells, if both cells are numbers then compare cells as numbers.</line>
				<line>Display XML columns (of org.dom4j.Document type) properly.</line>
			</description>
		</item>
		<item>
			<name>Communication between solver register service (UniTime deployed on a Tomcat) and remote solver servers</name>
			<description>
				<line>The following parameters have been added:
					<line>tmtbl.solver.register.ssl (defaults to true, when set to false communication is done unencrypted)</line>
					<line>tmtbl.solver.register.zip (defaults to true, when set to false individual messages are not gzipped to conserve network bandwidth)</line>
				</line>
				<line>If changed, same values must be set on the solver register (Tomcat) side and on the remote server side!</line>
			</description>
		</item>
		<item>
			<name>Query Log, Online Sectioning Log</name>
			<description>
				<line>Added an ability to limit the number of messages in the queue waiting to be persisted:
					<line>Query Log: unitime.query.log.limit</line>
					<line>Online Sectioning Log: unitime.sectioning.log.limit</line>
					<line>Defaults to 5000 messages, no limit is imposed when set to 0.</line>
				</line>
			</description>
		</item>
		<item>
			<name>Custom Page Messages</name>
			<description>
				<line>Added ability to define page-dependent custom messages (blue or yellow stripe at the top of the page):
					<line>a warning message (yellow stripe) for page XXX can be enabled by setting a custom property tmtbl.page.warn.XXX</line>
					<line>an info message (blue stripe) for page XXX can be enabled by setting a custom property tmtbl.page.info.XXX</line>
					<line>where XXX is the name of the page, that is:
						<line>for GWT pages, it is the value of the page parameter (UniTime/gwt.jsp?page=XXX)</line>
						<line>for Struts pages, it is the name of the page in the URL without any path and .do at the end (UniTime/XXX.do)</line>
					</line>
				</line>
				<line>Examples:
					<line>Class Edit page (UniTime/classEdit.do)
						<line>tmtbl.page.info.classEdit=This is a test info message that is only to be displayed on the Class Edit page.</line>
					</line>
					<line>Student Scheduling Assistant page (UniTime/gwt.jsp?page=sectioning)
						<line>tmtbl.page.warn.sectioning=This is a test warning message that is only to be displayed on the Student Scheduling Assistant page.</line>
					</line>
				</line>
			</description>
		</item>
	</category>
	<category>
		<title>Constraint Solver Update</title>
		<item>
			<name>Precedence Constraint changed to consider date patterns</name>
			<description>
				<line>If two classes (with a precedence constraint) have different date patterns, also check on what date the first meeting occurs.
					<line>This means that the first meeting of the first class must happen before the first meeting of the second class.</line>
					<line>Example: if the first class has date pattern Week 1 and the second class has Week 2, first class will always precede the second class.</line>
				</line>
				<line>Former behavior (date patterns are ignored) can be enabled by setting the solver property Precedence.ConsiderDatePatterns to false (defaults to true).</line>
			</description>
		</item>
		<item>
			<name>Course Timetabling, Examination Timetabling, Student Scheduling: Distances</name>
			<description>
				<line>Added ability to override distances computed using room coordinates by individual travel times set between pairs of rooms.</line>
				<line>This functionality is not enabled in UniTime 3.3 as there is no user interface to define travel times.</line>
			</description>
		</item>
		<item>
			<name>Course Timetabling, Batch Student Scheduling: Back-To-Back Student Distance Conflicts</name>
			<description>
				<line>Added ability to consider student distance conflicts between classes that are not directly back-to-back.
					<line>Distance conflict is there if room distance (in minutes) is greater than the break time of the first class plus the difference between end of the first and start of the second class.</line>
					<line>To be enabled if needed by setting the solver parameter Distances.ComputeDistanceConflictsBetweenNonBTBClasses to true (defaults to false).</line>
				</line>
			</description>
		</item>
		<item>
			<name>Course Timetabling: Meet Together Constraint</name>
			<description>
				<line>Avoid cycling between multiple meet with constraints.
					<line>For instance, when there is a MEET_WITH between classes A and B, and another one between classes B and C.</line>
					<line>In which case, one MEET_WITH constraint between all three classes A, B, and C would work better anyway.</line>
				</line>
			</description>
		</item>
		<item>
			<name>Student Scheduling: Reservations</name>
			<description>
				<line>For enrollments without a reservation in an offering with a reservation:
					<line>Only penalize enrollments (+1 in priority) if there is a reservation available to the student in the offering.</line>
					<line>This is the intended behavior, i.e., to favor enrollments that are meeting a reservation against enrollments avoiding the reservation.</line> 
				</line>
			</description>
		</item>
	</category>
	<category>
		<title>Bug Fixes</title>
		<item>
			<name>Issue 3: Instructor Detail (Examinations table): exams of a wrong term are visible</name>
			<description>
				<line>
					In the list instructors, all exams of the instructor are visible including exams of previous academic sessions.
					Only exams of the current academic session should be displayed.
				</line>
			</description>
		</item>
		<item>
			<name>Course Timetabling: Data Load</name>
			<description>
				<line>Fixed NullPointerException that may occur under the following circumstances:
					<line>last-like course demands are used,</line>
					<line>student class enrollments are to be loaded from a committed or previous (selected) solution,</line>
					<line>a class that was a part of the problem changed owner (managing department) since the committed/previous solution was saved and
						there is no other class of the problem that is to be loaded left in the offering.</line>
				</line>
				<line>Initial Sectioning: consider class limits of committed classes</line>
			</description>
		</item>
		<item>
			<name>Events: Include close by locations</name>
			<description>
				<line>Computation of distances between rooms changed to allow for non-euclidian coordinates (e.g., GPS coordinates).</line>
			</description>
		</item>
		<item>
			<name>Course Timetabling: Room Availability</name>
			<description>
				<line>Meetings ending at midnight were ignored from room availability in course timetabling solver. This is now corrected.</line>
			</description>
		</item>
		<item>
			<name>Course Timetabling: Student Conflicts</name>
			<description>
				<line>Fixed an issue with the number of student conflicts getting wrong (especially when on fly student sectioning is enabled).
					<line>When the best solution is restored, the number of student conflicts needs to be recomputed (because the saved solution may had the students sectioned differently).</line>
				</line>
			</description>
		</item>
	</category>
</release>

<release>
	<version>3.3.165</version>
	<release-date>January 6, 2012</release-date>
	<category>
		<title>Reservations</title>
		<item>
			<name>Model</name>
			<description>
				<line>A reservation is set on an instructional offering with optional relations to (many-to-many) configurations and classes.</line>
				<line>A reservation may either have a finite limit or be unlimited.</line>
				<line>A reservation can have an expiration date.
					<line>A reservation can expire at midnight, where all wait-lists are re-processed.</line>
				</line>
			</description>
		</item>
		<item>
			<name>Reservation types</name>
			<description>
				<line>Curriculum reservations
					<line>Relation: one academic area, zero or more majors (zero means all majors), zero or more classifications</line>
					<line>Allow copy from a curriculum, e.g., when adding a new reservation, add an ability to select an existing curriculum (area, major(s), total requested students).</line>
				</line>
				<line>Group reservations
					<line>Relation: a group identifying a set of students</line>
					<line>Group reservations are only available when there are student groups defined in the system (e.g., using student group import XML).</line>
				</line>
				<line>Individual reservations
					<line>Relation: 1 or more students (entered by external ids or using People Lookup)</line>
					<line>Students with an individual reservation have priority in the wait-list (for getting into the course).</line>
					<line>Enrollment may also overlap with other enrollments of the student if no not-overlapping assignment is possible (overlapping time is minimized).</line>
				</line>
				<line>Course reservations
					<line>Relation: a course (of a cross-listed offering)</line>
					<line>For a cross-listed offering, individual limit can be set for each course.</line>
					<line>A true reservation is only needed if there is a selection of classes or configurations.</line>
				</line>
			</description>
		</item>
		<item>
			<name>By Reservation Only</name>
			<description>
				<line>Can be set on an instructional offering (Course Edit page for the controlling course), visible on Instructional Offering Detail page (if enabled).</line>
				<line>If enabled, only students with a matching reservation can be enrolled into the offering.</line>
			</description>
		</item>
		<item>
			<name>Reservation priority</name>
			<description>
				<line>Priority is used for wait-list processing as well as assignment of a reservation to a student course request.</line>
				<line>Reservation order: Individual reservations (highest priority), group reservation, course reservation, curriculum reservations (lowest priority).</line>
			</description>
		</item>
		<item>
			<name>Course timetabling solver</name>
			<description>
				<line>Course and curriculum reservations are used to limit available classes for students.
					<line>Note: course reservations were already somewhat implemented in UniTime 3.2, curriculum reservations are completely new.</line>
					<line>If there is a student (including last-like or curriculum-based) meeting a reservation set on a class, such a student is prohibited from taking other classes (of the subpart).</line>
					<line>The rest is left on the sectioning engine (initial sectioning, student swaps).</line>
				</line>
			</description>
		</item>
		<item>
			<name>Student scheduling solver</name>
			<description>
				<line>Always only one reservation is associated with an enrollment.
					<line>This means that at most one reservation will count towards each student course enrollment.</line>
					<line>The reservation with highest priority is taken first, then more restrictive (if matching), then more available, then reservation id.</line>
				</line>
				<line>It is possible not to use reservation, if there is enough space in the course / configuration / sections
					<line>Such assignments have lower weight than if a reservation is used (+1 on course alternativity).</line>
					<line>Individual and group reservations must be used when present (and a student matches the reservation).</line>
				</line>
				<line>General strategy for course / section reservations:
					<line>Do not allow students over the reserved available space into the course / section, i.e., do not block students with reservation from having a choice.</line>
					<line>This means that if there is a reservation for 1 student set on classes A and B, one space is held in both classes until the student (matching this reservation) is sectioned.</line>
				</line>
				<line>Ability to enroll over the class / config / course limit is only used in online student scheduling, and only on pieces on which the reservation is set.</line>
			</description>
		</item>
		<item>
			<name>User interface changes</name>
			<description>
				<line>The old (and mostly disabled) interface is replaced by a new (GWT-based) one.</line>
				<line>A new Reservations page created, and there is a Reservations table in the Instructional Offering Detail page.</line>
			</description>
		</item>
	</category>
	<category>
		<title>Batch Student Scheduling</title>
		<item>
			<name>Reservations</name>
			<description>
				<line>Reservation limit constraint:
					<line>The constraint ensures that the reservation limit is not breached; also checks that the reservation class/config restrictions are met.</line>
				</line>
			</description>
		</item>
		<item>
			<name>Constraints</name>
			<description>
				<line>Added configuration and course limit constraints.
					<line>To ensure that configuration and course limits are not breached (similar to class limit constraint).</line>
				</line>
				<line>All limit constraints:
					<line>If conflicting, pick enrollments with lowest weight (still prefer last-like students though).</line>
					<line>Similar strategy is used for reservations too (enrollments without reservation are also preferred).</line>
				</line>
			</description>
		</item>
		<item>
			<name>New priority student weighting model</name>
			<description>
				<line>Goals:
					<line>First priority request has better weight than all the rest.</line>
					<line>Total weight for a student should be between zero and one, one for a fully satisfied student.</line>
				</line>
				<line>Request weight: 1st priority 0.501, 2nd priority 0.250, 3rd priority 0.1248, 4th priority 0.0623, ... (1/2 for alternatives, e.g., 0.2505 for the first alternative of a course).</line>
				<line>1/2 and 1/4 for the alternatives; but the difference will be distributed down-wards (student has more weight to get the n+1, n+2, ... priority courses).</line>
				<line>Weights are rounded to four digits.</line>
				<line>The rest to 1 -- put to the last request or split evenly between all of them.</line>
			</description>
		</item>
		<item>
			<name>Alternative (equal) weighting model</name>
			<description>
				<line>All course (non alternative) requests have equal weight (priority is ignored).</line>
				<line>First alternatives have lower weight than first choices, but equal among themselves.</line>
				<line>Second alternatives have lower weight than first alternatives, alternative course requests than second alternatives.</line>
			</description>
		</item>
		<item>
			<name>Distance conflicts</name>
			<description>
				<line>Distance conflicts are considered secondary, and only counted on the lower priority course.</line>
			</description>
		</item>
		<item>
			<name>Free times and some classes allow for overlap</name>
				<description>
					<line>For classes an allow-overlap flag can be set on a subpart.</line>
					<line>If a non-conflicting schedule cannot be found, try to minimize overlapping times instead.</line>
					<line>Weighting: deduct 1/2 of the overlapping %.
						<line>E.g., if an enrollment overlaps 50% with a free time request, deduct 25% of its weight.</line>
						<line>I.e., time overlaps can cut up to 50% of the weight on both courses that overlap (when overlapping completely, see overlaps).</line>
					</line>
				</description>
		</item>
		<item>
			<name>Section balancing</name>
				<description>
					<line>If alternative enrollments are otherwise equal, the better balanced one is preferred.</line>
					<line>Small weight is removed from assignments that further dis-balance a section.</line>
					<line>Small weight is added to assignments that better balance the section.</line>
					<line>Target balance:
						<line>Sections with limits: section limit x ( subpart enrollment / subpart limit ).</line>
						<line>Unlimited sections: subpart enrollment / number of sections in the subpart.</line>
					</line>
				</description>
		</item>
		<item>
			<name>Weighting of projected students</name>
			<description>
				<line>Projected (last-like) students are weighted less, and with equal weights (no priorities).</line>
			</description>
		</item>
		<item>
			<name>Data load</name>
			<description>
				<line>Curriculum and course projection rules can be used for projected students.
					<line>Same as in the course timetabling.</line>
				</line>
				<line>Weight projected students based on their academic areas, classifications, and majors.
					<line>E.g., if it is expected to have 100 1st year engineers in the course, and there already are 25 (real students), the projected demands (for 1st year engineers) will be weighted to fill in the remaining 75 spaces.</line>
				</line>
				<line>Added solver mode (named Projection) to be used for update of expected / held spaces.
					<line>Only projected course demands are used in this mode.</line>
					<line>The actual student class enrollments are only used to decrease class / course / configuration / reservation limits.
						<line>Projected demands are sectioned in the remaining space. This is used to help the online student sectioning solver to know how to section incoming students (what classes will be over expected and therefore avoided if possible).</line>
					</line>
				</line>
			</description>
		</item>
		<item>
			<name>Linked Sections distribution constraint</name>
			<description>
				<line>Classes (of different courses) are to be attended by the same students.</line>
				<line>For instance, if class A1 (of a course A) and class B1 (of a course B) are linked, a student requesting both courses must attend A1 if and only if he also attends B1.</line>
				<line>The constraint is only applied to student scheduling (it is only interpreted as Same Students constraint during course timetabling).</line>
			</description>
		</item>
	</category>
	<category>
		<title>Online Student Scheduling Server</title>
		<item>
			<name>Model</name>
			<description>
				<line>Session needs to be in a certain state to allow online student scheduling (implemented via status type).</line>
				<line>Online student scheduling wrapped in a server.
					<line>To allow fast response during student scheduling, the sectioning model is held in memory in a format very much like the batch student sectioning model.</line>
					<line>Most of operations are implemented as (synchronous or asynchronous) actions.</line>
					<line>Locking is done on an instructional offering and student level -- and only during an action (we are not going to hold sections for a student).</line>
				</line>
				<line>Three modes
					<line>Online Scheduling Assistant (no changes are made in the database, only provides students with schedules, like in UniTime 3.2).</line>
					<line>Student Course Requests (no scheduling, only to record student course requests -- no server too).</line>
					<line>Online Student Scheduling (full online student scheduling support, new in UniTime 3.3).</line>
				</line>
			</description>
		</item>
		<item>
			<name>Components</name>
			<description>
				<line>Sectioning Server
					<line>Holds the sectioning model (of an academic session) in memory, provides locking and basic (look-up) operations</line>
				</line>
				<line>Updater
					<line>Listens for (asynchronous) changes in the model (session status change, student class enrollment update, etc.)</line>
				</line>
				<line>GWT User Interface / Servlet
					<line>Very much like the Student Scheduling Assistant in UniTime 3.2, added Online Student Scheduling Dashboard.</line>
				</line>
				<line>Various actions
					<line>Implementing individual student enrollment, notification emails, course changes, reservation expirations, etc.</line>
				</line>
			</description>
		</item>
		<item>
			<name>Student weighting model</name>
			<description>
				<line>Besides of the student priority weighting of the batch scheduling following weights were to be added:
					<line>Avoid over-expected sections (expected >= available space).</line>
					<line>Prefer selected sections (to be able to go back and forth between course requests and class schedule).</line>
					<line>Avoid arrange hour classes if possible.</line>
					<line>Tiny weight on the available space: (limit - enrolled - expected) / limit</line>
				</line>
			</description>
		</item>
		<item>
			<name>Student Enrollment</name>
			<description>
				<line>As course/class availability may change while a student is creating his/her schedule, limits (and the whole enrollment feasibility) are checked before an enrollment is persisted in the database.</line>
				<line>Notification emails are sent whenever something gets changed in a student schedule.</line>
			</description>
		</item>
		<item>
			<name>Wait-listing</name>
			<description>
				<line>Any time a student has an unfulfilled course request, he/she is considered to be on a wait-list.
					<line>This means that a student has requested a course but he/she is not enrolled in it (due to some issue) nor in any alternative provided by the student.</line>
				</line>
				<line>Wait-listed students are ordered by request time stamp (when a course request was created), however, students meeting an individual reservation take precedence.
					<line>Also, students that were already enrolled in the course (in case of a course change) are processed before students not yet enrolled in the offering.</line>
				</line>
				<line>Wait-lists are processed whenever there is a new space freed up in the offering.</line>
			</description>
		</item>
		<item>
			<name>Course Changes</name>
			<description>
				<line>An instructional offering must be locked (through the user interface) before it can be changed.</line>
				<line>Students can see the course, but cannot enroll in it while it is locked.
					<line>An attempt in enrolling into a course results in wait-listing of the student.</line>
				</line>
				<line>After an offering is unlocked, it is reloaded and all existing student enrollments are re-checked.
					<line>First, students with a conflict or with an incomplete enrollment are un-enrolled.
						<line>Check for incomplete enrollment (when a class is deleted) or time conflicts (when a class is moved to an overlapping time).</line>
						<line>Limits are ok (if a limit is decreased, students are kept in the class over the limit).</line>
						<line>If there is a change detected in the student’s schedule, but there are no conflicts -- only an email about the change is sent to the student.</line>
					</line>
					<line>Second, students that were un-enrolled are tried to re-enroll.
						<line>Time changes in the student schedule are minimized.</line>  
					</line>
					<line>Last, wait-list is processed.</line>
				</line>
				<line>System is not allowed to move some other enrollments of an affected student in order to be able to keep him/her in the course.</line>
			</description>
		</item>
		<item>
			<name>System Recovery</name>
			<description>
				<line>Check / fix all assigned students, check / process all wait-lists on startup.</line>
			</description>
		</item>
		<item>
			<name>Logging</name>
			<description>
				<line>Most of the operations are logged
					<line>It should have enough information for data mining and to track down potential problems.</line>
					<line>Using Google Protocol Buffers for its effectiveness and extensibility.</line>
				</line>
				<line>Added basic schema for reporting from online student sectioning logs.</line>
				<line>Logging can be disabled by setting unitime.sectioning.log to false.</line>
			</description>
		</item>
		<item>
			<name>Enrollment Deadlines</name>
			<description>
				<line>It is possible to limit new enrollments, enrollment changes, and course drops by giving deadlines.</line>
				<line>Deadlines are given in the number of weeks, relative to class start (weeks start on the day of the session begin date).</line>
				<line>Default values are set on an academic session, can be refined on an instructional offering.</line>
			</description>
		</item>
		<item>
			<name>Student Scheduling Status</name>
			<description>
				<line>It is  possible to block a student (or some group of students) from being able to make class changes; or to receive email notifications.</line>
				<line>Default scheduling status is set on an academic session, can be refined on a student (using Student Scheduling Dashboard).</line>
			</description>
		</item>
	</category>
	<category>
		<title>Online Student Scheduling User Interface</title>
		<item>
			<name>Student Scheduling Assistant</name>
			<description>
				<line>Student Scheduling Assistant page looks as in UniTime 3.2. There have been only a few things added to support for online student scheduling.</line>
			</description>
		</item>
		<item>
			<name>Instructional Offering Detail: Enrollments</name>
			<description>
				<line>Added Enrollments table at the bottom of the Instructional Offering Detail page.
					<line>List of students enrolled / wait-listed for the offering.</line>
					<line>Include student's curriculum, request priority / alternativity, requested course (if cross-listed), class enrollments, reservation (if used for enrollment), requested / enrolled dates.</line>
					<line>Works both with and without the online sectioning server (enrollments are loaded from the database if online sectioning server is not enabled).</line>
					<line>Show student class schedule when an individual student is clicked.</line>
					<line>Load enrollments only when the Enrollments table is open.</line>
					<line>Added ability to switch between External Id and Class Number (click on any itype column).</line>
				</line>
				<line>Show Enrollments table on Class Detail page too.</line>
				<line>For offerings with a consent, a student enrollment can be approved or rejected using the Enrollments table.</line>
			</description>
		</item>
		<item>
			<name>Online Student Scheduling Dashboard</name>
			<description>
				<line>Display a given set of course requests / student enrollments, or students.</line>
				<line>The page also displays information from the sectioning log (either for a particular student, or by a given filter).</line>
				<line>Extensive filtering abilities (by student, group, curriculum, course, subject, consent, ...).</line>
				<line>The page is available for administrators, scheduling deputies (can approve consent), student advisors (can change student enrollment) and course coordinators (can approve consent of instructor).
					<line>Course coordinators can only see courses that are assigned to them.</line>
				</line>
				<line>It is possible to email students and/or change their scheduling status (admin only).</line>
			</description>
		</item>
		<item>
			<name>Instructional Offerings</name>
			<description>
				<line>Projected demands (on classes): show expected enrollment (if computed using projected student demands), including current enrollment.
					<line>That is, projected demand of a class == enrolled students + expected number of (projected, not yet enrolled) students.</line>
				</line>
			</description>
		</item>
	</category>
	<category>
		<title>Course / Examination / Student Scheduling / Event / Administration Reports</title>
		<item>
			<name>Added simple HQL reports page</name>
			<description>
				<line>Reports are based on parameterized HQL queries (very much like Test HQL) that are stored in the database.</line>
				<line>Reports can be available under Courses, Students, Examinations, Events, and Administration.
					<line>Visible in the menu only when there is at least one report available.</line>
				</line>
				<line>Reports can be parameterized by academic session, one or more subject areas or departments.
					<line>Only subject areas and departments available to the current user are available in such a case.</line>
				</line>
				<line>Each line in a report can be made clickable.
					<line>When the appropriate class / offering / examination / room / instructor / event unique id is returned in the first column named __Class, __Offering, etc.</line>
				</line>
				<line>A few sample course reports created (including one listing unassigned classes that have a time preference).</line>
			</description>
		</item>
	</category>
	<category>
		<title>Internationalization</title>
		<item>
			<name>Added support for localization</name>
			<description>
				<line>Using a GWT-like approach (to ease transition from Apache Struts to GWT)
					<line>That is using the same annotation, but it is server side.</line>
					<line>Multiple resource (message) bundles.</line>
					<line>Added support for JSP tags and Struts.</line>
					<line>Added export/import of messages to/from CSV.</line>
					<line>Allow localization to be changed using locale parameter (in URL, for a particular user) or using browser settings.</line>
					<line>Added ability to use localized (or customized) GWT constants on the server side.</line>
				</line>
			</description>
		</item>
		<item>
			<name>Internationalized pages</name>
			<description>
				<line>
					Instructional Offerings, Classes, Class Detail, Class Edit, Scheduling Subpart Edit, Scheduling Subpart Detail,
					Instructional Offering Configuration Edit, Edit Course Offering, Student Scheduling Assistant, Multiple Class Setup,
					Assign Instructors, Instructional Offering Detail, Instructors, Add/Edit Instructor, Instructor Preferences
				</line>
			</description>
		</item>
	</category>
	<category>
		<title>Course Management</title>
		<item>
			<name>Classes, Class Assignments</name>
			<description>
				<line>Added ability to show cross-listed classes.</line>
				<line>Date pattern: show assigned date pattern if a timetable is being shown.</line>
				<line>Sorting changes: compare by all instructors (not just lead); if keep subparts is false, compare among all listed classes (of a subject area).</line>
				<line>Class Assignments: show instructor assignments (but only when display instructor is enabled on a class)</line>
			</description>
		</item>
		<item>
			<name>Room Groups / Features</name>
			<description>
				<line>Global room groups &amp; features made session dependent.
					<line>This means that each academic session can have a different set of global room groups and features.</line>
				</line>
			</description>
		</item>
		<item>
			<name>Course Coordinators</name>
			<description>
				<line>Course coordinators can be set on an instructional offering (Course Edit page for the controlling course), visible on Instructional Offering Detail page.</line>
			</description>
		</item>
		<item>
			<name>Rooms</name>
			<description>
				<line>Export PDF: fixed page size.</line>
				<line>Export CSV: added ability to export rooms to a CSV file.</line>
			</description>
		</item>
	</category>
	<category>
		<title>Course Timetabling</title>
		<item>
			<name>Distribution Constraints</name>
			<description>
				<line>Added maximum hours a day (instructor) constraint.</line>
			</description>
		</item>
		<item>
			<name>Alternative Date Patterns</name>
			<description>
				<line>Added ability to handle time placements with different date patterns in a domain of a class.
					<line>This includes ability to select a date pattern in the interactive solver.</line>
					<line>Selected date pattern is saved with the solution.</line>
				</line>
			</description>
		</item>
		<item>
			<name>Search Heuristics</name>
			<description>
				<line>Added distance student conflict weight.
					<line>This means that distance student conflicts can now be weighted differently than "ordinary" student conflicts.</line>
				</line>
			</description>
		</item>
		<item>
			<name>Timetable Grid</name>
			<description>
				<line>Added 'Per Day' view: there is a line for each day of classes (very much like Per Day view on the Examination Timetable page).</line>
			</description>
		</item>
		<item>
			<name>Assigned Classes, Not-assigned Classes</name>
			<description>
				<line>Added ability to filter the list of assigned / not-assigned classes by subject area.</line>
			</description>
		</item>
	</category>
	<category>
		<title>Examination Timetabling</title>
		<item>
			<name>Examination PDF Reports</name>
			<description>
				<line>Verification Report
					<line>Do not list suffix (sub)classes (classes with suffixes a,b,c,..) , i.e., classes that have the same instructional type as their parent class (e.g., class Lec 1a has a parent class Lec 1, both are lectures).</line>
					<line>In a rare case when an exam is sticked on a suffix class (like Lec 1a), the exam is displayed on the parent class (Lec 1) instead.</line>
					<line>Previous behaviour (listing all classes) can be enabled by setting of the application property tmtbl.exam.report.verification.skipSuffixSubparts to false.</line>
				</line>
				<line>Student Conflicts Report: format of student names changed to include full first and middle names (not just initials).</line>
			</description>
		</item>
		<item>
			<name>Add/Edit Examination</name>
			<description>
				<line>Classes / Courses: Class Number column now also contains class suffix (if it is not empty and different from class number; format is class number - suffix).</line>
			</description>
		</item>
	</category>
	<category>
		<title>Event Management</title>
		<item>
			<name>Event Timetable</name>
			<description>
				<line>Room Timetable: allow to see all the rooms (when unitime.event_timetable.event_rooms_only is set to false, defaults to true).</line>
				<line>Subject Timetable: allow to enter course name (shows a timetable of a single course).</line>
				<line>Resource selection: show suggestions when there is nothing entered (on focus).</line>
				<line>Week selection: allow selection of multiple weeks (interval of weeks).</line>
				<line>Personal Timetable: schedule deputies and student advisors can lookup student and instructor schedules.</line>
			</description>
		</item>
		<item>
			<name>Add (Course Related) Event</name>
			<description>
				<line>Classes / Courses: Class Number column now also contains class suffix (if it is not empty and different from class number; format is class number - suffix).</line>
			</description>
		</item>
	</category>
	<category>
		<title>Other Changes</title>
		<item>
			<name>Session Roll Forward</name>
			<description>
				<line>It is now possible to roll date and time patterns later in the roll forward process.</line>
			</description>
		</item>
		<item>
			<name>Data Exchange</name>
			<description>
				<line>Added ability to backup &amp; restore academic session (using Data Exchange page).</line>
				<line>Department Import: When the import is using external ids to match departments, put out a warning rather than failing when a manually created department exists without an external id but does have a department code that matches the department code of the department that is being imported.</line>
				<line>Student information XML interfaces:
					<line>Imports are now incremental (relations with other data are kept).</line>
					<line>Records with external id that are not present in the XML file are deleted during the import (records without external ids are kept).</line>				
					<line>Added students export.</line>
					<line>Added student groups and student accommodations imports.</line>
					<line>Examples changed to reflect Woebegon College example (online demo).</line>
				</line>
				<line>Reservations: Added reservations export and import.</line>
			</description>
		</item>
		<item>
			<name>Test Session</name>
			<description>
				<line>Added a concept of test sessions:
					<line>There is a new "Test Session" toggle in the status type.</line>
					<line>A test session is not available to no-role users.</line>
					<line>Also classes and examinations do not generate any events and test sessions are not available for event management.</line>
				</line>
			</description>
		</item>
		<item>
			<name>Student Advisor Role</name>
			<description>
				<line>Student advisor can use online student scheduling functionality on behalf of a student.</line>
				<line>Student advisor can also access Online Student Scheduling Dashborad to track progress of his/her students.</line>
			</description>
		</item>
		<item>
			<name>Administration</name>
			<description>
				<line>Added following administration pages (to be able to edit these tables within the application):
					<line>Student Groups, Consent Types, Course Credit Formats, Course Credit Types, Course Credit Units, Position Types, Student Scheduling States</line>
				</line>
			</description>
		</item>
		<item>
			<name>Position Code Types</name>
			<description>
				<line>PositionCodeType (mapping position codes, only used in Staff import) removed, Staff import changed to work directly with position types.</line>
			</description>
		</item>
		<item>
			<name>Other</name>
			<description>
				<line>Most of GWT-based pages: When not authenticated (and if the authentication is required), open login page in a dialog.</line>
				<line>All pages: If a page requires a horizontal scroll bar, try to shrink all tables that are 100% wide to the size of the window.
					<line>This means that tables like Filter will not get widen to fill up the whole space.</line>
					<line>This is particularly useful on pages that can contain huge tables (like Timetable, Solution Reports, Examination Timetable, or Event Room Availability).</line>
				</line>
			</description>
		</item>
	</category>
</release>
</release-history>

