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

March 19, 2026 release notes

Highlights

Customer Portal & Operations Portal

Requested Due Date for Tickets

Users can now add a "Requested Due Date" to any ticket, providing better visibility into expected completion timelines. This new field appears in the ticket details section and includes an intuitive calendar picker for easy date selection.

The Requested Due Date field integrates seamlessly into existing workflows. In the Customer Portal, users will find the new field below the Priority field when viewing ticket details. The calendar interface allows quick date selection and modifications at any time. Similarly, the Operations Portal displays the field within the Customer Details section, enabling support teams to view and adjust requested timelines as needed.

Both portals offer enhanced list management capabilities with the new date field. Users can add the Requested Due Date as a column in their ticket grids, with full sorting and filtering functionality. The Operations Portal's Data tab provides additional flexibility, allowing direct editing of dates through double-click actions. These filtering options help teams prioritize work based on customer expectations and manage workloads more effectively.

The Requested Due Date feature is now available in both the Customer Portal and Operations Portal for all ticket types. For a complete demonstration of this functionality, please refer to the accompanying video walkthrough.

https://youtu.be/_vH1eFkTTkU

Tickets

  1. KOD-28003: Platform Update Default Status Value to "Web Entered" for Invoices
    • Tests
    • Case 1
      • Check the setting vendorInvoiceStatuses and make sure that Web Entered, Manually Processed, and Under Investigation are in the list of statuses. Also check a vendor invoice and see if all of these three statuses are available to choose when editing the status.
  2. KOD-28393: System Events - Payment ID - Make sure all System Events are linked to a paymentID where possible
    • Tests
    • Case 1
      • Infor CSD payments are triggered by ERP calling /api/user/paymentProcessing/inforCSD.
      • Trigger transactions via ERP or API, then verify:
      • Navigate to the Operations Portal → System Events ( /system-events ).
      • Filter by Code containing InforCSD_Payments.
      • Click on event row.
      • Confirm : paymentID field is populated.
    • Case 2
      • When payments sync to Infor CSD ERP:
      • Process a payment that syncs to CSD.
      • Go to Accounts Receivable page.
      • And use button on the top right called “Pull Payments to ERP”.
      • Use Export format set to API.
      • Utilize this feature as regularly, there should be no changes for functionality (regression).
      • Navigate to System Events ( /system-events ).
      • Filter by Code containing CSD_API_response_onPaymentReceivedOnAccount or CSD_API_response_onApplyAccountPaymentInERP.
      • Confirm : paymentID field is populated.
    • Case 3
      • Trigger a Cenpos payment error.
      • Navigate to System Events ( /system-events ).
      • Verify : eventCode = CenposPaymentProviderError (NOT NmiPaymentProviderError )
  3. KOD-28459: Map full description for products from CSD
  4. KOD-28551: Microsoft Outlook Integration - Implement Microsoft OAuth Connection
  5. KOD-29286: Customer price list UOM display
    • Tests
    • Case 1
      • Verify that the correct UOM is displayed in the exported price list when no priceUnit has been set on the company product category product item. The priceBookUom should reflect the product's Unit Sell field, and priceBookUnitPrice should be calculated using the matching Unit Conversion.
      • Pre-requirements:
      • A company catalog (Company Category) with at least one product item that does NOT have priceUnit set. If you need to create one:
      • Log into the customer portal.
      • Click on Catalogs.
      • Click ADD CATALOG to create a new Company Catalog.
      • Search for your product and click ADD TO CATALOG on the product card/details, then select your catalog.
      • The product must have at least 2 Unit Conversions (e.g., CS and GL).
      • Setting allowCustomerPriceBookDownload must be enabled.
      • Steps:
      • Log into the customer portal.
      • Go to Catalogs.
      • Click VIEW on your catalog record.
      • Click the ACTIONS dropdown and select Export Price List.
      • Check Attach file to email and click CONFIRM.
      • Wait for FiveMinuteBulkJobsJob to run (or trigger it manually).
      • Open the email and download the CSV file.
      • Locate your product in the exported price list.
      • Verify that priceBookUom matches the product's Unit Sell field.
      • Verify that priceBookUnitPrice is correctly calculated using the Unit Conversion whose Units field matches the product's Unit Sell value.
      • Expected Result: priceBookUom displays the product's Unit Sell value. priceBookUnitPrice is calculated according to the Unit Conversion that matches Unit Sell.
    • Case 2
      • Verify that when priceUnit is explicitly set on a catalog product item, the exported price list uses that unit. The priceBookUom should reflect the priceUnit value, and priceBookUnitPrice should be calculated using the matching Unit Conversion.
      • Pre-requirements:
      • A company catalog (Company Category) with at least one product item. If you need to create one:
      • Log into the customer portal.
      • Click on Catalogs.
      • Click ADD CATALOG to create a new Company Catalog.
      • Search for your product and click ADD TO CATALOG on the product card/details, then select your catalog.
      • The product must have at least 2 Unit Conversions (e.g., CS and GL) — these must match the Units field in the Unit Conversion definition.
      • Settings allowCustomerPriceBookDownload and inforCSDPriceEngineRestrictQtyBreaksToGreaterQuantities must be enabled.
      • Steps:
      • Set priceUnit on the catalog product item. Since there is no UX for this field yet, use Swagger:
      • Open Swagger and find the endpoint PATCH /api/system/companyProductCategory/{companyProductCategoryID}/productByID/{productID} under the Company ProductCategory API section.
      • Set companyProductCategoryID to your catalog ID and productID to the product ID of the item
      • In the request body, send:
      • {
      • "priceUnit": "<YOUR_UNIT>"
      • }
      • (e.g., "priceUnit": "CS" )
      • Execute the request and verify the response shows the priceUnit value persisted.
      • Log into the customer portal.
      • Go to Catalogs.
      • Click VIEW on your catalog record.
      • Click the ACTIONS dropdown and select Export Price List.
      • Check Attach file to email and click CONFIRM.
      • Wait for FiveMinuteBulkJobsJob to run (or trigger it manually).
      • Open the email and download the CSV file.
      • Locate your product in the exported price list.
      • Verify that priceBookUom matches the priceUnit value set in step 1.
      • Verify that priceBookUnitPrice is correctly calculated using the Unit Conversion whose Units field matches the priceUnit value.
      • Expected Result: priceBookUom displays the priceUnit value that was set. priceBookUnitPrice is calculated according to the Unit Conversion that matches the specified priceUnit .
    • Case 3
      • Verify that when priceUnit is set to a unit that does not match any Unit Conversion record, the engine falls back gracefully. The priceBookUom should fall back to the product's Unit Sell field (or Unit Stock if Unit Sell is not set), and priceBookUnitPrice should be calculated accordingly.
      • Pre-requirements:
      • A company catalog (Company Category) with at least one product item. If you need to create one:
      • Log into the customer portal.
      • Click on Catalogs.
      • Click ADD CATALOG to create a new Company Catalog.
      • Search for your product and click ADD TO CATALOG on the product card/details, then select your catalog.
      • The product must have at least 2 Unit Conversions (e.g., CS and GL) — these must match the Units field in the Unit Conversion definition.
      • Settings allowCustomerPriceBookDownload and inforCSDPriceEngineRestrictQtyBreaksToGreaterQuantities must be enabled.
      • Steps:
      • Set priceUnit to an invalid unit on the catalog product item. Since there is no UX for this field yet, use Swagger:
      • Open Swagger and find the endpoint PATCH /api/system/companyProductCategory/{companyProductCategoryID}/productByID/{productID}
      • under the Company ProductCategory API section.
      • Set companyProductCategoryID to your catalog ID and productID to the product ID of the item
      • In the request body, send a unit that does not match any Unit Conversion:
      • {
      • "priceUnit": "<YOUR_WRONG_UNIT>"
      • }
      • (e.g., "priceUnit": "XYZ" )
      • Execute the request and verify the response shows the priceUnit value persisted.
      • Log into the customer portal.
      • Go to Catalogs.
      • Click VIEW on your catalog record.
      • Click the ACTIONS dropdown and select Export Price List.
      • Check Attach file to email and click CONFIRM.
      • Wait for FiveMinuteBulkJobsJob to run (or trigger it manually).
      • Open the email and download the CSV file.
      • Locate your product in the exported price list.
      • Verify that priceBookUom falls back to the product's Unit Sell field (if Unit Sell is not set, it falls back to Unit Stock ).
      • Verify that priceBookUnitPrice is correctly calculated using the Unit Conversion whose Units field matches the fallback unit (Unit Sell or Unit Stock).
      • Verify that valid prices are generated — no null, empty, or zero values caused by the invalid priceUnit.
      • Expected Result: The engine handles the invalid UOM gracefully. priceBookUom falls back to the product's Unit Sell (or Unit Stock if Unit Sell is not set). Prices are calculated correctly using the fallback unit. The price book is generated without errors or crashes.
  6. KOD-29397: Core Return Flow - Platform update
    • Regression Tests
    • Case 1
      • Test Return orders in general flow.
    • Case 2
      • Test return orders in consumer flow for specific orders.
    • Tests
    • Case 1
      • Test adding actual product to return order using originalOrderItemID.
    • Case 2
      • Test adding CoreCharge product to return order using originalOrderItemID and type.
  7. KOD-29654: Syncing Order and Payments from multi conos (Make externalOrderNumber unique)
    • Regression Tests
    • Case 1
      • Be sure that the setting useErpTenantMode is disabled.
      • Go to the operations portal.
      • Go to the companies tab.
      • Select a company and click the button “Start Order”.
      • Go to the orders tab.
      • Take a look if the search is working correctly.
      • Go to the data tab.
      • Click in your order.
      • Edit any field.
      • Add an order item to the order.
      • Click the “release to ERP” button.
      • Wait for the order to be pushed and updated by CSD into Kodaris.
      • Expected :
      • You should be able to create a new order for the company.
      • The search should be working.
      • You should be able to see the order that you have created in the data tab.
      • You should be able to edit an order.
      • CSD should update the order successfully.
    • Case 2
      • Be sure that the setting useErpTenantMode is disabled.
      • Go to the operations portal.
      • Have an order on CSD that was created in CSD too.
      • Go to the orders tab.
      • Click on the “Pull Order from ERP” button.
      • Type the order number from the ERP and click “Submit”.
      • Expected :
      • Your order should be synced successfully.
    • Tests
    • Case 1
      • Sync 2 orders from the ERP with the same order number but from different cono.
      • Go to the orders tab in the operations portal.
      • Try to search by duplicated codes.
      • Expected:
      • You should see more than one order (the amount that is duplicated).
      • The orders should have a different cono. You can check the cono in the company code column, the cono is the number after the “_”.
    • Case 2
      • Go to the orders tab in the operations portal.
      • Look at the orders details from orders with the same order number but different conos and ensure the data looks good.
      • Expected:
      • Price Conv and Unit Conv have reasonable values.
      • The company must have the same cono of the order (you can look at the order cono in the order developer fields tab).
      • The warehouse must have the same cono of the order.
    • Case 3
      • The same test of the regression test #1, but with the setting on. Verify if we are pushing and pulling from the correct cono.
    • Case 4
      • Login as customer attached to company with a cono, like 1818.
      • Select a warehouse that belongs to 1818.
      • View product prices.
      • Add to cart.
      • Expected:
      • Prices displayed match 1818’s pricing.
      • Cart shows unit conversion correctly.
      • The Order created has the correct cono.
    • Case 5
      • Login as a customer attached to a company that has an order with a not unique externalOrderNumber.
      • Search for the orderNumber.
      • Expected:
      • You should be able to see only your order, not from other conos.
  8. KOD-29677: Kodaris - Create Order Placed Business Event to support order confirmation email functionality
    • Tests
    • Case 1
      • Place an order for a company. You should get an email from testing@kodaris.com with Your Order Details as the subject. If this isn’t working, you can similarly test through swagger using the /api/system/businessEvent/submitEvent endpoint. Here is the business event to submit:
      • {
      • "entity": "Order",
      • "entityID": yourOrderID,
      • "eventType": "orderPlaced",
      • "eventCode": "CompanyOrderCompleted",
      • "eventSubType": "companyOrder",
      • "userName": "yourUserName"
      • }
      • You need to replace username with your username (which should be associated with some company) and entityID with the ID of an order you have placed with that company.
      • You should expect the same email that I described above.
  9. KOD-29678: Sync and push ProductPrice records
    • Regression Tests
    • Case 1
      • Go to the operations portal.
      • Be sure that erpTenantMode setting is off (integerValue = 0).
      • Go to the companies tab.
      • Select a company and click the “start quote” button.
      • Go to the items and add some items.
      • Go back to the details screen and fill the end date and select a Location type.
      • Click on the “Location setup” button.
      • Go to the pricing tab, now you should be able to see the pricing records generated by your order.
      • Click on the “Save to ERP” button.
      • Expected:
      • You should be able to create a pricing record in CSD. To be sure that it worked you can wait till CSD sync back the pricing record by checking the pricing record developer field with code pdrecno . If was successful, this will be created.
    • Tests
    • Case 1
      • Go to the operations portal.
      • Be sure that erpTenantMode setting is on (integerValue = 1).
      • Be sure that we have a tenant configuration in the environment with correct credentials for each cono.
      • Go to the companies tab.
      • Select a company from any cono that is not 1818 (company code does not end with _1818) and click the “start quote” button.
      • Go to the items and add some items.
      • Go back to the details screen and fill the end date and select a Location type.
      • Click on the “Location setup” button.
      • Go to the pricing tab, now you should be able to see the pricing records generated by your order.
      • Click on the “Save to ERP” button.
      • Expected:
      • You should be able to create a pricing record in CSD. To be sure that it worked you can wait till CSD sync back the pricing record by checking the pricing record developer field with code pdrecno . If was successful, this will be created. To be sure that it’s in the correct cono, you can check the “Events” tab, search the event of sending this to CSD and search the “companyNumber” field on the payload.
  10. KOD-29746: Implementation - Order / Invoice Documents
    • Regression Tests
    • Case 1
      • Check that the order templates still generate and look good without errors.
      • Order PDF:
      • Go to the Operations Portal.
      • Go to the details screen of an Order.
      • In the header menu, click the Generate PDF option.
      • After being redirected to the Internal Files screen, open the PDF.
      • It should look good and not have any errors.
      • Order Email:
      • On the same order in the header menu, click the Generate Email option.
      • In the popup, use the pre-selected template, and generate the email.
      • Check that it looks good without issues or errors.
      • Order HTML:
      • Login on the customer side of the website.
      • Go to the customer portal > Orders screen and go to the details page for an order.
      • Check that the template looks good without issues or errors.
      • Also, for the HTML template, place an order on the website and check that the template on the confirmation screen looks good without errors.
    • Tests
    • Case 1
      • Do the same steps as the regression tests, but for each template, check that it matches the example template for orders that is in the ticket description.
      • Check that:
      • All labels and messaging match the example template.
      • Data is correct (especially when comparing Kodaris templates in their example order to the CSD template in ticket description).
      • Also, on the HTML template, check that it is mobile responsive.
      • P.S The template signature is taken from IDM, so if a signature exists for a specific order number, it will be displayed on the template. If not, it won't.
  11. KOD-29805: Shop Handling Cross Sub ordering
  12. KOD-29830: Order history does not differentiate UOM
    • Regression Tests
    • Case 1
      • Create few orders for any product, we should see order history present on the product page.
    • Tests
    • Case 1
      • Create few orders for any product with different UOM quantities (single, pack of 6,12 etc.) on the product page we should see correct order history.
  13. KOD-30086: Customer Survey Result Analytics
  14. KOD-30095: Company Page Updates - UX
    • Regression Tests
    • Case 1
      • Navigate to Company Templates from the sidebar menu.
      • Verify the grid loads with columns: code, name, type, subType, active, template, companyID, hostCode.
      • Double-click a cell in the active column and change the value using the dropdown.
      • Verify inline edits save without errors.
    • Case 2
      • Navigate to Company Templates from the sidebar menu.
      • Click Add Template.
      • Leave the Name and Code fields blank.
      • Select a Type from the dropdown.
      • Leave Sub Type as None and Company blank.
      • Click Create.
      • Verify the template is created with an auto-generated code, the name "Untitled", and no company association.
    • Case 3
      • Navigate to Company Templates from the sidebar menu.
      • Select one or more rows in the grid.
      • Delete the selected rows using the grid's delete action.
      • Verify the rows are removed from the grid without errors.
    • Tests
    • Case 1
      • Navigate to Company Templates from the sidebar menu.
      • Click the Add Template button in the top toolbar.
      • Verify the dialog title reads "Add Template".
      • Enter a name in the Name field.
      • Select a value from the Type dropdown (options loaded from companyPageTypes setting).
      • Select a value from the Sub Type dropdown (excel, csv, pdf, or None).
      • Select a company from the Company autocomplete.
      • Click Create.
      • Verify the dialog closes and the new template appears in the grid with the correct type and subType columns populated.
    • Case 2
      • Navigate to Company Templates from the sidebar menu.
      • Click the arrow icon on a row in the grid to open the template detail page.
      • Verify the URL is company-templates/<companyPageID> and the breadcrumb shows Company Templates > {code}.
      • Verify the Details tab is active and displays General Info (Code, Name, Type, Sub Type, Active), Description editor, and a sidebar with Summary and Associations (Company, Customer, Customer Group).
      • Change the Name field and click outside (blur) to trigger auto-save.
      • Verify the sidebar Summary updates immediately with the new values without refreshing the page.
    • Case 3
      • Navigate to a Company Template detail page (via the grid arrow icon).
      • Click the Content tab.
      • Verify an HTML code editor (ace-editor) is displayed.
      • Enter or modify HTML content in the editor.
      • Click the Save button in the top toolbar.
      • Click the Header tab, verify a separate ace-editor is shown, and modify the HTML.
      • Press Ctrl+S (or Cmd+S on Mac) to save via keyboard shortcut.
      • Click the Footer tab, repeat the same save workflow.
  15. KOD-30109: Order date not populating on order details page
    • Regression Tests
    • Case 1
      • Verify that the order templates still looks good. You should test the order template and generate PDFs in the customer portal, generating email in the operations portal.
      • You should test orders with different statuses, release to ERP or not. We need to make sure templates still load fine.
    • Tests
    • Case 1
      • We have few scenarios to test here for orders in the customer portal, order PDF and emails.
      • When order status is invoiced or paid and released to ERP, we are showing invoicedt field for Order Date.
      • When order status isn’t invoiced or paid and released to ERP, we are showing enterdt field for Order Date.
      • When order isn’t released to ERP or doesn’t have enterdt field, we are showing completed field for Order Date.
  16. KOD-30169: Implementation -99 Invoice Documents (not returns)
    • Regression Tests
    • Case 1
      • Go to Operations Portal Customers → Companies.
      • Select a random company. Go to Company → Open Invoices tab.
      • By clicking on the specific invoice “Invoice #” field, open preview window for the invoice.
      • Check that Invoice rendered properly, there’s no any errors and broken UI.
      • Try to print it and check that the generated document looks the same and everything is rendered correctly.
    • Tests
    • Case 1
      • Go to the Operations Portal Customers → Companies.
      • Select a random company. Go to Company → Open Invoices tab.
      • Find -99 Invoice.
      • Try to open it and check that it uses the layout for -99 invoices. Check that there’s no broken layout and any errors.
      • Try to print it and check that the generated document looks the same and everything is rendered correctly.
  17. KOD-30179: Implementation - PIM
  18. KOD-30180: Microsoft Outlook Integration - Need to read and associate emails as they come in
    • Tests
    • Case 1
      • Add a domain to a Company.
      • Send an email to that company with that domain.
      • Sync Emails, you will need to have set up your credentials.
      • Check that the email was associated with you or the sales rep.
  19. KOD-30192: Kodaris - Integration Fix Items add to the cart
  20. KOD-30213: Cono2 ERP Change
  21. KOD-30228: Ticket Assignment from Ticket Template
    • Regression Tests
    • Case 1
      • Verify that a ticket is created from a template without any errors.
      • Verify that the ticket fields (title, description, priority, etc.) are copied correctly from the template.
      • Verify that when a ticket is created from a template without assignees, the ticket is created without errors.
      • Verify that a ticket is created without a template.
    • Tests
    • Case 1
      • Verify that when creating a ticket from a template with assignees, these assignees are copied to the new ticket and assignees are displayed in the “Assignees” section on the created ticket page.
  22. KOD-30240: Pricing issue for item
  23. KOD-30247: Implementation - Order / Invoice Documents Updates
  24. KOD-30264: Pass additional information on the website form submissions
    • Tests
    • Case 1
      • For the forms listed in the ticket description we have added following hidden fields:
      • If user is logged in:
      • Company code
      • shipto
      • username of the actual user on the website
      • And for all forms:
      • Form name
      • User website language
      • We need to log in to the website and test if those fields are being sent to the ticket.
  25. KOD-30267: Update User Account Registration Form
  26. KOD-30277: ContentPageLanguage server side POST /list endpoint and swagger POST /list have different result
  27. KOD-30281: Implementation - Template Updates
    • Regression Tests
    • Case 1
      • Go to Operations Portal Account Receivable → Automated Statement Delivery.
      • Go to Actions dropdown. Click on “Send Statement”. Select a company for a test and use your email to send a statement.
      • Open your email box to check that the statement email was received and looks good.
    • Tests
    • Case 1
      • Go to Operations Portal Account Receivable → Automated Statement Delivery.
      • Go to Actions dropdown. Click on “Send Statement”. Select a company for a test and use your email to send a statement.
      • Go to the test company. Open Developer Fields tab. Check that lastAutomatedStatementDate property was created and the date has the correct value.
    • Case 2
      • Go to a test company. Open Developer Fields tab.
      • Delete lastAutomatedStatementDate property.
      • Try to generate a pdf statement. Check that it is generated properly and don’t have any broken data.
      • Try to run automated statement sending for lastAutomatedStatementDate creation.
      • Try to go to the company and run statement creation one more time. Open it and check that the PDF looks good.
  28. KOD-30294: Parser For Demo
  29. KOD-30298: Ordering Parser Request
  30. KOD-30300: Kodaris - Add new mega menu to base for demos and customers
    • Regression Tests
    • Case 1
      • Open the homepage.
      • Verify:
      • Page loads without errors.
      • The header is visible at the top of the page.
      • All header elements are displayed correctly.
    • Case 2
      • Open the homepage.
      • Click on links/dropdowns in the header ("Warehouse", "Sign In", "Shop by Category").
      • Verify:
      • All header elements are functional.
      • No content overlaps with header elements.
      • Search input is accessible.
    • Case 3
      • Resize the browser window to mobile width.
      • Verify:
      • All mobile header elements are functional.
      • Search input is accessible on mobile.
      • Tap the burger menu icon.
      • Verify:
      • Each link navigates to the correct page.
    • Tests
    • Case 1
      • Open the homepage.
      • Click on the search input field.
      • Type one character (e.g., "a").
      • Type a second character (e.g., "ab").
      • Verify:
      • After one character: no menu appears.
      • After two characters: search menu appears with dark overlay behind it.
      • Type two or more characters in the search input.
      • Verify:
      • Dark overlay covers the entire page content.
      • The header remains visible above the overlay.
      • The top bar remains visible above the overlay.
      • Banner (if present) remains visible above the overlay.
      • The search menu is visible above the overlay.
    • Case 2
      • Open the homepage.
      • Type a search term that returns results in all categories (e.g., a common product term).
      • Verify:
      • The menu displays three sections: "Categories" on the left, "Brands" on the left below categories, "Products" on the right.
      • Each section has a title.
      • Products section shows "See all results >" link.
    • Case 3
      • Open the homepage.
      • Type a search term that returns product results.
      • Verify:
      • Product tiles are displayed in a grid (3 columns on desktop).
      • Tile layout remains consistent.
      • Each product tile shows: product image, part number (prefixed with "PART"), product name.
      • For a product that has no image - Product tile displays a placeholder image.
      • Hover over a product tile.
      • Verify:
      • Product tile displays a shadow effect on hover.
      • Click on a product tile.
      • Verify:
      • Browser navigates to the product detail page for that product.
      • The product page displays correct product information.
    • Case 4
      • Open the homepage.
      • Type a search term that returns category results.
      • Verify:
      • Category tiles are displayed in a list.
      • Each category shows: parent category path (breadcrumb), category name in bold.
      • Hover over a category tile.
      • Verify:
      • Category tile background changes to light blue.
      • A dark vertical line appears on the left side of the tile.
      • Click on a category tile.
      • Verify:
      • Browser navigates to the category page.
      • The category page displays the correct category and products.
    • Case 5
      • Open the homepage.
      • Type a search term that matches brand names.
      • Verify:
      • Brand tiles are displayed below categories.
      • Each brand shows the brand name in bold.
      • Hover over a brand tile.
      • Verify:
      • Brand tile background changes to light blue.
      • A dark vertical line appears on the left side of the tile.
      • Click on a brand tile.
      • Verify:
      • Browser navigates to the search results page.
      • Results are filtered by the selected brand.
    • Case 6
      • Open the homepage.
      • Type a search term.
      • Click on the "See all results >" link.
      • Verify:
      • Browser navigates to the search results page.
      • URL contains searchString parameter with the search term.
      • URL contains og parameter with the search term.
      • URL contains sg=1 parameter.
    • Case 7
      • Open the homepage.
      • Type a search term to open the menu.
      • Click anywhere on the dark overlay (outside the menu and search input).
      • Verify:
      • Search menu closes.
      • Search input remains with the typed text.
    • Case 8
      • Open the homepage.
      • Type a search term in the search input.
      • Press Enter.
      • Verify:
      • Browser navigates to the search results page.
      • The search results page shows results for the entered term.
    • Case 9
      • Open the homepage.
      • Type a search term that returns no products (e.g., random characters "xyzqwerty123").
      • Verify:
      • Products section title appears grayed out.
      • "See all results >" link is still visible.
      • No product tiles are displayed.
      • Categories section title appears grayed out.
      • No category tiles are displayed.
      • Brands section title appears grayed out.
      • No brand tiles are displayed.
    • Case 10
      • Resize browser to different widths (desktop, tablet, mobile).
      • Verify:
      • All functionality described above works correctly at all screen sizes.
      • Menu layout adapts to screen width.
      • Menu is scrollable on smaller screens.
      • All elements remain readable and clickable.
  31. KOD-30303: Kodaris - Support chat follow-up needed | Unhandled error when training codes
  32. KOD-30304: PARSER - Employee Quotes
  33. KOD-30311: Automatically set company payment methods based on arsc terms type in CSD
  34. KOD-30312: Will need to be able to add quantities over 9999 at a time
    • Regression Tests
    • Case 1
      • Navigate to a product that has a backend maximumOrderQuantity set (e.g. a product limited to 100).
      • Enter a quantity exceeding that product's limit (e.g. 200).
      • Verify the input validation prevents adding more than the product's maximum order quantity.
      • Enter a valid quantity within the product's limit and verify it is accepted.
    • Case 2
      • Add a product with quantity 1 to the cart.
      • Verify the cart badge in the header (desktop) shows "1" as a small circular badge.
      • Add another product with quantity 5.
      • Verify the badge updates to show the total and remains properly styled.
      • Check the mobile header cart badge and verify it also displays correctly.
    • Tests
    • Case 1
      • Navigate to any product detail page (PDP).
      • Clear the quantity input field.
      • Enter 9999999 in the quantity input.
      • Verify the input accepts the full 7-digit value and displays it without truncation.
      • Click "Add to Cart" (or "Add to Quote" if not logged in).
      • Verify the item is added successfully with quantity 9999999.
      • Verify the cart badge in the header expands to a pill shape displaying the large number without overflow.
    • Case 2
      • Navigate to a product list/category page (PLP).
      • Switch to grid view and enter 1234567 in a product's quantity input.
      • Verify the input field is wide enough to display all 7 digits without clipping.
      • Switch to list view and enter 9999999 in a product's quantity input.
      • Verify the input field displays the full value.
      • Switch to table view and enter 9999999 in a product's quantity input.
      • Verify the input field displays the full value without overflow.
    • Case 3
      • Navigate to the Quick Order page.
      • Search for a product and enter 5555555 in the quantity field.
      • Verify the input accepts the full value and the field is wide enough to display it.
      • Open the header quick order popover (click the quick order icon in the header).
      • Enter 9999999 in the quantity field and verify it accepts the value.
      • Navigate to the Cart page.
      • Edit an item's quantity to 9999999 and verify the input displays and saves correctly.
      • Click "Request Custom Item", enter 9999999 in the quantity field, and verify acceptance.
  35. KOD-30313: Restore Changes B2C orders not mapping to account in commerce
  36. KOD-30316: Use 'My Warehouse' selection for order fulfillment if different from CSD default
    • Regression Tests
    • Case 1
      • Go to Operations Portal → Settings → find enableShopByStore → ensure integerValue is 0.
      • Go to Operations Portal → Hosts → verify no host has enableShopByStore enabled in its Settings tab.
      • Log in as a customer.
      • Create an order.
      • Check the order's warehouseCode — it should be default (from the company/address).
    • Case 2
      • Go to Operations Portal → Settings → find enableShopByStore → set integerValue to 1.
      • Go to Operations Portal → Hosts → verify no host has enableShopByStore enabled in its Settings tab.
      • Log in as that customer.
      • Verify there is a warehouse picker. Select a warehouse via the warehouse picker that is different from the company/address default.
      • Create an order.
      • Go to Operations Portal → Orders → check warehouseCode field of created order.
      • Verify it matches the warehouse selected in step 5, not the company/address default.
    • Tests
    • Case 1
      • Go to Operations Portal → Settings → find enableShopByStore → set integerValue to 0.
      • Go to Operations Portal → Hosts → select the test host → Settings tab → add/edit setting: code = enableShopByStore, type = ORDER, valueType = integerValue, value = 1.
      • Log in as a customer on that host.
      • Select a warehouse via the warehouse picker.
      • Create an order.
      • Go to Operations Portal → Orders → open the order → check warehouseCode field.
      • Verify it matches the warehouse you selected in step 4, not the company default.
    • Case 2
      • Same setup as Case 1.
      • Additionally on the same host → Settings tab → add/edit setting: code = shopByStoreLockWarehouse, type = ORDER, valueType = integerValue, value = 1.
      • Log in as a customer on that host, select a warehouse.
      • Create an order.
      • Go to Operations Portal → Orders → open the order → check warehouseCode — note the value.
      • Change delivery address to one associated with a different warehouse.
      • Refresh the order in Operations Portal → verify warehouseCode is still the same as step 5 (locked, not overridden by the new address).
    • Case 3
      • Go to Operations Portal → Settings → find enableShopByStore → set integerValue to 0.
      • Go to Operations Portal → Hosts → select the test host → Settings tab → ensure there is no enableShopByStore setting enabled (delete it if there is).
      • Log in as a customer on that host.
      • Create an order.
      • Go to Operations Portal → Orders → open the order → check warehouseCode field.
      • Verify it matches the warehouse from the customer's company or company address — warehouse picker should not be active.
  37. KOD-30318: UX for Requested Due Date on Customer Tickets
    • Regression Tests
    • Case 1
      • In the customer portal, make sure the tickets table and detail screen still loads properly.
    • Case 2
      • In the operations portal, make sure the tickets search and data tabs still load properly as well as the tickets detail screen.
    • Tests
    • Case 1
      • In the customer portal - On the ticket details screen notice the new Requested Due Date field below priority.
      • This is a date picker and if there is no date it should be blank.
    • Case 2
      • Click the date picker and select a date → that date should now be saved in the box → reload the page and that date should still be there.
      • You should also be able to clear out the box to no longer have a requested due date.
    • Case 3
      • On the tickets table, you will now see a Requested Due Date column you can add → add to the table and you will see the requested due dates there that you added in the tickets detail screen.
      • You should be able to sort and filter that column as well.
    • Case 4
      • In the operations portal - on the tickets screen, for both the search and data tab, you should now see the option to add a new column called Requested Due Date.
      • Add that column and it should be added to the table.
    • Case 5
      • On the search tab, you should be able to filter and sort by requested due date.
      • On the data tab, you can’t filter or sort, but you should be able to click into the box and a date picker should open and you can update the requested due date.
    • Case 6
      • Click into a ticket, and now you should see the requested in the customer details section.
      • If there is no date, the field should be empty. You can click into it and a date picker will open and you can select a date. If you reload that date should still be there.
  38. KOD-30321: Adding tag for bing webmaster tools
  39. KOD-30325: Terminal Status Check Endpoint
  40. KOD-30334: UPC Codes Add Leading Zeroes if not 6-digits in section 3 & 4
  41. KOD-30350: Pull Ticket Template Name When Creating Ticket on an Opportunity
    • Regression Tests
    • Case 1
      • Verify that creating a ticket from an Opportunity without selecting a template works correctly.
      • Verify that when creating a ticket, all fields from the template (description, priority, etc.) are applied correctly.
      • Verify that after selecting a template, the user can manually change the Title.
    • Tests
    • Case 1
      • Verify that when a Ticket Template is selected, the Title field is automatically updated to the Template name.
      • Verify that when the Template is changed to a different one, the Title field is updated to the new Template name.
      • Make sure the “Template” field appears first in the ticket creation form.
      • Verify that the created ticket is saved with the correct Title (from the Template).
  42. KOD-30360: Payments by period
  43. KOD-30363: Manufacturer Name to Brand Conversion - Filter is assigning to different filter category
  44. KOD-30370: CMS: Selection Buttons/Boxes Not Inline with Page Text
    • Regression Tests
    • Case 1
      • Make sure you are able to add checkboxes and radio buttons inputs to a form and select them correctly.
      • Submit the form and make sure the information you selected is sent correctly.
    • Tests
    • Case 1
      • Go to your CMS Editor and add a contact form.
      • Add checkboxes and radio buttons in contact form.
      • Check if the label text is inline with the checkboxes and radio buttons.
    • Case 2
      • Make sure the spacing between radios/checkboxes and their labels is the same.
  45. KOD-30380: Implementation - Payment Methods
  46. KOD-30383: credit transaction
  47. KOD-30393: Active Directory
  48. KOD-30401: Add Amount to Invoices
  49. KOD-30403: Mismatch on credit card tender
  50. KOD-30415: Lockbox ARLEI
  51. KOD-30421: Support child order items in OA flow
  52. KOD-30424: Add Messaging and PDF link on Home Page for Upcoming Return Policy Changes
    • Tests
    • Case 1
      • On the Homepage for guest and logged in users there should be a new message about return policies update. The message should be translatable. By clicking the “Click here“ part - a return policy pdf should open depending on the website selected language.
  53. KOD-30430: Implementation - Payment Methods
  54. KOD-30436: Payment Update
  55. KOD-30450: Enforce Purchase Order requirement for all payment methods
    • Regression Tests
    • Case 1
      • Pre-condition:
      • Company has purchaseOrderRequired = false (or not set) in the Operations Portal.
      • The user is logged in as a customer from this company.
      • The Cart has at least one item.
      • Steps:
      • Go to the Checkout page.
      • Select shipping option.
      • Leave Purchase Order field EMPTY.
      • Expand "Pay with Bank Account" or Pay With Card section.
      • Click the "Place Order" button.
      • Expected Result:
      • Validation passes (PO is NOT required).
      • Order is successfully created WITHOUT Purchase Order.
    • Case 2
      • For companies where purchaseOrderRequired = false (or not set), the checkout process should work exactly as it did before this change.
      • Expected Behavior:
      • The Purchase Order field remains optional (no required attribute).
      • Customers can checkout WITHOUT entering a PO number.
      • Orders are successfully created without PO.
      • All payment methods work without requiring PO:
      • Pay with Bank Account (ACH).
      • Pay with Card.
      • Pay with Purchase Order.
    • Tests
    • Case 1
      • Pre-condition:
      • Company has purchaseOrderRequired = true in the Operations Portal.
      • Steps:
      • Go to the Checkout page.
      • Select shipping option.
      • Expand the "Pay with Bank Account" section.
      • Fill in all bank account fields:
      • Leave Purchase Order field EMPTY.
      • Click the "Place Order" button.
      • Expected Result:
      • Order submission is blocked.
      • Scroll Up to the Purchase Order field.
      • Order is NOT created.
    • Case 2
      • Pre-condition:
      • Company has purchaseOrderRequired = true in the Operations Portal.
      • Company has companyCanUseCreditCards = Yes.
      • Company has a Card Payment System.
      • Steps:
      • Go to the Checkout page.
      • Select shipping option.
      • Expand the "Pay with Card" section.
      • Fill in card details:
      • Leave Purchase Order field EMPTY.
      • Click the "Place Order" button.
      • Expected Result:
      • Order submission is blocked.
      • Scroll Up to the Purchase Order field.
      • Order is NOT created.
  56. KOD-30453: 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 Total for the Return Order is calculated correctly and the result matches the invoice from CSD.
  57. KOD-30461: Update Location Contact Information in Customer Portal from CSD
  58. KOD-30478: Update Parser for demo
  59. KOD-30479: Search behavior inconsistent with partial model numbers
  60. KOD-30486: Updates to integration screen
    • Regression Tests
    • Case 1
      • Navigate to the Integrations screen.
      • Check that the page still loads fine.
      • Check that you can still update some fields on this screen.
    • Tests
    • Case 1
      • Navigate to the Integrations screen.
      • Click on the Show/Hide column icon.
      • Verify that you can see the new field ‘Host Code’.
      • Add this field to the grid.
      • Verify that this field has a dropdown when you click on it.
      • Verify that you can update this field.
  61. KOD-30487: Add hostCode in the integration screen
    • Regression Tests
    • Case 1
      • Go to the integration tab.
      • Ensure that the endpoint “/list” is listing the records correctly. You can monitor devtools or just see if the data is there.
      • The listing endpoint is working normally.
    • Case 2
      • Go to the integration tab.
      • Edit the title of any integration
      • You should be able to edit the title, no errors should happen.
    • Tests
    • Case 1
      • Go to swagger.
      • Search by the Integration API.
      • Go to the PATCH endpoint /api/system/integration/{integrationCode}
      • Put an integration code.
      • Use a payload containing the hostCode field: {
      • "hostCode": "random"
      • }
      • You should receive status code 200 and the DTO returned should have “hostCode” == the value in the payload.
    • Case 2
      • Open DevTools.
      • Go to the integration screen.
      • Find the “/list” endpoint request.
      • Open the response.
      • Expected:
      • You should be able to see the new field being returned from the API. You also should be able to see the integration that you updated with the new value.