Skip to main content

Version 9.1.231 (25 May 2026)

Notifications

Resolve issue with notification schedule run time not saving correctly (#130537)

Problem

Problem

The user's selected Run time is converted to UTC from the server's time 

 Solution

Solution

The user's selected Run time should be converted to UTC from their own timezone

Create a helper method to convert the user's local time to UTC 

 

Resolved System Help Page error (#149490)

Problem

Problem

An error occurred when opening the system help modal for Notifications 

 Solution

Solution

Missing mapping for page type

Resolve issue where images loaded onto the Template email or system message body did not persist (#148295)

Problem

    When adding an image to the body of a template's Email or System Message on the QYSIWYG editor, the image is not persisted after saving the template, nor does it display when the notification is sent.

     

    Solution

      Ensure the full URL is returned when the image is uploaded, and the blob src is replaced with the actual URL before saving the template details.

       

      Add ruleset password encryption API and helpers. Decrypt passwords when sending email or SMS messages (#147890)

      Problem

        Encrypted passwords are not decrypted when sending emails or sms messages. All historic passwords are not encrypted.

         

        Solution

          Add support for encrypting stored ruleset credentials and decrypting them at runtime. Introduce CryptoHelper.ValidateAndEncryptString and DecryptValue to detect/encrypt plaintext and decrypt stored values using the configured AES key. Add a new gRPC endpoint, EncryptRulesetPasswords and corresponding protobuf message; validate provided encryption key before running.  Add EncryptRulesetPasswordsCommand and handler to encrypt passwords/client secrets/tokens for EmailSetup and SmsSetup records via repositories. Update Notification API and processing services to use CryptoHelper.DecryptValue when reading credentials (password, client secret, tokens) so values are decrypted from storage before use. Add UpdatePassword methods to EmailSetup and SmsSetup aggregates to support credential updates. Add ListAsync(rulesetId) to EmailSetup and SmsSetup repository interfaces and implementations so the handler can enumerate setups to update. Minor cleanup
            Remove an unused using in Import.API Program and reorder usings in various files.  These changes enable a safe migration path to encrypt existing plaintext credentials in the DB and ensure services decrypt credentials at runtime.

             

            Rename FourHourly, implement front-end and add missing translations (#149046)

            Problem

              Some schedules are displayed without a mandatory schedule type 

               

              Solution

                This happened due to the "Four-Hourly" schedule type not being implemented on the front-end. Implement the schedule type on the front-end. Also, renamed the "FourHourly" schedule type enum. It is quite misleading, seeing that this schedule is used for 2-hour schedules too. Lastly, updated a couple of missing translations for schedules and notifications

                 

                Ensure that when repeat false, repeat x hours is 0 (#149224)

                Problem

                  Repeat every x hours shown as '8' when no repeat has been set

                   

                  Solution

                    Ensure that when repeat false, repeat x hours is 0 

                     

                    When clicking on a schedule, the bread crumb takes the user back to templates (#148308)

                    Problem

                      When the user clicks on a schedule within the schedules tab of Notifications, the bread crumb takes the user to templates instead of schedules.

                       

                      Solution

                        Modified the existing logic to not take the user back to the index page of rulesets, and rather to the schedules tab.

                         


                        People Management

                        Correct System help pages file uploads not persisting and resolve toolbox squashed (#148297)

                        Problem

                        Problem

                        Images are not persisting when uploaded onto the user guide help page section editors.

                         Solution

                        Solution

                        Added server-side upload URL to store images and ensure the image is persisted. Fixed squashed toolbar. 

                         

                        Resolve virtual tour slides images uploaded on the editor not persisting (#148297)

                        Problem

                        Problem

                        When uploading an image to the editor for a virtual tour slide, the image does not persist when logging out and back in again.

                         Solution

                        Solution

                        Ensure image upload paths are accessible when the modal is opened, and that editor initialisation options are rendered correctly to allow event handlers to fire. 

                         

                        Try to resolve the issue with syncfusion wysiwyg editor not available when the page help modal is opened (#148296)

                        Problem

                        Problem

                        Page help modal editors don't show the toolbar, and not actually the editor, it shows a textarea

                        Cannot reproduce locally, possible cause is that when the page help modal js file loads and the Syncfusion variable is instantiated, the Syncfusion script hasn't fully run, and the component has not been initialised. 

                         Solution

                        Solution

                        Changed to load the Syncfusion editor via a function on the page help modal to ensure that when it is accessed, the editor control should be initialised. 

                        Incorrect Email is showing when the user resets email and clicks Reset User Password (#127979)

                        Problem

                          When the user changes an email address on People Management, clicks save, and proceeds to do a password reset, the old email is shown.

                           

                          Solution

                            Added additional logic to ensure the email is updated on the frontend after the save is successful.

                             

                            Resolved issue where no users are returned in the API call if the list of usernames is not supplied (#149033)

                            Problem

                              When a full user sync is done from V9 to V8, the list of users returned to V8 is empty.

                               

                              Solution

                                Added functionality to return all users if no list of specific users is returned.

                                 

                                Implemented suggestion to show enter character (#149129)

                                Problem

                                  When on the advanced filter, the dropdown is opened, search is only initiated after the first character has been typed, but the wording is read as No Options 

                                   

                                  Solution

                                    Add a change to show wording to enter a character when text is empty, and when no items are returned, only then show No Options

                                     

                                    Resolved image urls not imported to V8 and used (#143999)

                                    Problem

                                      Changes were made when a user selects their profile image, which is stored in a new location defined by the type and the ruleset ID, with the file name as the user ID, but for the imports, the utility did not have this new change 

                                       

                                      Solution

                                        Corrected helper to fetch the correct URLs for the users selected for the import result back to v8

                                         


                                        Dashboard

                                        Remove universal selector from syncfusion editor styling, causing no borders to display (#148395)

                                        Problem

                                        Problem

                                        Table borders are not shown in the editor. Styling has a universal selector that forces table cells, columns and rows to also have no borders. 

                                         Solution

                                        Solution

                                        Remove the universal selector and explicitly set the border colours for tables within the SF editor component. Added cache busting to syncfusion editor stylesheet load on baselayout 

                                         

                                        Set the SF WYSIWYG editor toolbar to floating to try to resolve the issue where it gets squashed (#148231)

                                        Problem

                                        Problem

                                        With large content in the editor, the toolbar gets squashed.

                                         Solution

                                        Solution

                                        Cannot replicate locally, trying the suggestion to make the toolbar floating, which should hopefully solve the overflow and squashing of it 

                                        Resolve issue with the uploaded image on the custom dashboard widget not displaying after being saved (#148599)

                                        Problem

                                          When adding an image to a custom dashboard widget, the image is not displayed after saving and does not show on the main dashboard. Image path is not correctly replaced when the content path is returned from the server after editor upload. 

                                           

                                          Solution

                                            Ensure the actual image src path is replaced in the editor after the upload completes.

                                             


                                            Imports

                                            Implement a unique tab ID when exporting transaction logs and the user validation report on Notification| Imports to ensure a single download (#148249)

                                            Problem

                                              When exporting transactions or the validation report, the export is auto-downloaded multiple times. When the communication service is unavailable, the notification page fails to load tabs unrelated to communication

                                               

                                              Solution

                                                This pull request introduces several improvements and refactorings to the user validation export and transaction log export functionality, as well as error handling enhancements for user notifications. The main changes involve switching the export endpoint from GET to POST, improving error handling, and updating the JavaScript logic for exporting user validation reports.

                                                 

                                                Resolve import error when dual participation is disabled, indicating either person or manager ratings required for final rating (#139918)

                                                Problem

                                                  When importing full agreements on a setup where Dual Participation is disabled (manager rating only). The import fails when you provide both final rating and manager rating, indicating "Person and Manager Ratings required for Final".

                                                   

                                                  Solution

                                                    Corrected validation that checks final ratings supplied to take the Dual Participation setting into account. NOTE: Actual changes line 863 - 866, the rest is applied to code suggestions

                                                     

                                                    Add custom script for client to exclude all non-permanent employees from the import (#148440)

                                                    Problem

                                                      Non-permanent employees are imported with the Payroll sync.

                                                       

                                                      Solution

                                                        Add a custom script to delete non-permanent employees from the import staging table.

                                                         

                                                        Add additional context logging on Import process errors (#148482)

                                                        Problem

                                                          Multiple errors are logged on the Import service regarding the CreateImportErrorsCommand. Possibly due to a scenario where the ImportId provided for the errors is '0'. By looking at the code, it is not clear where or how this scenario would be encountered, as all places where the command is actioned have a guard beforehand (where ImportId > 0) or the ImportId has already been used in prior instances of that caller, so should technically not be 0 at this point. 

                                                           

                                                          Solution

                                                            To assist with identifying where this issue stems from, added a context parameter to the logging on the CreateImportErrorsCommandHandler. Along with the error should now also point out from which context the errors are being logged, and we can then address the root cause more accurately.

                                                             

                                                            Correct duplication in identity when importing a username change (#149214)

                                                            Problem

                                                              When importing a username, the change in the identity service is not updated, and a duplicate user is created. When the user fails to create or update the materialisation, wait indefinitely, as the change is not materialised due to rejection

                                                               

                                                              Solution

                                                                Switch user matching in Identity import to use UserId instead of Username. Update ImportUsersEventConsumer to pass a list of valid usernames into VerifyUserMaterialisation. Change IUserDetailsStagingQueries.UnMaterialisedUserCount signature to accept (rulesetId, List usernames) and update implementation to create a #Usernames temp table, bulk-insert the usernames via SqlBulkCopy, and join against the materialised users table to count unmaterialised entries.

                                                                 

                                                                Employee code update retention, correction of pre-import validation, and keep the existing job profile title when importing with code only. Add V8 import retry (#121156, #120370, #127183 and #127189)

                                                                Problem

                                                                  When the address information is not mandatory, during pre-import validation, the existing employee code is lost when updating a user. The job title of an existing job profiler is overwritten with the Learner title when importing using only the code. When V8 is not available, the import request fails without a retry 

                                                                   

                                                                  Solution

                                                                    Remove logic to prevent incomplete address details when the mandatory is inactive A change has been implemented when updating a user; if the employee code is not provided in the import sheet and already exists in the system, it will not be overridden When importing an existing job with only the job code, keep the existing title when updating the job profile Add a retry on the V8 request to try every minute for 5 minutes when communication is not available.

                                                                     


                                                                    Performance Management

                                                                    Problem

                                                                      On Performance Management, document links(external URLs) can be added that open in a new tab without any validation or user warning. This means users may be redirected to external sites without being informed or protected.

                                                                       

                                                                      Solution

                                                                        Added validation when creating a document link to ensure the URL belongs to an approved (whitelisted) domain. If not, the link cannot be saved, and an error message is shown. When opening a document link, a confirmation prompt is now displayed with a warning. This helps prevent users from accidentally navigating to external sites.

                                                                         

                                                                        Performance improvement on Contract Period Section Items select query and Review Files index added (#149185)

                                                                        Problem

                                                                          Query that fetches a list of KPIs for the contract section identified as long-running/high usage and requires some optimisation. Review the Files table, identified as requiring an index. 

                                                                           

                                                                          Solution

                                                                            Added index to Review Files table. Optimised KPI query, moved sub selects out to CTEs to improve performance: Eliminates N+1 query problem (correlated subqueries executing per row) Pre-aggregates counts once using GROUP BY • Uses set-based operations instead of row-by-row execution The query optimiser can better optimise JOIN operations

                                                                             

                                                                            Resolve issue on Copy From Previous / Another creation where duplicate section items fail contract creation (#149100)

                                                                            Problem

                                                                              When copying from a previous contract (or another / template) and that previous contract has duplicated KPIs (caused by a historical resolved bug), the section item creation fails, but the contract record is created and orphaned due to the db context save getting triggered. Ends up with duplicate users displaying on the dashboard since the query is picking up the extra contract records. 

                                                                               

                                                                              Solution

                                                                                Added error handling to the section item create, and if fail then remove the contract from the DB since this is an orphan. Added handling on the front end as well to better handle error responses.

                                                                                 

                                                                                Correct date verification for check-in started notification recipients (#149007)

                                                                                Problem

                                                                                  Checkin Started Email not sent on the correct date

                                                                                   

                                                                                  Solution

                                                                                    Update NotificationQueries to use explicit table references and cleaner SQL formatting. Replaced dynamic muPerson/muManager/url query fragments with explicit JOINs using {muPerson_query.TableReference}, {url_query.TableReference} and {muManager_query.TableReference}; adjusted date comparisons to cast RYSI.StartDate/EndDate and ISNULL(PD.StartDate, RYSI.StartDate) consistently; added a comment for the manager section and reformatted the SELECTs for readability. Also changed the result return expression (previous ToList() call replaced with the new expression).

                                                                                     


                                                                                    Learning Management

                                                                                    Fix issue on absent notification not correctly embedding image source when sending absent notification with image (#148368)

                                                                                    Problem

                                                                                      On the attendance register, when adding an image to the email body, navigating to confirmation and back loses the image. When sending the notification, the image is also not included. 

                                                                                       

                                                                                      Solution

                                                                                        Ensure the selected image is uploaded to the server before sending the notification, and replace the image src in the email body with an absolute URL

                                                                                         

                                                                                        Fix SqlException 'Invalid column name RulesetId' on marksheet load (#149479)

                                                                                        Problem

                                                                                          After the recent materialisation changes, the RulesetId was no longer part of the table, which caused the marksheet to stop loading.

                                                                                           

                                                                                          Solution

                                                                                            Updated the Join to include RulesetId via other means, which should resolve the marksheet load issue.

                                                                                             


                                                                                            Exports

                                                                                            Resolve incorrect product displaying on user export list (#126260)

                                                                                            Problem

                                                                                              When exporting the Error Logs for certain imports, the product is incorrectly displayed as People Management. 

                                                                                               

                                                                                              Solution

                                                                                                The product code is not sent through to the export error logs function and always defaults to PeopleManagement. Added a helper to determine product type from import type. Include Product Type when requesting export of logs/transactions so it correctly saves the User Files with the correct Product Type.

                                                                                                 

                                                                                                Improve the performance of Excel imports and implement in the service report builder exports (#147972)

                                                                                                Problem

                                                                                                  Exporting large report builder reports creates large memory spikes in MVC, causing the service to crash

                                                                                                   

                                                                                                  Solution

                                                                                                    Restructures and refactors the location and namespaces of several extension and enum classes related to OpenXML and dictionary mapping, moving them from the WebMVC project to the SignifyExtensions infrastructure project. It also introduces a new dependency and corrects some naming inconsistencies. Key changes include:
                                                                                                      Refactoring and Relocation of Extensions and Enums: Moved multiple extension classes (such as CellExtensions, ColumnExtensions, OpenXMLOptions, PropertiesExtensions, SheetDataExtensions, SpreadsheetDocumentExtensions, WorkbookAttributes, WorksheetExtensions, and WorksheetPartExtensions) from the WebMVC project to the SignifyExtensions project, updating their namespaces accordingly.  This improves code organisation and reusability across projects. Relocated and updated enum files, such as UserFileType and PropertyType, to the SignifyExtensions.Enums namespace, ensuring consistency and proper separation of concerns. Dictionary Mapping Extension Refactor:
                                                                                                        Moved the DictionaryExtensions class from MasterDataShared.Extensions to SignifyExtensions.Extensions, and restored its implementation there. The original file is now commented out, centralising this utility in a shared location.  Namespace and Type Corrections:
                                                                                                          Updated all OpenXML-related extension files and usages to reference the new SignifyExtensions namespaces and corrected enum type references in method calls.  Dependency Management:
                                                                                                            Added the Microsoft.Extensions.Configuration NuGet package version 10.0.1 to the solution, possibly to support configuration features in the refactored codebase.  Minor Cleanups:
                                                                                                              Removed unused usings and commented-out code, and made minor adjustments to code formatting and comments for clarity and maintainability. These changes collectively improve code modularity, maintainability, and clarity by consolidating shared logic and ensuring consistent usage of namespaces and dependencies across the solution.

                                                                                                               


                                                                                                              Data Warehouse

                                                                                                              Updated DataDictionary SSIS Package (#148377)

                                                                                                              Problem

                                                                                                                The field name needs to be renamed to the DataSource Contract Surveys 

                                                                                                                 

                                                                                                                Solution

                                                                                                                  Updated FieldAlias "Comment" to "Review Survey Contract" for Data Source Contract Surveys

                                                                                                                   


                                                                                                                  Ruleset Management

                                                                                                                  Fixing breadcrumb for back button (#149003)

                                                                                                                  Problem

                                                                                                                    When opening a schedule from the Schedule Setup tab in Ruleset setup -> communications, then navigating back using the Back button, the system redirects to the Templates list instead of returning to the Schedule Setup list. 

                                                                                                                     

                                                                                                                    Solution

                                                                                                                      Updated the breadcrumb generated when opening the edit page to ensure back navigation returns the user to the correct page.

                                                                                                                       

                                                                                                                      Resolved account inactive on ruleset creation (#148872)

                                                                                                                      Problem

                                                                                                                        When creating a new ruleset, a user is created, but when copied from R1, a user account can be set to inactive.

                                                                                                                         

                                                                                                                        Solution

                                                                                                                          Added new rule check if it is within the account creation for a new ruleset and is copied from R1, always set active to true

                                                                                                                           


                                                                                                                          Job Management

                                                                                                                          Add tooltips to copy and preview buttons for job positions (#148304)

                                                                                                                          Problem

                                                                                                                            The copy and preview buttons do not have tooltips in JobProfiler's Positions page.

                                                                                                                             

                                                                                                                            Solution

                                                                                                                              Add the translation text as hidden fields so the JS can access it and initialise tooltips for those elements.

                                                                                                                               

                                                                                                                              Resolve overflow of continuous position title in delete modal (#148987)

                                                                                                                              Problem

                                                                                                                                Position name does not fit on the delete modal 

                                                                                                                                 

                                                                                                                                Solution

                                                                                                                                  Resolve overflow of the continuous position title in the delete modal

                                                                                                                                   

                                                                                                                                  Add missing required fields to CreateRequisitions endpoint (#147946)

                                                                                                                                  Problem

                                                                                                                                    The CreateRequisitions endpoint for v9 does not send EditedUser, and also the PrsEmploymentTypeId should be sent to v8 as PrsEmploymentTypeExternalId.

                                                                                                                                     

                                                                                                                                    Solution

                                                                                                                                      Corrected the request

                                                                                                                                       

                                                                                                                                      Resolved Inactive jobProfiles being selected (#149293)

                                                                                                                                      Problem

                                                                                                                                        Within people groups, grouped conditions for jobs, inactive job profiles can be selected

                                                                                                                                         

                                                                                                                                        Solution

                                                                                                                                          Added a condition to only include active jobProfiles

                                                                                                                                           

                                                                                                                                          Fix Missing property on Endpoint (#142989)

                                                                                                                                          Problem

                                                                                                                                            The ListPositions endpoint had a missing property in the response section "NodeId".

                                                                                                                                             

                                                                                                                                            Solution

                                                                                                                                              Added the missing property to the response.

                                                                                                                                               


                                                                                                                                              Ruleset | Integrations

                                                                                                                                              Display "No schedules" if the schedule date is past (#143241)

                                                                                                                                              Problem

                                                                                                                                                Difficult to determine when a schedule is not active due to the ending date being in the past 

                                                                                                                                                 

                                                                                                                                                Solution

                                                                                                                                                  Display "No schedules" if the schedule date is past 

                                                                                                                                                   


                                                                                                                                                  Event Scheduling

                                                                                                                                                  Ensure training provider filtered results are prioritised (#149337)

                                                                                                                                                  Problem

                                                                                                                                                    The Search-as-you-type function does not populate the closest result to the top of the list

                                                                                                                                                     

                                                                                                                                                    Solution

                                                                                                                                                      Ensure the training provider's filtered results are prioritised 

                                                                                                                                                       

                                                                                                                                                      Fix blank notification templates for new event schedules (#149309)

                                                                                                                                                      Problem

                                                                                                                                                        The Event notifications page is blank for new event schedules

                                                                                                                                                         

                                                                                                                                                        Solution

                                                                                                                                                          The integration event consumer (which populates the templates for the event schedule) was not registered and therefore never executed, even though the event was fired. 

                                                                                                                                                           


                                                                                                                                                          HR Processes

                                                                                                                                                          Use uniform button styling for the hidden field add button (#149292)

                                                                                                                                                          Problem

                                                                                                                                                            Hidden Fields: Add a button to be uniform with the existing Add button 

                                                                                                                                                             

                                                                                                                                                            Solution

                                                                                                                                                              Use uniform button styling for the hidden field add button 

                                                                                                                                                               


                                                                                                                                                              People Groups

                                                                                                                                                              Fix duplicate insert error into MaterialisedPeopleGroupUsers (#149213)

                                                                                                                                                              Problem

                                                                                                                                                                When a user has multiple appointment records where the current position = 1, the full people group refresh will try to insert a duplicate entry into MaterialisedPeopleGroupUsers. You have the same user, same ruleset, same people group, but different status (2 records), it tries to insert both and fails. 

                                                                                                                                                                 

                                                                                                                                                                Solution

                                                                                                                                                                  Group people, group users, and take the first appointment status (which will be preferred Active). Note, this should technically not be the case, as there should be, in almost all cases, only a single CurrentPosition appointment record, making this more of a defensive fix

                                                                                                                                                                   

                                                                                                                                                                  Resolved load more on Reporting Lines for People Group (#149115)

                                                                                                                                                                  Problem

                                                                                                                                                                    When opening the modal for reporting line people group, all items are returned with the load more button at the bottom, which does not search extra data to append to the context, the same load of data 

                                                                                                                                                                     

                                                                                                                                                                    Solution

                                                                                                                                                                      Limited results to default 20 items and added a cursor for load more items to append to the end of the data