# Version 9.1.240 (6 July 2026)

#### **Imports**

##### Add ExportData v2 and update the notice period for backwards compatibility (#151719)

**Problem**

- The notice period field type change is not backwards-compatible in the API.

**Solution**

- Introduce a new version (v2) of the Export Data gRPC API for job profiler appointment exports, while also making some adjustments to the v1 API and improving Swagger documentation handling
- The main focus is on enabling a more flexible and extensible export endpoint, with improved data typing and service registration

---

#### **Dashboards**

##### Fixed rounding of buttons on dashboard widgets (#151957)

**Problem**

- Straight corners of buttons do not match the rest of the widget

**Solution**

- Rounded the buttons (only the outside edges if there are multiple buttons), added padding to the inside of the card to offset the buttons from the side
- Fixed sizing/spacing issues on widgets

---

#### **Performance Management**

##### Resolve bug where you cannot delete contract files (#151715)

**Problem**

- Cannot delete a file added to the contract

**Solution**

- Add missing parameter required to check user authorisation to delete file on contract

##### Improve the load for large groups of people when moving contracts in bulk (#151617)

**Problem**

- Large groups of people cannot be loaded when doing a bulk move.

**Solution**

- Introduce significant enhancements to the contract movement functionality, mainly by adding pagination and enriching the user data returned by the relevant endpoints
- The changes affect the backend query, gRPC API, and web controller to support more efficient data retrieval and improved client-side display
- These changes collectively improve the scalability, efficiency, and usability of the contract movement feature

---

#### **Organisational Structure**

##### Fixing max position selection error text (#152026)

**Problem**

- Selecting a position after having 20 positions selected shows an error message as "default text"
- Additionally, you cannot unselect any position after 20 positions were selected

**Solution**

- Added the missing error text hidden field
- Fixed unselecting logic

---

#### **Data Warehouse**

##### Updated ContentManagement to fetch file data for all active clients (#151058)

**Problem**

- Currently, PowerShell is only fetching data for MultiV8

**Solution**

- Updated PowerShell scripts to fetch for all Live Clients
- Made adjustments to the DWH steps for ContentManagement to cater for all the V8 Live clients

##### Updated the production ServerName for LearningManagementReport\_ETL (#142732)

**Problem**

- The LearningManagementReport\_ETL did not refresh due to the production server name that changed

**Solution**

- Updated the production ServerName for LearningManagementReport\_ETL

---

#### **Content Management**

##### Fix file upload bugs (#151789, #151794)

*Issue 1*

**Problem**

- No warning when max file size is exceeded in chat

**Solution**

- Ensure warning message is displayed for file upload size exceeded.
- Also, the exception handling middleware did not correctly return AJAX errors when the fetch API was used, causing the request to fail silently.

*Issue 2*

**Problem**

- "Default" helper text not showing after removing the input from the field

**Solution**

- Ensure default text always displays even when the value is filled in

---

#### **People Management**

##### Trim username on update of summary and profile tab (#149383)

**Problem**

- Updates on the summary and profile tab do not trim username

**Solution**

- Trim username on update of summary and profile tab

---

#### **Communication Portal**

##### Resolved styling, file selection, and Job Position Audience count (#141183)

**Problem**

- Still had old JavaScript references on input events for create/edit template; same issue with the file selection and SaveAddNew; incorrect file count returned when identified on multiple audiences; incorrect style on invalid line items
- No placeholder on dropdown for select option

**Solution**

- Removed and ensured the new shared JS editor handles it correctly
- Correct query logic to count on deduplicated records if identified more than once
- Correct styling
- Added placeholder

---

#### **Report Builder**

##### Fixed "User Validation Reports" not exporting correctly (#151687)

**Problem**

- Report exports and user import validation exports could fail due to mismatched data/service lifetimes

**Solution**

- Add a DataTable-based report result path for ReportBuilder exports. Update the background user validation export to create its own DI scope
- Remove the unused #Usernames temp table drop and clean up the OpenXML comment formatting

---

#### **Learning Management**

##### Fix marksheet mark override link to training intervention (#151708)

**Problems**

- Marks linked to the wrong source on first save. When a user captured a brand-new mark in a highlighted (yellow) cell and saved, the mark stayed \*\*linked to the training intervention\*\* on the first save and only "delinked" on a second save, even though it had been entered manually
- Manual overrides could be reverted
- A manually overridden mark could be unexpectedly changed back to the learner's original training-record score

**Solution**

- A manually entered mark now \*\*delinks on the first save\*\* - no second save needed
- A manual override now \*\*stays in place\*\* unless the learner record itself was genuinely edited more recently, in which case the mark re-syncs to the learner record (most-recent change wins). This uses the learner-record last-edited date now supplied by V8

---