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 → Setup → 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 nine entries, in the order the work happens: what we own,
who has it, what is wrong with it, whether it is really there, what it is worth, what somebody
reads about all of that, and the two administrative rooms behind it.
| # | Menu item | Opens | Also needs |
|---|---|---|---|
| 1 | Overview | The command-centre dashboard — headline figures and one ranked queue of everything needing a person. The front door of the group. | — |
| 2 | Assets | The equipment register, with Models and Locations alongside it. | — |
| 3 | Custody | Who holds what — active custody, endorsement documents, transfers and returns. | asset_custody |
| 4 | Service | Faults, work orders and warranty claims — three tabs, because a fault, its repair and its warranty claim are one conversation. | — |
| 5 | Audits | Audit campaigns and their findings. | asset_audit |
| 6 | Accounting | Books, depreciation periods and disposals. | asset_finance_view |
| 7 | Reports | Twenty-three reports in six groups. | — (its Finance group needs asset_finance_view) |
| 8 | Setup | The catalogue hub — categories, status labels, models, locations, custom fields, fieldsets, depreciation profiles, and the module's Settings page. | — (each tab needs its own permit) |
| 9 | Data Quality | The workbench that scores the register and repairs it in bulk. | asset_data_quality |
Screens that are tabs rather than menu items
Most of the module is tabbed, and switching tabs never reloads the page — each tab loads the first time you open it, stays loaded afterwards, and the one you left on is remembered for next time.
- Assets carries the register alongside Models and
Locations (the latter needs the
locationpermission). - Setup carries Categories, Status Labels, Models, Locations, Custom Fields and Fieldsets, Depreciation Profiles, and Settings — each shown only to somebody holding that room's own permit.
- Service carries faults, work orders and warranty claims. Custody, Accounting and Data Quality are tabbed the same way.
Configure the module
The module has its own Settings page with nine groups — general, custody, ticketing, maintenance, audits, finance, disposal, notifications and API. Reach it from Safekeep → Settings — it is a page of the module, not of the platform's own Settings screen. It needs the Assets: Settings permission.
Nothing has to be configured before you can use the module: every setting ships with a working default, and the seeded status labels, condition bands and numbering formats are enough to register and hand over equipment on day one. Come back to Settings once you know your own vocabulary and your own thresholds. The full field-by-field reference is on Setup Hub & Settings.
Switch on the scheduled jobs
The module ships sixteen scheduled jobs. They are enabled as soon as the module is on, but they only actually fire if your server is ticking ERPat's scheduler:
php erpat cron:list # confirm the Assets jobs are registered
php erpat cron:tick # run whatever is due right now
php erpat cron:run compute_asset_depreciation # force a single jobBetween them they prepare the monthly depreciation run, open scheduled audit campaigns, score the register overnight, keep the custody and finance figures honest, and chase people about acceptances, returns, warranties, repairs, audits, estimate reviews and pending data wipes. The full table — each job's timing, what it does and exactly who it notifies — plus the four dashboard widgets and all twenty-six notification events, is on Automation & Reminders.
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.