Skip to main content

Version 9.1.226 (4 May 2026)

Communication Portal

Resolved Master Data deletion relation being slow (#147642)

Problem

SQL cursor performance issue checks every FK relation before attempting to delete the master data item 

 

Solution

SQL improvement to minimise the cursor and a single select to determine any relations

 

Resolved red-dot appears after reading messages (#147066)

Problem

When a message is sent, the end user receives it, and there are local-storage checks to keep track so as not to always hit the database to refresh. But never reset when opening the modal to set the local key, even if the server/database side has been updated to read

 

Solution

Corrected logic to update values when opening the modal

 


API

Ensure font fallbacks work on file conversion (#147982)

Problem

The Docker file is missing some dependencies needed for font fallbacks.

 

Solution

Add dependencies needed for font fallbacks to the Docker file. Also, improve the code for the fallback to be more robust.

 

Add embedded fonts for sync fusion to use on the Linux server for docx to PDF conversion (#147982)

Problem

Word (docx) files don't display content when converted to PDFs

 

Solution

Add embedded font types to the Linux server for Sync Fusion to use in conversion. Also, remove previously added debug logs

 


Imports

Serve PaySpace user export as a stream (#146311)

Problem

Large payspace clients experience the following issue StatusCode="ResourceExhausted", Detail=" Received message exceeds the maximum configured message size.") Multiple pull requests are also processed using unnecessary resources. 

 

Solution

Change ListUsersExportPerDatePayspaceAnonymous to a server-streaming RPC and update server/client code to stream users in batches. The ExportData proto and ExportDataServiceV1 now stream UserExport responses (batched at 1000) and write each batch to the response stream. The Import API handler was updated to consume the async server stream from JobProfiler, aggregate users, and adapt logging to per-user transactions. Also injected IImportQueries and added a check to prevent concurrent PaySpace pull imports (logs a fatal error and aborts if an active import exists). Miscellaneous fixes: improved null-safety and mappings when building UserExport payloads and adjusted log messages.

 


People Groups

Correct problem with user people group fetch excluding appointments that end on the current day (#147959)

Problem

When a user's appointment ends on the current day, then no people groups are returned on which the user is a part of, resulting in no menu items being displayed.

 

Solution

Correct the filter condition on the query to consider the end date of the appointment as inclusive.

 


Dashboards

Adding filter info and refreshing image list on upload and delete (#146695)

Problem

Users are not aware that older banners still exist and can be accessed via the search field, as the list is now limited to 21 banners and older items are no longer shown by default. When new images are uploaded, they are automatically selected, which can result in more than the maximum of 5 banners being selected. In addition, uploads can cause the displayed list to exceed the 21-item limit. When images are deleted, the list may drop below 21 items, but older banners are not automatically loaded to fill the available space (where available).

 

Solution

Added an information section at the bottom of the modal to inform users that older banners can be accessed via the search field. Uploads will continue to auto-select new images, but the oldest selected image will now be automatically deselected to enforce the 5-banner limit. Uploading and deleting images now trigger a refresh from the database, ensuring the displayed list remains accurate and up to date.

 


Job Management

Update default required fields for requisition HR process level actions (#142989)

Problem

HRPRactitionerId should not be required for the post approval actions

 

Solution

Remove HRPractionerId as required 

 


Data Warehouse

Updated AbsentAttendance for lmTermResults (#147669)

Problem

AbsentWithExcuse needs to be excluded within absent calculation

 

Solution

Updated Attendances calculation step to only select Attendances where it equal to "Absent"

Added step to only fetch Attendances records for the current year

 

Adjustments made within lmEmployeeTrainingRequirementsMatrix (#146700)

Problem

The data not refreshing as expected within lmEmployeeTrainingRequirementsMatrix when using date filter

 

Solution

Adjusted lmEmployeeTrainingRequirementsMatrix DWH Step to do a full refresh only in the morning, and skipping the staging table step

 


Master Data

Resolve template propagation for prior partial copies (#147828)

Problem

Some email templates are not copied to newly created ruleset.

 

Solution:

Resolve problem with partial job runs where templates where not copied, preventing templates to be copied in subsequent job runs. Root cause: newEvents, newRecipients, and newSchedules only contain items added in the current job run. If a prior run partially completed (e.g. events/recipients were saved but templates weren't), these lists are empty and the existing fallback (existingEvent from template navigations) is also empty since there are no existing templates yet. Fix — both CopyRecipientsAsync and CopyTemplatesAsync:

1. Fetch all target-ruleset entities directly from the DB (allTargetEvents, allTargetRecipients, allTargetSchedules) at the start of each method.

2. Merge those with newEvents/newRecipients/newSchedules into allAvailable* lists, deduplicating by Id to avoid double-entries.

3. Resolve linked entities from allAvailable* first by PropagatedFromId, then fall back to a code/name match — this handles the partial-run scenario where PropagatedFromId lookup would have been the only path before.