Back to releasesarrow_right_alt

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.
  • Added focused bulk material-item controller tests.
  • 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