Projects & timesheets

How to invoice Odoo project work from timesheets

Make the link between the work your team records and the hours a customer is billed. Walk through a small time-based service order and check the invoice before posting it.

By OdooMatrix Published Updated 5 min read

At a glance

A timesheet records time. The service product’s invoicing policy and sales-order link determine whether that time becomes invoiceable. A task marked done is not automatically an invoice.

1. Choose time-based billing deliberately

This walkthrough is for a service billed from recorded time. A fixed-price service, a prepaid block of hours, and milestone invoicing have different policies. Confirm the commercial agreement with the person responsible for the customer account before configuring the product.

Use a test database with Sales, Project, Timesheets, and the accounting or invoicing capabilities needed for the documented workflow. Check availability for your edition and subscription. Enable Timesheets in Project settings and the applicable analytic accounting setup used by your installation.

Use one training customer, one employee allowed to enter time, and one service product. Keep expense reinvoicing and material purchases outside this first exercise so you can explain the result from hours alone.

2. Configure the service and its sales-order behavior

  1. Open Sales → Products → Products and create or select a service such as “Training consulting hour.”
  2. Set Product Type to Service, Invoicing Policy to Based on Timesheets, and use hours as the intended selling unit.
  3. Set Create on Order to Project & Task for a new project and task from the confirmed order.
  4. If the work belongs in an existing project, choose the Task option and the correct project instead.
  5. Enter the agreed rate and taxes, check the company, and save.

For a hypothetical example, use a rate of 80 per hour in the test company’s currency, excluding tax. This is training arithmetic, not an OdooMatrix service quotation or a recommended customer rate.

3. Confirm the order and open its linked task

Create a quotation for the training customer with 10 hours of the configured service. Review the policy and terms, then confirm the sales order. Use the generated Projects and Tasks smart buttons to open the linked work.

Confirm that the task belongs to the right customer project and sales-order item. A separately created internal task can contain timesheets without contributing to this sale. The link between task, service line, and customer is essential to the billing result.

Before entering time, record the starting delivered and invoiced quantities on the order. That baseline makes it easier to recognize what the new timesheets changed.

4. Record time with the correct employee and description

  1. Open the linked task and its Timesheets tab.
  2. Add the work date, employee, useful description, and time spent.
  3. Enter 2.5 hours for the first session and 1.5 for a later session in the training example.
  4. Follow the project’s review or timesheet-validation process where enabled. Correct wrong dates, duplicate entries, or links before billing.

The example totals 4 hours. Recording time does not mean the customer has accepted every entry as billable. Follow the agreed review process and distinguish internal, non-billable, or disputed work from the service line intended for billing.

A decimal entry of 1.5 hours means one hour and thirty minutes. Confirm the time-entry display and unit conversion used by the installation instead of reading it as one hour and fifty minutes.

5. Compare delivered hours and the draft invoice

Return to the sales order. The documented time-based flow reflects task timesheets in the service line’s Delivered quantity and provides a Recorded Hours view. In the clean example, 4 hours should be delivered, with the 10 quoted hours still describing the original order quantity.

Use Create Invoice → Regular invoice → Create Draft Invoice where those actions are available. Check that the intended uninvoiced 4 hours appear at the agreed 80 rate: 320 before tax and discounts. Verify the customer, currency, taxes, and analytic distribution before the finance user posts the invoice.

After posting, payment and reconciliation remain separate. When more time is recorded, check already invoiced quantities so the next invoice charges only the appropriate remainder. Do not recreate an invoice just because payment has not arrived.

6. Investigate missing or unexpected billable hours

  • No project or task appears: verify the service product and its Create on Order setting, then inspect the confirmed order.
  • Time does not become delivered: check the task’s sales-order item, employee entry, unit, policy, and any validation requirements.
  • Too much time is billable: inspect duplicate entries, internal work linked to the customer line, and rate or unit configuration.
  • The invoice has no new quantity: inspect earlier draft or posted invoices and time already billed.
  • The customer disputes an invoice: follow the accounting correction process instead of silently editing time to force the numbers.

Completion check: trace a reviewed timesheet to the task, the sales-order service line, delivered quantity, and the appropriate invoice.

7. Frequently asked questions

Does completing a task automatically create an invoice?

No. Billable quantities depend on the service product, policy, timesheet entries, and sales-order links. Creating and posting an invoice are separate actions.

Why do recorded hours not appear on the sales order?

Check the task’s sales-order item, invoicing policy, employee entry, selling unit, and any required validation. An internal or unlinked task is not automatically billable to that customer.

Is 1.5 hours the same as one hour and fifty minutes?

No. Decimal 1.5 hours is one hour and thirty minutes. Confirm whether the interface is showing decimal hours or a time-style display before entering values.

8. Related articles and next steps

Reviewed against Odoo 20 documentation. Menu labels, availability, and actions depend on your edition, hosting, installed apps, and permissions. Practise the workflow in a test database before changing production.

Need help with your Odoo workflow?

Tell us your version, apps, and the outcome you need. Discuss your setup with OdooMatrix.

← Back to all articles