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
February 5, 2026 release notes
Tickets
- KOD-28607: Required Attribute Assignment screen - Implement filtering for blank/null values across columns
- KOD-28905: Audit Log for deletes
- Case 1
- Create an Order.
- Create a new order with items.
- Expected: Order created successfully, no errors.
- Update the Order.
- Edit an existing order (change PO number, add items, etc.)
- Expected: Order updates successfully.
- Case 2
- Create an Employee.
- Expected result: Employee creates successfully.
- Update Employee (Non-Status Fields).
- Change employee name, email, or other non-watched fields.
- Expected: Updates work normally, no audit log for non-watched fields.
- KOD-29011: Content Module Block Request
- Case 1
- Go to the Pages screen.
- At the top, click Add Page.
- Choose Gutenberg.
- Close the initial dialog.
- Confirm that the Gutenberg page loads without issues.
- Add any content.
- Confirm that the content can be added without errors.
- Click the Preview button.
- Confirm the added content appears on the preview page successfully.
- Tests
- Case 1
- Go to "Pages".
- At the top, click Add Page.
- Choose Gutenberg.
- Close the initial dialog.
- Type /slider 3.
- Confirm the slider appears on the page.
- Case 2
- Change the title text.
- Change the ink text.
- Change the caption text of any slide.
- Confirm the text is updated correctly.
- Case 3
- Click the arrow buttons to change slides.
- Confirm navigation works in both directions (prev/next).
- Confirm the slider is infinite (after the last slide, the first one appears).
- Confirm that you can also change slides using pagination.
- Case 4
- Open the Block tab in the sidebar.
- Verify the following sections are displayed:
- Title
- Link
- Color
- Slides
- Case 5
- Open Title section.
- Toggle âShow title barâ.
- Confirm the title bar appears / disappears on the page based on the toggle state.
- Case 6
- Open the Link section.
- Paste any URL into the link URL field.
- Confirm:
- Link text is not changed.
- Underline appears on hover for link text.
- Case 7
- Open Color section.
- Change:
- Title ,
- Title bar ,
- Link,
- Pagination
- Slide caption ,
- Arrows colors
- Confirm all selected colors are applied correctly.
- Confirm colors can be selected using color circles and the color palette.
- Case 8
- Open the Slides section.
- Confirm the number of slide sections matches the number of slides on the page.
- Confirm the Add slide button is visible.
- Click Add slide.
- Confirm that the new slide appears both in the Slides section and in the slider , and that the number of pagination bullets matches the number of slides.
- Case 9
- Open any slide section.
- Change the image.
- Confirm the new image appears in the slider.
- Change the slide caption.
- Confirm the caption updates correctly.
- Paste any URL into the slide URL field.
- Confirm:
- The caption text is not changed.
- Underline appears on hover for caption text with URL.
- Case 10
- Click Remove slide for a specific slide.
- Confirm that the same slide is removed from the slider and the Slides section , and that the pagination is updated accordingly.
- If there are 3 slides remaining, confirm the Remove slide button becomes disabled.
- Case 11
- Click Save , then Preview.
- Confirm the slider appears with all changes applied.
- Confirm slides can be changed using arrows.
- Click on the link.
- Click on a slide with URL.
- Confirm that the URL opens in a new tab for both of them.
- Case 12
- Resize the browser window.
- Confirm:
- On the desktop : 3 slides are visible.
- On tablet : 2 slides are visible.
- On the mobile : 1 slide is visible.
- KOD-29111: Implement Cookie
- KOD-29217: Dealer - Order Flow
- Tests
- Case 1
- Ensure that the user script (generateCNHCheckoutCartFile) is working correctly, namely that a CSV file is generated as shown in the example.
- Verify that the file is created on the orders screen, in the customer files tab.
- Ensure that the file is successfully sent to the email address.
- KOD-29296: UX - Add Customer Status to Tickets
- Case 1
- Open the website.
- Navigate to the Account page.
- Open the Configuration screen.
- Verify Tickets tab availability.
- In the Tickets tab, verify the presence of the Customer Status Input.
- Add new customer statuses.
- Make sure that you can add via enter key.
- Make sure that when adding a status, the text in the input does not flicker or disappear.
- Verify deletion of customer statuses.
- Prepare test statuses for ticket usage.
- Verify Customer Status selection in Ticket Detail screen.
- Navigate to the Tickets screen.
- Open any ticket.
- Verify the presence of the Customer Status input dropdown.
- Select any available customer status.
- Verify status in Tickets table.
- Navigate back to the Tickets list.
- Verify that the selected Customer Status is displayed correctly in the table for the ticket
- Case 2
- Log in as a different customer.
- Open the website.
- Log in as a customer from a different company.
- Ensure the user has the Company Admin role.
- Verify access to customer statuses.
- Verify that Customer Statuses are present and visible.
- Case 3
- Log in as a customer without the Company Admin role.
- Verify Configuration screen access.
- Check the main menu.
- Verify that the Configuration screen is NOT present in the menu.
- KOD-29309: Vendor Inventory Integration
- Tests
- Case 1
- Verify that when running a custom import, the InventoryLevel value is updated according to the data from the imported JSON file.
- Verify that the import will not work for files of a type other than JSON or CSV.
- Verify that there are no errors in the console when running the import, and that the POST /api/system/mapped/custom/any/file/{file}/direct/json request is returned.
- Check that if the required fields in the import file are not filled in, a message like this will appear in the ops logs:
- 1 'partNumber is not provided for item: X'
- 2 'availableQuantity is not provided for partNumber: Y'
- 3 'locationCode is not provided for partNumber: Z'
- If there are any problems during the import, information with details will be displayed in the operations logs.
- KOD-29317: Add ability to pay Open Invoices by typing in card details
- Regression Tests
- Case 1
- In the operations portal go to Companies â click into a company â Open Invoices â select an invoice and click Make a Payment â the popup should still open.
- Case 2
- If there are saved payments, you should be able to still make a payment with one of them.
- Case 3
- You should still be able to add a payment method and then use it to pay the invoices.
- Case 4
- Within the company, go to the Deposits tab â the options should remain the same (be able to pay, be a saved payment or add a new payment) - no new options should be there.
- Tests
- Case 1
- When you go to pay an invoice, if Kodaris payment is active, then you should see a new option in the list to use a one time card payment.
- If Kodaris payments are not active, that option should not be there and you wonât be able to use this new option.
- Case 2
- Click on One time card payment â a popup should appear with the payment iframe â enter the card info and click Pay â upon success, the popups should close and the thank you for your payment popup will open and youâll have the ability to view the receipt.
- If there is an error upon paying, youâll see a snacker.
- The card that was entered should not have been saved as a payment method.
- KOD-29408: Bulk Add Products to Catalogs
- Tests
- There are two new endpoints added:
- /api/account/companyProductCategory/createFromCategory
- /api/account/companyProductCategory/{companyProductCategoryID}/addFromCategory
- Case 1
- Login as a customer with companyAdmin or companyCatalogEdit role.
- Open Swagger: /api/account/companyProductCategory/createFromCategory
- Select category with some products without subcategories.
- Execute POST with body:
- {"name": "My Test Catalog", "categoryCode": "VALID_CATEGORY_CODE"}
- Verify response: 200 OK with message "Catalog creation in progress..."
- Wait ~5 minutes for a background job.
- Verify catalog appears on Company Catalogs list.
- Verify code = "my-test-catalog" (lowercase, spaces replaced with dashes).
- Open the catalog and verify products from the category are assigned.
- When creating other catalogs, it is expected:
- Cannot create two catalogs with the same generated code.
- Code generation is case-insensitive (different capitalization should generate the same code).
- Different names that produce different codes work fine.
- When requesting generation (pushing two requests for catalog creation) of two catalogs with the same name, confirm that only one catalog gets created. The other will fail, since it has duplicated code. Confirm error is shown within Events.
- Case 2
- Login as a customer with catalog permissions.
- Identify a parent category with subcategories containing products.
- Execute both endpoints with parent category code.
- Wait for job processing.
- Verify catalog contains products from parent AND all subcategories.
- Expected: Products from the entire category tree are included.
- Case 3
- Admin: Verify setting catalogFromCategoryMaxProducts value (default 1000). Change it if required
- Login as a customer.
- Execute both endpoints with a category code that has more products than the limit.
- Verify response: 400 Bad Request.
- Verify error message: "The selected category contains too many products. Maximum allowed is X".
- Expected: Request rejected with clear error message showing the limit.
- Case 4
- Login as customer.
- Identify a category with 0 products.
- Execute both endpoints with empty category code.
- Wait for job processing.
- Verify catalog is created (with 0 products).
- Expected: Catalog created successfully, just with no products assigned.
- Case 5
- Login as a customer.
- Execute both endpoints with non-existent category code:
- "categoryCode": "INVALID_CODE_12345"
- Verify response: 404 Not Found.
- Expected: Clear error indicating category not found.
- Case 6
- Admin: Set a category to inactive ( isActive = false ).
- Login as a customer.
- Execute both endpoints with inactive category code.
- Verify response: 404 Not Found.
- Admin: Reactivate the category after the test.
- Expected: Inactive categories are not accessible for catalog creation.
- Case 7
- For create endpoint only.
- Login as a customer.
- Execute POST with missing name :
- {"categoryCode": "VALID_CODE"}
- Verify validation error for missing name.
- Execute POST with missing categoryCode
- {"name": "Test Catalog"}
- Verify validation error for missing categoryCode.
- Execute POST with empty values:
- {"name": "", "categoryCode": ""}
- Execute POST with name that would create empty/invalid code:
- {"name": " ", "categoryCode": "VALID_CODE"}
- Verify validation errors.
- Expected: validation returns proper error messages.
- Case 8
- Admin: Set customer's Restricted Company Catalogs flag to true.
- Login as that customer.
- Execute both endpoints.
- Verify response: 400 Bad Request with "Unable to create catalog".
- Admin: Reset the flag after the test.
- Expected: Restricted catalog customers cannot create catalogs.
- Case 10
- Login as customer WITHOUT companyAdmin or companyCatalogEdit role.
- Execute both endpoints.
- Verify response: 403 Forbidden.
- Expected: Only authorized roles can access the endpoint.
- Case 11
- Login as customer, that was set-upped on the parent company, that has access to itâs child companies.
- Switch to child company.
- Execute POST to create catalog from category.
- Verify catalog is created for the CHILD company.
- Check catalog's companyID matches child company.
- Expected: Catalog created for the selected child company, not parent.
- Case 12
- (As an example) Admin: Ensure a category has both active and inactive products-
- Login as a customer.
- Create a catalog from that category.
- Wait for processing.
- Verify ONLY active products are in the catalog.
- Verify inactive products are NOT included.
- Expected: Only active products ( isActive = true ) are assigned.
- Case 13
- Ensure multiTenantMode setting is enabled and you use a multi-host system.
- Login as a customer on a specific host.
- Create catalog from category or add products to catalog from category.
- Verify only products with matching hostCode are included.
- Verify the created catalog has correct hostCode.
- Verify, if you enter a category from a different host, it should not be found.
- Expected: Host-specific filtering works correctly.
- Case 14
- Login as customer with companyAdmin or companyCatalogEdit role.
- Identify an existing catalog with few or no products.
- Execute POST /api/account/companyProductCategory/{companyProductCategoryID}/addFromCategory with valid category code.
- Verify response: 200 OK with message "Adding products to catalog in progress..."
- Wait for background job.
- Verify products from the category are now in the catalog.
- Verify catalog's lastModified date was updated.
- Execute the same request again with the SAME category code.
- Verify no duplicate products in catalog and lastModified was not updated .
- KOD-29419: Kodaris - Add Ability to Import Company Custom Fields
- Tests
- Case 1
- Case 1
- Navigate to Settings (System/Settings).
- Make sure that in the row with code="integrationIndexedCompanyFields" json data looks like this (it's actually empty): [] (save the current value to a file before updating it ).
- Navigate to Companies (Customers/Companies).
- Switch to the sheet "Data".
- Paste the value "indexfieldtest" to the search box and press Enter.
- Delete Companies that were found.
- Open menu File -> Import -> Create Only.
- Select file "test Import Company CF 1 - CF - Import-Insert.csv" and click "Open"
- Verify that the following message appears: Your import file has been queued. Please check back in a few for the imported data.
- Navigate to Scheduler (System/Scheduler).
- Find a row with Job Name = "FiveMinuteBulkJobsJob".
- Click the run job button in the end of the row (looks like a running man).
- Navigate to Companies (Customers/Companies).
- Switch to the sheet "Data".
- Paste the value "indexfieldtest" to the search box and press Enter, click the refresh button if needed (in the upper right corner of the table).
- Verify that 2 Companies are found (Company CF Import Test 1, Company CF Import Test 2).
- Verify that Custom fields are empty in both Companies. To open custom fields click the button ">" at the end of the row and then click "Custom Fields".
- Switch to the sheet "Data"
- Paste the value "indexfieldtest" to the search box and press Enter
- Delete the Companies that were found using a trashbox at the end of every row.
- Restore the row with code="integrationIndexedCompanyFields" in Settings if it was changed.
- Case 2
- Navigate to Settings (System/Settings).
- Make sure that in the row with code="integrationIndexedCompanyFields" json data contains these values.
- {"settingCode":"recurringmeeting","settingName":"Recurring Meeting","isIndexed":true,"solrField":"custom_recurringMeeting","fieldType":"","options":[]}
- {"settingCode":"companytier","settingName":"Company Tier","isIndexed":true,"solrField":"company_tier","fieldType":"dropdown","options":["Tier 1", "Tier 2", "Tier 3"]}
- {"settingCode":"opportunity","settingName":"Opportunity","isIndexed":true,"solrField":"","fieldType":"","options":[]}
- or use data from "Company Custom Fields - Settings - integrationIndexedCompanyFields.json".
- Navigate to Companies (Customers/Companies).
- Switch to the sheet "Data".
- Paste the value "indexfieldtest" to the search box and press Enter.
- Verify that no companies are found (if some companies were found then delete them).
- Open menu File -> Import -> Create Only.
- Select file "test Import Company Custom Fields 1.tsv" and click "Open".
- Verify that the following message appears: Your import file has been queued. Please check back in a few for the imported data.
- Open menu File -> Import -> Create Update.
- Select file "test Import Company Custom Fields 2.tsv" and click "Open".
- Verify that the following message appears: Your import file has been queued. Please check back in a few for the imported data.
- Navigate to Scheduler (System/Scheduler)
- Find a row with Job Name = "FiveMinuteBulkJobsJob"
- Click the run job button in the end of the row.
- Navigate to Companies (Customers/Companies).
- Switch to the sheet "Data".
- Paste the value "indexfieldtest" to the search box and press Enter.
- Verify that 3 Companys are found (Company Custom Field.
- Verify that in the all 3 Companys there are 2 Custom fields. To do it, open a Company by clicking the button ">" at the end of the row, in the new window click "More", click "Custom Fields".
- Verify in the row with name="Company CF Import Test 2 updates" 3 Custom Fields are not empty (should probably be 2 after an additional fix that allows to set CF to null on import). In other 2 rows 2 Custom Fields should be not empty.
- Switch to the sheet "Data"
- Paste the value "indexfieldtest" to the search box
- Delete the companies that were found using a trashbox at the end of every row.
- Restore the row with code="integrationIndexedCompanyFields" in Settings if it was changed.
- KOD-29472: Copying pricing records in Kodaris
- KOD-29495: Special Order Products
- Regression Tests
- Case 1
- Select a product without special order status.
- Ensure the product does NOT have "o
- O" set in the SKU status field.
- Navigate to the commerce website.
- Open the commerce website.
- Navigate to any category containing the selected product
- Verify product listing views.
- Verify that the special order message is NOT displayed in:
- Grid view
- List view
- Catalog view
- In Catalog view:
- Verify that the info ("i") icon is NOT displayed.
- Verify product detail view.
- Open the product detail page.
- Verify that the special order message is NOT displayed.
- Verify mobile behavior.
- Switch to mobile view or open the site on a mobile device.
- Verify that the message is NOT displayed on mobile.
- Tests
- Case 1
- Configure special order message in the Operations Portal.
- Open the Operations Portal.
- Navigate to the Messages page.
- Add or update the message using the code: specialOrderMessage.
- Set the message value to "This is a non-stocking special order item".
- Update product SKU status.
- If not already set, add "o
- O" to the SKU of the selected product
- Update the field: status.
- Navigate to the commercial website.
- Navigate to any product category that contains the product with the specified status.
- Verify message display in product listings.
- Verify the message is displayed correctly in:
- Grid view
- List view
- Catalog view
- In Catalog view:
- Verify the presence of the info ("i") icon
- Hover over or tap the icon.
- Verify the tooltip text is displayed correctly.
- Verify message display in product detail view.
- Open the product detail page.
- Verify the message is displayed correctly.
- Verify mobile behavior.
- Switch to mobile view or open the site on a mobile device.
- Verify the message and tooltip display correctly on mobile.
- KOD-29509: UPS Code Mapping Issue
- Tests
- Case 1
- Create carrier code
- POST /api/system/shippingMethod/1/carrierCode
- Body:
- {
- "carrierType": "UPS",
- "carrierCode": "03",
- "displayName": "UPS Ground",
- "carrierCodeOrder": 1,
- "active": true
- }
- Response:
- {
- "success" : true ,
- "code" : 200,
- "messages" : [],
- "errors" : [],
- "data" : {
- "carrierType" : "UPS" ,
- "carrierCode" : "03" ,
- "displayName" : "UPS Ground" ,
- "carrierCodeOrder" : 1,
- "active" : true ,
- "shippingMethodCarrierCodeID" : 2,
- "shippingMethodID" : 1
- },
- "requestId" : "BYRHOD-20260205134753"
- }
- Case 2
- Retrieve created carrier code.
- GET /api/system/shippingMethod/1/carrierCode/2
- Response:
- {
- "success" : true ,
- "code" : 200,
- "messages" : [],
- "errors" : [],
- "data" : {
- "carrierType" : "UPS" ,
- "carrierCode" : "03" ,
- "displayName" : "UPS Ground" ,
- "carrierCodeOrder" : 1,
- "active" : false ,
- "shippingMethodCarrierCodeID" : 2,
- "shippingMethodID" : 1
- },
- "requestId" : "1FJQWL-20260205134818"
- }
- Case 3
- Partially update carrier code.
- PATCH /api/system/shippingMethod/1/carrierCode/2
- Body:
- {
- "active": false
- }
- Response:
- {
- "success" : true ,
- "code" : 200,
- "messages" : [],
- "errors" : [],
- "data" : {
- "carrierType" : "UPS" ,
- "carrierCode" : "03" ,
- "displayName" : "UPS Ground" ,
- "carrierCodeOrder" : 1,
- "active" : false ,
- "shippingMethodCarrierCodeID" : 2,
- "shippingMethodID" : 1
- },
- "requestId" : "EJOZ6T-20260205134814"
- }
- Case 4
- Full update of the carrier code.
- PUT /api/system/shippingMethod/1/carrierCode/2
- Body:
- {
- "carrierType": "UPS",
- "carrierCode": "03",
- "displayName": "UPS Ground Updated",
- "carrierCodeOrder": 2,
- "active": true
- }
- Response:
- {
- "success" : true ,
- "code" : 200,
- "messages" : [],
- "errors" : [],
- "data" : {
- "carrierType" : "UPS" ,
- "carrierCode" : "03" ,
- "displayName" : "UPS Ground Updated" ,
- "carrierCodeOrder" : 2,
- "active" : true ,
- "shippingMethodCarrierCodeID" : 2,
- "shippingMethodID" : 1
- },
- "requestId" : "GG5IEL-20260205134828"
- }
- Case 5
- List all carrier codes.
- With filtering by shippingMethod â POST /api/system/shippingMethod/1/carrierCode/list
- Without filtering â POST /api/system/shippingMethod/carrierCode/list
- Body:
- {
- "page": 0,
- "size": 10
- }
- Response:
- {
- "success" : true ,
- "code" : 200,
- "messages" : [],
- "errors" : [],
- "data" : {
- "size" : 10,
- "number" : 0,
- "totalElements" : 0,
- "isLast" : true ,
- "totalPages" : 0,
- "isFirst" : true ,
- "hasPrevious" : false ,
- "hasNext" : false ,
- "numberOfElements" : 0,
- "offset" : null ,
- "content" : [],
- "facetFields" : null ,
- "statsFields" : null ,
- "pivotFields" : null ,
- "highlightResults" : null
- },
- "requestId" : "Y51X75-20260205134856"
- }
- KOD-29539: Implementation - Discounts
- Case 1
- Navigate to the order screen and choose any order.
- Check next:
- Order details screen still loads fine.
- Addâl charges section still loads fine.
- You can add/update/delete additional charges.
- Calcalate buttom still working.
- Case 2
- Navigate to the cash quotes screen and choose any quote.
- Check next:
- Cash quote detail screen loads fine.
- Addâl charges section still loads fine.
- You can add/update/delete additional charges.
- Calculate button still working.
- Tests
- Case 1
- On order details screen, check next:
- You see new section on the right called Discount.
- You can add only discounts. Also, you can update or delete discounts.
- You see new options under totals called "Discounts".
- Case 2
- On the cash quotes details screen, check next:
- You see a new section on the right called Discount.
- You can add only discounts. Also, you can update or delete discounts.
- You see new options under totals called Discounts.
- KOD-29592: Customer Part Number Deletion Issue
- Case 1
- Make sure a product details page still loads and you can still add a custom part number (if you are logged in and an admin).
- Tests
- Case 1
- Either find a product that has a âyour part #â or add one to a product â (also find it in the cross references table in the operations portal) â now click on the popup and click Delete â notice the value has been removed and Add with underlines is in its place and if you look at the cross reference table, you wonât see that value there anymore.
- KOD-29593: Implementation - Lockbox
- KOD-29620: Implementation - AHRI Setup
- KOD-29629: Allow country code searching on tax rate tables
- KOD-29630: System
- KOD-29632: Kodaris - Add Internal FAQ Drafts entry and flow in the Operations portal
- Case 1
- Ensure that the tab is visible in the menu under the Employee Knowledge Base section and opens when clicked.
- Tests
- Case 1
- Make sure we can open the list of Internal FAQ Drafts .
- Case 2
- Make sure we can open an Internal FAQ Draft , edit it, and that the changes are saved after page reload.
- Case 3
- Make sure we can publish it and that it appears in the Internal FAQ lists.
- Case 4
- Make sure we can delete the FAQ Draft and that it disappears from the Internal FAQ Draft list.
- KOD-29638: Parser update
- KOD-29644: Allow customers to upload confidential files to their customer account docs - UX
- Case 1
- For this test, we need to go to the Customer Portal - Your Documents screen.
- You should be able to upload a regular file by using the âAttach Fileâ option in the dropdown.
- That option should upload a regular file with a normal type depending on the type of file it is.
- You should be able to preview and download it both on the customer and the operations portal.
- Case 2
- For this test, you need to go to the Operations Portal - Select a Customer - Customer Files screen.
- In the new Actions dropdown, you should see an âAttach Fileâ option. If you hover on it, you should see the following buttons that already existed before this update: âInternal Fileâ and âCustomer Fileâ.
- You should be able to upload a regular customer or internal file by using the previous options from the Attach File dropdown.
- Those options should upload a regular customer or internal file with a normal type depending on the type of file it is.
- You should be able to preview and download it both on the customer and the operations portal.
- Case 3
- Still in the same screen as the previous test, we will click on the new Actions dropdown and do a regression test on the other options that existed previously on the page.
- Switch Company button:
- This button should only appear if the employee has one of the following roles: 'superuser', 'administrator', 'support' . And if you are logged in as the employee with the same username as your customer.
- Clicking on this button should still work as before, opening the Switch Company modal, asking you to select a company and when you click on Switch, your customer should be switch to the new company. You should see a window reload when you close the modal.
- Case 4
- Just like in the previous test, we will now test the following:
- Consumer Switch Company button:
- This button should only appear if the employee has one of the roles: â superuser', 'administrator', 'support' and if the company is of customerType = 'Consumerâ.
- Clicking on this button should still work as before, opening the Switch Company modal, asking you to select a company and when you click on Switch, your customer should switch to the new company. You should see a window reload when you close the modal.
- Case 5
- Just like in the previous test, we will now test the following:
- Send Email:
- Clicking on that button should open the New email modal.
- Clicking on the trash icon should close the Modal.
- Trying to click on Send or on the Schedule send buttons should trigger a âEmail body is requiredâ error and those fields should be marked.
- Make sure you are able to edit the fields.
- Attach a File to the email and see if it works.
- Test the âRepliesâ button as well.
- Finally, test sending an email from this Modal.
- Tests
- Case 1
- For this test, we need to go to the Customer Portal - Your Documents screen.
- You should see an actions dropdown.
- Click on âAttach Confidential Fileâ and select a file.
- Your file should be uploaded and you should be able to preview and download it.
- If you go to the Operations Portal - Your Customer screen - Customer Files, you should see your file of type âConfidentialâ there.
- If your employee has the âcustomerConfidentialCustomerFileViewâ role, you should be able to preview and download the file from there.
- Case 2
- For this test, you need to go to the Operations Portal - Select a Customer - Customer Files screen.
- In the new Actions dropdown, you should see an âAttach Fileâ option. If you hover on it, you should see a new option called âConfidential Customer Fileâ.
- Note: this option should only be visible if your employee has the customerConfidentialCustomerFileEdit role.
- Select that option and upload a file.
- You should see your file being uploaded of type Confidential.
- You should be able to preview and download your file and it should also be visible on the customer portal.
- KOD-29645: Kodaris - Fix search tuning breadcrumbs issue
- Case 1
- In the operations portal, make sure the search tuning page still loads as well as clicking into a product search rule and a category search rule.
- Tests
- Case 1
- When you click into a product search rule, click the breadcrumb named Product Search Rules and it should route you back to the product search rules tab on the search tuning page.
- Case 2
- When you click into a category search rule, click the breadcrumb named Category Search Rules and it should route you back to the category search rules tab on the search tuning page.
- KOD-29647: French Search
- Case 1
- Setup (Operations Portal).
- Go to Settings and make sure those settings are set to 1
- enableAiProductSearch
- enableAiProductSearchForAllUsers
- Go to Languages and add French (Canada) language with code fr-ca.
- Go to Swagger (/services)-> Erp Setting API â Execute /api/system/erpSetting/list request
- Find the setting with "codeval": "fr-ca" and copy its "code" value.
- Go to /api/system/erpSetting/
- {erpSettingCode} Update ERP Setting and execute it using copied value as a erpSettingCode and this JSON as a Go back to the Operations Portal and go to Products->Data and create three new products using info from this attached file test_products_info.xlsx
- Go to the Product Languages and create two new using info from this attached file test_product_languages.xlsx
- Open the Logs page in the new tab.
- Case 1
- (Operations Portal) Go to Settings â Search for â defaultLocale ' and verify it is set to ' en-us â.
- Go to theCustomer Portal and search for â drill â.
- Verify there is this log:
- Verify that TEST-DRILL-001 appears in results.
- Case 2
- (Operations Portal) Go to Settings â Search for â defaultLocale ' and set it to ' fr-ca â.
- Go to the Customer Portal , reload the page and search for â perceuse â.
- Verify that TEST-DRILL-001 appears in results.
- Case 3
- (Operations Portal) Go to Settings â Search for â defaultLocale ' and set it to ' fr-ca â.
- Go to the Customer Portal , reload page and search for â marteau â.
- Verify that TEST-HAMMER-001 appears in results.
- Case 4
- (Operations Portal) Go to Settings â Search for â defaultLocale ' and set it to ' fr-ca â.
- Go to the Customer Portal , reload page and search for â wrench â.
- Verify there is this log:
- [JS] Searching for vectors with name: frca_vector_256 for language code: fr-ca and full language code: frca.
- Verify that TEST-WRENCH-001 appears in results.
- Case 5
- (Operations Portal) Go to Settings â Search for â defaultLocale ' and set it to ' fr-ca â.
- Go to the Customer Portal , reload page and search for â hammer â.
- Verify there is this log:
- [JS] Searching for vector with name: frca_vector_256 for language code: fr-ca and full language code: frca
- Verify that TEST-HAMMER-001 appears in results.
- Case 6
- (Operations Portal) Go to Settings â Search for â defaultLocale ' and set it to ' fr-ca â.
- Go to Swagger (/services)->Erp Setting API â Execute /api/system/erpSetting/list request
- Find the setting with "codeval": "fr-ca" and copy its "code" value.
- Go to /api/system/erpSetting/{erpSettingCode}
- Update ERP Setting and execute it using copied value as a erpSettingCode and this JSON as a Request body:
- {
- "trmgrlang": "0"
- }
- Go to the Customer Portal , reload page and search for â marteau â.
- Verify there is this log:
- [JS] Searching for vector with name: productSearch_vector_256 for language code: fr-ca and full language code: frca
- KOD-29650: System
- KOD-29653: Implementation - Branding
- KOD-29657: Implementation - Configure Customer Portal
- KOD-29668: Infor CSD Updates
- KOD-29675: Implementation - Spin Up System
- KOD-29690: Implementation - ERP User
- KOD-29695: Don't Allow Customers to Checkout Without CSD #
- KOD-29699: Update Shipto Spelling
- Case 1
- Make sure the Shipping address dropdown opens and that items from the list can be selected.
- Tests
- Case 1
- Ensure that in the header, the Select Ship-to Location text has been changed from â Shipto â to â Ship-to .â
- KOD-29701: COD Payments
- KOD-29705: GeoCode - Multiple Add-On Fees
- Case 1
- Ensure that saving the company and shipping address in CSD is functioning correctly.
- Tests
- Case 1
- Ensure that the field from the postal codes table - âtaxJurisdiction4â is successfully saved in CSD as the addonnum2 field for the company and the company's shipping address.
- KOD-29707: Create fix for zero qty line item
- KOD-29715: Implementation - Countries / States
- KOD-29728: Verbiage Modification for "Limited Stock" / "Quantity Limited" message for DNR Items
- KOD-29731: "Owners" - Driver's License upload not saving in the Internal Files in the operations portal
- KOD-29733: Kodaris - Text area Component
- Tests
- Case 1
- Make sure text can be entered.
- Make sure focus does not leave the textarea while typing.
- Make sure validation works when required.
- Make sure the hint functions properly.
- KOD-29740: Kodaris - Request NONSTOCK item not available on checkout
- Case 1
- Preconditions:
- Product is available in the system.
- With NONSTOCK code.
- Active value set to true.
- Display value set to true.
- Setting guestCheckoutEnabled set to 1.
- Test cases:
- Add product to the cart.
- Confirm cart page loaded properly without any issues.
- Confirm âActionsâ button is displayed between tabs and products list on the first checkout page.
- Click on the âActionsâ button.
- Confirm âRequest Custom Itemâ option is available.
- Click on this option.
- Confirm popup dialog with âDescriptionâ and âQuantityâ fields are displayed.
- Fill in Description and quantity.
- Click the âAddâ button.
- Confirm NONSTOCK product is added to the cart with description and quantity youâve provided.
- Case 2
- On the operations portal navigate to the âProductsâ screen.
- On the search tab locate âNONSTOCKâ product.
- Open its detail page.
- Change Code Field.
- Confirm changes are applied on the Search tab.
- Navigate to the cart page.
- Refresh the page and confirm the âActionsâ button is not available.
- Roll back changes for the code field of the product in the operations portal.
- After changes reflected on the Products Search tab verify âActionsâ button is available on the checkout.
- Repeat this process for âactiveâ and âdisplayâ fields.
- NOTE: please, make sure that your changes to the product from itâs detail page are reflected on the search page.
- Case 3
- Repeat test case 2 for logged in users.
- The difference will be that the âActionsâ button will be available in any product state (eg display=false), but there will not be an âRequest Custom Itemâ option in the dropdown.
- KOD-29742: Implementation - Data Syncing
- KOD-29747: Implementation - Configure the Customer Portal
- KOD-29748: Implementation - System
- KOD-29751: Fix company catalog drag and drop reorder issue with codes
- KOD-29753: Implementation - ERP Configuration - Settings update
- KOD-29754: System
- KOD-29756: Move Tender on Orders Phase 1 UX
- KOD-29757: Kodaris - Add Ability to Import Ticket Custom Fields
- Tests
- Case 1
- Go to System â Settings (Using the search box, find the row with âintegrationIndexedTicketFields")
- Go to Services â Tickets and switch to the Data sheet.
- Search for indexfieldtest and press Enter .
- Delete any tickets found.
- In the Tickets page âFile â Import â Create Only .
- Select and download file csv and click Open .
- Verify the message appears: âYour import file has been queued. Please check back in a few for the imported data.â
- Go to System â Scheduler and find the row with Job Name = FiveMinuteBulkJobsJob .
- Click Run Job (running man icon).
- Go to Services â Tickets and switch to the Data sheet.
- Search for indexfieldtest and press Enter .
- Verify 2 tickets are found: Ticket Custom Fields Import Test 1 and Ticket Custom Fields Import Test 2 .
- For each ticket, open it using the â>â button, then click More â Custom Field and verify Custom Fields.
- Return to Services â Tickets â Data , search for indexfieldtest , and delete the found tickets.
- KOD-29760: Updates to Password Policies
- Case 1
- Make sure you are still able to reset your password on the reset-password screen on both sites we updated.
- Tests
- Case 1
- For this test, you need to go to /reset-password page.
- You can get to this screen by clicking on Forgot password? And opening the link you will get via email.
- Try to reset your password using a password you already used before.
- If the following setting is on (greater than 0) customerNumberOfPreviousPasswordsToCheck you should see an error â We're sorry, you may not reuse your previous password. Please use a brand new password â
- Now, try triggering a new error, like submitting when the Password and Confirm Password are different or when you are not using the special characters that are required.
- The error message should be updated to whatever is returned from the server for this errors, for example:
- Confirm password does not match new password.
- We're sorry, please use a password that has 8 or more characters.
- If the setting is off, you should be able to use a previous password without any issues.
- KOD-29767: Product Configurator
- Case 1
- Preconditions:
- Regular product exists (productDisplayType NOT "Configurator").
- Product has multiple images attached (1 primary + 1 secondary).
- Product has NO variants/related products.
- Navigate to the regular product page.
- Observe the product image carousel.
- Verify all product images are displayed.
- Navigate through the carousel.
- Check that no console errors appear.
- Expected Result:
- Carousel displays all product images (primary + secondary).
- No duplicate images appear.
- No JavaScript errors in the console.
- No changes in behavior compared to before the configurator inheritance feature.
- Tests
- Case 1
- Variant without own images inherits all parent images.
- Preconditions:
- Configurator product exists with 3 images (1 primary + 2 secondary).
- Variant product exists with NO images/files attached.
- Variant is related to the configurator as relatedType: "ConfiguratorVariant".
- Steps:
- Navigate to the configurator variant product page (e.g., /CouchTestMediumGreen).
- Observe the image carousel.
- Expected Result:
- Carousel displays 3 images (all inherited from the parent configurator product).
- Images match the parent product's primary + secondary images.
- No duplicate images appear.
- Carousel navigation works correctly.
- Case 2
- Variant with own images shows ONLY own images.
- Preconditions:
- Configurator product exists with 3 images.
- Variant product exists with 2 own images (one as primary and second one as secondary).
- Variant is related to the configurator as relatedType: "ConfiguratorVariant".
- Steps:
- Navigate to the configurator variant product page (e.g., /CouchTestMediumRed).
- Observe the image carousel.
- Expected Result:
- Carousel displays 2 images total (ONLY own images, NO inherited).
- Parent images are NOT displayed.
- KOD-29779: Footer Update - Privacy Policy
- KOD-29780: Implementation - Sync Taxes
- KOD-29781: Update google analytics settings
- Regression Tests
- Case 1
- Go to a system that has googleAnalyticsCode and/or googleTagManagerNoScriptCode configured (but not the new googleTagManagerScript / googleTagManagerNoscript settings).
- Navigate to any public page.
- Open the browser console.
- Verify the script is loaded.
- Delete both settings (if production, before deleting, save the value).
- Verify thereâs no error.
- Tests
- Case 1
- Go to a system and configure the new settings in the operations portal config screen:
- Set googleTagManagerScript (head script).
- Set googleTagManagerNoscript (body noscript).
- Navigate to any public page.
- Open the browser console.
- Verify the script is loaded.
- KOD-29785: Update to cart merging feature
- Case 1
- Put something in the cart.
- Go to the cart page.
- Save the cart for later.
- Expected:
- Cart successfully saved, no errors and you should have an empty cart now.
- KOD-29788: Update Statement Templates
- Regression Tests
- Case 1
- Ensure that statements are sent correctly when you click âSend Statementsâ on the âAutomated Statement Deliveryâ page.
- Tests
- Case 1
- Ensure that the section âSave Time And Money...â is not displayed in the PDF file.
- KOD-29789: Remove the messaging from Home Page
- Tests
- Case 1
- The red message from the description should be removed from the home page.
- KOD-29791: Notifications on Customer Notes - Fix date discrepancy
- Case 1
- Ensure that when adding a comment to a payment (Accounts Receivable screen), an email notification is sent correctly.
- Tests
- Case 1
- Ensure that when a comment is added to a payment, an email notification with the correct date is sent.
- KOD-29794: CSD API question
- KOD-29802: Request to add Accessibility Policy link in the website footer
- KOD-29809: Kodaris - Fix UI issues
- Case 1
- Open the Operations Portal.
- Navigate to several pages.
- Confirm that pages load correctly.
- Confirm that the content on the pages looks good.
- Tests
- Case 1
- Try searching using the search input in the left sidebar.
- Confirm the full page is displayed correctly, including navigation and content, without any issues.
- Case 2
- Select any category from the sidebar and open the category page.
- Confirm the selected category is highlighted.
- Case 3
- Open the page and resize the browser height.
- Confirm that the breadcrumb bar height stays the same.
- Case 4
- Go to any data grid, find an editable cell, and double-click it to start editing.
- Then go to the search field in the sidebar and type any text.
- Confirm the text appears in the search field and not in the previously selected cell.
- Case 5
- Confirm the search bar matches the one shown in the screenshot.
- Case 6
- Go to the Order Details page.
- Find an additional charge and click on the amount.
- Confirm the Save and Cancel buttons are displayed correctly.
- In the Total section, click on any editable amount.
- Confirm the buttons are displayed correctly there as well.
- Case 7
- Open several pages with a grid or table.
- Confirm that the bottom padding is slightly smaller than previously.
- Case 8
- Choose any item from the sidebar.
- Right-click on it and select Open link in the new tab .
- Confirm the correct link opens in a new tab.
- Choose another item from the sidebar.
- Hold Ctrl and left-click the item.
- Confirm the correct link opens in a new tab.
- Case 9
- Find any date field with a calendar icon.
- Open the calendar and confirm that the calendar cells look good visually on hover and when selected.
- KOD-29815: InforCSD Payments - ReAuth
- KOD-29823: Implementation Update
- KOD-29825: COD Payment - Log user's entered amount
- KOD-29826: Customer Part Number Deletion
- Case 1
- Make sure a product details page still loads and you can still add a custom part number (if you are logged in and an admin).
- Tests
- Case 1
- Either find a product that has a âyour part #â or add one to a product â (also find it in the cross references table in the operations portal) â now click on the popup and click Delete â notice the value has been removed and Add with underlines is in its place and if you look at the cross reference table, you wonât see that value there anymore.
- KOD-29833: Parser fix
- KOD-29838: Improve product image upload performance
- Case 1
- Primary Image Upload.
- Upload JPEG, PNG, TIFF images via /{productCode}/savePrimaryImage
- Verify three sizes created (small, medium, large) with SM-, MD-, LG- prefixes.
- Verify product smallImage, mediumImage, largeImage fields are updated.
- Upload GIF - Verify single file saved without resizing, only mediumImage updated.
- Case 2
- Additional Image Upload.
- Upload additional images.
- Verify three sizes created with SM_, MD_, LG_ prefixes (underscore, not hyphen).
- Verify files linked to the product (available in the product's public files tab).
- Upload GIF - verify single file saved(available in product's public files tab).
- Case 3
- Upload multiple large images (20 files - 5MB each) in succession.
- Verify server doesn't crash under load.
- KOD-29841: InforCSD Payments - Credit vs Refund
- KOD-29842: Implementation - System