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.

A jobcard's Jobs tab with labour and parts tables under each job.
Add Job: start from scratch or pick a saved job.

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.

The job menu

Every job header has a three-dot menu holding the things you do to the job as a whole:

ItemWhat it does
RenameType a description for the job in place
Turn On / Off Auto-TitleWith auto-title on, the job's name is generated from what's in it and kept in sync as you add labour and parts. Renaming by hand turns it off
Move Up / Move DownReorder the jobs on the card. The order is what the customer reads on the printout, so put the main work first
TypeTag the job as MOT, Service, or Timing Belt. More than one can apply. The tag is what drives the yearly MOT reminder and the service reminder, and each tagged job gets a chip where you set the actual work date
Save as TemplateSave this job, with its labour and parts, as a job template you can drop onto future jobcards
Delete JobRemoves the job and everything under it
The three-dot menu on a job.

When someone else is on the same jobcard

Pistonlog shows you who else is in the card. A presence pill at the top of the Jobs tab reads "Also editing: Sam (Technician)", and if two or more people are in there it collapses to "Sam + 2 others" with the full list on hover. If you're the one with the card open twice, it says "you have this open elsewhere" instead.

Opening a tab someone has already been working in for a while brings up a "Heads up — someone is already on this tab" dialog, telling you who and for how long. It's advisory: Proceed carries on editing, Switch to Messages takes you to the jobcard chat to agree who's doing what.

If you both save the same job anyway, the loser gets a "This Job changed while you were editing" dialog. Nothing is written until you pick: Keep my changes saves what's in front of you over the top, Use latest saved Job throws yours away and loads theirs. The same dialog appears as "We found unsaved Job changes" if the browser closed mid-edit, offering to restore the backup it kept on this device.

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?