Version 9.1.203 (19 January 2026)
System Access
Update email confirmation logic for user import and update to allow a user without an email to login (#142626)
Problem
- A user without an email address cannot log in because the email has not been confirmed.
Solution
- In ImportUsersCommandHandler, email is now considered confirmed if the user has no email address. In UpdateUserCommandHandler, email is always marked as confirmed. These changes ensure consistent handling of email confirmation status during user import and update operations.
Imports
Change Import Modal to only fetch import status and available imports when opened (#138821)
Problem
- Currently, on every page, navigation checks are done on the import status being retrieved
Solution
- Change to only load the import status when being opened
Job Management
Resolved positions not loading the correct filter type (#140550)
Problem
- When job profiles are loaded, icons indicate the count of vacant, filled and inactive positions, but once clicked, it results in all positions
Solution
- Implement new development to list positions based on the filter type
Resolved sanitise text on reporting line (#142578)
Problem
- The title of the span is being set and used from JavaScript to set the modal title. When the title of the modal is set, it gets set with the encoding values when HTML is rendered
Solution
- Add a change to set the modal title as raw text to not be encoded
Report Builder
Resolved data source width expand and console error on invalid ajax json (#140432 & #141369)
Problem
- On Firefox, the expand click event did not trigger from SVG find, script issue on Firefox that does not allow inline events CSP* Console errors being logged when JSON is passed, which is HTML for partial views
Solution
- Add a change to rather just check for class collapse, move the event handler to the JavaScript file. Add a change on ajax.ts to handle JSON to not parse, should it be HTML and rather warn than error
Resolve issue where race condition on Ruleset creation prevents initial user from materialising on ReportBuilder (#140410)
Problem
- When a new ruleset is created, the ruleset creation is requested on each service sequentially. However, the user is copied to the new ruleset as soon as the ruleset is created, and then the SingleUser event is emitted, which informs all other services to materialise the user. This creates a race condition where the SingleUser create event reaches ReportBuilder before the ruleset creation has happened, and because of the foreign key relation between the materialised user and materialised ruleset table on RB, the user creation fails, and the first ruleset user is never created.
Solution
- Added additional functionality on the RulesetCreation on ReportBuilder, after the ruleset has been materialised, to check if there exist materialised users and then fetch all current users for the ruleset from Account Service and materialise them immediately
Performance Management
Reload page when user contract is deleted (#142780)
Problem
- Page reloads only if an additional contract is deleted
Solution
- Add a change to reload the page after the primary contract deletion
Resolve issue where bulk actions are not displaying all users (#142546)
Problem
- On bulk actions, the list of people displayed on the select list does not include all the available users, because only the first 20 users are filtered out when fetching details from JobProfiler, and then those with contracts or for the review year setup aren't all returned.
Solution
- Change functionality to the first page for users from performance management, then after selecting job details. Fixed the load more / load all functionality
Add loading indicator when creating contract (#142777)
Problem
- When creating a contract for a review setup, no loading indicator
Solution
- Add loading indicator
Resolve order of review setup names (#141701)
Problem
The order causes the numeric values to be incorrectly ordered, for example, Setup 1, Setup 10, Setup 2
Solution
Add change to the comparison to take numbers into consideration
Identity
Enhance MFA process with option to remember (#134730)
Solution
- Add change and enhancement to the MFA process. Add input to allow ruleset to change the number of hours to remember MFA, should they wish
People Management
Optimise user org path queries and improve appointment selection when calculating people group users (#142962 & #142233)
Problem
- A user with an active and future-dated appointment has an incorrect future status in the calculated people group, and the user is excluded from the TA where it is used.
Solution
- Refactored user org path queries to use temp tables and bulk copy for efficiency, and improved appointment selection logic to better prioritise current appointments. Updated related PeopleGroups queries and gRPC service to handle distinct user IDs and avoid unnecessary queries.
Fix uploading profile image, causing user banner to be removed (#142688)
Problem
- Uploading a profile image causes the user's banner to be removed.
Solution
- Use the existing profile image if one is provided.
Fix banner not updated if you upload a new one (#142688)
Problem
- If you open the modal to change a person's banner and/or profile image and then upload a new banner image, that banner image will not be set as the new banner image for the person. The first time you select it, nothing will happen, but if you select it a second time, the banner is updated.
Solution
- Return uploaded banner image details and set them so that they can be used when the image is saved.
Remove functionality to copy profile image and avatar for transferring the user to the ruleset (#142521)
Problem
- Profile image and avatar should not be copied to the new user with transferring the user to a new ruleset
Solution
- Remove functionality to copy profile image and avatar for transferring the user to the ruleset
Resolve search and collapse problem on Orgnode tree on transfer person to ruleset modal, and prevent transfer of user with same ID number in destination ruleset (#142696 & #142694)
Problem
When searching for organisations, the treeview populates duplicates. Able to transfer a person with Idnumber that already exists on the destination ruleset
Solution
Resolve the search and collapse problem on the Orgnode tree on transferring a person to the ruleset modal. Prevent transfer of the user with the same ID number in the destination ruleset
Notifications
Cannot send a list of CC or BCC recipients via the external email API (#142336)
Problem
- When more than one CC or BCC email address has been configured on V8, V9 do not send any emails
Solution
- Correct the concatenation of the list of emails to allow the SMTP service to process them
Data Warehouse
Implemented Performance Improvements within PerformanceManagement_ETL.dtsx (#140865)
Problem
- Performance Improvements are required within the SSIS Package PerformanceManagement_ETL.dtsx due to the growth of system data and the DWH Package
Solution
- Removed the DELETE and Truncate Steps and replaced them with Update and Inserts for the below Data Sources: pdmContracts, pdmContractSurveys, pdmContractPeriods, pdmContractPeriodActionPlans, pdmContractPeriodSectionItems, pdmReviewYears, pdmContractPeriodEvaluations, pdmReviewYearPeopleGroupsSetup, pdmContractPeriodSectionItemModerations
- Adjusted steps for Custom fields calculations/insert for pdmContracts and pdmContractPeriods to only do this for active Contracts/ContractPeriods
Added new Join between jpAppointments and jpJobProfiles (#142103)
Problem
- Join are required between jpAppointments and jpJobProfiles
Solution
- Added Join between Appointments and JobProfiles for Report Builder
Implemented Performance Improvements within LearningManagementReport_ETL.dtsx (#140865)
Problem
- Performance Improvements are required within the SSIS Package LearningManagementReport_ETL due to the growth of system data and the DWH Package
Solution
- Removed the DELETE and Truncate Steps and replaced them with Update and Inserts for the below Data Sources: - lmAttendances - lmReportCards