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 16, 2026 release notes
Tickets
- 5356: Create help doc for Fedex Shipping setup by host
- KOD-28633: Add Ability to Add/Remove custom fields
- Regression Tests
- Case 1
- Ensure that the “Company” -> ‘Details’ -> “Custom Fields” tab is functioning correctly and that the fields are displayed in the form.
- Re-check the test above after editing CRM Configuration -> Custom Fields.
- Tests
- Case 1
- Make sure that clicking (CRM Configuration screen) on “+ Add Field” opens a side panel with the title “Add Custom Field”.
- Make sure that clicking on the Edit icon for an existing field opens a side panel with the title “Edit Custom Field” and that the field data is filled in.
- Make sure that when you add a new field and click Save, the field appears in the table.
- Make sure that when you edit an existing field and click Save Changes, the changes are displayed in the table.
- Make sure that when you click the Delete icon, the field is deleted from the table.
- Make sure that when selecting the “Dropdown” type, options can be added using Enter or a comma.
- Make sure that added dropdown options can be deleted by clicking on the “x”.
- Make sure that after clicking the Save button (in the header), the changes are saved in the “integrationIndexedCompanyFields” setting.
- Make sure that after saving, new/changed fields are displayed on the Company -> Detail -> Custom Fields page.
- Make sure that when integrationIndexedCompanyFields is empty, you can create fields from scratch.
- 43184: Configure - Filter by More Fields on the Ticket Data Screen
- 43207: Configure - View Vendor Invoice Files in Split View Mode
- KOD-29161: Implementation - Restricted Products
- KOD-29330: Order Automation - Implement automatic order splitting for kit items into individual orders
- KOD-29452: ADA web compliance 2
- Tests
- Case 1
- The skip button is the first focusable element on the tab.
- Navigate to the home page, FAQ, about us and product pages and hit tab on each one, the "skip to main content" should show up and when clicked scroll to the main content.
- You can try hitting tab again to go to the next focusable element on the page, in this case the skip button should disappear, you can make it appear again without refreshing the page by clicking shift+tab to focus back.
- Case 2
- Test custom buttons and anchor tags for aria label on CMD.
- In the operations portal open the CMS and open a page or create a Gutenberg page.
- Type /custom button for the custom button and /slider 1 for the slider that has anchor tags.
- From there on the “block" section you can find aria labels for the button and for the slides individually.
- To test the button you can just add the aria label and preview, when you inspect the element on the button you should see the aria label.
- For the slider you first need to make the slide visible and add the aria label, then you need to expand the DOM element on swiper-slide then on the div with class cmx-slide__content you will find an <a> tab, within it there is a span where your aria label will be present.
- If you have more than one slide you can right click on the <swiper-slide and add a break on subtree changes. This make it so that when the slider moves the code and the page freezes so you have time to find the components and expand them and find the aria labels.
- Case 3
- We want to go inside of a blog post because it shall contain in one page the <nav> tag on the navbar and the <article> and {{<aside>}}tags on the blog post.
- Go into a blog post and right click the navbar to validate it has the proper nav tag.
- On the blog post body right click the post body to check if the blog post is inside an article tag.
- Verify that the article is accompanied, at the same DOM level, by the aside tag.
- Case 4
- Ensure that the special characters are escaped properly in the blocks.
- On the Gutenberg editor add a CM: Section: Child Pages Slider component and on the block for the “Parent Page Code / Name" search for some page that has a special character and use it as the parent page.
- Preview the page and inspect the “view all" button to check if the aria label is rendered with the special character.
- Additionally you can activate the voiceover feature on your device and navigate to the component to ensure that it is read as expected.
- Case 5
- On the operations portal go to CMS, pages and create a new Gutenberg page. The layout could just be the base. After creating the page change the template on the right side menu (need to scroll) into columns blog. Find the slug (code) of the page that we just created and changed the template and copy it. Back on the operations portal create a new page and on this one for the parent category search the slug from the columns blog template. Save both and preview the parent (columns blog).
- Inspect element to check if the child page contains an article tag wrapping an anchor tag.
- Case 6
- Also on a page that has a child. Copy the code of the parent page.
- When editing add CM: Section: Child Pages Grid and CM: Section: Child Pages Slider.
- On their respective blocks add the parent page of each (must have child pages on the parent).
- Click preview and inspect the aria label of each, their prefixes should be “read more“ and “learn more“ and the name of the child page.
- On the editor edit the area for the prefix and preview again. Read more and Lean more should have been replaced with the new prefix.
- 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-29686: Sync POD scans and PDFs etc.
- KOD-29819: Mobile App Inventory View - Match Desktop UI
- Regression Tests
- Case 1- enableOrderByStore Triggers Auto-Select
- Prerequisites:
- autoSelectStore = false
- enableOrderByStore = true
- Fresh app install
- Steps:
- Launch the app as a guest user.
- Grant location permission when prompted.
- Navigate to the product details page.
- ER:
- Auto-select runs despite autoSelectStore = false.
- The closest warehouse is selected.
- Fulfillment picker (Pickup/Delivery) is displayed instead of inventory counts.
- Standard inventory display is NOT shown.
- This takes priority over all inventory display modes.
- Case 2 - Guest User - Inventory Counts Shown
- Prerequisites:
- displayInventoryCountsForGuestUsers = true
- Store is selected.
- The product has inventory in the selected store.
- Steps:
- Launch app as guest.
- Navigate to products with inventory > 0 in the selected store.
- Observe inventory display.
- ER:
- Display shows: "
- {Warehouse Name}: {count}" (e.g., "Main Warehouse: 25")
- Case 3 - Guest User - Text Labels Instead of Counts
- Prerequisites:
- displayInventoryCountsForGuestUsers = false
- Store is selected.
- The product has inventory in the selected store.
- Steps:
- Launch app as guest.
- Navigate to products with inventory > 0 in the selected store.
- Observe inventory display.
- ER:
- Display shows: "{Warehouse Name}: In Stock"
- Actual count is NOT visible.
- Case 4 - Logged-In User - Zero Inventory Display
- Prerequisites:
- enableZeroAvailabilityForInventory = false.
- User is logged in.
- Product has 0 inventory in the selected store.
- Steps:
- Log in with user credentials.
- Navigate to product with 0 inventory in selected store.
- Observe inventory display.
- ER:
- Display shows: "{Warehouse Name}: Call for Availability".
- "Check other locations" link is visible.
- Case 5 - Collapsed Inventory View
- Prerequisites:
- autoSelectStore = false
- enableOrderByStore = false
- enableCollapsedInventory = true
- No store manually selected.
- Steps:
- Launch app (guest or logged-in).
- Navigate to products with inventory in multiple warehouses.
- Observe the inventory section.
- Tap "Show More" toggle.
- ER:
- Initially: Only primary warehouse inventory is visible.
- After toggle “Show More”: All warehouses with inventory are displayed.
- Case 6 - Flat List Inventory View
- Prerequisites:
- autoSelectStore = false
- enableOrderByStore = false
- enableCollapsedInventory = false
- Steps:
- Launch app.
- Navigate to products with inventory in multiple warehouses.
- Observe the inventory section.
- ER:
- All warehouses displayed in a flat list.
- No "Show More" toggle present.
- Tests
- Case 1
- Prerequisites:
- autoSelectStore = true OR enableOrderByStore = true
- Fresh app install (clear app data)
- Device location services enabled
- Steps:
- Launch the app as a guest user.
- Grant location permission when prompted.
- Navigate to any product details page.
- Observe the selected warehouse in inventory section
- The warehouse closest to the user's current location is auto-selected.
- Selected warehouse name appears in inventory display
- Case 2 - Auto-select store - Geolocation Denied
- Prerequisites:
- autoSelectStore = true OR enableOrderByStore = true
- Fresh app install (clear app data)
- Steps:
- Launch the app as a guest user or logged in user w/o default warehouse assigned.
- Deny location permission when prompted.
- Navigate to any product details page.
- Observe the selected warehouse in the inventory section.
- The first warehouse from the active warehouses list is auto-selected.
- No error messages displayed.
- Case 3 - Logged-In User - Has Default Warehouse
- Prerequisites:
- autoSelectStore = true OR enableOrderByStore = true
- The user account has a warehouseCode set in the Customer Account.
- Steps:
- Log in with user credentials.
- Navigate to any product details page.
- Observe the selected warehouse in the inventory section.
- The user's default warehouse (from Account.warehouseCode) is selected.
- Geolocation is NOT requested.
- Case 4 - Guest User - No Inventory in Selected Store, Available Elsewhere
- Prerequisites:
- displayInventoryCountsForGuestUsers = false
- autoSelectStore = true
- Product has 0 inventory in selected store but > 0 in other stores.
- Steps:
- Launch app as guest.
- Navigate to products with 0 inventory in the selected store.
- Observe inventory display and links.
- Display shows: "{Warehouse Name}.
- Available in Network"
- "Check other locations" link is visible.
- Case 5 - Guest User - No Inventory Anywhere
- Prerequisites:
- displayInventoryCountsForGuestUsers = false
- autoSelectStore = true
- Product has 0 inventory in ALL warehouses.
- Steps:
- Launch app as guest.
- Navigate to products with no inventory anywhere.
- Observe inventory display.
- Display shows: "{Warehouse Name}: Out of Stock"
- "Check other locations" link is visible (opens modal with “contact” message)
- Case 6 - Modal Opens and Shows Product Info
- Prerequisites:
- autoSelectStore = true
- Store is selected
- Modal opens with product image, code, and name at top.
- List of nearby locations is displayed below.
- Selected warehouse displayed on the top of the list.
- Distance to warehouse is displayed (except for selected warehouse).
- Nearby locations sorted by distance (closest first).
- Case 7 - Nearby Locations Limited by Setting
- Prerequisites:
- autoSelectStore = true
- numberOfLocationsToDisplay = 3
- Product has inventory in 5+ warehouses.
- Location permission granted.
- Store is selected.
- Steps:
- Navigate to products with multi-warehouse inventory.
- Open "Check other locations" modal.
- Count visible locations.
- Only 3 locations shown initially.
- "Show All" button is visible at the bottom.
- "Show All" button disappears upon tap on it, and all locations are displayed.
- Case 8 - Modal Inventory Text for Guest
- Prerequisites:
- autoSelectStore = true
- displayInventoryCountsForGuestUsers = false
- Guest user
- The product has inventory in multiple warehouses.
- Steps:
- Open the "Check other locations" modal as a guest.
- Observe inventory text for each location.
- Locations show "In Stock" instead of actual counts.
- Consistent with main inventory display behavior.
- Case 9 - Warehouse Missing Coordinates
- Prerequisites:
- autoSelectStore = true
- Location permission granted.
- At least one warehouse has null lat/long.
- Other warehouses have valid coordinates.
- Steps:
- Open "Check other locations" modal.
- Observe location order.
- Warehouses with coordinates sorted by distance first.
- Warehouses without coordinates appear last in the list.
- KOD-29891: Request for Payment Link
- Regression Tests
- Case 1
- Perform regular COD payment on any order.
- Send COP payment link on operation portal.
- Open the link, put data in.
- Perform payment.
- All should work without errors.
- Tests
- Case 1
- Update setting paymentLinkExpirationHours to 1 for easier testing.
- Send COD payment link for an order.
- Wait for 1 h and try to utilize the link for paying an order.
- You should see JS logs about the issue.
- Error for user should be generic: This payment link is invalid or has expired. Please contact support.
- Case 2
- Find a fully paid order.
- Send COD payment link for an order.
- Try to pay an order.
- You should see JS logs about the issue.
- Error for user should be generic: This payment link is invalid or has expired. Please contact support.
- Case 3
- You need to create 2 COD links with % of order total to pay:
- 90%
- 20% (error value)
- Pay order with a first link, it should be successful.
- When you try to pay with a second link, it should fail.
- You should see JS logs about the issue.
- Error for user should be generic: This payment link is invalid or has expired. Please contact support.
- Case 4
- Create a COD link.
- Cancel your order.
- Try to pay order via this link.
- You should see JS logs about the issue.
- Error for user should be generic: This payment link is invalid or has expired. Please contact support.
- KOD-29910: Placed By Column Drop Down length issue
- Regression Tests
- Case 1
- Make sure the search grids in the operations portal still load correctly.
- Case 2
- Make sure for columns in the grid that are only filterable still function the same when you go to search on the column.
- Tests
- Case 1
- For columns that are facetable and filterable, when you go to search on the column you will now see two different options - counts/buckets and filter.
- Case 2
- On the counts/buckets side, you should be able to search and it shows you the facets that contain that value, not case sensitive as well as the count associated to it of how many rows.
- Click one of the values and the items in the grid should update accordingly.
- If you have values typed into the search bar, you will see an x to clear the search which should bring back all the facets - with the one you checked still checked.
- If the value you searched for was not in the top 100 values, when you clear the search, you will see that checked facet at the bottom of the list.
- Case 3
- Now click the filter box - if you have facets checked, you will see them listed with the IN filter.
- Here you can change the type of filtering you want to do - this should act like how the filtering worked before on columns that were filterable only (ie: type a value with Contains, then switch to Does Not Contain and the value should be preserved, but if you switch to IN or some other one, then the value is cleared).
- Case 4
- Now click back to the counts/buckets tab - if you had any other type of filtering selected besides the IN, the filtering will clear and you should see the facet list with nothing checked.
- If you had values in the IN filter and switched back to the counts/buckets tab, that value should be checked in the list and the grid should still be filtered.
- Case 5
- For a column that is facetable and not filterable, you should only see the counts/buckets column and not the filters column.
- KOD-29938: Reprice button not working
- KOD-29995: Run rules engine to determine correct address
- KOD-30260: Kodaris - Ticket Custom Fields Follow-up - Ability to Update on Grids
- Regression Tests
- Case 1
- Grid
- Login as a user with the role administrator / superuser / ticketSettingEdit.
- Regular field update on grid — Edit a standard ticket column (e.g., name). Verify PATCH goes to /api/system/ticket/{id} with normal fields (no customFields key if no custom fields were changed).
- Verify changes save and persist after page refresh.
- Open a company detail page, change a standard field (e.g., name), and save.
- Refresh the page.
- Verify the standard fields are still correct.
- Verify the custom fields are still present after save (not cleared by the PUT).
- Export/Import — Verify custom field export/import with custom_ prefix still works.
- Case 2
- Custom Fields tab and Developers Fields tab.
- Login as a user with the role administrator / superuser / ticketSettingEdit.
- Go back to Tickets, open ticket Details by clicking the > button at the end of a row.
- Switch to the Custom Fields tab.
- Remember the name of a not empty custom field or set any value in any custom field and remember it.
- Switch to the b
- Find the custom field in the list.
- Try to update, delete and insert a custom field via the Developers Fields tab this way: do an action, refresh the grid, verify the change.
- Verify there are no error messages during the update/delete/insert
- Try to insert, update and delete a setting via the Developers Fields tab this way: do an action, refresh the grid, verify the change.
- Verify there are no error messages during the update/delete/insert.
- Case 3
- Permissions check.
- Login as a user with the role ticketView and without these roles administrator/ superuser / ticketSettingEdit.
- Verify that the user can see only assigned tickets.
- Login as a user with the role ticketViewAssigned and without these roles administrator/ superuser / ticketSettingEdit.
- Verify that the user can see/edit only assigned to him tickets.
- Tests
- Case 1
- Custom Field Created via Data Grid.
- Login as a user with the role administrator / superuser / ticketSettingEdit.
- Go back to Tickets - Data Grid.
- Find an empty custom field or delete the value.
- Refresh the page.
- Set some value in this custom field.
- Go to Developers Fields tab, find this custom field in grid and create a screenshot.
- Go to the Custom Fields tab.
- Delete the value in this field.
- Refresh page.
- Set the same value as in step 5.
- Go to Developers Fields.
- Verify that this custom matches the screenshot.
- Case 2
- Update from Data Grid.
- Login as a user with the role administrator / superuser / ticketSettingEdit.
- Go back to Tickets - Data Grid.
- Try to create, update, delete a value in a custom field.
- Verify that there are no error messages and data in the grid on the tab Developers Fields reflects the changes.
- Case 3
- Permissions check.
- Login as a user with the role ticketView and without these roles administrator/ superuser / ticketSettingEdit.
- Verify that the user can see custom field values in Grid, on Custom Fields tab, on Developers Fields tab.
- Verify that the user cannot see other (not custom fields) settings on the Developers Fields tab.
- Login as a user with the role ticketViewAssigned and without these roles administrator/ superuser / ticketSettingEdit.
- Repeat steps 2, 3 but use a ticket that is assigned to the user.
- Login as a user with the role ticketEdit and without these roles administrator/ superuser / ticketSettingEdit.
- Repeat steps 2, 3.
- Verify that the user can edit custom field values in Grid, on Custom Fields tab, on Developers Fields tab.
- Login as a user with the role ticketEditAssigned and without these roles{{administrator}}/ superuser / ticketSettingEdit.
- Repeat steps 7, 8 but use a ticket that is assigned to the user.
- Case 4
- Find/create a ticket with at least 1 not empty custom field and at least 1 non empty setting using a user with admin roles.
- Login as a user with the role ticketView/ticketEdit/ticketViewAssigned /ticketEditAssigned and without these roles administrator/ superuser / ticketSettingEdit.
- Go to Swagger and verify that /api/system/company/{companyID}/settings POST and GET return only Custom Field values (without other settings).
- KOD-30352: View Customer Statement from dashboard
- KOD-30384: Move Email blobs
- KOD-30392: Customer Account Activation
- KOD-30438: Web Front Updates
- Regression Tests
- Case 1
- Navigate to the website.
- Check that header still loads fine.
- Tests
- Case 1
- Navigate to the website.
- Check that you don’t see the Invoices option in the header.
- Case 2
- Navigate to the website.
- Check that instead of ‘My Cart’ is Order List Export.
- KOD-30443: Kodaris - Add Customer Addresses Tab in the Operations Portal
- Regression Tests
- Case 1
- Log in the Operations Portal.
- Open Customers page.
- Open Customer Details page: verify "Addresses" tab appears after "Assigned Addresses".
- Tests
- Case 1
- Log in the Operations Portal.
- Open Customers page.
- Open Customer Details page.
- Open Addresses tab: it should display a grid with addresses (if there are any registered).
- Case 2
- It should be possible to add a new address.
- Case 3
- It should be possible to edit an address.
- Case 4
- It should be possible to delete an address.
- KOD-30444: Kodaris - B2C Address Management on the Checkout
- Regression Tests
- Case 1
- Log in as a Non-consumer (ship-to required) customer. The customer's company must have shipreqfl = yes, and the customer must have at least one of these roles: companyAdmin, editAllLocations, viewAllLocations, editAssignedLocations, or viewAssignedLocations.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Verify the Shipping Address section shows only the company address autocomplete field labeled "Search for a shipping address".
- Verify there is no personal address search field (personalDeliveryAddress input is absent).
- Verify there is no "Save as a new personal address" checkbox.
- Search for and select a company address.
- Verify the delivery form fields populate correctly and fields are disabled/enabled per the address's override settings.
- Case 2
- Non-consumer (ship-to required) – place order with company address (all payment methods)
- Still in the same customer as Case 1 above.
- Select a company shipping address from the search field.
- Verify delivery fields populate with the company address.
- Proceed to payment and place the order using a credit card.
- Verify redirect to /spcu/checkout-thank-you completes without errors.
- Navigate to order history and verify the shipping address matches the selected company address.
- Repeat steps 1-4 and place the order using Purchase Order. Verify redirect and verify the shipping address in order history.
- Repeat steps 1-4 and click Request Quote. You can enable this flow by selecting “Add New Ship To Address” on company address autocomplete. Verify redirect and verify the shipping address in the customer's quotes.
- Case 3
- Non-consumer (ship-to required) – page reload persists company address
- Still in the same customer as Case 1.
- Add an item to the cart and navigate to /spcu/checkout.
- Select a company shipping address.
- Verify delivery fields populate and wait for the "Saving..." indicator to disappear.
- Reload the page (F5 / Cmd+R).
- Advance to the Location tab again.
- Verify the delivery form fields still show the company address data.
- Verify the company address search input shows the previously selected address name.
- Case 4
- Non-consumer (both pickers) – company address flow still works correctly.
- Log in as a Non-consumer (ship-to NOT required, with permission) customer. The customer's company must have shipreqfl = no , and the customer must have at least one of these roles: companyAdmin, editAllLocations, viewAllLocations, editAssignedLocations, or viewAssignedLocations.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Select a company address from the "Company shipping address" picker.
- Verify delivery fields populate with the company address and become disabled (if address does not allow override).
- Do not select a personal address. Leave the "Save as a new personal address" checkbox unchecked.
- Place the order (any payment method).
- Verify redirect to /spcu/checkout-thank-you completes without errors.
- Navigate to order history and verify the shipping address matches the company address (no personal address data leaked into the order).
- Case 5
- Non-consumer (ship-to required) – "Add New Ship To Address" does not show personal picker on reload
- Log in as a Non-consumer (ship-to required) customer. The customer's company must have shipreqfl = true , the system setting enableAddNewShipToAddress must be "1", and the customer must have at least one of these roles: companyAdmin, editAllLocations, viewAllLocations, editAssignedLocations, or viewAssignedLocations.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Select "Add New Ship To Address" from the company address dropdown.
- Verify the delivery form fields are editable (this option allows the user to enter a new address).
- Verify there is no personal address search field and no "Save as a new personal address" checkbox.
- Verify the company address label says "Search for a shipping address" (not "Company shipping address").
- Enter a delivery address and reload the page (F5 / Cmd+R).
- Advance to the Location tab again.
- Verify the delivery form fields still show the address entered in step 8.
- Verify there is still no personal address search field and no "Save as a new personal address" checkbox (the personal picker must NOT appear even though isDeliveryAddressRequired returns false in this flow).
- Case 6
- Billing address autocomplete is unaffected.
- Log in as any customer who has at least one of these roles: companyAdmin, editAllLocations, viewAllLocations, editAssignedLocations, or viewAssignedLocations.
- Add an item to the cart and navigate to /spcu/checkout.
- Verify the Billing Address section still shows the "Search for a billing address" autocomplete.
- Search for and select a billing address.
- Verify billing form fields populate correctly (this flow was not changed and should be unaffected).
- Case 7
- "Shipping same as billing" checkbox still works.
- Log in as a Consumer customer.
- Add an item to the cart and navigate to /spcu/checkout.
- Fill in the billing address fields.
- Check the "Shipping same as billing" checkbox.
- Verify the delivery fields are updated to match the billing address.
- Tests
- Case 1
- Consumer – save a new personal address during checkout.
- Log in as a Consumer customer. You can change your customer’s company Customer Type to “Consumer”. You will also need to change shipreqfl setting to “no”.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Fill out the shipping address form.
- Check the "Save as a new personal address" checkbox.
- Place the order (any payment method).
- Verify redirect to /spcu/checkout-thank-you completes without errors.
- Go back to the Location tab and verify the new address was saved as a new entry with all fields matching what was entered.
- Case 2
- Note on default addresses: There is currently no UI in the customer portal to set a personal address as default. To mark a personal address as default for testing purposes, use Swagger to call the customerAddress API and set defaultAddress = true on the desired address.
- Consumer – UI rendering and default address pre-fill.
- Log in as a Consumer customer who has a default personal address (set via Swagger – see note above).
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Verify the Shipping Address section shows a single search field labeled "Search for a shipping address" (no "Company shipping address" or "Personal shipping address" label).
- Verify there is no company address autocomplete field (no deliveryAddress input).
- Verify the delivery form fields (organization, first name, last name, email, phone, street address, city, state, postal code, country) are pre-filled with the customer's default personal address only when there is no value in the Street Address input.
- Verify the personal search input shows the default address name (organization or address1).
- Verify the "Save as a new personal address" checkbox is visible below the delivery address fields and is unchecked by default.
- Case 3
- Consumer – select a saved personal address and place order (PO and CC).
- Log in as a Consumer customer who has multiple personal addresses saved.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Type part of a non-default address (organization name or street) into the "Search for a shipping address" field.
- Verify a dropdown appears showing matching personal addresses with format Organization - Address1 and a (Default) tag on the default address.
- Select a non-default address from the dropdown.
- Verify all delivery form fields update to match the selected address data (organization, name, email, phone, address, city, state, postal code, country).
- Verify the "Save as a new personal address" checkbox is automatically unchecked after selection.
- Verify all delivery form fields remain editable (not disabled).
- Leave the save checkbox unchecked and proceed to the payment step.
- Place the order using a credit card.
- Verify redirect to /spcu/checkout-thank-you completes without errors.
- Navigate to the order in the customer's order history and verify the shipping address matches the personal address selected in step 6.
- Repeat steps 1-9 and place the order using Purchase Order. Verify redirect and verify the shipping address in order history.
- Case 4
- Consumer – select existing address unchecks save, then edit and save.
- Log in as a Consumer customer.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Select an existing personal address from the search dropdown.
- Verify the "Save as a new personal address" checkbox is unchecked (to prevent duplicates).
- Manually edit one delivery field (e.g., change the Address Line 2 to "Suite 999") and the Company.
- Check the "Save as a new personal address" checkbox.
- Place the order (any payment method).
- Verify redirect to /spcu/checkout-thank-you completes without errors.
- Navigate to the customer's address book and verify a new address entry was created with the edited field, and the original address still exists unchanged.
- Case 5
- Consumer – page reload persists the selected personal address.
- Log in as a Consumer customer.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Select a non-default personal address from the search dropdown.
- Verify the delivery form fields populate with the selected address and wait for the "Loading..." indicator to disappear (confirming backend sync completed).
- Reload the page (F5 / Cmd+R).
- Advance to the Location tab again.
- Verify the delivery form fields still show the personal address data from step 4 (organization, street, city, state, postal code, country all match).
- Verify the personal search input is empty (the search input value is not persisted – only the delivery fields are).
- Verify the default address pre-fill does not overwrite the previously selected address (since deliveryAddress1 is already populated).
- Case 6
- Consumer – no default address, fields start empty.
- Log in as a Consumer customer who has personal addresses saved but none marked as default.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Verify the delivery form fields are empty (no pre-fill occurred).
- Verify the personal search input is empty.
- Note: delivery inputs may be prefilled from previous information that was saved. You can place an order before running this test to make sure everything is clear and nothing is being prefilled.
- Case 7
- Non-consumer (both pickers) – UI rendering with side-by-side pickers.
- Log in as a Non-consumer (ship-to NOT required, with permission) customer. The customer's company must have shipreqfl = no, and the customer must have at least one of these roles: companyAdmin, editAllLocations, viewAllLocations, editAssignedLocations, or viewAssignedLocations.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Verify the Shipping Address section shows two search fields side by side: one labeled "Company shipping address" and one labeled "Personal shipping address".
- Verify the delivery form fields start with company shipping address information from the selected ship-to of the customer and not prefilled with personal shipping address information.
- Verify the "Save as a new personal address" checkbox is visible.
- Case 8
- Non-consumer (both pickers) – save new personal address during checkout.
- Same customer conditions as last test.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Manually enter a new address in the delivery form fields (do not select from either picker).
- Check the "Save as a new personal address" checkbox.
- Place the order (any payment method).
- Verify redirect to /spcu/checkout-thank-you completes without errors.
- Navigate to the customer's address book and verify the new address was saved.
- Case 9
- Non-consumer (both pickers) – select personal address and place order (all payment methods).
- Same customer conditions as last test.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Type into the "Personal shipping address" search field and select a personal address from the dropdown.
- Verify all delivery form fields populate with the personal address data and are editable.
- Verify the "Company shipping address" input is empty.
- Proceed to the payment step and place the order using a credit card.
- Verify redirect to /spcu/checkout-thank-you completes without errors.
- Navigate to the order in order history and verify the shipping address matches the selected personal address.
- Repeat steps 1-6 and place the order using Purchase Order. Verify redirect and verify the shipping address in order history.
- Case 10
- Non-consumer (both pickers) – switching between company and personal address pickers.
- Same customer conditions as last test.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Select a company address from the "Company shipping address" picker.
- Verify the delivery fields populate with the company address and become disabled (if the company address does not allow override).
- Verify the "Save as a new personal address" checkbox is unchecked.
- Now select a personal address from the "Personal shipping address" picker.
- Verify the "Company shipping address" input is cleared.
- Verify the delivery fields are re-enabled and now show the personal address data.
- Verify the "Save as a new personal address" checkbox is unchecked (since it's an existing address).
- Check the "Save as a new personal address" checkbox.
- Now select a company address again from the "Company shipping address" picker.
- Verify the "Personal shipping address" input is cleared.
- Verify the "Save as a new personal address" checkbox is unchecked (clearing happens automatically on company address selection).
- Verify the delivery fields update to the company address data.
- Case 11
- Non-consumer (both pickers) – page reload persists selected address.
- Same customer conditions as last test.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Select a personal address from the "Personal shipping address" picker.
- Verify delivery fields populate and wait for the "Loading..." indicator to disappear.
- Reload the page (F5 / Cmd+R).
- Advance to the Location tab again.
- Verify the delivery form fields still show the personal address data from step 4.
- Verify both search inputs (company and personal) are empty (search input values are not persisted).
- Verify no default address pre-fill overwrites the data (since both pickers are shown and deliveryAddress1 is already populated).
- Now repeat steps 1-3 but select a company address from the "Company shipping address" picker instead.
- Verify delivery fields populate and wait for the "Saving..." indicator to disappear.
- Reload the page (F5 / Cmd+R).
- Advance to the Location tab again.
- Verify the delivery form fields still show the company address data from step 11.
- Case 12
- Non-consumer (no permission) – UI rendering, select personal address, and place order.
- Log in as a Non-consumer (ship-to NOT required, no permission) customer. The customer's company must have shipreqfl = false, and the customer must NOT have any of these roles: companyAdmin, editAllLocations, viewAllLocations, editAssignedLocations, viewAssignedLocations.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Verify only the personal address search field is shown, labeled "Search for a shipping address" (not "Personal shipping address").
- Verify there is no company address picker.
- Verify the "Save as a new personal address" checkbox is visible.
- Select a personal address from the search dropdown.
- Verify the delivery form fields populate with the selected address and are editable.
- Place the order (any payment method).
- Verify redirect to /spcu/checkout-thank-you completes without errors.
- Navigate to order history and verify the shipping address matches the selected personal address.
- Case 13
- Non-consumer (no permission) – page reload persists personal address.
- Same customer conditions as last test.
- Add an item to the cart and navigate to /spcu/checkout.
- Advance to the Location tab.
- Select a personal address from the search dropdown.
- Verify delivery fields populate and wait for the "Loading..." indicator to disappear.
- Reload the page (F5 / Cmd+R).
- Advance to the Location tab again.
- Verify the delivery form fields still show the personal address data from step 4.
- Verify the search input is empty (not persisted).
- KOD-30490: Allow assigning price book templates to specific catalogs
- 56251: Punchout Shipto Mapping Error
- KOD-30548: Add cono columns in Sku and order grid
- Case 1: Verify Cono on Orders and Skus Screens
- Open the Operations Portal.
- Verify Cono on Orders screen.
- Navigate to Orders.
- Open Show Columns.
- Enable Cono column.
- Verify the column is displayed.
- Ensure data is returned from the backend and shown correctly.
- Verify Cono in Order detailed view.
- Open any order.
- Check the field on the Developer screen.
- Verify Cono on Skus screen.
- Navigate to Skus.
- Open Show Columns.
- Enable Cono column.
- Verify the column is displayed.
- Ensure data is returned correctly.
- Verify Cono in Sku detailed view.
- Open any SKU.
- Check the field on the Developer screen.
- KOD-30558: Google tag
- Regression Tests
- Case 1
- Check that the website page appears correctly after loading.
- Check that there are no errors related to GoogleTagManager in the console.
- KOD-30583: Prevent Store Credit Creation on Generic Cash Accounts
- Regression Tests
- Case 1
- Objective: Verify existing store credit operations still work.
- Create store credit for normal company.
- Add funds to store credit.
- Use store credit on an order.
- Verify balance updates correctly.
- Tests
- Case 1
- Objective: Verify store credit can still be created for companies without the genericCashAccount restriction.
- Use a company without a genericCashAccount setting.
- Go into company details, select the more dropdown menu and select Add Store Credit Account
- Expected Result: Store Credit Account should be created without any issues.
- Case 2
- Objective: Verify store credit creation is blocked for companies flagged as generic cash accounts.
- Use a company that already has a genericCashAccount setting or create a company with a genericCashAccount setting set to 1.
- Go into company details, select the more dropdown menu and select Add Store Credit Account
- Expected Result: You get an error message: "Store credit cannot be created for generic cash accounts."
- Case 3
- You can repeat the above test with different values in genericCashAccountSetting.
- Values like 1, true, True, and TRUE should all block store credit account creation while values like 0, false, False, and FALSE should still allow it.
- KOD-30618: Quotes feedback
- Tests
- Case 1
- Go to the customer portal → quotes and find an expired quote. Open it, there should be an expiration message.
- KOD-30635: Make data ranges editable on the quicksight dashboard
- KOD-30692: Banner - No delete button
- Regression Tests
- Case 1
- Make sure you are logged in to the operations portal and a super user.
- On the site, search for anything → the manage slider button should be there and if you click it, it should open the manage slider modal.
- Tests
- Case 1
- In the manage slider modal, you should notice that on all the slides, the x button should be on the page and you do not have to slide over.
- You can add a slide and add a wider image like the one in the ticket description → the x button should still be in the frame and you shouldn’t have to slide over.
- KOD-30700: Account Automation Shipto Update
- Regression Tests
- Case 1
- Make sure the company address is successfully saved in the ERP.
- Tests
- Case 1
- Make sure the following fields are saved in the ERP when saving the address: cyclecd = COD, statementty = N.
- KOD-30701: Kodaris PIM honoring CSD Customer Product Restrictions
- KOD-30702: Catalog Restriction and Shipto Budgeting
- KOD-30706: PDP View
- Regression Tests
- Case 1
- Navigate to a PLP.
- Verify: Product prices still display correctly (no labels, no broken layout).
- Verify: Add to cart from PLP still works
- Case 2
- Check that you see appropriate data + displays as:
- A guest user.
- A logged in user w/ access to view pricing.
- A logged in user w/o access to view pricing.
- Tests
- Case 1
- UOM Selector Removed.
- Navigate to a PDP.
- Verify: No unit-of-measure dropdown appears next to the quantity input.
- Verify: Quantity input (+/- buttons) still works.
- Verify: Add to cart works without the UOM selector.
- Case 2
- Product Attributes.
- On the same PDP, check the attributes row below the product name:
- Verify: Labels are BRAND:, ITEM #:, YOUR PART #:, UPC:
- Verify: "Supplier Part #" is NOT shown.
- Verify: Values display correctly (or — when empty).
- Case 3
- Price Labels.
- Check the pricing section:
- Verify: Price is displayed with unit suffix (e.g., $12.48 PCS).
- Verify: Unit Price is displayed with unit (e.g., $390.00 MSF).
- Verify: List Price is displayed.
- Verify: Standard Pack is displayed.
- Case 3
- Warehouse Grid.
- Check the Availability section:
- Verify: Warehouse rows have visible borders.
- KOD-30708: Proposed changes to clarify account types
- KOD-30714: Investigate issue with abnormal logging when generation source code
- KOD-30729: Update accountID to get pricing for the new Company
- KOD-30747: Delivery Date on Checkout
- Tests
- Case 1: Delivery Date Section Hidden When Setting Is Disabled
- Ensure checkoutDeliveryDateEnabled setting is not set or set to anything other than "1".
- Add items to cart and proceed to the Payment step of checkout.
- Expected Result:
- The "Request a delivery date and time" accordion section is not visible on the payment tab.
- Case 2: Delivery Date Section Visible When Setting Is Enabled
- Set checkoutDeliveryDateEnabled = "1" in settings.
- Add items to cart and proceed to the Payment step of checkout.
- The "Request a delivery date and time" accordion section is visible
- It contains a date input and three time options: Anytime , AM , PM
- Case 3: Past Dates Are Blocked
- Enable the feature ( checkoutDeliveryDateEnabled = "1" ).
- Proceed to the Payment step.
- Attempt to enter yesterday's date in the delivery date field.
- Expected Result:
- The date input does not allow selection of yesterday's date or any date in the past.
- The min attribute on the input prevents past dates from being selected.
- Case 4: Minimum Lead Time Is Enforced
- Set checkoutDeliveryDateEnabled = "1" and checkoutDeliveryDateMinDays = "2" in settings.
- Proceed to the Payment step.
- Attempt to enter tomorrow's date (1 day out) in the delivery date field.
- Expected Result:
- Tomorrow's date is not selectable — the minimum allowed date is 2 days from today.
- The day after tomorrow and beyond are selectable.
- Case 5: Selecting a Valid Delivery Date Saves to the Order
- Enable the feature and proceed to the Payment step.
- Select a valid future date (beyond the minimum lead time) in the delivery date field.
- Expected Result:
- The selected date is saved to the order (observable via network request to cart update API).
- The saved value is in MM/DD/YY format (e.g., selecting 2026-04-15 saves as 04/15/26 ).
- Case 6: Selecting a Delivery Time Saves to the Order (will be available after deployment).
- Enable the feature and proceed to the Payment step.
- Select AM , then observe the saved value.
- Select PM , then observe the saved value.
- Select Anytime , then observe the saved value.
- Expected Result:
- Selecting AM saves deliveryTime: "AM" to the order.
- Selecting PM saves deliveryTime: "PM" to the order.
- Selecting Anytime saves deliveryTime: "ALL" to the order.
- Case 7: Checkout Proceeds Without a Delivery Date Selected
- Enable the feature and proceed to the Payment step.
- Leave the delivery date field empty.
- Complete the rest of the checkout and place the order.
- Expected Result:
- The form submits successfully — delivery date is optional.
- No validation error is shown for the empty delivery date field.
- Case 8: Check border for a new item
- Make sure that the top border of the accordion is displayed when there are no more items above it, such as `shipping-accordion-item`.
- KOD-30773: Parser fix
- KOD-30776: Create AI Storage Flows
- KOD-30779: Display price field when value is set to 0
- Regression Tests
- Case 1
- Log in as a customer.
- Navigate to a product detail page for a product with a non-zero price (e.g., $25.99 ).
- Verify the price displays correctly (e.g., $25.99 ).
- Navigate to a product detail page for a product with no price set (null/undefined).
- Verify the price displays as Call for Pricing.
- Log out.
- Navigate to the same product page as a guest.
- Verify the price displays as Login for Price.
- Tests
- Case 1
- Log in as a customer.
- Navigate to a product detail page for a product with a calculatedPrice of 0.
- Verify the price displays as $0.00 (not Call for Pricing ).
- Navigate to a product list page containing the same product.
- Verify the price displays as $0.00 in the product card.
- KOD-30785: Return Order Copies - Add print functionality to returns page in customer portal
- Regression Tests
- Case 1
- Go to the customer portal. Open returns page.
- Select a few returns for the test to check that the layout of the return page looks good, everything works correctly.
- Tests
- Case 1
- Go to the customer portal, orders page.
- Select an order for test
- Go to the order page. Check that in the top right corner we have a new “More” dropdown.
- Open it, check that it’s working properly.
- Try to use the “Attach File” option from the dropdown. Check if you can download documents to the “Files” tab.
- Try to use “Print” functionality from the dropdown. Check that it generates a PDF document with the data about return. Compare it with the data from the platform to check that everything is correct.
- KOD-30803: Implementation - System
- KOD-30804: Implementation - Translatable Subjects
- KOD-30808: Login Redirect to Microsite
- KOD-30810: Order Tracking Number - Template Update
- KOD-30813: Registration Page Link Update
- KOD-30815: Self Service Customer Pickups
- Regression Tests
- Case 1
- Go through the order placing process. Make sure no screen breaks and that you are able to place an order with or without pickup assignees.
- Case 2
- Operations Portal:
- Order detail page loads without errors and sidebar layout is intact.
- Log in as an employee with order access.
- Navigate to an order detail page.
- Open browser developer tools (Console tab).
- Scroll through the entire sidebar.
- Verify all sidebar sections render correctly without layout overlap or broken styling.
- Verify the "Customer Assignees" section sits between "Employee Assignees" and "Taxes" (or the next sidebar section).
- Verify the page loads without JavaScript errors in the console.
- Verify the customer assignees list loads (may be empty if none are assigned).
- Case 3
- Location Management Status still saves correctly.
- Log in as an employee with order access.
- Navigate to an order detail page.
- Change the "Location Management Status" dropdown to a different value (options should match warehouseManagementStatuses setting).
- Reload the page.
- Verify the new value persists after reload.
- Tests
- Case 1
- Assign a pickup person to an order.
- Log in as a customer with the `companyAdmin`, `editEmployees`, or `viewEmployees` role.
- enableOrderByStore setting should be turned off for your site.
- Add one or more items to the cart and navigate to the cart page.
- Select the Customer Pickup (CPU) shipping option.
- Verify the "Designate pickup person (optional)" section appears with a "Search..." text input.
- Enter a coworker's first name, last name or username in the search input.
- Verify an autocomplete dropdown appears with matching active customers from the same company (excluding the current user and API key accounts).
- If the customer doesn’t have first and last name set in their account, you should see the username as the option label.
- No customers from different companies should appear.
- Select a person from the dropdown.
- Verify a chip with the person's name and an "x" remove button appears in the pickup person list, and the search input is cleared.
- You should see a spinner where the delete button was while the delete request is in process.
- Case 2
- Remove an assigned pickup person.
- Complete FT-1 so at least one pickup person chip is visible.
- Click the "x" button on the pickup person chip.
- Verify a spinner briefly appears on the button, then the chip is removed from the list.
- Re-enter the same person's name in the search input.
- Verify the person now appears again in the autocomplete results (they are no longer excluded).
- Case 3
- Pickup person assignments persist across page loads.
- Complete FT-1 so at least one pickup person is assigned.
- Refresh the cart page (or navigate away and return).
- Select the Customer Pickup (CPU) shipping option again.
- Verify the previously assigned pickup person chips are loaded and displayed in the pickup person list.
- Case 4
- Pickup person selector does not appear for unauthorized roles.
- Log in as a customer without `companyAdmin`, `editEmployees`, or `viewEmployees` roles.
- Add items to the cart and navigate to the cart page.
- Select the Customer Pickup (CPU) shipping option.
- Verify that the "Designate pickup person (optional)" section and search input do * not * appear.
- Verify the rest of the pickup shipping attributes (warehouse selector, delivery date) still function normally.
- Repeat the steps for guest customers. Pickup person selected should not appear either.
- Case 5
- Error message displays on failed pickup person assignment and clears on input.
- Log in as a customer with the `companyAdmin`, `editEmployees`, or `viewEmployees` role.
- Add items to the cart, navigate to the cart page, and select the Customer Pickup (CPU) shipping option.
- Simulate a failed assignment (e.g., disconnect from the network or use browser DevTools to block the `/api/account/order/{orderID}/orderAssignment` POST request)
- Search for and select a person from the autocomplete dropdown.
- Verify a red error message "Failed to assign pickup person. Please try again." appears below the search input.
- Click into the search input and begin typing.
- Verify the error message disappears.
- Case 6
- Add a customer assignee with an assignment type.
- Log in as an employee with order access.
- Navigate to an existing order by clicking "Orders" in the sidebar, then clicking on an order row to open it.
- Scroll down in the order detail sidebar to the assignees area.
- Verify the heading reads "Employee Assignees" (previously "Assignees").
- Verify a new "Customer Assignees" section appears below "Employee Assignees" with an "Assignment Type" dropdown and a "+ Add customer assignee" autocomplete field.
- Select an assignment type from the "Assignment Type" dropdown (e.g., "Order Pickup")(coming from the orderCustomerAssignmentTypes setting).
- Click the "+ Add customer assignee" autocomplete and type at least 2 characters of a known customer name from the order's company.
- Verify a dropdown appears showing matching customers with their usernames.
- Select a customer from the dropdown.
- Verify the customer appears in the list with their username, avatar, and the assignment type displayed below the name in smaller secondary text.
- Verify the autocomplete input clears after the assignment.
- Verify the "Assignment Type" dropdown resets to empty after the assignment.
- Case 7
- Add a customer assignee without an assignment type.
- Log in as an employee with order access.
- Navigate to an order detail page.
- Scroll to the "Customer Assignees" section.
- Leave the "Assignment Type" dropdown unselected.
- Click the "+ Add customer assignee" autocomplete and search for a customer.
- Select a customer from the dropdown.
- Verify the customer appears in the list with their username and avatar but NO assignment type text below the name.
- Customer should also disappear from the dropdown.
- Case 8
- Remove a customer assignee.
- Log in as an employee with order access.
- Navigate to an order that has at least one customer assignee or add one.
- Scroll to the "Customer Assignees" section.
- Click the clear icon (X) next to an assigned customer.
- Verify the customer is removed from the list immediately.
- Reload the page.
- Verify the removed customer does NOT reappear in the list.
- Customer should reappear in the dropdown.
- Case 9
- Customer assignees persist across page reloads.
- Log in as an employee with order access.
- Navigate to an order and add two customer assignees with different assignment types.
- Verify both appear in the list with correct names and assignment types.
- Reload the page (browser refresh).
- Verify both customer assignees still appear with correct assignment types after reload.
- Case 10
- Already-assigned customers are filtered from autocomplete.
- Log in as an employee with order access.
- Navigate to an order and add a customer assignee (note the customer's username).
- Click the "+ Add customer assignee" autocomplete and type the same customer's name.
- Verify the already-assigned customer does NOT appear in the autocomplete suggestions.
- Remove the customer assignee using the clear icon.
- Type the same customer's name again in the autocomplete.
- Verify the customer now appears in the suggestions again.
- Case 11
- Order with no customer assignment types configured.
- Log in as an employee with order access on an environment where "orderCustomerAssignmentTypes" is NOT configured (empty).
- Navigate to an order detail page.
- Scroll to the "Customer Assignees" section.
- Verify the section renders without errors.
- Verify the "Assignment Type" dropdown is present but has no options.
- Verify you can still add a customer assignee without selecting an assignment type.
- Case 12
- Customer assignee with "Order Pickup" type added in operations portal appears on commerce site.
- Log in to the operations portal as an employee with order access.
- Navigate to an open order (still in the customer’s cart).
- Scroll to the "Customer Assignees" section.
- Select "Order Pickup" from the "Assignment Type" dropdown.
- Search for and select a customer from the autocomplete and assign "Order Pickup" assignment type.
- Log in to the commerce site as the order's customer.
- Navigate to the order details or checkout pickup person section.
- Verify the customer assigned in the operations portal appears as a pickup person.
- Verify customer assignee WITHOUT "Order Pickup" type does NOT appear on commerce site.
- Remove the pickup person on the operations portal and make sure it updates on the commerce site.
- Repeat the steps now starting on the commerce site and checking the operations portal customer assignees list.
- KOD-30824: Implementation - Add Disclaimer
- Regression Tests
- Case 1
- Navigate to the commerce website.
- Choose any category or you search to find any product.
- Choose any product and navigate to the details page.
- Verify that page still loads fine.
- Tests
- Case 1
- Navigate to the commerce website.
- Choose any category or you search to find any product.
- Choose any product and navigate to the details page.
- Verify that you can see disclaimer under the product image.
- KOD-30825: ProductAttributeData Export File Issues
- KOD-30829: Add Price Book Email field to Customer Group → Company relationship
- KOD-30832: Google Tag Update V2
- KOD-30837: Budget totals and quantity discrepancy - Negative number issue
- KOD-30838: Always display additional charges options box
- Regression Tests
- Case 1
- Quote with existing addons — Open a quote with existing additional charges. Verify they still display, can be edited (inline amount), and can be deleted. Verify new charges can be added via the autocomplete.
- Case 2
- Calculate totals — After adding/removing additional charges, click "Calculate" and verify totals update correctly.
- Tests
- Case 1
- Quote with no company addons.
- Open a quote for a company with no additional charges from ERP. Verify the "Add'l Charges" heading and "+ Add charge" autocomplete are visible. Add a manual charge and confirm it saves.
- Case 2
- Empty state appearance — Verify the empty Add'l Charges section looks clean (just heading + autocomplete field, no empty list artifacts).
- KOD-30840: Update permissions for Automated Invoice Delivery, Automated Statement Delivery, Lockbox screens
- Regression Tests
- Case 1
- You should have an administrator or superuser role for your employee.
- Login in to the operations portal.
- Navigate to the Lockbox screen.
- Verify that you can access this page.
- Case 2
- You should have an administrator or superuser role for your employee.
- Login in to the operations portal.
- Navigate to Automated Statement Delivery screen.
- Verify that you can access this page.
- Case 3
- You should have an administrator or superuser role for your employee.
- Login in to the operations portal.
- Navigate to Automated Invoice Delivery screen.
- Verify that you can access this page.
- Tests
- Case 1
- You should these roles assign to your employee:
- hostView/hostEdit
- hostSettingView/hostSettingEdit
- settingView/
- settingEdit
- Login in to the operations portal.
- Navigate to the Lockbox screen.
- Verify that you can access this page with roles mentioned above.
- Case 2
- You should these roles assign to your employee:
- settingView/settingEdit
- Login in to the operations portal.
- Navigate to Automated Statement Delivery screen.
- Verify that you can access this page.
- Case 3
- You should these roles assign to your employee:
- settingView/settingEdit
- Login in to the operations portal.
- Navigate to Automated Invoice Delivery screen.
- Verify that you can access this page.
- KOD-30841: Implementation - PIM Review
- KOD-30845: Make Custom Fields Columns Available on Search Screen for Opportunities
- Regression Tests
- Case 1
- Verify that the Opportunities page (Search tab) is functioning correctly.
- Verify that the Column Picker opens and displays a list of available columns.
- Tests
- Case 1
- Verify that the custom fields (configured in integrationIndexedLeadAndQuoteFields ) appear in the Column Picker on the Search tab.
- Verify that the custom field values display correctly for records where they have been populated.
- KOD-30850: Configurator Product Stock Indicator
- Regression Tests
- Case 1
- Verify that the category page loads without errors.
- Verify that the stock indicator and quantity selector are displayed for standard products.
- Verify that switching between views (Grid, List, Catalog) functions correctly.
- Verify that there are no errors in the console.
- Tests
- Case 1
- Ensure that "Out of Stock" / "In Stock" status is NOT displayed for Configurator products.
- Ensure that the quantity selector is NOT displayed for Configurator products.
- Ensure that only the "View Details" button is displayed for Configurator products.
- Verify this across all three view modes: Grid, List, and Catalog.
- Make sure that the view details button on the grid view is full width.
- KOD-30853: Ticket Automation/Packages for Opportunities
- Regression Tests
- Case 1: Dialog opens correctly from Tickets
- Navigate to Operations Portal → Tickets.
- Open the actions menu (top-right toolbar).
- Click Clone Ticket Group.
- Expected:
- Dialog opens with the title "Clone Tickets by Ticket Group".
- Form contains three fields: Ticket Group (required), Company (optional), Lead (optional).
- Clone button is visible; Cancel link is visible.
- Case 2: Dialog opens correctly from Ticket Templates
- Navigate to Operations → Ticket Templates.
- Open the actions menu.
- Click Clone Ticket Template Group.
- Expected:
- Dialog opens with the title "Clone Ticket Templates by Ticket Group".
- Same three fields visible as TC-01.
- Case 3: Clone without company or lead (minimal case)
- Open the Clone Ticket Group dialog (from Tickets).
- Select a Ticket Group from the dropdown.
- Leave Company and Lead blank.
- Click Clone.
- Expected:
- Button label changes to "Cloning..." while in progress.
- Dialog closes on success.
- Cloned tickets appear in the Tickets list under the selected group.
- Cloned tickets have no company and no lead association.
- Tests
- Case 1: Clone with lead only
- Open the Clone Ticket Group dialog.
- Select a Ticket Group.
- Leave Company blank.
- Type in the Lead field and select a lead from the autocomplete suggestions.
- Autocomplete shows order number and company name columns.
- Click Clone.
- Expected:
- Dialog closes on success.
- Cloned tickets are associated with the selected lead ( entityType: Lead , correct lead ID).
- Navigate to each cloned ticket and verify the lead is linked.
- Case 2: Clone Ticket Template Group with lead
- Navigate to Operations → Ticket Templates.
- Open the actions menu → Clone Ticket Template Group.
- Select a Ticket Group.
- Select a Lead.
- Click Clone.
- Expected:
- Same behavior as TC-01 but for ticket templates.
- Cloned templates are associated with the selected lead.
- KOD-30854: CRM Updates
- KOD-30860: UX Kodaris - Product Custom Fields Follow-up - Ability to Update on Grids
- Regression Tests
- Case 1
- Verify that product fields can be edited and saved in the grid.
- Verify that custom fields are not cleared after editing a standard field.
- Tests
- Case 1
- Verify that custom fields can be edited in the Product Data Grid.
- Verify that after editing a custom field, the value is saved and displayed after a refresh.
- Verify that users with productView or productEdit permissions can open the Custom Fields tab.
- Verify that users with productEdit permissions can edit custom fields in the Custom Fields tab.
- KOD-30868: CMS - Check if we Support zip Files
- Tests
- Case 1
- Add to the setting allowedCustomerFileTypes text value - ZIP, make a call to any file upload API (example - /api/system/website/publicFile ) and upload zip file.
- Response should be 200.
- KOD-30869: ERP Configuration
- KOD-30872: User 10 Field Active
- Regression Tests
- Case 1
- Log in as a customer.
- Navigate to any category list.
- Check that inventory level is still showing fine for list/grid view.
- Case 2
- Log in as a customer.
- Navigate to any category list.
- Check that user10 from the product entity is still showing on the list/grid view
- Case 3
- Log in as a customer.
- Navigate to any category list.
- Check that inventory level is still showing fine on the details page.
- Case 4
- Log in as a customer.
- Navigate to any category list.
- Check that user10 from the product entity is still showing on the details page
- Case 5
- You should be a guest.
- Navigate to any category list.
- Check that the list/grid view is still loaded fine.
- Case 6
- You should be a guest.
- Navigate to any category list.
- Check that details page is still loads fine.
- Tests
- Case 1
- You should be a guest.
- Navigate to any category list.
- Check that user10 field is shown on list/grid view for guest user if populated
- Case 2
- You should be as a guest.
- Navigate to any category list.
- Check that user10 field is shown on the product page for guest user if populated
- KOD-30878: Catalog Management for Linked Accounts
- KOD-30879: Update search suggestions to utilize /suggest endpoint instead of /search
- Regression Tests
- Case 1
- Make sure the mega menu still opens/loads properly and you can still see categories, brands and products.
- If you click on a category, it should bring you to that category.
- If you click on a brand, it should bring you to the search page (searching on * ) and filtering on that brand.
- If you click on a product, it should bring you to that product.
- Tests
- Case 1
- When searching for a product in the search bar, make sure the search is using the /suggest API instead.
- If you search on an exact product code, that result should show in the mega menu (instead of nothing showing up before).
- If you click enter after searching for that exact product, it will either take you to the search page on that product code or go directly to the product (depending on how the website is set up).
- KOD-30880: Fix Email Template Currency Formatting
- Tests
- Case 1
- Go to an order details page in the operations portal.
- Click on Request Payment and use the default template to generate an email passing 0.8 as the requested amount.
- Make sure that in the Requested Payment Amount text in the email generated, the dollar amount formats correctly to $0.80 instead of $0.8.
- Send the email and make sure that it looks okay in the inbox too.
- KOD-30881: Implementation - Branding
- KOD-30882: Update Manual Fraud Flag Button Risk Reasons Field
- KOD-30883: Update document automation studio order adapter output spec to include all fields, including reference
- Tests
- Case 1
- Make sure that new fields have appeared in the Order Header section: reference, deliveryFirstName, deliveryLastName, deliveryEmail1, deliveryEmail2, deliveryPhone1, deliveryPhone2, deliveryGeneralContractor
- KOD-30885:Update employee status when manual fraud flag is added to an order
- Regression Tests
- Case 1
- Test that placing a manual fraud hold still prevents the order from being released.
- Tests
- Case 1
- Test that placing a manual fraud hold on an order updates the employee status field to Fraud Data Hold.
- KOD-30904: Ticket Roles and Updates for Custom Rules - UX
- KOD-30903: Ticket Roles and Updates for Custom Rules
- KOD-30901: Remove 'Create JIRA Ticket' Option from Operations Portal
- KOD-30899: Catalog Management for Linked Accounts - UX
- Regression Tests
- Case 1 Catalog Picker Dropdown Functionality
- Log in with a valid customer account.
- Navigate to a products list or product page with a catalog picker.
- Click on the catalog picker dropdown.
- Type a search query in the dropdown.
- Select a catalog from the dropdown list.
- Expected Result:
- Dropdown opens and displays available catalogs.
- Search functionality filters catalogs correctly.
- Selection works and catalog is applied to the product.
- Tests
- Case 1 Single Company - No Company Identifier Displayed
- Log in with a user account that has access to ONLY ONE company.
- Navigate to a products list or product page with a catalog picker.
- Click on the catalog picker dropdown.
- Observe the catalog labels in the dropdown list.
- Expected Result:
- Catalog options display ONLY the catalog name: " [Catalog Name] ".
- NO company name or company code is shown.
- Case 2 Multiple Companies - Company Name Displayed When Available
- Log in with a user account that has access to MULTIPLE companies (parent/child setup).
- Navigate to a products list or product page with a catalog picker.
- Click on the catalog picker dropdown.
- Locate a catalog from a company that has a company name set.
- Expected Result:
- Catalog option displays as: " [Catalog Name] - [Company Name] ".
- Case 3 Multiple Companies - Company Code Displayed When Name Missing
- Log in with a user account that has access to MULTIPLE companies (parent/child setup).
- Navigate to a products list or product page with a catalog picker.
- Click on the catalog picker dropdown.
- Locate a catalog from a company that has NO company name (only company code exists).
- Expected Result:
- Catalog option displays as: " [Catalog Name] - [Company Code] ".
- KOD-30898: Recently Ordered doesn't translate on the Catalogs page table, along with breadcrumbs.
- Regression Tests
- Case 1 Verify catalogs list page loads without errors after changes.
- Navigate to the website.
- Log in and navigate to the Catalogs page.
- Expected result:
- Page loads without errors.
- Company Catalogs section displays catalog names and descriptions correctly.
- Customer Catalogs section displays catalog names and descriptions correctly.
- Case 2 Verify company catalog page breadcrumbs load correctly.
- Navigate to a company catalog page.
- Observe the breadcrumb navigation.
- Expected result:
- Page loads without errors.
- All parent category names display correctly in breadcrumbs.
- Current category name displays correctly in breadcrumbs.
- Case 3 Verify customer catalog page loads without errors after changes
- Navigate to the Catalogs.
- Click on a customer catalog (from "My Catalogs" section).
- Observe the page title, description, and breadcrumbs.
- Expected result:
- Page loads without errors.
- Catalog name displays correctly in page title.
- Catalog description displays correctly (if exists).
- Breadcrumb names display correctly.
- Case 4 Verify fallback behavior when no translation is set up
- Navigate to the Catalogs page.
- Switch to a locale where translations are not defined.
- Navigate to a customer catalog page.
- Expected result:
- Original (default) catalog name and description are displayed.
- No error messages or blank text.
- Breadcrumbs show original names.
- Case 5 Verify pages handle catalogs without descriptions gracefully
- Navigate to the Catalog page.
- Navigate to a customer catalog page without a description.
- Expected result:
- Pages load without errors.
- No empty space or "undefined" text where description would be
- Names display correctly.
- Tests
- Case 1 Verify catalog names and descriptions translate on the list page.
- Pre-condition: Site must have translations configured for catalog names/descriptions.
- Navigate to the Catalogs page.
- Change the site language to an alternate language.
- Observe both Company Catalogs and Customer Catalogs tables.
- Expected result:
- Company catalog names display in the selected language.
- Company catalog descriptions display in the selected language.
- Customer catalog names display in the selected language.
- Customer catalog descriptions display in the selected language.
- Case 2 Verify company catalog breadcrumbs translate when language changes
- Navigate to a company catalog page.
- Change the site language to an alternate language.
- Observe the breadcrumb navigation.
- Expected result:
- Current category name in breadcrumbs displays in the selected language.
- Case 3 Verify customer catalog page content translates when locale changes
- Pre-condition: Site must have translations configured.
- Navigate to a customer catalog page.
- Change the site language to an alternate language.
- Observe the page title, description, and breadcrumbs.
- Expected result:
- Catalog title displays in the selected language.
- Description displays in the selected language.
- Breadcrumb names display in the selected language.
- Case 4 Verify special characters are properly escaped and displayed
- Navigate to the Catalogs Page.
- Navigate to the customer catalog detail page with special characters in name/description.
- Check breadcrumbs, title, and description.
- Expected result:
- Special characters display correctly: < > " '.
- No HTML injection or broken layout.
- Characters display consistently across list pages and detail pages.
- KOD-30907: Add transaction type description
- Regression Tests
- Case 1
- Verify that the "Open Invoices" page opens without errors.
- Verify that the invoices table loads and displays data.
- Verify that the existing columns (Invoice #, Status, Invoice Date, Due Date, etc.) are displayed correctly.
- Verify that invoice selection and payment functionality work as before.
- Verify that there are no errors in the console.
- Tests
- Case 1
- Ensure that the Type column displays a numeric code.
- Ensure that the Transaction Type Description column displays a text description instead of a numeric code (0 → Invoice, 1 → Service Charge, 3 → Unapplied Cash, 5 → Misc Credit, 11 → Scheduled Pay,
- 95 → Scheduled Payment, 99 → Web Account Payment; unknown codes are displayed as-is).
- KOD-30908: Update to Product Restrictions app - Add company button
- Regression Tests
- Case 1
- Navigate to /operations/app/product-restrictions/.
- Click on Company Groups on the left bar.
- Choose any available group.
- Click on the button ‘Add Companies’.
- Verify that list of companies still shown.
- Case 2
- Navigate to /operations/app/product-restrictions/.
- Click on Company Groups on left bar.
- Choose any available group.
- Click on the button ‘Add Companies’.
- Verify that you can still add company to the group.
- Case 3
- Navigate to /operations/app/product-restrictions/.
- Check that the navigation bar is still working.
- Tests
- Case 1
- Pre-steps:
- Navigate to the Companies screen.
- Choose any company.
- Navigate to the Development tab.
- Find companyType field and set VENDOR.
- Copy company code.
- Steps:
- Navigate to /operations/app/product-restrictions/.
- Click on Company Groups on the left bar.
- Choose any available group.
- Click on the button ‘Add Companies’.
- In the search bar, try to search by company code that you copied in pre-steps.
- Case 2
- Navigate to /operations/app/product-restrictions/.
- Check that you can see a new item in the navigation bar - Documentation. You should be redirected to this link.
- KOD-30911: Kodaris - Linked Ticket Uses Wrong Ticket ID in API Request
- Regression Tests
- Case 1
- Open Operations Portal, navigate to Services → Tickets. Open a ticket for a test.
- Verify each sub-tab loads correctly:
- Detail - ticket data renders.
- Customer Comments - comments load for the correct ticket.
- Internal Comments -comments load for the correct ticket.
- Customer Files - files grid loads, upload/download works.
- Internal Files - files grid loads, upload/download works.
- Emails - email list loads, view/forward dialogs work.
- Custom Fields - tab appears, custom fields load and save.
- Case 2
- Go to the test linked ticket as a test user with ticketView access. Check that you don’t see Custom Fields in the header navigation.
- Change users permissions to have either administrator / superuser / ticketSettingView / ticketSettingEdit to have access to Custom Fields. Check that after page reload the Custom Fields tab appeared for this user.
- User without any of those permissions - tab should not be visible/accessible
- User with ticketSettingView only - can view but not edit.
- User with ticketSettingEdit - can edit and save.
- Tests
- Case 1
- Go to the Operations Portal, open test ticket.
- Open the Network tab in the Developer Tools. Reload the page.
- In the Network tab, verify that the request uses the correct ID for the root ticket.
- Clear the Network tab as needed to isolate requests, then navigate to each of the following tabs one by one, verifying that the correct ID is being passed in the network requests for each.
- PART 2: Go to the linked ticket. Do the same as for the root ticket, navigate to each of the following tabs one by one, verifying that the correct ID is being passed in the network requests for each.
- NOTE: You will see an initial root ticket request in the Network tab. This request is generated by resolvers to define the ticket code for breadcrumbs and will appear on every page. You should skip this initial request and focus on verifying the other subsequent requests.
- Case 2
- Go to the linked ticket. Open the Custom Fields tab.
- Check that you can change the data and the changes saved properly.
- Case 3
- Go to the Details tab of the Linked Ticket. Check that the data is rendered properly in the fields.
- Try to update some fields. In the network tab in the DevTools check that request sends and uses the correct ticketID.
- Go to the Developer Fields of the Linked Ticket. Check that you’re receiving the right data in the Developer Fields. Try to update some fields and check in the Network tab that requests send, and use the right ticketID.
- KOD-30887: -99 Invoices - Don't seem to be sending for type 11 invoices
- Case 1
- Verify that -99 invoices with transactionType = 0, 1, 5 (service charges) are now included in the automated invoice sending process.
- 59591: Sync in ICSS Records and map in prccostper field
- KOD-30889: JIRA integration updates
- 59627: Incorrect Pricing in Mobile App
- 59658: Index extra* fields in CompanyAddress
- 59662: Kodaris - Add @mention logic to the Ticket Comments in Services App
- 59858: Check Vendor Code & Descrip3 Populating to Products
- 59889: Configure - Customize Assignment Type dropdown
- 59892: Configure - Customize "Priority" dropdown
- 59913: Kodaris Freight Calculation Issue: Shipping Rates Using Individual SKU Weight
- 59937: Update Aplus to be able to change warehouse on order when calling applyPickUpLocation
- 59938: Product Category Assignment Management - Platform
- KOD-30919: Add date range to /api/account/company/category endpoint
- 60155: Proposed changes to clarify account types
- 60254: Add ERP flow option
- 60313: Incomplete Addon Data - Add verbiage on the shipping section
- KOD-30896: Kodaris - Update inforCSDOEFullOrderMntV6.js Interceptor to send shipVia correctly