Flexible allocation splitting and bill editing

Split any allocation regardless of its source, and edit bills after creation.

Allocation splitting is no longer limited to orders. A new allocationSplit mutation lets you split any allocation — orders, transfers, or purchase returns — by breaking out line-item quantities into a new allocation. The order-only orderAllocationSplit is now deprecated in its favour.

Bills can now be edited after creation with a new billUpdate mutation, covering reference, supplier, dates, locations billed to, line items, and costs. Sensible guards apply: a line item's quantity can be reduced but not below what's already been received, and already-received line items can't be removed.

  • Purchase orders and bills now support a transaction currency and exchange rate, for recording purchases from foreign suppliers in the currency they invoice in.
  • A bill can now be associated with multiple locations, reflecting purchases that span more than one site.
  • A new purchaseReturnUpdate mutation allows updating a purchase return's reference after creation.
  • Purchase returns now expose a scannable idQR identifier, consistent with other objects.
  • Replenishment can now pick to an intermediate location (such as a trolley) and then put items away to their pick faces, for warehouses where replenishment stock and pick faces are far apart.
  • Replenishment can now be scoped to a sub-location (such as an aisle or zone), so multiple operators can replenish different areas without overlapping work.
  • A sales channel product now supports a quantityAvailableAdjustment to extend availability for pre-order and oversell, or hold stock back as a buffer when negative.
  • Packing from a location holding unassigned inventory now automatically reassigns that stock, instead of requiring it to be assigned first. If there isn't enough, a clear error names the location and the available versus required quantity.
  • Job line items now expose explicit locationFrom and locationTo fields, so you can tell where stock was picked from versus where it was moved to during picks, putaways, and receives. The ambiguous single location field is deprecated.
  • A new brand feed is available for bulk export and syncing of brand records, with created and modified date filters.
  • Enabling inventory assignment on a location that already holds stock now automatically re-evaluates waiting allocations and fills them from that location, instead of leaving them stuck.
  • Receiving large items that need to be split out for immediate shipping now completes reliably as a single atomic operation.
  • Unreceiving an item before scanning its location during a receive no longer leaves orphaned state that blocked the purchase order from closing.
  • Shipments can no longer become permanently stuck after creation; a stuck shipment now recovers automatically on its next action.
  • Purchase order status changes (such as re-accepting a closed order, or adding and removing line items on an approved order) now keep expected inbound quantities accurate.
  • Fixed bill total price calculation on creation and update.
  • Inventory movement search no longer returns duplicate results for products that match on multiple tags or barcodes.
  • Fixed a customer contact update issue that could write values into the wrong fields, or wipe an address field that wasn't part of the update.
  • Setting inventory at a location now correctly reports failure instead of always reporting success.