Version 9.1.264 (20 October 2026)
Data Warehouse
Added ApproverPeopleGroupName fields within jpHRProcesses (#156250)
Problem
- ApproverPeopleGroupName fields need to be added within the HRProcesses data source
Solution
- Added Approver1PeopleGroupName - Approver10PeopleGroupName fields within HRProcesses
Event Scheduling
Fix document upload modal saves without a document being attached (#156959)
Problem
- The document upload modal saves when no files are selected.
Solution
- Add front-end and back-end validation to prevent this. While testing, I also saw that you can copy invoice info if there is nothing to copy. Disabled the copy button in that instance too
Fix copied Events do not have Notification Templates (#156169)
Problem
- Copied Events do not have Notification Templates
Solution
- When copying events, the event that populates event notification records for that event was never called. Ensure it is called, similar to when a new event is created. Co-authored-by: William
Fix the system displays an error when a user accesses the Notification Tab of an Event (#156919)
Problem
- The request returned 404 because the action was missing its route template.
Solution
- Added [HttpGet("GetNotificationTemplates/{eventScheduleId:int}")] to match the URL and bind the schedule ID.
HR Processes
Move Landbot to run in an iframe with its own CSP policy (#156958)
Problem
- Recent CSP changes caused Landbot not to run webhooks because of blocked unsafe-evals.
Solution
- Moved Landbot to run in an iframe with its own CSP policy
Identity and Authorisation
Added correction handling in authentication within SPA render (#148859)
Problem
- After a user leaves the React SPA page idle for a long time, their login token expires.
- When they click something afterwards, the server recognises that the token is no longer valid. However, instead of sending the user back through the login process, the server treats it as a React page failure and displays: Error rendering SPA
- Refreshing works because the failed request has already cleared the expired login information.
Solution
- The application now recognises an expired login as an authentication problem rather than a React rendering problem.
- When the session expires:
- The expired login information is cleared
- The user is redirected through the normal login process
- The page they were using is remembered
- After signing in, they are returned to that page
- A manual refresh is no longer required.
Revoke login sessions on logout and enforce absolute expiry (#156614)
Problem
- Logging out removed the browser's login, but a copied cookie or token could still work until it expired.
- An existing live connection could also stay open. Refresh must keep the original login deadline and must never restore a logged-out session.
- The checks also need to avoid querying the user database on every request.
Solution
Imports
Add a step to create user dates during the import when they do not yet exist for the user being imported. (#152447)
Problem
- When importing a new user, they do not have user dates yet, and then the company dates received are never imported
Solution
- Add logic to insert new user company date records only when they do not already exist.
Job Profiler
Warning messages for Select Another Approver and Escalate (#156435)
Problem
- Select Another Approver and Escalate on the HR Process Requests did not display the warning message when already actioned.
Solution
- Added checks to display a warning message when a level was already escalated or another approver was selected
Org Structure
Corrected an out-of-memory exception when loading more than 500 child nodes (#156780)
Problem
- When a parent org node has more than 500 child nodes, an out-of-memory exception occurs
Solution
- Adds server-side pagination for org node queries with skip/take and hasMore metadata, and updates the admin org structure tree to fetch additional nodes lazily via a Load More item.
- This keeps large org trees responsive while preserving the existing structure and search behaviour. Limit the load of the org nodes to 200 with a load more option
Resolved modal being behind backdrop (#156411)
Problem
- When editing an org node and selecting a reporting-line manager, the manager picker opens on top of the org-node modal.
- Because both are modals, the dark overlay/backdrop was being layered incorrectly.
- The overlay could end up sitting above the manager picker, which made the picker look open but prevented the user from clicking or interacting with it.
Solution
- Adjusted the modal layering so that, when the manager picker opens from inside the org-node modal, the screen layers are ordered correctly:
- Org-node edit modal stays in the background.
- A backdrop appears above the org-node modal.
- The manager picker appears above that backdrop.
- This keeps the visual separation between the two modals while allowing the manager picker to remain fully clickable and usable.
People Management
Restrict access to profile summaries (#156426)
Problem
- An authenticated user could read another person's profile summary without permission, including personal and identity information.
Solution
- Apply the existing profile access check before loading the summary or returning cached data.
- Preserve access for the person themselves, authorised administrators and permitted people-group managers.
Corrected reporting line href ref (#156979)
Problem
- When in the summary and reporting lines are selected, it does not pan to the ref as the ID is missing
Solution
- Added missing ID
Resolve disciplinary actions menu not shown for other users for manager with People group permission and ruleset additional section admin setting (#156778)
Problem
- Manager can't access the disciplinary actions menu even though the manager has People group permission to do so
Solution
- Resolve the disciplinary actions menu not showing for other users for managers with People group permission and the ruleset additional section admin setting. This is because the Self Service setting is used as well if the manager views other people's profiles
Add tooltip to Recycle bin tab (#156741)
Problem
- Add a tooltip on the Recycle Bin Tab hover
Solution
- The system should display a Tooltip on Delete Business Rules. Example: "All Personal Records will be permanently deleted"
Restrict access to employee profiles (#156617)
Problem
- A logged-in user could change the user ID in `/Account/People/GetUser` to view another employee's profile without having permission to view that person. Being logged in was checked, but access to the requested profile was not.
Solution
- Check access before loading a full profile or returning a cached profile response. A person can view their own profile, or another employee's profile when they have an authorised management group covering that employee or a people/ruleset administrator role. Retrieval remains limited to the logged-in user's ruleset.
Optimistically remove deleted/restored users from people management list to cater for replication delay. (#156047)
Problem
- The system does not Remove/Restore the records immediately. The refresh delay gives the Impression that the Action failed.
Solution
- Optimistically remove deleted/restored users from the people management list to account for replication delay.
Performance Management
Resolved translation (#156942)
Problem
- Incorrect translation
Solution
- Corrected Translation
Implemented template state to indicate draft and awaiting approval (#156942)
Problem
- Request made to only allow an admin to mark a template as published once the manager who was given access submits it for approval,
Solution
- To accommodate all other clients as well, a draft and approval state was introduced; only when a manager has been given access will this be set to the draft state, which does not allow the admin to mark the template as published until the manager says send for approval
Added change to date time relevant display calculations (#156060)
Solution
- Request was made to change the relevant display dates of months ago and so: Added reusable C# calculation/formatting helper; updated Review Setup “last edited” tooltips; refactored the shared employee/manager dashboard hook
Added cache-bustable methods for moderation (#156917)
Problem
- After moderation was done, the same result list was returned from the cache, which was not busted
Solution
- Added bustable methods to ensure the previous result set gets busted
Report Builder
Corrected export of datetime not taking culture and During not working (#156791)
Problem
- Exported report dates did not respect the user’s regional settings.
- For example, a user using UK formatting could receive dates displayed in the US order. Two issues affected date-range filters:
- Date ranges could not be selected or edited correctly. On the View Report page, one date showed as invalid or the second date picker did not work. On the Add/Edit Report page, selecting a specific date range triggered a save but prevented the dates from being selected.
- Once date ranges were recognised correctly, the filter table became misaligned. The second-value column changed the available space, causing headings, switches, and delete buttons to move out of position.
Solution
- The user’s culture is now passed through the complete export process. Excel dates remain genuine date values, so sorting, filtering, and formulas continue to work, while Excel displays them using the user’s preferred date format. The date-range controls were corrected so both start and end dates can be selected and updated. The translated “and” separator is now available, and the existing date format is preserved. The filter table’s original behaviour was retained: the second-value column only appears when required. When it appears, all columns resize evenly so the headings and controls remain aligned.
SignalR
Add defensive guard inside UserNotificationHub (#150816)
Problem
- When a client connects to the SignalR hub before its JWT is established — or when any unauthenticated WebSocket connection calls SubscribeToUserNotifications — User.FindFirst(UserIdClaim) returns null, and the exception fires unconditionally. Neither the hub class nor the method has an [Authorise] attribute, and there is no _identityService.Authenticated guard before the claim read. UnsubscribeFromUserNotifications() (lines 41–47) has the identical vulnerability.
Solution
- This pull request refactors the logic for subscribing and unsubscribing users to notification groups in the UserNotificationHub by extracting group resolution into a new helper method. This improves code reuse and error handling for authentication and group assignment.