Version 9.1.197 (24 November 2025) Performance Management Moderation breaks when QA is required Problem When the user only has the PM admin role for the moderations, the moderation page breaks due to requiring the user to also have People Admin role when QA is required.    Solution Allow the check for both PM and People admin roles   Sanitisation of review items names (#139392) Problem Adding an "&" to the text input of the review items and saving encodes it as "&". Whenever saving an reloading, another "amp:" is added.    Solution Added sanitisation tag helpers to input and textbox of review item name. image Tested with various special characters. Input also blocks escaping character like "&" as you type.   Check-in dial not being able to be clicked (#140857) Problem To be able to click the check-in dial some conditions must be met, whereas one of them is that the ratings phase should have been started, but should the ignore phase date be active it does not validate this check hence why the dial can not be clicked    Solution Add an either or check to include should the ignore ratings phase be active   Ruleset Management Resolved notification email url generation check Problem When no path specified it uses the correct fallback but when in code it adds new url path with added route    Solution Before returning add an additional check to trim any leading '/'   Resolved theme service MVC route Problem Route incorrectly calculated    Solution Resolve fix for app   Event Scheduling Resolved Base URL for custom domain Problem Incorrect base url configuration key used for custom domain on learning management    Solution Corrected base url   Cost Structure not pulling through after running Training Intervention Cost Import (#139814)  Problem Cost Structure not pulling through after running Training Intervention Cost Import    Solution This happened due to an entity framework error which occurred because entities already tracked were again marked to be tracked. Simplified and improved import logic to not manually track cost description entities   The newly added cost on v9 page wipes out the v8 cost on from the Training Intervention (#140232) Problem The newly added cost on v9 page wipes out the v8 cost on from the Training Intervention    Solution Do no remove costs when deselecting cost descriptions when adding new cost descriptions. Costs can now only be added via the cost description modal and removed (with confirmation) from the table displaying the costs.    Booking Requests do not show up on HR Processes tab (#141033)  Problem Booking Requests do not show up on HR Processes tab    Solution This happened when updating the status of the booking on the admin page. Ensure that hr process requests are also submitted from the admin page when updating the booking status of an attendee.   Show loading indicator for export (#141057) Problem There is no loading indicator when exporting files   Solution Implement change to show loading indicator when doing an export   Decline reason not being populated (#140387) Problem Decline reason not being replaced on email   Solution Corrected templates to have correct placeholders   Email calendar attachment not sending out (#139709) Problem Recipient code missing for the one request, and type request should not be specified on a invite import as outlook see the request as an accept/decline type    Solution Correctly add recipient code and fix the request body   Implemented suggestion and empty list (#139872 & #140253) Problem When there is no data in the table it is blank    Solution Add change to show row with wording indicating nothing to show, also add suggestion to swap admin and manager around   Sync notifications when new event is created (#139835) Problem When a new event is created notifications are only created when confirmed    Solution Change to sync notifications when it has been created   Individuals loading people group target audience (#140249) Problem When having a people group and target audience load, it will load under attendees when switching over to individuals,    Solution Add original check to validate and clear before switching as it will reload when opening target audience on people group again   Auto mark attendance check (#139385) Add new check in fronted to specify the minutes after each session to mark attendance   Syncfusion license error (#139610) Problem At seemingly random times on master a syncfusion license error will occur.    Solution Moved the license registration from App.tsx to Index.tsx to hopefully make it more stable.    Last survey notification not being sent (#140104) Problem Event schedule survey links not being sent for the users    Solution Correct logic to handle per batch of users   Enhancements on the calendar view (#138282, #139847, #139616, #139606) **139282** Change wording on upcoming events if you are not booked - You are not booked on any events Make the Calendar borders lighter **139847** Finalised & Cancelled Event not to display on Calendar View **139616** Show the events in the range that expands. Add the dates as well **139606** Orange dot when not approved but booked Don't show anything when not booked Display [Pending Approval] in the MyUpcomingEvents at the top Show tooltip when hovering over the event showing the status of the event (not booked, booked, pending approval)   Learning Management Update marksheet legend definitions (#141310) Problem Updates to marksheet legend definitions are required.    Solution Updated marksheet legend definitions.   Add ruleset to master data year cache retrieval on class subject save validation (#141224) Problem The retrieval of year master data for when validation is performed on the class subject save, is not taking into account the ruleset.    Solution Added ruleset to master data year cache retrieval on class subject save validation   Refactored SQL query to retrieve all previous cycles and marks for class subjects (#140434) Problem The system currently relies solely on the previous cycle/term to retrieve the most recent training intervention ID for data transfer. As a result, only the marks from Term/Cycle 4 are used for inheritance.   Solution We updated the backend query to include all cycles/terms, allowing us to Use the most recent training intervention ID for mark inheritance.   Comments to use 3 columns and wrap the text (#141203) Problem The comment options are loading one after the other below one another which is leaving a lot of white space or available screen space un-utilized.    Solution Changed so comments use 3 columns and then wrap onto the next row   Subject cycle date range validation and subject detail UI values updating (#139581) Problem Subject cycle validation is being checked against the currently saved Year date range, instead of the Year value that is being saved on the form. The subject detail UI values should only update after a successful AJAX call. The dates were being incorrectly formatted for the subject detail.   Solution Fixed subject cycle validation to perform date validation range checks against the Year currently being saved on the form. Ensure the subject detail UI values only update after a successful AJAX call. Fix date formatting for subject detail.   Created SQL Script that will insert DWH scores into table Marks (#140444) Problem The scores within the DWH will need to be imported within LearningManagement.Marks as ModeratedMarks    Solution Created custom Script to insert DWH Scores within V9_Master_Learningmanagement.LearningManagement.Mark as ModeratedMarks   Support dynamic date formats with Day.js integration (#140434) Problem Culture affected date calculations in the backend, preventing the inherit marks button from being available.    Solution Added backend date format to ensure compatibility with all cultures.   Data Warehouse Adjustments made within lmStudentSubjects and lmTermResults (#140444) Problem The Mark field should be updated with either Calculated- or ModeratedMark if it does exists within StudentSubjects The Calculated Mark should be set to Blank if it is 0 The new Comment fields should be included within TermResults    Solution Added step to update Mark field to either Calculated- and ModeratedMark within StudentSubjects Added Step to set Calculated Mark to blank if it 0 within StudentSubjects Added the required comment fields within TermResults   Performance Improvement within jpAppointments (#125159) Problem Container for jpAppointments currently fetches all the data within the Source DB with each DWH run    Solution Adjusted Source Query to only fetch data by using ReferenceDate Added Step to only insert data into DWH table if it does not exists   Added step within PerformanceManagement_ETL.dtsx to remove certain pdm records as per requests (#140774) Problem Certain pdm records needs to be removed from the DWH as per requests    Solution Added step within PerformanceManagement_ETL.dtsx to remove certain pdm records as per requests Implemented performance improvement for Container pdmReviewYearPeopleGroupsSetup   Added fieds Calculated - and ModeratedMark within lmStudentSubjects (#140444) Problem Fields Calculated - and ModeratedMark are required within the Datawarehouse    Solution Added fields Calculated - and ModeratedMark within lmStudentSubjects   Identity and Authorisations Implement new custom domain (#138243) Add new change to allow for custom domains on MVC   Job Management Align status header column Problem Misalignment of columns   Solution Align the status header column   Resolved wrapping of status text (#140362) Problem Width is not defined and some screen resolutions still wrap the text    Solution Add change to hard define the width size   Master data of incorrect product type (#140350) Problem Master data product type incorrect    Solution Correct the product type for master data item   Display Document max size error message (#140612) Problem Max size error for file not being displayed    Solution Add change to validate size    A global:messageNotification... error appears when uploading a document (#140616)  Problem After uploading a file it triggers previous handler and does not show correct translation    Solution Detach handler before attaching new and correct translation    Evidence modal styling issues (#140621)  Problem Alignment on the table data    Solution Resolve the class margin that has been added   The "Delete Reason" field caches the previous delete reason (#140623) Problem Delete modal content is not being set    Solution Reset delete modal content after deletion   Remove the "yet" on the "Not yet Set" toggle (#140815) Solution Suggestion to change translation and resize status   Position title not being set in modal title (#140556) Problem Modal title was not being updated with the position title   Solution Add change to populate title with position title   People Management New user sync (#126727) Problem The user sync from V9 to V8 runs the full employee import that is inefficient.    Solution Corrected the field names of the appointment history API call to match the names on V8. Use the new User sync in V8   Fix breadcrumb back arrow no longer displaying (#140853) Problem Back arrow no longer displays correctly on breadcrumb navigation.    Solution Remove condition check preventing arrow display that was intended to solve another problem unsuccessfully.   The address details not saving on the summary (#139878) Problem Address details does not save on the summary when that is the only PG permission active to view or edit When Payroll connectors has been configured the connector drop down displays to the manager even though the section is disabled on the PG The logged in user can see the payrol details on their profile summary    Solution Only check if the section has changed to determine if it can be saved. Only show the payroll dropdown and payroll id to the manager that has view or edit rights on the PG and never to the user   Correct summary page authorisation for inactive and unchanged sections. Corrected data loss between users with view right and admins with edit rights (#139878) Problem When the address section is disabled the user receives an unauthorised exception. When the user as data in a section but no view rights the dat is lost when saving data on the summary. The summary page save unchanged data unnecesarily.    Solution This pull request refactors how permissions and change tracking are handled for user profile summary updates in the People Management module. The main improvements include fine-grained permission checks for each profile section, tracking which sections have changed, and updating the view model and controller logic to support these features. This results in more secure and targeted updates, allowing only authorised edits and reducing unnecessary data processing.   Notifications Communication Portal height (#140695) Problem When there are no discussions a class is added to restrict the height, but when a new discussion is to be started that height does not reset    Solution Add change to remove the restirction   Content Management Consolidate ContentType enum and change all references to point to centralized enum (#139343) Problem There are inconsistencies between the MVC ContentType and ContentManagement ContentType enums leading to incorrect value assignments when the types are sent from MVC to CM.    Solution Centralise the ContentType enum and update all references. Add migration to force recreation of missing ContentType folders on nextcloud.   Report Builder Increase people group filter length and add margin between filter and buttons (#140337) Problem People group filter styling on ReportBuilder view report page needed some changes.   Solution Added bottom margin to people group filter and made it span parent container width to allow for longer PG names