All Releases
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

February 26, 2026 release notes

Highlights

Operations Portal

Track Products Missing Required Attributes in Categories

The Operations Portal Categories screen now includes a new "Products Missing Required Attributes" column in both Search and Data tabs.

The new column displays the count of products within each category that lack required attribute data. Located in the column selector (disabled by default), users can enable this column to view missing attribute counts directly in the category grid. The column supports both sorting and filtering capabilities, making it easy to identify categories that need attention.

Users can click through to category detail pages and access the "Required Attribute Assignment" tab to verify the exact products flagged with missing attributes. This streamlined workflow helps data managers quickly locate and prioritize categories requiring attribute completion, improving overall data quality management across product catalogs.

https://youtu.be/X_FvR0mpLok

Tickets

  1. KOD-19272: Leveraging AI with multilingual translation - Products
  2. KOD-26937: Add Shipping Date to the Cart screen
    • Tests
    • Case 1
      • Enter the Operations Portal, and open the Settings page.
      • Search for checkoutOrderItemDeliveryDateEnabled, then open it and set its value to 1.
      • Click Save.
      • Enter the to the commerce site, and log in as a customer.
      • Add two different products to the cart, then open the cart page.
      • It should display a Delivery Date input for each product in the cart, under the Quantity field.
      • The Delivery Date input should have the same style as the Quantity input both in desktop and mobile versions.
      • Select a Delivery Date for a product, then select a different date for the other product.
      • It should not accept past dates.
      • Try to set a past date: it should display a validation popup with the message “Select a date greater than today”.
      • Reload the page: the valid selected dates should be displayed in the fields after reloading.
    • Case 2
      • Enter the Operations Portal, and open the Settings page.
      • Search for checkoutOrderItemDeliveryDateEnabled , then open it and set its value to 0.
      • Click Save.
      • Enter the to the commerce site, and log in as a customer.
      • Add two different products to the cart, then open the cart page.
      • It should not display a Delivery Date input for each product in the cart, under the Quantity field.
  3. KOD-27113: Add deposit option to lockbox setup screen
    • Regression Tests
    • Case 1
      • Navigate to the Lockbox Configuration page (`/lockbox/configuration`).
      • Check if it is displayed as expected.
      • Modify the "Routing Number" field to a new value.
      • Click outside the field to blur and trigger save.
      • Refresh the page and verify the "Routing Number" value persisted correctly.
    • Tests
    • Case 1
      • Navigate to the Lockbox Configuration page ( /lockbox/configuration).
      • Ensure "Batch Out Method" is set to a non-API method (e.g., "JSON" or "EDI820") and "Enable Batch Out per Host" is set to "No".
      • Scroll down to the "Transaction Types" field below the "Routing Number" field.
      • Verify the "Transaction Types" field displays a note: "Web Account Payment" transactions are always included.
      • Click on the "Transaction Types" multi-select dropdown.
      • Confirm there is no option to deselect "Web Account Payment" (it is not listed as a selectable option since it is always included).
      • Select the "Deposit on Account" option.
      • Click outside the dropdown to blur and trigger save.
      • Verify the setting saves without error.
      • Refresh the page and verify "Deposit on Account" is still selected in the "Transaction Types" dropdown.
      • Navigate to the Settings page (`/settings`) and search for "lockboxExtraTransactionTypes".
      • Verify the setting value contains "97" and "99" (97 = Deposit on Account, 99 = Web Account Payment).
    • Case 2
      • Navigate to the Lockbox Configuration page ( /lockbox/configuration).
      • Ensure "Batch Out Method" is set to a non-API method and "Enable Batch Out per Host" is set to "No".
      • Open the "Transaction Types" multi-select dropdown.
      • Deselect "Deposit on Account" if it is currently selected (so no extra types are checked).
      • Click outside the dropdown to blur and trigger save.
      • Refresh the page and verify the "Transaction Types" dropdown shows no selections.
      • Navigate to the Settings page (`/settings`) and search for "lockboxExtraTransactionTypes.
      • Verify the setting value is "99" only (Web Account Payment is always included, no extra types).
  4. KOD-27465: Add UX for new streaming AI Chat endpoint functionality
    • Regression Tests
    • Case 1
      • Open AI Chat page.
      • Check browser console for errors.
      • Type "Test message" in the input field.
      • Click the Send button.
      • Wait for an AI response.
      • Expected Result:
      • No JavaScript errors in browser console.
      • The input field accepts text normally.
      • The Send button responds to clicks.
      • Messages from AI displays correctly.
    • Tests
    • Case 1
      • Go to `/ai-chat` page.
      • Type for example "Hello AI" in the input field and click the Send button.
      • Expected Result:
      • Message "Hello AI" appears on the right with the user avatar.
      • The input field is cleared.
      • "Kodaris AI is typing..." indicator appears.
      • The send button becomes disabled.
    • Case 2
      • After sending a message, wait for an AI response.
      • Expected Result:
      • "Reasoning" section appears with expand/collapse toggle.
      • Main AI response displays below reasoning section.
      • "typing..." indicator disappears.
      • Send button becomes enabled.
    • Case 3
      • Send several messages, then click the "New Conversation" button.
      • Expected Result:
      • All messages disappear.
      • Welcome message "Welcome! How can I assist you today?" appears.
      • "New Conversation" button is hidden.
    • Case 4
      • Handle Connection Error.
      • Disconnect the internet and try to send a message.
      • Expected Result:
      • A red message appears: "Sorry, there was an error connecting to the server."
  5. KOD-28222: Adding Card to CSD Created From Ticket 38172
  6. KOD-28550: Microsoft Outlook Integration - Implement Integration pattern
  7. KOD-28762: Under tendering orders
  8. KOD-28843: Payment Processing and infor/datalake API Methods
  9. KOD-28964: Checklist Required by for SSO and Integration
  10. KOD-29270: Create App Listing
  11. KOD-29282: Check Caching on Price Types not Updating from Imports
  12. KOD-29343: Update rule utils
  13. KOD-29378: Re: Invoice Form Change
  14. KOD-29413: Your Order Details
  15. KOD-29487: Non-Stock Items Exception Handling for Quote Lookup
  16. KOD-29488: CSD Payments: invoice number on a refund transaction
  17. KOD-29492: Redesign "Save to ERP" flow to follow standard patterns
    • Regression Tests
    • Case 1
      • Open up logs.
      • Test with an address that has NO "trendCompiledSettings" and NO "lastSyncedToErp".
      • Expected: Should call adding company address to ERP internally and succeed.
      • Test with address that HAS "trendCompiledSettings" setting.
      • Expected: Should call updating company address in ERP internally and succeed.
      • Test with an address that has "lastSyncedToErp" but NO "trendCompiledSettings".
      • Expected: Should call updateCompanyAddressInErp internally (lastSyncedToErp indicates it was previously added).
    • Case 2
      • Purpose: Verify background job still functions correctly with new pattern.
      • Precondition: Have job setting enabled: jobSyncCompanyAddressesToErp
      • Create or update a company address to trigger sync (set syncedErpStatus if applicable).
      • Wait for FiveMinuteBulkJob to run (or manually trigger in the scheduler).
      • Check logs for " [JS] Looking for companyID {}, companyAddressID {}".
      • Expected: Job processes company addresses using the new add/update logic.
    • Case 3
      • Open Swagger: POST /api/system/integration/infor/syncCompanyAddress.
      • Provide companyID and companyAddressID as query parameters.
      • Execute the endpoint.
      • Expected: Should work correctly using the refactored sync logic.
    • Tests
    • Case 1
      • Precondition: Find or create a company address that has NOT been synced to ERP (no "trendCompiledSettings" setting and no "lastSyncedToErp" value).
      • Open Swagger: /api/system/company/address/{companyID}/{companyAddressID}/addCompanyAddressToErp
      • Enter valid companyID and companyAddressID.
      • Execute the endpoint.
      • Expected: Response shows success=true, address is added to ERP.
    • Case 2
      • Precondition : Use a company address that has "shipto" setting (required - endpoint validates this)
      • Open Swagger: /api/system/company/address/{companyID}/{companyAddressID}/updateCompanyAddressInErp
      • Enter valid companyID and companyAddressID.
      • Execute the endpoint.
      • Expected: Response shows success=true, address is updated in ERP.
    • Case 3
      • Precondition: Find or create a company address WITHOUT "shipto" setting
      • Open Swagger: /api/system/company/address/{companyID}/{companyAddressID}/updateCompanyAddressInErp
      • Enter the companyID and companyAddressID without shipto setting.
      • Execute the endpoint.
      • Expected: Returns 400 Bad Request with message "Missing CompanyAddress shipto setting".
    • Case 4
      • Open Swagger for either new endpoint.
      • Enter valid companyID but non-existent companyAddressID.
      • Execute the endpoint.
      • Expected: Returns 404 Not Found error.
      • Enter non-existent companyID with any companyAddressID.
      • Execute the endpoint.
      • Expected: Returns 404 Not Found error.
      • Login as user WITHOUT administrator, superuser, or companyEdit roles.
      • Attempt to call the new endpoints.
      • Expected: 403 Forbidden error.
      • Log out of the system.
      • Attempt to call the new endpoints directly via Swagger/API.
      • Expected: 401 Unauthorized error.
    • Case 5
      • Test new server side endpoints within user scripts:
      • /api/system/company/address/{companyID}/{companyAddressID}/updateCompanyAddressInErp
      • /api/system/company/address/{companyID}/{companyAddressID}/addCompanyAddressToErp
      • /api/system/integration/infor/{skuID}/addSku
      • /api/system/integration/infor/addCompany
      • Look under QA tests for code sample with ready requests.
      • Open up logs.
      • Change null values to your actual data on the website.
      • Run the script and look at the logs.
  18. KOD-29513: Make Name Sortable for Related Products - UX
    • Regression Tests
    • Case 1
      • Make sure the products → Related products table still loads properly.
      • Make sure the name column still loads correctly as well as if you go to add more columns and uncheck the name and recheck it so that it shows up fine.
    • Tests
    • Case 1
      • On the Name column, notice you can now sort on it → click the arrow and the names will be in ascending order, click again, and the names will be in descending order, click a third time and there will be no more sorting.
    • Case 2
      • Repeat that test above for the data screen and category assignment screen.
      • Products → Data → click into a product → related products.
      • Products → Category Assignment → click into a product → related products.
  19. KOD-29528: Budgets - Company budget error when calculating
    • Regression Tests
    • Case 1
      • Validate company address budget calculation is still working as expected when click on the calculate button from Company → Address → Budgets → Budget screen.
      • Pre-requirements:
      • To have at least one order whose status matches the company address Budget Restriction Type field value.
      • This order(s) must have properly configured the shipto setting to this company address.
      • Steps:
      • From Kodaris operations platform go to the Company Address screen and enter the details of the Company Address you’ll use (you can create a new one if needed).
      • Click on the Add Budget button adjust fields and then click on add.
      • Go to the company of this Company Address.
      • Go to tab Addresses and select the Company Address.
      • Select the Company Address and then go to its budgets and select the budget.
      • Click on calculate Button.
      • If you go to tab items now you will see a list with the line budgets created and if you go the Company budgets screen you must see that the Parent Budget’s Current Spend Amount field is equals to the total of your order (or the total of all you’re implied order together) and the in the line items, this line items will be the total by product, total in taxes and total discounts.
    • Case 2
      • Validate company address budget calculation is still working as expected when DailyIntervalJob runs and the setting jobRecalculateCompanyAddressBudgets is enabled.
      • Pre-requirements:
      • To have at least one order whose status matches the company address Budget Restriction Type field value.
      • This order(s) must have properly configured the shipto setting to this company address.
      • Setting jobRecalculateCompanyAddressBudgets must be enabled.
      • Steps:
      • Execute the first 5 steps defined in the previous test.
      • In the other browser tab go to the Scheduler screen and manually execute the DailyIntervalJob scheduler.
      • Wait a moment (this could take a little while according to the environment).
      • Go back to the previous browser tab.
      • If you go to tab items now you will see a list with the line budgets created and if you go the Company budgets screen you must see that the Parent Budget’s Current Spend Amount field is equals to the total of your order (or the total of all you’re implied order together) and the in the line items, this line items will be the total by product, total in taxes and total discounts.
    • Tests
    • Case 1
      • Validate that when create/update a CompanyBudget with type “Total Spend” for a company who already has a budget of this type an error is displayed and the budget is not created.
      • Pre-requirements:
      • A company budget with type with total spend and no company address id set – If you don’t have one, just follow the steps 1 to 3 to create it
      • Steps:
      • From the operations portal go to Company Budgets screen.
      • Click on the Show/Hide Columns button and select the Budget Type column.
      • Add a new Company Budget row with budget type “Total Spend”.
      • A red banner with message Another budget with type Total Spend already exists for Company with ID <your companyID> must appear.
    • Case 2
      • Validate that when create/update a CompanyAddressBudget with type “Total Spend” for a company address who already has a budget of this type an error is displayed and the budget is not created.
      • Pre-requirements:
      • A company budget with type with total spend and company address id set – If you don’t have one, just follow the steps 1 to 3 to create it
      • Steps:
      • From the operations portal go to Companies > company > Addresses > Address > Budgets screen.
      • Click on the Show/Hide Columns button and select the Budget Type column.
      • Add a new Company Address Budget row with budget type “Total Spend”.
      • A red banner with message Another budget with type Total Spend already exists for CompanyAddress with ID <your companyAddressID> must appear.
    • Case 3
      • Validate that when create/update a Company Budget with customer and type “Total Spend” for a company who already has a budget of this type an error is displayed and the budget is not created.
      • Pre-requirements:
      • A company budget with type with total spend and no company address id set – If you don’t have one, you can create it just following steps 1 to 3 from Case 1.
      • A customerID of a customer whose company is the company which has the pre-existing budget
      • Steps:
      • From swagger, look for the endpoint /api/system/companyBudget/customer/{customerID} under the Company Budget API section.
      • In the customerID param pass the ID of the customer you want to create the budget for.
      • In the body pass the a simple payload with budgetType field set to Total Spend – like one below
      • Click on the execute button.
      • A 400 response with message Another budget with type Total Spend already exists for Company with ID <your companyID> must be retrieved.
      • {
      • "code" : "MY_BUDGET_WITH_CUSTOMER" ,
      • "name" : "My Budget with Customer" ,
      • "active" : true ,
      • "budgetType" : "Total Spend"
      • }
    • Case 4
      • Validate that when creating a Company Address Budget from the customer side with “Total Spend” for a company address who already has a budget of this type an error is displayed and the budget is not created.
      • Pre-requirements:
      • A company budget with type with total spend and company address id set – If you don’t have one, you can create it just following steps 1 to 3 from Case 1
      • A customerID of a customer whose company is the company which has the pre-existing budget
      • Steps:
      • From swagger, look for endpoint /api/account/companyAddressBudget/{companyAddressID}
      • under the Customer Company Address Budget API section.
      • In the companyAddressID param pass the ID of the companyAddress you want to create the budget for
      • In the body pass a simple payload like one below – no need to pass since this flow creates only Total Spend budgets.
      • Click on the execute button.
      • A 400 response with message Another budget with type Total Spend already exists for CompanyAddress with ID <your CompanyAddressID> must be retrieved.
      • {
      • "code": "MY_CUST_COMP_ADDRESS_BUDGET",
      • "name": "MY_CUST_COMP_ADDRESS_BUDGET",
      • "active": true
      • }
  20. KOD-29541: Quick Order from Import File Placement
  21. KOD-29648: Search metrics or reports
    • Regression Tests
    • Case 1
      • Search for a term that returns many results.
      • Make sure that there are no error messages.
      • Switch between pages, make sure that pagination works (the next portion of products is shown) and there are no error messages.
    • Case 2
      • Search for a term that returns no results.
      • Make sure that there are no error messages.
    • Case 3
      • Add a product to cart.
      • Make sure that there are no error messages appear and the products are added to cart.
  22. KOD-29660: Implementation - ERP Configuration
  23. KOD-29670: Scope Batch Report w/ Flipped Return Signs
    • Tests
    • Case 1
      • Ensure that the user script (BatchReportGenerator) generates a CSV file with transactions for the specified date and MID.
      • Verify that the file contains the following columns: Payment_ID, Date_Time, Order_Number, Transaction_Type, Card_Type, Original_Amount, Display_Amount, Status, Confirmation_Code, Last_4, Host_Code.
      • Ensure that transactions of type WebRefund, Return (98), Credit Memo (6), Misc Credit (5) are displayed with negative amounts in the Display_Amount column.
      • Verify that regular payments (WebCreditCard, Invoice, Scheduled Pay) remain positive.
      • Verify that the Total Batch Amount (sum of all Display_Amount) is calculated correctly.
      • Check that the Total Sales calculation is correct (positive transactions only).
      • Check that the Total Returns calculation is correct (negative transactions only).
      • Check that the totals by card type (Visa, American Express, etc.) are calculated correctly.
      • Make sure that the email with the CSV file attachment is sent to the specified address.
  24. KOD-29700: Job Id added to checkout and acknowledgments
    • Regression Tests
    • Case 1
      • Check that order creation is working correctly.
      • Check that the layout in step 3 of the checkout looks correct.
      • Check that the Thank You page templates and the email after order creation look correct.
      • Check that there are no errors in the console.
    • Tests
    • Case 1
      • Verify that the field "Job Name" appears in step 3 of the checkout process.
      • Verify that the field is optional.
      • Verify that when entering data in this field, it is displayed on the Thank You page, as well as in the email after creating the order.
  25. KOD-29709: AP: Invoice Email Failure
  26. KOD-29710: AP: PO Number Not Found (Invoice Format Update)
  27. KOD-29719: Missing French Text - Part 2
    • Regression Tests
    • Case 1
      • Navigate to /spcu/form-sign-up page.
      • Verify that this page still loads fine for English and French languages.
    • Case 2
      • Navigate to /spcu/form-special-order.
      • Verify that this page still loads fine for English and French languages.
    • Case 3
      • Add some items to the cart and navigate to the cart.
      • Navigate to the third step of checkout.
      • Choose a card as a payment method.
      • Verify text looks good for card payment.
    • Case 4
      • Navigate to /spcu/form-ice-melt-order.
      • Verify that this page still loads fine for English and French languages.
    • Case 5
      • Verify that order templates still load fine.
    • Case 6
      • Login as a customer.
      • Navigate to the customer portal → Orders screen.
      • Choose order 2038 and verify that everything looks good.
    • Case 7
      • Clean cookies before testing.
      • Log in as a customer.
      • Language of site should be English.
      • Add some items to the cart and place an order.
      • You should see popup.
      • Make sure it’s showing in English
    • Case 8
      • Verify that public tracking page still loads fine.
    • Case 9
      • Login as a customer.
      • Navigate to the customer portal → orders.
      • Choose order that older than 6 month and in status Shipped/Invoice(e.g. 1508).
      • Navigate to Tracking.
      • Make sure page still looks good.
    • Case 10
      • Login as a customer.
      • Navigate to the customer portal → orders.
      • Choose order that is direct order(e.g. 1238).
      • Navigate to Tracking.
      • Make sure page still looks good.
    • Case 11
      • Login as a customer.
      • Navigate to the customer portal → orders.
      • Choose any order. As example order 5470.
      • Navigate to Tracking.
      • Make sure page still looks good.
    • Tests
    • Case 1
      • Navigate to /spcu/form-sign-up page.
      • Switch languages to French..
      • Verify that text under the Sign Up for a New Account form is now translated to French.
      • Verify that checkbox below the Sign Up for a New Account form is now translated to French.
    • Case 2
      • Navigate to /spcu/form-special-order.
      • Switch languages to French.
      • Verify that checkboxes are translated to French.
    • Case 3
      • Change language to French.
      • Add some items to the cart and navigate to the cart.
      • Navigate to the third step of checkout.
      • Choose card as payment method.
      • Verify that text To pay with credit card, enter your card details below click place order are translatable to French.
    • Case 4
      • Login as a customer.
      • Switch languages to French.
      • Navigate to /spcu/form-ice-melt-order.
      • Near Account # you see information icon
      • Verify that text for this icon is translatable now.
    • Case 5
      • Login as a customer.
      • Switch languages to French.
      • Navigate to the customer portal → orders → choose any order with Handling Fee discount.
      • Make sure that discount name is translatable.
    • Case 6
      • Login as a customer.
      • Change language to French.
      • Navigate to the customer portal → Orders screen.
      • Choose order 2038 and verify that text To view associated orders, please click the Associated Orders button above or click this  link is translated now.
    • Case 7
      • Clean cookies before testing.
      • Log in as a customer.
      • Change language in header to French.
      • Add some items to the cart and place an order.
      • You should see popup.
      • Make sure it’s showing in French.
    • Case 8
      • Check on public tracking URL that text is translatable to French.
    • Case 9
      • Login as a customer.
      • Change language to French.
      • Navigate to the customer portal → orders.
      • Choose order that older than 6 month and in status Shipped/Invoice.
      • Navigate to Tracking.
      • Make sure that text is translatable.
    • Case 10
      • Login as a customer.
      • Navigate to the customer portal → orders.
      • Choose order that is direct order.
      • Navigate to Tracking.
      • Make sure that text is translatable.
    • Case 11
      • Login as a customer.
      • Navigate to the customer portal → orders.
      • Choose any order.
      • Navigate to Tracking.
      • Make sure that text is translatable.
  28. KOD-29720: Footer Links Edits
    • Regression Tests
    • Case 1
      • Check that footer still loads fine for English language.
    • Case 2
      • Check that footer still loads fine for French language.
    • Tests
    • Case 1
      • Check that there are new sections in footer:
      • Terms and Conditions
      • Return Policy
      • FAQs
      • and they are going to corresponding pages.
      • Also, check that for French language, translation is working.
  29. KOD-29763: Configurable products double image
    • Regression Tests
    • Case 1
      • Open a regular (non-configurator) product page.
      • Check the image carousel.
      • Verify all product images are displayed.
      • Expected Result:
      • All images array are displayed in the carousel.
      • No duplicate images.
      • Carousel navigation works correctly.
    • Case 2
      • Open configurator product page.
      • Select a variant that has Product Files.
      • Check the image carousel.
      • Expected Result:
      • All images from Product Files are displayed.
      • mediumImage is also displayed (added once at the end).
      • No duplicates.
    • Tests
    • Case 1
      • Preconditions:
      • Product has productDisplayType === "Configurator".
      • Product variant has Public Files with multiple images.
      • Steps:
      • Open configurator product page.
      • Select any product variant from the option dropdowns.
      • Check the image carousel.
      • Expected Result:
      • Each image in the carousel appears only once.
    • Case 2
      • Steps:
      • Open configurator product page.
      • Select any product variant from the option dropdowns.
      • Check the image carousel.
      • Expected Result:
      • Each image in the carousel appears only once.
  30. KOD-29764: UX for merging guest cart with user cart
  31. KOD-29784: Display Unapplied Cash In the Customer Portal-AR Lockbox Update
  32. KOD-29787: Add dataEntityCreatedEvent for Business Events
    • Regression Tests
    • Case 1
      • Verify that deleting and updating one of the watched entities (order, product, administrator) still performs as expected. (Audit log is created if rule and event are turned on, and the entities look correct in the operations portal).
    • Case 2
      • Verify that creating a watched entity (Order, Product, Administrator) still completes successfully and the entity is persisted to the database.
      • Create new Order, Product, and Administrator and verify that they all appear as expected in the Operations Portal.
      • Expected Results:
      • All entities are created successfully without errors.
      • Entities are visible in the UI after creation.
      • No exceptions or errors in application logs.
  33. KOD-29795: User registration process
  34. KOD-29824: COD Payment Form - Add amount validation
  35. KOD-29832: Add Missing Server Side Endpoints
  36. KOD-29840: Configure Public Pricing
  37. KOD-29843: Process ACH Auth and Capture
  38. KOD-29847: Add UX for the bulk adding of products to a catalog
    • Regression Tests
    • Case 1
      • Make sure you can still load a category page and everything looks the same.
    • Case 2
      • On a company/customer catalog, make sure you still see the Print Catalog button and can print a catalog.
      • You should not see any print catalog button on the catalog page.
    • Tests
    • Case 1
      • If you have companyAdmin or companyCatalogEdit role, you should now see a Create Catalog primary action button on the category pages.
      • Click the button and a pop up will appear → Enter in a catalog name (if you don’t enter in a name, you won’t be able to create the catalog and it will tell you to add the name) and click Create → a success screen should appear saying the catalog creation is in progress and it will take a few minutes to complete → you can either close the dialog or click Go to Catalogs.
      • If you click go to catalogs it will take you to the catalogs screen.
      • After the 5 min interval job runs, navigate to the catalogs page and you should see the new catalog created from that category → click into that catalog and you should see the same amount of products are in that catalog as are in the category.
    • Case 2
      • If you do not have companyAdmin or companyCatalogEdit role, you should not see the Create Catalog button and therefore cannot create a catalog.
    • Case 3
      • When creating a catalog, if you type in a name that has already been used before (the code of the catalog is the same), it will give you an error and the modal will stay open.
    • Case 4
      • When creating a catalog, if you type in a name that is > 200 characters, it will give you an error and the modal will stay open.
    • Case 5
      • When creating a catalog, if you type in a name that has special characters, it will give you an error and the modal will stay open.
    • Case 6
      • When creating a catalog, if you click the Create button and get a success message, if you try clicking the create button again, it won’t do anything.
      • If you close the modal (after success) and reopen it, the create button should be clickable again
  39. KOD-29851: Add UX for country code searching on tax rate tables
    • Regression Tests
    • Case 1
      • Check that Tax Rates screen still loads fine.
    • Tests
    • Case 1
      • Check that on Tax Rates screen, Country Code field is filterable and sortable.
  40. KOD-29860: Order Flow - Dealer & User Upload
  41. KOD-29862: Guest account creation feedback
  42. KOD-29874: COD Payments - Not tendering in SX
  43. KOD-29882: GA4 Ecommerce Purchase Tracking Implementation
    • Regression Tests
    • Tests
    • Case 1
      • Add an item to the cart and go thru checkout but before submitting the order, open up your dev tools → submit the order → now on the console type in window.dataLayer and click enter → notice the purchase event in there with the appropriate data (If the customer has access to view pricing, you should see those values for total, tax, and shipping, and unitPrice in the orderItems. However, if you don’t have access to view pricing, then you will see undefined for total, tax, and shipping, and unitPrice in the orderItems will not be present)
      • Now reload the page → do the same thing (type in window.dataLayer in the console) → notice this time the purchase event is not there, which is what we want (only want it to fire once).
  44. KOD-29883: New webform, new submission destination
  45. KOD-29884: Not reading Product No. column from invoice
  46. KOD-29886: Invoice Parser
  47. KOD-29896: Automating Account Process Tweaks
    • Regression Tests
    • Case 1
      • Ensure that the company is successfully created when submitting the spcu/register-new-customer form.
      • Ensure that the company is successfully saved in the ERP without any errors.
    • Tests
    • Case 1
      • Ensure that when importing the file into the postal codes table, the taxJurisdiction2 field becomes a number.
    • Case 2
      • When saving the company in ERP, check the fields and their values on the system events screen.
    • Case 3
      • Check that the values are recorded in the ERP on the events screen.
  48. KOD-29902: Kodaris - UI fixes
    • Regression Tests
    • Case 1
      • Confirm sidebar title is visible and displayed correctly.
    • Case 2
      • Сonfirm that the title in the table component is visible and displayed correctly.
      • Confirm table header is visible, header labels are correct, and the columns still resizes correctly.
    • Tests
    • Case 1
      • Confirm that for a long title the full text is visible and there is no text truncation, overlap, or UI breaking.
    • Case 2
      • Inspect the table title via DevTools and confirm the font size is 20px.
      • Confirm there is no resize indicator on the last column, try to resize the last column, and confirm it still resizes correctly.
  49. KOD-29917: GeoCode - Multiple Add-On Fees - Updates
  50. KOD-29919: Non-stock Items in Kodaris (Kodaris only non-stock products)
  51. KOD-29921: AHRI - Link to AHRI Certificate
    • Regression Tests
    • Case 1
      • AHRI numbers display in product attributes.
      • Navigate to a product that has AHRI related products.
      • Verify the "AHRI #" label still appears in the attributes section.
      • Verify each AHRI number is displayed and separated by “ - ” when there are multiple.
      • Verify the layout and spacing of the attributes section is not broken.
    • Case 2
      • AHRI slider displays correctly.
      • On the same product page, scroll to the "Related AHRI Products" slider.
      • Verify each slide still shows the AHRI number with the "AHRI #" label.
      • Verify slide navigation (prev/next arrows) still works.
      • Verify slide content (image, part code, name, "VIEW DETAILS" button) is unaffected.
    • Case 3
      • Product without AHRI numbers.
      • Navigate to a product that has no AHRI related products.
      • Verify the "AHRI #" row does not appear in the attributes section.
      • Verify the AHRI slider section does not appear.
      • Verify the rest of the product page renders normally.
    • Tests
    • Case 1
      • Attribute links redirect to correct AHRI page.
      • Navigate to a product with AHRI numbers.
      • Click an AHRI number link in the attributes section.
      • Verify a new tab opens (does not navigate away from the product page).
      • Verify the URL where {ahriNumber} matches the number clicked.
      • Verify the AHRI directory page loads and shows the correct certificate.
      • If there are multiple AHRI numbers, repeat for each one.
    • Case 2
      • Slider links redirect to correct AHRI page.
      • Scroll to the AHRI slider section.
      • Click an AHRI number link on a slide.
      • Verify a new tab opens.
      • Verify the AHRI directory page loads correctly.
  52. KOD-29927: Header language dropdown menu - Widget
    • Regression Tests
    • Case 1
      • Go to Pages.
      • At the top, click Add Page.
      • Choose Gutenberg.
      • Close the initial dialog.
      • Confirm that the Gutenberg page loads without issues.
      • Add any content.
      • Confirm that the content can be added without errors.
      • Click Preview.
      • Confirm the added content appears on the preview page successfully.
    • Tests
    • Case 1
      • Go to Pages.
      • At the top, click Add Page.
      • Choose Gutenberg.
      • Close the initial dialog.
      • Type /language selector.
      • Confirm the language selector appears on the page.
      • Since it works with server data, this selector will not work on click in Gutenberg.
      • Click Save Preview.
      • Confirm the language selector appears on the preview page.
      • Click the selector.
      • Confirm the list of available languages is displayed.
      • Select any option.
      • Confirm the language is successfully updated.
  53. KOD-29929: CRM Custom Fields Needed
  54. KOD-29930: AHRI - Create Documentation for AHRI Product Importer
  55. KOD-29931: Export for Quote Non-Stock Items - Next Steps
    • Regression Tests
    • Case 1
      • Go to the automation app.
      • Go to the workflow page.
      • Expected:
      • The page loads successfully, showing the current workflows.
    • Case 2
      • Go to the automation app.
      • Go to the workflow page.
      • Try to search rules by code or name.
      • Expected:
      • The search must work, showing the workflows according to the text.
    • Case 3
      • Go to the automation app.
      • Go to the workflow page.
      • Click in the “edit” button of a previous existent workflow.
      • Expected:
      • The page loads successfully, showing the information about the workflow.
    • Case 4
      • Go to the automation app.
      • Go to the workflow page.
      • Click in the “Add workflow” button.
      • Fill the information.
      • Expected:
      • The workflow is created successfully with the information filled before.
    • Case 5
      • Go to the automation app.
      • Go to the workflow page.
      • Click in the “edit” button of a previous existent workflow.
      • Edit information.
      • Click in the “save” button.
      • Expected:
      • The workflow information must be edited successfully with the information filled before.
    • Case 6
      • Go to the automation app.
      • Go to the workflow page.
      • Click in the “edit” button of a previous existent workflow.
      • Click the “Actions” button.
      • Click in “delete workflow” button.
      • Expected:
      • The workflow is deleted successfully.
  56. KOD-29936: Add Zoom Info Script
    • Tests
    • Case 1
      • Verify ZoomInfo tracking script loads only on public pages:
      • Navigate to the home page.
      • Open Browser DevTools (F12).
      • Go to the Console tab.
  57. KOD-29941: Company Group Catalog Price Book UX
    • Regression Tests
    • Case 1
      • Navigate to a company catalog page as a customer that has no price book templates configured.
      • Click the "Actions" dropdown and select "Export Price List".
      • Verify the modal opens and immediately shows "Exporting the price list is currently in progress. We'll send you an email once it is ready to download." without briefly flashing a template dropdown.
      • Close the modal.
    • Case 2
      • Navigate to a company catalog page with ?downloadPriceList=true appended to the URL.
      • Verify the "Download Price List" modal opens automatically with format selection (CSV/NDJSON) and file name input.
      • Select a format and click "Download".
      • Verify the file downloads successfully.
    • Case 3
      • Navigate to the catalogs page ( /spcu/catalogs ).
      • Verify that company catalogs that have a sourceGroupCatalogID (i.e., are derived from a group catalog) are not listed in the company catalogs table.
      • Verify that group catalogs still appear in their own section.
    • Case 4
      • Go to /spcu/catalogs.
      • Verify company catalogs are listed and linked copies from group catalogs are hidden (no duplicates).
      • Click on a group catalog that has products.
      • Verify the info banner "This is a shared catalog managed by your administrator. It cannot be edited." is displayed.
      • Verify the "Actions" dropdown only shows "Export Price List" and "Add all to Cart" (no edit/remove options).
      • Click "Export Price List", verify the export modal fires and confirm the export.
      • Clear the cart, then click "Add all to Cart", verify the button shows "ADDED" and both products appear in the cart.
      • Search for a specific product (e.g. "31 M"), verify filtered results appear correctly.
      • Clear the search, verify the "no results" empty state displays correctly for a non-matching search.
      • Verify filtering by facets works as expected.
      • Go to the operations portal, navigate to emails, and find the price book export email.
      • Copy the download link from the email and paste it into the browser (logged in as the customer).
      • Verify the "Download Price List" modal appears with format selection (CSV/NDJSON).
      • Download the CSV and open it, verify it contains the correct products, prices, company code, and catalog code.
    • Tests
    • Case 1
      • Navigate to a company catalog page ( /company-catalog?code=<catalog-code> ) that has products.
      • Click the "Actions" dropdown and select "Export Price List".
      • Verify the modal opens and displays a "Template" dropdown with "None" and any available templates.
      • Select a template from the dropdown.
      • Click "Confirm".
      • Verify the modal shows the message "The price book is being generated and will be sent to your email shortly."
      • Close the modal, reopen it, and verify it resets back to the template selection step.
    • Case 2
      • Navigate to a company catalog page ( /company-catalog?code=<catalog-code> ) that has products.
      • Click the "Actions" dropdown and select "Export Price List".
      • Verify the modal opens with the "Template" dropdown.
      • Leave the selection on "None" and click "Confirm".
      • Verify the modal shows the message "Exporting the price list is currently in progress. We'll send you an email once it is ready to download."
    • Case 3
      • Navigate to a customer group catalog page ( /customer-group-catalog?code=<catalog-code> ) that has products.
      • Click the "Actions" dropdown and select "Export Price List".
      • Verify the modal opens and displays a "Template" dropdown with "None" and any available templates.
      • Select a template from the dropdown and click "Confirm".
      • Verify the modal shows the message "The price book is being generated and will be sent to your email shortly."
    • Case 4
      • Go to /spcu/catalogs.
      • Verify company catalogs are listed correctly.
      • Click "Add Catalog", create a new company catalog with a name and description.
      • Verify the new catalog page opens.
      • Go to the shop and add products to the new catalog.
      • Navigate back to the catalog, verify the added products are listed.
      • Click "Edit", change the parent catalog and description, then save.
      • Verify changes persist after saving.
      • Delete a product from the catalog, verify it is removed.
      • Search for a product within the catalog, verify results are correct.
      • Verify the empty state displays correctly for non-matching searches.
      • Add another product from the shop to the catalog, verify it appears after refresh.
      • Clear the cart, then click "Add all to Cart", verify the correct products are added to the cart.
      • Click "Export Price List", confirm the export.
      • Go to the operations portal, find the export email, and copy the download link.
      • Paste the link in the browser (logged in as the customer), verify the download modal appears
      • Download the CSV, verify it contains the correct products and data.
      • Delete the catalog, verify it no longer appears on the catalogs list page.
  58. KOD-29942: Fix issue when using Kodaris AI Chat
  59. KOD-29944: Implementation - Order / Invoice Documents - Updates
  60. KOD-29954: Update Mapping for Vendor
  61. KOD-29956: Generate a Group Company with type 'ALL' and associate ALL companies in the system
  62. KOD-29963: Implementation - ERP Configuration
  63. KOD-29965: Implementation - Product Configurator
    • Regression Tests
    • Case 1
      • Navigate to the commerce site.
      • Search for any product.
      • Confirm search page looks good in each of views:
        • Grid
        • List
        • Catalog
    • Case 2
      • Add any product to the cart from each of the view:
        • Grid
        • List
      • Confirm cart badge displayed properly for the products.
    • Case 3
      • Locate any product that is not a configurator one.
      • Click “View Details”.
      • Confirm you are redirected to the configurator page.
    • Tests
    • Case 1
      • In the system populate setting configuratorBadge with any image path.
      • Navigate to the search page and look for configurator products.
      • Confirm icon is displayed on the views.
        • Grid
        • List
      • Confirm svg icon is displayed on catalog view.
      • Note: setting definition
  64. KOD-29966: Implementation - Branding
  65. KOD-29970: Company Catalog Print Catalog Fix
    • Regression Tests
    • Case 1
      • Make sure you can still print company and customer catalogs.
    • Tests
    • Case 1
      • Find a company group catalog → click the print catalog button → make sure the catalog now downloads properly and does not give an error.
  66. KOD-29971: Implementation - -99 Invoice Documents
    • Regression Tests
    • Case 1
      • Go to Orders → Orders.
      • Select a random order.
      • Try to generate PDF invoice for this order using template FS - Wrapped Order PDF . Check, that related from what status of the order is, we have appropriate label for document. For status ‘Invoiced’ or ‘Paid’ it should show ‘Invoice’. Otherwise - ‘Order’.
      • Check that under summary section there’s no CREDIT - DO NOT PAY text.
      • Try to generate Email Invoice for this order using template FS - Wrapped Order Email . Check that generated Email invoice has appropriate label on it.
    • Tests
    • Case 1
      • Go to Orders → Returns.
      • Select a random Return.
      • Try to generate PDF/Email Invoices and check that the label for generated invoices is Invoice - Return Merchandise . Check that under summary section there’s CREDIT - DO NOT PAY note.
    • Case 2
      • Go to the customer portal account Returns page.
      • Find appropriate return item (for test you can use item with Web # 3899 on content). Open it.
      • Change in the URL path by replacing returns with orders.
      • Go to details page. Check that invoice rendered properly. Check that it has the right label CREDIT - DO NOT PAY note.
  67. KOD-29977: SEO - Product Page
  68. KOD-29978: Template Updates
  69. KOD-29981: Update to customer invoice form
    • Regression Tests
    • Case 1
      • Select an order with a status other than Invoiced.
      • Ensure the order contains items, including items where statusType === "C".
      • Generate order template.
      • Click on Email Order.
      • Select the appropriate template.
      • Verify all items are displayed.
      • Ensure that ALL order items are displayed in the template,regardless of whether statusType === "C"
      • Verify this behavior for:
      • Email
      • PDF
      • HTML (on the customer portal).
    • Tests
    • Case 1
      • Open the Operations Portal.
      • Navigate to Orders.
      • Filter by status: Invoiced.
      • Select an order that contains canceled items.(Verify in Item → Developer Fields → trendCompiledSettings → statusType === "C")
      • Generate order template.
      • Click on Email Order.
      • Select the appropriate template.
      • Verify canceled items are excluded.
      • Ensure that order items with statusType === "C" are NOT displayed in the template.
      • Verify this behavior for:
      • Email
      • PDF
      • HTML (on the customer portal)
  70. KOD-29982: Product Enrichment
  71. KOD-29983: Templates update for the quote functionality
    • Regression Tests
    • Case 1
      • Verify that order template for order and quote for different statuses looks good in the customer portal. Also, you should check that generated pdf in customer portal and email in the operations portal still looks good.
      • Note:
      • Quotes in the customer portal is cash quotes in the operations portal.
    • Case 2
      • Verify when you change language to French, order templates still looks good.
    • Tests
    • Case 1
      • When order has status Saved, order templates (customer portal, pdf, email) should have next changes:
      • Draft Date/Draft No. in top table of template.
      • Created By in second table in template.
      • Saved order in the disclaimer text.
    • Case 2
      • When order has status Web Entered , order templates(customer portal, pdf, email) should have next changes:
      • New disclaimer text → All quotes are valid for 10 days from the date of issue. Applicable shipping charges will be recalculated at the time of order placement.
      • Quote Placed For in second table in template.
  72. KOD-29985: Allow syncing older statements
  73. KOD-29988: Add the ability to search OpenSearch across indexes with JSON
    • Regression Tests
    • Case 1
      • Log into Operations Portal with 'administrator' / 'superuser' role.
      • Go to Swagger.
      • Call POST /api/system/opensearch/orders/search with request body:
      • {"query": {"match_all": {}}, "size": 5}
      • Make sure it still returns results as before.
    • Case 2
      • Log into Operations Portal with 'administrator' / 'superuser' role.
      • Go to Swagger.
      • Call POST /api/system/opensearch/sql with request body:
      • {"query": "SELECT * FROM orders LIMIT 5", "format": "JSON"}
      • Make sure it returns JSON results (uppercase format should now work).
    • Tests
    • Case 1
      • Log into Operations Portal with 'administrator' / 'superuser' role.
      • Go to Swagger.
      • Call POST /api/system/opensearch/search with indexes = “orders“ and request body:
      • {"query": {"match_all": {}}, "size": 5}
      • Make sure it returns orders from OpenSearch.
    • Case 2
      • Log into Operations Portal with 'administrator' / 'superuser' role.
      • Go to Swagger.
      • Call POST /api/system/opensearch/search with indexes = “orders,orderitems“ and request body:
      • {"query": {"match_all": {}}, "size": 5}
      • Make sure it returns results. Each hit should have an _index field indicating which index it came from.
    • Case 3
      • Log into Operations Portal with 'administrator' / 'superuser' role.
      • Go to Swagger.
      • Call POST /api/system/opensearch/search with indexes = “fakeindex“ and request body:
      • {"query": {"match_all": {}}, "size": 5}
      • Make sure it returns a 400 error with a message listing the invalid index name.
    • Case 4
      • Log into Operations Portal with 'administrator' / 'superuser' role.
      • Go to Swagger.
      • Call POST /api/system/opensearch/search with indexes = “ “ (just a few spaces) and request body:
      • {"query": {"match_all": {}}, "size": 5}
      • Make sure it returns a 400 error.
    • Case 5
      • Log into Operations Portal with 'administrator' / 'superuser' role.
      • Go to Swagger.
      • Call POST /api/system/opensearch/search with indexes = “orders“ and request body:
      • {"query": {"match_all": {}}, "from": 0, "size": 2}
      • Make sure it returns two orders.
      • Then call again with "from": 2. Make sure the second call returns different results.
  74. KOD-29990: Privacy Policy Link Update
    • Regression Tests
    • Case 1
      • Ensure that the layout on the registration page (existing customer) looks correct and the terms checkbox displays correctly.
      • Ensure that the layout on the registration page (new customer) looks correct and the terms checkbox displays correctly.
      • Ensure that the layout on the checkout page looks correct and the terms checkbox displays correctly.
      • Ensure that the layout on the password reset page looks correct and the terms checkbox displays correctly.
      • Ensure that the layout on the account password setup page looks correct and the terms checkbox displays correctly.
      • Ensure that the console displays no errors on all the listed pages.
  75. KOD-29991: Configure regions to use DDA V3.
  76. KOD-29992: Product Numbers on Catalog Displaying Incorrectly
    • Regression Tests
    • Case 1
      • Make sure you can still download a catalog.
    • Tests
    • Case 1
      • On the downloaded catalog, notice we now display the product code instead of the product id, as well as, notice the images aren’t stretched out like before.
  77. KOD-30003: Addresses on outgoing emails from Kodaris
  78. KOD-30004: Ignore "shipreqfl" setting when releasing an order with "needsShiptoAddressInTrend" setting to CSD
    • Regression Tests
    • Case 1
      • Test releasing order to CSD.
    • Tests
    • Case 1
      • Problem : When there's a delay between pushing an ARSC (Account Record Creation) and releasing an order, the order cannot be released for those companies
      • Now, when company has shipreqfl=yes setting and order has needsShiptoAddressInTrend=true setting, when this order is being released - it should not only be checking the company’s shipreqfl , but also order’s needsShiptoAddressInTrend , and there should not be no validation errors, order should be released.
  79. KOD-30005: Price Book - Additional Updates
  80. KOD-30006: Be Able to Sent Price Books To Customers (Operations Portal)
    • Regression Tests
    • Case 1
      • Navigate to a Company Group detail page (e.g., /company-groups/<customerGroupID> ).
      • Click the "Catalog" tab.
      • Select a category row in the catalog table.
      • Verify there are no standalone Edit (pencil) or Delete (trash) icon buttons.
      • Click the "Actions" dropdown button.
      • Click "Edit Category", verify the edit category dialog opens and functions as before.
      • Close the dialog, click "Actions" again, and click "Remove Category", verify the remove confirmation appears and functions as before.
    • Case 2
      • Navigate to a Company detail page (e.g., /companies/<companyID>).
      • Click the "Catalog" tab.
      • Select a category row in the catalog table.
      • Click the "Actions" dropdown button.
      • Verify the menu shows "Generate Price Book", "Download Price List", "Edit Category", and "Remove Category".
      • Click "Download Price List", verify the download dialog opens as before.
      • Click "Edit Category", verify the edit dialog opens as before.
    • Tests
    • Case 1
      • Navigate to a Company Group detail page (e.g., /company-groups/<customerGroupID> ).
      • Click the "Catalog" tab.
      • Click the "Actions" dropdown button.
      • Click "Generate Price Book".
      • Verify a dialog opens with "Generate Price Book" title, Template dropdown, Company autocomplete, and Email chip input.
      • Select a template from the Template dropdown.
      • Search for and select a company in the Company autocomplete (verify only companies assigned to this group appear).
      • Enter an email address in the Email field and press Enter, verify it becomes a chip.
      • Click "Generate" and verify a snackbar appears with "Price book is being generated. You will receive an email when it is ready."
      • Verify you received the email with the price book.
    • Case 2
      • Navigate to a Company detail page (e.g., /companies/<companyID> ).
      • Click the "Catalog" tab.
      • Click the "Actions" dropdown button.
      • Click "Generate Price Book".
      • Verify a dialog opens with "Generate Price Book" title, Template dropdown, and Email chip input, the Company field should NOT be visible.
      • Select a template from the Template dropdown.
      • Click "Generate" and verify a snackbar appears with "Price book is being generated. You will receive an email when it is ready."
      • Verify you received the email with the price book.
    • Case 3
      • Navigate to a Company Group detail page, go to the Catalog tab, select a category, and open the "Generate Price Book" dialog via the Actions dropdown.
      • Type an email address in the Email field and press Space, verify it becomes a chip,
      • Type another email address and press Comma, verify it becomes a chip.
      • Type another email address and press Semicolon, verify it becomes a chip.
      • Type another email address and click outside the Email field, verify it becomes a chip on blur.
      • Click the cancel (X) icon on one of the chips, verify the chip is removed.
      • Verify the hint text below the field reads "Email addresses to send the pricing email to. Leave blank to send to yourself."
  81. KOD-30010: Time Report page: /api/system/ticket/list endpoint does not support filtering by startDateTime
  82. KOD-30013: Message below Recipient Phone during Checkout
    • Regression Tests
    • Case 1
      • Test that the second step of checkout still looks good for guest and logged in users. Also, check that this page looks good for French and English languages.
    • Tests
    • Case 1
      • On the second step of checkout, near the “Recipient Phone” field you can see new info icon with next text → We’ll contact you at this number when your order is out for delivery.
      • Also, test that this message is translatable.
  83. KOD-30014: Add Ticket Detail page to Services app
    • Tests
    • Case 1
      • Navigate to a ticket page (e.g., /operations/app/services/tickets/36 )
      • Verify that the ticket title, status, description, comments, files, linked tickets, and sidebar fields are all populated with correct data.
      • Verify that the breadcrumb shows Services > Tickets >{ticket code}.
    • Case 2
      • Change the title and click outside (blur).
      • Verify that a PATCH request is sent with the updated title.
      • Click on the title again, make no changes, blur.
      • Verify that no PATCH request is sent.
    • Case 3
      • Type a comment in the editor and click "Save".
      • Verify that the comment appears in the list.
      • Hover over the comment, click the edit (pencil) button, modify text, click "Save".
      • Verify that the comment is updated.
      • Hover over the comment, click the delete (trash) button.
      • Verify that the comment is removed.
    • Case 4
      • Click "Upload" in the Files section, select a file.
      • Verify that the file appears in the list.
      • Click on the file name and verify the preview opens correctly.
      • Hover over the file, click the delete button.
      • Verify that the file is removed.
    • Case 5
      • Click "Link" in the Linked Tickets section header.
      • Search for a ticket, select it, optionally choose a link type, click "Link".
      • Verify that the linked ticket appears in the list.
      • Click on the linked ticket code.
      • Verify that the page reloads with the new ticket data (no full page refresh).
      • Navigate back, hover over the linked ticket, click the delete (X) button.
      • Verify that the link is removed.
    • Case 6
      • Click "Add assignee", search for an employee, select one.
      • Verify that the assignee appears in the list with correct name and initials.
      • Hover over the assignee, click the delete (X) button.
      • Verify that the assignee is removed.
    • Case 7
      • Click "Actions" > "Log Time".
      • Verify that the ticket field is pre-filled and disabled.
      • Enter hours/minutes, a description, and click "Log".
      • Verify that the dialog closes and no error is shown.
    • Case 8
      • Hover over a field in the sidebar (e.g., Priority), click the pin icon.
      • Verify that the field moves to the "Pinned" section at the top of the sidebar.
      • Refresh the page.
      • Verify that the field is still pinned (persisted in localStorage).
      • Unpin the field, verify it returns to its original section.
    • Case 9
      • Change a select field (e.g., Priority). Verify PATCH is sent immediately.
      • Change a text field (e.g., External ID) and blur. Verify PATCH is sent on blur.
      • Change a date field (e.g., Due Date). Verify PATCH is sent immediately.
      • Search and select a Billable Company. Verify PATCH is sent with the company code.
  84. KOD-30015: Add Mandatory Check Box for Account Sign Up Form
    • Regression Tests
    • Case 1
      • Test that this page still looks fine for English and French languages.
    • Tests
    • Case 1
      • Test that for this page, there is new checkbox for form Sign Up for a New Account and it’s translatable.
  85. KOD-30019: Price on catalog-print issue
    • Tests
    • Case 1
      • Log in to the website.
      • Navigate to Catalogs.
      • Verify for Customer/Company Catalogs.
      • Test with different product quantities.
      • Verify catalog generation with 1 product.
      • Verify catalog generation with more than 6 products.
      • Validate generated file content.
      • Confirm the file is generated correctly.
      • Ensure the following elements are present:
        • Catalog name
        • Product images
        • Product name (optional for some products)
        • Product ID
        • Product price
        • Page numbering on every page
  86. KOD-30020: Google Tag Manager issue
  87. KOD-30021: Add unitConversion server side endpoints to SUnitConversion controller
  88. KOD-30022: Implementation Updates
  89. KOD-30023: Sales customer web form submissions
  90. KOD-30024: Youtube Embed Widget
    • Tests
    • Case 1
      • Check that the “CM: YouTube Embed” block appears in the Gutenberg block list.
      • Check that clicking the “Embed” button adds the video.
      • Verify that the “Autoplay” toggle adds autoplay=1 to the URL.
      • Verify that the “Mute” toggle adds mute=1 to the URL.
      • Verify that the “Loop” toggle adds loop=1 playlist=VIDEO_ID to the URL.
      • Verify that the “Show Controls” toggle is off - adds controls=0 to the URL
      • Verify that the “Show Related Videos” toggle is off - adds rel=0 to the URL
      • Verify that “Start At” with a value of 30 adds start=30 to the URL
      • Check that “End At” with a value of 60 adds end=60 to the URL
      • Check that “Start At” and “End At” with a value of 0 do not add parameters to the URL
      • Check that when the “Enable JS API” toggle is turned on, enablejsapi=1 appears in the URL
      • Ensure that in the Advanced section, there is an “Additional Parameters” field where you can add additional parameters.
  91. KOD-30026: Featured Products
    • Tests
    • Case 1
      • Open the website.
      • Verify Featured Products slider presence.
      • Check that the Featured Products slider is displayed on the page.
      • If the slider is not displayed:
      • Open the Operations Portal.
      • Verify that the category "featured_products" exists.
      • Ensure that the category contains more than 4 products.
      • Verify slider navigation desktop/mobile.
      • Test slider navigation controls (arrows, swipe).
      • Ensure the slider scrolls correctly without layout issues.
      • Verify product click behavior.
      • Click on any product inside the slider.
      • Verify that the user is redirected to the Product Detail page.
      • Verify multiple products.
      • Click several different products.
      • Ensure each redirects to the correct corresponding Product Detail page.
  92. KOD-30030: Update Attribute Names
  93. KOD-30032: New Customer Portal Registration Email Layout
    • Regression Tests
    • Case 1
      • Make sure submitting the Registration Form still creates and send an email correctly.
    • Tests
    • Case 1
      • For this test, you need to go to the Registration Form, fill out the form and Submit it.
      • Go to the Emails screen in the operations portal and preview the email.
      • It should look more similar to the example provided.
  94. KOD-30034: UX for Reviewing Products Missing Required Attributes
    • Regression Tests
    • Case 1
      • Go to PIM → Categories → Data tab.
      • Check that everything looks good, the UI rendering properly.
      • Try to add some columns to show through the dropdown. Check that it works well.
    • Case 2
      • On the PIM → Categories → Data tab page open Show/Hide Columns dropdown.
      • Check that items rendering properly. Check that the new option wraps in multiline and doesn’t have any issues.
      • Go to the different page. For example, PIM → Products → Data tab. Check Show/Hide Columns dropdown. Check that there’s no any issues with it.
    • Tests
    • Case 1
      • Open Show/Hide Columns dropdown. Find new Products Missing Required Attributes column, enable it.
      • Check that it’s rendering properly, the column shows the right data.
      • Check that filtering/sorting in this column works well.
  95. KOD-30038: Questions About Adding a New Supplier
  96. KOD-30039: Add Instagram to footer
    • Regression Tests
    • Case 1
      • For the regression test, make sure opening the Themer and changing the value of the storeInstagramURL setting doesn’t break the page.
    • Tests
    • Case 1
      • To test this ticket, you need to log into the operations portal.
      • Go to settings and make sure there is a storeInstagramURL setting created.
      • Still logged in, we will now go to the commerce site. Open the Themer component and scroll down to “Socials”. You should now see a field to enter an Instagram link.
      • Its value should always match the value of the setting after updating and reloading.
      • Now, if we scroll down to our page footer, you should see an Instagram icon next to the YouTube icon. Clicking it should redirect you to the link in the setting value.
      • When there’s no value in the setting, the Instagram icon should remain hidden.
    • Case 2
      • We will repeat the test cases of the previous test but now on a Blog Post page.
  97. KOD-30040: Show Order Line Items
  98. KOD-30041: Update active display products
  99. KOD-30042: Update inventory conversion screen fields
    • Regression Tests
    • Case 1
      • Ensure that the grid is displayed correctly on the Inventory Conversions screen.
      • Ensure that the detail page -> inventory conversion opens and all fields are displayed correctly.
    • Tests
    • Case 1
      • Ensure that the Cono field is editable in the grid.
      • Ensure that the Operinit field is not present in the grid, menu, or detail page.
      • Ensure that the Transproc field is not present in the grid, menu, or detail page.
  100. KOD-30050: Remember main menu visibility state in operations portal
    • Regression Tests
    • Case 1
      • Navigate to the the Operations Portal.
      • Close the navigation menu.
      • Open the navigation menu.
      • Confirm that the menu works correctly (opens and closes as expected).
    • Tests
    • Case 1
      • Close the menu.
      • Refresh the page.
      • Confirm that the menu remains closed after refreshing.
      • Open the Operations Portal in a new tab.
      • Confirm that the menu is still closed in the new tab.
    • Case 2
      • Open the menu.
      • Refresh the page.
      • Confirm that the menu remains open after refreshing.
      • Open the Operations Portal in a new tab.
      • Confirm that the menu is still opened in the new tab.
  101. KOD-30054: Update Document Automation & add dedicated APIs to controller for UX
  102. KOD-30055: Document Automation Studio - Update UX to use new routing and new dedication APIs
  103. KOD-30057: Customer Fields
  104. KOD-30058: Employee Mobile App - Display all fields on the lead screen
    • Tests
    • Case 1
      • Ensure opportunity editing is working in the same way, they do for web UX. Ensure all editable fields are properly shown and editable on the UX, are shown and editable on the mobile.
  105. KOD-30060: Kodaris - Update Pricing Page on Website
    • Tests
    • Case 1
      • Ensure that the text in the “Pricing Example” block in the second column has changed to “per thousand tokens” (it was “per token”).
  106. KOD-30062: Parser Issue
  107. KOD-30061: Enable searchID tracking
    • Regression Tests
    • Case 1
      • Make sure the search still works properly for both a logged in and logged out user.
    • Tests
    • Case 1
      • Test as both a logged in and logged out user → search for a product → in the URL notice there is an sid=xxx → now click into a product and notice that the sid is still in the URL with the same code → you can go back to the search and add a filter and notice the sid stays in the URL.
    • Case 2
      • Now click to either a category or the home page or some other page → notice the sid is no longer in the URL → search again and the sid should be back there but this time with a different code.
  108. KOD-30066: Kodaris - UX for Company/Ticket Custom Fields on Data Grid
    • Regression Tests
    • Case 1
      • On the Company/Ticket Data screens, check that you can still add/edit/delete records.
      • Also try inserting rows from clipboard and that all the data is saved and everything works correctly without issues.
    • Case 2
      • On both screens above, also check that all the columns populate and data is rendered correctly as well.
    • Case 3
      • Check that both above cases pass whether the following settings are set or empty.
      • integrationIndexedCompanyFields
      • Sample Value:
      • [{
      • "settingCode": "companySize",
      • "settingName": "Company Size",
      • "isIndexed": false
      • },{
      • "settingCode": "erp",
      • "settingName": "ERP",
      • "isIndexed": false
      • }]
      • integrationIndexedTicketFields
      • Sample Value:
      • [{
      • "settingCode": "ticketpriority",
      • "settingName": "Ticket Priority",
      • "isIndexed": true,
      • "solrField": "custom_ticketpriority"
      • }]
    • Tests
    • Case 1
      • Setup the settings in regression case 3 to have some values.
      • On the Companies/Tickets > Data screen, check that the Custom Fields appear and you can add them to the Grids via the Column selector.
      • Note: all custom fields should be readonly for now on the data grid.
  109. KOD-30075: Allow sending template and company in group catalog in System side
  110. KOD-30076: Display warehouse on final checkout tab
    • Regression Tests
    • Case 1
      • Make sure that customers without warehouse selected (enableShopByStore not active) still see formatted shipping amounts as before (if the shipping option has an amount set up and it’s not the Pick Up option) or just the Cust Pick Up option with correct styling.
    • Case 2
      • Make sue the shippingOption selection works correctly.
    • Tests
    • Case 1
      • Go to the commerce site.
      • Customers with warehouse selection enabled ( enableShopByStore setting turned on) see the warehouse city/address on pickup shipping option ( shippingOption.type === p/u ).
      • Make sure the styling looks correct (equal-height rows, bold name, text sizing).
  111. KOD-30085: Missing French Text - Translate credit card form
  112. KOD-30087: Add Unit Stock & Unit Sell to Products Search Screen
    • Regression Tests
    • Case 1
      • For this test, you need to go to the Products - Search screen and make sure everything loads properly.
    • Tests
    • Case 1
      • For this test, you should go to the Products - Search screen.
      • Display the Unit Stock Unit Sell columns.
      • Make sure you are able to use the searching functionality with both columns, as well as sorting and dragging the columns.
  113. KOD-30089: Add Unit Stock & Unit Sell to Products Search Screen - Platform
    • Tests
      • Setup:
      • Go to the Operations Portal → Products and create a new product with some random code and name.
      • Make columns “unitSell“ and “unitStock“ visible.
      • For created product, set unitSell value to “MLF“ and unitStock value to “PCS“.
    • Case 1
      • Go to Swagger and execute endpoint POST /api/system/product/search with the following body:
      • {
      • "page": 0,
      • "size": 10,
      • "queryFields": [
      • {
      • "name": "docId",
      • "value": "*",
      • "operation": "EXPRESSION"
      • }
      • ]
      • }
      • Make sure the response is successful and each product in content includes unitSell and unitStock fields.
      • Make sure unitSell value is “MLF“ and unitStock value is “PCS“ for product you created before.
    • Case 2
      • Go to Swagger and execute endpoint POST /api/system/product/search with the following body:
      • {
      • "page": 0,
      • "size": 10,
      • "queryFields": [
      • {
      • "name": "docId",
      • "value": "*",
      • "operation": "EXPRESSION"
      • }
      • ],
      • "fieldsToReturn": [
      • "docId",
      • "code",
      • "unitSell",
      • "unitStock"
      • ]
      • Make sure only the specified fields (docId, code, unitSell, unitStock) have values in the response, and unitSell and unitStock have correct values for created product.
  114. KOD-30092: Make Name Sortable for Related Products - Platform
    • Regression Tests
    • Setup:
      • Go to the Operations Portal → Products → create a new product with code “parent-product“ and name “Parent Product“.
      • Create a new products with codes “test-product1“, “test-product2“, “test-product3“ and names “Test 1“, “Test 2“, “Test 3“.
      • Open details of Parent Product → Related products → add test-product1, test-product2, test-product3
    • Case 1
      • Open details of Parent Product → Related products.
      • Make Related Product ID column visible and verify that sorting by that field works fine.
      • Don’t delete created products before next tests.
    • Tests
    • Case 1
      • Go to Swagger and execute POST /api/system/product/relatedProducts/listV2?parentProductCode={parentProductCode} using “parent-product“ as a parentProductCode and following body:
      • {
      • "page": 0,
      • "size": 25,
      • "sortBy": "productName",
      • "sortDirection": "ASC"
      • }
      • Verify the response is successful and the related products in content are sorted alphabetically by product name (Test 1, Test 2, Test 3).
    • Case 2
      • Go to Swagger and execute POST /api/system/product/relatedProducts/listV2?parentProductCode={parentProductCode}
      • using “parent-product“ as a parentProductCode and following body:
      • {
      • "page": 0,
      • "size": 25,
      • "sortBy": "productName",
      • "sortDirection": "DESC"
      • }
      • Verify the related products in content are sorted in reverse alphabetical order by product name (Test 3, Test 2, Test 1).
  115. KOD-30094: Make setting: scheduleTriggered default active = true
  116. KOD-30096: Specification Update – Product Page Display Issue
    • Tests
    • Case 1
      • For this test, go to a product details page that have special characters such as ″ in the Specs values.
      • Make sure the UI does not break and that the information is rendered correctly.
  117. KOD-30099: Custom Export App - Export for Quote Non-Stock Items - Next Steps
    • Regression Tests
    • Case 1
      • App navigation and routing works correctly.
      • Navigate to /operations/app/custom-exports/.
      • Verify the Exports page loads as the default route.
      • Click the "Exports" item in the left navigation drawer.
      • Verify the URL updates to /operations/app/custom-exports/exports and the page remains on the Exports view.
      • Use the browser back button and verify the app handles the navigation without errors.
    • Tests
    • Case 1
      • Exports table loads and displays custom export data.
      • Navigate to /operations/app/custom-exports.
      • Verify the page renders with a kr-table titled "Custom Exports".
      • Verify the table displays columns: Code, Name, Active, Created, Last Modified, and a Submit action button per row.
      • Verify each row's Active column shows a green "Active" or red "Inactive" status badge.
    • Case 2
      • Submit an export successfully.
      • Navigate to /operations/app/custom-exports.
      • Locate a row in the table and click the "Submit" button in its actions column.
      • Verify the button shows a loading spinner while the request is in progress.
      • Verify a success snackbar appears with the message "Export submitted successfully".
      • Verify the button returns to its default state after showing a success indicator.
      • (You can configure your script to send messages to the console to also verify it’s working properly).
    • Case 3
      • Submit an export that fails.
      • Navigate to /operations/app/custom-exports.
      • Simulate a failed export submission (e.g., disconnect network or use a row that triggers an error).
      • Click the "Submit" button on a row.
      • Verify the button shows a loading spinner, then transitions to an error state.
      • Verify an error snackbar appears with the title "Export Failed".
    • Case 4
      • Go to the Export History screen. Make sure the Internal Files of type customExport are displayed correctly.
      • You should also be able to download your quote file when it gets added to the table.
  118. KOD-30105: Set default ship via to CPU instead of delivery in order sync
  119. KOD-30108: Price Books - Add Tokens for Company Code, Name, and Date
  120. KOD-30112: Redesign "Save to ERP" flow to follow standard patterns - UX
    • Regression Tests
    • Case 1
      • Ensure that the layout on the company address page appears correctly.
      • Ensure that the “More” dropdown button functions and opens.
      • Ensure that the Extend and Attach File buttons are still displayed and functioning.
    • Tests
    • Case 1
      • Ensure that the “Save to ERP” button (save icon) has been removed from the toolbar.
      • Make sure that two new options have appeared in the More dropdown: “Add to ERP” and “Update in ERP.”
      • Make sure that clicking on “Add to ERP” sends a POST request to /api/system/company/address/
      • {companyID}/{companyAddressID}/addCompanyAddressToErp.
      • Make sure that clicking on “Update in ERP” sends a POST request to /api/system/company/address/{companyID}/{companyAddressID}/updateCompanyAddressInErp.
      • Make sure that a successful response displays the snackbar “Saved to ERP.”
      • Make sure that an unsuccessful response (success: false) opens the dialog displaying the errors.
  121. KOD-30116: Custom Fields inaccessible on some screens on Operations Portal
    • Regression Tests
    • Case 1
      • Navigate to Ticket Template details screen. Check if tabs are displayed correctly.
    • Tests
    • Case 1
      • Navigate to Ticket Template details screen. Click on Custom Fields tab. It is expected to be redirected to Custom Fields screen.
  122. KOD-30118: Search update feedback
    • Regression Tests
    • Setup:
      • Go to Settings and make sure those settings are set to 1:
      • enableAiProductSearch
      • enableAiProductSearchForAllUsers
      • Go to Languages and add French (Canada) language with code fr-ca.
      • Go to Swagger (/services)-> ERP Setting API → Execute /api/system/erpSetting/list request.
      • Find setting with "codeval": "fr-ca" and copy its "code" value.
      • Go to /api/system/erpSetting/{erpSettingCode}.
      • Update ERP Setting and execute it using copied value as a erpSettingCode and this JSON as a Request body:
      • {
      • "trmgrlang": "1"
      • }
      • Go to the Operations Portal → Products and create a new product with code = 119120 and name “English name“.
      • Open details of created product → Switch to French language and set name to “French name“.
      • Go to the Operations Portal → Search → Tuning → Product Search Rules and create a new one using this data:
      • Rule Type : preProcessing
      • Query : \b [\w-]{1,6}\b
      • Language Code : en-us
      • Action Data : WILDCARD
      • Go to the Operations Portal → Search → Tuning → Product Search Rules and create a new one using this data:
      • Rule Type : preProcessing
      • Query : \b [\w-] {1,6}\b
      • Language Code : fr-ca
      • Action Data : WILDCARD
    • Case 1
      • Open Operations Portal → Logs in new tab.
      • Go to Customer Portal → Search for “119120 “.
      • Go to Logs and verify there is this log:
      • [JS] Getting vector for search string: 119120 English name
    • Tests
    • Case 1
      • Open the Operations Portal → Logs in new tab.
      • Go to Operations Portal → Settings → defaultLocale and set it to fr-ca. (or go to Customer Portal and switch to French language there if possible).
      • Go to Customer Portal → Search for “119120 “.
      • Go to Logs and verify there is this log:
      • [JS] Getting vector for search string: 119120 French name.
    • Case 2
      • Open the Operations Portal → Logs in new tab.
      • Go to Product Languages → Find created product and delete value for French name.
      • Go to Customer Portal → Search for “119120 “.
      • Go to Logs and verify there is this log:
      • [JS] Getting vector for search string: 119120 English name.
  123. KOD-30120: Ability to Set Print Format on Price Books
  124. KOD-30136: Sync all , increase limit
  125. KOD-30139: Have CSV Template by default when generating price book
  126. KOD-30142: Add `orderAssigneesV2Enabled` setting to the /configuration endpoint
    • Tests
    • Case 1
      • Open the developer tab and navigate to network.
      • Login or reload the operations portal.
      • Find request to /api/user/employee/configuration endpoint
      • In the response of this endpoint, you should see orderAssigneesV2Enabled setting within the scope.
      • Add the setting if it does not exists on your system and toggle the value to a different one. Reload the page and confirm it changes in the response of the endpoint.
  127. KOD-30143: Implementation - Updates
  128. KOD-30148: Unify Price Book Generation Flow (Operations Portal)