Bulk Updates to Projects and Materials, with further updates to UI Components
September 2, 2026
Update date filters to purchase order selection
Adds earliest and latest update-date filtering to the Private API purchase-order list, allowing integrations to request only purchase orders changed within a UTC time window.
What changed
Added `earliestUpdateDateUtc` and `latestUpdateDateUtc` query fields to `GET /api/purchase-orders`.
Maps the new Private API filters to the legacy purchase-order query.
Filters purchase orders by successful audit events recorded against the purchase order, before results are paged.
Added focused controller coverage for forwarding the update-date window.
Bulk create and update endpoints for projects
Adds bulk create and update support for Projects in the Private API.
What changed
Added `POST /api/projects/bulk` and `PUT /api/projects/bulk`.
Returns per-project success/error results so valid rows can continue when another row fails.
Added focused controller tests for bulk creation and invalid update IDs.
Bulk create and update endpoints for materials
Adds bulk create and update support for actual project material entries in the Private API.
What changed
Added `POST /api/materials/bulk` and `PUT /api/materials/bulk`.
Returns per-item success/error results for partial-failure handling.
Added focused controller tests for bulk creation and invalid update IDs.
Bulk create and update endpoints for material items
Adds bulk create and update support for material items in the Private API, and removes the duplicated Material Entry link in Project Console.
What changed
Added `POST /api/material-items/bulk` and `PUT /api/material-items/bulk`, with per-item result reporting.
Removed the duplicate Material Entry action from Project Console.
Last customer sale date and update related queries
Shows the customer’s most recent qualifying purchase date alongside their last-used price on Sales.
What changed
Added the dispatched sale date to predicted availability and displayed it in the Sales sidebar.
Restricted both the price and date lookup to dispatched, non-credit sales.
After
Support for exporting invoice discounts as separate line items
Adds a Xero global accounting setting to choose whether invoice discounts are exported on their source line or as separate discount line items.
What changed
Added the persisted Accounting Setup setting, Xero export wiring, UI toggle, and regression tests.
Immediate stock shortfall calculations and updated UI components
Assembly components now show an immediate physical-stock shortfall even when incoming purchase-order stock makes predicted availability positive.
What changed
Added physical availability and immediate-shortfall calculation, display, warning state, and unit coverage while preserving existing On PO and predicted availability values.
After
MaterialItemStockCover model, service method and UI components
Material Items previously showed the same outstanding-PO table from both the On Order hover and Purchase History button. The On Order interaction is now a location-aware stock-cover summary, while Purchase History remains the detailed PO view.
What changed
Added a location-specific stock-cover calculation for on-hand stock, outstanding POs, commitments, net stock, reorder level, next ETA, and supplier.
Replaced the On Order hover with a viewport-fitted Stock Cover dialog and retained the existing Purchase History dialog.
Added focused tests for stock-cover shortage calculations.
After
Material item transaction history API and model
Adds a supported Developer API endpoint for a material item's stock transaction history.
What changed
Added `GET /api/materialitems/{id}/history`, reusing the existing material-transaction history query used by the WebClient popup.
Added a JSON response model and .NET API client method for the endpoint.
Unit tests for sales, purchasing, accounting and time tracking
Adds an initial database-free test suite for Tidy’s core business calculations and records the roadmap for broader coverage.
What changed
Added sales total tests covering tax, discounts, rounding, margin, and sale creation.
Added invoice-number, time-entry, and purchase-line validation tests.
Added a core business test plan covering sales, accounting, purchasing, projects, time, materials, customers, and suppliers.
Make sale line description refresh opt-in
Restored custom sale and quote line descriptions as the default behaviour, while retaining an opt-in setting for organisations that want linked lines refreshed from their Material Item details.
What changed
Added a Sales & Purchases global setting to control whether linked sale-line descriptions refresh from Material Item name, code, and reference.
Defaulted the setting to off so MISC and other custom quote descriptions are preserved.
Gated the 7 August description-refresh logic behind the new setting.
After
Exclude assembly movements from creating accounting journals in adjustment
Prevented assembly stock movements from exporting to the external accounting system as stock-adjustment journals.
What changed
Excluded Assembly and Assembly Component material transaction types from the shared adjustment-journal export helper.
Stock visibility and component resizing in BOM assembly
Prevent the optional assembly component stock display from failing on duplicate availability rows, and make the component list use the available Assemble dialog height.
What changed
Consolidate duplicate availability rows only when assembly component stock visibility is enabled.
Resize the Assemble component list to fill the available dialog height and recalculate it after dialog resizing or validation errors.
Add material item name and reference to sale line summary and update description
Linked sales retained the old saved line description after material descriptions were streamlined. Sale lines now rebuild from the current linked material name.
What changed
Added current material name and reference to sale-line summaries.
Applied the configured sales line format when loading linked sale lines.
Enhanced import functionality with error handling and reporting improvements
Bulk CSV imports now clearly identify malformed file rows instead of silently skipping them, helping users correct the right line before retrying.
What changed
Stop imports safely when a CSV row cannot be read, showing its file line and a plain-English quote-formatting hint.
Label validation-result row numbers as “File line” across all bulk import types.
Sales Invoice report generation and error handling improvements
Simplified the terminal Sales Invoice PDF error so customers receive clear, actionable guidance without provider or report implementation details.
What changed
Replaced the source-by-source failure list with a concise template/accounting-connection message.
Before
Add batch number filtering for material items and updated UI components
Adds serial-number search for organisations using batches as serial numbers, and improves batch history navigation to sales records.
What changed
Added a Batch/Serial Number field to Material Items advanced search, using existing batch data.
Restricted the search to organisations with the Batches feature enabled.
Added sales-record links to existing batch movement history.
Before
After
Minor Fixes & Release Notes
Updated ImportAssemblyService to handle null page filter in ImportAssemblies
Added MaterialItemStockCover view to project file
Update calculation logic for purchase order totals to use correct prices
Prevent accounting journal creation for assembly movements
Sort customer pricing charges by customer name
Update dialog event handling for batch assembly resizing
Implemented refresh logic for sale assembly stock and update script reference
Enhanced stock availability logic to support committed stock protection availability