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 and parts. 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, labour hours, labour rate, 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

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) follow a different model: edits live in local state and are committed in a single bulk save when you click Save or press Cmd/Ctrl+S. Pistonlog shows a dirty indicator on each job until it's saved.

Save before leaving the page

Pistonlog tries to flush pending edits when you navigate away, but it's safer to hit Save first. The dirty indicator is your friend.

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?