The Recycle Bin lists records that have been deleted from the current site, lets you see what was deleted, who deleted it and when, and lets you restore any item back to its original state — along with the related records that were cascaded out alongside it. Items stay searchable for 90 days after they were deleted.
Where to find it: Admin → Recycle Bin
Who can use it: Only users with the Admin or QA Manager role. Other users will be redirected to the dashboard.
When to use it
Use the Recycle Bin when someone has deleted something they shouldn't have, or when you need to audit a deletion. Typical cases:
- A batch, product, supplier, customer, location, form, or other master record was deleted in error.
- You need to confirm who deleted a record and when, before investigating further.
- You want to bring back a record together with the child rows that were removed with it (e.g. a batch and its ingredient/packaging/QA lines).
The Recycle Bin does not capture every change — only deletions. It's not an undo for edits. For edit history, see the audit/version trail on each record.
What can be restored
Anything that QTRACA tracks for deletion shows up here. The Type filter (top of the page) lists every model class with at least one deletion in the active date range. Common types include batches, products, suppliers, customers, locations, forms, form templates, flows and movements.
The list is dynamic — if a particular type has not been deleted recently, it simply will not appear in the filter dropdown.
Page layout
┌────────────────────────────────────────────────────────────────────────┐ │ Recycle Bin [↺] [...] │ ├────────────────────────────────────────────────────────────────────────┤ │ [Last 30 days ▾] [All types ▾] [Anyone ▾] │ ├────────────────────────────────────────────────────────────────────────┤ │ Deleted At ▼ │ Type │ Identifier │ Deleted By │ Children │ ⋯│ │ 2026-05-13 14:02│ Batch │ BT-001234 ... │ A. Smith │ 17 │ ↺ │ │ 2026-05-13 09:21│ Product│ PROD-RED-WIDGET │ A. Smith │ 0 │ ↺ │ │ 2026-05-12 16:45│ Customer│ Acme Corp Ltd │ B. Jones │ 3 │ ↺ │ │ … │ └────────────────────────────────────────────────────────────────────────┘
Filters
The three dropdowns above the grid narrow what's shown.
| Filter | Choices | Notes |
|---|---|---|
| Date range | Last 30 days (default) / Last 90 days | Records older than 90 days are not retained for restore. |
| Type | All types / each item type with deletions in range | Populated dynamically — only types that actually have deletions show up. |
| Deleted by | Anyone / each user | Useful when investigating a particular user's actions. |
Changing any filter immediately refreshes the grid. The grid also supports the standard column filtering / sorting that other ct-table screens provide — click a column header to sort, or use the column filter row to narrow further.
Columns
| Column | What it shows |
|---|---|
| Deleted At | Date and time the delete happened. The grid sorts on this column by default, newest first. |
| Type | The kind of record (e.g. Batch, Product, Form). |
| Identifier | A short summary of what was deleted — typically the user-facing name, reference, or code so you can recognise the record without opening it. |
| Deleted By | The user who performed the deletion. "System" or blank indicates the deletion happened outside a normal user session (e.g. via an automated job). |
| Children | The number of related records that were cascade-deleted alongside this one. These are part of the same restore — see Cascade restore below. |
Restoring a record
- Find the row you want to bring back (use the filters and column search if needed).
- Click the ↺ Restore action on the right of the row.
- The Restore? dialog opens with the type and identifier in the title, and a line that reads "This will also restore N related record(s) that were grouped from the original deletion."
- Click Restore to proceed, or Cancel to back out.
- While the restore is running the button shows Restoring…. When it succeeds the dialog closes and the grid refreshes — the restored row drops off the list (it's no longer deleted).
- If the restore fails, the dialog stays open and shows the error message in red. Read the error, fix the underlying issue if you can (see Why might a restore fail? below), and try again.
Cascade restore
Many records own child rows that get deleted with them. A deleted batch, for example, normally drags its ingredients, packaging lines, QA checks and dispatch lines along with it. The Children column shows how many sibling rows were deleted in the same transaction.
When you restore a parent, every child grouped under it is restored too — in a single atomic operation. You don't need to find and restore the children separately, and you shouldn't see those children listed as standalone rows in the bin.
Things to be aware of
- Restore is to the original site only. The current site context (set in the site picker top-right) is sent with the restore request. If the deleted record belonged to a different site, switch sites before restoring.
- References must still be valid. If a record references another record (e.g. a batch references its product), and that referenced record has also been deleted and not yet restored, the restore will fail. Restore the referenced record first, then retry.
- Deleting again after restore is fine — the original
idis re-used, so any downstream reports or external integrations that recorded the original UUID still work. - The grid is read-only. You can't delete from this list, and there's no "New" button. Restore is the only action.
- Date range matters. Deleted items older than the selected range will not appear, even if they are still recoverable. Switch to 90 days if you can't find something from a few weeks ago.
Tips & FAQs
Why might a restore fail? The most common cause is that a parent or related record was also deleted and hasn't been restored yet, so the restored row would violate a foreign-key constraint. Less common causes include site-id mismatches (restoring with the wrong current site selected) and unique-constraint violations (someone has since created a new record using the same code/reference as the one you're restoring). The error message in the modal will tell you which.
Can I bulk-restore? Not from this screen — items are restored one at a time. A deletion that cascaded children is already a "bulk restore" of one parent and many children.
A record I deleted today isn't showing up. Check the Type filter is set to All types and the date range is set to Last 30 days. Also check the site picker top-right — the Recycle Bin only shows items deleted in the current site context. If you're still missing something, your user role may not be permitted to see that item type.
How do I see what changed before something was deleted? The Recycle Bin only captures the delete event. To see edit history on the record before it was removed, use the version/audit trail on the original record once it's been restored.
Will a restored record fire its usual side-effects (inventory recalc, alerts, etc.)? Yes — restoring a record reactivates its normal lifecycle, so any callbacks the model runs on create will run again. For inventory and on-hand totals this is usually what you want; check the relevant on-hand totals after a large cascade restore.