Asset Models
An asset model is a catalog template for a kind of hardware — think "MacBook Pro 14 M3" or "Dell UltraSharp U2723QE". Instead of retyping the manufacturer, category, and other catalog details on every unit you buy, you record them once on the model, then point each individual asset at it. This page covers the Models catalog: the list, the form, what the model pre-fills on the asset form, and what it deliberately does not do.
ams/assets) and click the tab labeled
"Models" next to "Browse". The tab loads the list via AJAX (its direct URL is
ams/models, but it is a partial designed to render inside the tab strip).
Access is gated on the Assets module being enabled and the base
asset permission ("Assets: Entries") — there are no separate
create / update / delete permissions for models: anyone who can open the tab can also
add, edit, and delete models.
What an asset model is
A model is the bridge record of the catalog. One model row ties together everything that is true of every unit of that product:
- Name
- The catalog display name, e.g. MacBook Pro 14 M3. The only required field.
- Model Number
- The manufacturer's part / model number, e.g.
A2918. - Category
- Which branch of your category tree this product belongs to (e.g. Hardware > Computers > Laptops).
- Manufacturer
- The brand — drawn from ERPat's shared Brands master, not a list private to this module (see below).
- Fieldset
- Which bundle of custom fields describes this product.
- Depreciation
- Which depreciation profile (useful life + residual floor) is intended to value this product over time — see the wiring caveat.
- End-of-life (months)
- The expected lifetime of the product in months.
- Requestable
- A Yes/No flag recorded per model and shown in the list.
- Notes
- Free-text remarks about the product.
Individual assets then reference the model from the "Asset Model" dropdown on the Add / Edit asset form, and inherit its category and manufacturer as defaults (see how defaults flow).
The Models list
The tab shows a searchable DataTable of every model, sorted by "Asset Model" name ascending, with a table refresh button and an Excel export of the data columns. The top-right header button "Add Asset Model" opens the add modal.
List columns
| Column header | Shows | Notes |
|---|---|---|
| "Asset Model" | The model's name. | Default sort column (ascending). |
| "Model Number" | The manufacturer part number. | Shows - when blank. |
| "Category" | The linked category's name. | Shows - when unset. |
| "Manufacturer" | The linked brand's name. | Shows - when unset. |
| "Fieldset" | The linked fieldset's name. | Shows - when unset. |
| "End-of-life Date" | The EOL value in months. | Despite the header saying "Date", this is a number of months; - when unset. |
| "Requestable" | "Yes" or "No". | Mirrors the form checkbox. |
| "Created by" | Who created the record. | Rendered as a profile link. |
| Options | Row actions. | Pencil = edit (tooltip "Edit Asset Model", opens the same modal pre-filled); × = delete with a confirmation prompt. |
Adding & editing a model
Both "Add Asset Model" and the row's edit pencil open the same modal, which posts to
ams/models/save. The footer has a single "Save" button; a successful
save shows the toast "The record has been saved."
Form fields
| Field label | Type | Required | Notes |
|---|---|---|---|
| "Name" | Text | Required | Autofocused. Enforced both client-side ("This field is required.") and server-side. |
| "Model Number" | Text | Optional | The manufacturer's part / model code. |
| "Category" | Select2 dropdown | Optional | Lists categories with their full hierarchical path (e.g. Hardware > Computers > Laptops). Becomes the asset form's default category (see defaults). |
| "Manufacturer" | Select2 dropdown | Optional | Options come from the shared Brands master (see below). Becomes the asset form's default manufacturer. |
| "Fieldset" | Select2 dropdown | Optional | Lists all fieldsets by name. Displayed in the list; note that the shipped asset form reads its "Additional fields" from the category's fieldset, not from this link (see what does not flow). |
| "Depreciation" | Select2 dropdown | Optional | Attaches a depreciation profile to the catalog record. Note: in this build the depreciation compute and report do not read this link (see what does not flow). |
| "End-of-life Date" | Number, min 0 | Optional | Despite the label, this is the expected lifetime in months — the input's placeholder reads "Useful life (months)". Treat it as "EOL (months)". |
| "Requestable" | Checkbox | Optional | Unchecked by default; saved as Yes/No and shown in the list. |
| "Notes" | Plain textarea | Optional | Free-text remarks. |
Manufacturers = the shared Brands master
in_assets flag). To add or rename a manufacturer, use
the shared Brands screen at ams/brands (this route intentionally points at the
core Brands controller, not at anything owned by this module), and make sure the brand is
enabled for Assets. Vendors work the same way: the shared Vendors screen is at
ams/vendors.
How a model pre-fills the asset form
The pay-off for maintaining this catalog happens on the
Add / Edit asset modal. When you pick a model in the
"Asset Model" dropdown there, the form immediately fetches that model's defaults
(endpoint ams/assets/get_model_defaults, which returns the model's category and
manufacturer) and applies them:
-
You select an "Asset Model"
The form looks up the chosen model's linked Category and Manufacturer.
-
Category pre-fills — only if still empty
If the model has a category and the asset form's "Category" dropdown is currently blank, the category is filled in. Because setting the category fires its normal change event, the form's "Additional fields" section reloads too — you instantly see the custom fields defined by that category's fieldset.
-
Manufacturer pre-fills — only if still empty
Same rule: if the model has a manufacturer and the asset form's "Manufacturer" dropdown is blank, it is filled in.
What does not flow onto the asset
- Fieldset — the asset form's "Additional fields" always come from the category's compiled fieldset schema, not from the model's "Fieldset" link. The model's fieldset is stored and shown in the Models list, but the shipped asset form never reads it. Bind your fieldset to the category to actually get the fields.
- Depreciation & EOL months — nothing copies these onto the asset, and in this
build the monthly depreciation compute and the Depreciation schedule report do not
read them through the model either: they select assets by a per-asset depreciation
link (
asset_entries.depreciation_id) that the asset form never sets. Today the model's Depreciation and EOL months are catalog reference data only — see the wiring caveat on Depreciations. - Model Number and Notes — display-only catalog data; nothing is copied into the asset's fields (in particular, the asset's free-text "Model" box stays empty unless you type into it).
Deleting a model
The × row action asks for confirmation and then soft-deletes the model; success shows "The record has been deleted."
Suggested setup order
Who: IT admin / asset custodian (needs the
asset permission).Preconditions: the Assets module is enabled; the brand exists in the shared Brands master with its Assets flag on.
-
Prepare the building blocks
Create or verify the Category (with its fieldset bound, if you need custom fields), the Depreciation profile, and the manufacturer at
ams/brands. -
Add the model
Open Safekeep → Assets → "Models" tab → "Add Asset Model". Fill in Name, Model Number, Category, Manufacturer, Depreciation, and EOL months, then "Save".
-
Register units against it
On the Add asset form, pick the model in "Asset Model" first — Category and Manufacturer fill themselves and the category's custom fields appear. Add the unit-specific data (asset tag, serial, cost, location) and save.