<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" media="screen" href="git-log.css"?>

<log>
  <title>UniTime v4.9 build 169 change log (since the last release, build 164 on 01 Nov 2026 02:00)</title>
  <logentry revision="3e44cce">
    <commit>3e44cce7096d7efe011b9ca624dad4adc6420798</commit>
    <author>Tomáš Müller &lt;muller@unitime.org&gt;</author>
    <date>13-Nov-2026 1:21 PM</date>
    <subject>Release Notes: Session Roll Forward</subject>
    <msg>- added information about the new session roll forward ability to merge/restart roll forward at (almost) any step of the process</msg>
  </logentry>
  <logentry revision="a65eb12">
    <commit>a65eb125d4845b918421be101fd50f7de252336f</commit>
    <author>Tomáš Müller &lt;muller@unitime.org&gt;</author>
    <date>13-Nov-2026 1:18 PM</date>
    <subject>Roll Forward Session: Class Instructors Fix in the new CopyBetweenSessionHelper</subject>
    <msg>- Roll Forward Class Instructors: avoid duplicate entries to be created when creating new class instructors</msg>
    <msg>(if hibSession.persist(classInstructor) is not called implicitly, Hibernate will persits the instructor two times, once from the instructor and once from the class relation)</msg>
  </logentry>
  <logentry revision="df97b8a">
    <commit>df97b8aaf4895acacacf4c71d1c09e2b56a238e9</commit>
    <author>Tomáš Müller &lt;muller@unitime.org&gt;</author>
    <date>13-Nov-2026 1:09 PM</date>
    <subject>Session Roll Forward</subject>
    <msg>- added an ability to merge/restart roll forward at (almost) any step of the process</msg>
    <msg>- not enabled by default, set unitime.rollforward.allowForMerge=true for the new procedure (using CopyBetweenSessionHelper)</msg>
    <msg>- improved speed of examination roll forward</msg>
    <msg></msg>
    <msg>Squashed commit of the following:</msg>
    <msg></msg>
    <msg>commit a161f6465694e067b35066c0610f8faf9b67ee24</msg>
    <msg>Author: Tomáš Müller &lt;muller@unitime.org&gt;</msg>
    <msg>Date: Thu Oct 22 15:11:15 2026 +0200</msg>
    <msg></msg>
    <msg>Session Roll Forward: Exams</msg>
    <msg></msg>
    <msg>- roll midterm and final examination much faster by pre-loading all the owner mappings</msg>
    <msg></msg>
    <msg>commit 19193faf9db33967a5538ad964be70cb5a463b5a</msg>
    <msg>Author: Tomáš Müller &lt;muller@unitime.org&gt;</msg>
    <msg>Date: Thu Oct 22 15:09:39 2026 +0200</msg>
    <msg></msg>
    <msg>Session Roll Forward: CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>- make sure that the iMergedSession is always loaded (not already flushed or cleared out by a previous operation)</msg>
    <msg>(fixing detached entity passed to persist)</msg>
    <msg></msg>
    <msg>commit cabdb8f4303876e8dfe5fdd865e691130455bbf5</msg>
    <msg>Author: Tomáš Müller &lt;muller@unitime.org&gt;</msg>
    <msg>Date: Wed Oct 21 09:17:20 2026 +0200</msg>
    <msg></msg>
    <msg>Session Roll Forward</msg>
    <msg></msg>
    <msg>- additional changes and fixes</msg>
    <msg>- allowing for re-roll for other items like offering coordinators or teching requests</msg>
    <msg>- a few fixes that has been already done in the original roll replicated to the CopyBetweenSessionHelper</msg>
    <msg>(set room index for room-related prefs, travel times, transaction per subject, etc.)</msg>
    <msg>- code cleanup</msg>
    <msg></msg>
    <msg>commit 59439da49d912c2a70f279f94d931c41185e47d1</msg>
    <msg>Author: Tomáš Müller &lt;muller@unitime.org&gt;</msg>
    <msg>Date: Wed Sep 23 19:03:15 2026 +0200</msg>
    <msg></msg>
    <msg>Session Roll Forward</msg>
    <msg></msg>
    <msg>- added ability to use both the old and the new roll forward</msg>
    <msg>- set unitime.rollforward.allowForMerge=true for the new (using CopyBetweenSessionHelper)</msg>
    <msg>- initial testing and a few fixes</msg>
    <msg>- added merge for class instructors</msg>
    <msg>- ignore exiting data in the validations when merging is enabled</msg>
    <msg>- consider associated course settings when merging course offerings</msg>
    <msg>- fixed cascade error when deleting offering classes</msg>
    <msg>- consider selected departments when merging instructor data</msg>
    <msg></msg>
    <msg>commit 8269fa9ed98ba3138460dc17a913257bb014eb7b</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Mon Sep 21 19:05:37 2026 -0400</msg>
    <msg></msg>
    <msg>Session Roll Forward</msg>
    <msg></msg>
    <msg>Updated to work with GWT session roll forward</msg>
    <msg></msg>
    <msg>commit 204ac8930a225b1f74ee55073959b7d11648329a</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Mon Dec 1 14:01:50 2025 -0500</msg>
    <msg></msg>
    <msg>Update CopyBetweenSessionHelper.java</msg>
    <msg></msg>
    <msg>Added Flush Statements</msg>
    <msg></msg>
    <msg>commit 9c8b3d391a50090fb1f50306612becd48772cbde</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Fri Jun 13 14:47:38 2025 -0400</msg>
    <msg></msg>
    <msg>Roll Forward Updates</msg>
    <msg></msg>
    <msg>Changed Class Instructor Roll Forward to us Copy Between Session Helper</msg>
    <msg></msg>
    <msg>commit 75542f2c49573dc10ed85592686cea81b97fc2ab</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Tue Jun 10 11:35:14 2025 -0400</msg>
    <msg></msg>
    <msg>Update CopyBetweenSessionHelper.java</msg>
    <msg></msg>
    <msg>Added back working with course catalog information</msg>
    <msg></msg>
    <msg>commit d57316471f7c012e716bce95c11f49df9574456f</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Wed Jun 4 11:34:29 2025 -0400</msg>
    <msg></msg>
    <msg>Update DistributionPref.java</msg>
    <msg></msg>
    <msg>findByIdRolledForwardFrom modified to return DistributionPref with the lowest uniqueId if multiple distribution prefs are found.</msg>
    <msg></msg>
    <msg>commit 4516f73136724791ef5d5739f101dec9bad32c39</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Thu May 29 14:24:03 2025 -0400</msg>
    <msg></msg>
    <msg>Update SchedulingSubpart.java</msg>
    <msg></msg>
    <msg>Change to deleteAllDistributionPreferences to ensure artifacts of deleted PreferenceObjects do not exist in the hibernate session.</msg>
    <msg></msg>
    <msg>commit e2db026fd0dd8b253582c972b670ee6bbfc0d322</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Thu May 29 14:23:45 2025 -0400</msg>
    <msg></msg>
    <msg>Update Class_.java</msg>
    <msg></msg>
    <msg>Change to deleteAllDistributionPreferences to ensure artifacts of deleted PreferenceObjects do not exist in the hibernate session.</msg>
    <msg></msg>
    <msg>commit 5de54c5cd35016aacd8a8ff238494fd21e5e47eb</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Wed May 21 12:21:56 2025 -0400</msg>
    <msg></msg>
    <msg>Update InstructionalOffering.java</msg>
    <msg></msg>
    <msg>Updated deleteAllClasses method to remove each class from its parent and child classes.</msg>
    <msg></msg>
    <msg>commit c3eacd3be60eb12ab545791bfe0ba5fe2cfde91a</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Thu Apr 17 11:19:23 2025 -0400</msg>
    <msg></msg>
    <msg>Update CopyBetweenSessionHelper.java</msg>
    <msg></msg>
    <msg>Continuing to transition roll forward functionality to use CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>commit c8d86fcbfa27cbec6c2a3d64acb442a9475490d0</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Wed Apr 16 11:34:50 2025 -0400</msg>
    <msg></msg>
    <msg>CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>Continuing to transition roll forward functionality to use CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>commit b6afaa7f904b1ee7a3363fb38247486123487c9f</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Tue Apr 15 17:04:04 2025 -0400</msg>
    <msg></msg>
    <msg>CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>Continuing to transition roll forward functionality to use CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>commit e28fb5823e8979f1eb0cfc1797a54fdf20953139</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Tue Apr 15 16:25:28 2025 -0400</msg>
    <msg></msg>
    <msg>CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>Continuing to transition roll forward functionality to use CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>commit 6c9de0f59ec46bbf23393e4d96047eac36c4be11</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Tue Apr 15 15:58:13 2025 -0400</msg>
    <msg></msg>
    <msg>CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>Continuing to transition roll forward functionality to use CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>commit ed3812631d9126f04ce878a5f8d45bbb283c14c9</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Tue Apr 15 14:03:05 2025 -0400</msg>
    <msg></msg>
    <msg>CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>Continuing to transition roll forward functionality to use CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>commit 8bb60b8029ad9a05770115bf4341a5554b7908d3</msg>
    <msg>Author: says0528 &lt;says@unitime.org&gt;</msg>
    <msg>Date: Mon Apr 14 10:16:43 2025 -0400</msg>
    <msg></msg>
    <msg>CopyBetweenSessionHelper</msg>
    <msg></msg>
    <msg>Created CopyBetweenSessionHelper and started to transition roll forward functionality to use CopyBetweenSessionHelper</msg>
  </logentry>
  <logentry revision="3684213">
    <commit>3684213d135f434dbb88b4b7189678c95defea44</commit>
    <author>Tomáš Müller &lt;muller@unitime.org&gt;</author>
    <date>13-Nov-2026 1:06 PM</date>
    <subject>XML Interfaces</subject>
    <msg>- added a README file that contains the same information as help.unitime.org/xml</msg>
  </logentry>
  <logentry revision="8f8a178">
    <commit>8f8a17841b56957584b89794643eb126c9236818</commit>
    <author>Tomáš Müller &lt;muller@unitime.org&gt;</author>
    <date>11-Nov-2026 8:23 PM</date>
    <subject>Data Exchange: Instructors, Rooms</subject>
    <msg>- added XML export and import for instructors and rooms</msg>
    <msg>- unlike the existing Staff and Buildings &amp; Rooms XML imports, the instructors and rooms are updated directly</msg>
  </logentry>
  <logentry revision="5fe5d38">
    <commit>5fe5d383a4e69b8e8118ce3a34bc7fca5c7ba1c9</commit>
    <author>Tomáš Müller &lt;muller@unitime.org&gt;</author>
    <date>10-Nov-2026 3:52 PM</date>
    <subject>Course Details: Banner9 Catalog Customization</subject>
    <msg>- fix an issue caused by a recent API change in /qapi/catalog-course-requisites-and-equivalents</msg>
    <msg>prerequisites.coursePrerequisite.prerequisite.basicPrerequisites.requirement may not be set for parenthesis lines</msg>
  </logentry>
  <logentry revision="ef967e4">
    <commit>ef967e46e0f667a90c6b36dc6b4ffcdfdb69fd55</commit>
    <author>Tomáš Müller &lt;muller@unitime.org&gt;</author>
    <date>3-Nov-2026 6:27 PM</date>
    <subject>Instructional Offerings: Filter</subject>
    <msg>- corrected the Date/Time Information toggle</msg>
  </logentry>
  <logentry revision="956731d">
    <commit>956731dd1b6563b3781b6e4a1a5566384e1f5818</commit>
    <author>Tomáš Müller &lt;muller@unitime.org&gt;</author>
    <date>3-Nov-2026 5:43 PM</date>
    <subject>Date Pattern: Number of Weeks</subject>
    <msg>- do not set the number of weeks to zero when the field is left blank</msg>
    <msg>- allow for fractional numbers</msg>
  </logentry>
  <logentry revision="d758f9e">
    <commit>d758f9ea23ae6a1090fb472f93ca78e6ab2a5fc4</commit>
    <author>Tomáš Müller &lt;muller@unitime.org&gt;</author>
    <date>3-Nov-2026 3:58 PM</date>
    <subject>Various Pages: Minor Improvements</subject>
    <msg>Not-Assigned Classes: faster load (when showing data from the database), default page name Not-assigned &gt; Not-Assigned</msg>
    <msg>Not-Assigned Examinations: default page name Not-assigned &gt; Not-Assigned</msg>
    <msg>Application Configuration: add/edit setting text edit fields (Name, Value, Description) use 100% width instead of fixed 1000px</msg>
    <msg>Edit Distribution Type: Description use 100% width instead of 800px (better formatting one smaller screens)</msg>
    <msg>Test HQL: Query use 100% width instead of 800px (better formatting one smaller screens)</msg>
    <msg>Manager Settings: horizontal dashed lines between rows</msg>
  </logentry>
  <logentry revision="effd679">
    <commit>effd6793be574ca7625e55b6b35b2494cc00af94</commit>
    <author>Tomáš Müller &lt;muller@unitime.org&gt;</author>
    <date>2-Nov-2026 7:46 PM</date>
    <subject>Assign Instructors: Back</subject>
    <msg>- scroll to the edited configuration on Save, Back, or Unassign All</msg>
    <msg>- code cleanup</msg>
  </logentry>
  <logentry revision="9bba55d">
    <commit>9bba55d56ddfac1a3eec7a7b6c17dee5842d5c58</commit>
    <author>Tomáš Müller &lt;muller@unitime.org&gt;</author>
    <date>2-Nov-2026 7:45 PM</date>
    <subject>Various Tooltips: Additional Permission Checking</subject>
    <msg>- additional permission checks added for a few backend calls using the command pattern (GwtRpcImplementation), mostly tooltips</msg>
    <msg>- low priority fix: none of the updated backends return any sensitive information, and unique IDs were already required for the call to work</msg>
    <msg></msg>
    <msg>- Course URL and Catalog tooltip (e.g., Instructional Offering Detail or Add/Edit Course)</msg>
    <msg>returning catalog URL and catalog information for a course; now needs Instructional Offerings or Course Catalog permission</msg>
    <msg>not used by default, typically configured to return publicly available course catalog information or construct a link to the course catalog to a 3rd party application</msg>
    <msg></msg>
    <msg>- Class Time Preferences tooltip (various course timetabling pages)</msg>
    <msg>returning the preferences table that shows when time preference is moused over; now need Classes permission</msg>
    <msg></msg>
    <msg>- Examination Period Preferences tooltip (various course and examination timetabling pages)</msg>
    <msg>returning the preferences table that shows when period preference is moused over</msg>
    <msg>now needs Examinations permission</msg>
    <msg></msg>
    <msg>- Room and Building tooltip (various course and examination timetabling pages, student scheduling assistant and events)</msg>
    <msg>returning the room/building details information that shows in the tooltip when a room or a bulding preference is moused over, or when a room is moused over in the events or in the scheduling assistant</msg>
    <msg>now needs Events or Rooms permission</msg>
    <msg></msg>
    <msg>- Instructor Time Preferences tooltip (Instrutors and Instructional Offering Detail)</msg>
    <msg>returning the preferences table that shows when an instructor time preferences or survey time prefences are moused over</msg>
    <msg>now needs Instructors (instructor time prefs) or Instructor Offering Details (survey time prefs) permission</msg>
    <msg>survey time prefs now shows in the mode configured for the Instructor Survey</msg>
    <msg></msg>
    <msg>- Rooms: Room Note History</msg>
    <msg>returning past room note changes for a room; now needs Room Detail permission</msg>
    <msg></msg>
    <msg>- Add/Edit Course Offering: course offering exists check</msg>
    <msg>returning error message (same course already exists) or a blank text when creating/editing course</msg>
    <msg>now need either the Add Course Offering or one of the Edit Course Offering permissions</msg>
    <msg></msg>
    <msg>- Add/Edit Department: returning page properties when add/edit department page is being loaded</msg>
    <msg>content for the various dropdowns including avaiable session statuses, funding departments (when enabled), or academic session name</msg>
    <msg>now needs Department Add or Department Edit permission</msg>
    <msg></msg>
    <msg>- Batch Student Solver Reports, Online Student Scheduling Reports: list of available reports</msg>
    <msg>returning the list of available reports when the page is being loaded; now needs Scheduling Reports or Student Sectioning Solver Reports permission</msg>
    <msg>this allows the Access Denied error message to trigger on page load rather than when a report is selected and executed</msg>
  </logentry>
</log>
