June 5, 2026
May 28, 2026
May 21, 2026
May 14, 2026
May 7, 2026
April 30, 2026
April 23, 2026
April 16, 2026
April 9, 2026
April 2, 2026
March 26, 2026
March 19, 2026
March 5, 2026
March 12, 2026
February 26, 2026
February 19, 2026
February 12, 2026
January 22, 2026
February 5, 2026
January 29, 2026
January 15, 2026
January 8, 2026
January 1, 2026
December 25, 2025
December 18, 2025
December 11, 2025
December 4, 2025
November 27, 2025
November 20, 2025
November 13, 2025
November 6, 2025
October 30, 2025
October 23, 2025
October 16, 2025
October 9, 2025
October 2, 2025
September 25, 2025
September 18, 2025
September 11, 2025
September 4, 2025
August 28, 2025
August 21, 2025
August 14, 2025
August 7, 2025
July 31, 2025
July 24, 2025
July 17, 2025
July 10, 2025
July 3, 2025
June 26, 2025
June 19, 2025
June 12, 2025
June 5, 2025
May 29, 2025
May 22, 2025
May 15, 2025
May 8, 2025
May 1, 2025
April 24, 2025
April 17, 2025
April 10, 2025
April 3, 2025
March 27, 2025
March 20, 2025
March 13, 2025
March 6, 2025
February 27, 2025
February 20, 2025
February 13, 2025
February 6, 2025
January 30, 2025
January 23, 2025
January 16, 2025
January 9, 2025
January 2, 2025
December 26, 2024
December 19, 2024
December 12, 2024
November 28, 2024
November 21, 2024
November 14, 2024
November 7, 2024
October 31, 2024
October 24, 2024
October 17, 2024
October 10, 2024
October 3, 2024
September 26, 2024
September 19, 2024
September 12, 2024
September 5, 2024
August 29, 2024
August 22, 2024
August 15, 2024
August 8, 2024
August 1, 2024
July 25, 2024
July 18, 2024
July 11, 2024
June 27, 2024
June 20, 2024
June 13, 2024
June 6, 2024
May 30, 2024
May 23, 2024
May 16, 2024
May 9, 2024
May 2, 2024
April 25, 2024
April 18, 2024
April 11, 2024
April 4, 2024
March 28, 2024
March 21, 2024
March 14, 2024
March 7, 2024
February 29, 2024
February 22, 2024
February 15, 2024
February 8, 2024
February 1, 2024
January 25, 2024
January 18, 2024
January 11, 2024
January 4, 2024
December 21, 2023
December 14, 2023
December 7, 2023
November 30, 2023
November 16, 2023
November 9, 2023
November 2, 2023
October 26, 2023
October 19, 2023
October 12, 2023
October 5, 2023
September 28, 2023
September 21, 2023
September 14, 2023
September 7, 2023
August 31, 2023
August 24, 2023
August 17, 2023
August 10, 2023
August 3, 2023
July 27, 2023
July 20, 2023
July 13, 2023
July 6, 2023
June 29, 2023
June 22, 2023
June 15, 2023
June 8, 2023
June 1, 2023
May 25, 2023
May 18, 2023
May 11, 2023
May 4, 2023
April 27, 2023
April 20, 2023
April 13, 2023
April 6, 2023
March 30, 2023
March 23, 2023
March 16, 2023
March 9, 2023
March 2, 2023
February 23, 2023
February 16, 2023
February 9, 2023
February 2, 2023
January, 2023
December, 2022
November, 2022
October, 2022
September, 2022
August, 2022
July, 2022
June, 2022
May, 2022
April, 2022
March, 2022
February, 2022
January, 2022
December, 2021
November, 2021
October, 2021
September, 2021
August, 2021
July, 2021
June, 2021
May, 2021
April, 2021
March, 2021
February, 2021
January, 2021
December, 2020
April 23, 2026 release notes
Tickets
- KOD-12453: Kodaris - Implement Recommended Products
- Case 1
- List products normally.
- Search products
- Get product by ID.
- Make sure the above three items all work as before for products, orders, orderitems, categories, and skus.
- Case 2
- Run a monthly interval job, It should work as before.
- KOD-18200: Operations Maintenance
- 21305: Using the Cash Quote Data Grid
- 37805: Configure - View and Calculate Totals on Items Screen
- 37806: Configure - Pay an Order with a Saved Card
- KOD-28549: Microsoft Outlook Integration - Tracking
- 43196: Configure - Restrict Employees to Their Assigned Tickets
- KOD-29351: Email order automation issue
- KOD-29522: Set Taken By on Quotes
- Tests
- Case 1: Quote Creation and Processing
- Access Quote Requests screen in the Operations Portal.
- Start Quote and select Cash Quote type.
- Add pricing, update product names, assign costs/margins.
- Calculate totals and set status to "Quote Pending".
- Expected Result: Quote successfully created with "Quote Pending" status.
- Case 2: Push Quote to ERP
- Use the "Save to ERP" button.
- Verify system calls the saveToErp endpoint.
- Confirm interceptor handles data transmission to CSD.
- Expected Result: Quote data successfully transmitted to CSD ERP system.
- Case 3: Creator Tracking Integration
- Send takenBy field with employee external ID.
- Verify creator information is properly tracked in ERP.
- Expected Result: Creator information successfully transmitted to ERP for vendor contact purposes.
- KOD-29580: Delete function for Shared Drive screen
- KOD-30007: Product Description Updates
- KOD-30335: AP Automation - Add ability to convert a line item to a charge on a vendor invoice
- KOD-30371: Tax Exempt Customers - Avalara Integration - Fully Tax-Exempt vs Mixed Customers
- Regression Tests
- Case 1
- Verify taxes working as expected, checkout flow should be fine.
- KOD-30375: Cart Upload Not Displaying Warehouse Quantity
- 56251: Punchout Shipto Mapping Error
- KOD-30557: Add "Taken By" Field & Contact Name to Invoice Format
- KOD-30595: UX for Discount by Item flow
- Tests
- Case 1: Verify CategoryCode in Discounts
- Open the Operations Portal → Discounts.
- Create or update a discount.
- Add a new discount or edit an existing one.
- Set categoryCode for the discount.
- Prepare category (if needed).
- If the required category does not exist:
- Create it in Categories.
- Assign any product to this category.
- Verify on the Commerce site.
- Open the Commerce website.
- Open DevTools → Console/Network.
- Check pricing response.
- Verify discount data.
- Ensure discounts include the created discount with the correct categoryCode.
- Verify the discount is applied to the corresponding category.
- Case 2: Labels appear when the setting is enabled and the product has a discount.
- Open the operations portal and navigate to Settings. Enable showDiscountLabels by setting it to 1.
- Configure at least one discount rule for a product.
- Open the website, log in and check that the discount label appears on the:
- The product list page (grid, list and table views).
- Product detail pages
- Cart page (/spcu/cart).
- Expected: A styled discount label appears under the price in all views.
- Case 3: No labels appear when the setting is disabled.
- Open the operations portal and disable 'Show Discount Labels'.
- Open the website, log in and check the product list (all views), the product detail page and the cart.
- Expected outcome: No discount labels should appear anywhere.
- Case 4: Mixed — only items with discounts get labels
- Ensure showDiscountLabels is enabled (1).
- Browse a product list containing both a discounted and a non-discounted product; open each product's detail page; add both to the cart and navigate to /spcu/cart.
- Expected: Discount label appears only for the product that has a discount configured, across all views and in the cart.
- KOD-30603: CloudLeap Integration Configuration
- KOD-30605: Infor CSD - Gift card updates
- KOD-30612: Replacement Cost on Purchase Order
- KOD-30632: Kodaris - Save CSD response when pushing records to the ERP (company, shipto, etc)
- Regression Tests
- Case 1: Push Company to CSD
- Go to the Operations Portal, find any test company.
- Navigate to the Company detail page.
- Click the "Save to ERP" button.
- Whether it succeeds or fails, check System Events.
- Verify a new event with code CSD_API_response_addCompanyToErp or CSD_API_response_editCompanyToErp was created.
- Open the event — verify it contains both requestBody and response (or error details) in the payload.
- Expected : System Event created with both request and response. Existing company sync behavior unchanged.
- Case 2: Push CompanyAddress (ShipTo) to CSD
- Go to the Operations Portal, find a test company with an existing company address.
- Navigate to the Company Address detail page.
- Click the "Add to ERP" button.
- Check System Events — verify a new event with code CSD_API_response_addCompanyAddressToErp (or CSD_API_response_updateCompanyAddressInErp ) was created.
- Open the event — verify it contains both requestBody and response in the payload.
- Expected : System Event created with both request and response. Existing shipto sync behavior unchanged.
- Case 3: Push Product to CSD
- Go to the Operations Portal, find an existing product.
- Trigger "Add to ERP" for the product.
- Check System Events — verify a new event with code CSD_API_response_addProductToErp (or CSD_API_response_updateProductToErp ) was created.
- Open the event — verify it contains both requestBody and response.
- Expected : System Event created with both request and response. Even if the ERP call fails, both request and error response should be saved in the event.
- KOD-30667: Order Guide Error
- Regression Tests
- Case 1
- Go to the customer portal. Open test catalog category page.
- Check that page with the “Grid” view renders properly, there’s no broken UI. Try to check how responsive works by changing screen size.
- Make the same check with list and table views.
- Case 2
- Drag a product tile/row by grabbing it outside the order input.
- Drop it in a new position.
- Verify: the product is reordered on the server, the order inputs update to reflect the new positions after the drop.
- Repeat it in the list view.
- Check that the position of the products changed by reloading the page.
- Case 3
- On a catalog page where the user can remove products, click the remove (×) button on a product.
- Verify: the product is removed from the DOM in all view formats.
- Verify no JS errors in the console.
- Tests
- Case 1
- On the test company catalog category page check in grid view that order inputs render properly.
- Verify that inputs render properly for each view.
- Case 2
- Open the operations portal in the new tab. Go to CRM → Companies → Open the company which catalog you’re using for test → open catalog tab and select the test catalog.
- By comparing order inputs on the customer portal and on the operations portal check that the data in the inputs is populated correctly.
- Do the same across all views.
- Case 3
- In grid view, note the order values of all visible products (e.g., products at positions 1, 2, 3, 4, 5)
- Pick the product at position 3.
- Change its order input to the value currently held by position 1 (or lower).
- Tab out of the input (triggers change event).
- Check that the order of products changed. Try to reload the page and see that the order is saved after page reload.
- Repeat by moving a product down and do the same check.
- Case 4
- Navigate to page 1 of a multi-page catalog category.
- Select a test product and set a product's order to a value lower than any product on the page (e.g., 0 or -5).
- Check that items order changed properly without page reloading.
- Navigate to the last page
- Set a product's order to a value higher than any product on the page (e.g., 9999)
- Check that items order changed properly without page reloading.
- Case 5
- Navigate to page 2 (a non-boundary page) of a multi-page catalog.
- Note the min and max order values on this page.
- Set a product's order to a value below the min (should place it on page 1)
- Expected that the page will be reloaded to show the new right order, since one of the products moved to the different page, and the new product should be placed in its place. Check that this behavior works right.
- Go to the first page and try to do the same flow but, set the product’s order value above the maximum value . Check that page reloaded, the new product appeared on the first page instead of the old one. Go to the second page and check that the product that you wanted to move to the second page, appeared there.
- Case 6
- Select a product for test and try to remove the order number from the input and save empty input or just place the “e” character which is a exponent.
- See that the value of order restored and no changes applied.
- Case 7
- In the grid view, click directly on an order input.
- Type a value, select text inside it.
- Attempt to drag starting from inside the order input. Check that drag isn’t starting.
- Drag a tile by grabbing an area outside the order input. See that drag drop works normally.
- Case 8
- Try to drag drop a product to a new position. See that values in the order inputs changed according to drag drop order changing.
- Case 9
- Go to the regular, non-company catalog category page.
- Check that for Grid view there are no order inputs.
- Try to switch views to check that in other views we don’t have order input as well.
- Case 10
- Go to a catalog category page with a single page.
- Try to change order of product by input values that are out of min and max current values on the page.
- Check that order changes correctly, without page reloading.
- KOD-30694: Port feature to kodarisdemo-web: sorting configurator options, and resolve the selector issue
- Regression Tests
- Case 1
- Open the commerce site.
- Open a product page: everything should work as expected.
- Tests
- Case 1
- Open the commerce site.
- Open a product page that has at least 2 filters.
- Log in the Operations Portal, and open PIM → Filter Categories page .
- Find those filters in the grid searching by Name .
- Change filter categories “position” property in the grid to make a new order for filters.
- Back to the commerce site product page, and reload it:
- It should display the filter selectors sorted according to the new order.
- If the “position” values for the filter categories are equal, these filter selectors should be sorted alphabetically.
- Case 2
- Open the commerce site.
- Open a product page that has at least one filter.
- Copy this filter name.
- Log in the Operations Portal, and open PIM → Filter Categories page.
- Find that filter in the grid searching by Name , and click to open its Details page.
- Click the Attributes tab.
- In the Attributes list on the left, click “Edit” (pencil icon) for editing an attribute: it will open an “Edit Attribute” modal form.
- Change the “Order” value, and click “Save”.
- Repeat these steps to edit the “Order” value for each of the other attributes
- Back to the commerce site product page, and reload it.
- Click the selector for the changed filter:
- It should display the attribute options sorted according to the new order.
- If the “order” values for the attributes are equal, these attribute options should be sorted alphabetically.
- KOD-30703: Kodaris - Quote/Lead/Order Custom Fields Follow-up - Ability to Update on Grids
- KOD-30758: Company catalog product add search box unusable with product codes with dashes
- KOD-30773: Parser fix
- KOD-30794: Update wording in email templates
- KOD-30809: Payment Methods
- KOD-30812: Configure Pricing
- Regression Tests
- Case 1
- Open the commerce site and log in as a customer.
- If a product has a price, clicking the Add to Cart button should work in:
- PDP
- PLP:
- Case 2
- Open the commerce site and log in as a customer.
- Verify the Quick Order forms in:
- Popup
- Page
- Select products with price.
- Click Add to Cart:
- The products should be added to cart.
- Tests
- Case 1
- Open the commerce site and log in as a customer.
- If a product price shows Call for Pricing, the Add to Cart button should be disabled in:
- PDP
- PLP:
- Log out and verify as a visitant (anonymous) user as well.
- Case 2
- Open the commerce site and log in as a customer.
- Verify the Quick Order forms in:
- Popup
- Page
- Select only products without price (that shows Call for Pricing).
- Click Add to Cart:
- No products should be added to cart.
- An alert message should be displayed.
- Now, select both products without price and products with price.
- Click Add to Cart:
- No products should be added to cart.
- An alert message should be displayed, with a button "Add Remaining Items“.
- Click the “Add Remaining Items” button:
- The alert message should be hidden.
- The browser should be redirected to the Cart page.
- Only products with price should be added to cart.
- Products without price should not be added to cart.
- KOD-30816: Implementation - Shipping Methods / Shipvias
- Regression Tests
- Case 1
- On checkout, make sure the shipping options still load and you can select them.
- Tests
- Case 1
- On checkout, you should now see Customer Pick Up as a shipping option.
- If you select it, you will now see a dropdown to select a warehouse of where to pick up the order → if you click on one of the warehouses, it will update the order with that warehouse.
- If you select a different delivery option, that dropdown should no longer be there.
- Select customer pick up again and a warehouse and finish checkout.
- Once completed, you can go to the operations portal to find that order and notice that the order should have customer pick up as the delivery option as well as the warehouse you selected.
- KOD-30830: Formatting Issue when exporting reports with multi-select fields
- KOD-30857: Two different results from a search
- KOD-30864: Product Category Assignment filtering
- Regression Tests
- Case 1: Category dropdown filtering still works for real categories
- Navigate to Products > Category Assignment tab.
- Open the Category filter and select a specific real category.
- Clear the selection.
- Expected Result:
- Selecting a category filters the grid to products in that category.
- Clearing restores the full product list.
- Tests
- Case 1: "No Categories" option appears in the Category filter dropdown
- Navigate to Products > Category Assignment tab.
- Open the Category filter dropdown.
- Expected Result:
- "No Category Assigned" with “None” is shown as the first option in the dropdown.
- Real categories returned by the backend are listed below it.
- Type a few characters that match one or more real categories.
- Expected Result:
- The dropdown continues to show "No Category Assigned" at the top.
- Matching real categories appear below it.
- Case 2: Selecting "No Category Assigned" filters the grid
- Navigate to Products > Category Assignment tab.
- Open the Category filter dropdown.
- Click "No Category Assigned".
- Expected Result:
- The Category filter input displays the text "None".
- The grid refreshes and shows only products that have no category assigned.
- KOD-30863: Filter Categories and Product Organization
- KOD-30902: Add export for Company Groups / Assigned Companies
- Regression Tests
- Case 1
- Login to the operations portal.
- Navigate to the Company Groups screen.
- Choose any available category.
- Navigate to Assigned Companies tab.
- Verify that grid still loads fine.
- Tests
- Case 1
- Login to the operations portal.
- Navigate to the Company Groups screen.
- Choose any available category.
- Navigate to Assigned Companies tab.
- Open dev inspector → Network.
- Click on File → Export → Save.
- Verify that we are using api/system/customerGroup/id/company/export endpoint.
- KOD-30890: Featured Products
- Tests
- Case 1: Cell border and link
- Open a page with a CM: Grid block, select a cell.
- Open Specific Border Width, unlink sides, set top to 2px, leave others at 0.
- In the Border section set color and style solid.
- Open Link panel, enter a URL in Link Href.
- Save and preview.
- Expected: Only top border visible on the cell; clicking the cell navigates to the URL.
- Back in the editor, clear the Link Href, save and preview.
- Expected: Cell is no longer clickable; border remains.
- 59463: Update Return Policy Messaging in Customer Portal (Orders) & Order Confirmation Screen
- KOD-30912: Update email templates
- KOD-30913: Update Get Selected Warehouse functionality
- Regression Tests
- Case 1
- Make any manipulation with selected store:
- Select for a session.
- Select as a default.
- Reload page after selection of any.
- Re-login after selection of default.
- Select the default warehouse in the customer portal and ensure it is selected for your customer on the Web portal.
- 59759: Display Superseded/Inactive messaging shown based on overall stock availability across warehouses
- KOD-30914: Kodaris - B2C Address Management on Customer Portal
- Tests
- Case 1
- Verify that the "Addresses" menu item appears in the navigation menu under the "My Account" section.
- Verify that the grid displays the following columns: Street Address, City, State, Postal Code, Billing, Active.
- Verify that the "Add Address" button creates a new address and redirects to the edit page.
- Verify that the Address Detail page opens successfully.
- Verify that the Actions dropdown contains the "Delete" button.
- Verify that clicking Delete shows a confirmation dialog with the address text.
- Verify that after confirming deletion, the address is removed and the user is redirected to the addresses list.
- 59892: Configure - Customize "Priority" dropdown
- 59950: Kodaris - Update the button component
- 59956: Configure - Auto-Assign Employees to Company Addresses (shiptos)
- 59981: Set Customer Product Code on Order Items
- 60120: Pricing Issue On Store Customer
- 60143: Default Shipping Option for Internal Cash Quotes/Orders - Engineering
- KOD-30886: Kodaris - Surface error message for expired password
- Regression Tests
- Case 1
- Go to the commerce.
- Try to login in a customer account with a correct password.
- Expected:
- You should be able to login successfully.
- Case 2
- Go to the commerce.
- Try to login in a customer account with an incorrect password.
- Expected:
- You should not be able to login and should see the “Login failed” message.
- Go to the operations portal.
- Try to login in an employee account with a correct password.
- Expected:
- You should be able to login successfully.
- Case 5
- Go to the operations portal.
- Try to login in an employee account with an incorrect password.
- Expected:
- You should not be able to login and should see the "Login failed. Please try again." message.
- Tests
- Case 1
- Ensure that you have done the steps to create a customer with an expired password described on regression test case 3.
- Try to login with your correct password in the account with an expired password.
- Expected:
- You should not be able to login. You should see the message:
- Your password has expired. Please reset your password to continue.
- Case 2
- Ensure that you have done the steps to create an employee with an expired password described on regression test case 6.
- Open DevTools.
- Go to the operations portal.
- Try to login with your correct password in the account with an expired password.
- You should not be able to login. The UI is not changing according to the errors, so you need to monitor the response. You should see the message on the errors of the response: "Your password has expired. Please reset your password to continue.
- 60279: Hide MLF/MSF Price on Website
- 60324: Customer Account Activation - Pricing Issue
- 60362: Possible sync error- Check Syncs
- 60374: Payment Portal Login Issue
- 60497: Configure - Customize "Lead Status" Dropdown
- 60498: Configure - Customize Opportunities "Lost Reason" dropdown
- 60499: Configure - Customize Opportunities "Lost To" Dropdown
- 60500: Configure - Customize Job Importance dropdown
- 60501: Configure - Customize "Source" Selection on Opportunities
- 60502: Configure - Customize Opportunity Type dropdown
- 60512: Image Ordering Issues for Configurator Products
- 60592: Operations Portal - Self Service Customer Pickups
- 60774: Kodaris - Ticket Custom Fields - fix
- KOD-30923: UX - Add Price Book Email to Customer Group Companies
- Regression Tests
- Case 1
- Navigate to Company Groups and open a company group with assigned companies.
- Click the Assigned Companies tab.
- Add a new company to the group using the assign company functionality.
- Verify the newly added company appears in the grid.
- Select a company row using the checkbox.
- Delete the selected company from the group.
- Verify the company is removed from the grid and remaining data is unaffected.
- Tests
- Case 1
- Navigate to Company Groups and open an existing company group that has assigned companies.
- Click the Assigned Companies tab.
- Verify a Price Book Email column is visible in the grid by default.
- Click on a cell in the Price Book Email column for any company row.
- Enter a single email address (e.g. test@example.com ) and blur the field.
- Verify the value is saved and persists after refreshing the page.
- Edit the same cell and enter comma-separated emails (e.g. user1@example.com, user2@example.com ) and blur the field.
- Verify the comma-separated value is saved and displayed correctly after refreshing the page.
- 60978: Self Service Customer Pickups - UX to turn on and off
- 60981: Sticky Filter on Opportunities > Data View Disappearing
- 60984: Catalog enhancement - mimic export file - grouping update
- 61013: Data Missing for Reporting - Engineering
- 61051: Kodaris - Custom Fields fix in Products, Companies
- 61111: Cash Quotes Outside Rep Update
- 61162: Engineering - Register/Signup Page Modification
- 61176: Include priceBookEmail in Customer Group Company listV2 endpoint
- 61218: Surface fields to invoice item grid
- 61224: Configure - Restrict Employees to Their Assigned Companies
- 61321: Handle partially approved transactions
- 61420: Payment Section in Company - Engineering
- 61568: Kodaris - Add timer / favorites / adjusted @mentions / fixed time-report page to the services app
- 61569: Cash Quotes Dashboard - Engineering
- 61579: Credit App - Enable production deployment - Engineering
- KOD-30924: Kodaris - Add "Allow Multiple" option to Custom Fields configuration page
- Regression Tests
- Case 1
- Verify that creating/editing a custom field works correctly.
- Tests
- Case 1
- Verify that selecting fieldType = Dropdown shows the "Allow Multiple" toggle.
- Verify that the "Allow Multiple" value is saved when creating a new dropdown field.
- Verify that the "Allow Multiple" value is loaded when editing an existing dropdown field.
- Verify that after enabling "Allow Multiple" and clicking Save, the corresponding field on the Company Custom Fields page allows selecting multiple values.
- KOD-30925: Kodaris - Add "Remember Me" checkbox to kodaris.com sign-in page
- Case 1
- Make sure the Sign In page (spcu/login) looks and works correctly.
- Tests
- Case 1
- Make sure the “Remember me” checkbox appears on the Sign In page.