We've introduced a new "Add All to Cart" feature that enables users to add entire catalogs to the shopping cart in a single action, streamlining the order preparation process.
The feature works seamlessly with both Company and Customer Catalogs. When viewing any catalog, users can now select "Add All to Cart" from the Actions dropdown menu to instantly add all products to their cart. The system intelligently preserves any product notes and custom quantities that were specified beforehand, ensuring order accuracy while saving time.
This functionality particularly benefits users who regularly work with complete catalogs or need to create large orders quickly. By eliminating the need to add products individually, the feature reduces repetitive actions and minimizes the potential for missed items during order creation.
The "Add All to Cart" feature is now available to all users across the Commerce platform. For a step-by-step demonstration of how to use this feature, please refer to our instructional video.
https://youtu.be/VIklJLyklBs
Operations Portal
Employees can now be restricted to only view and edit tickets assigned to them
This targeted access is managed through two new roles: "ticketViewAssigned" and "ticketEditAssigned." Administrators can apply these roles to any employee account through the Employees screen by accessing the employee's details and navigating to the Roles tab. Once configured, employees will only see tickets where they are listed as the assignee.
With this permission structure, employees maintain full editing capabilities for their assigned tickets, including updating ticket information and adding internal comments.
Available now in the latest system update. For a detailed walkthrough of configuration and functionality, please refer to our demonstration video.
https://youtu.be/kVJLPeu412E
Territory-Based Company Assignments for CRM Users
The Sales Territory Assignment feature streamlines how organizations manage CRM user access to company records. By implementing a territory-based assignment system, administrators can efficiently control which companies each CRM employee can view and manage. The feature works by assigning territory codes to both companies and employees, automatically creating the appropriate visibility relationships.
Implementation requires enabling two settings (crmUseEmployeeAssignments and crmUseSalesTerritory) and then adding territory codes to company records and employee profiles. CRM employees can be assigned to multiple territories by adding comma-separated values to their Sales Territory field, instantly granting them access to all companies within those territories.
The Sales Territory Assignment feature is available now in the latest system update. For a detailed walkthrough of the setup process, please refer to our demonstration video.
https://youtu.be/lMVlIUwqloI
Tickets
KOD-24342: Scoping Order Transfer for Direct Ship
KOD-24597: UX to be Able to Manage Employee Sales Territory Code Assignment
Tests
Case 1
Operations Portal → Employee details screen.
Expected result:
There is a new field available: "Sales Territory".
It’s possible to edit the field.
KOD-25413: Support Viewing XML Internal/Customer Files
Tests
Case 1
Operations Portal:
Customer Files
Internal Files
Expected result:
It’s possible to preview xml files.
Case 2
Operations Portal:
Order, Cash-Quote, Quote → Customer Files.
Order, Cash-Quote, Quote, Vendor Invoices →
Internal Files
Expected result:
It’s possible to preview json, xml files.
It’s possible to side view xml, csv, tsv files.
KOD-25501: Scope Testing National Flow
KOD-26824: Trending Stats replacing Business System Events
KOD-26855: Kodaris - Apply no-index
KOD-26868: Global parser From Ticket 29257
KOD-26921: Master order/budgets - Add ability to create budget from quote in customer portal
Regression Tests
Case 1
Go to the operations portal → companies.
Locate your company and click on the button to generate a quote. Generate some quotes, ensuring they are created successfully (a new screen with the quote appears).
Tests
Case 1
Go to the operations portal → companies.
Locate your company and click on the button to start a quote.
When the new quote screen opens, fill the location type, and endDate. Then click the button to setup a location.
Login to the website with your company and open swagger and find this endpoint: /api/account/companyAddressBudget/quote/\{quoteID}.
Post using the number of the quote you created. You should get a 200 (budget created).
KOD-26922: Master order/budgets - Scope budgets at the company level
Tests
Case 1
Validate company budget calculation is still working as expected when hit the new endpoint POST -/api/system/companyBudget/company/{companyID}/{companyBudgetID}/calculate which is about calculating budgets solely based on company (the ones created from Company Budgets screen).
Pre-requirements:
To have at least one order whose status matches the company "Budget Restriction Type" field value and its invoiced date (extra3 field) must be between CompanyBudget Start Date and End Date.
A budget created based solely on a company.
Steps:
From Kodaris operations portal go to Company Budgets screen and create a new budget without Company Address and with type Total Spend (The companyBudget must have Start Date and End Date)
Go to swagger and look for an endpoint POST /api/system/companyBudget/company/{companyID}/{companyBudgetID}/calculate in the Company Budget API.
Pass the company and budget ids and then click on Execute.
Go back to the Company Budgets screen.
If refresh, you will see screen you must see that the Parent Budget’s Current Spend Amount field is equals to the total of your order (or the total of all you’re implied order together) and the in the line items, this line items will be the total by products, total in taxes and total discounts.
KOD-27038: Remove business event
KOD-27046: System Fails to Send Email
KOD-27058: How to delete custom columns added in the Customer Portal
KOD-27083: Guest checkout text update
KOD-27166: Request Payment in CSD
Regression Tests
Case 1
Make sure that the COD payment flow still works as expected without issues.
Tests
Case 1
The COD payment flow should now have the correct surcharge messaging (if that is turned on) and the thank you page should display the receipt as well as surcharge messaging there as well.
KOD-27195: Kitbuilder - Set up all three product options and rules
KOD-27243: Block selection of a Kodaris only parent account
Regression Tests
Case 1
Check that the product is added to the cart correctly, the cart page opens without the popup if the customer has selected a company which is not a Kodaris only parent company. (Kodaris only parent company does not have parent company and trendCompiledSettings, in the videos the company criteria is a bit different, but the example will work).
Tests
Case 1
Check that the customer, with the selected company being a Kodaris only parent company, when navigating to cart, opens a pop-up window.
Check that the pop-up window contains functionality that allows you to change the company. Check that the company change works correctly.
Check that the pop-up window is displayed correctly on different screen widths, the layout does not break.
Check that the popup text is translatable.
KOD-27268: Permissions - Tickets assigned to user
Regression Tests
Case 1
Open swagger, check endpoints with:
/api/system/ticket/{ticketID}/settings
Do the same tests from Case 1, using profiles ticketSettingView and ticketSettingEdit.
GET /api/system/ticket/{ticketID}/settings
Case 2
Open swagger, check endpoints with:
/api/system/ticket/{ticketID}/customerFile
Do the same tests from Case 1, using profiles ticketCustomerFileView and ticketCustomerFileEdit.
GET /api/system/ticket/{ticketID}/customerFile/list
Case 3
Open swagger, check endpoints with: /api/system/ticket/{ticketID}/internalFile
Do the same tests from Case 1, using profiles ticketInternalFileView and ticketInternalFileEdit.
GET /api/system/ticket/{ticketID}/internalFile/list
Case 4
Open swagger, check endpoints with:
/api/system/ticket/{ticketID}/emaill
Do the same tests from Case 1, using profiles ticketEmailView and ticketEmailEdit.
GET /api/system/ticket/{ticketID}/email/list
Tests
Case 1
Add permissions ticketViewAssigned and ticketEditAssigned for an employee with no other permissions.
Only for POST, the permission is ticketEdit.
Assign a ticket to this employee.
You should be able to execute all CRUD methods from:
Using another ticket with no assign to the employee. Do the same tests from the previous test case, except LIST.
You should not be able to execute.
KOD-27323: Add a new endpoint to update pricing configuration instead of running daily job
KOD-27351: First Name, Last Name and Position Fields
Tests
Case 1
Preconditions: Customer missing First Name/Last Name/Position.
Login to the application as a customer.
Navigate to any page.
Expected result: Popup with First Name, Last Name, Position fields should appear.
Make sure that the fields correspond to those filled in on the operations portal.
Case 2
Open popup with missing fields.
Leave one or several fields empty.
Click "Save & Continue".
Expected result: empty field should highlight in red with error message "field is required"
Case 3
Open popup with missing fields.
Fill all required fields with valid data.
Click "Save & Continue".
Expected: Popup should disappear immediately and the data must be saved on the server.
Refresh the page.
Expected: Popup should NOT reappear (profile now complete).
KOD-27381: Delivery Address Not Populating
KOD-27401: Vendor Invoice Parser
KOD-27404: Implement Consumer Returns Process
Regression Tests
Case 1
Make sure you can still submit a Return on the consumer flow without issues.
Tests
Case 1
Submit a consumer return, one with all the items on the order and one with only some items on the order.
After submitting, both should display the correct amount of items.
KOD-27444: Parser - Missed last line of PO
KOD-27457: Fraud detection - Hold suspicious orders to release to ERP - UX
Regression Tests
Case 1
Check that the Fraud Configuration page looks good.
Check that the Fraud Сonfiguration page allows you to change the settings values. The values are saved after refreshing the page.
Check that there are no errors in the console.
Tests
Case 1
Check that the “Hold Suspicious Orders“ field appears on the Fraud Configuration page.
Check that the field accepts only integer and floating point values.
Check that the field saves the entered value.
Check that after entering the value and saving the changes - the same value is specified in the fraudDataKodarisHoldThreshold setting.
KOD-27460: UX updates for fetching order from SX directly to call in js interceptor
KOD-27471: AP-Invoice Parsing for New Vendor
KOD-27472: Parser
KOD-27483: Tariffs on website
KOD-27488: Import Invoice and Statements email addresses
KOD-27492: Retail Price Issue Created From Ticket 33040
KOD-27499: Ship-to is not matching pdf Created From Ticket 33074
KOD-27500: Parser From Ticket 33068
KOD-27503: Modifying shipto API data
KOD-27510: Parser update from Ticket 29257
KOD-27512: Implementation - Install Applications
KOD-27514: Fields update on the Orders/Cash Quotes screens
Tests
Case 1
Enter the Operations Portal, and open the Orders page.
Open an order, then click the Items tab.
In the grid, click to Show / Hide Columns.
The dropdown should not display any options for General Ledger fields.
It should not display an option labelled Department either.
Instead, it should display a Customer Department label. Select it.
Check the grid: it should display a column labelled Customer Department.
Case 2
Enter the Operations Portal, and open the Cash Quotes page.
Open a quote, then click the Items tab.
In the grid, click to Show / Hide Columns.
The dropdown should not display any options labelled Project or Project Urgency Level.
Instead, it should display the Customer Project and Urgency labels. Select them both.
Check the grid: it should display these just selected columns.
KOD-27517: Add startEventDate and endEventDate to content pages
Tests
Case 1
Go to content page API: /api/system/contentPage
Create some content pages with fields startEventDate and endEventDate, the format for both should be like this: “2025-09-02 15:30:47" (do not use other formats, they won’t work).
Then, run some updates (PATCH), and also GET/LIST.
You need to ensure that:
You can find new fields startEventDate and endEventDate. For those that you set a new value for , you should get the field filled.
KOD-27520: AP: Credit Memo
KOD-27521: AP French Language Invoices Created From Ticket 33340
KOD-27527: Add "refer" to Filters in Pricing: Created From Ticket 19387
KOD-27532: Kodaris - Company Imports: add companyCanUseCreditCards settings to be importable
KOD-27536: Email Translation Questions
KOD-27540: New user role needed updates from Ticket 29927
Regression Tests
Case 1
Go to the customer portal. search for any products. Check if the list is displayed as expected, without the Remove button.
Case 2
Make sure you have a companyAdmin or companyCatalogEdit role.
Go to the catalogs screen. Check if you can see catalogs as expected.
Case 3
Click the View button for any company catalog. Check if it is displayed as expected.
Tests
Case 1
Make sure you have a companyCatalogEdit role and do NOT have a companyAdmin role.
Go to the catalogs screen. Check if there is "Add Catalog" button for company catalogs. Try to add a new catalog here.
Case 2
Open a new catalog. Check if you see the same text as with the companyAdmin role. Go to products and add some for new catalog.
Case 3
Go back to the catalog that you created. Try to remove some products that you added here.
Case 4
On the top right corner of the company catalog click "Action/Delete." Check if that catalog was deleted.
KOD-27543: Add the ability to copy prices for Cash Quotes
Tests
Case 1
For this test, we have to go to the Cash Quotes screen in the operations portal and select a Cash Quote.
Add some items to your cash quote, preferably one that has a price greater than 0.
Now, we will change the Sell Price of the item to anything different than original.
That should mark the Hand Priced field on the item to true.
If you open the Copy modal, you should see a checkbox for “Copy pricing”.
If you click on that checkbox and click on the Copy button, you should see the flag “withPricing” being sent as “true”, otherwise it should be false.
You should be taken to a new Cash Quote which is a copied version of the original one you were on.
If you check the line items, you should see the Hand Priced field on the item should also be true for this line item.
Case 2
For this case, we will repeat the steps of the last case but we won’t check the Copy pricing box.
Make sure the withPricing flag is being sent as “false”.
Even when in the original quote the item had its “Hand Priced” field set to true, if we don’t check the box the value of that field in the new Quote line item should be false.
KOD-27552: Note in CSD not on Invoice from Kodaris
Regression Tests
Case 1
Make sure that the Order PDF, Order Email, and Order Details still work as expected without issues.
Tests
Case 1
For the order in the description, check that the notes are now showing on each template.
KOD-27558: Parser Invoice
KOD-27559: Parser Invoice
KOD-27560: Invoice Parser
KOD-27569: Update all active records with vendor numbers
KOD-27570: Update comment format From Ticket 27573
KOD-27572: Parser fix From Ticket 27562
KOD-27575: Copy Over Saved Quantities & Notes when Adding All to Cart
Tests
Case 1
Open the website.
Navigate to Catalogs.
In both Customer and Company catalogs, do the following:
Change the quantity of any product and add a note if it is missing.
Click Actions -> Add all to cart.
Go to the cart and verify that the products were added with the correct quantities and notes.
KOD-27578: CMS Update
Regression Tests
Case 1
Confirm that when a page is updated in the editor, the changes will be reflected on the live site.
Case 2
Confirm that when the content of a page is updated in a translation for another language, the changes will be reflected on the site.
Case 3
Confirm that we can switch between languages and the content will change accordingly.
KOD-27579: Product page optimization - H3 headers should have same font weight as H1
Tests
Case 1
Enter the commerce site, and open a product page.
It should display the "Purchase" and the "Product Attributes" headings both with the same font weight as the product name heading.
To double check this, right click the product title, and select to Inspect.
In the Elements tab, check the product title element: it should be a h1 tag.
Click this h1 tag to select it, then in the Styles, click the Computed tab and check the font-weight attribute: it should be 400.
Do the same check for the "Purchase" and the "Product Attributes" headings: both should be h3 tags, with the font-weight attribute value equals to 400.
KOD-27580: Update Blog Template to include Page Content
KOD-27582: Implementation - Branding
KOD-27583: country and state changes
KOD-27585: Implementation - Countries / States
KOD-27587: Add ability to select all and/or add all to cart to company catalog ux to base repo
Regression Tests
Case 1
Open the website.
Log in.
Navigate to the catalogs (check both company and customer catalogs).
Select any catalog.
In Company Catalogs, the user should not be able to perform any of the following actions: [Edit, Delete, Export Price List], unless they have the following setting: customerCanModify (companies screen in the operations portal → your category → Edit Category → customer can modify: false) and permission: companyAdmin.
In Customer Catalogs, the user should not be able to perform any of the following actions: [Edit, Delete], unless they have the following setting: customerCanModify (customers screen in the operations portal → your category → Edit Category → customer can modify: false).
Tests
Case 1
Open the website
Log in.
Navigate to the catalogs (check both company and customer catalogs).
Select any catalog
Click the Actions → “Add all to cart” button and check that all products from the catalog have been added to “My cart”.
Verify that the user sees the correct button state.
If requests are still being processed, the button should display “Adding to Cart…”.
Once the requests are completed, it should display “Added” and the dropdown should close.
On the next click on the actions button, the initial state “Add all to Cart” should be displayed again.
Verify mobile view.
Case 2
Open the website.
Log in.
Navigate to the catalogs (check both company and customer catalogs).
Select any catalog.
Click the “Add all to cart” button.
Open DevTools → Network tab.
Right-click on the relevant request.
Select Block request URL.
Click the “Add all to Cart” button again, the request should be blocked, and an error should appear.
Verify all related requests and ensure proper error handling is triggered.
Case 3
Open the website.
Navigate to Catalogs.
In both Customer and Company catalogs, do the following:
Change the quantity of any product and add a note if it is missing.
Click Actions -> Add all to cart.
Go to the cart and verify that the products were added with the correct quantities and notes.
KOD-27592: Attach Avalara System Events to an Order
Regression Tests
Case 1
Setup global setting taxEngine to Avalara(where Avalara is configured) and verify tax calculation still working as expected (from the Operations Portal - calculate totals on order and from Cart - proceed to Checkout step.
Tests
Case 1
Setup global setting taxEngine to Avalara and verify request/response to Avalara are saved as System Event (in global System events screen and under System events tab of your particular order).
KOD-27593: Add Return Templates
Regression Tests
Case 1
Check that the order templates still work as expected:
Order Email
Order PDF
Order Details
Tests
Case 1
Check that now when you generate an email, pdf or the order details for a return, the order template shown now has return info.
The label should be ‘Return’ and each order item should now show the Return Reason and Return Comment if it exists.
KOD-27595: Extend getFileExtension support for advanced MIME types
Regression Tests
Case 1
Confirm that the page and the form on the career.ejs template page load without errors.
Case 2
Confirm that if you try to attach a file with an unsupported extension, the user will not receive it in the email.
Case 3
Confirm that the file extension will be the same as the one you sent.
Tests
Case 1
Confirm that we can attach files to the form and that they will be sent along with the email as actual files. Confirm that this will work with PDF, image, .docx, and .doc file extensions.
KOD-27596: New Customer Form
KOD-27602: Kodaris - Support TSV format as Internal File Type
KOD-27603: Parser From Ticket 33802
KOD-27605: Parser request From Ticket 33744
KOD-27609: Single Word Text Search
KOD-27610: Attach Vertex/Sovos System Events to an Order
Regression Tests
Case 1
Setup global setting taxEngine to Sovos (env where Sovos is configured) and verify tax calculation still working as expected (from the operations portal - calculate totals on order and from Cart - proceed to Checkout step.
Case 2
Setup global setting taxEngine to Vertex (env where Vertex is configured) and verify tax calculation still working as expected (from the operations portal - calculate totals on order and from Cart - proceed to Checkout step.
Tests
Case 1
Setup global setting taxEngine to Sovos and verify request/response to Sovos are saved as System Event (in global System events screen and under System events tab of your particular order).
Case 2
Setup global setting taxEngine to Vertex and verify request/response to Vertex are saved as System Event (in global System events screen and under System events tab of your particular order).
KOD-27613: Skip second tab during the PunchOut checkout
KOD-27614: Confirm UX has punchout updated layout
Regression Tests
Case 1
Сheck that the order is created successfully (by guest | user).
Сheck that the checkout page layout looks correct.
*Сheck that there are no errors in the console while on the checkout page.
Case 2
In the cart:
When checking out normally (for users who don't use the Punchout feature),
Make sure you see the navigation buttons at the top. Clicking on each one will take you directly to the corresponding tab.
The Next and Previous buttons should work without any issues and not skip the second Location tab.
Tests
Case 1
Check that when a guest logs in, the “Pay with Punchout” section is not displayed on the checkout page
Check that when a user logs in and cartService.isPunchOut() is enabled, the “Pay with Punchout” section appears on the checkout page
Check that when clicking on “Place Order” in the “Pay with Punchout” section, a request is sent to /api/account/punchOut/cart
Check that there are no errors in the console when clicking on “Place Order” in the “Pay with Punchout” section.
Check that if Punchout is enabled, the checkout transition occurs from tab 1 to tab 3 and 2 tab is skipped.
KOD-27621: Localize "Add to Quote" and "Add to Cart" buttons
Tests
Case 1
Open the website.
Log in.
Navigate to any category.
Verify that the "Add To Quote" and "Add To Cart" buttons are displayed with French translation.
KOD-27638: Order confirmation email template update
Regression Tests
Case 1
Make sure the Order PDF, Order Email, and order details in the customer portal still work correctly without issues.
Tests
Case 1
On all the order templates, check that the Terms text now doesn’t have the bad character (?) and that the extra unit of measure is gone from the Unit Price on the items.
KOD-27646: Update templates to display the external product code
Regression Tests
Case 1
Make sure that the Order PDF, Order Email, and customer portal order details still work as expected without issues.
Tests
Case 1
On a Cash Quote generate the order email, pdf, and customer portal details.
Check that if the Product Type field is set to Product Line and the externalProductCode field is populated, then that value will show for the item code instead of the Code field value.
Case 2
On a normal order (without Product Type and external product code populated) check that the normal item code is displayed for each item.
KOD-27651: Parser update From Ticket 31527
KOD-27654: Issue with Quick Order on Kodaris Employee App Created From Ticket 34094
KOD-27670: Kodaris-Fix Failed Email Sending
Regression Tests
Case 1
Turn ON global setting - isEmailSendingFromJob and test sending regular email, like order confirmation email or any type of subscription event emails.
Case 2
Turn ON global setting - isEmailSendingFromJob and test re-sending existing emails.
Tests
Case 1
Turn ON global setting - isEmailSendingFromJob and test re-sending failed email from EmailSendingJob.