Approving and exporting timesheets
Approve hours to lock the pay rate, unapprove to correct, and export the week as a CSV.
Approving locks a timesheet entry and freezes its pay rate. Exporting hands the week to payroll as a CSV. They are separate steps — and exporting does not require approval first.
Approving
Approve at two granularities:
- A whole staff row — the row's approve icon approves all that person's draft entries for the week.
- A single entry — open the entry sheet and use its Approve button.
Either way, only entries currently in draft are affected.
Approving snapshots the staff member's hourly rate onto the entry and locks it. From then on that entry uses the rate as it was at approval, even if you later change the person's rate. An unapproved (draft) entry uses the person's current rate.
This is why you approve before payroll: it pins the pay at the rate that applied to that week's work.
Approving needs the timesheets-approve permission. A locked entry cannot be edited — you get "Approved entries are locked. Unapprove it first."
Unapproving
Made a mistake in an approved entry? Open it and click Unapprove. It reverts to draft and clears the rate snapshot, so it goes back to using the live rate. Then correct it and re-approve.
This is the intended way to fix an approved entry — not a hidden or dangerous action.
Exporting
The Export button in the page header downloads the current week as a CSV.
Export does not filter by approval — it includes drafts. The button exports every entry in the week you are viewing, across all staff, drafts and approved alike. Approval status is a column in the CSV, not a filter on it. So it is entirely possible to export unapproved hours.
If payroll should only see final numbers, approve the week first, then export — otherwise draft entries (at the live, un-snapshotted rate) go out too.
The CSV columns are: Staff, Date, Start, Finish, Break (min), Hours, Hourly Rate, Pay, Status, Customer, Route, Notes — plus a TOTAL row at the end. It is UTF-8 with a byte-order mark, so Excel opens it cleanly. The file is named timesheets-<weekStart>-to-<weekEnd>.csv.
There is no server-side export or scheduled export — it is generated in your browser, for the week on screen.
Tutorial: run payroll for last week
Turn last week's crew hours into a clean payroll file.
Open Timesheets, step back to last week, and scan for amber. Every amber cell is an unapproved entry — a number that is not final and would export at the live rate.
Approving locks the entry. So check the hours against reality first — open any cell that looks off and confirm the Start, Finish, and Break. Once approved, you have to unapprove to change it.
Use the approve icon on each staff row to approve all their drafts at once. The row turns green. This snapshots each entry at the person's current rate — which is exactly the rate you want to pay for that week.
If you spot an error after approving, open the entry and click Unapprove. It goes back to draft, the rate snapshot clears, you correct it, and you re-approve. Do not try to edit a locked entry — it will refuse.
This is the step that matters. Export includes drafts. If you export with amber still on the grid, unapproved hours at the live rate go to payroll. Get the whole week green first, then click Export.
The file has a TOTAL row — total hours and total pay. A quick glance at it catches a gross error before it reaches payroll. Then hand the CSV over.
