All Releases
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 2, 2026 release notes

Highlights

Operations Portal

XML Adapter Support in Document Automation Studio

Document Automation Studio now supports creating XML adapters alongside existing PDF and JSON adapter types. This enhancement expands the platform's document processing capabilities to handle structured XML data for both invoice and order processing workflows.

Users can now create XML adapters through the same intuitive interface used for other file types. When creating a new adapter, simply select "XML" from the File Type dropdown in either the Invoice Adapters or Order Adapters sections. The system automatically adjusts the configuration options, removing the Analysis Methods section since XML files don't require the same processing approach as PDFs.

The XML adapter workflow maintains the familiar drag-and-drop functionality for file uploads, with built-in validation to ensure only XML files are accepted. Users can preview uploaded XML content directly in the interface and access the adapter script editor to customize processing logic for their specific XML data structures.

This feature follows the same architectural pattern as the recently introduced JSON adapter support, providing consistent user experience across different file types.

XML adapter support is now available in Document Automation Studio for all users. For a complete walkthrough of the new functionality, refer to the demonstration video showing both invoice and order adapter creation processes.

https://youtu.be/4FUUUQ9s91Q

Tickets

  1. KOD-24291: Price Lists Mass Email off Company Group Catalog
    • Regression Tests
    • Case 1
      • Validate Single-Company price book generation continues working fine.
      • Pre-requirements:
      • At least one company with an active CompanyProductCategory linked to a catalog.
      • Steps:
      • From the Operations portal go to Company Groups → Company Group.
      • Go to the Catalog tab.
      • Click on Actions dropdown.
      • Select Generate Price Book.
      • Fill the form in the popup (Template, Company) – you can add an email and check the Attach file to the email field for a full test.
      • Wait for the FiveMinuteBulkJobsJob to process the event or trigger it manually.
      • Verify the price book was generated successfully for that company (check Company Categories screen).
      • If you checked Attach file to email, review your email and validate the file was received.
    • Tests
    • Case 1
      • Validate new bulk endpoint creates events only for active companies in a customer group.
      • Pre-requirements:
      • A CustomerGroup with at least 2-3 companies assigned, where at least 1 is inactive and at least 1 is active.
      • A group catalog (CompanyProductCategory ) linked to that customer group (i.e. customerGroupID is set on the catalog).
      • Steps:
      • From Swagger, call POST /api/system/companyProductCategory/customerGroup/createCompanyProductCategoryPriceBookEvents/async under Company ProductCategory API section.
      • Pass customerGroupID , companyProductCategoryID , and priceBook (e.g. priceBook1 ).
      • Wait for the FiveMinuteBulkJob to pick up and process the event – or run it manually, if possible.
      • Expected Results:
      • The endpoint returns 200 OK with the message: "Price book event creation started. This process runs in the background."
      • From the Operations Portal, go to the System Events screen. There must be a system event with code GroupCatalogPriceBookEvents containing the result payload (successCount matching the number of active companies).
      • In the Events screen, verify there is one CompanyProductCategoryPriceBook event per active company (check the companyCode in the Json Data column).
      • No event is created for the inactive company.
      • Price book data is generated for the active group’s companies and catalogs.
    • Case 2
      • Validate invalid catalog-group combination is reported as an error in system events.
      • Pre-requirements:
      • A valid customerGroupID.
      • A companyProductCategoryID that belongs to a different customer group (or to a company, not a group)
      • Steps:
      • Call POST /api/system/companyProductCategory/customerGroup/createCompanyProductCategoryPriceBookEvents/async under Company ProductCategory API section with the mismatched customerGroupID and companyProductCategoryID.
      • Pass a valid priceBook.
      • Click on the execute button.
      • Expected Results:
      • The endpoint returns 200 OK with the message: "Price book event creation started. This process runs in the background." (since the endpoint is async, it always returns 200 immediately).
      • From the Operations Portal, go to the Events screen. There must be a system event with code GroupCatalogPriceBookEvents_ERROR indicating the entity was not found for the given customer group combination.
    • Case 3
      • Validate empty group creates no events and reports zero companies.
      • Pre-requirements:
      • A CustomerGroup with no companies assigned (or only inactive companies).
      • A group catalog linked to that customer group.
      • Steps:
      • Call POST /api/system/companyProductCategory/customerGroup/createCompanyProductCategoryPriceBookEvents/async under Company ProductCategory API section with the empty group's customerGroupID and companyProductCategoryID.
      • Pass a valid priceBook.
      • Expected Results:
      • The endpoint returns 200 OK with the message: "Price book event creation started. This process runs in the background."
      • From the Operations Portal, go to the Events screen. There must be a system event with code GroupCatalogPriceBookEvents with successCount: 0 and failCount: 0 in the payload.
  2. KOD-24936: Automated processing of Commerce Hub Orders
  3. KOD-28293: Quote description changes
    • Regression Tests
    • Case 1
      • Check that templates are still loads fine for Orders, Cash Quotes, Quotes and Request Quote
    • Tests
    • Case 1
      • For Cash Quotes, Quotes and Request Quote, we need to check that when items have record in order notes screen, we are showing it on template.
      • We are filtering in next way:
      • primary code → product code
      • notes type → p
      • and then showing the result in templates.
  4. KOD-28584: Roll Out Payments Report API Integration
  5. KOD-29349: Developer Document - Mapping new account in Kodaris to InforCSD
  6. KOD-29694: Kodaris - Date Range Picker
    • Tests
    • Case 1
      • Open the date range picker by clicking the trigger button.
      • Verify that the "Relative" tab is active by default.
      • Click on the "Last 7 days" option from the list.
      • Verify that the picker closes automatically.
      • Verify that the trigger button displays "Last 7 days".
    • Case 2
      • Open the date range picker by clicking the trigger button.
      • Click on the "Absolute" tab to switch modes.
      • Select "2026-01-01" in the start date input field.
      • Select "2026-01-31" in the end date input field.
      • Click the "Apply" button to confirm the selection.
      • Verify that the picker closes.
      • Verify that the trigger button displays "2026-01-01 to 2026-01-31".
    • Case 3
      • Open the date range picker by clicking the trigger button.
      • Switch to the "Absolute" tab.
      • Click on the start date input field to focus it.
      • Manually type "2026-03-15" in the start date field.
      • Verify that the input accepts the manually entered date.
      • Click on the end date input field to focus it.
      • Manually type "2026-03-25" in the end date field.
      • Verify that the input accepts the manually entered date.
      • Click the "Apply" button to confirm the selection.
      • Verify that the picker closes.
      • Verify that the trigger button displays "2026-03-15 to 2026-03-25".
    • Case 4
      • Test mode="relative".
      • Open page with <kr-date-range-picker mode="relative">.
      • Click on the picker trigger.
      • Expected: Dropdown opens WITHOUT tabs.
      • Expected: Relative date options are displayed immediately (Last 5 minutes, Last 30 minutes, etc.).
      • Click on any relative option (e.g., "Last 7 days").
      • Expected: Option is selected and dropdown closes.
      • Test mode="absolute".
      • Open page with <kr-date-range-picker mode="absolute">.
      • Click on the picker trigger.
      • Expected: Dropdown opens WITHOUT tabs.
      • Expected: Date input fields are displayed immediately (Start and End).
      • Enter start date: 2026-01-01.
      • Enter end date: 2026-01-31.
      • Click the "Apply" button.
      • Expected: Date range is selected and dropdown closes.
      • Expected: Trigger shows "2026-01-01 - 2026-01-31".
  7. KOD-29786: Send email alert when new superseded items are added
    • Tests
    • Case 1
      • Need to add setting supersededConfiguratorProductsEmailTo with the correct emails.
      • When daily job runs and there are products in the configurator products that are superseded, an email should be sent out to whoever is listed in that setting above with the details of the configurator product and the configurator variant product and the item that supersedes it.
      • If there are no superseded products within configurator products, then no email should be sent.
      • If a configurator product has a superseded item (highly unlikely, but just in case), the superseded variant name/code will have a dash.
  8. KOD-29836: Pricing Records - Customer Level 0 in CSD
  9. KOD-29885: Add Time Report page to Services app
    • Tests
    • Case 1 — Page Load
      • Verify that the breadcrumb shows "Services > Time Report".
      • Verify that the date range defaults to the current week (Monday–Sunday).
      • Verify that the grid shows day columns for each day of the current week with correct day names and dates.
      • Verify that the logged-in user is auto-selected in the employee filter and their worklogs are loaded.
    • Case 2 — Date Range Filtering Switch the date range to "This Month"
      • Verify that the grid updates to show all days of the current month and worklogs are reloaded.
      • Switch to a custom absolute range (e.g., two specific dates).
      • Verify that columns and worklogs update to match the selected range.
      • Switch back to "This Week".
      • Verify that the grid returns to the current Monday–Sunday range.
    • Case 3 — Employee Selection Read-Only
      • Select another employee — verify their worklogs load and the "+ Log Time" button and cell editing are disabled.
      • Re-select your own username — verify editing is enabled again.
    • Case 4 — Add Time Entry (Cell Popover)
      • Click an empty day cell — verify popover opens with Hours, Minutes, Description fields and "Add" button.
      • Try to add without hours/minutes — verify warning "Please enter hours or minutes".
      • Try to add without description — verify warning "Please enter a description".
      • Fill in all fields, click "Add" — verify the cell value, row total, and footer totals update.
    • Case 5 — Edit Delete Time Entry (Cell Popover)
      • Click a cell with an existing entry — verify popover lists the entry with edit and delete buttons.
      • Click edit — verify fields populate with the entry's values; change them and click "Save" — verify all totals update.
      • Click delete on an entry — verify it is removed and totals update.
    • Case 6 — Log Time Dialog
      • Click "+ Log Time" — verify dialog opens with empty fields and today's date.
      • Search for a ticket — verify results exclude Worklog and Activity type tickets.
      • Fill in all fields, click "Log" — verify button shows loading, dialog closes, and the grid reloads.
      • Open a ticket page, click Actions > "Log Time" — verify the Ticket field is pre-filled and disabled.
    • Case 7 — Log Time Validation
      • Open the Log Time dialog, leave all fields empty, click "Log" — verify warning "Please select a ticket, date, and enter hours or minutes".
      • Select a ticket, enter hours, leave Description empty, click "Log" — verify warning "Please enter a description".
      • Verify that negative values cannot be entered in Hours and Minutes fields.
  10. KOD-29989: Invoice Parser
  11. KOD-30029: Add column sorting to kr-table component
    • Tests
    • Case 1
      • Navigate to a table and if the column is sortable, when you hover over a column title, you should now see an arrow show.
      • If you click that arrow, it should sort the column in ascending order. If you click it again, it should sort in descending order. If you click it a third time, it should remove the sort.
    • Case 2
      • Sort one of the columns → now hold the shift key and click another column → notice that both columns are now sorting and you will see a number next to the arrow with which sort has precedence.
    • Case 3
      • Navigate to a different page on the table (ie: move to the second, third, etc page on the table) → now click the arrow to sort and notice the table resets back to page 1.
  12. KOD-30046: Make table rows clickable and remove edit icons/buttons across all list screens
  13. KOD-30078: Add ability to search by oldest or newest order
    • Regression Tests
    • Case 1
      • Validate add item to a return order from customer portal is working as always.
      • Pre-requirements:
      • At least 2 orders under the same company that:
      • Have status Invoiced or Paid.
      • Share at least one product code in common (e.g. both contain WIDGET-001 ).
      • That shared item has Shipped quantity greater than 0 on each order.
      • The 2 orders have different invoice dates so you can distinguish which is newer.
      • The generalReturnsEnabled setting is enabled.
      • Steps:
      • From the Customer Portal go to the Returns page.
      • Click the Action button (top-right corner) and select Start New Return.
      • You may optionally select a location name, but it must match the delivery address on the orders you are testing.
      • In the Product Code field, search for the product code that is shared between your 2 orders.
      • Click the Add button (do not pass any sortDirection parameter – this tests the default).
      • After the item is added, click the View button in the Invoice column to see the original order the item was matched.
      • Expected Results :
      • The item is added successfully to the return order.
      • The original order shown in the Invoice column is the newest order that contains this product (the one with the most recent invoice date).
      • This confirms the default behavior (DESC / newest first) is preserved.
    • Tests
    • Case 1
      • Validate that the new sortDirection param added to endpoint POST /api/account/order/return/{orderID}/addItem controls which original order an item is matched from based on the invoice date ( extra3Date ).
      • Pre-requirements:
      • At least 2 orders under the same company that:
      • Have status Invoiced or Paid.
      • Share at least one product code in common.
      • That shared item has Shipped quantity greater than 0 on each order.
      • The 2 orders have different invoice dates ( extra3Date ) so you can distinguish which is older/newer.
      • The generalReturnsEnabled setting is enabled.
      • Steps:
      • From the Customer Portal go to the Returns page.
      • Click the Action button (top-right corner) and select Start New Return (you can select or not the location name, but remember that it must match with the orders you are testing) – this will create a new Return Order
      • From Swagger go to endpoint POST /api/account/order/return/{orderID}/addItem} under the Customer Order API section.
      • Set the orderID field to the ID of the just-created Return Order.
      • Set the sortDirection param (this field is case-insensitive) and pass a body like the one below.
      • Click Execute.
      • Expected Result:
      • If sortDirection is DESC – the item is added from the newest order it appears in.
      • If sortDirection is ASC – the item is added from the oldest order it appears in.
      • If sortDirection is an invalid value (e.g. INVALID ) or is empty/not provided – DESC is applied by default (newest first)NOTES:
      • Notes:
      • The sorting is applied by the extra3Date field (ERP invoiced date).
      • Verify the originalOrderID field in the response to check which order the item was matched from.
      • Start a new Return Order for each test run to avoid return quantity validation errors from leftover items.
      • /*
      • * <ITEM_CODE>: It is the code of the product item which is shared between the different orders
      • */
      • {
      • "code" : "<ITEM_CODE>" ,
      • "quantity" :1,
      • "receivedReason" : null ,
      • "sscReceivedNote" : null
      • }
  14. KOD-30103: Kodaris - Company Custom Fields Followup - Ability to Update on Grids
    • Regression Tests
    • Prerequisites
      • In Settings, find integrationIndexedCompanyFields and ensure at least one custom field entry has settingName , settingType , and settingDescription populated. Example:
      • { "settingCode" : "myField" , "settingName" : "My Field" , "settingType" : "CUSTOM" , "settingDescription" : "My custom field description" , "solrField" : "custom_myField_s" , "isIndexed" : true }
      • Note the settingCode — it will be used throughout this test-
      • NOTE: the key changes in the app behavior (Company):
      • custom fields are editable from the data grid (for those who could edit them before)-
      • new functionality is available for the roles companyView or companyEdit-
      • users with companyView or companyEdit role can view custom fields in data grid, Custom Fields tab, Developer Fields tab, but cannot see other settings in Developer Fields tab-
      • users with companyEdit role can edit custom fields in data grid, Custom Fields tab, Developer Fields tab
    • Case 1
      • Company: Custom Fields via Standard PUT (Detail Page)-
      • Login as a user with the role administrator / superuser / companySettingEdit-
      • Regular field update on grid — Edit a standard company column (e.g., name). Verify PATCH goes to /api/system/company/{id} with normal fields (no customFields key if no custom fields were changed).
      • Verify changes save and persist after page refresh.
      • Open a company detail page, change a standard field (e.g., name), and save.
      • Refresh the page.
      • Verify the standard fields are still correct.
      • Verify the custom fields are still present after save (not cleared by the PUT).
      • Export/Import — Verify custom field export/import with custom_ prefix still works.
    • Case 2
      • Login as a user with the role administrator / superuser / companySettingEdit.
      • Go back to Companies, open Company Details by clicking the > button at the end of a row.
      • Switch to the Custom Fields tab.
      • Remember the name of a not empty custom field or set any value in any custom field and remember it.
      • Switch to the Developers Fields tab.
      • Find the custom field in the list.
      • Try to update, delete and insert (make a screenshot with all columns before deleting) a custom field via the Developers Fields tab this way: do an action, refresh the grid, verify the change.
      • Verify there are no error messages during the update/delete/insert.
      • Try to insert, update and delete a setting via the Developers Fields tab this way: do an action, refresh the grid, verify the change.
      • Verify there are no error messages during the update/delete/insert.
    • Tests
    • Case 1
      • Company: Custom Field Create via Data Grid
      • Login as a user with the role administrator / superuser / companySettingEdit.
      • Go to Companies.
      • Switch to the Data grid.
      • Click the Show/Hide Columns button.
      • Enable checkbox for at least one custom field (the one from prerequisites).
      • Set a value for the custom field (choose one with no value) and click on another field (to trigger save).
      • If the UX part if the feature is not released go to Swagger = System API - Company API - /api/system/company/{id} PATCH. Use company ID and request body like this:
      • { "customFields": [ { "code": "test1", "value": "my value"} ] }
      • Verify the browser Network tab shows a PATCH call to /api/system/company/{id}} with customFields in the request body.
      • If the UX part if the feature is not released execute the command in Swagger.
      • Verify there are no error messages.
      • If the UX part if the feature is not released make sure that the API return code = 200.
      • Refresh data in the grid (click a button in the upper left corner of the grid).
      • Verify the value for the custom field is still correct.
      • Verify the values in regular fields are still correct.
      • Go to the Developer Fields tab (click More and then Developer Fields).
      • Verify the custom field is present and the value for the custom field is correct.
      • Make a screenshot of the whole row — this will be used as a baseline later.
      • Company: Custom Field Update via Grid (only Value is updated, not Properties).
      • Go back to the Companies Data grid.
      • Change the custom field value and click on another field.
      • If the UX part if the feature is not released use /api/system/company/{id}
      • PATCH and request body like this:
      • { "customFields": [ { "code": "test1", "value": "my changed value"} ] }
      • to change the custom field value-
      • Verify there are no error messages-
      • Refresh data in the grid (click a button in the upper left corner of the grid)-
      • Company: Custom Field Delete via Grid-
      • Go back to the Companies Data grid-
      • Clear/delete the custom field value and click on another field-
      • If the UX part if the feature is not released use /api/system/company/{id}
      • PATCH and request body like this:
      • { "customFields": [ { "code": "test1", "value": null} ] }
      • to delete/reset the custom field value
      • Go to the Developer Fields.
      • Make sure that the deleted filed is not present in the grid on the page Developer Fields.
      • Company: Custom Field Re-Creation via Detail Page + Attribute Verification.
      • Go back to Companies, open Company Details by clicking the > button at the end of a row.
      • Switch to the Custom Fields tab.
      • Set the same custom field to the value from the saved file, click on another field to save.
      • Go to the Developer Fields tab (click More and then Developer Fields).
      • Verify the custom field is present.
      • Compare all fields in the row with the saved screenshot — verify name , type , description , valueType , and value all match. This confirms that the backend correctly resolved attributes from integrationIndexedCompanyFields when re-creating the deleted setting.
    • Case 2
      • Permissions: companyView
      • (optional) Login as a user with the role administrator / superuser / companySettingEdit and Find/create a company with not empty custom fields and not empty non-custom-field.
      • Login as a user with the role companyView.
      • Go to Companies, open Company Details by clicking the > button at the end of a row.
      • Make sure that the user can add custom field columns to the grid and see the values.
      • Make sure that the user cannot add non-custom-field setting columns to the grid (they should not appear in the dropdown list).
      • Login as a user with the role companyEdit.
    • Case 3
      • Permissions: Custom Fields and Developers Fields edit view.
      • Login as a user with the role administrator / superuser / companySettingEdit
      • Find/create a company with not empty custom fields and not empty non-custom-field (code NOT in integrationIndexedCompanyFields ).
      • If any items (custom fields, settings) were created, verify that they are still present after refreshing the page.
      • Remember the company and some of custom-field/non-custom-field names and codes or make screenshots.
      • Log in as a user with companyView but without companySettingEdit , administrator , or superuser
      • Go to Companies, open Company Details by clicking the > button at the end of a row.
      • Verify that the user can open the Custom Fields tab.
      • If you use a user without companySettingEdit , administrator , or superuser and UX part if the feature is not released use /api/system/company/{companyID}/settings POST instead of using UI.
      • Verify that the custom field values on the Custom Fields tab are correct (the custom fields that you remember are not empty).
      • Verify that /api/system/company/{companyID}/settings GET returns the same list of Custom fields as you can see in UX / returned by POST (restricted roles can see Custom Fields but can not see other Settings).
      • Verify that the user can open the Developers Fields tab.
      • If you use a user without companySettingEdit , administrator , or superuser and UX part if the feature is not released go back to.
      • /api/system/company/{companyID}/settings POST instead of using UI.
      • Verify that the user can see custom fields on the Developers Fields tab.
      • Log in as a user with companyEdit but without companySettingEdit , administrator , or superuser
      • Repeat steps 5-12.
      • Verify that the user CANNOT see non-custom-field settings on the Developers Fields tab.
      • Log in as a user with companyView but without companySettingEdit , administrator , or superuser.
      • Verify that a user with only companyView (no edit roles) can view custom fields but cannot modify them on the Custom Fields tab.
      • Verify that a user with only companyView (no edit roles) can view custom fields but cannot modify them on the Developers Fields tab.
    • Case 4
      • Permissions: Custom Fields and Developers Fields edit
      • Login as a user with the role administrator / superuser / companySettingEdit (skip steps 1..5 if you already have a company with a not empty non-custom-field setting).
      • Go to Companies, open Company Details by clicking the > button at the end of a row.
      • Switch to the Developers Fields tab.
      • Create a setting with a code that is not in integrationIndexedCompanyFields (use a wired code with letters and numbers).
      • Remember the code of the setting.
      • Log in as a user with companyEdit but without companySettingEdit , administrator , or superuser.
      • Go to Companies, open Company Details by clicking the > button at the end of a row.
      • Switch to the Custom Fields tab.
      • Remember the name of a not empty custom field or set any value in any custom field and remember it.
      • Switch to the Developers Fields tab.
      • Find the custom field in the list.
      • Try to update, delete and insert (make a screenshot with all columns before deleting) a custom field via the Developers Fields tab this way (do an action, refresh the grid, verify the change).
      • If you use a user without companySettingEdit , administrator , or superuser and UX part if the feature is not released use
      • /api/system/company/{companyID}/setting POST and /api/system/company/{companyID}/setting/
      • GET, PATCH, DELETE instead of using UI.
      • Verify there are no error messages during the update/delete/insert.
      • Try to insert, update and delete a setting via the Developers Fields tab this way (do an action, close an error message, refresh the page),
      • If you use a user without companySettingEdit , administrator , or superuser and UX part if the feature is not released use.
      • /api/system/company/{companyID}/settingPOST and /api/system/company/{companyID}/setting/
      • GET, PATCH, DELETE instead of using UI.
      • Verify that an error message (about missing permissions) appears after every of these actions (update/delete/insert) and changes are not saved.
      • Login as a user with role administrator / superuser / companySettingEdit (optional part, can be done after passing all these tests).
      • Go to Companies, open Company Details by clicking the > button at the end of a row
      • Switch to the Developers Fields tab.
      • Delete a setting that was created in step 4.
  15. KOD-30114: Product Category Assignment
  16. KOD-30164: Batch Report Phase 2 to Identify where to Send Email
    • Regression Tests
    • Case 1
      • Verify that the batch report generates without errors.
    • Tests
    • Case 1
      • Verify that email is sent to the address from the terminal's reportingEmail field.
  17. KOD-30188: Update email templates for account activation
  18. KOD-30215: Credit App - Save to ERP Updates
    • Regression Tests
    • Case 1
      • Go to the credit application form.
      • Fill the form.
      • Submit the application
      • Go to the operations portal.
      • Go to the companies tab.
      • Go to the details of the company that you just created.
      • Click on the “save to ERP” button.
      • Expected:
      • You should be able to create the company in the ERP. You can check if the company now has a new developer field with the code “custno”.
      • You should be able to see a new developer field with code pushedToTrendBy .
      • The value of the developer field should be the email of who clicked the button to release to the ERP.
      • Already covered in the feature test on tropic environment.
    • Case 2
      • Go to the operations portal.
      • Go to the companies tab.
      • Go to the details of the company that you just created in the test case 1.
      • Change the email address field to something different.
      • Click on the “save to ERP” button.
      • Expected:
      • You should be able to update the company in the ERP successfully. You can wait sometime till CSD syncs back and be sure that your field won’t be overwritten.
    • Tests
    • Case 1
      • Go to the credit application form.
      • Fill the form.
      • Submit the application
      • Go to the operations portal.
      • Go to the companies tab.
      • Go to the details of the company that you just created and get the ID.
      • Go to swagger (the UX for this ticket is not ready yet).
      • Go to the company controller.
      • Call the POST /api/system/company/{companyID}/addCompanyToErp
      • Endpoint with the ID that you got from step 6.
      • Expected:
      • You should receive statusCode = 200 And status = success.
      • You should be able to see a new developer field with code pushedToTrendBy .
      • The value of the developer field should be the email of who clicked the button to release to the ERP.
    • Case 2
      • Go to the companies tab in the operations portal.
      • Go to the details of the company that you just created in the test case 1 and get the ID.
      • Update a field of the company, for example, the primary email.
      • Go to swagger (the UX for this ticket is not ready yet).
      • Go to the company controller.
      • Call the POST /api/system/company/{companyID}/updateCompanyInErp
      • Endpoint with the ID that you got from step 6.
      • Expected:
      • You should receive statusCode = 200 And status = success.
  19. KOD-30236: Invoice Processing Issue
  20. KOD-30246: Kodaris - UX for Company custom fields updates
    • Regression Tests
    • Case 1
      • Verify that company fields can be edited and saved in the grid.
      • Verify that custom fields are not cleared after editing a standard field.
    • Tests
    • Case 1
      • Verify that custom fields can be edited in the Company Data Grid.
      • Verify that after editing a custom field, the value is saved and displayed after a refresh.
      • Verify that users with companyView or companyEdit permissions can open the Custom Fields tab.
      • Verify that users with companyEdit permissions can edit custom fields in the Custom Fields tab.
  21. KOD-30254: Integration Check if We Support Inventory API
  22. KOD-30290: Set up shipping methods / Shipvias
  23. KOD-30326: Alert about unclosed old batches
  24. KOD-30333: Vendor Tax Processing Failure
  25. KOD-30338: Сhange the footer from black background to reflex blue
  26. KOD-30339: email sending
  27. KOD-30368: Orders on hold
  28. KOD-30373: "Shop by Category"
  29. KOD-30374: PARSER
  30. KOD-30386: Kodaris - Can't Upload Customer Files to Opportunity > Tickets
    • Regression Tests
    • Case 1
      • Navigate to a regular (non-lead) ticket.
      • Click the "Actions" button.
      • Verify the "Attach Customer File" option is visible in the dropdown menu.
      • Attach a new file and verify it works.
      • Close the menu and verify the "Customer Files" tab is visible in the tab bar.
      • Verify the attached file appears with the correct badge counter.
    • Tests
    • Case 1
      • Navigate to an opportunity/lead ticket.
      • Click the "Actions" button.
      • Verify the "Attach Customer File" option is NOT shown in the dropdown menu.
      • Verify the "Customer Files" tab is NOT visible in the tab bar.
  31. KOD-30388: Kodaris - Shared Drive - Additional Updates
    • Regression Tests
    • Case 1
      • Make sure the shared drive still loads as before.
      • You can switch between grid and list view.
      • You can click into a folder.
      • You can click on a file to preview it (if allowed).
      • You can create a new folder, upload a file, and upload a folder.
    • Tests
    • Case 1
      • Notice the + New button is now larger than it was before and you can still click it to choose which action you want to perform.
    • Case 2
      • In the grid view, on the folders, notice when you hover over it, there are 3 dots and if you click it a list appears to either move or delete.
      • On the files, click the 3 dots and notice there is one new option of move (along with download and delete).
      • In the list view, if you hover over the folder or file, you will see the new icon of move in addition to the ones that were there before (and now if you hover over those icons, there is a tooltip of what the icons mean).
    • Case 3
      • For both list and grid view.
      • When you click move, a popup should appear that lists the folders and files in the top level (all files will be greyed out similar to google drive) → click into folders and notice the file path up top → the parent folders are clickable and will take you back to that folder → if there are a lot of folders to click into, you will see … after All which is clickable and the rest of the folder path will be shown and you can see and click on those folder names → once you find the folder you want it in, click Move and the folder and/or file will be moved to the correct place.
      • This will work for both folders and files.
    • Case 4
      • For both list and grid view.
      • When uploading a folder, the files inside that folder should now be named the same as how they were on your computer (no more prefix of the folder name first).
  32. KOD-30395: taxing missing
  33. KOD-30405: B2C Customer Address Management
  34. KOD-30408: Kodaris - Add Parent to FAQ Drafts
    • Regression Tests
    • Case 1
      • Navigate to Pages and click on an existing page to open it (/pages/:contentPageID).
      • Locate the parent page autocomplete field in the detail form.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear and the current page is excluded from results.
      • Select a parent page and verify it is saved correctly.
    • Case 2
      • Navigate to Blog Posts > Data tab and click on an existing blog post (/blog-posts/data/:blogPostID).
      • Locate the parent blog post autocomplete field in the detail form.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear and the current blog post is excluded from results.
      • Select a parent page and verify it is saved correctly.
    • Case 3
      • Navigate to Intranet Pages > Data tab and click on an existing intranet page (/intranet-pages/data/:intranetPageID).
      • Locate the parent page autocomplete field in the detail form.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear and the current intranet page is excluded from results.
      • Select a parent page and verify it is saved correctly.
    • Case 4
      • Navigate to Page Layouts > Data tab and click on an existing page layout (/page-layouts/data/:pageLayoutID).
      • Locate the parent page template autocomplete field in the detail form.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear and the current page layout is excluded from results.
      • Select a parent page and verify it is saved correctly.
    • Case 5
      • Navigate to FAQs > Data tab (/faq/data).
      • Click on a cell in the parentCategory column to enter edit mode.
      • Type a search query in the autocomplete.
      • Verify the dropdown shows suggestions with two columns: code (first column) and name (second column).
      • Repeat the same verification on Internal FAQs (/internal-faq), FAQ Drafts (/faq-drafts), and Internal FAQ Drafts (/internal-faq-drafts).
    • Tests
    • Case 1
      • Navigate to FAQs > Data tab (/faq/data).
      • Locate the parentCategory column in the grid.
      • Click on a cell in the parentCategory column to enter edit mode.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear with two columns: code first, then name.
      • Select a parent from the suggestions.
      • Verify the parent is saved correctly.
    • Case 2
      • Navigate to FAQ Drafts (/faq-drafts).
      • Locate the parentCategory column in the grid.
      • Click on a cell in the parentCategory column to enter edit mode.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear with two columns: code first, then name.
      • Select a parent from the suggestions.
      • Verify the parent is saved correctly.
    • Case 3
      • Navigate to Internal FAQs (/internal-faq).
      • Locate the parentInternalCategoryID column in the grid.
      • Click on a cell in the parentInternalCategoryID column to enter edit mode.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear with two columns: code first, then name.
      • Select a parent from the suggestions.
      • Verify the parent is saved correctly.
    • Case 4
      • Navigate to Internal FAQ Drafts (/internal-faq-drafts).
      • Locate the parentInternalCategoryID column in the grid.
      • Click on a cell in the parentInternalCategoryID column to enter edit mode.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear with two columns: code first, then name.
      • Select a parent from the suggestions.
      • Verify the parent is saved correctly.
    • Case 5
      • Navigate to FAQs > Search tab and click on an existing FAQ to open it (/faq/:faqID).
      • Locate the Parent Page autocomplete field in the detail form.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear showing name and code.
      • Verify the current FAQ page does not appear in the suggestions (self-reference prevention).
      • Select a parent page and verify it is saved.
      • Clear the parent page using the clear button and verify it is removed.
    • Case 6
      • Navigate to FAQ Drafts and click on an existing draft to open it (/faq-drafts/:faqID).
      • Locate the Parent Page autocomplete field in the detail form.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear showing name and code.
      • Verify the current FAQ draft does not appear in the suggestions (self-reference prevention).
      • Select a parent page and verify it is saved.
      • Clear the parent page using the clear button and verify it is removed.
    • Case 7
      • Navigate to Internal FAQs and click on an existing internal FAQ to open it (/internal-faq/:internalFaqID).
      • Locate the Parent Page autocomplete field in the detail form.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear showing name and code.
      • Verify the current internal FAQ does not appear in the suggestions (self-reference prevention).
      • Select a parent page and verify it is saved.
      • Clear the parent page using the clear button and verify it is removed.
    • Case 8
      • Navigate to Internal FAQ Drafts and click on an existing draft to open it (/internal-faq-drafts/:internalFaqID).
      • Locate the Parent Page autocomplete field in the detail form.
      • Type a search query in the autocomplete field.
      • Verify that suggestions appear showing name and code.
      • Verify the current internal FAQ draft does not appear in the suggestions (self-reference prevention).
      • Select a parent page and verify it is saved.
      • Clear the parent page using the clear button and verify it is removed.
  35. KOD-30412: Public Files - Video
    • Regression Tests
    • Case 1
      • Ensure the Resources section on the product page displays correctly.
      • Ensure that regular files (PDFs, documents) display the document icon (bi-file-earmark-text).
      • Ensure that file links open correctly in a new tab.
      • Ensure there are no errors in the console on the product page.
    • Tests
    • Case 1
      • Make sure YouTube links in the Resources section display the video icon.
  36. KOD-30426: Taxes not picked up
  37. KOD-30440: New Kodaris Website Product Marketing & Help
  38. KOD-30449: Email Template Updates - Abandoned Cart
  39. KOD-30452: Sort Ship-To Dropdown
    • Regression Tests
    • Case 1
      • Delivery address selection still works.
      • Log in as a customer with multiple delivery addresses.
      • Click the delivery address button in the top bar (geo pin icon).
      • Select a different delivery address from the dropdown.
      • Verify the page reloads and the newly selected delivery address name is displayed in the top bar.
    • Tests
    • Case 1
      • Delivery address dropdown sorts by shipto numerically ascending.
      • Log in as a customer with multiple delivery addresses that have numeric shipto values (e.g. 1, 5, 15, 45, 63).
      • Navigate to the top bar and click the delivery address button (the one with the geo pin icon).
      • Verify the dropdown options are sorted by shipto number in ascending order (e.g. 1, 2, 4, 5, 15, 16, 45, 63).
      • Verify that addresses with non-numeric shipto values appear after the numeric ones, sorted by shipto name, descending order.
      • Verify that addresses with no shipto value (null or empty) also appear after the numeric ones, grouped with the non-numeric entries.
  40. KOD-30455: Kodaris Website - Create Product Resources Template
  41. KOD-30464: Parser
  42. KOD-30467: Multiple UPC Code Support for Vendor Changes
  43. KOD-30481: Add Custom Fields to Opportunities
  44. KOD-30494: Transaction Type In Customer Portal
  45. KOD-30497: Request for One-Step User Activation Process
    • Tests
    • Case 1
      • In the operations portal navigate to the “Customers” screen.
      • Select the “Data” tab.
      • Confirm button with “Send Reset Password Email” displayed correctly.
      • Confirm the button is disabled if no customers are selected.
      • Select one customer.
      • Confirm the button is enabled.
    • Case 2
      • Click the “Send Reset Password Email” button.
      • Confirm the message “ Password reset emails sent successfully " appears.
      • Confirm the email is sent to the customer you selected and received an email.
      • Navigate to the emails screen.
      • Confirm there are “Reset Password” emails sent recently
      • Repeat this step for multiple customers.
    • Case 3
      • On the customers screen under the data tab open developer tools.
      • Click the “Send Reset Password Emails” button.
      • While the request is processed, click the button multiple times.
      • Confirm until request not being processed, no new emails are sent.
    • Case 4
      • Follow the reset password flow triggered from the operations portal.
      • Confirm the new password was properly set.
      • Confirm you can log in with a new password under that customer.
  46. KOD-30501: Ignore discount on invoice
  47. KOD-30502: Guest Pricing - Login for Price
    • Regression Tests
    • Case 1
      • Ensure that logged-in users see product prices (product page, category page).
      • Ensure that logged-in users can add products to their cart.
      • Ensure that if a user is logged in and a product has a price greater than zero, the price is displayed on the product and category pages.
      • Ensure that there are no errors in the console on product pages.
    • Tests
    • Case 1
      • Ensure that guests (not logged in) see "Login for Price" instead of the price on the product page.
      • Ensure that guests see "Login for Price" on the category page.
      • Ensure that logged in users without a price see "Call for Pricing" on the product page.
      • Ensure that logged in users without a price see "Call for Pricing" on the category page.
  48. KOD-30505: Ship-To Address Mapping Issues in Document Automation Studio
  49. KOD-30513: Invoice Email (PO Number Not Found)
  50. KOD-30519: Kodaris - Remove the new portal UI message
  51. KOD-30526: Kodaris - Create Separate Setting for Customer FAQ Statuses UX
    • Tests
    • Case 1
      • Open the Operations Portal.
      • Open DevTools → Network tab.
      • Find request /api/user/employee/configuration
      • Check Response.
      • Expected Result (on the content site):
      • {"customerFAQStatuses": ["Submitted", "Published"]}
    • Case 2
      • Navigate to /faq-drafts.
      • Click on inline edit for "Status" column of any draft.
      • Open status dropdown.
      • Expected Result:
      • Dropdown shows only customerFAQStatuses values.
    • Case 3
      • Navigate to separate detail faq page /operations/faq-drafts/:id
      • Locate the "Status" field on the form.
      • Open dropdown.
      • Select status "Published".
      • Save changes.
      • Refresh page (F5).
      • Expected Result:
      • Dropdown contains only Submitted and Published.
      • After saving, status changes to "Published".
      • After page reload, status remains "Published".
  52. KOD-30529: UX Document Automation Studio - Support JSON Adapters
    • Regression Tests
    • Case 1
      • Verify that PDF Order adapters are created and function as expected.
      • Verify that PDF Invoice adapters are created and function as expected.
      • Verify that Analysis Methods are displayed for PDF adapters.
      • Verify that PDF file uploads and previews work correctly.
    • Tests
    • Case 1
      • Verify that the JSON option appears in the File Type dropdown when creating an adapter.
      • Verify that the Analysis Methods section is hidden when JSON is selected.
      • Verify that the JSON adapter is created with an empty analysisMethods array and the correct default code.
      • Verify that a JSON file can be uploaded on the Details and Configure pages and that it is displayed in the correct format.
      • Verify that the JSON adapter can be run on the Configure page.
      • Verify that JSON preview uses Monaco editor on Details and Configure pages.
  53. KOD-30536: AP Automation - Invoice Parser
  54. KOD-30535: AP Automation - AP Invoice Parser
  55. KOD-30534: Add Amount to Invoices
  56. KOD-30537: AP Automation - Invoice Parser
  57. KOD-30540: Add lastModified timestamp field to Customer entity for tracking record changes
  58. KOD-30547: Account Automation Text Wrap Updates
    • Regression Tests
    • Case 1
      • Make sure that company notes are saved in CSD.
    • Tests
    • Case 1
      • Make sure that when saving company notes in CSD, spaces are added at the end of each line.
  59. KOD-30546: Cookie/consent modal pop up
    • Regression Tests
    • Case 1
      • Open the website with the cookie banner visible (clear cookies if needed)
      • Expected Result:
      • A cookie consent banner appears at the bottom of the page.
      • The banner shows a description text, "Accept" and "Decline" buttons.
      • Visit different pages across the website.
      • Expected Result:
      • Cookie banner appears at the bottom of each page.
      • Banner is fully visible and not hidden behind other elements.
    • Case 2
      • Make sure the cookie banner displays correctly and all text is displayed without any issues.
      • Since some changes affect the cookie banner on other sites, make sure to test it there as well.
    • Tests
    • Case 1
      • Open site (cookie banner visible).
      • Open themer.
      • Verify themer is clickable and not blocked by the banner.
      • Open site in translate mode.
      • Ctrl+click on banner text to translate.
      • Verify popover appears above the banner and is interactive.
    • Case 1 Translations Work for Different Languages
      • Precondition: In Operations Portal, add translations for a second language
      • To support additional languages, create entries with the same codes but with translated messages
      • Switch website to the translated language
      • Expected Result:
      • Cookie banner displays in the selected language.
    • Case 2 Changing English Text Updates the Banner
      • In the Operations Portal, change any English message for the cookie banner.
      • Open the website in English.
      • Expected Result:
      • Changes in the “Message” value of the item are reflected on the website.
    • Case 3 Translation Mode - Banner Display
      • Enable Translation Mode on the website.
      • Expected Result:
      • Cookie banner is visible.
      • "Accept" and "Decline" buttons are highlighted as translatable and can be edited directly.
      • Description text is highlighted but cannot be edited directly in Translation Mode.
      • Note: This is expected behavior. The description text contains more than 100 characters, which exceeds the Translation Mode limit for inline editing. To update the description translation, make changes in the Operations Portal.
  60. KOD-30550: Invoice total is doubled
    • Regression Tests
    • Case 1
      • Verify that regular orders (not returns) display totals without any changes.
      • Verify that email, HTML, and PDF invoice templates display and render correctly.
    • Tests
    • Case 1
      • Verify that the Downpayment field for the Return Order with a total amount displays a negative value (e.g., ($1.13))
      • Verify that the Invoice Balance Due for the Return Order is calculated correctly.
  61. KOD-30556: Upgrade to latest templates
    • Regression Tests
    • Case 1
      • Addressed in test cases of just navigating around and making sure all looks good still.
    • Tests
    • Case 1
      • Make sure when navigating across the website, everything still looks good.
      • Also check the customer portal for orders/quotes.
      • And the operations portal for orders/quotes emails and pdfs.
    • Case 2
      • Instead of saved lists up top, you should now see catalogs and if you click on the link, it will take you to the catalogs page (if logged out, you will be prompted to log in first).
    • Case 3
      • All the text that was translatable before should now have messages of >=100 characters.
      • For the example in the ticket, Enter your username or email address and we'll email you instructions on how to reset your password. is the code (before username was user name, but with it one word its >=100 characters - this change came from the demo repo).
  62. KOD-30560: Set up host for Commerce
  63. KOD-30562: Order/quote email confirmations in English when French customer
    • Regression Tests
    • Case 1
      • Log in as an English-language customer.
      • Place a standard order.
      • Check the order confirmation email.
      • Expected: Email content remains in English.
    • Case 2
      • Log in as a customer without language code selected in the customer portal.
      • Place a standard order through checkout.
      • Check the order confirmation email received.
      • Expected: All translatable text in the email (labels like "Bill To", "Ship To", "Subtotal", "Tax", "Total", etc.) should be in English.
    • Tests
    • Case 1
      • Log in as a French-language customer.
      • Place a standard order through checkout.
      • Check the order confirmation email received.
      • Expected: All translatable text in the email (labels like "Bill To", "Ship To", "Subtotal", "Tax", "Total", etc.) should be in French.
    • Case 2
      • Quote Request Email — French Customer
      • Log in as a French-language customer.
      • Submit a quote request.
      • Check the quote request email received.
      • Expected: Email content is in French.
  64. KOD-30570: Edit the checkout pages
    • Regression Tests
    • Case 1 — Full checkout flow
      • Add items to cart and complete full checkout flow.
      • Verify that order submission completes successfully.
      • Verify that order confirmation page loads.
      • Verify that order confirmation email is received.
    • Tests
    • Case 1 — Checkout page layout
      • Proceed to checkout Step 3 (Payments).
      • Verify that Order Totals shows only: Subtotal, Estimated Tax, Grand Total.
      • Verify that FAQ boxes appear on the LEFT side, Payment buttons on the RIGHT side.
      • Verify that the "Previous" button is positioned below the content.
    • Case 2 — Order page with ERP number
      • Open an order that has been released to ERP.
      • Verify that the header shows "Web Order".
      • Verify that order number shows "Web Order # / ERP Order #" with both values.
      • Verify that tax breakdown shows individual lines per jurisdiction.
    • Case 3 — Order email with ERP number
      • Check the order confirmation email for the same order.
      • Verify that the email header shows "Web Order".
      • Verify that the order number column shows both Web and ERP numbers.
      • Verify that top and bottom table borders align correctly.
      • Verify that tax breakdown shows individual lines per jurisdiction.
    • Case 4 — Order page without ERP number
      • Open an order that has NOT been released to ERP.
      • Verify that order number label shows "Web Order #" (no "/ ERP Order #").
      • Verify that order number value shows only the web order number (no trailing " / ").
    • Case 5 — Tax jurisdiction breakdown
      • Open an order with a Canadian shipping address.
      • Verify that the tax section shows individual lines per jurisdiction (e.g., "GST: $5.00", "PST: $7.00").
      • Open an order without tax jurisdiction data (e.g., US order).
      • Verify that the tax section shows a single "Tax:" line with the total tax amount.
  65. KOD-30572: Implementation - Taxes
  66. KOD-30575: Display Superseded/Inactive messaging only for users not logged in
    • Regression Tests
    • Case 1
      • Log out or open incognito/private browser window.
      • Navigate to a regular product that has NO replacement.
      • Expected Result:
      • NO superseded message banner appears.
      • Add-to-cart form is visible and functional.
      • Product page displays normally.
    • Case 2
      • Log in with a valid customer account.
      • Navigate to a superseded product page.
      • Expected Result:
      • NO superseded message banner appears (element should not exist in DOM).
      • Add-to-cart form is visible and functional.
      • Product page displays normally.
      • Navigate to a regular product that has NO replacement.
      • Expected Result:
      • NO superseded message banner appears.
      • Add-to-cart form is visible and functional.
      • Product page displays normally.
    • Tests
    • Case 1
      • Log out or open incognito/private browser window.
      • Navigate directly to a superseded product page.
      • Expected Result:
      • Superseded message banner appears in the product info area.
      • Message shows: "This item has been replaced by item [Product B code] ".
      • Link shows: "Click here to view the replacement item".
      • Add-to-cart form (quantity input, add to cart button) is HIDDEN.
    • Case 2
      • Log out or open incognito/private browser window.
      • Navigate to a superseded product page (Product A).
      • Click the "Click here to view the replacement item" link.
      • Expected Result:
      • User is navigated to the replacement product page.
    • Case 3
      • Log out or open incognito/private browser window.
      • Navigate to a configurator product page.
      • Select options that result in a superseded variant.
      • Then select options for a non-superseded variant.
      • Expected Result:
      • When the superseded variant is selected: message appears, form hidden.
      • When a non-superseded variant is selected: message hidden, form visible.
      • Message updates dynamically with each variant change.
    • Case 4
      • Log out or open incognito/private browser window.
      • Navigate to a superseded product on mobile device or resize browser to mobile width.
      • Expected Result:
      • The superseded message banner displays correctly.
      • Text wraps appropriately.
      • Icon and text remain aligned.
      • No horizontal scrolling required.
  67. KOD-30576: Add business events for comments to tickets
  68. KOD-30584: Move box for Discount / Promo Code
    • Regression Tests
    • Case 1
      • Open the commerce site, and add a product to the cart.
      • Open the Cart page and proceed to step "3. Delivery Payment":
      • Everything should work as expected.
    • Tests
    • Case 1
      • Log in the Operations Portal, and open the Settings page.
      • Check if the checkoutCouponsEnabled setting value is 1 . If it’s not, change it to 1.
      • Open the commerce site, log in as a customer, and add a product to the cart.
      • Open the Cart page and proceed to step 3. Delivery Payment:
      • The “Coupon Code” accordion box position should be on the right column, below the "Order Totals” accordion box.
  69. KOD-30592: Register/Signup Page Modification
    • Tests
    • Case 1
      • Go to the commerce site Register page.
      • It should show the text: "Need a business account instead? To use credit terms, tax exemptions, and local delivery, a business account is required. Please click here ."
      • The "click here” should be a clickable link.
  70. KOD-30593: Text/Punctuation Edits
  71. KOD-30599: Manual Fraud Flag Button with Order Blocking
  72. KOD-30619: Shop by Category Add "All Products"
  73. KOD-30622: Core Return Flow - Create return Core item name with reference to original item
    • Regression Tests
    • Case 1 - Make sure returns still work fine
      • Go to Customer Portal → Account → Orders → Find some order with status Invoiced or Paid and shipped items.
      • Initiate a new consumer return and navigate to the return items screen.
      • Select some item, enter a valid return quantity, and select a Return Reason.
      • Click "Submit Return".
      • Verify the return is submitted successfully.
  74. KOD-30625: Shipping Methods - LTL local carrier logic
    • Regression Tests
    • Case 1
      • Make sure an order that is less than 90 lbs still uses the ground shipping method.
    • Tests
    • Case 1
      • For an order > 90 lbs → if the delivery address postal code is in the list of postal codes in the operations portal, you should only see LTL Local Carrier as the shipping option on checkout and the price is determined based on weight.
      • 90-600 lbs = 1 increment = $115
      • 601-1200 lbs = 2 increments = $230
      • 1201-1800 lbs = 3 increments = $345
      • etc…
    • Case 2
      • For an order > 90 lbs but the delivery address postal code is not in the list, the delivery options should be the same as before of what was returned in the FedEx ltl response.
    • Case 3
      • If an order is < 90 lbs and the delivery address postal code on the order is in the list, it should not matter and still show the FedEx ground options.
  75. KOD-30626: Shipping Address Rules and Ship-To Management
    • Regression Tests
    • Case 1
      • Billing address can be changed via address selector.
      • Navigate to `/spcu/cart` with items in the cart.
      • Proceed to the Addresses step of checkout.
      • Select a billing address from the "Search for a billing address" autocomplete.
      • Verify the billing fields are populated with the first address.
      • Select a different billing address from the autocomplete.
      • Verify all billing fields update to reflect the newly selected address.
    • Case 2
      • Shipping address fields remain editable.
      • Navigate to `/spcu/cart` with items in the cart.
      • Proceed to the Addresses step of checkout.
      • Verify all shipping address fields (Company, First Name, Last Name, Email, Phone #, Country, Street Address, Appt / Suite #, City, State, Postal Code) are editable.
      • Enter or modify values in each shipping address field.
      • Verify the values are accepted and can be changed freely.
    • Case 3
      • "Shipping same as billing" copies billing data correctly.
      • Navigate to `/spcu/cart` with items in the cart.
      • Proceed to the Addresses step of checkout.
      • Select a billing address from the "Search for a billing address" autocomplete.
      • Check the "Shipping same as billing" checkbox.
      • Verify all shipping address fields are populated with the billing address values.
    • Case 4
      • Checkout flow completes successfully with disabled billing fields.
      • Navigate to `/spcu/cart` with items in the cart.
      • Proceed to the Addresses step of checkout.
      • Select a billing address from the "Search for a billing address" autocomplete.
      • Fill in a valid shipping address.
      • Click "Next" to proceed past the Addresses step.
      • Verify the checkout advances to the next step without errors.
    • Tests
    • Case 1
      • Billing address fields are non-editable.
      • Navigate to `/spcu/cart` with items in the cart.
      • Proceed to the Addresses step of checkout.
      • Select a billing address from the "Search for a billing address" autocomplete.
      • Verify all billing fields (Company, First Name, Last Name, Email, Phone #, Country, Street Address, Appt / Suite #, City, State, Postal Code) are populated with the selected address data.
      • Attempt to click into and type in each billing address field.
      • Verify all billing fields are disabled and cannot be edited manually.
  76. KOD-30628: Order Item Price Issue
  77. KOD-30636: Updates to manage category banner
  78. KOD-30637: Add an Whitelist Setting
  79. KOD-30640: Add option to the Contact Us page
  80. KOD-30641: Remove Down Arrows from Header Menus
  81. KOD-30646: UX Document Automation Studio - Support XML Adapters
    • Regression Tests
    • Case 1
      • Verify that PDF Order/Invoice adapters are created and function correctly.
      • Verify that the Analysis Methods section is displayed for PDF adapters.
      • Verify that PDF file upload and preview work correctly.
      • Verify that JSON Order adapters are created and function correctly.
      • Verify that JSON Invoice adapters are created and function correctly.
      • Verify that JSON file upload and preview work correctly.
    • Tests
    • Case 1
      • Verify that the XML option appears in the File Type dropdown when creating an adapter.
      • Verify that the Analysis Methods section is hidden when XML is selected.
      • Verify that the XML adapter is created with an empty analysisMethods array and the correct default code.
      • Verify that an XML file can be uploaded on the Details and Configure pages.
      • Verify that XML preview uses Monaco editor with XML syntax.
      • Verify that an XML file can be uploaded via drag and drop on the Details and Configure pages.
      • Verify that dragging and dropping a non-XML file on an XML adapter shows an error.
      • Verify that the XML adapter can be run on the Configure page.
      • Verify that the Monaco editor for XML preview has automaticLayout: true (resizes correctly when the panel size changes).
  82. KOD-30647: Custom Field columns on Category Assignment Screen
    • Regression Tests
    • Setup
      • Go to Settings → Search for integrationIndexedProductFields → Paste this JSON into its value:
      • [{"settingCode": "test-custom-field", "settingName": "Test Custom Field", "isIndexed": true, "solrField": "custom_test_field"}]
      • Refresh page.
      • Create some new product → Open its details → Open Custom Fields tab.
      • Set some value to its “Test Custom Field“ field.
    • Case 1 - Category Assignment tab still works
      • Go to Products → Category Assignment.
      • Make sure it shows data correctly.
    • Case 2 - Products tab still works
      • Go to Products.
      • Make sure it shows data correctly.
      • Make sure it has a column Test custom field with its values.
    • Tests
    • Case 1 - Verify Category Assignment tab returns custom fields
      • Open Developer tools of your browser → Network.
      • Go to Products → Category Assignment tab.
      • Verify listWithCategories request has products with custom fields in its response. Verify the product with the custom field value has the correct value.
  83. KOD-30649: Add Product Details Link to Required Attribute Assignment
    • Tests
    • Case 1
      • Log in the Operations Portal, and open the PIM → Categories page.
      • Click the Search tab, then click to show columns and select “Products Missing Required Attributes”.
      • Click to filter “Products Missing Required Attributes”, then select filter “Greater than” and input “0”.
      • Open a Category item that has “Products Missing Required Attributes”, then click the “Required Attribute Assignment” tab:
      • The grid should show an arrow icon at the right side of each item’s row.
      • Choose an item's row then click its arrow icon:
      • It should open the related Product Details page.
      • This product page should show a breadcrumb containing the related product code, following the Category previous breadcrumb.
      • In the breadcrumb, click in “Required Attribute Assignment”:
      • It should navigate back to the Category page, in the “Required Attribute Assignment” tab.
    • Case 2
      • Log in the Operations Portal, and open the PIM → Categories page.
      • Click the Data tab, then click to show columns and select “Products Missing Required Attributes”.
      • Click to filter “Products Missing Required Attributes”, then select filter “Greater than” and input “0”.
      • Open a Category item that has “Products Missing Required Attributes”, then click the “Required Attribute Assignment” tab:
      • The grid should show an arrow icon at the right side of each item’s row.
      • Choose an item's row then click its arrow icon:
      • It should open the related Product Details page.
      • This product page should show a breadcrumb containing the related product code, following the Category previous breadcrumb.
      • In the breadcrumb, click in “Required Attribute Assignment”:
      • It should navigate back to the Category page, in the “Required Attribute Assignment” tab.
  84. KOD-30651: Add Custom Fields support to Opportunities details and grid
    • Regression Tests
    • Case 1
      • Ensure that the Opportunities grid looks and functions correctly.
      • Ensure that Lead details open correctly.
      • Ensure that Quote details open correctly.
    • Tests
    • Case 1
      • Ensure that the Custom Fields tab appears on the Lead page.
      • Ensure that the Custom Fields tab appears on the Quote page.
      • Ensure that Custom Fields tab is only displayed if integrationIndexedLeadAndQuoteFields setting contains values.
      • Ensure that fields in the Custom Fields form match the setting: settingCode - value, settingName - label.
      • Ensure that columns from integrationIndexedLeadAndQuoteFields setting are available in the Column Picker on Opportunities page.
      • Ensure that custom field columns on Opportunities are read-only.
      • Ensure that when changing values in the Custom Fields form, data is saved in Developer Fields.
  85. KOD-30652: Update email templates for account activation
  86. KOD-30654: Split Order custom fields to Quote/Lead/Order
  87. KOD-30655: AI PIM Marketing Page – Improve Step Section Layout and Fix Gutenberg
  88. KOD-30657: Punchout - Limit characters
  89. KOD-30663: Payment Portal Login Issue
  90. KOD-30668: UX for Custom Field columns on Category Assignment Screen
    • Regression Tests
    • Case 1
      • Ensure that the Category Assignment grid looks and functions correctly.
    • Tests
    • Case 1
      • Ensure that the Custom Fields columns appear on the Category Assignment grid → Column selector.
      • Verify that columns from integrationIndexedProductFields setting are available in the Category Assignment grid.
      • Ensure that the Custom Fields columns on Category Assignment grid are read-only.
  91. KOD-30671: Install Applications
  92. KOD-30673: Install Applications
  93. KOD-30675: Disable session expiry popups
    • Regression Tests
    • Case 1
      • If you log in to the website without checking the “ Keep me logged in “ checkbox and wait approximately 12 minutes without doing anything on the commerce website - the session expiry popup should appear.
    • Tests
    • Case 1
      • When you are a guest user - add some items to the cart, then also wait for approximately 12 minutes without doing anything on the website. The session expiry popup should not appear.
  94. KOD-30678: Configurator product does not display French description
    • Regression Tests
    • Case 1
      • Make sure on both regular products and configurator products, the product details page still loads properly and the product details show.
    • Case 2
      • On a regular product, when switching to French, the product details on the product should still update to French.
    • Tests
    • Case 1
      • On a configurator product, when the language is set to French, the product details should now show the French translations.
      • Can also change the variants of the product and the French translation should still show.
  95. KOD-30679: Create Catalog Feature Over
    • Regression Tests
    • Case 1
      • Navigate to the category page.
      • Verify: Page loads without errors, product list displays, breadcrumbs work.
    • Tests
    • Case 1
      • Log in as a user with "companyAdmin" or "companyCatalogEdit" role.
      • Navigate to a category page.
      • Verify: "Create Catalog" button is displayed.
      • Log out from the account.
      • Navigate to the same category page.
      • Verify: "Create Catalog" button is NOT displayed.
    • Case 2
      • Navigate to a category page.
      • Click the "Create Catalog" button.
      • Enter any catalog name.
      • Click "Create".
      • Verify:
      • The loading spinner appears on the button.
      • Success screen displays with message "Catalog Creation in Progress".
      • "Your catalog will be created within the next few minutes." message is shown.
      • Click "Go to Catalogs".
      • Verify:
      • The user is redirected to /spcu/catalogs page.
      • Wait a few minutes and refresh the page.
      • Verify:
      • Created catalog appears in the catalog list.
      • Note: It may take up to 5 minutes to appear.
      • Open the created catalog.
      • Verify:
      • Product list matches the products from the original category page.
      • "Create Catalog" button is NOT displayed.
    • Case 3
      • Input validation (Error Handling).
      • Click the "Create Catalog" button.
      • Test empty name:
      • Leave the name field empty.
      • Click "Create".
      • Verify: Form is not submitted, modal stays open.
      • Test name length (>200 characters):
      • Enter a catalog name with 201+ characters.
      • Click "Create".
      • Verify: Error message "Catalog name must be less than 200 characters." is displayed.
      • Test unsafe characters:
      • Enter a catalog name with forbidden characters (e.g., "Test/Catalog" or "Test<Catalog>").
      • Click "Create".
      • Verify: Error message about forbidden characters is displayed.
      • Test duplicate name (API error):
      • Enter a catalog name that already exists.
      • Click "Create".
      • Verify: Error message from server is displayed, loading spinner is removed, user can retry.
    • Сase 4
      • Test modal reset on close:
      • Click the "Create Catalog" button.
      • Enter catalog name: "Test".
      • Close the modal (click X or outside).
      • Click the "Create Catalog" again.
      • Verify: Name field is empty, no error messages, form content visible.
      • Test double-click prevention:
      • Click "Create Catalog" button.
      • Enter catalog name: "Test Catalog".
      • Quickly click "Create" multiple times.
      • Verify: Only one API request is sent, button shows loading state after first click.
      • Test close after success:
      • Complete a successful catalog creation.
      • Click "Close" instead of "Go to Catalogs".
      • Verify: Modal closes.
      • Click "Create Catalog" again.
      • Verify: Modal shows form (not success screen), form is reset.
  96. KOD-30684: New Messaging for Home Page and Order Confirmation Email
  97. KOD-30685: Rounding Causing Taxes in Kodaris to Differ from CSD
  98. KOD-30686: Site: adding GTM
    • Tests
    • Case 1: Verify That Required Elements Are Present in the DOM Tree
      • Open the website.
      • Open browser developer tools.
      • Navigate to the Elements (DOM) tab.
      • Verify configuration from the Operations Portal.
      • (Google Analytics settings page) has been correctly added and is present in the DOM (Google Tag Manager, Google Tag Manager (noscript)).
  99. KOD-30687: Adding Multiple Product Images Extends Page Height
    • Regression Tests
    • Case 1
      • Product image zoom still works.
      • Navigate to a product detail page with at least one image.
      • Hover the mouse over the main product image.
      • Verify the zoom effect activates and a larger version of the image is displayed over the main image area.
    • Case 2
      • Product detail page displays correctly on mobile viewport.
      • Navigate to a product detail page with multiple images.
      • Resize the browser to a mobile viewport (960px or narrower).
      • Verify the Swiper thumbnail strip is hidden.
      • Verify the layout stacks vertically (image on top, product details below).
      • Verify the standard Bootstrap carousel dot indicators are visible for image navigation.
    • Tests
    • Case 1
      • Swiper thumbnail carousel on product with 5+ images.
      • Navigate to a product detail page for a product with 5 or more images.
      • Verify the image thumbnails appear in a vertical Swiper strip to the left of the main product image.
      • Verify up/down arrow buttons are visible above and below the thumbnail strip.
      • Click the down arrow to scroll to additional thumbnails.
      • Click a thumbnail that was not initially visible.
      • Verify the main product image changes to match the selected thumbnail.
    • Case 2
      • Swiper thumbnail carousel on product with 2-4 images.
      • Navigate to a product detail page for a product with 2 or 4 images.
      • Verify the thumbnails appear vertically on the left.
      • Verify no up/down arrow buttons are displayed.
      • Click each thumbnail and verify the main product image changes accordingly.
  100. KOD-30689: Product Barcode Sync Job for Mobile Scanner
  101. KOD-30695: Bulk Welcome Email Send from Kodaris
  102. KOD-30699: Enable Checkout with Purchase Order and Credit Card Options
  103. KOD-30700: Account Automation Shipto Update
    • Regression Tests
    • Case 1
      • Make sure the company address is successfully saved in the ERP.
    • Tests
    • Case 1
      • Make sure the following fields are saved in the ERP when saving the address: cyclecd = COD, statementty = N
  104. KOD-30711: page: /operations/quotes/data uses wrong POST: api/system/quote/list for exporting file, need to use /export
    • Tests
    • Case 1
      • Go to Operations Portal, CRM → Quotes.
      • Open the Network tab in the DevTools to check that we’re using the new endpoint.
      • Open File dropdown and click on Export.
      • Perform export of the data. Check in the Network tab that we’re using a new request for export.
      • Check that the exported file looks good and we don’t have any broken data.
  105. KOD-30720: Update CRM Notes Formatting
  106. KOD-30735: Kodaris - Auto redirect customers into the customer portal after log in
  107. KOD-30739: Kodaris - Fix cross ref unit conversion number error on quote
    • Regression Tests
    • Case 1
      • On both quotes and orders screen → Make sure if there is no cross reference, you still get the modal displaying ‘This Item doesn’t have an associated cross reference'.
    • Tests
    • Case 1
      • On orders screen → go to the order items tab and click an item that has a cross reference (non stock will work) (if there is no nonstock, you can add it) → then fill out the data in the modal → click submit and now you should not get an error and the modal should close.
      • Should also test this on an item that isn’t a non stock that has a cross reference and you need to make sure the order item has customerProductCode set on it (this is to test the update section in the code instead of the create).
    • Case 2
      • Repeat case 1 but on the quotes screen.
  108. KOD-30748: Revert changing the footer from black background to reflex blue
  109. KOD-30749: Implementation - Spin Up System
  110. KOD-30756: Setup base search rules
  111. KOD-30776: Create AI Storage Flows