Solavel Solavel Docs

Timesheets

docs/solavel-finance/timesheets.md

Who can use this: anyone with the right permission on a project — staff log their own time, approvers review submissions, project owners view customer-side approvals. URL / Route: time entries live under a project: /finance/projects/{project}/time (finance.projects.time.index). Detail: create, store, edit, update, submit, destroy. Approval: time.approval.index, approve, reject. Customer-side: time.customer-approval.index. Plan / feature gate: feature:tracker.manage_projects AND feature:tracker.timesheets. Approval queue additionally requires feature:tracker.time_approval. Permissions: timesheets.view, timesheets.create, timesheets.approve.

Purpose

Timesheets let staff log hours against a project, optionally with a billable rate, so the hours can be:

  • billed to the customer via a time-and-materials invoice,
  • costed against the project's budget for profitability reporting,
  • approved by a project lead (and optionally the customer) before being locked.

Every time entry lives under a specific project — there is no global timesheet; you always log time to a project. See Projects & Finance for the project setup that has to exist first.

Step by step

Browse time entries for a project

Open the project, then click Time in the side tab. Each row shows the date, person, task / description, hours, rate (if billable), total, and status (Draft / Submitted / Approved / Rejected / Invoiced).

Log time

Route: finance.projects.time.create / store. Permission: timesheets.create.

  1. Click Log time.
  2. Set the Date.
  3. Pick the Person (defaults to you).
  4. Pick the Task or service item, if the project uses tasks.
  5. Enter the Hours (decimal — e.g. 1.5 for 1h 30m).
  6. Billable / Non-billable toggle. Billable lines also need a Rate, which defaults from the task / person rate set on the project.
  7. Add a Description of what was done.
  8. Save as Draft, or Save and submit.

Submit for approval

Route: finance.projects.time.submit. Permission: timesheets.create.

If the project has approval turned on (feature:tracker.time_approval), entries must be submitted before they can be invoiced or counted in profitability. Submitting locks the entry and sends it to the approver queue.

Approve / Reject (project lead)

Route: finance.projects.time.approval.approve / reject. Permission: timesheets.approve.

The approver opens the project's Time approval tab — every submitted entry is listed. Approve marks the entry ready; Reject sends it back with a note so the submitter can edit and resubmit.

Customer approval view

Route: finance.projects.time.customer-approval.index. Permission: timesheets.view.

For projects where the customer signs off on time before invoicing, this read-only view shows every approved-but-not-yet-invoiced entry grouped by week. Share the link with the customer's portal user or export it as a PDF for them to sign.

Invoice approved time

When you create a time-and-materials invoice for the project, you can pick Pull approved time — Solabooks lists every approved-and-not-yet-invoiced entry and lets you tick which to bill. Selected entries become invoice lines (description, hours, rate) and are marked Invoiced so they aren't billed twice.

Edit / Delete a draft

Route: finance.projects.time.edit / update / destroy. Permission: timesheets.create.

Draft entries are freely editable / deletable. Submitted, Approved, or Invoiced entries are read-only — ask the approver to reject (which sends them back to Draft) or void the invoice.

Common mistakes

  • "My approved time isn't on the invoice." Approved time stays on the project until you explicitly pull it onto an invoice ("Pull approved time" on the new-invoice form). It doesn't auto-bill.
  • "This entry says 'non-billable' but I want to bill it." Toggle Billable on the entry and set a Rate. Non-billable lines still count as project cost but produce no revenue.
  • "The rate is wrong on the invoice." Rates default from the person/task rate on the project at the time you logged the entry. To change the rate on an already-logged entry, the approver rejects it; the submitter fixes and resubmits.
  • Entries vanish when project is archived. Archived projects hide their time on the default list. Toggle the Archived filter to see them.
  • Customer can't approve via the portal. The customer-approval URL needs to be shared explicitly — there's no auto-email. Send the URL from the customer-approval tab.

Behaviour and rules

  • Time entries do not post to the GL by themselves. They only hit the books when included on an invoice — at which point the normal invoice posting writes revenue + AR.
  • Cost vs revenue. A timesheet line carries both a cost (person's cost rate, used in project profitability) and an optional bill rate (used when invoicing). The two are independent — non-billable lines still contribute cost.
  • Approval is optional. Without feature:tracker.time_approval, entries skip the approver queue — they're considered approved as soon as they're saved.
  • Period lock. Logging and editing time are NOT period-locked (no GL impact). Invoicing the time is — see Fiscal years and lock dates.

Permissions / restrictions

  • View / create own entries: timesheets.{view,create}.
  • Approve / reject: timesheets.approve.
  • Invoice approved time: standard sales.invoices.create.

Related

Source: docs/solavel-finance/timesheets.md ← All documentation