TIP: You can type at any time to perform a new search.
Task Logs
hr_timesheet · odoo/odoo
- Repository
- odoo/odoo · module folder
- Module version
- 1.0
- Category
- Services/Timesheets
- Folder size
- 4.53 MB
- License
- LGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://www.odoo.com/app/timesheet
- Last tracking update
- 2026-08-21 16:14:24
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Raphael Collet, Thibault Delavallée, Odoo Translation Bot, Aaron Bohy, Yannick Tivisse, Jorge Pinna Puissant, Julien Castiaux, Julien Mougenot, svs-odoo, Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, william-andre, Audric Onockx (auon), luvi, Vincent Larcin, damr, Louis Wicket (wil), Victor Piryns (pivi), Dylan Kiss (dyki), Xavier Bol (xbo), Brieuc-brd, rajh-odoo, guva-odoo, Youssef Bashandy, bary, Maxime de Neuville, suth-odoo, sami odoo, asno-odoo, Mathieu Coutant, Abdelrahman Mahmoud (amah), Mohammad Abdulmoneim (abdu), Michaël Mattiello, K Theja (kthe), Mahdi Alijani (malj), bona-odoo, Krzysztof Magusiak (krma), Ajit Singh, Akash Pandey, Robin Engels (roen), vpan-odoo, nsirjacobs, mjvi-odoo, K Theja (kthe@odoo.com), Quentin Colla (qucol), Elliot ELCO, Maxime de Neuville (mane), maap-odoo, Abdelouahab Laaroussi (abla), Farah (ahmfa), karygauss03, chpa-odoo, Stanislav Kostenko, Jenish Korat, nikhil
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- fieldservice_timesheet, hr_timesheet_attendance, hr_timesheet_autofill_project_off, hr_timesheet_begin_end, hr_timesheet_day_week, hr_timesheet_employee_analytic_tag, hr_timesheet_portal, hr_timesheet_task_domain, hr_timesheet_task_required, hr_timesheet_task_stage, hr_timesheet_time_control, maintenance_timesheet, project_milestone_status, project_task_ancestor, project_timeline_hr_timesheet, project_timesheet_holidays, sale_timesheet, spreadsheet_dashboard_hr_timesheet, website_timesheet
- Description
This module implements a timesheet system. ========================================== Each employee can encode and track their time spent on the different projects. Lots of reporting on time and employee tracking are provided. It is completely integrated with the cost accounting module. It allows you to set up a management by affair.
Code Analysis ⓘ
Views touched (68)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | kanban | Inherits hr.hr_department_view_kanban |
hr_employee_delete_wizard_form |
Delete Employee | hr.employee.delete.wizard | form | New |
hr_employee_public_view_form |
hr.employee.public.form.inherit.timesheet | hr.employee.public | form | Inherits hr.hr_employee_public_view_form |
hr_employee_view_form_inherit_timesheet |
hr.employee.form.timesheet | hr.employee | form | Inherits hr_hourly_cost.view_employee_form |
hr_employee_view_kanban_inherit_timesheet |
hr.employee.kanban.timesheet | hr.employee | kanban | Inherits hr.hr_kanban_view_employees |
hr_timesheet.timesheet_project_task_page |
hr_timesheet.timesheet_project_task_page | ir.ui.view | qweb | New |
hr_timesheet.timesheet_table |
hr_timesheet.timesheet_table | ir.ui.view | qweb | New |
hr_timesheet_line_form |
account.analytic.line.form | account.analytic.line | form | New |
hr_timesheet_line_my_timesheet_search |
view.search.my.timesheet.menu | account.analytic.line | search | Inherits hr_timesheet_line_search |
hr_timesheet_line_portal_tree |
portal.hr_timesheet.account.analytic.line.list | account.analytic.line | list | Inherits hr_timesheet_line_tree |
hr_timesheet_line_search |
account.analytic.line.search | account.analytic.line | search | Inherits analytic.view_account_analytic_line_filter |
hr_timesheet_line_tree |
account.analytic.line.list.hr_timesheet | account.analytic.line | list | New |
hr_timesheet_report_search |
timesheets.analysis.report.search | timesheets.analysis.report | search | Inherits hr_timesheet.hr_timesheet_line_search |
portal_layout |
Portal layout: timesheet menu entry | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_timesheet |
Timesheets | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_task |
Portal: My Task with Timesheets | ir.ui.view | qweb | Inherits project.portal_my_task |
portal_my_task_allocated_hours_template |
portal_my_task_allocated_hours_template | ir.ui.view | qweb | New |
portal_my_timesheets |
My Timesheets | ir.ui.view | qweb | New |
portal_tasks_list_inherit |
Portal: My Tasks with Timesheets | ir.ui.view | qweb | Inherits project.portal_tasks_list |
portal_timesheet_table |
Portal Timesheet Table | ir.ui.view | qweb | New |
project_invoice_form |
Inherit project form : Invoicing Data | project.project | form | Inherits project.edit_project |
project_project_view_form_simplified_inherit_timesheet |
project.project.view.form.simplified.inherit.timesheet | project.project | form | Inherits project.project_project_view_form_simplified |
project_project_view_tree_inherit_sale_project |
project.project.list.inherit.sale.timesheet | project.project | list | Inherits project.view_project |
project_sharing_inherit_project_task_view_form |
project.sharing.project.task.view.form.inherit | project.task | form | Inherits project.project_sharing_project_task_view_form |
project_sharing_kanban_inherit_project_task_view_kanban |
project.sharing.project.task.timesheet.kanban.inherited | project.task | kanban | Inherits project.project_sharing_project_task_view_kanban |
project_task_view_graph |
project.task.view.graph.inherited | project.task | graph | Inherits project.view_project_task_graph |
project_task_view_pivot |
project.task.view.pivot.inherited | project.task | pivot | Inherits project.view_project_task_pivot |
project_task_view_search |
project.task.view.search.inherit.sale.timesheet.enterprise | project.task | search | Inherits project.view_task_search_form_project_fsm_base |
project_templates_view_list_inherit_timesheet |
project.project.template.list.inherit.timesheet | project.project | list | Inherits project.project_templates_view_list |
project_update_view_kanban_inherit |
project.update.view.kanban.inherit | project.update | kanban | Inherits project.project_update_view_kanban |
project_update_view_search_inherit |
project.update.view.search.inherit | project.update | search | Inherits project.project_update_view_search |
report_project_task_timesheet |
report_project_task_timesheet | ir.ui.view | qweb | New |
report_timesheet |
report_timesheet | ir.ui.view | qweb | New |
report_timesheet_project |
report_timesheet_project | ir.ui.view | qweb | New |
report_timesheet_task |
report_timesheet_task | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.hr.timesheet | res.config.settings | form | Inherits base.res_config_settings_view_form |
timesheet_report_subtask |
timesheet_report_subtask | ir.ui.view | qweb | New |
timesheet_view_form_portal_user |
account.analytic.line.form | account.analytic.line | form | Inherits hr_timesheet.timesheet_view_form_user |
timesheet_view_form_user |
account.analytic.line.list.with.user | account.analytic.line | form | Inherits hr_timesheet.hr_timesheet_line_form |
timesheet_view_tree_user |
account.analytic.line.view.list.with.user | account.analytic.line | list | Inherits hr_timesheet_line_tree |
timesheets_analysis_report_form |
timesheets.analysis.report.form | timesheets.analysis.report | form | New |
timesheets_analysis_report_graph_employee |
timesheets.analysis.report.graph | timesheets.analysis.report | graph | New |
timesheets_analysis_report_graph_project |
timesheets.analysis.report.graph | timesheets.analysis.report | graph | New |
timesheets_analysis_report_graph_task |
timesheets.analysis.report.graph | timesheets.analysis.report | graph | New |
timesheets_analysis_report_list |
timesheets.analysis.report.list | timesheets.analysis.report | list | New |
timesheets_analysis_report_pivot_employee |
timesheets.analysis.report.pivot | timesheets.analysis.report | pivot | New |
timesheets_analysis_report_pivot_project |
timesheets.analysis.report.pivot | timesheets.analysis.report | pivot | New |
timesheets_analysis_report_pivot_task |
timesheets.analysis.report.pivot | timesheets.analysis.report | pivot | New |
view_calendar_account_analytic_line |
account.analytic.line.calendar | account.analytic.line | calendar | New |
view_calendar_account_analytic_line_multi_create |
account.analytic.line.calendar.multi_create | account.analytic.line | form | New |
view_calendar_account_analytic_line_my_timesheets |
account.analytic.line.calendar | account.analytic.line | calendar | Inherits hr_timesheet.view_calendar_account_analytic_line |
view_employee_tree_inherit_timesheet |
hr.employee.list.timesheet | hr.employee | list | Inherits hr.view_employee_tree |
view_hr_timesheet_line_by_project |
account.analytic.line.graph.by.project | account.analytic.line | graph | Inherits hr_timesheet.view_hr_timesheet_line_graph_all |
view_hr_timesheet_line_graph |
account.analytic.line.graph | account.analytic.line | graph | New |
view_hr_timesheet_line_graph_all |
account.analytic.line.graph | account.analytic.line | graph | New |
view_hr_timesheet_line_graph_by_employee |
account.analytic.line.graph.by.employee | account.analytic.line | graph | Inherits hr_timesheet.view_hr_timesheet_line_graph_all |
view_hr_timesheet_line_graph_my |
account.analytic.line.graph | account.analytic.line | graph | New |
view_hr_timesheet_line_pivot |
account.analytic.line.pivot | account.analytic.line | pivot | New |
view_kanban_account_analytic_line |
account.analytic.line.kanban | account.analytic.line | kanban | New |
view_kanban_account_analytic_line_portal_user |
portal.account.analytic.line.kanban | account.analytic.line | kanban | Inherits hr_timesheet.view_kanban_account_analytic_line |
view_my_timesheet_line_pivot |
account.analytic.line.pivot | account.analytic.line | pivot | New |
view_project_kanban_inherited |
project.project.timesheet.kanban.inherited | project.project | kanban | Inherits project.view_project_kanban |
view_project_project_filter_inherit_timesheet |
project.project.view.inherit.timesheet | project.project | Inherits project.view_project_project_filter | |
view_task_form2_inherited |
project.task.form.inherited | project.task | form | Inherits project.view_task_form2 |
view_task_kanban_inherited_progress |
project.task.timesheet.kanban.inherited.progress | project.task | kanban | Inherits project.view_task_kanban |
view_task_project_user_graph_inherited |
report.project.task.user.graph.inherited | report.project.task.user | graph | Inherits project.view_task_project_user_graph |
view_task_project_user_pivot_inherited |
report.project.task.user.pivot.inherited | report.project.task.user | pivot | Inherits project.view_task_project_user_pivot |
view_task_tree2_inherited |
project.task.list.inherited | project.task | list | Inherits project.project_task_view_tree_main_base |
HTTP endpoints (1)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/my/timesheets, /my/timesheets/page/<int:page> |
TimesheetCustomerPortal.portal_my_timesheets |
user | http | ALL | sudo website |
Models touched (17)
New fields (1)
-
business_domainSelectionondelete={'timesheet': 'cascade'}selection_add=[('timesheet', 'Timesheet')]
No public methods.
New fields (14)
-
calendar_display_nameCharcompute='_compute_calendar_display_name'export_string_translation=False -
department_idMany2one → hr.departmentcompute='_compute_department_id'compute_sudo=Truestore=True args: 'hr.department', 'Department' -
employee_idMany2one → hr.employeecontext={'active_test': False}domain=_domain_employee_idhelp="Define an 'hourly cost' on the employee to track the cost of their time."index=True args: 'hr.employee', 'Employee' -
encoding_uom_idMany2one → uom.uomcompute='_compute_encoding_uom_id'export_string_translation=False args: 'uom.uom' -
job_titleCharexport_string_translation=Falserelated='employee_id.job_title' -
manager_idMany2one → hr.employeerelated='employee_id.parent_id'store=True args: 'hr.employee', 'Manager' -
message_partner_idsMany2many → res.partnercompute='_compute_message_partner_ids'search='_search_message_partner_ids' args: 'res.partner' -
milestone_idMany2one → project.milestonerelated='task_id.milestone_id' args: 'project.milestone' -
parent_task_idMany2one → project.taskindex='btree_not_null'related='task_id.parent_id'store=True args: 'project.task' -
partner_idMany2onecompute='_compute_partner_id'readonly=Falsestore=True -
project_idMany2one → project.projectcompute='_compute_project_id'domain=_domain_project_idindex=Trueinverse='_inverse_project_id'readonly=Falsestore=True args: 'project.project', 'Project' -
readonly_timesheetBooleancompute='_compute_readonly_timesheet'compute_sudo=Trueexport_string_translation=False -
task_idMany2one → project.taskcompute='_compute_task_id'domain="[('allow_timesheets', '=', True), ('project_id', '=?', project_id), ('has_template_ancestor', '=', False)]"index='btree_not_null'readonly=Falsestore=True args: 'project.task', 'Task' -
user_idMany2onecompute='_compute_user_id'readonly=Falsestore=True
-
action_open_timesheet_view_portal(self) -
create(self, vals_list)@api.model_create_multi -
default_get(self, fields)@api.model -
get_import_templates(self)@api.model -
get_unusual_days(self, date_from, date_to=None)@api.model -
get_views(self, views, options=None)@api.model -
write(self, vals)
New fields (4)
-
activeBooleandefault=Trueexport_string_translation=False -
checkedBooleandefault=Trueexport_string_translation=False -
employee_idMany2one → hr.employeeexport_string_translation=False args: 'hr.employee' -
user_idMany2one → res.usersdefault=<expr>export_string_translation=Falseondelete='cascade'required=True args: 'res.users'
No public methods.
New fields (1)
-
has_timesheetBooleancompute='_compute_has_timesheet'export_string_translation=False
-
action_timesheet_from_employee(self) -
action_unlink_wizard(self)
New fields (3)
-
employee_idsMany2many → hr.employeecontext={'active_test': False}export_string_translation=Falsestring='Employees' args: 'hr.employee' -
has_active_employeeBooleancompute='_compute_has_active_employee'export_string_translation=Falsestring='Has Active Employee' -
has_timesheetBooleancompute='_compute_has_timesheet'compute_sudo=Trueexport_string_translation=Falsestring='Has Timesheet'
-
action_archive(self) -
action_confirm_delete(self) -
action_open_timesheets(self)
New fields (1)
-
has_timesheetBooleanrelated='employee_id.has_timesheet'
-
action_timesheet_from_employee(self)
New fields (0)
No new fields.
Public methods (2)-
get_timesheet_uoms(self)@api.model -
session_info(self)The widget 'timesheet_uom' needs to know which UoM conversion factor and which javascript widget to apply, depending on the current company.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (12)
-
account_idMany2onedomain="[\n '|', ('company_id', '=', False), ('company_id', '=?', company_id),\n ('partner_id', '=?', partner_id),\n ]" -
allocated_hoursFloatstring='Allocated Time'tracking=True -
allow_timesheetsBooleancompute='_compute_allow_timesheets'default=Truereadonly=Falsestore=True args: 'Timesheets' -
analytic_account_activeBooleanexport_string_translation=Falserelated='account_id.active' args: 'Active Account' -
effective_hoursFloatcompute='_compute_remaining_hours'compute_sudo=Truestring='Time Spent' -
encode_uom_in_daysBooleancompute='_compute_encode_uom_in_days'export_string_translation=False -
is_internal_projectBooleancompute='_compute_is_internal_project'export_string_translation=Falsesearch='_search_is_internal_project' -
is_project_overtimeBooleancompute='_compute_remaining_hours'compute_sudo=Trueexport_string_translation=Falsesearch='_search_is_project_overtime' args: 'Project in Overtime' -
remaining_hoursFloatcompute='_compute_remaining_hours'compute_sudo=Truestring='Time Remaining' -
timesheet_encode_uom_idMany2one → uom.uomcompute='_compute_timesheet_encode_uom_id'export_string_translation=False args: 'uom.uom' -
timesheet_idsOne2many → account.analytic.lineexport_string_translation=False args: 'account.analytic.line', 'project_id', 'Associated Timesheets' -
total_timesheet_timeFloatcompute='_compute_total_timesheet_time'export_string_translation=Falsegroups='hr_timesheet.group_hr_timesheet_user'string='Total amount of time (in the proper unit) recorded in the project, rounded to the unit.'
-
action_project_timesheets(self) -
action_view_tasks(self) -
create(self, vals_list)@api.model_create_multiCreate an analytic account if project allow timesheet and don't provide one Note: create it before calling super() to avoid raising the ValidationError from _check_allow_timesheet -
get_create_edit_project_ids(self)@api.model -
write(self, vals)
New fields (13)
-
allow_timesheetsBooleancompute='_compute_allow_timesheets'compute_sudo=Trueexport_string_translation=Falsereadonly=Truesearch='_search_allow_timesheets' args: 'Allow timesheets' -
analytic_account_activeBooleanexport_string_translation=Falserelated='project_id.analytic_account_active' args: 'Active Analytic Account' -
display_nameCharhelp='Use these keywords in the title to set new tasks:\n\n 30h Allocate 30 hours to the task\n #tags Set tags on the task\n @user Assign the task to a user\n ! Set the task a medium priority\n !! Set the task a high priority\n !!! Set the task a urgent priority\n\n Make sure to use the right format and order e.g. Improve the configuration screen 5h #feature #v16 @Mitchell !' -
effective_hoursFloatcompute='_compute_effective_hours'compute_sudo=Truestore=True args: 'Time Spent' -
encode_uom_in_daysBooleancompute='_compute_encode_uom_in_days'default=<expr>export_string_translation=False -
overtimeFloatcompute='_compute_progress_hours'store=True -
progressFloataggregator='avg'compute='_compute_progress_hours'store=True args: 'Progress' -
project_idMany2onedomain="['|', ('company_id', '=', False), ('company_id', '=?', company_id), ('is_internal_project', '=', False), ('is_template', 'in', [is_template, False])]" -
remaining_hoursFloatcompute='_compute_remaining_hours'help='Number of allocated hours minus the number of hours spent.'readonly=Truestore=True args: 'Time Remaining' -
remaining_hours_percentageFloatcompute='_compute_remaining_hours_percentage'export_string_translation=Falsesearch='_search_remaining_hours_percentage' -
subtask_effective_hoursFloatcompute='_compute_subtask_effective_hours'help='Time spent on the sub-tasks (and their own sub-tasks) of this task.'recursive=Truestore=True args: 'Time Spent on Sub-tasks' -
timesheet_idsOne2many → account.analytic.lineexport_string_translation=False args: 'account.analytic.line', 'task_id', 'Timesheets' -
total_hours_spentFloatcompute='_compute_total_hours_spent'help='Time spent on this task and its sub-tasks (and their own sub-tasks).'store=True args: 'Total Time Spent'
-
TASK_PORTAL_READABLE_FIELDS(self)@property -
action_view_subtask_timesheet(self)
New fields (5)
-
allocated_timeIntegerreadonly=True args: 'Allocated Time' -
display_timesheet_statsBooleancompute='_compute_display_timesheet_stats'export_string_translation=False -
timesheet_percentageIntegercompute='_compute_timesheet_percentage'export_string_translation=False -
timesheet_timeIntegerreadonly=True args: 'Timesheet Time' -
uom_idMany2one → uom.uomexport_string_translation=Falsereadonly=True args: 'uom.uom', 'Unit'
-
create(self, vals_list)@api.model_create_multi
New fields (6)
-
allocated_hoursFloatgroups='hr_timesheet.group_hr_timesheet_user'readonly=True args: 'Allocated Time' -
effective_hoursFloatgroups='hr_timesheet.group_hr_timesheet_user'readonly=True args: 'Time Spent' -
overtimeFloatgroups='hr_timesheet.group_hr_timesheet_user'readonly=True -
progressFloataggregator='avg'groups='hr_timesheet.group_hr_timesheet_user'readonly=True args: 'Progress' -
remaining_hoursFloatgroups='hr_timesheet.group_hr_timesheet_user'readonly=True args: 'Time Remaining' -
remaining_hours_percentageFloatgroups='hr_timesheet.group_hr_timesheet_user'readonly=True args: 'Time Remaining Percentage'
No public methods.
New fields (3)
-
internal_project_idMany2one → project.projectdomain=[('is_template', '=', False)]help='Default project value for timesheet generated from time off type.'string='Internal Project' args: 'project.project' -
project_time_mode_idMany2one → uom.uomdefault=_default_project_time_mode_idhelp="This will set the unit of measure used in projects and tasks.\nIf you use the timesheet linked to projects, don't forget to setup the right unit of measure in your employees."string='Project Time Unit' args: 'uom.uom' -
timesheet_encode_uom_idMany2one → uom.uomdefault=_default_timesheet_encode_uom_idstring='Timesheet Encoding Unit' args: 'uom.uom'
-
create(self, vals_list)@api.model_create_multi
New fields (6)
-
is_encode_uom_daysBooleancompute='_compute_is_encode_uom_days'export_string_translation=False -
module_project_timesheet_holidaysBooleancompute='_compute_timesheet_modules'readonly=Falsestore=True args: 'Time Off' -
project_time_mode_idMany2one → uom.uomhelp="This will set the unit of measure used in projects and tasks.\nIf you use the timesheet linked to projects, don't forget to setup the right unit of measure in your employees."readonly=Falserelated='company_id.project_time_mode_id'string='Project Time Unit' args: 'uom.uom' -
reminder_allowBooleanstring='Approver Reminder' -
reminder_user_allowBooleanstring='Employee Reminder' -
timesheet_encode_methodSelectioncompute='_compute_timesheet_encode_method'inverse='_inverse_timesheet_encode_method'required=Truestring='Encoding Method' args: [('hours', 'Hours / Minutes'), ('days', 'Days / Half-Days')]
No public methods.
New fields (15)
-
amountMonetarycurrency_field='currency_id'readonly=True args: 'Amount' -
company_idMany2one → res.companyreadonly=Truestring='Company' args: 'res.company' -
currency_idMany2one → res.currencyreadonly=Truestring='Currency' args: 'res.currency' -
dateDatereadonly=True args: 'Date' -
department_idMany2one → hr.departmentreadonly=Truestring='Department' args: 'hr.department' -
manager_idMany2one → hr.employeereadonly=True args: 'hr.employee', 'Manager' -
message_partner_idsMany2many → res.partnercompute='_compute_message_partner_ids'readonly=Truesearch='_search_message_partner_ids' args: 'res.partner' -
milestone_idMany2one → project.milestonerelated='task_id.milestone_id' args: 'project.milestone' -
nameCharreadonly=True args: 'Description' -
parent_task_idMany2one → project.taskreadonly=Truestring='Parent Task' args: 'project.task' -
partner_idMany2one → res.partnerreadonly=Truestring='Partner' args: 'res.partner' -
project_idMany2one → project.projectreadonly=Truestring='Project' args: 'project.project' -
task_idMany2one → project.taskreadonly=Truestring='Task' args: 'project.task' -
unit_amountFloatreadonly=True args: 'Time Spent' -
user_idMany2one → res.usersreadonly=Truestring='User' args: 'res.users'
-
init(self)
New fields (1)
-
timesheet_widgetCharexport_string_translation=False args: 'Widget'
No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…