All Releases
June 5, 2026 May 28, 2026 May 21, 2026 May 14, 2026 May 7, 2026 April 30, 2026 April 23, 2026 April 16, 2026 April 9, 2026 April 2, 2026 March 26, 2026 March 19, 2026 March 5, 2026 March 12, 2026 February 26, 2026 February 19, 2026 February 12, 2026 January 22, 2026 February 5, 2026 January 29, 2026 January 15, 2026 January 8, 2026 January 1, 2026 December 25, 2025 December 18, 2025 December 11, 2025 December 4, 2025 November 27, 2025 November 20, 2025 November 13, 2025 November 6, 2025 October 30, 2025 October 23, 2025 October 16, 2025 October 9, 2025 October 2, 2025 September 25, 2025 September 18, 2025 September 11, 2025 September 4, 2025 August 28, 2025 August 21, 2025 August 14, 2025 August 7, 2025 July 31, 2025 July 24, 2025 July 17, 2025 July 10, 2025 July 3, 2025 June 26, 2025 June 19, 2025 June 12, 2025 June 5, 2025 May 29, 2025 May 22, 2025 May 15, 2025 May 8, 2025 May 1, 2025 April 24, 2025 April 17, 2025 April 10, 2025 April 3, 2025 March 27, 2025 March 20, 2025 March 13, 2025 March 6, 2025 February 27, 2025 February 20, 2025 February 13, 2025 February 6, 2025 January 30, 2025 January 23, 2025 January 16, 2025 January 9, 2025 January 2, 2025 December 26, 2024 December 19, 2024 December 12, 2024 November 28, 2024 November 21, 2024 November 14, 2024 November 7, 2024 October 31, 2024 October 24, 2024 October 17, 2024 October 10, 2024 October 3, 2024 September 26, 2024 September 19, 2024 September 12, 2024 September 5, 2024 August 29, 2024 August 22, 2024 August 15, 2024 August 8, 2024 August 1, 2024 July 25, 2024 July 18, 2024 July 11, 2024 June 27, 2024 June 20, 2024 June 13, 2024 June 6, 2024 May 30, 2024 May 23, 2024 May 16, 2024 May 9, 2024 May 2, 2024 April 25, 2024 April 18, 2024 April 11, 2024 April 4, 2024 March 28, 2024 March 21, 2024 March 14, 2024 March 7, 2024 February 29, 2024 February 22, 2024 February 15, 2024 February 8, 2024 February 1, 2024 January 25, 2024 January 18, 2024 January 11, 2024 January 4, 2024 December 21, 2023 December 14, 2023 December 7, 2023 November 30, 2023 November 16, 2023 November 9, 2023 November 2, 2023 October 26, 2023 October 19, 2023 October 12, 2023 October 5, 2023 September 28, 2023 September 21, 2023 September 14, 2023 September 7, 2023 August 31, 2023 August 24, 2023 August 17, 2023 August 10, 2023 August 3, 2023 July 27, 2023 July 20, 2023 July 13, 2023 July 6, 2023 June 29, 2023 June 22, 2023 June 15, 2023 June 8, 2023 June 1, 2023 May 25, 2023 May 18, 2023 May 11, 2023 May 4, 2023 April 27, 2023 April 20, 2023 April 13, 2023 April 6, 2023 March 30, 2023 March 23, 2023 March 16, 2023 March 9, 2023 March 2, 2023 February 23, 2023 February 16, 2023 February 9, 2023 February 2, 2023 January, 2023 December, 2022 November, 2022 October, 2022 September, 2022 August, 2022 July, 2022 June, 2022 May, 2022 April, 2022 March, 2022 February, 2022 January, 2022 December, 2021 November, 2021 October, 2021 September, 2021 August, 2021 July, 2021 June, 2021 May, 2021 April, 2021 March, 2021 February, 2021 January, 2021 December, 2020
View all releases

April 30, 2026 release notes

Highlights

Operations Portal

Roles Column in Employees Screen

The Operations Portal now includes a dedicated Roles column in the Employees screen, providing direct access to employee role information from the main grid view. Users can enable this column through the column selector, which displays all assigned roles for each employee in a comma-separated format.

This enhancement streamlines role management workflows by eliminating the need to open individual employee detail pages to view role assignments. The Roles column is available in both the standard grid view (where it can be toggled on/off) and the Data tab (where it appears by default), giving administrators flexible options for accessing this information.

The new column integration allows for quicker role audits and administrative oversight, helping teams efficiently manage employee permissions and responsibilities directly from the main employees interface.

This feature is now available in the Operations Portal. For a detailed walkthrough of the functionality, refer to the accompanying video demonstration.

https://youtu.be/NJr_3IgEDew

Tickets

  1. 21228: Configure - Download Lockbox File per Site in Multi-Site Mode
  2. 37807: Configure - Add Opportunities for a Company
  3. KOD-28655: Pricing Issue - ARSPT record
  4. 41771: Configure - PIM - Bulk Import Additional Images and Resource Files by URL
  5. 43200: Configure - Assign Territory Code to a Company
  6. 43201: Configure - Assign and Restrict Employees to Sales Territories
  7. KOD-29088: Upload File Functionality on Order Templates (Catalogs)
    • Tests
      • The testing can be done using UI if ready or the endpoint /api/account/companyProductCategory/
      • {companyProductCategoryID}/upload The files for testing can be taken using export from an already existing category.
      • The setting catalogFromCategoryMaxProducts (default 1000) can be decreased for testing (mainly for Upload exceeding catalog capacity ). For most tests using small files is OK, but it would be nice to have more than 500 rows in at least one file (it can be duplicates, but some unique product codes should be present in the end ) so that more that a single batch were used for import (max batch size=500).
      • A user should have one of these roles 'companyAdmin', 'companyCatalogEdit' .
      • Upload with valid CSV - Products are added (check in Company Product Categories), duplicates skipped, counts correct
      • Upload with invalid product codes - Missing products reported in missingDependencies , no crash
      • Upload to restricted catalog - Should be rejected.
      • Upload to reserved category code - Should be rejected.
      • Upload with TSV - Tab-separated file works correctly.
      • Upload with unsupported file type - Returns proper error.
      • Upload empty file - Handles gracefully (throws before processing).
      • Upload file without productCode column - Returns proper error (throws before processing).
      • Upload with duplicate rows in the same file - Only one record created per product.
      • Upload with extra columns (e.g., savedQuantityToOrder ) - Values mapped correctly to entity.
      • Upload with invalid extra column values - Warning reported, product still created.
      • Upload exceeding catalog capacity - Processing stops, partial results returned with correct counts (max count of products in a catalog = settings -> catalogFromCategoryMaxProducts ).
      • Upload malformed CSV (bad encoding, missing delimiters) - Returns proper error before processing starts
      • Using a non-existing product category - Returns proper error.
  8. KOD-29290: Salesforce integration configuration
  9. KOD-29416: OA: Add PO Required Exception Setting
  10. KOD-29910: Placed By Column Drop Down length issue
    • Regression Tests
    • Case 1
      • Make sure the search grids in the operations portal still load correctly.
    • Case 2
      • Make sure for columns in the grid that are only filterable still function the same when you go to search on the column.
    • Tests
    • Case 1
      • For columns that are facetable and filterable, when you go to search on the column you will now see two different options - counts/buckets and filter.
    • Case 2
      • On the counts/buckets side, you should be able to search and it shows you the facets that contain that value, not case sensitive as well as the count associated to it of how many rows.
      • Click one of the values and the items in the grid should update accordingly.
      • If you have values typed into the search bar, you will see an x to clear the search which should bring back all the facets - with the one you checked still checked.
      • If the value you searched for was not in the top 100 values, when you clear the search, you will see that checked facet at the bottom of the list.
    • Case 3
      • Now click the filter box - if you have facets checked, you will see them listed with the IN filter.
      • Here you can change the type of filtering you want to do - this should act like how the filtering worked before on columns that were filterable only (ie: type a value with Contains, then switch to Does Not Contain and the value should be preserved, but if you switch to IN or some other one, then the value is cleared).
    • Case 4
      • Now click back to the counts/buckets tab - if you had any other type of filtering selected besides the IN, the filtering will clear and you should see the facet list with nothing checked.
      • The filtering from the filter tab will still be there, but once you click on a checkbox, the filtering will update to what you selected.
      • If you had values in the IN filter and switched back to the counts/buckets tab, that value should be checked in the list and the grid should still be filtered.
    • Case 5
      • For a column that is facetable and not filterable, you should only see the counts/buckets column and not the filters column.
  11. KOD-29924: Phase Two "Untender" Orders
  12. KOD-30056: Kodaris - Support Fraud Scoring for Customer Portal
    • Regression Tests
    • Case 1
      • Objective: Verify payments still work when fraud checks are disabled.
      • Add a payment method.
      • Pay an invoice.
      • Make a payment on account.
    • Tests
    • Case 1
      • Objective: Verify fraud check executes and FraudData record is created when adding a company payment method.
      • Preconditions:
      • fraudDataCheckOnAddPaymentMethod = 1 (enabled).
      • fraudDataAddPaymentMethodFraudScoreNotificationThreshold = '5'.
      • MaxMind integration is configured.
      • Steps:
      • Log in as a test customer in the Customer Portal.
      • Navigate to Payment Methods.
      • Add a new credit card payment method.
      • Complete the payment method creation.
      • Check that there is a new entry on the Fraud Data Screen.
      • Do the exact same thing but this time add a customer payment method.
    • Case 2
      • Objective: Verify fraud check executes for deposit/payment on account.
      • Preconditions:
      • fraudDataCheckOnPaymentOnAccount = 1 (enabled).
      • fraudDataPaymentOnAccountFraudScoreNotificationThreshold = '5'.
      • The company allows payments on account.
      • Steps:
      • Login as a test customer.
      • Attempt to Place Payment on Account.
      • Check to see the new entry on Fraud Data Screen in the operations portal.
    • Case 3
      • Objective: Verify fraud check executes when paying open invoices.
      • Preconditions:
      • fraudDataCheckOnPayInvoice = 1 (enabled).
      • fraudDataPayInvoiceFraudScoreNotificationThreshold = '5'.
      • At least one open invoice exists for the company.
      • A valid vaulted payment method exists.
      • Steps:
      • Pay open invoices.
      • Check that a new entry on the Fraud Data Screen in Operations Portal is created.
    • Case 4
      • Objective: Verify that fraud alert events trigger email notifications to subscribed administrators.
      • Preconditions:
      • At least one administrator is subscribed to the FraudScoreBlockAlert subscription list.
      • That administrator must be assigned to the company where the fraud will happen.
      • setting ‘employeeNotificationsOn’ must be equal to 1.
      • Steps:
      • Trigger a fraud alert by performing a fraud-checked action with a low threshold (e.g., 1).
      • Wait for event processing (needs 5 minute interval job to run so may take up to 5 minutes).
      • Expected Results:
      • Email is sent to the subscribed administrator.
      • The Email contains a link to the fraud data page.
  13. KOD-30166: Guest account creation feedback phase 2
  14. KOD-30175: Fix Special Cost Unit Handling in AP Automation BOD Processing
  15. KOD-30178: Move integration, punchout, CMS server side endpoints to separate serverside apis
  16. KOD-30214: Services - Add Products Screens
  17. KOD-30366: Web Invoices - Code listed in payments term box and missing box for net due by date
    • Tests
    • Case 1: Verify Template Payment Date and Payment Terms
      • Open any order.
      • Verify existing generated files.
      • If available, open an existing Internal File or Customer File.
      • Check values displayed in Payment Date and Payment Terms.
      • Generate a new file.
      • Generate a new template file for the order.
      • Verify Payment Terms.
      • Ensure description is displayed instead of the terms code.
      • If description is missing, verify the terms code is displayed.
      • Verify Payment Date.
      • Open Developer Fields.
      • Check that dueDate is returned.
      • Verify Payment Date in the template matches the returned dueDate value.
  18. KOD-30422: Send form information
  19. KOD-30474: Send customer data
  20. KOD-30515: Configuration Tab
    • Regression Tests
    • Case 1
      • Navigate to the customer portal.
      • Verify that the left nav panel still loads fine and you can click on any available option.
    • Tests
    • Case 1
      • Login to the operations portal.
      • Navigate to the settings screen and find setting customerTicketsEnabled.
      • Turn off this setting (set value to 0).
      • Navigate to the customer portal.
      • Verify that you don’t see the Configuration option on the left nav bar.
      • Repeat steps 1-3 but instead of turning off setting, you should turn on this setting.
      • Repeat step 4.
      • Verify that you do see the Configuration option on the left nav bar.
  21. KOD-30542: Return to Gift Card Process
  22. KOD-30597: Support Second Cash Account setup for consumer registration flow
  23. KOD-30605: Infor CSD - Gift card updates
  24. KOD-30617: Products Operation app
  25. 57983: Configure - Filter by follow up date from Opportunities search grid
  26. KOD-30703: Kodaris - Quote/Lead/Order Custom Fields Follow-up - Ability to Update on Grids
  27. KOD-30728: Discounts being applied to credits
  28. KOD-30730: Add calculate endpoint for vendor invoices
    • Tests
    • Case 1 - Calculate totals after editing tax
      • Open a vendor invoice that has line items you can use for testing.
      • Note the current total.
      • Edit the tax field to a different value and save.
      • Confirm the total did not change after saving.
      • Note ID of your vendor invoice, go to Swagger and call POST /api/system/vendorInvoice/
      • {vendorInvoiceID}/calculateTotals
      • Go back to the vendor invoice page, refresh it and verify the total was updated.
  29. KOD-30731: Make tax jurisdiction editable on vendor invoices
    • Regression Tests
    • Case 1
      • Verify that the Vendor Invoice Detail page looks and functions correctly.
      • Verify that for an invoice without taxesByJurisdiction the regular Tax field is editable.
    • Tests
    • Case 1
      • Verify that when changing the tax on a jurisdiction (e.g. GST, QST, HST, etc.) a PATCH request is sent with the taxesByJurisdiction field and the new value.
      • Verify that changing one jurisdiction does not overwrite the others.
  30. KOD-30736: Implementation
  31. KOD-30737: Implementation - Email Sending
  32. KOD-30738: Implementation
  33. KOD-30745: UX - Update Order Discrepancies configuration screen to use new flow
    • Regression Tests
    • Case 1
      • Verify that the Order Automation page looks correct and opens without errors.
    • Tests
    • Case 1
      • Verify that the "Order" section displays rules with trigger = generateOrderDiscrepancies.
      • Verify that the "Order Items" section displays rules with trigger = generateOrderItemDiscrepancies.
      • Verify that the "Order Charges Discounts" section displays rules with trigger = generateOrderDiscountDiscrepancies.
      • Verify that the tables contain columns: Expander, Rule, Type, Level.
      • Verify that the Level column displays a mat-select with options EXCEPTION, WARNING, NONE.
      • Verify that changing Level saves immediately via API.
      • Verify that clicking the expander icon expands the row showing Description and Tolerance fields.
      • Verify that Tolerance $ and Tolerance % fields are hidden when rule.active === true.
      • Verify that Tolerance changes are saved.
  34. KOD-30768: Pricing Discrepancies
  35. KOD-30826: Set up ticket automatic emailing
  36. KOD-30842: Allow User upload the price book file in the template
  37. KOD-30847: products are visible for guests
  38. KOD-30852: Kodaris - Updates for Invoice/Statement PDFs
  39. KOD-30874: Phase 2 Country Restrictions for Ordering - Allow specific customers to order from different countries
  40. 59139: Configure - How to Create a Ship To and Generate Pricing Records of a Quote
  41. KOD-30884: Back arrow navigation in Shared Drive folder Follow-up
    • Regression Tests
    • Case 1 Folder navigation
      • Click through several nested folders
      • Expected:
      • URL updates to /folder/{id} at each step.
      • Breadcrumbs show full path.
    • Case 2 Breadcrumb navigation
      • Navigate using breadcrumbs.
      • Expected:
      • Goes to the correct folder each time.
    • Case 3 Browser Forward
      • After using Back, click Forward.
      • Expected: Returns to previous folder.
    • Case 4 Page refresh
      • Refresh (F5) on root - should stay on /all.
      • Enter a folder, refresh - should stay in the folder with breadcrumbs.
    • Case 5 File preview and Back
      • Click a file to preview.
      • Click browser Back.
      • Expected: Preview closes, stays in folder (not navigates away).
    • Case 6 Direct link (deep link)
      • Copy folder URL from address bar.
      • Open a new browser tab.
      • Paste and navigate to the URL.
      • Expected:
      • Opens the correct folder.
      • Breadcrumbs show the full path to the folder.
    • Tests
    • Case 1 Back to root stays in Shared Drive
      • Navigate through several folders.
      • Click Back multiple times until you reach root.
      • Expected:
      • Final Back returns to Shared Drive root.
      • Does NOT redirect to Operations portal.
    • Case 2 Sidebar expands to selected folder
      • Navigate to the nested folder.
      • Expected:
      • The Sidebar tree expands to show the current folder.
  42. 59455: Fix Payment Reference number and add Invoice Number
  43. KOD-30910: AP Automation: "Convert to Charge" UI for Vendor Invoice Line Items
    • Regression Tests
    • Case 1
      • Verify that the Vendor Invoice page displays and functions correctly, and that the Items tab loads and displays line items.
      • Verify that editing, adding, and deleting line items work correctly.
      • Verify that the "Manage Cross Reference" option in the three-dot menu functions correctly.
      • Verify that the Details tab loads and displays charges (discounts) correctly.
    • Tests
    • Case 1
      • Verify that a "Convert to Charge" option has been added to the three-dot menu on a line item row.
      • Verify that clicking "Convert to Charge" opens a dialog with the following fields: Charge Type (dropdown, required), Remember checkbox (checked by default), Cancel and Convert buttons.
      • Verify that the Cancel button closes the dialog without any changes.
      • Verify that after clicking Convert, the item disappears from the Items tab and appears as Add'l Charges in the Details tab.
      • Verify that when "Remember" is checked, a cross reference is created (type = web_item_to_charge).
  44. 59692: Donation Page Scoping
  45. 59787: Operations portal request 5 - Fix broken Company code filter
  46. 59800: Product Image URL Problems
  47. 59805: Implementation - Set Route on Ship Via when inserting orders
  48. 59806: Customer Part Number Upload
  49. 59831: Budget role enhancement - View for Project Manager role-platform
  50. 59971: French translations not working in order confirmation emails due to @Async breaking Spring request context
  51. 60001: Operations portal request 4 - Portal comments copy over to ship to
  52. 60035: "Frequently Purchased Together" Feature
  53. 60105: Implementation - Payment Methods
  54. KOD-30920: Parser Issue
  55. 60378: Update search suggestions fixes
    • Regression Tests
    • Case 1
      • Make sure the mega menu still opens/loads properly and you can still see categories, brands and products.
      • If you click on a category, it should bring you to that category.
      • If you click on a brand, it should bring you to the search page (searching on * ) and filtering on that brand.
      • If you click on a product, it should bring you to that product.
    • Tests
    • Case 1
      • When searching for a product in the search bar, make sure the search is using the /suggest api instead.
      • If you search on an exact product code, that result should show in the mega menu (instead of nothing showing up before).
      • If you click enter after searching for that exact product, it will either take you to the search page on that product code or go directly to the product (depending on how the website is set up).
  56. 60512: Image Ordering Issues for Configurator Products
  57. 60592: Employee Portal - Self Service Customer Pickups
  58. KOD-30922: Total being picked up as $0
  59. KOD-30921: AP - Invoice Processing Failures
  60. 60758: Credit Limits on Orders Placed
  61. 60774: Kodaris - Ticket Custom Fields
  62. 60918: Updates to allowing auto merging guest cart with previous logged in cart upon login
  63. 61038: Email Integration tagging emails
  64. 61051: Kodaris - Custom Fields fix in Products, Companies
  65. 61214: DDS Product Assignments
  66. 61223: Engineering - Tracking Numbers in the Orders Screen
  67. 61246: Added CC & ACH Payment Methods Not Syncing into CSD
  68. 61304: Origin Codes
  69. 61305: Engineering - Supplier code field update
  70. 61309: Vendor Custom Export
  71. 61310: Engineering - Homepage Content Tile Font Size update
  72. 61330: Port Blog Templates
  73. 61370: Engineering - Contact Us link update
  74. 61411: Cart Message - Engineering
  75. 61494: Incorrect Pricing Returned
  76. 61582: Warehouse-Based Product Filtering
  77. 61639: Enable Catalog view for website
  78. 61673: Remove "CLONE -" Prefix from Cloned Tickets
  79. 61717: Special Order & Vendor Direct PDP Flags
  80. 61810: Add Invoice & Statement Delivery Emails as Columns on Companies View for Reporting
  81. 61897: Be able to Re-set Retail Price
  82. 62073: Integration Improvements
  83. KOD-30926: Add Alternate columns to Terminals grid and detail page
  84. 62230: Sync in SKUs for Active Warehouses
  85. 62327: Add Location Logic to Purchase Order Pricing
  86. 62328: Fix Total Footage Calculation on Purchase Order Items
  87. 62453: Add Location to Purchase Order Details
  88. 62455: Default Quote Location From Company
  89. 62593: Configure - Set employee CRM notifications
  90. 62769: Fix Mobile Footer Button Alignment
  91. 62854: Fix Mobile Category Page Rendering
  92. 62887: Add size column
  93. ENG-62892: Request Payment Method Link — ACH/Card Collection via Emailed Link
  94. 62930: Character in Blog Post template
  95. ENG-62943: UX: Add Invoice & Statement Delivery Emails columns on Companies search screen
  96. ENG-63200: Kodaris - Character in Blog Post template
  97. KOD-30381: Add column employee roles to employee table
    • Regression Tests
    • Case 1
      • Log in with an employee that has administratorView or administratorEdit permission.
      • Navigate to Employees > Search tab.
      • Verify the existing columns ( Employee ID , Username , First Name , Last Name , Primary Email , Phone 1 , Active , Failed Logins ) still display data correctly.
      • Click on a column header and apply a filter — verify filtering works as expected.
      • Switch to the Data tab and verify the grid loads with data in all existing columns.
    • Tests
    • Case 1
      • Log in with an employee that has administratorView or administratorEdit permission.
      • Navigate to Employees > Search tab.
      • Click the columns selector and add the Roles column.
      • Verify the Roles column appears and displays comma-separated role names for employees that have roles assigned.
      • Export the employee list and verify the Roles column is included in the export with correct data.
      • Switch to the Data tab and verify the Roles column is visible with correct role data.
  98. 63261: Add a capability for an on‑demand pull of Kodaris customer contacts into Salesforce
  99. ENG-63324: Shipping Method Carrier Code Mapping
  100. 63627: Add Fraud Endpoints to Server Side
  101. ENG-63656: Fix customer-side listPriceBookTemplates returning 404 for group catalogs
  102. 63666: Add Create Catalog Button
  103. ENG-63760: Credit Card Registration Report
  104. 63809: Extend Customer Password Expiration
  105. ENG-63973: Credit Card Registration Report - UX
  106. ENG-63980: Updating customer roles or assigned addresses does not update lastModified
  107. KOD-30929: Add taxesByJurisdiction field to vendor invoice PATCH endpoint
    • Regression Tests
    • Case 1 - Vendor Invoice editing still works
      • Go to Vendor Invoices → Choose anyone for testing.
      • Open its details.
      • Try to edit its fields, for example “Purchase Order #” or other fields.
      • Make sure it saves changes without errors.
    • Case 2 - Order editing still works
      • Go to Order → Choose anyone for testing.
      • Open its details.
      • Try to edit its fields.
      • Make sure it saves changes without errors.