A pivot report of billed and unbilled timesheet value for time-and-material projects, alongside the cost of the time logged.
For each project and period it shows the hours logged, their cost, and the billable value of that time, split into what is still to invoice and what has already been invoiced, so you can see how much delivered work is still waiting to be billed and whether it is profitable.
It is inspired by the Project Costs and Revenues report that was available under Project → Reporting in Odoo 14.0 and earlier, and removed in later versions.
Table of contents
| Column | Meaning |
|---|---|
| Timesheet Duration | hours logged on the timesheet |
| Timesheet Cost | cost of that time (shown negative) |
| Untaxed Amount to Invoice | billable value of time not yet invoiced |
| Untaxed Amount Invoiced | billable value of time already invoiced |
The billable value of a timesheet is its duration — converted into the sale order line's unit of measure — times the line's unit price, less the line discount. It counts as to invoice until the timesheet is linked to an invoice, after which it counts as invoiced.
The report opens under Project → Reporting → Timesheet Costs and Revenues, grouped by month, with the To Invoice filter on by default so you only see periods that still have unbilled time. Clear that filter to see everything, switch on Invoiced to review what has been billed, and use Group By to slice by project, customer, sale order, analytic account, product, and more.
- This is a time-and-material report: revenue is only counted for sale order lines whose delivered quantity comes from timesheets. Fixed-price and milestone lines still contribute cost and hours, but no revenue.
- A single currency is assumed — the sale price and timesheet cost are used as-is, with no conversion.
- Invoiced is the same calculation as to invoice, flipped once a timesheet is linked to an invoice. It is not read back from the posted invoice line, so it can differ if a price changed or an invoice was edited afterwards.
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed feedback.
Do not contact contributors directly about support or help with technical issues.
- Innovara
- Innovara:
- Manuel Fombuena <mfombuena@innovara.tech>
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.
Current maintainer:
This module is part of the OCA/timesheet project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.






