In Odoo 19, timesheets are logged against project tasks and become invoice lines through the service product on the sales order: bill on timesheets, at a fixed price, on milestones, or manually. The base timesheet module is Community; the weekly grid, the timer and timesheet validation are Enterprise. Decide the billing model per service product first, because every other setting follows from it.
What Odoo 19 timesheets include in Community and Enterprise
The Community module is Task Logs (hr_timesheet), though the app menu is still called Timesheets. It lets employees log time on tasks, rolls time up to projects, and gives you reports by employee, by project and by task. It also costs every entry using the employee's Hourly Cost, which is what makes project profitability work.
Access comes in three levels: User: own timesheets only, User: all timesheets and Administrator. Most staff need the first. Team leads who approve time need the second.
Enterprise adds the Timesheets module (timesheet_grid) with:
- a weekly grid where people fill hours per task per day;
- a start/stop timer on tasks and in the grid;
- validation, with a To Validate menu split into Last Period and All Timesheets;
- time rounding for the timer, with Minimal Duration and Round up both defaulting to 15 minutes.
On top of that, Sales Timesheet: Invoicing (Enterprise) adds the choice to invoice all recorded timesheets or validated ones only, billing time targets per employee and a billing-rate leaderboard.
Timesheet settings to configure first
Open Timesheets > Configuration > Settings and settle these before anyone logs an hour:
- Encoding Method: Hours / Minutes or Days / Half-Days. Consultancies billing day rates sometimes want days, but hours are easier to reconcile with attendance and payroll.
- Employee Reminder and Approver Reminder: periodic emails to people with missing timesheets and to approvers with timesheets waiting.
- Time Off: generates timesheets for validated time off and public holidays, so a week of leave does not look like a week of idle time in utilisation reports.
Then set an Hourly Cost on every employee who logs time. Without it, timesheet cost is zero and every project looks more profitable than it is. For Indian teams, a practical approach is to derive hourly cost from CTC including employer PF and ESI contributions, divided by productive hours, and review it annually with the appraisal cycle.
Billing on timesheets vs fixed price vs milestones
The billing model lives on the service product as the Service Invoicing Policy, next to Create on Order, which decides whether a sales order creates a task, a project, or both.
| Policy | What gets invoiced | Suits |
|---|---|---|
| Prepaid/Fixed Price | The ordered quantity, regardless of hours logged | Fixed-scope work, retainers, prepaid support blocks |
| Based on Timesheets | Hours logged on linked tasks become the delivered quantity | Time-and-materials consulting, change requests |
| Based on Milestones | A percentage of the line when a project milestone is marked reached | Implementation projects with staged payments |
| Based on Delivered Quantity (Manual) | Whatever quantity someone enters on the order line | Edge cases; avoid as a default |
Based on Milestones appears only after milestones are enabled on at least one project (see part 30). With fixed price, timesheets are still recorded as cost, so profitability shows Timesheets (Fixed Price) against the fixed revenue. That is often the most useful report a services business gets from Odoo.
Prepaid products also have an upsell Threshold: when the time delivered reaches that percentage of the prepaid amount, Odoo creates an upsell activity for the salesperson. Set it below 100% if you want warning before the hours run out.
Task rate, project rate and employee rate
For timesheet billing, the project's pricing is one of three types, and Odoo works it out from how you link the project to sales order lines:
- Task rate: each task points to its own sales order item. Good when different tasks are different services at different prices.
- Project rate: the whole project bills to one sales order item at one hourly rate, whoever does the work.
- Employee rate: on the project's Invoicing tab, you map each employee to a sales order item, so a senior consultant and a junior consultant bill at different rates for the same service.
Each timesheet line gets a Billable Type such as Billed on Timesheets, Billed at a Fixed price, Billed on Milestones or Non-Billable. Remove the sales order item from a timesheet and it becomes non-billable. That is how you write off time without deleting it, which keeps cost and utilisation honest.
Timesheet validation and invoicing validated time
In Enterprise, approvers validate timesheets from Timesheets > To Validate. Validation locks entries: only approvers (User: all timesheets) and Administrators can modify a validated line, and other users cannot edit or delete entries dated on or before the last validated date.
With Sales Timesheet: Invoicing installed, Timesheets Invoicing in the settings offers All recorded timesheets (the default) or Validated timesheets only. The choice also controls which timesheets customers see on their portal.
- Employees fill the week in the grid or with the timer, by Monday morning.
- Reminders chase anyone missing; approvers validate Last Period.
- Finance creates invoices from sales orders, using the timesheet start and end dates on the invoicing wizard to bill a clean period.
- Each billed timesheet keeps a link to its invoice, so you can trace exactly which hours an invoice covered.
GST on services works as for any invoice: the tax comes from the product and fiscal position, and place of supply follows the customer's state. Part 22 covers that set-up.
Start with two or three service products, one billing model each, and a single project that uses them end to end before rolling out company-wide. The next post moves outward to your customers: the Odoo 19 website builder. If you are designing rates and billing for a services firm, our implementation team can help.
Questions we get asked
Are timesheets free in Odoo 19 Community?
Yes. The Community module, called Task Logs with a Timesheets menu, lets employees log time on tasks, costs it using the employee's hourly cost and supports billing through sales orders. The weekly grid view, the start/stop timer, timesheet validation and the option to invoice only validated timesheets are Enterprise features in the Timesheets and Sales Timesheet: Invoicing modules.
How do I invoice customers based on timesheets in Odoo 19?
Create a service product with the Service Invoicing Policy set to Based on Timesheets and Create on Order set to Task, Project, or Project and Task. Sell it on a sales order and confirm. Hours logged on the linked tasks become the delivered quantity on the order line, and creating an invoice from the sales order bills them, optionally limited to a start and end date.
Can different employees bill at different rates on the same project?
Yes. On a billable project with a customer, open the Invoicing tab and map each employee to a sales order item carrying their rate. Odoo then treats the project as Employee rate pricing, and each timesheet is billed on the sales order line mapped to the person who logged it. This suits consultancies where seniority determines the hourly rate.
Can validated timesheets be edited in Odoo 19?
Only by approvers (User: all timesheets access) or Timesheets Administrators. Once time is validated, ordinary users cannot edit or delete entries dated on or before the last validated date. Validation is part of the Enterprise Timesheets module. If invoicing is set to validated timesheets only, unvalidated hours stay off invoices and out of the customer portal until an approver validates them.