UniTime 4.1 build 110 (Alpha 4)
Pre-release
Pre-release
tomas-muller
released this
18 Nov 12:50
·
3188 commits
to master
since this release
Course Timetabling
Class Duration Types
- Added ability to define different ways how class duration is entered and used in the system (to
extend the formal Minutes per Week selection). - There is a new page (Administration > Other > Class Duration Types), where the class duration
types can be managed.- Permission ClassDurationTypes is needed to access the page, ClassDurationTypeEdit is needed to
make changes.
- Permission ClassDurationTypes is needed to access the page, ClassDurationTypeEdit is needed to
- Default duration type can be defined on an academic session, it can be overridden on the
instructional offering configuration level (Instructional Offering Configuration page).- Name of the default duration type is used in the column headers (Classes, Instructional
Offerings), abbreviation is used to suffix durations that are using a non-default duration
type.
- Name of the default duration type is used in the column headers (Classes, Instructional
- Following class duration types have been implemented:
- Minutes per Week (default): this is the existing behaviour (minutes per week == number of
meetings x minutes per meeting) - Average Weekly Mintes: average number of minutes a class takes during a week (weekly minutes =
number of meetings x minutes per meeting x number of weeks of the data pattern / number of
weeks in the term)- Paramter: number of weeks in the term (defaults to the number of weeks of the default date
pattern)
- Paramter: number of weeks in the term (defaults to the number of weeks of the default date
- Semester Minutes: number of minutes in the semester (semester minutes == number of meetings x
minutes per meeting x number of weeks of the data pattern) - Semester Hours: number of hours in the semester (semester hours == number of meetings x
minutes per meeting x number of weeks of the data pattern / minutes in an hour)- Paramter: number of minutes in an hour (defaults to 50)
- Meetings Minutes: number of minutes of all the meetings, excluding vacations (meeting minutes
== number of meetings based on the date pattern x minutes per meeting)- Parameters: allowed variation of the meeting minutes, expressed as lower and upper bound
(defaults to 0.95,1.10 -- meaning a class can have 5% less time, combinations with 10% more
time will be also considered). - If the number of meetings based on the date pattern exceeds the desired number of meeting
minutes, only meetings covering the given number of meeting minutes are created.
- Parameters: allowed variation of the meeting minutes, expressed as lower and upper bound
- Meeting Hours: just like meeting minutes, but with hours (semester hours == number of meetings
based on the date pattern x minutes per meeting / minutes in an hour)- Paramters: number of minutes in an hour and the allowed variation of the meeting minutes
(defaults to 50,0.95,1.10 -- 50 minutes in an hour, 5% less time allowed, combinations with
up to 10% excess time are considered).
- Paramters: number of minutes in an hour and the allowed variation of the meeting minutes
- Minutes per Week (default): this is the existing behaviour (minutes per week == number of
- It is possible to hide class duration types that are not to be used by the users.
- If only one type is visible, there is no selection of the class duration type on the
Instructional Offering Configuration page.
- If only one type is visible, there is no selection of the class duration type on the
Cancelled Classes
- Added ability to cancel a class.
- Multiple Class Setup page: class with enrolments cannot be deleted, but it could be cancelled
instead. - Cancelled classes retain their committed assignment, but the appropriate class event is
cancelled. - Cancelled classes are not loaded into the course timetabling solver.
- Cancelled classes cannot be edited or re-assigned and they do not block the room or instructor.
- When a cancelled classes is reopened, the appropriate event is also re-approved.
- This could cause conflicts, that have to be manually resolved.
- In student scheduling, cancelled classes are avoided (no valid enrollment can contain
a cancelled class). - In online student scheduling, it is possible to keep existing students in cancelled classes when
solver configuration parameter named Enrollment.CanKeepCancelledClass is set to true (defaults
to false). - New permissions:
- Class Delete: ability to delete a class (class cannot be deleted when there is a committed
solution and at least one student enrolled in the class) - Class Delete No Enrollment Check: this permission overrides the enrollment check from the
Class Delete permission (not given to any role by default) - Class Cancel: ability to cancel a class (there must be a committed solution)
- The Class Delete and Class Cancel permissions are by default given to all roles that have
Multiple Class Setup Class and / or Class Edit permissions.
- Class Delete: ability to delete a class (class cannot be deleted when there is a committed
- Added a new permission (named Class Delete No Enrollment Check) that overrides the enrollment
check from the Class Delete permission.- No role is given this permission by default.
- Make Not-Offered: It is allowed to make an offering not-offered only when there are no students
enrolled, there is no committed solution, or the user has the Class Delete No Enrollment Check
permission. - Cross Lists: it is allowed to remove a cross-listed course from an offering only when there are
no students enrolled, there is no committed solution, or the user has the Class Delete No
Enrollment Check permission.
Conflicting Classes
- Class Detail: Display conflicting classes.
- There is a new table called Conflicting Classes, just below the Timetable section.
- The table is only visible when the class is conflicting with some other class (or classes).
- The same checking as on the Class Assignment page is used.
- Instructional Offering Detail: Highlight conflicting classes with light red background.
- Conflicting classes are listed in the tooltip (more details are provided on the Class Detail
page, see above).
- Conflicting classes are listed in the tooltip (more details are provided on the Class Detail
- Conflict checking: avoid showing conflicts between classes that can overlap because of the Can
Share Room or the Meet Together distribution.
Instructional Methods
- Added instructional methods lookup table. Each method has a reference and a label.
- Example instructional methods: Online, Hybrid, or Face-to-Face.
- Instructional offering configuration can have an instructional method set.
- If set, instructional method appear on various pages, including the Scheduling Assistant and
Events. - It is usually included in the Type column, next to the instructional type, e.g., Lecture
(Online).
Multiple-Major Curricula
- A curriculum has a new property named multiple majors (boolean, default to false).
- If a curriculum is marked as multiple-major: a student meets the curriculum only when he/she has
all the selected majors (not one of the selected). - A multiple-major curriculum will inherit course projections from curricula that have no or one
of the matching majors. - There can be multiple curricula that get combined together to form a multiple-major curriculum.
- If a course is on several curricula, the highest percent share (of the particular
classification) will be used. - These shares can be overridden on the multiple-major curriculum, but no courses can be deleted
(course projection must be set to zero instead). - The parent (single or no major curricula) can have zero requested students, only acting as
templates for the multiple-major curricula. - If there is no multiple-major curriculum, everything works like before.
Reservations
- Remember last sort in the reservation cookie.
- Added Previous / Next buttons (Edit Reservation).
- Added confirmation message when deleting a reservation (Edit Reservation).
Rooms
Overview
- The room pages have been completely rewritten using the Google Web Toolkit.
- The new pages are localizable, they are using the same Room Filter as is used in the event
management, and they are allowing a change to propagate over to the future academic sessions as
well. - It is also possible for users that are not managers in UniTime (e.g., instructors) and/or that
have no relation to a particular department (e.g., students) to be allowed to use the new rooms
pages. - When accessed from the Events menu, the Rooms, Room Groups and Room Features pages contain the
selection of an academic session, just like the Events page. - It is possible to use the old pages by setting the application property unitime.legacy.rooms to
true (defaults to false).
Rooms
- The Rooms page now contains a Room Filter and a table with many features.
- The table of rooms can be sorted by a given column, can show pretty much any room property, and
it can be exported to PDF or CSV.
Add/Edit Room
- Add Room and Edit Room page now contains all the functionality of the various edit pages that
were accessible from the Room Detail page. - Moreover, it is now possible to make the update the room in the (selected) future academic
sessions as well. - Only selected groups of properties can be updated in a particular future session.
Edit Room Departments
- The page can be used to assign multiple rooms to a particular department or examination
problem). - The page is only accessible when a department or an examination problem is selected in the Room
Filter. - The page is now using the same table of rooms as the Rooms page and it is populated by all the
rooms matching the Room Filter (except of the selected department / examination problem). - Rooms not matching the Room Filter are left unchanged.
Room Groups / Features
- The Room Groups and Room Features pages also use the Room Filter to list rooms (and matching
room features and groups). - The Add and Edit pages are also using the same table as on the Rooms page with the list of rooms
populated by all the rooms matching the Room Filter. - Rooms not matching the Room Filter are left unchanged.
- When creating / updated a room group or feature, it is possible to select one or more future
academic sessions that would be updated as well.- Besides of the properties of the group (or feature) like name, abbreviation department, etc.,
only rooms with a change are updated. - This means that the future group (or feature) is NOT reset to the rooms that are currently
selected on the group (or feature).
- Besides of the properties of the group (or feature) like name, abbreviation department, etc.,
Examination Timetabling
Examination Status
- Added ability to set examination status individually for each examination type.
- This examination status, if set, overrides the academic session status (for all users).
- Examination statues can be defined on the Administration > Other > Status Types page (Apply:
Examinations). - The following statuses are created by default: Examination Disabled, Examination Data Entry,
Examination Timetabling, and Examination Published. - Examination statuses can be set on the Administration > Academic Sessions > Examination
Statuses page.
- This allows for each examination problem to be viewed, edited, timetabled, and published at
a different time. - It is also possible to attach examination managers to each examination type (for the current
academic session).- If this relation is defined, only the selected manager(s) can view, edit, or timetable the
given examination problem (based on the status). - If this relation is NOT defined, all examination managers can view, edit, or timetable all
examination problems. - This relation is also to be edited on the Administration > Academic Sessions > Examination
Statuses page. - Only managers with a role that is academic session dependent and that allows to access the
examination solver are listed.
- If this relation is defined, only the selected manager(s) can view, edit, or timetable the
Data Exchange
- Course Offering Export: More examination properties are now included (print offset, length,
etc.). - Course Offering Import: Added ability to import examinations together with the offerings
(including period and room assignments).
Batch Student Scheduling
Minimal Perturbation Mode
- In priority and equal weighting, the difference of an enrollment (from the initial one) is
computed as an average using the following schema:- an initial section counts as 1
- same choice section counts as 0.9 (parameter StudentWeights.SameChoice)
- same time section counts as 0.7 (parameter StudentWeights.SameTime)
- different time section counts as 0
- Non-initial enrollment weight is penalized with weight StudentWeights.Perturbation (defaults to
0.100). - When MPP is enabled, solution info contains the following three new properties:
- Perturbations: same section assigned (% of initial section assigned over all course requests
with initial enrollment) - Perturbations: same choice assigned (% of same time and instructor section assigned over all
course requests with initial enrollment) - Perturbations: same time assigned (% of same time section assigned over all course requests
with initial enrollment)
- Perturbations: same section assigned (% of initial section assigned over all course requests
- When Sectioning.KeepInitialAssignments is set to true (defaults to false), only the initial
value is in the variable’s domain (when there is an initial value).- Also there is a new global constraint (named FixInitialAssignments) that prevents unassignment
of an initial value by another global constraint (limits, reservations).
- Also there is a new global constraint (named FixInitialAssignments) that prevents unassignment
Request Groups
- Added ability to keep students of the same group together.
- Measured as an average probability of two students (of a group) that are requesting the same
course being given the same section (of the same subpart). - There is a new weight (named StudentWeights.SameGroup, defaults to 0.1) expressing how much this
criterion affects the student weight (in both priority and equal weighting).- This means that if a student is being enrolled into a completely different section, weight of
such an enrollment is decreased by 10% (the metric reflects how much are the students spread
between the sections of the course).
- This means that if a student is being enrolled into a completely different section, weight of
- There is a new Request Groups report on the Student Scheduling Solver Reports page.
- Request groups are loaded in only when the solver parameter Load.RequestGroups is set to true,
default is false
Interactive Changes
- Added ability to use the Scheduling Assistant page to make changes in a student's schedule
(current solution). - It is also possible to change input data (course and free time requests of a student).
- This possibility can be disabled by setting the solver configuration parameter
Interactive.UpdateCourseRequests to false (defaults to true).
- This possibility can be disabled by setting the solver configuration parameter
Student Filter
- Added ability to filter what student will get loaded into the batch student scheduling solver
using a boolean query. - Solver parameter Load.StudentQuery, when set each student must match the query to be loaded in.
- Students not matching the query would only count agains the limits, just like with the
no-batch status. - The parameter could be used together with the no-batch student status (both filters will apply
in such a case).
- Students not matching the query would only count agains the limits, just like with the
- Available query terms (similar to the Filter of the Student Dashboard):
- status (reference of the student status)
- area (abbreviation of the academic area)
- major (code of the academic major)
- clasf or classification (code of the academic classification)
- group (code of the student group)
- accommodation (code of the student accomodation)
- student (external id of the student)
- Examples:
- group:G1 or group:G2
- Only students of groups G1 and G2 will get loaded in.
- area:A and (major:M1 or major:M2)
- Only student of area A and major M1 or M2 will get loaded in.
- status:Batch
- Only students of Batch status will get loaded in.
- group:G1 or group:G2
Online Student Scheduling
Online Student Scheduling Dashboard
- Added ability to use the Online Student Scheduling Dashboard page during the registration phase
(Course Requests page is available to students). - This is done by leveraging the DatabaseServer (version of the online scheduling server that does
not keep any data in memory).
Custom Interfaces
- Added ability to use automated wait-listing together with the student enrollment provider
interface. - Added ability to load course requests from an external system when there are none in UniTime
(for a student).
Student Scheduling Assisstant
- Added ability to hide Rearrange Schedule button.
- By setting unitime.enrollment.allowScheduleReset to false, defaults to true.
- If made hidden, it is possible to show the button for advisors by setting
unitime.enrollment.allowScheduleReset.manager to true.
- Added ability to make enrolled course demands not editable (they can still be deleted, but it is
harder to accidentally drop a course).- By setting unitime.enrollment.disableAssignedRequests to true, defaults to false.
- If enrolled demands are made read-only, it is possible to make them editable for advisors by
setting unitime.enrollment.disableAssignedRequests.manager to false.
- Added ability to display a confirmation message when dropping a course.
- By setting unitime.enrollment.confirmCourseDrop to true, defaults to false
- Message: Together with other registration changes, the course {0} will be dropped. Do you want
to proceed? - Where {0} is the course or courses that are to be dropped.
- When there is an Arrange Hours class in the schedule, the following message is displayed at the
top of the Time Grid tab.- This schedule only displays classes with assigned time. To see your full list of classes,
please open the List of classes tab. - The message has light blue background, same as other info messages.
- This schedule only displays classes with assigned time. To see your full list of classes,
Other Improvements
iCalendar Queries
- Automatically hash calendar queries to make the iCalendar URLs much shorter.
- This is to overcome the 256 character limit on a subscribed calendar URL in Google Calendar.
- Hashed queries are persisted in UniTime and they are automatically removed if not used for 92
days (can be changed by unitime.cleanup.hashedQueries property). - This feature can be disabled by setting the application property unitime.encode.hash to false.
Student Group Timetable
- On the Events Timetable page, it is now possible to select a student group.
- If a student group is selected, all classes / exams, and course-related events of students of
the selected student group are displayed. - It is possible to hide some events by defining a minimal enrollment parameter (see below).
- Parameters:
- unitime.events.group.minimalEnrollment
- Minimal enrollment for a class event to appear in the results (given as % of the group size
or as an absolute number). - For instance, set it to 5 (only classes with at least 5 students of the group are shown) or
to 10% (limit is 10% of the number of students in the group).
- Minimal enrollment for a class event to appear in the results (given as % of the group size
- unitime.events.group.showGroupEnrollment
- On the Events / Timetable page, count the enrollments only within the group (may be slow).
- If set to true, enrollment field shows the number of students of the group enrolled in the
class / exam / course related event (default is false).
- GwtConstants: timeGridStudentGroupDoesNotOverlap
- If true, it is assumed that there are no overlaps in the events of the group — the display
is like on the personal timetable or when a single week / room is selected (defaults to
false). - This property needs to be set in the
JavaSource/org/unitime/timetable/gwt/resources/GwtConstants.properties before the build.
- If true, it is assumed that there are no overlaps in the events of the group — the display
- unitime.events.group.minimalEnrollment
Poeple Lookup dialog
- Added individual lookup permissions to be able to filter what sources can be searched (by a user
of the given role). - The following permissions were added:
- Can Lookup Students (search student table)
- Can Lookup Instructor (search departmental_instructor table)
- Can Lookup Staff (search staff table)
- Can Lookup Managers (search timetable_manager table)
- Can Lookup Event Contacts (search event_contact table)
- Can Lookup Ldap (query LDAP directory, if configured)
- By default, all roles that can use the People Lookup dialog can search through all the sources.
- On the personal schedule (event management), if another person is looked up, the new permissions
are also used to filter the role:- Can Lookup Students is needed for the Student role (person is enrolled in a class, an exam, or
a course related event as a student). - Can Lookup Instructors is needed for the Instructor and Coordinator roles (person is assigned
to a class or an exam as an instructor or coordinator). - Can Lookup Event Contacts is needd for the Contact role (person is listed among contacts of
the event).
- Can Lookup Students is needed for the Student role (person is enrolled in a class, an exam, or
UniTime RESTful API
- UniTime now offers a number of RESTful APIs (many of which have been merged back to UniTime 3.5
and 4.0), using JSON messages. - Most APIs are for getting data out of UniTime, but there are a few exceptions.
- Following conntectors have been created so far: (including UniTime 3.5 and 4.0)
- /api/events: ability to retrieve events (using the EventInterface class converted to JSON,
example: GET UniTime/api/events?type=PERSON&ext=1001&term=Fal2010) - /api/json: JSON interface for GWT calls (that implement the GwtRpcRequest interface)
- /api/exchange: to export/import UniTime's data exchange XML files
- export example: GET UniTime/api/exchange?term=Fal2010&type=students
- import example: POST UniTime/api/exchange (with the XML as payload)
- /api/roles?id= returns a list of academic sessions (and roles) for a person
(returns a list of academic sessions when there is no id parameter) - /api/enrollments?eventId= returns student enrollments for an event, a class (when classId
parameter is used instead), an exam (examId), a course offering (courseId), an instructional
offering (offeringId), or instructional offering configuration (configId) - /api/instructor-schedule?id=&term= returns classes, courses, and
examinations assigned to an instructor. - /api/class-info?classId= returns information about a class (including assinged instructors
and coordinators)
- /api/events: ability to retrieve events (using the EventInterface class converted to JSON,
- Following conntectors are only available in UniTime 4.1:
- /api/rooms: ability to retrieve rooms (using RoomDetailInterface class converted to JSON,
example GET UniTime/api/rooms?r:building=EDUC)- The rooms API can be also used to create, update and delete rooms and to retrieve, upload
and delete room pictures.
- The rooms API can be also used to create, update and delete rooms and to retrieve, upload
- /api/sectioning: online student scheduling api (covering all functionality of the
SectioningService)- The SectioningService is used by the Online Student Scheduling Assistant and the Online
Student Scheduling Dashboard pages. - Example: POST UniTime/api/sectioning?term=Fal2010&studentId=1001&operation=section (with the
payload containing course requests and optionally the previous student schedule).
- The SectioningService is used by the Online Student Scheduling Assistant and the Online
- /api/rooms: ability to retrieve rooms (using RoomDetailInterface class converted to JSON,
- Each connector has the appropriate permission (see Api... permissions), with the ability to
either use HTTP-simple authentication or an API token. - It is possible to change the hibernate cache mode for a particular API connector by setting the
unitime.api.X.cacheMode application property (where X is the connector name).- For example, setting unitime.api.enrollments.cacheMode=REFRESH will make the /api/enrollments
connector to never read the hibernate cache, but it will keep it updated.
- For example, setting unitime.api.enrollments.cacheMode=REFRESH will make the /api/enrollments