Upload Confidential Files Directly from the Customer Portal
The Customer Portal now allows users to upload confidential files through a dedicated option in the Documents screen. This new functionality appears alongside the standard file upload option in the Actions dropdown menu, providing a streamlined way to handle sensitive information. Uploaded confidential files receive special handling that prevents them from appearing in the regular documents list.
Confidential files are accessible only to users with specific permissions in the Operations Portal. Administrators can control visibility by assigning the "companyConfidentialInternalFileView" role to appropriate users, ensuring sensitive documents remain protected while still being available to authorized personnel when needed.
This feature is available now to all Customer Portal users. For a detailed walkthrough of the upload process and permission settings, please refer to our tutorial video on confidential file management.
https://youtu.be/zkS1PBArDRQ
Operations Portal
ERP Backorders Now Displayed in Order Hierarchy
The Orders screen now includes ERP backorders in the Hierarchy section, providing a more complete view of all related orders.
Previously, the Hierarchy section only displayed order trees created through the sourced order flow, which splits orders and creates associated orders. With this update, ERP backorders are automatically identified and added to the hierarchy panel. Users can click on any backorder to view its details directly, making it easier to track outstanding items and understand order relationships.
This enhancement improves visibility into backorders, helping teams manage and monitor orders more effectively.
This feature is available now to all Operations Portal users. For a step-by-step walkthrough, please refer to our demonstration video on the YouTube channel.
https://youtu.be/TQ04xmEWaQs
Signature Capture in Operations Portal
We've added signature capture functionality to the Operations Portal, enabling signature collection directly within your order workflow.
The new signature capture feature allows users to collect signatures through terminals directly from the order details screen. Access this functionality by clicking the "More" button in the top right corner of any order and selecting "Capture Signature" from the dropdown menu. You can then select which terminal to use for collecting the signature.
Once a signature is captured, it's automatically stored in the Customer Files tab of the order for convenient access and record-keeping.
The signature capture feature is available now to all Operations Portal users. For a detailed walkthrough of how to use this feature, please refer to our demonstration video on the YouTube channel.
https://youtu.be/Ux2ScENxV_E
Tickets
KOD-20575: Operations Portal Testing
KOD-24436: Add coordinates to companies and automatic geocoding
Regression Tests
Case 1
Setting: enableGeocodingCompaniesAddresses should be disabled .
Try updating a Company/Vendor and any address field (address1, city, state, postalCode, country) and make sure no latitude longitude are being updated .
Also, after SolrReindexJob runs, make sure that latitude and longitudes are not being updated for a particular Company. (So, even if you update it manually and nothing happens, wait until solr reindex job runs (5m) and verify latitude and longitude don’t change).
Tests
Case 1
Enable setting enableGeocodingCompaniesAddresses and wait until SolrReindexJob runs.
The Job will pick up ALL companies and vendors which have latitude and longitude null and at least one of the following fields populated: (address1, address2, address3, city, state, country, postalCode) and it will populate latitude and longitude from AWS.
Note before running the test: Select one company that you are sure that will be updated so you can verify that one. It can just be any company with at least one of the fields mentioned populated and latitude/longitude null.
Checks log and validate companies were updated.
Update any address field in the Company and verify the latitude/longitude are being updated. It will only be updated if AWS recognizes the coordinates so you can check in logs about the process and what is going on if you don’t see any update.
Create a company from scratch and set at least one of the address fields and verify the created company has the latitude longitude populated.
Verify in Solr results that you are receiving latitude/longitude and ‘coordinate’ fields.
Verify all of this happens with Vendor as well.
KOD-25257: Opting into Search Rules Notification Doesn't Work
Regression Tests
Case 1
Access the operations portal and go to the search tuning screen → Category redirects.
Make a regression by adding, editing and deleting some rules. Ensure no errors occur.
Access notifications and subscriptions screens, make sure they are listing notifications/subscriptions successfully.
Tests
Case 1
In the search tuning screen → category redirects, create a rule to search a string and redirect to a categoryCode without any product (no product found).
Activate this notification: Notify me when Search Rules are no longer working.
Ensure in subscriptions screen that a line was created with this code InvalidSearchRulesAlert, and your email.
Do the search in the website for the string and get the error that the product was not found.
Run the dailyIntervalJob and ensure you receive an email with title: Invalid search rules report.
Be careful, every time you do this test, the rule is set to invalid and you will need to delete and add again, if you want to test again.
KOD-25292: Add back orders created in ERP to new order hierarchy panel
KOD-25416: Display Customer & List Price and Warehouses Created From Ticket 21937
Category pages: make sure you can see prices without additional messages, make sure you can add product to a cart in any quantity.
Product detail pages: make sure you are able to product to a cart in any quantity.
For all product and category pages: make sure they are loaded with no issues.
Make sure you are able to see inventory if there is anything returned from the /pricesByCodes endpoint response in the “skuData“ array for this product.
Make sure the mobile layout looks good.
Tests
Case 1
As logged in user:
Check the product details page.
Updated wording for the price should be:
Your Price: calculatedPrice.
List Price: List price from the sku, which is coming from the customer’s main warehouse.
Your warehouse:
Customer’s warehouse name: availability .
Other Warehouses with buttons that should be clickable and expend the warehouse list.
When you click on that button it should rotate.
Make sure updates look good on mobile.
Case 2
As logged in user:
Check category (search) grid, list pages.
Make sure pricing is displayed as usual without any additional messages such as Your Price:
Make sure you can see warehouses available per each item.
Make sure updates look good on mobile.
KOD-25735: Ticket #168
KOD-25751: Billing Address Discrepancy Issue
KOD-26019: AWS QuickSight
KOD-26152: Compare mappings with CSD
KOD-26265: Apply to Oldest Invoice-Feature Request Created From Ticket 26197
Tests
Case 1
New endpoint that will tell you which invoices you can pay with the amount pass in parameter.
Basically, this will help to identify which invoices and which amount will be used when making a deposit.
In swagger, you send the amount, and companyID and will give you information about how many old invoices you can pay with that. Remember that old invoices will go first (the flag applyToOpenInvoices should be true).
Also, those ‘old invoices’ should be able to pay, that means that you typically could see them when you go to ‘Open Invoices’ screen under the customer side or employee side (Under a particular company).
Those open invoices are AT LEAST invoices with transaction type 5 or 11, active and they are not in PENDING status.
The result will be a list of paymentID and the amount (And a flag indicating if it is a partial amount or the full invoiceAmount)
Notes:
If you put an amount too big and you don’t have enough open invoices to pay, there will be an error.
If you put an amount that can’t pay the whole invoiceAmount, it will return the remaining value for that invoice and then.
The oldest invoices (based on dueDate) will be picked first.
Case 2
Now, based on information in case 1, you will know which invoices are going to be paid totally or partially.
Here we might need to use swagger because we need to use the same endpoint for making a deposit but sending a new flag in the body ‘applyToOpenInvoices’ in true.
When you make a deposit, if this flag is true, instead of making a deposit it would be the same behavior as if you selected them manually and click on ‘make payments’.
The same notes from case 1 applies to this case:
Notes:
If you put an amount too big and you don’t have enough open invoices to pay, there will be an error.
If you put an amount that can’t pay the whole invoiceAmount , there will be a partial payment (this means a payment.amountToPay will be updated to the remaining value)
The oldest invoices (based on dueDate) will be picked first.
KOD-26339: Give customer ability to set product order in company catalogs UX
Regression Tests
Case 1
On Categories on grid, list views.
Group and customer catalogs on grid, list and catalog views.
Make sure all items are loaded with no issues.
Make sure when dragging, no requests are made and items are not changing the order within the catalog or category.
Case 2
On categories and catalogs for grid, list (and catalog view for catalogs): make sure grid, list and table items (products) are loaded with no issues and all required info is available.
For logged in user:
Make sure you are able to add items to a cart with no issues from any page.
Case 3
For catalogs (if catalog items can be modified) - except for group catalogs - make sure you are able to remove items from a catalog with no issues.
Case 4
Make sure you cannot see error popup on categories page and on catalog pages (group, customer) in any case.
Make sure you cannot see error popups on company catalogs when there are no errors.
Tests
Case 1
Create a new Company Catalog. Add several items to it.
Check grid and list views.
Try dragging some catalog items while being on a grid or list view.
Go to the operations portal Catalog → Items. Make sure the catalog product order per each item was set properly.
Refresh catalog page.
Make sure all items that you have dragged stay in the correct places.
KOD-26373: Ticket #202 - New Contact Us form
Regression Tests
Case 1
Confirm that the page with the form loads without any issues.
Case 2
Confirm that the form can be submitted and that a request is sent with all the fields currently visible on the screen.
Case 3
Confirm that the form cannot be submitted unless all required fields are filled out.
Tests
Case 1
Confirm that the form includes checkboxes that can be selected.
For most checkboxes, clicking them does not change anything on the form.
Clicking the "Solutions" checkbox reveals a dropdown field where the user can select a value.
Clicking the "Returns" checkbox reveals a field for "Order Number".
Clicking the "Generators" checkbox reveals two fields: "Address" and "Power Provider".
Clicking the "Product Request for Quote" checkbox reveals an input field. Clicking this field opens a dropdown with filterable options.
Case 2
Confirm that when we click on one of the checkboxes above, update its related fields, then click another checkbox, the previously entered data remains unchanged.
KOD-26390: Implementation - Customer form
Regression Tests
Case 1
Confirm that you can navigate to the /spcu/customer-form page and see a form with input fields that can be filled out or modified.
Case 2
Confirm that you can switch between different /spcu pages, and they open and render correctly.
Tests
Case 1
Confirm that in order to submit the form, all fields must be filled.
Case 2
When the form is submitted, all field values are included in the request payload, including the recaptcha token and selected options like checkboxes and radio buttons.
Case 3
After successful submission, a success message is displayed.
If the submission fails, an error message is displayed.
KOD-26481: Customer (company) facing Analytics
Tests
Case 1
When you are logged in as a customer, you should see a new item in the header menu called ‘Stats’.
It should be a dropdown containing two items: Usage and Spend.
Case 2
For both new pages, Usage and Spend, check that:
They load correctly without issues.
Have a few filter options, like Warehouse, Department, GL Account, Date. (Will be different options per screen).
And that if there’s any data, it loads correctly.
KOD-26614: Endpoint to validate types against Customer Assets
KOD-26617: ERP Integration updates for payment methods
KOD-26671: InStock Filter
KOD-26686: Environmental Compliance Ticketing System Integration
KOD-26703: Automated Order Confirmation-Email Sending Response Created From Ticket 24748
Regression Tests
Case 1
Process order from purchase order:
POST /api/system/order/processOrderFromPurchaseOrder
Case 2
Process order automation event:
POST /api/system/event/awsEventManager
Tests
Case 1
POST /api/system/event/awsEventManager
Turn on setting - orderAutomationSendCustomerConfirmationEmail, email template to be used - wrappedAutomatedOrderCustomerEmail-EJS.
Confirmation email should be sent to all fromEmails and ccEmails of original order email saved on s3 excluding storeEmailAddress domain addresses.
Order’s warehouse setting used for ReplyTo email address configuration in order’s confirmation email: automatedOrderConfirmationReplyToAddress.
KOD-26722: Active Flag for Commission Records
KOD-26734: Customer App - Payment Flows
KOD-26793: Ability to capture a signature on a terminal from operations portal - UX
Regression Tests
Case 1
Operations Portal:
Make sure more buttons on the order works with no issues.
Case 2
Terminals grid and terminals details screen.
Make sure screens were loaded with no issues.
Make sure you are able to update all editable fields with no issues.
Tests
Case 1
Operations Portal:
Terminals grid:
Make sure in the column list you are able to see the Supports Signature field.
Make sure this column value is editable and on the grid it is a dropdown with 2 values Yes/No. (Yes → true, No → false)
Terminal details screen: make sure Supports Signature Field was added to the Settings section. Make sure it contains a dropdown with 2 values Yes/No.
Make sure you are able to update this field value from the details screen.
Case 2
Operations Portal:
Order tab:
Click more button. Make sure the Capture Signature button is added to the list.
Click that button.
Make sure on click you can see dialog with 1 input field (Terminal).
When you click on this field make sure we are making request to list all terminals which support signatures.
api/system/terminal/listWithLimitedFields POST request should be used with following filter fields: supportSignature true.
Case 3
With all the steps from case 2, click the Submit button from the dialog.
Make sure this request to capture signature is being used:
GET api/system/paymentProcessing/captureSignature, where correct orderID and terminalID are passed to the request.
On error - you should be able to see the error snacker. But dialog should stay on the page.
If it successfully captures a signature - you should be redirected to the order Customer Files where you can check the signature image.
KOD-26820: Price List download functionality Created From Ticket 26111
KOD-26906: Order / Invoice Documents
KOD-26919: Master order/budgets - Add customer notes and line comments
Tests
Case 1
Make sure next endpoints for adding INTERNAL notes to company budgets and their line items work as expected from Kodaris Operations using swagger.
POST /api/system/companyBudget/{companyBudgetID}/note
GET /api/system/companyBudget/{companyBudgetID}/note/{noteID}
PUT api/system/companyBudget/{companyBudgetID}/note/{noteID}
POST /api/system/companyBudget/{companyBudgetID}/note/list
To have a budget that has budget header with some budget lines
Steps:
Log into Operation platform.
From swagger execute every endpoint mentioned previously and validate that it’s creating, updating, reading and deleting properly the company budget notes as for budgets header as for budgets lines.
Case 2
Make sure next endpoints for adding customer notes to company budgets and their line items work as expected from Kodaris Operations swagger.
POST /api/system/companyBudget/{companyBudgetID}/customerNote
GET /api/system/companyBudget/{companyBudgetID}/customerNote/{customerNoteID}
PUT /api/system/companyBudget/{companyBudgetID}/customerNote/{customerNoteID}
POST /api/system/companyBudget/{companyBudgetID}/customerNote/list
To have a budget that has budget header with some budget lines
Steps:
Log into Operation platform.
From swagger execute every endpoint mentioned previously and validate that it’s creating, updating, reading and deleting properly the company budget customer notes as for budgets header as for budgets lines.
Case 3
Make sure next endpoints for adding customer notes to company budgets and their line items work as expected from Kodaris Customer Portal using swagger.
POST /api/account/companyAddressBudget/{companyBudgetID}/customerNote
POST /api/account/companyAddressBudget/{companyBudgetID}/customerNote/list
Pre-requirements:
To have a budget that has budget header with some budget lines
Steps:
Log into the customer portal.
From swagger execute every endpoint mentioned previously and validate that it’s creating and reading properly the company budget customer notes as for budgets header as for budgets lines.
KOD-26929: Ticket# 210 - Updating Install form
Regression Tests
Case 1
Confirm that the page with the "solutions section with form" template loads and displays correctly.
Case 2
Confirm that we can submit the form only if all required fields are filled in.
Tests
Case 1
Confirm that after filling in all the fields and clicking "Submit," we send a request containing all the fields.
KOD-26930: InforCSD COD Email Extension
KOD-26939: Quote Totals Missing
KOD-26958: Add Ability to Schedule Pages - (cache `startDate`, `endDate`)
Tests
Case 1
This feature involves cache, so the best way to test it, is to go to Operations Portal → CMS → Pages.
Then, find a page that has startDate and endDate filled previously (do not fill on time).
Execute this endpoint /api/system/contentPage/cache
In results, every row should return startDate and endDate (if they have). Check the page you saw in the operations portal and startDate and endDate should have the same value.
KOD-26965: Skip second tab during the PunchOut checkout
Regression Tests
Case 1
At cart:
With the regular checkout (for non-punchout users).
Make sure you are able to see at the top 2 nav buttons, by clicking on each of those buttons, you should be able to get exactly to the correspondent tab.
Next and previous buttons should work with no issues and should not skip 2nd tab Location.
Case 2
For punchout checkout make sure the first checkout tab with your order items and second (Delivery and Payment) are loaded with no issues.
Tests
Case 1
As punchout users go to the cart page.
Make sure at the top there are no 3 regular nav buttons to navigate between checkout tabs.
Click the next button. Make sure after clicking you can see the Delivery and Payment Section. And the Location section is skipped.
While being on the last checkout tab click the previous button. Make sure after click first checkout tab is loaded and not the Location tab.
KOD-26971: Form - Signed in User Flow Modifications
KOD-26978: Warehouse Selection at Checkout Created From Ticket 29925
Regression Tests
Case 1
Check that the checkout steps are working.
Check that there are no errors in the console during checkout.
Check that the order is being processed correctly.
Tests
Case 1
Login as a customer, turn on the setting to enable the warehouse selection section. Make sure that the layout on step 3 of the checkout looks correct.
Login as a customer, turn on the setting to enable the warehouse selection section. Make sure that the “Select Warehouse” section is displayed, when you click on the field in this section, a dropdown appears with the ability to select a warehouse.
Check that when selecting a warehouse, a request is executed containing the warehouse code that we selected.
Check the functionality when the setting is disabled (the section is not displayed).
KOD-26981: Allow for pretty auto code generation for products on product import
KOD-26992: New User Role Created From Ticket 29927
KOD-27014: Guest user lead times should match logged in ones
Regression Tests
Case 1
Check that the product page layout looks correct for both the guest and the user.
Check that there are no errors in the console.
Tests
Case 1
Check that the logic for displaying delivery time for a guest and a user is similar.
KOD-27021: Fraud Configuration screen - Remove UX for the options related to checkout blocking
Tests
Case 1
Go to the fraud configuration. The block checkout and checkout threshold should fields should not be present. On the network tab on the developer console the response should also not include the fields fraudDataBlockCartCheckoutWhenExceedFraudScoreThreshold and fraudDataCartCheckoutFraudScoreThreshold.
KOD-27027: Customer session logged in state issue From Ticket 29926
KOD-27030: Issue with order sourcing different cpu locations
KOD-27037: Implementation - Branding
KOD-27051: Order Automation screen - Update permissions
Regression Tests
Case 1
Check that there are no errors in the console when clicking on the Order Automation page.
Tests
Case 1
Check that the Order Automation page is viewable with the following roles:
superuser, administrator, settingView or settingEdit.
Check that the Order Automation page is not viewable without one of the above roles.
KOD-27061: Check Error when Viewing Location Details with viewAssignedLocations Permission
Regression Tests
Case 1
Navigate between all tabs in the location details page and confirm they load correctly without errors.
Case 2
Assign and unassign a location to a user. Confirm visibility updates accordingly after each change.
Case 3
Create a new budget entry and verify it appears in the list and persists after refresh.
Case 4
Edit an existing budget and confirm the update is reflected correctly.
Case 5
Use the search functionality to filter budget items. Confirm it filters and resets as expected.
Case 6
Change column order and sort data. Confirm both actions work as expected.
Tests
Case 1
Access the location details page with only the viewAssignedLocations permission. Confirm the page loads correctly, no error occurs, and the budget tab is not displayed.
Case 2
Access the location details page with the companyAdmin role assigned. Confirm the budget tab appears, the total spend is displayed, and the budget request is successfully made.
KOD-27068: Replace Customer Asset ID with Asset Name in Order Items
Tests
Case 1
Validate fields customerAssetCode and customerAssetName are being properly populated for in each order item retrieved in the response of the endpoint /api/system/order/{orderID}/items
Steps:
From Kodaris operations portal, go to the Orders screen.
Select an order, go to Order Items tab and make column Customer Asset ID visible to make sure there’s at least an item with customer asset set (if no, you can add it).
Open browser dev-tools and go to the Network tab.
Click on the refresh button from the order items' table.
Verify that the response contains the fields customerAssetCode and customerAssetName.
Properly populated for those items that have a customerAssetID set.
KOD-27070: Update Items Links on Order Details to Appear Clickable
Regression Tests
Case 1
In Orders on the customer portal check if links for products are working correctly.
Tests
Case 1
Check if the link to the product from the order on the customer portal is underlined and if they have set a primary dark color.
KOD-27071: Interceptor For Customer Side Tickets (patch)
KOD-27074: Contact Us Page Tweaks
KOD-27076: Parser from Ticket 30506
KOD-27078: Parser Ticket 30659
KOD-27080: Add a button in UX to Sync Physical Terminals
Regression Tests
Case 1
Make sure the terminal grid works with no issues.
Make sure you are able to get to the terminal details screen from the grid.
Make sure the terminal details screen is loaded with no issues. Make sure you are able to update terminal details from the details screen.
KOD-27082: Add listPrice - From Sku (warehouse record) to dropdown menu
KOD-27086: Do not allow importing customers without a Company
KOD-27089: Map Storeroom Department Table
KOD-27090: Geocode order during checkout after the user updates the address information
KOD-27097: Confidential File Upload UX
Regression Tests
Case 1
In Customer Portal Documents Screen:
Make sure Attach File Button works with no issues. Make sure when you attach a file using the Attach File button - it uploads the file to the company documents and on success you are able to see this file in the Documents grid.
Tests
Case 1
In Customer Portal Documents Screen:
Make sure you can see the Actions button at the top.
This button should contain a dropdown with 2 buttons: Attach File (covered in regression case) and Attach Confidential File.
Click the Attach Confidential File button.
Make sure you can see a regular UI to attach files from your device. Select any .pdf, .txt, .csv file and upload it. Make sure on success you can see dialog with the message:
Your Confidential File has been successfully uploaded.
Please note: you will not see confidential documents in your documents list as they are kept confidential.
Check Operations Portal Internal Files global screen.
Make sure you can see your uploaded confidential file in the global Internal Files grid.
KOD-27098: Will Call value error Created From Ticket 29303
KOD-27103: Update the operations portal to use a new terminal list endpoint in places where the terminals are shown as a selection option
Regression Tests
Case 1
While paying the order via the terminal make sure we are passing correct terminalID in the request payload.
Tests
Case 1
On the Order Details screen.
Click Pay order. Select Terminal option to pay the order.
Open Network Tab.
Click at the Terminal field in the form.
Make sure to list all physical terminals this endpoint was used:
api/system/terminal/listWithLimitedFields
KOD-27104: Add an endpoint to sync terminals by terminalID
KOD-27107: Add Total Paid to the sidebar on the Account Receivable Details screen
KOD-27108: Embedded Data - Created From Ticket 30637
KOD-27112: Strange character in footer by copyright
Regression Tests
Case 1
Confirm that the website loads without errors and that the footer is visible.
Tests
Case 1
Confirm that the copyright icon in the footer is displayed correctly.
KOD-27114: Add Company Table Record Settings Screen
Regression Tests
Case 1
Go to the company records screen in the operations portal.
Make sure everything works as expected without issues.
Tests
Case 1
Check that the Company Records tab in the side menu is now below Company Pages.
Like in the screenshot in the ticket description.
Case 2
Go to the Company Records > Record > Detail screen.
There should now be a new tab there called ‘Custom Fields’.
Case 3
Navigate to the Custom Fields tab, and make sure you can add, update, and delete settings without issues.
KOD-27115: Customer parser From Ticket 29173
KOD-27117: Configure Countries / States
KOD-27118: Configure Customer Portal
KOD-27119: Implementation - Branding
KOD-27127: Counter sales invoices will be included in automated invoice delivery
Regression Tests
Case 1
Navigate to the Automated Invoice Delivery screen, check that you can still update any field, then click on the ‘save’ button and changes should be applied.
Tests
Case 1
Navigate to Automated Invoice Delivery screen, scroll down to Order Type field. Verify that you can see the new available value ‘Counter sale'. Choose this, click on the ‘save’ button and changes should be applied.
KOD-27142: Add listPrice - From Sku (warehouse record) to dropdown menu - UX
KOD-27143: New Product Tag
KOD-27145: Reinstall repository
KOD-27146: Content polishing
Regression Tests
Case 1
Confirm that the footer is displayed correctly, and that if we add more elements there, they will be added to the existing column.
Confirm this for tablets and mobile phones as well.
Tests
Case 1
Confirm that the default template will not have breadcrumbs.