Running an HVAC business with Odoo

How do I record technician time on an Odoo job?

Workflow overview: How do I record technician time on an Odoo job?
Workflow overview. Instructional screenshots show the actual demo interface.

Record technician time on an Odoo task, check the exact saved duration and verify the linked time-based sales quantity before invoicing.

Alex needs the technician’s actual job time recorded under the right employee and sales order. This guide gives the existing technician a stock own-timesheets permission, records a fictional 1.5-hour entry and checks the saved duration and billing link from both technician and office sessions.

Alex Rivera and Demo Air HVAC are fictional training examples. Prices, dates, quantities and business situations in this guide are illustrative.

Before you begin

Tested in stock Odoo 20.0-20260926 Community with official modules and standard configuration, using the owner administrator for setup/review and the technician for time entry. Use the task and dedicated time-based service from create a task from a sales order, the employee foundation from link an employee to a user and the assigned technician from assign a technician and deadline. The target is S00008 - Demo Time-Billed Labor H41, project Demo Service Jobs H40, customer Demo Property H08. The technician is Demo Technician H42, linked to the existing employee. The project has Timesheets and Billable enabled, and this service uses Based on Timesheets. An administrator performs permission setup; time entry is tested in the technician’s own session. Our October 14 entry is a synthetic rehearsal, not evidence that the proposed later visit occurred.

Step-by-step workflow

115 highlighted video actions with a white pointer, gold border and English captions, without narration. Each written step groups its smaller video actions. Stock Odoo20 Community. Fictional technician time rehearsal, one own-timesheet permission, one 1.5-hour entry and exact sales quantity review. No actual work, enforced approval or invoice. Preserve H43 instructions/photo, assignee/deadline and prior business records. The retained first Date Enter attempt produced an unintended zero-hour row; the next section corrects the original entry through the native calendar. The same entry and exact 1.5-hour result are verified.

Step 1. Check the existing task and employee

As the owner, open the existing task and verify its customer, project, assigned technician and Sales Order Item for S00008. Check that the employee is linked to the same technician user. The task starts with Allocated Time: 2h, zero recorded time and no timesheet rows. Allocation is the estimate; it is not proof of work performed. Keep the saved site instructions, assignee and deadline.

Video action 1: Owner: open the existing S00008 time-based job. The actual target is highlighted in gold.
Owner: open the existing S00008 time-based job.
Video action 2: Keep the existing Demo Service Jobs H40 project. The actual target is highlighted in gold.
Keep the existing Demo Service Jobs H40 project.
Video action 3: Check Demo Property H08 as the customer. The actual target is highlighted in gold.
Check Demo Property H08 as the customer.
Video action 4: Check the assigned Demo Technician H42. The actual target is highlighted in gold.
Check the assigned Demo Technician H42.
Video action 5: Verify the exact S00008 sales order item. The actual target is highlighted in gold.
Verify the exact S00008 sales order item.
Video action 6: Preserve the saved internal deadline. The actual target is highlighted in gold.
Preserve the saved internal deadline.
Video action 7: Two allocated hours are an estimate, with zero recorded time. The actual target is highlighted in gold.
Two allocated hours are an estimate, with zero recorded time.
Video action 8: Keep the existing site instructions and labelled photo handoff. The actual target is highlighted in gold.
Keep the existing site instructions and labelled photo handoff.
Video action 9: Open Timesheets as the owner before adding time. The actual target is highlighted in gold.
Open Timesheets as the owner before adding time.
Video action 10: The task begins with no timesheet rows. The actual target is highlighted in gold.
The task begins with no timesheet rows.

Step 2. Give the technician the stock time-entry permission

In the administrator session, open Settings → Users & Companies → Groups with developer mode enabled. Open the existing Timesheets / User: own timesheets only group. On Users, click Add a line, select Demo Technician H42, click Select, then Save manually. Preserve the existing members, group rules and dependencies. In this runtime the user form’s Timesheets picker showed only No and Administrator, so we used the native existing group membership screen. We did not create or edit a security rule or grant Timesheets Administrator.

Video action 11: Open the app menu for the native permission setup. The actual target is highlighted in gold.
Open the app menu for the native permission setup.
Video action 12: Choose Settings with developer mode enabled. The actual target is highlighted in gold.
Choose Settings with developer mode enabled.
Video action 13: Open Users and Companies. The actual target is highlighted in gold.
Open Users and Companies.
Video action 14: Open the existing native Groups list. The actual target is highlighted in gold.
Open the existing native Groups list.
Video action 15: Open Timesheets User own timesheets only. The actual target is highlighted in gold.
Open Timesheets User own timesheets only.
Video action 16: Use the existing own-timesheets group. The actual target is highlighted in gold.
Use the existing own-timesheets group.
Video action 17: Open its existing Users membership. The actual target is highlighted in gold.
Open its existing Users membership.
Video action 18: Preserve the current owner member. The actual target is highlighted in gold.
Preserve the current owner member.
Video action 19: Add an existing user to this group. The actual target is highlighted in gold.
Add an existing user to this group.
Video action 20: Select only the existing Demo Technician H42. The actual target is highlighted in gold.
Select only the existing Demo Technician H42.
Video action 21: Review the selected technician account. The actual target is highlighted in gold.
Review the selected technician account.
Video action 22: Apply the selected existing user. The actual target is highlighted in gold.
Apply the selected existing user.
Video action 23: The technician is added beside the retained owner. The actual target is highlighted in gold.
The technician is added beside the retained owner.
Video action 24: Commit the membership choice on the group heading. The actual target is highlighted in gold.
Commit the membership choice on the group heading.
Video action 25: Save this one native membership change and wait. The actual target is highlighted in gold.
Save this one native membership change and wait.
Video action 26: Reload the same saved own-timesheets group. The actual target is highlighted in gold.
Reload the same saved own-timesheets group.
Video action 27: The same technician membership remains after reload. The actual target is highlighted in gold.
The same technician membership remains after reload.

Step 3. Refresh the technician session and open Timesheets

Reload the technician’s own browser after the permission change, then reopen S00008 - Demo Time-Billed Labor H41. Its Timesheets tab now appears; it was absent with Project User alone. Click the tab and check the same project/customer/order context. The native table has Date, Employee, Description and Time Spent columns. Assigned-task access and timesheet permission are separate checks.

Video action 28: Technician session: reopen the assigned S00008 job. The actual target is highlighted in gold.
Technician session: reopen the assigned S00008 job.
Video action 29: Verify the same time-based S00008 sales order item. The actual target is highlighted in gold.
Verify the same time-based S00008 sales order item.
Video action 30: Keep the existing technician assigned. The actual target is highlighted in gold.
Keep the existing technician assigned.
Video action 31: Open the newly available Timesheets tab. The actual target is highlighted in gold.
Open the newly available Timesheets tab.
Video action 32: Check that there are no saved entries before adding one. The actual target is highlighted in gold.
Check that there are no saved entries before adding one.

Step 4. Add one dated and described time entry

Click Add a line once. The new row defaults to the current date and Demo Technician H42. Verify both rather than accepting another person’s entry. Choose October 14, 2026 with the Date cell’s native calendar, then click the task heading to commit the selection. Enter a description identifying the synthetic site assessment and service-report preparation, explicitly stating that no real work occurred. In your business, describe the actual work on its actual date. Enter 1.5 in Time Spent; click the task heading to leave the field. It displays 1h 30m, not one hour five minutes.

Video action 33: Add one intended technician time entry. The actual target is highlighted in gold.
Add one intended technician time entry.
Video action 34: Review the native current-date default. The actual target is highlighted in gold.
Review the native current-date default.
Video action 35: Use October 14 for this explicitly synthetic rehearsal. The actual target is highlighted in gold.
Use October 14 for this explicitly synthetic rehearsal.
Video action 36: Check the existing Demo Technician H42 employee. The actual target is highlighted in gold.
Check the existing Demo Technician H42 employee.
Video action 37: Describe the rehearsal and state that no real work occurred. The actual target is highlighted in gold.
Describe the rehearsal and state that no real work occurred.
Video action 38: Enter 1.5 hours in Time Spent. The actual target is highlighted in gold.
Enter 1.5 hours in Time Spent.
Video action 39: Click the task heading to commit the final duration cell. The actual target is highlighted in gold.
Click the task heading to commit the final duration cell.
Video action 40: Review one intended row showing 1h 30m. The actual target is highlighted in gold.
Review one intended row showing 1h 30m.
Video action 47: Edit the date on the original entry. The actual target is highlighted in gold.
Edit the date on the original entry.
Video action 48: Use the native calendar instead of Enter in this table. The actual target is highlighted in gold.
Use the native calendar instead of Enter in this table.
Video action 49: Check the calendar month is October 2026. The actual target is highlighted in gold.
Check the calendar month is October 2026.
Video action 50: Choose October 14 for this synthetic rehearsal. The actual target is highlighted in gold.
Choose October 14 for this synthetic rehearsal.
Video action 51: Click the heading to commit the corrected date. The actual target is highlighted in gold.
Click the heading to commit the corrected date.
Video action 52: Review one intended row with the corrected date and duration. The actual target is highlighted in gold.
Review one intended row with the corrected date and duration.

Step 5. Save once and check the row before reloading

Check that there is exactly one intended entry with the intended date. Tabbing past the last duration field can add a new blank row; remove unintended zero-hour rows with their Delete row control. During the isolated recording, Enter in the editable Date cell left the original date unchanged and an extra zero-hour row appeared; choosing the date with the native calendar corrected the retained entry. Click Save manually once and wait for its pending-change controls to disappear before reloading or navigating away. Our initial verification’s rapid save/reload sequence produced duplicate entries; we removed the test extras through the native UI. After correction, the saved task has one 1h 30m entry, 75% of the 2h allocation and Time Remaining: 0h 30m.

Video action 41: Save this one time entry and wait for persisted readback. The actual target is highlighted in gold.
Save this one time entry and wait for persisted readback.
Video action 42: Keep the first Save and inspect the saved result. The actual target is highlighted in gold.
Keep the first Save and inspect the saved result.
Video action 43: Reopen Timesheets to correct the saved rows. The actual target is highlighted in gold.
Reopen Timesheets to correct the saved rows.
Video action 44: Preserve the original 1h 30m entry. The actual target is highlighted in gold.
Preserve the original 1h 30m entry.
Video action 45: The extra row has zero hours and no work description. The actual target is highlighted in gold.
The extra row has zero hours and no work description.
Video action 46: Delete only the unintended zero-hour row. The actual target is highlighted in gold.
Delete only the unintended zero-hour row.
Video action 47: Edit the date on the original entry. The actual target is highlighted in gold.
Edit the date on the original entry.
Video action 48: Use the native calendar instead of Enter in this table. The actual target is highlighted in gold.
Use the native calendar instead of Enter in this table.
Video action 49: Check the calendar month is October 2026. The actual target is highlighted in gold.
Check the calendar month is October 2026.
Video action 50: Choose October 14 for this synthetic rehearsal. The actual target is highlighted in gold.
Choose October 14 for this synthetic rehearsal.
Video action 51: Click the heading to commit the corrected date. The actual target is highlighted in gold.
Click the heading to commit the corrected date.
Video action 52: Review one intended row with the corrected date and duration. The actual target is highlighted in gold.
Review one intended row with the corrected date and duration.
Video action 53: Save the correction once and wait for one persisted entry. The actual target is highlighted in gold.
Save the correction once and wait for one persisted entry.
Video action 54: Reload only after the corrected Save settles. The actual target is highlighted in gold.
Reload only after the corrected Save settles.
Video action 55: Open the corrected saved Timesheets table. The actual target is highlighted in gold.
Open the corrected saved Timesheets table.
Video action 56: The original entry now has October 14 and 1h 30m. The actual target is highlighted in gold.
The original entry now has October 14 and 1h 30m.

Step 6. Correct an existing entry without adding another

If the description needs clarification, click that existing row and edit its Description. Click the task heading to commit the cell, save once, wait for saving to finish and reopen Timesheets. We corrected the rehearsal description this way and retained the same entry, employee and 1.5-hour quantity. Check the whole table after a correction; another Add a line would record additional time.

Video action 57: Clarify the description on this same entry. The actual target is highlighted in gold.
Clarify the description on this same entry.
Video action 58: Clarify the office-review context without adding another entry. The actual target is highlighted in gold.
Clarify the office-review context without adding another entry.
Video action 59: Commit the description by clicking the heading. The actual target is highlighted in gold.
Commit the description by clicking the heading.
Video action 60: Save the same entry correction once and wait. The actual target is highlighted in gold.
Save the same entry correction once and wait.
Video action 61: Reopen the same task after the description Save settles. The actual target is highlighted in gold.
Reopen the same task after the description Save settles.
Video action 62: Open the single saved entry again. The actual target is highlighted in gold.
Open the single saved entry again.
Video action 63: Check the saved date on the original entry. The actual target is highlighted in gold.
Check the saved date on the original entry.
Video action 64: The existing employee remains linked. The actual target is highlighted in gold.
The existing employee remains linked.
Video action 65: The clarified description remains on that entry. The actual target is highlighted in gold.
The clarified description remains on that entry.

Step 7. Review the exact sales quantity from the office

As the owner, reopen the task’s Sales Order. S00008 still has Quantity: 2.00 Hours, but its time-based line now shows Delivered: 1.50 and Invoiced: 0.00. The sales order’s Hours Recorded button opens a Timesheets list showing the same employee/task/order item and 1h 30m. Its badge showed a rounded 2 in this runtime; use the detailed entry and Delivered value to check exact time. The saved line has 1.5 hours to invoice, and no customer invoice exists yet.

Video action 81: Open this task’s native Sales Order link. The actual target is highlighted in gold.
Open this task’s native Sales Order link.
Video action 82: Review the same S00008 Sales Order. The actual target is highlighted in gold.
Review the same S00008 Sales Order.
Video action 83: The ordered quantity is still 2.00. The actual target is highlighted in gold.
The ordered quantity is still 2.00.
Video action 84: The ordered unit remains Hours. The actual target is highlighted in gold.
The ordered unit remains Hours.
Video action 85: Delivered is exactly 1.50 from the recorded time. The actual target is highlighted in gold.
Delivered is exactly 1.50 from the recorded time.
Video action 86: Invoiced remains 0.00. The actual target is highlighted in gold.
Invoiced remains 0.00.
Video action 87: The Hours Recorded badge rounds the duration to 2. The actual target is highlighted in gold.
The Hours Recorded badge rounds the duration to 2.
Video action 88: Open Hours Recorded for its exact detailed entry. The actual target is highlighted in gold.
Open Hours Recorded for its exact detailed entry.
Video action 89: The detailed date is October 14. The actual target is highlighted in gold.
The detailed date is October 14.
Video action 90: The detailed employee is Demo Technician H42. The actual target is highlighted in gold.
The detailed employee is Demo Technician H42.
Video action 91: The entry belongs to Demo Service Jobs H40. The actual target is highlighted in gold.
The entry belongs to Demo Service Jobs H40.
Video action 92: The entry belongs to the S00008 task. The actual target is highlighted in gold.
The entry belongs to the S00008 task.
Video action 93: The same clarified rehearsal description remains. The actual target is highlighted in gold.
The same clarified rehearsal description remains.
Video action 94: The exact sales order item is retained. The actual target is highlighted in gold.
The exact sales order item is retained.
Video action 95: Use the exact 1h 30m detailed duration for review. The actual target is highlighted in gold.
Use the exact 1h 30m detailed duration for review.
Video action 96: The list contains this one retained time entry. The actual target is highlighted in gold.
The list contains this one retained time entry.
Video action 97: Return to the same S00008 order. The actual target is highlighted in gold.
Return to the same S00008 order.
Video action 98: Creating an invoice is a separate office action. The actual target is highlighted in gold.
Creating an invoice is a separate office action.

Step 8. Keep office review and invoicing separate

Reopen the same task from both sessions and confirm one retained entry. The task remains Ready / In Progress, with its instructions, photo and deadline intact. Saving this billable entry made the linked quantity invoiceable immediately; no separate timesheet-approval gate was demonstrated. Review the work and agreement before creating an invoice. The earlier H11 ordered-quantity services remain separate and unchanged; merely choosing Hours did not convert them to time-based billing.

Video action 66: Detailed Time Spent is 1h 30m. The actual target is highlighted in gold.
Detailed Time Spent is 1h 30m.
Video action 67: Two allocated hours remain separate from recorded time. The actual target is highlighted in gold.
Two allocated hours remain separate from recorded time.
Video action 68: Time Remaining is 0h 30m. The actual target is highlighted in gold.
Time Remaining is 0h 30m.
Video action 69: The job retains the same S00008 sales item. The actual target is highlighted in gold.
The job retains the same S00008 sales item.
Video action 70: Office session: reopen the same assigned job. The actual target is highlighted in gold.
Office session: reopen the same assigned job.
Video action 71: Review the same saved Timesheets from the office. The actual target is highlighted in gold.
Review the same saved Timesheets from the office.
Video action 72: One corrected employee entry retains 1h 30m. The actual target is highlighted in gold.
One corrected employee entry retains 1h 30m.
Video action 73: Allocated Time remains the separate 2h estimate. The actual target is highlighted in gold.
Allocated Time remains the separate 2h estimate.
Video action 74: The job remains in the Ready stage. The actual target is highlighted in gold.
The job remains in the Ready stage.
Video action 75: The separate task status remains In Progress. The actual target is highlighted in gold.
The separate task status remains In Progress.
Video action 76: Reopen the preserved job instructions. The actual target is highlighted in gold.
Reopen the preserved job instructions.
Video action 77: The original site instructions remain intact. The actual target is highlighted in gold.
The original site instructions remain intact.
Video action 78: The labelled training image remains attached. The actual target is highlighted in gold.
The labelled training image remains attached.
Video action 79: The saved deadline remains October 16 at 4 PM. The actual target is highlighted in gold.
The saved deadline remains October 16 at 4 PM.
Video action 80: The same technician remains assigned. The actual target is highlighted in gold.
The same technician remains assigned.
Video action 99: Return through the existing Projects and Tasks link. The actual target is highlighted in gold.
Return through the existing Projects and Tasks link.
Video action 100: Reopen the same generated task without creating another. The actual target is highlighted in gold.
Reopen the same generated task without creating another.
Video action 101: Check the same saved time once more. The actual target is highlighted in gold.
Check the same saved time once more.
Video action 102: Keep office review and invoicing separate from this entry. The actual target is highlighted in gold.
Keep office review and invoicing separate from this entry.
Video action 103: Technician session: the same assigned job still opens. The actual target is highlighted in gold.
Technician session: the same assigned job still opens.
Video action 104: Reopen the technician’s saved time entry. The actual target is highlighted in gold.
Reopen the technician’s saved time entry.
Video action 105: One original entry still shows October 14 and 1h 30m. The actual target is highlighted in gold.
One original entry still shows October 14 and 1h 30m.
Video action 106: Ready remains the task stage. The actual target is highlighted in gold.
Ready remains the task stage.
Video action 107: In Progress remains the separate task status. The actual target is highlighted in gold.
In Progress remains the separate task status.
Video action 108: Reopen the unchanged site instructions. The actual target is highlighted in gold.
Reopen the unchanged site instructions.
Video action 109: Instructions and the training handoff remain saved. The actual target is highlighted in gold.
Instructions and the training handoff remain saved.
Video action 110: The deadline is retained separately from recorded time. The actual target is highlighted in gold.
The deadline is retained separately from recorded time.
Video action 111: The unrelated private task remains denied. The actual target is highlighted in gold.
The unrelated private task remains denied.
Video action 112: This boundary is checked on one unrelated task only. The actual target is highlighted in gold.
This boundary is checked on one unrelated task only.
Video action 113: Returning to the assigned task succeeds. The actual target is highlighted in gold.
Returning to the assigned task succeeds.
Video action 114: Finish on the retained single time entry. The actual target is highlighted in gold.
Finish on the retained single time entry.
Video action 115: Review the actual work and agreement before invoicing. The actual target is highlighted in gold.
Review the actual work and agreement before invoicing.

Check the result

One saved October 14 timesheet belongs to Demo Technician H42, the correct employee, project and S00008 task. Its duration is 1.5 hours, displayed as 1h 30m; the same entry survives description correction and both roles’ reopen checks. Recorded time is 1.5 hours with 0.5 hours remaining against a two-hour allocation. Its native sales link made S00008 Delivered and quantity to invoice 1.50, with zero invoiced and no created invoice. The task’s stage/status and earlier business records remain unchanged.

If your screen differs

If Timesheets is missing, check the installed official Task Logs/hr_timesheet and sale_timesheet modules, the project’s Timesheets setting, employee/user link and the specific timesheet group. Refresh after changing access. Project User alone did not show the tab here. The own-timesheets group membership was saved without Administrator or all-timesheets access; the technician still received Access Error on the unrelated private task. This is not a complete permission audit. Check for blank rows and duplicate time before billing, wait for Save to finish, and compare exact duration with the detailed entry rather than the rounded hours badge. No stopwatch, payroll export, enforced approval, invoice creation or real job completion was tested.

Frequently asked questions

How do I record technician time on an Odoo task?

Open the assigned task’s Timesheets tab as an employee-linked user with the stock time-entry permission. Choose Add a line, check Date and Employee, enter a useful Description and Time Spent, then save once and reopen. In this test, entering 1.5 displayed 1h 30m and retained one linked entry.

Does every Odoo timesheet become an invoice line?

Billing depends on the service policy and sales link. Here, a Based on Timesheets service linked the saved 1.5 hours to the intended sales line and made that quantity invoiceable. No invoice was created. The earlier ordered-quantity services stayed unchanged, and no enforced approval gate was demonstrated.

Why can’t my Odoo employee enter timesheets?

Check the employee/user link, project Timesheets setting and the user’s timesheet permission, then refresh the session. Our assigned Project User had no Timesheets tab until the administrator added the existing User: own timesheets only group through native Groups membership. The technician then entered their own time without Timesheets Administrator access.

Continue building the business

Continue with How do I record materials used and returned on an Odoo job?. Time entry and physical material movements need separate records and review.

Talk to an Odoo partner

Bring your current process and the result you need to Onward to plan your Odoo workflow. Talk to an Odoo partner.