Features
New Delivery Report β React Migration with Postgres-Based Reporting
Grasshopper 3.26.02 Release Notes
Overview
The existing Delivery Report experience is composed of two related views: an aggregated report at the shipper level and a detailed report at the single-shipper level. To improve performance, scalability, and long-term maintainability, this enhancement introduces a new React-based Delivery Report.
The new report will run in parallel to the existing version for a period of time, allowing teams to validate parity while benefiting from improved responsiveness, richer controls, and better support for invoicing workflows.
Key Enhancements
1. New Delivery Report in Analytics
β Added a new report under Analytics β New Delivery Report.
β Runs in parallel to the legacy Angular report during the transition period.
2. First Page β Shipper Summary View
The first page provides an aggregated shipper-level overview.
Summary Boxes
β Total Orders
β Total Charges
Filters
β Date Picker
β Similar behavior to On Time Performance reports β Date selection limited up to yesterday
β Shipper Name
β Search-as-you-type
β Terms
β Pending Invoice
β Undated
Grid Columns
β Checkbox
β Shipper Name
β Terms
β Delivered
β Rejected
β Damaged
β Failed
β Returned
β Disposed
β Total (orders & amount)
β Avg Per Order
Additional Behavior
β Summary line that totals every column
β Last Updated timestamp displayed at the report level
Actions
β Refresh whole page
β Pre-Invoice
β Copy
β Export
β Create Invoice
3. Second Page β Single Shipper / Carrier Detailed View The second page provides detailed order-level reporting and invoice management. Performance & Page Handling
β Increased rows per page support
β Allows up to 500 rows per page
β Supports pagination with page size options:
β 25
β 50
β 100
β 500
β Resolved timeout scenarios when creating one invoice for many orders
General Enhancements
β All columns can be:
β Shifted / reordered
β Sorted
β Users can save their view
β Last Updated timestamp displayed at the report level
Summary Boxes
β Total Orders
β Total Charges
β Total Invoiced (orders and amounts)
β Pending Invoice (orders and amount)
Filters
β Date Picker
β Include Undated Deliveries
β The undated delivered are the ones updated in the last 365 days
β Status
β Terms
β Pending Invoice
β Billing Subtypes
β Zero Price (Revenue = 0)
4. Detailed Grid Structure Main Columns
Default visible columns include:
β Checkbox
β Order ID
β Invoice
β PO / Ref
β Delivered
β Status
β Items
β Service Level
β Revenue
β Manifest ID
β Manifest Name
β Carrier Name
Additional Columns (Under βMoreβ)
β Parent ID
β Linked
β Terms
β Customer Name
β Origination
β Region
β Weight
β Value
β Cube
β Payment Status
β Order Stop
Interactive Behavior
β Order ID opens the Order Drawer
β Linked column opens the link tree (subject to final UX implementation)
5. Actions on Detailed View
Supported actions include:
Single-Order Actions
β Add Payment Notes
β Transaction Details
Bulk / Report Actions
β Refresh whole page
β Pre-Invoice
β Mark as Paid
β Reprice Orders
β Reprice Orders and overwrite current pricing
β Export
β Create Invoice
6. Transaction Details Popup
β Added a new popup frame for Transaction Details
β Displays transaction information in a clear and simplified layout
β Improves visibility into billing and payment-related details
API Enhancement β Support Receiving Hours on Order Creation
Overview
Some customers require the ability to specify receiving hours when creating orders, particularly for delivery and pickup-return scenarios. While this capability already exists on the Tracking Page, it was not previously available via API integrations.
This enhancement extends the Order Creation API to support optional receiving hours, enabling partners to define preferred time windows directly at order creation while maintaining full backward compatibility.
Key Enhancements
1. Optional Receiving Hours in Order API
β Added support for two optional fields:
β requested_hours_from
β requested_hours_to
β Fields can be provided:
β Individually (from only or to only), or
β Together (from + to)
This ensures flexible input aligned with real-world customer requirements.
2. Backward-Compatible API Extension
β The API schema is extended without breaking existing integrations.
β Orders can still be created without providing receiving hours, with no impact on current workflows.
3. Validation Rules for Receiving Hours
The API validates receiving hours to ensure data integrity:
β Valid time format required (e.g., rejects invalid values like 25:00)
β βFromβ must not be later than βToβ
β Time range must not exceed the daily 24 hours
β If the provided range is less than 60 minutes, it is automatically adjusted to 60 minutes
If validation fails, the order is rejected with:
βInvalid input fields β receiving hours are invalidβ
4. Timezone Handling
β Receiving hours are interpreted based on the timezone of the delivery address.
β Ensures consistency with routing and scheduling logic.
5. Business Hours Independence
β Receiving hours outside standard business hours (08:00β18:00) are still accepted.
β These values are stored as requested hours, with no automatic restriction or override.
6. Scope of Application
β Receiving hours apply only to:
β Delivery orders
β Pickup return orders
β Supported at the requested level only (required hours are out of scope).
7. UI Integration
β Provided receiving hours are displayed on the Tracking Page under Requested Hours. β Ensures visibility for both customers and operational teams.
Feature Enhancements
Warehouse Dashboard β User Activity Page Overview
To improve operational visibility and performance tracking at the warehouse level, a new User Activity page has been introduced.
This page provides a centralized, hub-level view of user activity, aggregating key warehouse actions such as picks, loads, unloads, counts, and moreβenabling supervisors and admins to monitor productivity and identify trends in real time.
Key Enhancements
1. New User Activity Page in Warehouse Dashboard
β Added a new navigation entry:
β Warehouse Dashboard β User Activity
β URL: warehouse/user-activity
β Page is accessible to the following roles:
β Super Admin
β Grasshopper Admin
β Supervisor
β Inventory
2. User Activity Grid
The page displays a per-user activity summary with the following columns:
β User Name
β Picks β total pick scans
β Loads β total load scans
β Unloads β total unload scans
β Counts β cycle count and allocation scans
β Relocates β relocate scans
β Inspections β inspect scans
β Assembly β assembly-related scans
β Issue Handling β includes:
β Failed Deluxe
β Dispose
β Repairs
β Repair Quote
β (Tooltip added to explain scope)
β Total Scans β sum of all user actions
Sorting:
β Default sort by User Name (AβZ)
3. Advanced Filtering
Available Filters:
β Date
β Date picker (default: Today, real-time data)
β Restrictions:
β Cannot select future dates
β Cannot select dates older than 4 months
β If selecting a range that includes today and multiple days β show warning
β Hub
β Single-select, searchable
β Cannot be cleared
β Follows same logic as Location Report
β User Name
β Multi-select dropdown with search
β Automatically resets when Hub selection changes
4. CSV Export
β Users can export the current grid view to CSV
β Export respects:
β Active filters
β Current dataset
5. Last Updated Indicator
β Displays the last update time in hh:mm AM/PM format
Logic:
β If Today is selected β show current time (βNowβ)
β Otherwise β show latest update timestamp from Postgres
β Includes a Refresh button to fetch the latest data
Scope
Not Included:
β User performance scoring or KPIs
β Drill-down to individual scan events
β Cross-hub aggregation
Lasso β Improved Handling for Return Orders and Tag-Along Followers
Overview
Recent production issues revealed incorrect lasso behavior for return orders, particularly in scenarios where items are rejected during delivery or when return orders are part of tag-along relationships.
In some cases, return orders were automatically lassoed (triggering customer communications) even though the driver was already on-site collecting items, or when the order was a tag-along follower that should inherit scheduling from its parent.
This enhancement introduces stricter controls to ensure that lasso and scheduling actions are applied only when appropriate, reducing unnecessary communication and preventing incorrect operational flows.
Key Enhancements
1. Block Lasso for Tag-Along Followers
β Auto Lasso is disabled for tag-along follower orders.
β Followers now inherit scheduling directly from their parent order, ensuring consistent behavior.
2. Block Manual Lasso on Tag-Along Followers
β Users are prevented from manually triggering lasso on follower orders. β The lasso icon is disabled or removed where applicable.
β Users attempting the action receive the message:
βLasso can not be ordered for tag-along followerβ
3. Block Manual Scheduling on Tag-Along Followers
β Manual scheduling actions are also blocked for follower orders.
β The same validation message is displayed to ensure clarity and consistency.
4. Refined Auto Lasso Behavior for Return Orders
β Auto lasso is no longer triggered immediately when return orders are created (e.g., Return to Vendor or Return and Dispatch scenarios).
β Instead, Auto Lasso for return orders is handled exclusively by the plugin.
This ensures that:
β When items are rejected and picked up on-site, they are already in Transit Return status
β Unnecessary lasso communication (email/SMS) is avoided
Shipper Portal β Disable Retailer Edit Permissions After Order Receipt
Overview
Previously, shippers (retailers) with edit permissions could modify order and item details in the Shipper Portal at any stage of the order lifecycleβincluding after the order had already been received at the hub.
Post-receipt edits created operational risks such as mismatched manifests, delivery inconsistencies, and data integrity issues.
This enhancement introduces a read-only guardrail that prevents shipper-side edits once the order progresses beyond early inbound stages, ensuring data consistency and protecting downstream operations. In case of locked order the shipper may contact the retailer for order editing.
Key Enhancements
1. Status-Based Read-Only Enforcement
β Shippers can edit orders only when the order is in:
β Pending Arrival
β Pending Pickup
β When the order transitions to any other status:
β The order becomes read-only in the Shipper Portal.
2. Order-Level Field Restrictions
When the order is no longer editable, the following fields are locked:
β Customer Address Information
β Street Address
β Apt / Unit
β Zip Code
This prevents post-receipt changes that could impact routing, labeling, and delivery execution.
3. Item-Level Editing Disabled
β All fields in the Item (Line Item) modal become read-only.
β The Save button is hidden.
β An informational message is displayed:
βThis order has been received at the hub and can no longer be edited. Contact your licensee to change order details.β
4. Return Orders Are Fully Non-Editable
β For Return to Vendor and Disposition orders:
β No editing is allowed at any stage from the Shipper Portal.
β These orders represent items already in consignee possession and must be managed by the carrier.
5. Reserved Status Handling
β Items in Reserved status behave as read-only, consistent with other in-warehouse states.
β Prevents modification of items already allocated or processed within warehouse workflows.
Feature Enhancements
Inventory β SKU View Enhancements (PO Search & Retail Value Visibility)
Overview
To improve usability and visibility in the Unallocated Items β SKU View, several enhancements have been introduced based on customer feedback.
These updates enable users to search by PO number and gain better financial insight through retail value calculations, aligning the new React experience withβand improving uponβthe legacy Angular capabilities.
Key Enhancements
1. PO-Based Search in SKU View
β Enhanced the SKU search functionality to support PO number search.
β Search behavior:
β Supports βstarts withβ matching for PO values
β Integrated into the existing search field (no additional filters added)
UI Improvements
β Updated search placeholder text to:
βSearch by SKU or POβ
Search Logic Update
β Replaced Regex-based search with text-based search:
β Improves performance
β Simplifies behavior
β Reduces technical debt
2. Total Retail Value in SKU View
β Added a new column: βTotal Retail Valueβ
β Position: To the right of the Shipper column (last column)
Calculation
β Represents the sum of retail value across all items within a SKU
Export Support
β Included in SKU View CSV export
3. Retail Value in Item View
β Added a new column: βRetail Valueβ in the Items View grid
β Position: To the right of the Condition column
Export Support
β Included in Items View CSV export
Warehouse Outbound Report β Total Route Time Visibility Overview
Previously, the Warehouse Outbound Report provided visibility into Route Time, which represented only the driving portion of a route.
Customers requested the ability to understand the full route duration, including both driving and service time, to gain a more accurate view of operational timelines.
This enhancement introduces a new Total Route Time metric while clarifying the existing metric as Total Driving Time, improving reporting accuracy and transparency.
Key Enhancements
1. Clarified Existing Metric
β Renamed existing Route Time to:
β Total Driving Time
β Continues to represent drive time only (no change in calculation).
2. New Column: Total Route Time
β Added a new column:
β Total Route Time
β Represents the full duration of the route, including:
β Driving time
β Service time at stops
Defect Fixes
Bug Fix: Improved Unload Performance in Warehouse Mobile App
Overview
Warehouse associates reported severe performance issues during the Unload workflow in the Warehouse Mobile app when scanning items belonging to large orders (more than 50 items). In these cases, each scan could take 30β45 seconds to process, especially when the order contained dozens of items, causing major operational delays and a poor warehouse experience.
This fix focuses on server-side optimization of the Unload API, significantly reducing scan latency and restoring a fast, responsive unload flow even for heavy manifests and large orders.
Key Fixes
1. Unload API Performance Optimization
β Optimized the server-side logic behind the Unload action to reduce processing time per scan.
β Improved response handling for orders with a high number of associated items.
2. Reduced Scan Latency for Large Orders
β End-to-end unload scan time was reduced from 30β45 seconds per scan to a target of 2β3 seconds maximum.
β Applies specifically to heavy manifests and large-order scenarios that previously caused the greatest delays.
3. Preserved Performance for Standard Workflows
β Ensured there is no regression for normal orders and standard unload scenarios.
β Existing fast scan behavior remains intact and may also benefit from the backend improvements.
4. Improved Warehouse User Experience
β Warehouse users now receive near-immediate feedback after scanning.
β Reduces bottlenecks during unload operations and improves productivity in high-volume environments.
Bug Fix: Prevent Duplicate Zip Code Assignment Within the Same Region
Overview
Grasshopper supports multi-region zip code assignment, allowing the same zip code to be associated with different regions (hubs). However, within a single region, a zip code must remain unique and can be assigned to only one sub-region.
Production investigation revealed cases where the same zip code had been mistakenly assigned to multiple sub-regions within the same region, creating invalid configurations and operational inconsistencies.
This fix introduces both data cleanup and system enforcement to ensure zip codes remain unique within a region while preserving valid multi-region behavior across different hubs.
Key Fixes
1. Production Data Cleanup
β Identified all existing cases where the same zip code appeared more than once within the same region.
β Prepared a review list of corrupted assignments, including the duplicated Canadian zip code cases.
β The Cleanup process now supports removal of invalid duplicate records after business review.
2. UI Validation Before Save
β Added validation in the UI to block users from saving a zip code that is already assigned to the selected region.
β Validation is performed before persistence, reducing user confusion and preventing invalid data entry.
4. Preserved Multi-Region Behavior
β The fix applies only within the same region.
β Zip codes can still be assigned to different regions, maintaining the intended multi-region capability.
Bug Fix: RTBS Orders Incorrectly Populated βOffered Atβ and βFirst Available Manifestβ Without Communication
Overview
In certain scenarios, orders marked as RTBS (Ready to Be Scheduled) were automatically populated with βOffered Atβ and βFirst Available Manifestβ valuesβeven when no communication (SMS/email) was sent to the consignee.
This created misleading data in the Other tab, suggesting that scheduling communication had occurred when, in fact, it had not.
The issue commonly occurred when consignee contact details were missing (e.g., no phone or email), or when communication was otherwise suppressed due to configuration or timing constraints.
Key Fixes
1. Conditional Update Based on Communication Execution
β The system now updates βOffered Atβ and βFirst Available Manifestβ fields only when communication is successfully triggered.
β If no communication is sent, these fields remain empty.
2. Accurate Representation of RTBS State
β Orders can still be correctly marked as RTBS even when communication is not sent.
β However, scheduling-related metadata is no longer populated unless a valid communication event occurs.
3. Covers Multiple No-Communication Scenarios
The fix applies to all cases where communication is not sent, including:
β Missing consignee contact details (phone/email)
β Shipper configuration disabling communication
β Communication outside allowed working hours
Bug Fix: Unable to Access All Linked Orders Due to Missing Scroll in Linking UI
Overview
Users reported that in the Linked Orders UI, it was not possible to scroll through the full list of linked orders.
When an order had multiple relationships (e.g., 7+ Tag-Along orders), users were unable to view or access all linked entries, limiting visibility and preventing further actions such as adding or managing links.
This issue impacted multiple relationship tabs and reduced the usability of the newly introduced Linked Orders experience.
Key Fixes
1. Added Vertical Scrolling Across All Tabs
β Implemented vertical scrolling support in the Linked Orders UI.
β Users can now scroll through all linked orders regardless of list size.
2. Full Access to Tag-Along Relationships
β Verified that orders with 7+ Tag-Along followers can now:
β Be fully viewed
β Be accessed
β Support adding additional links
3. Consistent Behavior Across All Relationship Tabs
Scrolling is now fully supported in:
β Tag-Along Orders
β Source / Derived Orders
β Related Orders
Ensures consistent usability across all linkage types.
Bug Fix: Enforced Pickup Information Validation for Return Orders (API & Import)
Overview
Orders of type Return / Pickup were being created without required pickup information, resulting in incomplete and invalid orders.
In some cases, these orders were incorrectly treated as FOB or routed as standard last-mile deliveries, leading to scheduling errors, routing issues, and data inconsistencies.
This fix introduces strict validation to ensure all required pickup details are provided during order creation via both API and Import flows.
Key Fixes
1. Mandatory Pickup Information for Return Orders
When creating an order with Return / Pickup type, the following fields are now required:
β Pickup Zip
β Pickup Address1
β Vendor
If any of these fields are missing, the order creation is blocked.
2. Import Validation & Error Handling
β During Import Preview:
β Missing required pickup fields are clearly marked as βMissingβ in the relevant cells.
β On submission:
β Orders with missing pickup information are rejected.
β No invalid orders are created.
β Users receive a clear validation message, such as:
βPickup Address is required for Stop Type 2.β
3. API Validation
β In the Create Order API:
β Requests missing required pickup information for return orders are rejected. β The specific order is not created.
β Ensures consistent validation across all integration paths.
4. Prevent Incorrect Order Classification
β Eliminates cases where incomplete return orders were:
β Misclassified as FOB
β Routed incorrectly in last-mile workflows
β Ensures proper scheduling and routing behavior from creation.
Bug Fix: Batch BOL Single Document Missing Shipper, Ship To, and Consignee Information
Overview
Users reported that when downloading a Bill of Lading (BOL) for multiple orders as a Single Document, several key fields were incorrectly displayed as N/A.
Specifically, the generated document did not properly populate the Shipper, Ship To, and Consignee sections, reducing document quality and creating confusion for operational and customer-facing workflows.
Key Fixes
1. Corrected Data Mapping in Batch BOL Single Document Generation
β Updated the single-document BOL generation flow to correctly populate:
β Shipper
β Ship To
β Consignee
β Eliminated the incorrect fallback to N/A when the required order data exists.
2. Fixed Multi-Order Merge Logic
β Corrected the logic used when combining multiple orders into a single BOL document. β Ensures order-level party information is carried into the final output consistently.
3. Preserved Behavior Across Standard Download Flows
β Fix applies specifically to:
β Orders Grid
β Multi-order selection
β Download BOL β Single Document
β Existing BOL generation flows outside this path remain unchanged.
Bug Fix: Rescheduling Reason Prompt Appeared for Freight Manifests
Overview
Users reported that when removing an order from a Freight Manifest, the system incorrectly prompted for a rescheduling reason.
This behavior is intended only for Last Mile Manifests, but was being triggered for Freight flows when the advanced setting βRequire a reason for reschedulingβ was enabled. This caused confusion and unnecessary friction in freight operations, where rescheduling justification is not required.
Key Fixes
1. Restricted Rescheduling Prompt to Last Mile Only
β The rescheduling reason popup is now triggered only for Last Mile manifests.
β Freight manifest workflows no longer invoke this requirement.
2. Correct Handling of Advanced Setting
β The setting βRequire a reason for reschedulingβ now applies strictly to:
β Last Mile manifests
β It is ignored for:
β Freight manifests
3. Improved Workflow Consistency
β Removing stops from Freight manifests now behaves as expected:
β No additional prompts
β No unnecessary user input required
Bug Fix: Receiving Items Without Location Selection in Web App
Overview
Users were able to mark items and orders as Received in a selected Region/Hub without specifying a Location.
This resulted in inventory being marked as received but not physically locatable, leading to inaccuracies in warehouse operations such as picking, putaway, and audits.
The issue affected multiple receiving entry points in the web application, including both item-level and order-level (βReceived in Terminalβ) workflows.
Key Fixes
1. Enforced Location Selection on Receive
β The Location field is now mandatory when marking items or orders as received.
β Users cannot complete the receive action without selecting a valid location.
2. UI Enhancements for Location Input
β Added a Location selector to all receiving dialogs.
β Behavior:
β Disabled until a Region/Hub is selected
β Once enabled:
β Displays locations for the selected region
β Sorted A β Z
β Supports autocomplete search
β Single selection only
β The Confirm / Next button remains disabled until a valid location is selected.
3. Applied Across All Receiving Entry Points
The fix applies consistently to:
β Item-level receive (Items tab)
β Order-level receive (Received in Terminal)
β Item edit β mark as received
4. API Validation & Enforcement
β Receiving API now requires location_id:
β If missing β request is rejected with:
βLocation is requiredβ
β If location does not belong to selected region β rejected with: βLocation does not exist in selected regionβ
5. Correct Data Persistence
β On successful receive:
β Items are assigned to the selected location_id
β Ensures accurate tracking and warehouse visibility.
6. UI Error Handling
β User-friendly error messages are displayed when API validation fails.
β Prevents silent failures and improves user clarity.
Bug Fix: Incorrect Display and Handling of Tag-Along Return and Service Orders in Manifest Content
Overview
A production issue was identified where Tag-Along combinations of pickup-return and service orders were incorrectly displayed and handled in the Manifest Content tab. Mixed stops (e.g., pickup + service) were treated purely as pickup stops, causing the routing engine to derive the address incorrectly and leading to scheduling and linking failures.
This issue impacted complex stop scenarios and resulted in incorrect routing behavior and confusion in manifest representation.
Key Fixes
1. Correct Handling of Mixed Stop Types
β Updated logic to properly support mixed order types within a single stop, mainly: β Pickup + Service
2. Parent Order Determination
β For pickup-return + service combinations:
β The pickup-return order is now enforced as the parent
β The stop type is correctly identified based on the parent
3. Accurate Manifest Entry Type
β Mixed pickup-return and service stops are now displayed as:
β βP&Sβ (Pickup & Service)
β Ensures clear and accurate representation in the Manifest Content tab.
4. Correct Address Resolution for Routing
β The routing engine now derives the stop address from the parent order (pickup).
β Prevents incorrect address selection when multiple order types exist in a single stop.
5. Validation of Customer Address Consistency
β Tag-Along linking for pickup-return and service orders now verifies that: β Both orders share the same customer address
β Prevents invalid or mismatched link scenarios.
6. Improved Entry Details Visibility
β Manifest entry details now correctly display:
β All items associated with the stop
β Including both parent and follower orders
β Supports both existing service orders and newly added service items.
Bug Fix: Tag-Along Unlink Not Properly Synced with VC and Partner Systems
Overview
A production issue was identified where unlinking Tag-Along orders did not correctly propagate to Virtual Carrier (VC) and partner systems.
As a result, unlinked orders could remain scheduled on manifests or retain outdated pickup scheduling information, creating inconsistencies between Grasshopper, VC, and partner systems.
Key Fixes
1. Manifest Update on Unlink
β When a scheduled follower order is unlinked:
β The order is now automatically removed from the manifest
β Ensures the manifest accurately reflects the current order relationships.
2. Pickup Schedule Cleanup for Return Orders
β For pickup-return orders:
β Unlinking now removes the scheduled pickup date from the pickup address
β Prevents residual scheduling data after unlinking.
3. VC Synchronization
β The unlink action now correctly publishes an event to VC.
β Ensures VC receives the updated linking and scheduling state.
4. Partner System Synchronization
β VC now properly propagates the unlink event to partner systems.
β Partner environments reflect:
β Updated linking status
β Updated scheduling state
5. End-to-End Data Consistency
β After unlinking:
β Grasshopper (GH), VC, and partner systems all display consistent order relationships and scheduling status
β Eliminates mismatches between systems.