# Version 9.1.208 (9 February 2026)

#### **Performance Management**

##### Error when adding a review setup without a name (#143965)

**Problem**

- The user gets an error when they add a review setup without a name.

**Solution**

- Make the name field a required property and give the custom sanitised input elements a required tag, which renders the required appearance

##### Fix event handlers being removed globally after page help is selected (#143965)

**Problem**

- After selecting the page help icon within the modal, it removes all click event handlers on buttons, etc.

**Solution**

- Corrected to make specific before removing click events

##### Resolved order of impersonating user route value (#143573)

**Problem**

- The route path expects the primary contract, then the impersonated user, whereas it is being supplied in reverse
- When the allow upload is checked, GRPC throws a valid exception that needs to be caught

**Solution**

- Corrected the order of path variables provided.
- Catch error and return a valid response

---

#### **Competency Analysis**

##### Fix popover, where the text is displayed in bold (#121394)

**Problem**

- The competency description popover displays in bold

**Solution**

- Ensure the popover text does not display in bold

---

#### **Ruleset Setup**

##### Created a script to dynamically delete data from Ruleset (#143128)

**Problem**

- Cannot dynamically delete data from Ruleset

**Solution**

- Implemented a new script to Archive and then delete data of a ruleset by id

##### Resolve URL sanitisation on multiple tabs (#143741)

**Problem**

- Cannot save on the system access, widgets and integration tabs

**Solution**

- Corrected the URL sanitisation on the system access, widgets and integration tabs
- Moved allowed domains configuration to ruleset 1

---

#### **Data Warehouse**

##### Updated Script for DWH Weekly Integrity Report (#142737)

**Problem**

- Script monGenerateDWHDataIntegrityReport needs to be updated for data source accDisciplinaryActions

**Solution**

- Updated Script monGenerateDWHDataIntegrityReport to update accDisciplinaryActions missing section to align with DWH Source Script

##### Created new Datasource cmNextCloudContents (#143697)

**Problem**

- New dataSource cmNextCloudContents is required within the DWH

**Solution**

- Created new Datasource cmNextCloudContents
- Created new SSIS Package ContentManagement\_ETL

##### Adjusted SQL Query C\_03712\_99999\_monitorDWHPackageResultsReport.sql (#143261)

**Problem**

- Adjustments need to be made to C\_03712\_99999\_monitorDWHPackageResultsReport.sql

**Solution**

- Adjusted script to exclude PackageLog.dtsx and select from WINDSORHYBRID

##### Updated accChats due to Refactor for Communication Portal (#143780)

**Problem**

- The package for accChats failed due to a refactor being done for the Communication Portal

**Solution**

- Adjusted source script with accChats to use new tables from the Communication Portal

##### Removed ReportCard fields within lmStudentSubjects and lmTermResults (#112511)

**Problem**

- The ReportCard fields are not required anymore within lmStudentSubjects and lmTermResults, as this is available within lmReportCards

**Solution**

- Removed ReportCard fields within lmStudentSubjects and lmTermResults

##### Updated Container for jpHRProcessRequestData (#143579)

**Problem**

- The jpHRProcessRequestData Update process did not work correctly

**Solution**

- Changed the update back to Truncate and Insert to ensure the data is being inserted correctly for jpHRProcessRequestData

##### Adjustments made within V9FullRefresh updates (#143176)

**Problem**

- When the V9 DWH are deployed to Production, the full refresh should not be updated for the afternoon run

**Solution**

- Updated Full Refresh steps to only update after 12 pm if the DWH package is deployed on Production during the morning

##### Updated Source Query for PackageLog.dtsx (#143261)

**Problem**

- PackageLog.dtsx needs to be excluded from PackageLogs

**Solution**

- Updated Source Query to exclude package\_name 'PackageLog.dtsx'

---

#### **Report Builder**

##### Added extra filter cases for datetime2 and adjusted filter for "Choose a specific date" (#142737)

**Problem**

- The filters, when using datetime, did not filter correctly
- "Choose a specific date" required conversion for certain scenarios

**Solution**

- Added extra filter cases for datetime2
- Adjusted filter for "Choose a specific date"
- Removed smalldatetime as we do not use this currently

---

#### **Notifications**

##### Resolved Properties not being replaced correctly (#143598)

**Problem**

- With the new masked property development done, once a property exists both for mask and non-mask, it will always just replace masked property values, keeping the placeholder for the property name

**Solution**

- Add a change that should we identify it is masked, do an extra check if there is any placeholder without the masked property to also update and replace

---

#### **People Management**

##### Remove previous validation messages and classes when selecting values for position and org. Resolve timeout on org node treeview (#143806)

**Problem**

- Validation messages are not removed immediately after selecting values, only after the form is posted.
- A timeout occurs when opening the org tree structure in the position transfer page.

**Solution**

- Remove previous validation messages and classes when selecting values for position and org.
- Also noticed while testing the bug, the org tree times out.
- Added a recompile option on the query, as the query runs fast in SSMS

##### Improve error messages for overlapping appointments (#143328)

**Problem**

- When adding a new appointment, editing an existing appointment or transferring the use,r the error message provides unspecific information to the user when it overlaps with a current appointment for the user themselves or on another position for another user

**Solution**

- Add new error messages for the overlap with more details of the user and the appointment that is overlapping.
- Remove duplicate code and improve error message handling.
- New error messages: 
    - Appointment overlaps with the user's own current appointment on position {{PositionTitle}} from {{AppointedFromDate}} to {{AppointedToDate}}. An appointment already exists for position({{PositionTitle}}) from {{StartDate}} to {{EndDate}} for user {{Username}}.

##### Always include default avatar images on the list of available avatar options (#135931)

**Problem**

- The default list of avatar images is not shown.

**Solution**

- The previous fix was reverted with the merge
- Restored solution to always fetch default avatar images

---

#### **Imports**

##### Add API call to v8 to delete appointment history (#143323)

**Problem**

- When an appointment is deleted in V9, the Appointment history is not deleted in V8.
- There was a request to add an API endpoint in V8 (Already merged) and an API call in V9 to ensure the Appointment History is deleted.

**Solution**

- Add new functionality in the import service to delete Appointments based on a List of IDs.
- This endpoint is generic and can also be adjusted to work for various other types of items, for example, job profiles.

---

#### **Communication Portal**

##### Resolved member count error (#143761)

**Problem**

- When selecting room members, this will return a view of users within the group, but still used old table for members

**Solution**

- Corrected query to select the room members

##### "Create New" button scrolls with the chat list (#143763)

**Problem**

- The new button is positioned absolutely within a relative container, causing the render to work, but as content gets shown from the accordion button is scrolled alongside container

**Solution**

- Adjust to render outside the modal body, which is not within the relative container that makes it to the modal position itself

##### \[PM\] Cannot return to the list of chats if you've sent a message from within a person's agreement (#143858)

**Problem**

- When inside a PM contract, discussion is open, which calculates to create a new discussion and not open discussion list, but once navigated back to the dashboard, a REACT change occurred, and no page redirect in MVC, which does not reset the content for the modal and the bool value is allowed to just reopen the modal as no 'context' has changed

**Solution**

- Add route value to be saved alongside the opening of the modal, so that should the route change, navigate inside REACT the portal will force reload if it is different from when opened in another context

---

#### **People Groups**

##### Add 'LastRefreshed' to list ruleset people groups (#143598)

**Problem**

- When a V8 menu is clicked, and the user's data is imported, then the peoplegroups linked to a user are also imported as subgroups, and their users are linked
- When more than one user is imported that has the same PGs linked to them, the PG data is unnecessarily fetched from V9, causing the PG calculation to use unnecessary resources

**Solution**

- When the PGs linked to a user are fetched, return the last refreshed date for the PG also
- Only fetch PG users then for the linked PGs where the last refreshed date is after the last edit of the people group users on V8
- This will limit unnecessary calls to the Peoplegroup users

---

#### **Learning Management**

##### Filter MaterialisedPeopleGroupUsers to only show active people on the PG on the attendance and marksheet page. When inheriting, marks only inherit from people who are an active part of the PG (#143629)

**Problem**

- On the attendance and mark sheets, inactive users are also included who are part of the PG

**Solution**

- Change to not take People condition for a user into account when the person is terminated
- The person will not be part of the people group users, and the count on the list of people items will not count this item
- Do not show terminated people on the attendance or attendance detail pages
- When marks are inherited, do not inherit marks from previous for terminated users in the subject's people group

---

#### **Content Management**

##### \[Image Resources\] \[Translation\] Translation for "Image Type" is missing (#143740) 

**Problem**

- Missing translations in the file type

**Solution**

- Added translation for field

##### \[Image Resources\] Preview not available when uploading a GIF file (#143783) 

**Problem**

- Restriction has been implemented to only compress image types, which excludes SVG and GIF files. Because of this, it does not render a compressed image and shows no preview available, which can cause confusion and seem like an error

**Solution**

- Adjust the flow to handle the null value of compressed to then not show the selection of image type, which results in the original image being selected

##### \[Image Resources\] \[Suggestion\] Streamline upload modal (#143736) 

**Problem**

- No clear indication as to why there is a choice or reason

**Solution**

- Add a label to indicate to select an image, move the compressed to the first selection and add a subtext to indicate the reason for the selection

##### \[Image Resources\] Display loading indicator after selecting an image (#143734) 

**Problem**

- When a file is selected, a new fetch call is made to retrieve the image and the compressed file; this does not trigger the ajax load to trigger a loader

**Solution**

- Add a new implementation to trigger a global event so that a loader is shown and then removed when the result is received

---