SIGNALS Documentation
API Reference

Equipment Availability

Read equipment availability over time with a by-catalogue-item-group grid, multi-warehouse aggregation, and a per-catalogue item bookings drill-down with rental and asset rows.

Overview

The Equipment Availability page shows, at a glance, how much of each catalogue item is free to book over a span of dates. It is a planning view over the rental availability engine: availability is the quantity of a catalogue item that is free at a warehouse at a given time, where available = total stock − total demanded, and may go negative when demand exceeds stock — a shortage.

Route: /availability

The page lives under the Rental Planning section of the navigation (the "Equipment Availability" link) and is gated on the availability.view permission. It is read-only — it reflects bookings made on rentals elsewhere; it does not itself create demand.

The primary view is By Catalogue item group — a catalogue items-by-days grid scoped to one catalogue group. Clicking a catalogue item name or cell opens the CatalogueItem Bookings drill-down for that catalogue item. Warehouse, date, group, and filter state are persisted in the URL so a link reopens exactly as shared.

By Catalogue item group

The By Group view is the landing view. It shows a catalogue items-by-days grid for the selected catalogue item group, making it the fastest way to check whether your lighting stock, audio stock, or any other category has room in a window.

The grid is tightened so 30 days fit on load without horizontal scrolling on typical screens. Table text uses a softer sans-serif stack for long planning sessions.

Controls

Control Effect
Warehouses Multi-warehouse tag-input (Signals tag-input). Empty = all in-default-query warehouses; availability and stock are summed across the selected warehouses via AvailabilityService::getCalendarForStores and productTotalStockForStores. Uses PlanningWarehouseFilter.
Catalogue item group The group whose catalogue items fill the rows. Required — select a group to populate the grid.
CatalogueItem type Filter rows to Rental or Sale catalogue items, or show all.
Start date The first day of the window. Signals datepicker.
Days The window length: 7, 14, 28, 30, or 60 days. Default 30.
Shortages only Toggle — hide rows with no shortage cell in the window.
Warnings only Toggle — hide rows with no warning (low-but-positive) cell in the window.
Include quotes Toggle — whether provisional (quotation-stage) demand counts towards held (UI present; read-model filter pending).

Previous/next buttons step the window by one full period length.

Reading the grid

Each row is a catalogue item in the group; each column is a day. Cells are colour-coded by availability state:

Colour Meaning
Green Available — comfortably in stock for this day.
Amber Warning — low but still positive (2 units or fewer remaining).
Red Shortage — demand exceeds stock (available ≤ 0 with a shortage).
Cyan Booked — every unit is committed but nothing is oversold (available = 0, no shortage).

Each cell shows available (held) — the free quantity and, in parentheses, how much of the total stock is committed. Weekend columns are shaded.

Clicking a catalogue item name or cell opens CatalogueItem Bookings for that catalogue item, carrying forward the current warehouse selection, start date, and day count.

Rows are paginated (20 per page) for large groups.

Layout chrome

  • Sticky filter bar — page header and filters stay pinned while scrolling.
  • Sticky day headers — column labels remain visible above the grid body.
  • Loading skeleton — deferred first paint skeleton before availability data loads.

A colour legend below the grid explains cell states. Delivery / In-Use / Collection phase colours appear on the CatalogueItem Bookings drill-down (see below), shared via RentalPresentation.

CatalogueItem Bookings

Route: /availability/bookings/{catalogue_item}/{from}/{days}

The CatalogueItem Bookings page (CatalogueItem Bookings view) focuses on a single catalogue item over a date window. It reuses the same grid chrome as the By Group view.

Summary rows

At the top of the grid, three summary rows show per-day figures across the window:

Row Content
Available Colour-coded free quantity per day (same green/amber/red/cyan rules as the group grid).
Held Total stock minus available — how much is committed.
Post-rent Pending check-in quantity (returned but not yet cleared).

Rental rows

Below the summaries, one row per rental (for loose / non-asset demand) shows which days that booking claims stock. Cells use Delivery / In-Use / Collection phase colours from RentalPresentation so you can see not just when a unit is on hire but which part of the rental lifecycle each day falls in. Row labels link to the rental detail page.

Asset rows

For barcoded catalogue items, one row per asset (asset number) follows the rental rows. Assets are warehouse-scoped — only assets at the resolved warehouse(s) appear. Each cell shows phase-coloured demand for that specific asset on that day.

When multiple warehouses are selected on the group grid, the bookings page inherits that selection and aggregates summary figures; asset rows list assets from all resolved warehouses.

From the By Group grid:

  • Click the catalogue item name in the row label, or
  • Click any day cell in that row.

The URL carries catalogue item, from, days, and optional warehouses[] query parameters.

Shortages

Where committed demand exceeds stock, availability dips below zero. Use Shortages only on the group grid to focus on affected catalogue items, or open CatalogueItem Bookings to see which rentals and assets contribute to a short day. Shortages are detected and resolved per rental on the Shortages panel; the availability pages are where you spot them across the wider plan.

Live Updates

The By Group page is live. It subscribes to each resolved store's availability.store.{storeId} broadcast channel, so when a booking, return, resolution, or stock movement changes the picture, the grid re-reads authoritative figures without a manual refresh.

The Resolution Setting

Availability is bucketed into time slots whose granularity is set by the availability resolution setting — daily, half-daily, or hourly. The resolution determines how finely the underlying snapshots divide time, and dates are aligned to the slot boundary in the warehouse's local timezone. Daily resolution suits most dry-hire operations; finer resolutions suit same-day turnarounds where intra-day timing matters.

Note: Kit and composed catalogue items do not hold their own daily summary rows — their availability is derived at read time from their components. They therefore do not appear in the group grid; query a kit's components directly, or use the availability API for a live read.

  • Availability API — point and range availability reads, calendar aggregation, Gantt demand decomposition, and the available-assets endpoint.
  • Rental Diary — overlap timeline of jobs across the same window.
  • Rentals — where demand is created.
  • Shortages — detecting and resolving shortfalls.