Getting Started
Enable the Assets module, let the migrations build and seed the catalog, grant the right people access, and switch on the reminder crons — then register your first asset and endorse it to a user.
Prerequisites
- PHP ≥ 8.2 and ERPat core ≥ 1.10.0 — the module manifest requires both.
- Admin access to Settings → Manage Modules and to the Roles editor.
- Staff users must exist. Assets can only be checked out (endorsed) to active staff users — not to locations or other assets — so create the people before the hardware. See Checkout & Check-in.
- A ticking cron runtime if you want the return-due / warranty / audit reminders and the monthly depreciation compute to run — see Switch on the crons below.
- Manufacturers and Suppliers are shared masters. The module reuses ERPat's core Brands table for manufacturers and the core Vendors table for suppliers — they work out of the box, no separate setup needed (details in Shared masters).
Activation — three steps
-
Run the module migrations
From the project root. The module's migrations are idempotent and reversible, and are tracked in their own
migrations_assetstable.php erpat migrate:modules # (or) php erpat migrate:latest -
Turn the module on
Go to Settings → Manage Modules and enable Assets (listed under the Safekeep category — this sets
module_assets = 1). A Safekeep group appears in the left sidebar for every user who also holds theassetpermission. -
Grant permissions (for non-admins)
In Roles, assign the Safekeep permission categories to the roles that need them. Administrators see everything by default. See Granting access below and the full matrix on Permissions & Roles.
What the migrations create
Three migrations run in sequence:
| Migration | What it does |
|---|---|
| Foundation (reconcile legacy tables) | Creates the five legacy tables if missing — asset_entries,
asset_categories, asset_locations, asset_groups,
asset_entry_comments — and repairs drift on older tenants (missing columns,
indexes). Never destroys data. |
| Snipe-IT upgrade | Adds nine new tables — asset_status_labels, asset_models,
asset_depreciations, asset_custom_fields,
asset_fieldsets, asset_fieldset_fields,
asset_events (the chain-of-custody activity log),
asset_maintenances, asset_accessories — plus the lifecycle
columns on asset_entries (asset tag, status, model, endorsement state,
audit dates, custom-field values, and more). |
| Seed | Seeds the starter catalog described below. Idempotent — it matches by name/key/slug and never overwrites rows a tenant has already edited. |
Seeded status labels (7)
Every asset carries a status label, and every label has one of four deploy types — Deployable Pending Undeployable Archived. The seed migration installs seven ready-made labels:
| Status label | Deploy type | Seeded color | Notes |
|---|---|---|---|
| Ready to Deploy | Deployable | #1d97a6 (brand teal) |
Default for new assets |
| Deployed | Deployable | #5cb85c (green) |
In active use |
| Pending | Pending | #f0ad4e (amber) |
Awaiting something |
| In Repair | Pending | #f0ad4e (amber) |
Out for repair |
| Broken | Undeployable | #d9534f (red) |
Not usable |
| Lost / Stolen | Undeployable | #d9534f (red) |
Missing |
| Archived | Archived | #777777 (grey) |
Retired, out of circulation |
Seeded categories, fieldsets and custom fields
Six starter categories are seeded, each bound to its own fieldset (named "<Category> fields") so the right "Additional fields" appear on the asset form the moment you pick the category:
| Category | Group | Fieldset | Primary (required) field | Other seeded fields |
|---|---|---|---|---|
| Laptop | devices | Laptop fields | Serial number | Brand / model, Processor, Memory (GB), Storage |
| Phone | devices | Phone fields | IMEI | Brand / model, Storage, Operating system |
| Monitor | devices | Monitor fields | Serial number | Brand / model, Size (inches), Resolution |
| Vehicle | vehicle | Vehicle fields | Plate number | VIN / chassis number, Make / model, Model year, Odometer at handover |
| Access card | access | Access card fields | Card number | Access level, Valid until |
| Employee ID | access | Employee ID fields | Badge number | ID type, Issued on |
Custom fields are deduped globally by their field key, so shared fields like
serial_number and brand_model are single rows reused across several
fieldsets. See Custom Fields & Fieldsets and
Categories.
Granting access in Roles
While the module is enabled, four Safekeep permission categories appear in the Roles
editor. The base asset permit (labelled "Assets: Entries") is the master key —
the whole Safekeep sidebar group and every screen in it require it; everything else layers on top.
| Roles-editor category | Parent key | Also includes | Unlocks |
|---|---|---|---|
| Safekeep: Assets | asset |
asset_create, asset_update, asset_delete,
asset_manage_labels, asset_comment,
delete_asset_comment, asset_checkout,
asset_audit, asset_maintenance,
asset_import, asset_export |
Viewing the module plus asset CRUD, labels, comments, the checkout/endorse lifecycle, audits, maintenance, import and export. |
| Safekeep: Categories | asset_category |
asset_category_create / _update / _delete |
The Safekeep → Categories page (its Categories tab). |
| Safekeep: Locations | location |
location_create / _update / _delete |
The Location tab on the Assets page. (Note the key is plain location —
no asset_ prefix.) |
| Safekeep: Groups | asset_groups |
asset_groups_create / _update / _delete,
asset_groups_manage_labels |
The Groups tab on the Categories page. |
The full permission-by-permission matrix, with suggested role presets (IT admin, custodian, auditor, finance, employee), lives on Permissions & Roles.
A tour of the Safekeep sidebar group
With the module enabled and the asset permission granted, the sidebar gains a
Safekeep group with six items:
| # | Menu item | URL | Opens |
|---|---|---|---|
| 1 | Assets | ams/assets |
The asset registry — a tabbed page whose Browse tab is the asset list, with the Models and Location tabs alongside (see below). |
| 2 | Categories | ams/categories |
The Categories page — a tabbed page carrying
Categories, Groups and
Status Labels. Requires the
asset_category permission. |
| 3 | Depreciations | ams/depreciations |
Straight-line depreciation profiles. |
| 4 | Custom Fields | ams/custom_fields |
Custom field master, with a Fieldsets tab. |
| 5 | Maintenance | ams/maintenances |
The maintenance / repair log. |
| 6 | Asset Reports | ams/reports/maintenance_log |
The four reports — the menu item deep-links to the Maintenance log; the other reports are tabs on that page. |
Catalog screens are tabs of those pages
Several catalog screens deliberately do not get their own sidebar entries — you reach them as in-page tabs:
- On the Assets page (
ams/assets), the tab strip reads Browse · Models · Location. The Location tab only appears for users holding thelocationpermission; Models shows for everyone withasset. - On the Categories page (
ams/categories), the tab strip reads Categories · Groups · Status Labels. The Groups tab only appears with theasset_groupspermission and Status Labels withasset. - On the Custom Fields page (
ams/custom_fields), the tab strip reads Browse · Fieldsets — Fieldsets is managed there.
Shared masters: Manufacturers and Suppliers
Two catalogs the module uses are not owned by it — they are ERPat-wide masters served by core controllers:
- Manufacturers are the shared Brands master, reachable at
ams/brands. Only brands whose "Available in Assets" flag is set to Yes appear in the asset and model manufacturer pickers — set it on the brand itself. (The Snipe-IT CSV importer sets the flag automatically on manufacturers it creates or matches.) - Suppliers are the shared Vendors master, reachable at
ams/vendors— used on assets (purchase vendor) and maintenance records (who did the work).
Both carry their own core permissions (brand, vendor) in the Roles
editor, separate from the Safekeep categories above. Changes you make there affect every module
that shares those masters.
Settings → Asset Entries Configuration
One core settings screen tunes the module's comment stream. Go to Settings and open Asset Entries in the components group — the page is headed "Asset Entries Configuration":
| Setting | Control | What it does |
|---|---|---|
| Sort Asset Entry Comments | Dropdown — Ascending / Descending (default: Descending) | "Choose how to sort comments — ascending (oldest first) or descending (newest first)." Controls the comment order on the asset detail page. |
| Allowed users to mention | Multi-select user picker | "Select which users can be mentioned in asset entry comments." |
Saving records the system-log event "Asset entries settings updated".
Switch on the crons
The module ships four scheduled jobs on ERPat's Advanced Cron runtime. They only run if your server cron is ticking the runtime (or you tick it manually):
php erpat cron:list # confirm the four asset jobs are registered
php erpat cron:tick # run whatever is due right now
php erpat cron:run compute_asset_depreciation # force a single job| Job (slug) | Schedule | What it does |
|---|---|---|
compute_asset_depreciation |
Monthly — 1st of the month, 01:10 | Recomputes straight-line book values for assets bound to a depreciation profile. Book values in the Depreciation schedule report update at most monthly. |
remind_asset_return_due |
Daily, 07:00 | Notifies assignees: "An asset assigned to you is due to be returned". |
remind_asset_warranty_expiry |
Daily, 07:30 | Notifies: "An asset's warranty is about to expire". |
remind_asset_audit_due |
Weekly — Mondays, 08:00 | Notifies: "An asset assigned to you is due for audit". |
The reminders, the two dashboard widgets ("Assets assigned to me" and "Assets needing attention") and the related settings keys are covered in full on Widgets, Reminders & Settings.
First-run checklist
Who: an administrator (or a role holding the Safekeep parents plus
asset_create and asset_checkout).Preconditions: migrations run, module enabled, at least one active staff user.
-
Enable the module
Run
php erpat migrate:modules, then enable Assets under Settings → Manage Modules. Confirm the Safekeep group appears in your sidebar. -
Verify the seeded catalog
Open Assets → Status Labels tab — you should see the seven seeded labels with Ready to Deploy as the default. Open Custom Fields and its Fieldsets tab — the six seeded fieldsets ("Laptop fields" through "Employee ID fields") should be listed.
-
Grant roles
In Roles, give your IT/admin roles the four Safekeep categories. Employees who will receive equipment need at least the base
assetpermit — every Safekeep screen, including the asset page with its Confirm receipt button, sits behind it. (The cron reminder notifications reach assignees regardless, but withoutassetthey cannot open the asset.) Details: Permissions & Roles. -
Shape your categories and models
On the Assets page, review the Categories tab (rename, nest, or add categories — each can bind a fieldset), then build your hardware catalog under the Models tab. Model defaults (category, manufacturer) auto-fill the asset form. See Asset Models and Categories.
-
Adjust statuses and supporting masters
Add any extra status labels your process needs, plus locations and depreciation profiles (none are seeded).
-
Add your first asset
Assets → Browse → Add entry. Pick a category to reveal its "Additional fields", give it an Asset Tag, and set the Status to Ready to Deploy. Field-by-field help: Adding & Editing Assets. (Have a Snipe-IT export or a spreadsheet? Use Import instead.)
-
Check it out
Open the asset and use Check out asset to endorse it to a staff user with a due date. The assignee then uses Confirm receipt, and every step lands in the asset's Activity chain-of-custody log. Walkthrough: Checkout & Check-in and the end-to-end SOPs.