In this article
- The file we all share: a tab per employee, formulas that break, and three people to chase on the first of the month.
- How it plays out day to day: a project, kanban tasks, and the planned hours set before the task even starts.
- The timer that was missing: reconstructing your week on Friday produces hours rounded by feel, and always downward.
- Seeing the overrun before it costs you: allocated hours and actual hours side by side, permanently, on the task and on the project.
- From timesheet to invoice: three billing modes depending on the engagement, from fixed price to time spent.
- Community or Enterprise: where the line is drawn: what's native, what comes through a module, and what genuinely needs Enterprise.
- What Odoo won't fix for you: entry discipline: no tool enters the hours on the employees' behalf.
The file we all share
An Excel workbook on SharePoint or Google Drive. One tab per employee, columns per project, formulas that break the moment someone inserts a row in the wrong spot. On the 1st of the month, you're chasing three people to fill in their month-end before billing goes out.
The problem isn't Excel. It's that the hours live in one file and the projects live somewhere else. You can't tell where you stand halfway through a mandate. You can't spot an overrun before it's been burned. Comparing planned vs. actual happens by hand, in a separate tab, whenever you get a spare second.
Odoo puts the pieces back together by placing the timesheets on the tasks themselves. Same data, same place. Here's what that changes in practice.
How it plays out day to day
You create a project. You add tasks on a kanban board (To Do, In Progress, Done). On each task, you set the planned hours before kicking it off: that's the budget per deliverable. You assign the task to someone, with a priority, a due date and tags as needed.
When the employee gets to work, they open the task, scroll down to the Timesheets tab and enter a line: 2 hours, Tuesday, "drafting the quote." The line adds to the project total, the task's progress bar changes colour if you go over, and the project-level total updates on its own.
It works, but opening the task to log 15 minutes is clunky. Three pieces are missing from the picture: the weekly grid (projects as rows, days as columns, you fill in the week like a calendar), the timer, and the manager's approval before the week goes to billing. Enterprise ships all three. Community gets them another way.
The OCA brings back the grid and the approval step with the hr_timesheet_sheet module. It isn't a pixel-for-pixel copy of Enterprise, but the grid is there, and so is the submission/approval workflow. For the timer, we took another route.
The timer that was missing
Rebuilding your week on Friday gives you hours rounded by feel. Rounded down, on top of that: what you don't remember doesn't get billed. A timer fixes that by moving the entry to the moment the work happens, while you still know what you're working on. That was the piece Community didn't have, so we wrote ours: the Stopwatch module from our Symbifox suite, published under the LGPL-3 licence.
The counter lives in Odoo's top bar, visible no matter which page is open. An hourglass when nothing is running. A pulsing green dot, the task name and the time ticking up when a timer is active. An orange dot when everything is paused. You start from that menu, from a task's Start button, from a kanban card, or with Ctrl+Shift+T on the keyboard.
Running three files in parallel is what a services team's day actually looks like. So the module accepts as many timers as you have open mandates, with a badge counting the active ones and a colour code that turns orange after an hour and red after two. Two clean-up buttons follow: "Stop all" at the end of the day, and "Stop the reds" to put away the ones that have been running for more than two hours. Pausing freezes the elapsed time, resuming picks up where you left off, as many times as a day chopped up by phone calls requires.
On stop, a dialog shows the raw elapsed time and the already-rounded duration, editable before you save. Rounding is set in the parameters: never, always, or only below a threshold (30 minutes by default), in increments of 1, 5, 10 or 15 minutes. The description arrives pre-filled with the task name, with clickable chips for the reasons that come back every day (development, meeting, support, review), which the manager configures. Three ways out: confirm and create the timesheet, discard without logging anything, or cancel and let the counter keep running.
The menu keeps the last ten tasks you logged time on, with a search box and a star to pin the current files to the top of the list. Today's total and the week's total show at the bottom of the menu, which is often enough to notice that two hours are missing somewhere.
Here's the part that matters, though: what the timer produces is an ordinary Odoo timesheet line, on the right task and the right project. No parallel log to reconcile at month-end. The hours flow into the mandate's running total and into time-based billing as if they'd been typed by hand. And the module installs on Community as well as Enterprise, for teams that prefer this counter to the built-in one.
What it doesn't do, on the other hand: the weekly grid and the approval step. It times, it doesn't replace hr_timesheet_sheet. The two complement each other rather well, one for live entry, the other for the end-of-week review.
Seeing the overrun before it costs you
This is where Odoo wins over Excel. On every task, allocated hours and actual hours sit side by side, all the time. At the project level, you see the running total instantly: total planned, total logged, percentage consumed.
A mandate budgeted at 60 hours that has already burned 55 with two deliverables still to go: you see it before the invoice goes to the client. You can call ahead. Renegotiate ahead. Or go into the red knowingly, not in a post-mortem.
From timesheet to invoice
A "service based on timesheets" type of product tied to a sales order: every hour logged on the project becomes billable. Three modes depending on the type of mandate.
Fixed price for packages: the invoice is known in advance, the hours serve internal tracking. Time and materials for hourly work: every hour goes into the next invoice at the agreed rate. Milestones for long projects: the invoice triggers when defined stages are reached, while the timesheets document the effort in the background.
When it's time to bill, you pick the period, Odoo adds it all up, and the draft invoice is ready. No more manual transposing between the hours file and the billing system.
Community or Enterprise: where the line is drawn
To clarify what's native, what comes through a module (the OCA's or ours) and what really requires Enterprise:
| Feature | Community | Enterprise |
|---|---|---|
| Kanban tasks + planned hours | Included | Included |
| Time entry on the task | Included | Included |
| Time and materials billing | Included (with Sales module) | Included |
| Weekly grid | Via OCA module | Included |
| Timer | Via our open-source module | Included |
| Several timers in parallel, rounding on stop | Via our open-source module | Via our open-source module |
| Approval workflow | Via OCA module | Included |
| Resource scheduling | Not available | Separate Planning module |
| Forecasting | Not available | Dedicated module |
| Logging from a phone | Installable web app (PWA) since Odoo 17 | Installable web app (PWA) since Odoo 17 |
For an SMB of 5 to 50 people moving off Excel, Community with the right modules covers the essentials. The Enterprise features become worthwhile once you're juggling dozens of resources across nested projects. Before that, it's complexity that adds nothing.
What Odoo won't fix for you
Logging discipline. No tool enters the hours in the employees' place. A one-click timer helps more than you'd think, because it removes the "I'll do it later" excuse, but someone still has to start it in the morning. If the culture of daily logging isn't there, no module will change that.
Maintaining the community modules. They're maintained by the community, not by Odoo SA. At every version upgrade, you have to check that the modules you use have been ported, and the picture moves fast. As of this writing, in August 2026: on the OCA's 18.0 branch, hr_timesheet_sheet is available and the hr_timesheet_time_control timer isn't. On the 19.0 branch, it's the reverse: the timer has been ported, the grid hasn't caught up yet. So depending on which Odoo version you're on, the available piece isn't the same. Our timer lives with the same constraint: it targets Odoo 18. It's doable, it's our daily bread, but it takes an integrator who keeps up with the ecosystem rather than an install you forget about for three years.
Full financial profitability. Odoo shows consumed vs. planned hours. The real per-project P&L (revenue minus loaded salaries, allocated overhead) takes a deeper analytic configuration. It isn't plug-and-play.
The link to expenses. If your mandates carry costs on top of time, the Expenses module attaches to the same project and gives the full-cost picture.
Our recommendation to get started:
- Install Project and configure planned hours per task.
- Add the timer so entry happens during the work, not on Friday.
- Add hr_timesheet_sheet from the OCA for the grid and approval.
- Plug in the Sales module for time-based billing.
- Start with a pilot project before migrating all your mandates.
At Blue Fox
We deploy Odoo Community with the modules you need, hosted in Quebec on servers under your control. No per-user licence, your code and data with you.
In concrete terms for timesheets: we install the modules, plug them into your projects and your billing, and train the team on daily logging. It's that last step that makes or breaks the rollout, more than the technology. We wrote the timer because the short version of the problem came up in every conversation: time entry doesn't survive when it takes six clicks. The code is public, under LGPL-3, along with the rest of the suite. If your needs later evolve toward advanced resource scheduling, we look together at whether a community module is enough or whether Enterprise becomes the right move.
Still managing your hours in a shared file? Let's talk about your time tracking and look together at how Odoo can lighten your billing.
Sources
- Official Odoo documentation: Timesheets
- Official Odoo documentation: Project
- Time and materials billing: Odoo documentation
- Odoo editions comparison
- Odoo 17 release notes: the installable web app (PWA) replaces the old mobile app
- OCA Timesheet modules (GitHub)
- OCA hr_timesheet_sheet, 18.0 branch
- OCA hr_timesheet_time_control, 19.0 branch
- Stopwatch module: source code and documentation