Jobs, labour, and parts

How line items work on a jobcard — and why saves are batched into a single bulk save

ManagerReceptionTechnician

Every jobcard breaks down into one or more jobs. A job is "the work" — "Full service", "MOT", "Front brake pads" — and each job owns its labour lines, parts, and fixed costs. The jobcard's total is the sum of its jobs' totals.

The line-item model

LevelWhat it holds
JobcardCustomer, vehicle, status, comments, recommendations, mileage in/out
JobDescription, assigned technician, complete flag, authorisation status
LabourEach labour line: description, hours, hourly rate, line total
PartEach part: description, quantity, unit cost (internal), unit price (customer), order status
Fixed costEach fixed-cost line: description, quantity, sale price

Labour and parts both belong to a job, not to the jobcard directly. That means you can have a jobcard with two jobs — "Service" and "MOT" — each with their own labour and parts, and the customer sees a clean breakdown per job on the printed invoice.

How saves work (this is important)

Jobcard-level fields (title, customer, vehicle, status, mileage, comments) save immediately as you edit them — there's an autosave + a debounce.

Line items (labour, parts, descriptions) auto-save too, per job: your edits live in local state, and about a second and a half after you stop typing the whole job is committed in one bulk save. Each job shows a "Saving" then "Saved" indicator in its header while this happens, with a retry link if a save fails.

Watch the save indicator

Pistonlog flushes pending edits when you navigate away, but it's safer to wait for the "Saved" tick on the job you were editing. If a save errors, click the indicator to retry.

Defaults from your garage

Both labour rate and parts markup pre-fill from your garage's defaults in Pricing. You can override them per line if a specific job uses a different rate.

Related

Was this article helpful?