Assets Reference Public

Maintenance & Work Orders

Turning a repair into a work order — scheduling it, approving the spend, tracking parts, labour and downtime, recording what was actually done, and claiming it back under warranty.

Guide version: r2 Module version: 1.11.0 Updated: 2026-08-25 Estimated time: 12 min 14 views 0% helpful
Custody & Service

Maintenance & Work Orders

A work order is a repair you can follow while it is happening: who is doing it, when it is booked in, what it is costing, how long the equipment has been out of service, and — at the end — what was actually done. It lives on the Safekeep → Service page, on the Maintenance tab.

ℹ️
This used to be a logbook, and is now a workflow. Before 1.5.0 a maintenance record only said that a repair had happened; the only way to tell a finished job from an unstarted one was whether the completion date was filled in. That works exactly once, at the end, and answers nothing while the equipment is away. Every existing record was classified on upgrade from the evidence it already carried — a completion date means done, a start date on or before today means under way, anything else is a request.
ℹ️
The old address still works. ams/maintenances opens the Service page on its Maintenance tab, so bookmarks and saved links are unaffected.

Where a work order goes

Requested
somebody asked for it
Approved
the spend is cleared
Scheduled
booked for a date
In progress
downtime starts here
Completed
with an account of what was done

A job can also sit at Waiting for parts or Waiting for the supplier, which are the two reasons a repair stalls that are worth telling apart from "in progress" — an operator chasing a delay needs to know which one to chase.

⚠️
Completing a work order requires an account of what was done. Not a formality: a maintenance history with no such account is a list of dates, and it is the first thing anybody reads when the same equipment fails again. Approving is a separate permission from doing the work, so the person who clears the spend need not be the person who spends it.

A work order and a fault are two records

A work order can be linked to the issue it answers — and often should be — but they are deliberately separate. One fault can need two repair attempts, and a scheduled service belongs to no fault at all. When a linked work order starts, its fault moves to Being repaired; when it completes, the fault moves to Awaiting confirmation and goes back to the person who reported it.

Cost and downtime

Cost can be recorded as one number, as before, or split into parts, labour and other. Filling in any part of the split replaces the single figure with their total — one number, one meaning, wherever it is read.

Downtime is measured only where it means something: the clock starts when a work order goes in progress and its linked fault says the equipment is unusable, and stops on completion. A repair on kit that was still working the whole time records no downtime, because there was none.

Warranty claims

A repair that should be covered by the supplier gets a claim number and a result — pending, approved, partly approved, or denied. Both live on the work order, and the Warranty tab collects them beside a second list: assets whose cover is about to lapse. That second list is the one worth acting on, because it is the only one that lets you do something before a fault makes it matter.

Where it lives & who can use it

Maintenance sits in the Safekeep sidebar group (wrench icon), between Custom Fields and Asset Reports. Opening it requires the Assets module to be enabled and the base asset permission ("Assets: Entries") — but seeing the list and changing it are gated separately:

ActionPermission keyRoles-editor label
View the Maintenance list (and the Maintenance log report)assetAssets: Entries
Add, edit, or delete a work orderasset_maintenanceAssets: Maintenance
Approve a work order (clear the spend)asset_maintenance_approveApprove Work Orders
Record a warranty claimasset_warranty_manageManage Warranty Claims

Without asset_maintenance, the "Add Maintenance" button and the per-row edit/delete icons are hidden — the screen becomes read-only. See Permissions & Roles for the full RBAC table.

⚠️
Recently tightened. Create/update/delete used to be allowed with just the coarse asset view permit; the module now requires the dedicated asset_maintenance permission for all write actions. If a teammate suddenly lost the "Add Maintenance" button after an upgrade, grant them Assets: Maintenance in the Roles editor.

The Maintenance list

The page is a single panel titled "Maintenance" with one button in the title bar — "Add Maintenance" (shown only with the asset_maintenance permission). The table sorts by Start date, newest first, has a refresh button, and offers an Excel export of all eight data columns. There are no filter controls on this screen — no date range, asset, or type filter.

ColumnWhat it shows
AssetThe linked asset's title. Plain text here — not a link to the asset page.
TitleYour name for the job, e.g. "Replace SSD", "Annual aircon service".
Maintenance TypeThe stored type shown Title-Cased (e.g. "Hardware Support"); blank if none was picked.
VendorThe supplier's name (from the shared Vendors master).
Start dateFormatted date, or "-" if empty.
Completion dateFormatted date, or "-" if empty. Empty = the job is still open.
CostPlain number with decimals (no currency symbol), or "-" if empty. Enter it in your books' currency, e.g. ₱ for Philippine ledgers.
Warranty work"Yes" / "No" — whether the work was covered by warranty (i.e. at no cost to you).
Options (☰)Edit pencil ("Edit") and delete × ("Delete", with a confirmation prompt). Both appear only with asset_maintenance.

Deleting a record is a soft delete — on success you get "The record has been deleted." (failure: "Record cannot be deleted!"). Saving shows "The record has been saved." and updates the row in place without a page reload.


The Add / Edit Maintenance modal

"Add Maintenance" (or the row's edit pencil) opens a standard modal form with a single "Save" footer button. Fields, top to bottom:

FieldInputRequiredNotes
Asset Select2 dropdown of all assets by title (first option "-") Required Client-side message: "This field is required."; also enforced server-side. Any asset can be picked — the list is not limited by status or assignment.
Title Text Required What the job is, in a few words.
Maintenance Type Select2 Optional One of the six types below, or "-" for none.
Vendor Select2 of vendors (first option "-") Optional Drawn from the shared Vendors master (also reachable at ams/vendors); the outside shop or service provider doing the work.
Start date Date picker Optional When the work began (or the asset was handed over). Also used as the date of the Activity event — see below.
Completion date Date picker Optional Fill in when the work is done — this is the only "completed" marker there is.
Cost Text Optional Stored to 2 decimals. There is no numeric validation on the input — whatever you type is passed straight to the database, so enter a plain number (no currency symbol or thousands separators).
URL Text Optional E.g. a link to the vendor's ticket or invoice. Quirk: it is saved but currently displayed nowhere — not in the list, not in the reports. Keep the reference in Notes too if you need to see it later.
Warranty work Checkbox Optional Defaults unchecked. Tick when the repair is covered by the manufacturer's/vendor's warranty; it drives the list's Yes/No column.
Notes Textarea Optional Not shown in the list, but it becomes the body of the event in the asset's Activity & comments feed — a good place for diagnosis and resolution details.

The six maintenance types

The Maintenance Type dropdown offers exactly these options:

Maintenance Repair Upgrade Calibration Hardware Support Software Support
Maintenance
Routine upkeepPreventive/scheduled care — cleaning, servicing, health checks.
Repair
Fixing a faultSomething broke and was fixed — screen swap, board replacement.
Upgrade
ImprovementRAM/SSD upgrades, part replacements that improve the asset.
Calibration
Precision tuningInstruments, scales, printers — anything needing periodic calibration.
Hardware Support
Vendor hardware engagementPaid/contracted hardware support incidents.
Software Support
Vendor software engagementOS/firmware/application support incidents.

The type is free of side effects — it is a reporting label only. The app ships just the six labels and shows the type as plain text; the badge colors and one-line descriptions above are this guide's suggested convention for choosing between them.


What a maintenance record writes to the asset's Activity

When you create a maintenance record, the module also writes a Maintenance event into the asset's chain-of-custody log (asset_events):

Event type
"Maintenance" (as shown in the Activity & comments feed and the Activity log report)
Event title
The maintenance record's Title
Event body
The maintenance record's Notes
Event date
The Start date (or the moment of creation, if no start date was set)
⚠️
The timeline event is written once, on create only. Editing a maintenance record later (new title, notes, dates) does not update the timeline entry, and deleting the maintenance record does not remove it — the original Activity event stays as first written. If accuracy in the timeline matters, get the record right before you first save it.

Where maintenance history is visible (and where it isn't)

????
This screen

The Maintenance list is the full editable history across all assets — the only place to edit or delete records.

Asset Reports → "Maintenance log": the same eight columns, read-only, with Excel export — built for finance and audit reviews.

????
NOT the asset detail page

An asset's detail page shows no per-asset maintenance list — only the single "Maintenance" event per record in its Activity & comments feed.

ℹ️
Looking up one asset's service history? Open the Maintenance screen (or the Maintenance log report) and use the DataTable's search box with the asset's title — there is no per-asset maintenance tab in the current build.

The Maintenance log report, in brief

Under Safekeep → Reports, the first tab is "Maintenance log" (ams/reports/maintenance_log — it is also where the Asset Reports menu item lands). It answers: "What maintenance/repair work has been done, on what, by which vendor, and what did it cost?" Columns are identical to this screen minus the options column — Asset, Title, Maintenance Type, Vendor, Start date, Completion date, Cost, Warranty work — sorted by Start date descending, with Excel export and no filters. Anyone with the base asset permission can view it. Full details on Asset Reports.


Tip: park the asset "In Repair" while it's being serviced

Maintenance records don't touch the asset's status — but you can (and should) pair them with the seeded In Repair status label. "In Repair" has deploy type Undeployable, and the module blocks checkout of any asset whose status is not Deployable:

"This asset's status is not deployable, so it cannot be checked out."

So while a device sits at the repair shop, setting it to In Repair guarantees nobody endorses it to a user by mistake. When it comes back, set it back to Ready to Deploy (or Deployed if it goes straight back to its holder).

⚠️
Both steps are manual. Creating a maintenance record never changes the asset's status, and changing the status never checks the asset in, reassigns it, or closes a maintenance record — there is no status-driven automation in the module. The only status gate is the checkout block quoted above. Change the status yourself via the asset's Edit modal or the check-in modal's "Set status to" dropdown. See Status Labels and Checkout & Check-in.

SOP: a full repair cycle

????
Purpose: take a faulty endorsed device out of service, get it repaired, log the work and cost, and return it to duty with a complete paper trail.
Who: IT admin / asset custodian with asset, asset_maintenance, asset_update, and asset_checkout permissions.
Preconditions: the asset exists in the registry; if an outside shop does the work, the vendor exists in the Vendors master (ams/vendors).
  1. Recover the device from its holder (if endorsed)

    On the asset's detail page, use "Check in asset" to end the current endorsement. In the check-in modal, use "Set status to" and pick In Repair in the same step. (If the asset is unassigned, just edit it and set the status to In Repair.)

  2. Open a maintenance record

    Go to Safekeep → Service and click "Add Maintenance". Pick the asset, give the job a clear Title, choose a Maintenance Type (usually Repair), select the Vendor, and set the Start date. Put the fault description in Notes — it becomes the Activity event's body. Leave Completion date empty. Save.

  3. While the work is in progress

    The open record (no completion date) is your "in service" marker, and the In Repair status keeps the asset out of checkout. Anyone with the asset permission can see the job on this screen or the Maintenance log report.

  4. Close out the job

    When the device comes back, edit the record: set the Completion date, enter the final Cost (a plain number), and tick "Warranty work" if the vendor covered it. Remember the Activity & comments feed keeps the original event — the authoritative closed record is the row on this screen.

  5. Return the asset to service

    Edit the asset and set its status back to Ready to Deploy. If it goes back to the same user, run "Check out asset" again (checkout requires a Deployable status) and have the holder "Confirm receipt" — see Checkout & Check-in.

  6. Verify the trail

    The asset's Activity & comments feed now shows Check-in → Maintenance → Checkout events, and the Maintenance log report carries the cost line for finance.


Known quirks on this screen

QuirkPractical impact
The URL field is saved but never displayed.Don't rely on it — duplicate important links into Notes.
Edits and deletes don't sync the asset's Activity & comments feed.The "Maintenance" event reflects the record as first created, forever.
No status/lifecycle field on maintenance records.An empty Completion date is the only "still open" indicator.
Cost has no numeric input validation.Enter plain numbers only — the value is saved as typed into a 2-decimal numeric column, so symbols or separators may not be stored as intended.
No filters on the list or the report.Use the table's search box; export to Excel for heavier analysis.
Asset names in the list are plain text, not links.Open the asset from the Asset Registry when you need its detail page.

Related pages

Was this guide helpful?

Report a content problem