Task Logs

hr_timesheet
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYServices/Timesheets
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, 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), bona-odoo, Krzysztof Magusiak (krma), Mahdi Alijani (malj), Ajit Singh, Akash Pandey, vpan-odoo, nsirjacobs, mjvi-odoo, K Theja (kthe@odoo.com), Elliot ELCO, Abdelouahab Laaroussi (abla), Farah (ahmfa), karygauss03, maap-odoo, chpa-odoo, nikhil, Jenish Korat, Stanislav Kostenko
WEBSITE
WEBSITEhttps://www.odoo.com/app/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr
    - base_setup
    - base
    - web
    - digest
    - mail
    - bus
    - web_tour
    - html_editor
    - portal
    - http_routing
    - auth_signup
    - resource
    - phone_validation
    - resource_mail
    - hr_hourly_cost
    - analytic
    - uom
    - project
    - rating
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 IDNameModelTypeStatus
hr_department_view_kanban hr.department.kanban.inherit hr.department data 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 xpath Inherits hr.hr_employee_public_view_form
hr_employee_view_form_inherit_timesheet hr.employee.form.timesheet hr.employee xpath Inherits hr_hourly_cost.view_employee_form
hr_employee_view_kanban_inherit_timesheet hr.employee.kanban.timesheet hr.employee xpath 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 field Inherits hr_timesheet_line_search
hr_timesheet_line_portal_tree portal.hr_timesheet.account.analytic.line.list account.analytic.line xpath Inherits hr_timesheet_line_tree
hr_timesheet_line_search account.analytic.line.search account.analytic.line xpath 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 xpath Inherits project.edit_project
project_project_view_form_simplified_inherit_timesheet project.project.view.form.simplified.inherit.timesheet project.project xpath Inherits project.project_project_view_form_simplified
project_project_view_tree_inherit_sale_project project.project.list.inherit.sale.timesheet project.project xpath Inherits project.view_project
project_sharing_inherit_project_task_view_form project.sharing.project.task.view.form.inherit project.task xpath 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 templates Inherits project.project_sharing_project_task_view_kanban
project_task_view_graph project.task.view.graph.inherited project.task xpath Inherits project.view_project_task_graph
project_task_view_pivot project.task.view.pivot.inherited project.task xpath Inherits project.view_project_task_pivot
project_task_view_search project.task.view.search.inherit.sale.timesheet.enterprise project.task xpath Inherits project.view_task_search_form_project_fsm_base
project_templates_view_list_inherit_timesheet project.project.template.list.inherit.timesheet project.project field Inherits project.project_templates_view_list
project_update_view_kanban_inherit project.update.view.kanban.inherit project.update div Inherits project.project_update_view_kanban
project_update_view_search_inherit project.update.view.search.inherit project.update xpath 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 xpath 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 xpath Inherits hr_timesheet.timesheet_view_form_user
timesheet_view_form_user account.analytic.line.list.with.user account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
timesheet_view_tree_user account.analytic.line.view.list.with.user account.analytic.line xpath 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 xpath Inherits hr.view_employee_tree
view_hr_timesheet_line_by_project account.analytic.line.graph.by.project account.analytic.line field 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 field 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 xpath 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 xpath Inherits project.view_project_kanban
view_project_project_filter_inherit_timesheet project.project.view.inherit.timesheet project.project filter Inherits project.view_project_project_filter
view_task_form2_inherited project.task.form.inherited project.task xpath Inherits project.view_task_form2
view_task_kanban_inherited_progress project.task.timesheet.kanban.inherited.progress project.task templates Inherits project.view_task_kanban
view_task_project_user_graph_inherited report.project.task.user.graph.inherited report.project.task.user xpath 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 field Inherits project.project_task_view_tree_main_base
Models touched (17)

New fields (1)
  • business_domain Selection
    ondelete={'timesheet': 'cascade'} selection_add=[('timesheet', 'Timesheet')]
Public methods (0)

No public methods.

New fields (14)
  • calendar_display_name Char
    compute='_compute_calendar_display_name' export_string_translation=False
  • department_id Many2one → hr.department
    compute='_compute_department_id' compute_sudo=True store=True args: 'hr.department', 'Department'
  • employee_id Many2one → hr.employee
    context={'active_test': False} domain=_domain_employee_id help="Define an 'hourly cost' on the employee to track the cost of their time." index=True args: 'hr.employee', 'Employee'
  • encoding_uom_id Many2one → uom.uom
    compute='_compute_encoding_uom_id' export_string_translation=False args: 'uom.uom'
  • job_title Char
    export_string_translation=False related='employee_id.job_title'
  • manager_id Many2one → hr.employee
    related='employee_id.parent_id' store=True args: 'hr.employee', 'Manager'
  • message_partner_ids Many2many → res.partner
    compute='_compute_message_partner_ids' search='_search_message_partner_ids' args: 'res.partner'
  • milestone_id Many2one → project.milestone
    related='task_id.milestone_id' args: 'project.milestone'
  • parent_task_id Many2one → project.task
    index='btree_not_null' related='task_id.parent_id' store=True args: 'project.task'
  • partner_id Many2one
    compute='_compute_partner_id' readonly=False store=True
  • project_id Many2one → project.project
    compute='_compute_project_id' domain=_domain_project_id index=True readonly=False store=True args: 'project.project', 'Project'
  • readonly_timesheet Boolean
    compute='_compute_readonly_timesheet' compute_sudo=True export_string_translation=False
  • task_id Many2one → project.task
    compute='_compute_task_id' domain="[('allow_timesheets', '=', True), ('project_id', '=?', project_id), ('has_template_ancestor', '=', False)]" index='btree_not_null' readonly=False store=True args: 'project.task', 'Task'
  • user_id Many2one
    compute='_compute_user_id' readonly=False store=True
Public methods (7)
  • 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)
  • active Boolean
    default=True export_string_translation=False
  • checked Boolean
    default=True export_string_translation=False
  • employee_id Many2one → hr.employee
    export_string_translation=False args: 'hr.employee'
  • user_id Many2one → res.users
    default=<expr> export_string_translation=False ondelete='cascade' required=True args: 'res.users'
Public methods (0)

No public methods.

New fields (1)
  • has_timesheet Boolean
    compute='_compute_has_timesheet' export_string_translation=False
Public methods (2)
  • action_timesheet_from_employee(self)
  • action_unlink_wizard(self)

New fields (3)
  • employee_ids Many2many → hr.employee
    context={'active_test': False} export_string_translation=False string='Employees' args: 'hr.employee'
  • has_active_employee Boolean
    compute='_compute_has_active_employee' export_string_translation=False string='Has Active Employee'
  • has_timesheet Boolean
    compute='_compute_has_timesheet' compute_sudo=True export_string_translation=False string='Has Timesheet'
Public methods (3)
  • action_archive(self)
  • action_confirm_delete(self)
  • action_open_timesheets(self)

New fields (1)
  • has_timesheet Boolean
    related='employee_id.has_timesheet'
Public methods (1)
  • 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_id Many2one
    domain="[\n '|', ('company_id', '=', False), ('company_id', '=?', company_id),\n ('partner_id', '=?', partner_id),\n ]"
  • allocated_hours Float
    string='Allocated Time' tracking=True
  • allow_timesheets Boolean
    compute='_compute_allow_timesheets' default=True readonly=False store=True args: 'Timesheets'
  • analytic_account_active Boolean
    export_string_translation=False related='account_id.active' args: 'Active Account'
  • effective_hours Float
    compute='_compute_remaining_hours' compute_sudo=True string='Time Spent'
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days' export_string_translation=False
  • is_internal_project Boolean
    compute='_compute_is_internal_project' export_string_translation=False search='_search_is_internal_project'
  • is_project_overtime Boolean
    compute='_compute_remaining_hours' compute_sudo=True export_string_translation=False search='_search_is_project_overtime' args: 'Project in Overtime'
  • remaining_hours Float
    compute='_compute_remaining_hours' compute_sudo=True string='Time Remaining'
  • timesheet_encode_uom_id Many2one → uom.uom
    compute='_compute_timesheet_encode_uom_id' export_string_translation=False args: 'uom.uom'
  • timesheet_ids One2many → account.analytic.line
    export_string_translation=False args: 'account.analytic.line', 'project_id', 'Associated Timesheets'
  • total_timesheet_time Float
    compute='_compute_total_timesheet_time' export_string_translation=False groups='hr_timesheet.group_hr_timesheet_user' string='Total amount of time (in the proper unit) recorded in the project, rounded to the unit.'
Public methods (5)
  • action_project_timesheets(self)
  • action_view_tasks(self)
  • create(self, vals_list)
    @api.model_create_multi
    Create 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_timesheets Boolean
    compute='_compute_allow_timesheets' compute_sudo=True export_string_translation=False readonly=True search='_search_allow_timesheets' args: 'Allow timesheets'
  • analytic_account_active Boolean
    export_string_translation=False related='project_id.analytic_account_active' args: 'Active Analytic Account'
  • display_name Char
    help='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_hours Float
    compute='_compute_effective_hours' compute_sudo=True store=True args: 'Time Spent'
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days' default=<expr> export_string_translation=False
  • overtime Float
    compute='_compute_progress_hours' store=True
  • progress Float
    aggregator='avg' compute='_compute_progress_hours' store=True args: 'Progress'
  • project_id Many2one
    domain="['|', ('company_id', '=', False), ('company_id', '=?', company_id), ('is_internal_project', '=', False), ('is_template', 'in', [is_template, False])]"
  • remaining_hours Float
    compute='_compute_remaining_hours' help='Number of allocated hours minus the number of hours spent.' readonly=True store=True args: 'Time Remaining'
  • remaining_hours_percentage Float
    compute='_compute_remaining_hours_percentage' export_string_translation=False search='_search_remaining_hours_percentage'
  • subtask_effective_hours Float
    compute='_compute_subtask_effective_hours' help='Time spent on the sub-tasks (and their own sub-tasks) of this task.' recursive=True store=True args: 'Time Spent on Sub-tasks'
  • timesheet_ids One2many → account.analytic.line
    export_string_translation=False args: 'account.analytic.line', 'task_id', 'Timesheets'
  • total_hours_spent Float
    compute='_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'
Public methods (2)
  • TASK_PORTAL_READABLE_FIELDS(self)
    @property
  • action_view_subtask_timesheet(self)

New fields (5)
  • allocated_time Integer
    readonly=True args: 'Allocated Time'
  • display_timesheet_stats Boolean
    compute='_compute_display_timesheet_stats' export_string_translation=False
  • timesheet_percentage Integer
    compute='_compute_timesheet_percentage' export_string_translation=False
  • timesheet_time Integer
    readonly=True args: 'Timesheet Time'
  • uom_id Many2one → uom.uom
    export_string_translation=False readonly=True args: 'uom.uom', 'Unit'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (6)
  • allocated_hours Float
    groups='hr_timesheet.group_hr_timesheet_user' readonly=True args: 'Allocated Time'
  • effective_hours Float
    groups='hr_timesheet.group_hr_timesheet_user' readonly=True args: 'Time Spent'
  • overtime Float
    groups='hr_timesheet.group_hr_timesheet_user' readonly=True
  • progress Float
    aggregator='avg' groups='hr_timesheet.group_hr_timesheet_user' readonly=True args: 'Progress'
  • remaining_hours Float
    groups='hr_timesheet.group_hr_timesheet_user' readonly=True args: 'Time Remaining'
  • remaining_hours_percentage Float
    groups='hr_timesheet.group_hr_timesheet_user' readonly=True args: 'Time Remaining Percentage'
Public methods (0)

No public methods.

New fields (3)
  • internal_project_id Many2one → project.project
    domain=[('is_template', '=', False)] help='Default project value for timesheet generated from time off type.' string='Internal Project' args: 'project.project'
  • project_time_mode_id Many2one → uom.uom
    default=_default_project_time_mode_id help="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_id Many2one → uom.uom
    default=_default_timesheet_encode_uom_id string='Timesheet Encoding Unit' args: 'uom.uom'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (6)
  • is_encode_uom_days Boolean
    compute='_compute_is_encode_uom_days' export_string_translation=False
  • module_project_timesheet_holidays Boolean
    compute='_compute_timesheet_modules' readonly=False store=True args: 'Time Off'
  • project_time_mode_id Many2one → uom.uom
    help="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=False related='company_id.project_time_mode_id' string='Project Time Unit' args: 'uom.uom'
  • reminder_allow Boolean
    string='Approver Reminder'
  • reminder_user_allow Boolean
    string='Employee Reminder'
  • timesheet_encode_method Selection
    compute='_compute_timesheet_encode_method' inverse='_inverse_timesheet_encode_method' required=True string='Encoding Method' args: [('hours', 'Hours / Minutes'), ('days', 'Days / Half-Days')]
Public methods (0)

No public methods.

New fields (15)
  • amount Monetary
    currency_field='currency_id' readonly=True args: 'Amount'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • date Date
    readonly=True args: 'Date'
  • department_id Many2one → hr.department
    readonly=True string='Department' args: 'hr.department'
  • manager_id Many2one → hr.employee
    readonly=True args: 'hr.employee', 'Manager'
  • message_partner_ids Many2many → res.partner
    compute='_compute_message_partner_ids' readonly=True search='_search_message_partner_ids' args: 'res.partner'
  • milestone_id Many2one → project.milestone
    related='task_id.milestone_id' args: 'project.milestone'
  • name Char
    readonly=True args: 'Description'
  • parent_task_id Many2one → project.task
    readonly=True string='Parent Task' args: 'project.task'
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • project_id Many2one → project.project
    readonly=True string='Project' args: 'project.project'
  • task_id Many2one → project.task
    readonly=True string='Task' args: 'project.task'
  • unit_amount Float
    readonly=True args: 'Time Spent'
  • user_id Many2one → res.users
    readonly=True string='User' args: 'res.users'
Public methods (1)
  • init(self)

New fields (1)
  • timesheet_widget Char
    export_string_translation=False args: 'Widget'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/hr_timesheet
VERSION
VERSION 1.1
CATEGORY
CATEGORYServices/Timesheets
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Xavier ALT, Aaron Bohy, Damien Bouvy, Yannick Tivisse, Odoo Online, Jorge Pinna Puissant, Sébastien Theys, Nasreddin Boulif (bon), Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Mathieu Duckerts-Antoine, william-andre, Hubert Van De Walle, Vincent Larcin, damr, Thomas Lefebvre (thle), alsh-odoo, Louis Wicket (wil), Victor Piryns (pivi), Levi Siuzdak (sile), Dylan Kiss (dyki), Hugo Carlier (Huca), Xavier Bol (xbo), AH-Yussef, Sarah Bellefroid, omra-odoo, rajh-odoo, shag-odoo, guva-odoo, kdeb@odoo.com, Paul Stroobant, ravb-odoo, Mélanie, Youssef Bashandy, bary, Maxime de Neuville, suth-odoo, Abderraouf Ghrissi (abgh), kcv-odoo, adsh-odoo, Tanguy Quéguineur, Ritika Rathore, Chrysanthe (chgo), sami odoo, Louis (wil), asno-odoo, mash, luve-odoo, st-yes, Chris Duvivier, K Theja (kthe), kpt-odoo, kusi-odoo, Bastien (bvdn), bona-odoo, Krzysztof Magusiak (krma), Mahdi Alijani (malj), Ajit Singh, Akash Pandey, Harrison Hutton, nsirjacobs, lakhichand borse, mjvi-odoo, desh, Gurpreet Singh, dise-odoo, dhtr-odoo, Abdelouahab Laaroussi (abla)
WEBSITE
WEBSITEhttps://www.odoo.com/app/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr
    - base_setup
    - base
    - web
    - digest
    - mail
    - bus
    - web_tour
    - html_editor
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - phone_validation
    - resource_mail
    - hr_hourly_cost
    - analytic
    - uom
    - project
    - rating
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (62)
XML IDNameModelTypeStatus
hr_department_view_kanban hr.department.kanban.inherit hr.department data Inherits hr.hr_department_view_kanban
hr_employee_delete_wizard_form Delete Employee hr.employee.delete.wizard form New
hr_employee_view_form_inherit_timesheet hr.employee.form.timesheet hr.employee xpath Inherits hr_hourly_cost.view_employee_form
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 field Inherits hr_timesheet_line_search
hr_timesheet_line_portal_tree portal.hr_timesheet.account.analytic.line.list account.analytic.line xpath Inherits hr_timesheet_line_tree
hr_timesheet_line_search account.analytic.line.search account.analytic.line xpath 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 xpath Inherits project.edit_project
project_project_view_form_simplified_inherit_timesheet project.project.view.form.simplified.inherit.timesheet project.project xpath Inherits project.project_project_view_form_simplified
project_project_view_tree_inherit_sale_project project.project.list.inherit.sale.timesheet project.project xpath Inherits project.view_project
project_sharing_inherit_project_task_view_form project.sharing.project.task.view.form.inherit project.task xpath 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 templates Inherits project.project_sharing_project_task_view_kanban
project_task_view_graph project.task.view.graph.inherited project.task xpath Inherits project.view_project_task_graph
project_task_view_pivot project.task.view.pivot.inherited project.task xpath Inherits project.view_project_task_pivot
project_task_view_search project.task.view.search.inherit.sale.timesheet.enterprise project.task xpath Inherits project.view_task_search_form_project_fsm_base
project_update_view_kanban_inherit project.update.view.kanban.inherit project.update b Inherits project.project_update_view_kanban
project_update_view_search_inherit project.update.view.search.inherit project.update xpath 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 xpath 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 xpath Inherits hr_timesheet.timesheet_view_form_user
timesheet_view_form_user account.analytic.line.list.with.user account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
timesheet_view_tree_user account.analytic.line.view.list.with.user account.analytic.line xpath 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_employee_tree_inherit_timesheet hr.employee.list.timesheet hr.employee xpath Inherits hr.view_employee_tree
view_hr_timesheet_line_by_project account.analytic.line.graph.by.project account.analytic.line field 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 field 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 xpath 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 xpath Inherits project.view_project_kanban
view_project_project_filter_inherit_timesheet project.project.view.inherit.timesheet project.project filter Inherits project.view_project_project_filter
view_task_form2_inherited project.task.form.inherited project.task xpath Inherits project.view_task_form2
view_task_kanban_inherited_progress project.task.timesheet.kanban.inherited.progress project.task templates Inherits project.view_task_kanban
view_task_project_user_graph_inherited report.project.task.user.graph.inherited report.project.task.user xpath 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 field Inherits project.project_task_view_tree_main_base
Models touched (15)

New fields (1)
  • business_domain Selection
    ondelete={'timesheet': 'cascade'} selection_add=[('timesheet', 'Timesheet')]
Public methods (0)

No public methods.

New fields (13)
  • department_id Many2one → hr.department
    compute='_compute_department_id' compute_sudo=True store=True args: 'hr.department', 'Department'
  • employee_id Many2one → hr.employee
    context={'active_test': False} domain=_domain_employee_id help="Define an 'hourly cost' on the employee to track the cost of their time." index=True args: 'hr.employee', 'Employee'
  • encoding_uom_id Many2one → uom.uom
    compute='_compute_encoding_uom_id' export_string_translation=False args: 'uom.uom'
  • job_title Char
    export_string_translation=False related='employee_id.job_title'
  • manager_id Many2one → hr.employee
    related='employee_id.parent_id' store=True args: 'hr.employee', 'Manager'
  • message_partner_ids Many2many → res.partner
    compute='_compute_message_partner_ids' search='_search_message_partner_ids' args: 'res.partner'
  • milestone_id Many2one → project.milestone
    related='task_id.milestone_id' args: 'project.milestone'
  • parent_task_id Many2one → project.task
    index='btree_not_null' related='task_id.parent_id' store=True args: 'project.task'
  • partner_id Many2one
    compute='_compute_partner_id' readonly=False store=True
  • project_id Many2one → project.project
    compute='_compute_project_id' domain=_domain_project_id index=True readonly=False store=True args: 'project.project', 'Project'
  • readonly_timesheet Boolean
    compute='_compute_readonly_timesheet' compute_sudo=True export_string_translation=False
  • task_id Many2one → project.task
    compute='_compute_task_id' domain="[('allow_timesheets', '=', True), ('project_id', '=?', project_id)]" index='btree_not_null' readonly=False store=True args: 'project.task', 'Task'
  • user_id Many2one
    compute='_compute_user_id' readonly=False store=True
Public methods (5)
  • action_open_timesheet_view_portal(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, field_list)
    @api.model
  • get_views(self, views, options=None)
    @api.model
  • write(self, values)

New fields (1)
  • has_timesheet Boolean
    compute='_compute_has_timesheet' export_string_translation=False groups='hr.group_hr_user,base.group_system'
Public methods (2)
  • action_timesheet_from_employee(self)
  • action_unlink_wizard(self)

New fields (3)
  • employee_ids Many2many → hr.employee
    context={'active_test': False} export_string_translation=False string='Employees' args: 'hr.employee'
  • has_active_employee Boolean
    compute='_compute_has_active_employee' export_string_translation=False string='Has Active Employee'
  • has_timesheet Boolean
    compute='_compute_has_timesheet' compute_sudo=True export_string_translation=False string='Has Timesheet'
Public methods (3)
  • action_archive(self)
  • action_confirm_delete(self)
  • action_open_timesheets(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_id Many2one
    domain="[\n '|', ('company_id', '=', False), ('company_id', '=?', company_id),\n ('partner_id', '=?', partner_id),\n ]"
  • allocated_hours Float
    string='Allocated Time'
  • allow_timesheets Boolean
    compute='_compute_allow_timesheets' default=True readonly=False store=True args: 'Timesheets'
  • analytic_account_active Boolean
    export_string_translation=False related='account_id.active' args: 'Active Account'
  • effective_hours Float
    compute='_compute_remaining_hours' compute_sudo=True string='Time Spent'
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days' export_string_translation=False
  • is_internal_project Boolean
    compute='_compute_is_internal_project' export_string_translation=False search='_search_is_internal_project'
  • is_project_overtime Boolean
    compute='_compute_remaining_hours' compute_sudo=True export_string_translation=False search='_search_is_project_overtime' args: 'Project in Overtime'
  • remaining_hours Float
    compute='_compute_remaining_hours' compute_sudo=True string='Time Remaining'
  • timesheet_encode_uom_id Many2one → uom.uom
    compute='_compute_timesheet_encode_uom_id' export_string_translation=False args: 'uom.uom'
  • timesheet_ids One2many → account.analytic.line
    export_string_translation=False args: 'account.analytic.line', 'project_id', 'Associated Timesheets'
  • total_timesheet_time Integer
    compute='_compute_total_timesheet_time' compute_sudo=True export_string_translation=False groups='hr_timesheet.group_hr_timesheet_user' string='Total number of time (in the proper UoM) recorded in the project, rounded to the unit.'
Public methods (5)
  • action_project_timesheets(self)
  • action_view_tasks(self)
  • create(self, vals_list)
    @api.model_create_multi
    Create 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, values)

New fields (13)
  • allow_timesheets Boolean
    compute='_compute_allow_timesheets' compute_sudo=True export_string_translation=False readonly=True search='_search_allow_timesheets' args: 'Allow timesheets'
  • analytic_account_active Boolean
    export_string_translation=False related='project_id.analytic_account_active' args: 'Active Analytic Account'
  • display_name Char
    help='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 !\xa0Set the task a high priority\n\n Make sure to use the right format and order\xa0e.g. Improve the configuration screen 5h #feature #v16 @Mitchell !'
  • effective_hours Float
    compute='_compute_effective_hours' compute_sudo=True store=True args: 'Time Spent'
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days' default=<expr> export_string_translation=False
  • overtime Float
    compute='_compute_progress_hours' store=True
  • progress Float
    aggregator='avg' compute='_compute_progress_hours' store=True args: 'Progress'
  • project_id Many2one
    domain="['|', ('company_id', '=', False), ('company_id', '=?', company_id), ('is_internal_project', '=', False)]"
  • remaining_hours Float
    compute='_compute_remaining_hours' help='Number of allocated hours minus the number of hours spent.' readonly=True store=True args: 'Time Remaining'
  • remaining_hours_percentage Float
    compute='_compute_remaining_hours_percentage' export_string_translation=False search='_search_remaining_hours_percentage'
  • subtask_effective_hours Float
    compute='_compute_subtask_effective_hours' help='Time spent on the sub-tasks (and their own sub-tasks) of this task.' recursive=True store=True args: 'Time Spent on Sub-tasks'
  • timesheet_ids One2many → account.analytic.line
    export_string_translation=False args: 'account.analytic.line', 'task_id', 'Timesheets'
  • total_hours_spent Float
    compute='_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'
Public methods (2)
  • SELF_READABLE_FIELDS(self)
    @property
  • action_view_subtask_timesheet(self)

New fields (5)
  • allocated_time Integer
    readonly=True args: 'Allocated Time'
  • display_timesheet_stats Boolean
    compute='_compute_display_timesheet_stats' export_string_translation=False
  • timesheet_percentage Integer
    compute='_compute_timesheet_percentage' export_string_translation=False
  • timesheet_time Integer
    readonly=True args: 'Timesheet Time'
  • uom_id Many2one → uom.uom
    export_string_translation=False readonly=True args: 'uom.uom', 'Unit Of Measure'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (8)
  • allocated_hours Float
    groups='hr_timesheet.group_hr_timesheet_user' readonly=True args: 'Allocated Time'
  • effective_hours Float
    groups='hr_timesheet.group_hr_timesheet_user' readonly=True args: 'Time Spent'
  • overtime Float
    groups='hr_timesheet.group_hr_timesheet_user' readonly=True
  • progress Float
    aggregator='avg' groups='hr_timesheet.group_hr_timesheet_user' readonly=True args: 'Progress'
  • remaining_hours Float
    groups='hr_timesheet.group_hr_timesheet_user' readonly=True args: 'Time Remaining'
  • remaining_hours_percentage Float
    groups='hr_timesheet.group_hr_timesheet_user' readonly=True args: 'Time Remaining Percentage'
  • subtask_effective_hours Float
    groups='hr_timesheet.group_hr_timesheet_user' help='Time spent on the sub-tasks (and their own sub-tasks) of this task.' args: 'Time Spent on Sub-Tasks'
  • total_hours_spent Float
    groups='hr_timesheet.group_hr_timesheet_user' help='Time spent on this task, including its sub-tasks.' args: 'Hours By Task (Including Subtasks)'
Public methods (0)

No public methods.

New fields (3)
  • internal_project_id Many2one → project.project
    help='Default project value for timesheet generated from time off type.' string='Internal Project' args: 'project.project'
  • project_time_mode_id Many2one → uom.uom
    default=_default_project_time_mode_id help="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_id Many2one → uom.uom
    default=_default_timesheet_encode_uom_id domain=<expr> string='Timesheet Encoding Unit' args: 'uom.uom'
Public methods (1)
  • create(self, values)
    @api.model_create_multi

New fields (6)
  • is_encode_uom_days Boolean
    compute='_compute_is_encode_uom_days' export_string_translation=False
  • module_project_timesheet_holidays Boolean
    compute='_compute_timesheet_modules' readonly=False store=True args: 'Time Off'
  • project_time_mode_id Many2one → uom.uom
    help="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=False related='company_id.project_time_mode_id' string='Project Time Unit' args: 'uom.uom'
  • reminder_allow Boolean
    string='Approver Reminder'
  • reminder_user_allow Boolean
    string='Employee Reminder'
  • timesheet_encode_method Selection
    compute='_compute_timesheet_encode_method' inverse='_inverse_timesheet_encode_method' required=True string='Encoding Method' args: [('hours', 'Hours / Minutes'), ('days', 'Days / Half-Days')]
Public methods (0)

No public methods.

New fields (15)
  • amount Monetary
    currency_field='currency_id' readonly=True args: 'Amount'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • date Date
    readonly=True args: 'Date'
  • department_id Many2one → hr.department
    readonly=True string='Department' args: 'hr.department'
  • manager_id Many2one → hr.employee
    readonly=True args: 'hr.employee', 'Manager'
  • message_partner_ids Many2many → res.partner
    compute='_compute_message_partner_ids' readonly=True search='_search_message_partner_ids' args: 'res.partner'
  • milestone_id Many2one → project.milestone
    related='task_id.milestone_id' args: 'project.milestone'
  • name Char
    readonly=True args: 'Description'
  • parent_task_id Many2one → project.task
    readonly=True string='Parent Task' args: 'project.task'
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • project_id Many2one → project.project
    readonly=True string='Project' args: 'project.project'
  • task_id Many2one → project.task
    readonly=True string='Task' args: 'project.task'
  • unit_amount Float
    readonly=True args: 'Time Spent'
  • user_id Many2one → res.users
    readonly=True string='User' args: 'res.users'
Public methods (1)
  • init(self)

New fields (1)
  • timesheet_widget Char
    export_string_translation=False args: 'Widget'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/hr_timesheet
VERSION
VERSION 1.1
CATEGORY
CATEGORYServices/Timesheets
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Xavier ALT, Xavier Morel, Aaron Bohy, GitHub, Damien Bouvy, Barad Mahendra, Yannick Tivisse, Odoo Online, Jorge Pinna Puissant, Julien Castiaux, Xavier-Do, Romeo Fragomeli, Victor Feyens, Adrien Dieudonné, Julien Mougenot, Samuel Degueldre, Nasreddin Boulif (bon), Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, Kevin Baptiste, Stefan-Calin Crainiciuc (stcc), Xavier BOL (xbo), Hubert Van de Walle (huvw), sofiagvaladze, william-andre, Audric Onockx (auon), John Laterre (jol), Laurent Stukkens (LTU), Demesmaeker, Hubert Van De Walle, Dossogne Bertrand, Valentin Chevalier, Vincent Larcin, damr, Thomas Lefebvre (thle), alsh-odoo, Louis Wicket (wil), Gurupreet Singh, Victor Piryns (pivi), Yash Vaishnav, Hamza (hisl), Jurgen (jugj), pash-odoo, Levi Siuzdak (sile), Maruan Aguerdouh (magm), Dylan Kiss (dyki), Bruno Boi, Kamlesh Pathekar, Pratik Awasthi, FrancoisGe, Michael (mcm), prye-odoo, Raouf, Kartik Chavda, Hugo Carlier (Huca), Xavier Bol (xbo), Brieuc-brd, Sarah Bellefroid, rajh-odoo, shag-odoo, guva-odoo, kdeb@odoo.com, Paul Stroobant, ravb-odoo, Youssef Bashandy, bary, Maxime de Neuville, suth-odoo, AMZIL Ayoub, Abderraouf Ghrissi (abgh), Julien Carion (juca), kcv-odoo, adsh-odoo, Tanguy Quéguineur, Ritika Rathore, Chrysanthe (chgo), sami odoo, Louis (wil), Adesh Jolhe (adjo), kais-odoo, mash, luve-odoo, st-yes, Bastien (bvdn), bona-odoo, rupa-odoo, Ajit Singh, nsirjacobs, lakhichand borse, mjvi-odoo, desh, Gurpreet Singh
WEBSITE
WEBSITEhttps://www.odoo.com/app/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:04
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr
    - base_setup
    - base
    - web
    - phone_validation
    - mail
    - bus
    - web_tour
    - resource
    - hr_hourly_cost
    - analytic
    - uom
    - project
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (59)
XML IDNameModelTypeStatus
hr_department_view_kanban hr.department.kanban.inherit hr.department data Inherits hr.hr_department_view_kanban
hr_department_view_kanban hr.department.kanban.inherit hr.department data Inherits hr.hr_department_view_kanban
hr_employee_delete_wizard_form Delete Employee hr.employee.delete.wizard form New
hr_employee_view_form_inherit_timesheet hr.employee.form.timesheet hr.employee xpath Inherits hr_hourly_cost.view_employee_form
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 field Inherits hr_timesheet_line_search
hr_timesheet_line_portal_tree portal.hr_timesheet.account.analytic.line.tree account.analytic.line xpath Inherits hr_timesheet_line_tree
hr_timesheet_line_search account.analytic.line.search account.analytic.line xpath Inherits analytic.view_account_analytic_line_filter
hr_timesheet_line_tree account.analytic.line.tree.hr_timesheet account.analytic.line tree 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 Show 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 xpath Inherits project.edit_project
project_project_view_form_simplified_inherit_timesheet project.project.view.form.simplified.inherit.timesheet project.project xpath Inherits project.project_project_view_form_simplified
project_project_view_tree_inherit_sale_project project.project.tree.inherit.sale.timesheet project.project xpath Inherits project.view_project
project_sharing_inherit_project_task_view_form project.sharing.project.task.view.form.inherit project.task xpath 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 templates Inherits project.project_sharing_project_task_view_kanban
project_task_view_graph project.task.view.graph.inherited project.task xpath Inherits project.view_project_task_graph
project_task_view_pivot project.task.view.pivot.inherited project.task xpath Inherits project.view_project_task_pivot
project_task_view_search project.task.view.search.inherit.sale.timesheet.enterprise project.task xpath Inherits project.view_task_search_form_project_fsm_base
project_update_view_kanban_inherit project.update.view.kanban.inherit project.update b Inherits project.project_update_view_kanban
project_update_view_search_inherit project.update.view.search.inherit project.update xpath 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 xpath Inherits base.res_config_settings_view_form
timesheet_view_form_portal_user account.analytic.line.form account.analytic.line xpath Inherits hr_timesheet.timesheet_view_form_user
timesheet_view_form_user account.analytic.line.tree.with.user account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
timesheet_view_tree_user account.analytic.line.view.tree.with.user account.analytic.line xpath Inherits hr_timesheet_line_tree
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_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_employee_tree_inherit_timesheet hr.employee.tree.timesheet hr.employee xpath Inherits hr.view_employee_tree
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 field 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 xpath 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 field Inherits project.view_project_kanban
view_project_project_filter_inherit_timesheet project.project.view.inherit.timesheet project.project filter Inherits project.view_project_project_filter
view_task_form2_inherited project.task.form.inherited project.task xpath Inherits project.view_task_form2
view_task_kanban_inherited_progress project.task.timesheet.kanban.inherited.progress project.task templates Inherits project.view_task_kanban
view_task_project_user_graph_inherited report.project.task.user.graph.inherited report.project.task.user xpath Inherits project.view_task_project_user_graph
view_task_project_user_pivot_inherited report.project.task.user.pivot.inherited report.project.task.user xpath Inherits project.view_task_project_user_pivot
view_task_tree2_inherited project.task.tree.inherited project.task field Inherits project.project_task_view_tree_main_base
Models touched (15)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (11)
  • department_id Many2one → hr.department
    compute='_compute_department_id' compute_sudo=True store=True args: 'hr.department', 'Department'
  • employee_id Many2one → hr.employee
    context={'active_test': False} domain=_domain_employee_id help="Define an 'hourly cost' on the employee to track the cost of their time." index=True args: 'hr.employee', 'Employee'
  • encoding_uom_id Many2one → uom.uom
    compute='_compute_encoding_uom_id' args: 'uom.uom'
  • job_title Char
    related='employee_id.job_title'
  • manager_id Many2one → hr.employee
    related='employee_id.parent_id' store=True args: 'hr.employee', 'Manager'
  • parent_task_id Many2one → project.task
    related='task_id.parent_id' store=True args: 'project.task'
  • partner_id Many2one
    compute='_compute_partner_id' readonly=False store=True
  • project_id Many2one → project.project
    compute='_compute_project_id' domain=_domain_project_id index=True readonly=False store=True args: 'project.project', 'Project'
  • readonly_timesheet Boolean
    compute='_compute_readonly_timesheet' compute_sudo=True string='Readonly Timesheet'
  • task_id Many2one → project.task
    compute='_compute_task_id' domain="[('allow_timesheets', '=', True), ('project_id', '=?', project_id)]" index='btree_not_null' readonly=False store=True args: 'project.task', 'Task'
  • user_id Many2one
    compute='_compute_user_id' readonly=False store=True
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, field_list)
    @api.model
  • get_views(self, views, options=None)
    @api.model
  • write(self, values)

New fields (1)
  • has_timesheet Boolean
    compute='_compute_has_timesheet'
Public methods (2)
  • action_timesheet_from_employee(self)
  • action_unlink_wizard(self)

New fields (3)
  • employee_ids Many2many → hr.employee
    context={'active_test': False} string='Employees' args: 'hr.employee'
  • has_active_employee Boolean
    compute='_compute_has_active_employee' string='Has Active Employee'
  • has_timesheet Boolean
    compute='_compute_has_timesheet' compute_sudo=True string='Has Timesheet'
Public methods (3)
  • action_archive(self)
  • action_confirm_delete(self)
  • action_open_timesheets(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 (10)
  • allocated_hours Float
    string='Allocated Hours'
  • allow_timesheets Boolean
    compute='_compute_allow_timesheets' default=True readonly=False store=True args: 'Timesheets'
  • analytic_account_id Many2one
    domain="[\n '|', ('company_id', '=', False), ('company_id', '=?', company_id),\n ('partner_id', '=?', partner_id),\n ]"
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days'
  • is_internal_project Boolean
    compute='_compute_is_internal_project' search='_search_is_internal_project'
  • is_project_overtime Boolean
    compute='_compute_remaining_hours' compute_sudo=True search='_search_is_project_overtime' args: 'Project in Overtime'
  • remaining_hours Float
    compute='_compute_remaining_hours' compute_sudo=True string='Remaining Invoiced Time'
  • timesheet_encode_uom_id Many2one → uom.uom
    compute='_compute_timesheet_encode_uom_id' args: 'uom.uom'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'project_id', 'Associated Timesheets'
  • total_timesheet_time Integer
    compute='_compute_total_timesheet_time' compute_sudo=True groups='hr_timesheet.group_hr_timesheet_user' help='Total number of time (in the proper UoM) recorded in the project, rounded to the unit.'
Public methods (6)
  • action_project_sharing(self)
  • action_project_timesheets(self)
  • action_view_tasks(self)
  • create(self, vals_list)
    @api.model_create_multi
    Create 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, values)

New fields (13)
  • allow_timesheets Boolean
    compute='_compute_allow_timesheets' compute_sudo=True help='Timesheets can be logged on this task.' readonly=True search='_search_allow_timesheets' args: 'Allow timesheets'
  • analytic_account_active Boolean
    compute='_compute_analytic_account_active' compute_sudo=True recursive=True args: 'Active Analytic Account'
  • display_name Char
    help='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 !\xa0Set the task a high priority\n\n Make sure to use the right format and order\xa0e.g. Improve the configuration screen 5h #feature #v16 @Mitchell !'
  • effective_hours Float
    compute='_compute_effective_hours' compute_sudo=True store=True args: 'Hours Spent'
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days' default=<expr>
  • overtime Float
    compute='_compute_progress_hours' store=True
  • progress Float
    compute='_compute_progress_hours' group_operator='avg' store=True args: 'Progress'
  • project_id Many2one
    domain="['|', ('company_id', '=', False), ('company_id', '=?', company_id), ('is_internal_project', '=', False)]"
  • remaining_hours Float
    compute='_compute_remaining_hours' help='Number of allocated hours minus the number of hours spent.' readonly=True store=True args: 'Remaining Hours'
  • remaining_hours_percentage Float
    compute='_compute_remaining_hours_percentage' search='_search_remaining_hours_percentage'
  • subtask_effective_hours Float
    compute='_compute_subtask_effective_hours' help='Time spent on the sub-tasks (and their own sub-tasks) of this task.' recursive=True store=True args: 'Hours Spent on Sub-Tasks'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'task_id', 'Timesheets'
  • total_hours_spent Float
    compute='_compute_total_hours_spent' help='Time spent on this task and its sub-tasks (and their own sub-tasks).' store=True args: 'Total Hours'
Public methods (2)
  • SELF_READABLE_FIELDS(self)
    @property
  • action_view_subtask_timesheet(self)

New fields (5)
  • allocated_time Integer
    readonly=True args: 'Allocated Time'
  • display_timesheet_stats Boolean
    compute='_compute_display_timesheet_stats'
  • timesheet_percentage Integer
    compute='_compute_timesheet_percentage'
  • timesheet_time Integer
    readonly=True args: 'Timesheet Time'
  • uom_id Many2one → uom.uom
    readonly=True args: 'uom.uom', 'Unit Of Measure'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (7)
  • allocated_hours Float
    readonly=True args: 'Allocated Time'
  • effective_hours Float
    readonly=True args: 'Hours Spent'
  • overtime Float
    readonly=True
  • progress Float
    group_operator='avg' readonly=True args: 'Progress'
  • remaining_hours Float
    readonly=True args: 'Remaining Hours'
  • remaining_hours_percentage Float
    readonly=True args: 'Remaining Hours Percentage'
  • total_hours_spent Float
    help='Time spent on this task, including its sub-tasks.' args: 'Hours By Task (Including Subtasks)'
Public methods (0)

No public methods.

New fields (3)
  • internal_project_id Many2one → project.project
    help='Default project value for timesheet generated from time off type.' string='Internal Project' args: 'project.project'
  • project_time_mode_id Many2one → uom.uom
    default=_default_project_time_mode_id help="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_id Many2one → uom.uom
    default=_default_timesheet_encode_uom_id domain=<expr> string='Timesheet Encoding Unit' args: 'uom.uom'
Public methods (1)
  • create(self, values)
    @api.model_create_multi

New fields (6)
  • is_encode_uom_days Boolean
    compute='_compute_is_encode_uom_days'
  • module_project_timesheet_holidays Boolean
    compute='_compute_timesheet_modules' readonly=False store=True args: 'Time Off'
  • project_time_mode_id Many2one → uom.uom
    help="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=False related='company_id.project_time_mode_id' string='Project Time Unit' args: 'uom.uom'
  • reminder_allow Boolean
    string='Approver Reminder'
  • reminder_user_allow Boolean
    string='Employee Reminder'
  • timesheet_encode_method Selection
    compute='_compute_timesheet_encode_method' inverse='_inverse_timesheet_encode_method' required=True string='Encoding Method' args: [('hours', 'Hours / Minutes'), ('days', 'Days / Half-Days')]
Public methods (0)

No public methods.

New fields (13)
  • amount Monetary
    readonly=True args: 'Amount'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • date Date
    readonly=True args: 'Date'
  • department_id Many2one → hr.department
    readonly=True string='Department' args: 'hr.department'
  • employee_id Many2one → hr.employee
    readonly=True string='Employee' args: 'hr.employee'
  • manager_id Many2one → hr.employee
    readonly=True args: 'hr.employee', 'Manager'
  • name Char
    readonly=True args: 'Description'
  • parent_task_id Many2one → project.task
    readonly=True string='Parent Task' args: 'project.task'
  • project_id Many2one → project.project
    readonly=True string='Project' args: 'project.project'
  • task_id Many2one → project.task
    readonly=True string='Task' args: 'project.task'
  • unit_amount Float
    readonly=True args: 'Hours Spent'
  • user_id Many2one → res.users
    readonly=True string='User' args: 'res.users'
Public methods (1)
  • init(self)

New fields (1)
  • timesheet_widget Char
    args: 'Widget'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYServices/Timesheets
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Géry Debongnie, Aaron Bohy, GitHub, Damien Bouvy, Barad Mahendra, Yannick Tivisse, Jorge Pinna Puissant, Lucas Perais, Julien Castiaux, Romeo Fragomeli, Victor Feyens, Samuel Degueldre, Achraf (abz), Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, Kevin Baptiste, Stefan-Calin Crainiciuc (stcc), Philippe Wauthy, Xavier BOL (xbo), Hubert Van de Walle (huvw), Adrien Peiffer, Paolo (pgi), thcl-odoo, mafo-odoo, Audric Onockx (auon), william, Florian Charlier, Thibault Libioulle, Laurent Stukkens (LTU), Vincent Larcin, Pierrot (prro), Thomas Lefebvre (thle), alsh-odoo, Gurupreet Singh, Victor Piryns (pivi), Yash Vaishnav, Hamza (hisl), Anna Janiszewska, Simon Genin (ges), Levi Siuzdak (sile), Maruan Aguerdouh (magm), Kamlesh Pathekar, Michael (mcm), Cedric Prieels (cpr), Raouf, Kartik Chavda, Hugo Carlier (Huca), Xavier Bol (xbo), rajh-odoo, Nidhi Patel, shag-odoo, stefanorigano (SRI), Youssef Bashandy, Martin Trigaux (mat), Adesh Jolhe (adjo), asno-odoo, ampa-odoo, Rohitkumar (roku), kais-odoo, abderraouf, Manisha Tulsiyani, Manushi Shah (mash)
WEBSITE
WEBSITEhttps://www.odoo.com/app/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - hr_hourly_cost
    - analytic
    - uom
    - project
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (58)
XML IDNameModelTypeStatus
hr_department_view_kanban hr.department.kanban.inherit hr.department data Inherits hr.hr_department_view_kanban
hr_employee_view_form_inherit_timesheet hr.employee.form.timesheet hr.employee xpath Inherits hr_hourly_cost.view_employee_form
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 field Inherits hr_timesheet_line_search
hr_timesheet_line_search account.analytic.line.search account.analytic.line search New
hr_timesheet_line_tree account.analytic.line.tree.hr_timesheet account.analytic.line tree New
hr_timesheet_report_search timesheets.analysis.report.search timesheets.analysis.report search New
portal_layout Portal layout: timesheet menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home_timesheet Show 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_planned_hours_template portal_my_task_planned_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 xpath Inherits project.edit_project
project_project_view_form_simplified_inherit_timesheet project.project.view.form.simplified.inherit.timesheet project.project xpath Inherits project.project_project_view_form_simplified
project_project_view_tree_inherit_sale_project project.project.tree.inherit.sale.timesheet project.project xpath Inherits project.view_project
project_sharing_inherit_project_task_view_form project.sharing.project.task.view.form.inherit project.task xpath Inherits project.project_sharing_project_task_view_form
project_sharing_inherit_project_task_view_tree project.task.tree.inherited project.task field Inherits project.project_sharing_project_task_view_tree
project_sharing_kanban_inherit_project_task_view_kanban project.sharing.project.task.timesheet.kanban.inherited project.task templates Inherits project.project_sharing_project_task_view_kanban
project_sharing_project_task_view_search_inherit_timesheet project.sharing.project.task.view.search.inherit.timesheet project.task xpath Inherits project.project_sharing_project_task_view_search
project_task_view_graph project.task.view.graph.inherited project.task xpath Inherits project.view_project_task_graph
project_task_view_pivot project.task.view.pivot.inherited project.task xpath Inherits project.view_project_task_pivot
project_task_view_search project.task.view.search.inherit.sale.timesheet.enterprise project.task xpath Inherits project.view_task_search_form
project_update_view_search_inherit project.update.view.search.inherit project.update xpath Inherits project.project_update_view_search
rating_rating_view_search_project_inherited rating.rating.search.project.inherited rating.rating xpath Inherits project.rating_rating_view_search_project
report_project_task_timesheet report_project_task_timesheet ir.ui.view qweb New
report_project_task_user_view_search report.project.task.user.view.search.inherit.hr.timesheet report.project.task.user xpath Inherits project.view_task_project_user_search
report_project_task_user_view_tree report.project.task.user.view.tree.inherit.hr.timesheet report.project.task.user field Inherits project.report_project_task_user_view_tree
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 xpath Inherits base.res_config_settings_view_form
timesheet_view_form_user account.analytic.line.tree.with.user account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
timesheet_view_tree_user account.analytic.line.view.tree.with.user account.analytic.line xpath Inherits hr_timesheet_line_tree
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_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_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 field 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_my_timesheet_line_pivot account.analytic.line.pivot account.analytic.line pivot New
view_project_kanban_inherited project.project.timesheet.kanban.inherited project.project field Inherits project.view_project_kanban
view_project_project_filter_inherit_timesheet project.project.view.inherit.timesheet project.project filter Inherits project.view_project_project_filter
view_task_form2_inherited project.task.form.inherited project.task xpath Inherits project.view_task_form2
view_task_kanban_inherited_progress project.task.timesheet.kanban.inherited.progress project.task templates Inherits project.view_task_kanban
view_task_project_user_graph_inherited report.project.task.user.graph.inherited report.project.task.user xpath Inherits project.view_task_project_user_graph
view_task_project_user_pivot_inherited report.project.task.user.pivot.inherited report.project.task.user xpath Inherits project.view_task_project_user_pivot
view_task_search_form_hr_extended project.task.view.search.inherit.hr.timesheet project.task xpath Inherits project.view_task_search_form_extended
view_task_tree2_inherited project.task.tree.inherited project.task field Inherits project.view_task_tree2
Models touched (11)

New fields (10)
  • ancestor_task_id Many2one → project.task
    index='btree_not_null' related='task_id.ancestor_id' store=True args: 'project.task'
  • department_id Many2one → hr.department
    compute='_compute_department_id' compute_sudo=True store=True args: 'hr.department', 'Department'
  • employee_id Many2one → hr.employee
    context={'active_test': False} domain=_domain_employee_id help="Define an 'hourly cost' on the employee to track the cost of their time." args: 'hr.employee', 'Employee'
  • encoding_uom_id Many2one → uom.uom
    compute='_compute_encoding_uom_id' args: 'uom.uom'
  • job_title Char
    related='employee_id.job_title'
  • manager_id Many2one → hr.employee
    related='employee_id.parent_id' store=True args: 'hr.employee', 'Manager'
  • partner_id Many2one
    compute='_compute_partner_id' readonly=False store=True
  • project_id Many2one → project.project
    compute='_compute_project_id' domain=_domain_project_id index=True readonly=False store=True args: 'project.project', 'Project'
  • task_id Many2one → project.task
    compute='_compute_task_id' domain="[('allow_timesheets', '=', True), ('project_id', '=?', project_id)]" index='btree_not_null' readonly=False store=True args: 'project.task', 'Task'
  • user_id Many2one
    compute='_compute_user_id' readonly=False store=True
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, field_list)
    @api.model
  • name_get(self)
  • write(self, values)

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 (11)
  • allocated_hours Float
    string='Allocated Hours'
  • allow_timesheets Boolean
    compute='_compute_allow_timesheets' default=True readonly=False store=True args: 'Timesheets'
  • analytic_account_id Many2one
    domain="[\n '|', ('company_id', '=', False), ('company_id', '=', company_id),\n ('partner_id', '=?', partner_id),\n ]"
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days'
  • is_internal_project Boolean
    compute='_compute_is_internal_project' search='_search_is_internal_project'
  • is_project_overtime Boolean
    compute='_compute_remaining_hours' compute_sudo=True search='_search_is_project_overtime' args: 'Project in Overtime'
  • remaining_hours Float
    compute='_compute_remaining_hours' compute_sudo=True string='Remaining Invoiced Time'
  • timesheet_count Integer
    compute='_compute_timesheet_count' groups='hr_timesheet.group_hr_timesheet_user'
  • timesheet_encode_uom_id Many2one → uom.uom
    related='company_id.timesheet_encode_uom_id' args: 'uom.uom'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'project_id', 'Associated Timesheets'
  • total_timesheet_time Integer
    compute='_compute_total_timesheet_time' groups='hr_timesheet.group_hr_timesheet_user' help='Total number of time (in the proper UoM) recorded in the project, rounded to the unit.'
Public methods (4)
  • action_project_timesheets(self)
  • create(self, vals_list)
    @api.model_create_multi
    Create 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
  • name_get(self)
  • write(self, values)

New fields (11)
  • allow_timesheets Boolean
    compute='_compute_allow_timesheets' compute_sudo=True help='Timesheets can be logged on this task.' readonly=True search='_search_allow_timesheets' args: 'Allow timesheets'
  • analytic_account_active Boolean
    compute='_compute_analytic_account_active' compute_sudo=True args: 'Active Analytic Account'
  • effective_hours Float
    compute='_compute_effective_hours' compute_sudo=True store=True args: 'Hours Spent'
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days' default=<expr>
  • overtime Float
    compute='_compute_progress_hours' store=True
  • progress Float
    compute='_compute_progress_hours' group_operator='avg' store=True args: 'Progress'
  • remaining_hours Float
    compute='_compute_remaining_hours' help='Number of allocated hours minus the number of hours spent.' readonly=True store=True args: 'Remaining Hours'
  • remaining_hours_percentage Float
    compute='_compute_remaining_hours_percentage' search='_search_remaining_hours_percentage'
  • subtask_effective_hours Float
    compute='_compute_subtask_effective_hours' help='Time spent on the sub-tasks (and their own sub-tasks) of this task.' recursive=True store=True args: 'Sub-tasks Hours Spent'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'task_id', 'Timesheets'
  • total_hours_spent Float
    compute='_compute_total_hours_spent' help='Time spent on this task and its sub-tasks (and their own sub-tasks).' store=True args: 'Total Hours'
Public methods (4)
  • SELF_READABLE_FIELDS(self)
    @property
  • action_view_subtask_timesheet(self)
  • name_get(self)
  • write(self, values)

New fields (5)
  • hours_effective Float
    readonly=True args: 'Effective Hours'
  • hours_planned Float
    readonly=True args: 'Planned Hours'
  • overtime Float
    readonly=True
  • progress Float
    group_operator='avg' readonly=True args: 'Progress'
  • remaining_hours Float
    readonly=True args: 'Remaining Hours'
Public methods (0)

No public methods.

New fields (3)
  • internal_project_id Many2one → project.project
    help='Default project value for timesheet generated from time off type.' string='Internal Project' args: 'project.project'
  • project_time_mode_id Many2one → uom.uom
    default=_default_project_time_mode_id help="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_id Many2one → uom.uom
    default=_default_timesheet_encode_uom_id domain=<expr> string='Timesheet Encoding Unit' args: 'uom.uom'
Public methods (1)
  • create(self, values)
    @api.model_create_multi

New fields (7)
  • is_encode_uom_days Boolean
    compute='_compute_is_encode_uom_days'
  • module_project_timesheet_holidays Boolean
    compute='_compute_timesheet_modules' readonly=False store=True args: 'Time Off'
  • module_project_timesheet_synchro Boolean
    compute='_compute_timesheet_modules' readonly=False store=True args: 'Awesome Timesheet'
  • project_time_mode_id Many2one → uom.uom
    help="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=False related='company_id.project_time_mode_id' string='Project Time Unit' args: 'uom.uom'
  • reminder_manager_allow Boolean
    string='Manager Reminder'
  • reminder_user_allow Boolean
    string='Employee Reminder'
  • timesheet_encode_uom_id Many2one → uom.uom
    readonly=False related='company_id.timesheet_encode_uom_id' string='Encoding Unit' args: 'uom.uom'
Public methods (0)

No public methods.

New fields (13)
  • amount Monetary
    readonly=True args: 'Amount'
  • ancestor_task_id Many2one → project.task
    readonly=True string='Ancestor Task' args: 'project.task'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • date Date
    readonly=True args: 'Date'
  • department_id Many2one → hr.department
    readonly=True string='Department' args: 'hr.department'
  • employee_id Many2one → hr.employee
    readonly=True string='Employee' args: 'hr.employee'
  • manager_id Many2one → hr.employee
    readonly=True args: 'hr.employee', 'Manager'
  • name Char
    readonly=True args: 'Description'
  • project_id Many2one → project.project
    readonly=True string='Project' args: 'project.project'
  • task_id Many2one → project.task
    readonly=True string='Task' args: 'project.task'
  • unit_amount Float
    readonly=True args: 'Hours Spent'
  • user_id Many2one → res.users
    readonly=True string='User' args: 'res.users'
Public methods (1)
  • init(self)

New fields (1)
  • timesheet_widget Char
    args: 'Widget'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYServices/Timesheets
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Goffin Simon, Aaron Bohy, GitHub, Barad Mahendra, Yannick Tivisse, Xavier-Do, Victor Feyens, Nasreddin (bon), Julien Mougenot, Anh Thao Pham (pta), Achraf (abz), Nasreddin Boulif (bon), Prakash Prajapati, nie, IEL, Mathieu Duckerts-Antoine, jbm-odoo, Arnaud Joset, William Braeckman, root, Kevin Baptiste, Stefan-Calin Crainiciuc (stcc), Xavier BOL (xbo), jdoutreloux, Mitali Patel, Adrien Peiffer, thcl-odoo, mafo-odoo, Audric Onockx (auon), Nicolas Bayet, Thibault Libioulle, Jinjiu Liu, Laurent Stukkens (LTU), dht-odoo, Pierrot (prro), Thomas Lefebvre (thle), alsh-odoo, Gurupreet Singh, Victor Piryns (pivi), Dominik Rubo, datonefaridze, Yash Vaishnav, Hamza (hisl), Giacomello Nathan (ngi), Levi Siuzdak (sile), Pratik Awasthi, Cedric Prieels (cpr), Hugo Carlier (Huca), Leonardo Pavan Rocha, Noe Antoine, rajh-odoo, Giang Phạm, Giang Pham, Nidhi Patel, shag-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - analytic
    - uom
    - project
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (44)
XML IDNameModelTypeStatus
hr_department_view_kanban hr.department.kanban.inherit hr.department data Inherits hr.hr_department_view_kanban
hr_employee_view_form_inherit_timesheet hr.employee.form.timesheet hr.employee group Inherits hr.view_employee_form
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 field Inherits hr_timesheet_line_search
hr_timesheet_line_search account.analytic.line.search account.analytic.line search New
hr_timesheet_line_tree account.analytic.line.tree.hr_timesheet account.analytic.line tree New
portal_layout Portal layout: timesheet menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home_timesheet Show 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_planned_hours_template portal_my_task_planned_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 xpath Inherits project.edit_project
project_project_view_form_simplified_inherit_timesheet project.project.view.form.simplified.inherit.timesheet project.project field Inherits project.project_project_view_form_simplified
project_sharing_inherit_project_task_view_form project.sharing.project.task.view.form.inherit project.task xpath Inherits project.project_sharing_project_task_view_form
project_sharing_inherit_project_task_view_search project.sharing.inherit.project.task.view.search project.task xpath Inherits project.project_sharing_project_task_view_search
project_sharing_inherit_project_task_view_tree project.task.tree.inherited project.task field Inherits project.project_sharing_project_task_view_tree
project_sharing_kanban_inherit_project_task_view_kanban project.sharing.project.task.timesheet.kanban.inherited project.task templates Inherits project.project_sharing_project_task_view_kanban
project_task_create_timesheet_view_form project.task.create.timesheet.wizard.form project.task.create.timesheet form New
project_task_view_graph project.task.view.graph.inherited project.task xpath Inherits project.view_project_task_graph
project_task_view_pivot project.task.view.pivot.inherited project.task xpath Inherits project.view_project_task_pivot
project_task_view_search project.task.view.search.inherit.sale.timesheet.enterprise project.task xpath Inherits project.view_task_search_form
report_project_task_timesheet report_project_task_timesheet ir.ui.view qweb New
report_project_task_user_view_search report.project.task.user.view.search.inherit.hr.timesheet report.project.task.user xpath Inherits project.view_task_project_user_search
report_project_task_user_view_tree report.project.task.user.view.tree.inherit.hr.timesheet report.project.task.user field Inherits project.report_project_task_user_view_tree
report_timesheet report_timesheet ir.ui.view qweb New
report_timesheet_project report_timesheet_project ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr.timesheet res.config.settings xpath Inherits base.res_config_settings_view_form
timesheet_view_form_user account.analytic.line.tree.with.user account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
timesheet_view_tree_user account.analytic.line.view.tree.with.user account.analytic.line xpath Inherits hr_timesheet_line_tree
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_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_my_timesheet_line_pivot account.analytic.line.pivot account.analytic.line pivot New
view_project_kanban_inherited project.project.timesheet.kanban.inherited project.project field Inherits project.view_project_kanban
view_task_form2_inherited project.task.form.inherited project.task xpath Inherits project.view_task_form2
view_task_kanban_inherited_progress project.task.timesheet.kanban.inherited.progress project.task templates Inherits project.view_task_kanban
view_task_project_user_graph_inherited report.project.task.user.graph.inherited report.project.task.user xpath Inherits project.view_task_project_user_graph
view_task_project_user_pivot_inherited report.project.task.user.pivot.inherited report.project.task.user xpath Inherits project.view_task_project_user_pivot
view_task_tree2_inherited project.task.tree.inherited project.task field Inherits project.view_task_tree2
Models touched (12)

New fields (7)
  • department_id Many2one → hr.department
    compute='_compute_department_id' compute_sudo=True store=True args: 'hr.department', 'Department'
  • employee_id Many2one → hr.employee
    context={'active_test': False} domain=_domain_employee_id args: 'hr.employee', 'Employee'
  • encoding_uom_id Many2one → uom.uom
    compute='_compute_encoding_uom_id' args: 'uom.uom'
  • partner_id Many2one
    compute='_compute_partner_id' readonly=False store=True
  • project_id Many2one → project.project
    compute='_compute_project_id' domain=_domain_project_id readonly=False store=True args: 'project.project', 'Project'
  • task_id Many2one → project.task
    compute='_compute_task_id' domain="[('allow_timesheets', '=', True), ('project_id', '=?', project_id)]" index=True readonly=False store=True args: 'project.task', 'Task'
  • user_id Many2one
    compute='_compute_user_id' readonly=False store=True
Public methods (5)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, field_list)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
    Set the correct label for `unit_amount`, depending on company UoM
  • name_get(self)
  • write(self, values)

New fields (2)
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' args: 'res.currency'
  • timesheet_cost Monetary
    currency_field='currency_id' default=0.0 groups='hr.group_hr_user' args: 'Timesheet Cost'
Public methods (0)

No public methods.

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 (10)
  • allow_timesheets Boolean
    compute='_compute_allow_timesheets' default=True help='Enable timesheeting on the project.' readonly=False store=True args: 'Timesheets'
  • analytic_account_id Many2one
    domain="[\n '|', ('company_id', '=', False), ('company_id', '=', company_id),\n ('partner_id', '=?', partner_id),\n ]"
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days'
  • has_planned_hours_tasks Boolean
    compute='_compute_remaining_hours' compute_sudo=True help="True if any of the project's task has a set planned hours"
  • is_internal_project Boolean
    compute='_compute_is_internal_project' search='_search_is_internal_project'
  • remaining_hours Float
    compute='_compute_remaining_hours' compute_sudo=True string='Remaining Invoiced Time'
  • timesheet_count Boolean
    compute='_compute_timesheet_count'
  • timesheet_encode_uom_id Many2one → uom.uom
    related='company_id.timesheet_encode_uom_id' args: 'uom.uom'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'project_id', 'Associated Timesheets'
  • total_timesheet_time Integer
    compute='_compute_total_timesheet_time' groups='hr_timesheet.group_hr_timesheet_user' help='Total number of time (in the proper UoM) recorded in the project, rounded to the unit.'
Public methods (3)
  • action_show_timesheets_by_employee_invoice_type(self)
  • create(self, vals_list)
    @api.model_create_multi
    Create 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
  • write(self, values)

New fields (10)
  • allow_timesheets Boolean
    compute='_compute_allow_timesheets' compute_sudo=True help='Timesheets can be logged on this task.' readonly=True search='_search_allow_timesheets' args: 'Allow timesheets'
  • analytic_account_active Boolean
    compute='_compute_analytic_account_active' compute_sudo=True args: 'Active Analytic Account'
  • effective_hours Float
    compute='_compute_effective_hours' compute_sudo=True help='Time spent on this task, excluding its sub-tasks.' store=True args: 'Hours Spent'
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days' default=<expr>
  • overtime Float
    compute='_compute_progress_hours' store=True
  • progress Float
    compute='_compute_progress_hours' group_operator='avg' help='Display progress of current task.' store=True args: 'Progress'
  • remaining_hours Float
    compute='_compute_remaining_hours' help='Total remaining time, can be re-estimated periodically by the assignee of the task.' readonly=True store=True args: 'Remaining Hours'
  • subtask_effective_hours Float
    compute='_compute_subtask_effective_hours' help='Time spent on the sub-tasks (and their own sub-tasks) of this task.' recursive=True store=True args: 'Sub-tasks Hours Spent'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'task_id', 'Timesheets'
  • total_hours_spent Float
    compute='_compute_total_hours_spent' help='Time spent on this task, including its sub-tasks.' store=True args: 'Total Hours'
Public methods (4)
  • SELF_READABLE_FIELDS(self)
    @property
  • action_view_subtask_timesheet(self)
  • name_get(self)
  • write(self, values)

New fields (3)
  • description Char
    args: 'Description'
  • task_id Many2one → project.task
    default=<expr> help='Task for which we are creating a sales order' required=True args: 'project.task', 'Task'
  • time_spent Float
    digits=(16, 2) args: 'Time'
Public methods (2)
  • action_delete_timesheet(self)
  • save_timesheet(self)

New fields (4)
  • hours_effective Float
    readonly=True args: 'Effective Hours'
  • hours_planned Float
    readonly=True args: 'Planned Hours'
  • progress Float
    group_operator='avg' readonly=True args: 'Progress'
  • remaining_hours Float
    readonly=True args: 'Remaining Hours'
Public methods (0)

No public methods.

New fields (3)
  • internal_project_id Many2one → project.project
    help='Default project value for timesheet generated from time off type.' string='Internal Project' args: 'project.project'
  • project_time_mode_id Many2one → uom.uom
    default=_default_project_time_mode_id help="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_id Many2one → uom.uom
    default=_default_timesheet_encode_uom_id domain=<expr> help='This will set the unit of measure used to encode timesheet. This will simply provide tools\n and widgets to help the encoding. All reporting will still be expressed in hours (default value).' string='Timesheet Encoding Unit' args: 'uom.uom'
Public methods (1)
  • create(self, values)
    @api.model_create_multi

New fields (7)
  • is_encode_uom_days Boolean
    compute='_compute_is_encode_uom_days'
  • module_project_timesheet_holidays Boolean
    compute='_compute_timesheet_modules' readonly=False store=True args: 'Time Off'
  • module_project_timesheet_synchro Boolean
    compute='_compute_timesheet_modules' readonly=False store=True args: 'Awesome Timesheet'
  • project_time_mode_id Many2one → uom.uom
    help="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=False related='company_id.project_time_mode_id' string='Project Time Unit' args: 'uom.uom'
  • reminder_manager_allow Boolean
    help='If checked, send an email to all manager' string='Manager Reminder'
  • reminder_user_allow Boolean
    help='If checked, send an email to all users who have not recorded their timesheet' string='Employee Reminder'
  • timesheet_encode_uom_id Many2one → uom.uom
    help='This will set the unit of measure used to encode timesheet. This will simply provide tools\n and widgets to help the encoding. All reporting will still be expressed in hours (default value).' readonly=False related='company_id.timesheet_encode_uom_id' string='Encoding Unit' args: 'uom.uom'
Public methods (0)

No public methods.

New fields (1)
  • timesheet_widget Char
    help='Widget used in the webclient when this unit is the one used to encode timesheets.' args: 'Widget'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYServices/Timesheets
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Lempereur, Thibault Francois, Aaron Bohy, Jeremy Kersten, GitHub, Damien Bouvy, Barad Mahendra, Yannick Tivisse, Jorge Pinna Puissant, Alexandre Kühn, Julien Castiaux, Xavier-Do, Victor Feyens, Nasreddin (bon), fw-bot, Anh Thao Pham (pta), Rémy Baranx (bar), Lucas Lefèvre, Nasreddin Boulif (bon), Prakash Prajapati, nie, IEL, Mathieu Duckerts-Antoine, jbm-odoo, Arnaud Joset, root, Kevin Baptiste, Xavier BOL (xbo), jdoutreloux, Adrien Peiffer, laa, thcl-odoo, mafo-odoo, Jinjiu Liu, Laurent Stukkens (LTU), Pierrot (prro), Thomas Lefebvre (thle), Gurupreet Singh, Siddarth Gajjar, Victor Piryns (pivi), Dominik Rubo, datonefaridze, Yash Vaishnav, Florian Bieringer, Hamza (hisl), Giacomello Nathan (ngi)
WEBSITE
WEBSITEhttps://www.odoo.com/page/timesheet-mobile-app
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - analytic
    - uom
    - project
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (29)
XML IDNameModelTypeStatus
assets_backend timesheet assets ir.ui.view qweb Inherits web.assets_backend
hr_department_view_kanban hr.department.kanban.inherit hr.department data Inherits hr.hr_department_view_kanban
hr_employee_view_form_inherit_timesheet hr.employee.form.timesheet hr.employee xpath Inherits hr.view_employee_form
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 field Inherits hr_timesheet_line_search
hr_timesheet_line_search account.analytic.line.search account.analytic.line search New
hr_timesheet_line_tree account.analytic.line.tree.hr_timesheet account.analytic.line tree New
portal_layout Portal layout: timesheet menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home_timesheet Show 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_timesheets My Timesheets ir.ui.view qweb New
portal_subtask_timesheet_tables Portal Subtask Timesheet Tables ir.ui.view qweb New
portal_timesheet_table Portal Timesheet Table ir.ui.view qweb New
project_invoice_form Inherit project form : Invoicing Data project.project div Inherits project.edit_project
project_project_view_form_simplified_inherit_timesheet project.project.view.form.simplified.inherit.timesheet project.project field Inherits project.project_project_view_form_simplified
project_task_create_timesheet_view_form project.task.create.timesheet.wizard.form project.task.create.timesheet form New
project_task_view_search project.task.view.search.inherit.sale.timesheet.enterprise project.task xpath Inherits project.view_task_search_form
report_timesheet report_timesheet ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr.timesheet res.config.settings xpath Inherits base.res_config_settings_view_form
timesheet_view_form_user account.analytic.line.tree.with.user account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
timesheet_view_tree_user account.analytic.line.view.tree.with.user account.analytic.line xpath Inherits hr_timesheet_line_tree
view_hr_timesheet_line_graph 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_project_kanban_inherited project.project.timesheet.kanban.inherited project.project field Inherits project.view_project_kanban
view_task_form2_inherited project.task.form.inherited project.task xpath Inherits project.view_task_form2
view_task_kanban_inherited_progress project.task.timesheet.kanban.inherited.progress project.task templates 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_tree2_inherited project.task.tree.inherited project.task field Inherits project.view_task_tree2
Models touched (10)

New fields (7)
  • department_id Many2one → hr.department
    compute='_compute_department_id' compute_sudo=True store=True args: 'hr.department', 'Department'
  • employee_id Many2one → hr.employee
    context={'active_test': False} domain=_domain_employee_id args: 'hr.employee', 'Employee'
  • encoding_uom_id Many2one → uom.uom
    compute='_compute_encoding_uom_id' args: 'uom.uom'
  • partner_id Many2one
    compute='_compute_partner_id' readonly=False store=True
  • project_id Many2one → project.project
    compute='_compute_project_id' domain=_domain_project_id readonly=False store=True args: 'project.project', 'Project'
  • task_id Many2one → project.task
    compute='_compute_task_id' domain="[('project_id.allow_timesheets', '=', True), ('project_id', '=?', project_id)]" index=True readonly=False store=True args: 'project.task', 'Task'
  • user_id Many2one
    compute='_compute_user_id' readonly=False store=True
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, field_list)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
    Set the correct label for `unit_amount`, depending on company UoM
  • write(self, values)

New fields (2)
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' args: 'res.currency'
  • timesheet_cost Monetary
    currency_field='currency_id' default=0.0 groups='hr.group_hr_user' args: 'Timesheet Cost'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • session_info(self)
    The widget 'timesheet_uom' needs to know which UoM conversion factor and which javascript widget to apply, depending on th ecurrent company.

New fields (6)
  • allow_timesheets Boolean
    compute='_compute_allow_timesheets' default=True help='Enable timesheeting on the project.' readonly=False store=True args: 'Timesheets'
  • analytic_account_id Many2one
    domain="[\n '|', ('company_id', '=', False), ('company_id', '=', company_id),\n ('partner_id', '=?', partner_id),\n ]"
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days'
  • timesheet_encode_uom_id Many2one → uom.uom
    related='company_id.timesheet_encode_uom_id' args: 'uom.uom'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'project_id', 'Associated Timesheets'
  • total_timesheet_time Integer
    compute='_compute_total_timesheet_time' help='Total number of time (in the proper UoM) recorded in the project, rounded to the unit.'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    Create 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
  • unlink(self)
    If some projects to unlink have some timesheets entries, these timesheets entries must be unlinked first. In this case, a warning message is displayed through a RedirectWarning and allows the user to see timesheets entries to unlink.
  • write(self, values)

New fields (10)
  • allow_timesheets Boolean
    help='Timesheets can be logged on this task.' readonly=True related='project_id.allow_timesheets' args: 'Allow timesheets'
  • analytic_account_active Boolean
    compute='_compute_analytic_account_active' args: 'Active Analytic Account'
  • effective_hours Float
    compute='_compute_effective_hours' compute_sudo=True help='Time spent on this task, excluding its sub-tasks.' store=True args: 'Hours Spent'
  • encode_uom_in_days Boolean
    compute='_compute_encode_uom_in_days' default=<expr>
  • overtime Float
    compute='_compute_progress_hours' store=True
  • progress Float
    compute='_compute_progress_hours' group_operator='avg' help='Display progress of current task.' store=True args: 'Progress'
  • remaining_hours Float
    compute='_compute_remaining_hours' help='Total remaining time, can be re-estimated periodically by the assignee of the task.' readonly=True store=True args: 'Remaining Hours'
  • subtask_effective_hours Float
    compute='_compute_subtask_effective_hours' help='Time spent on the sub-tasks (and their own sub-tasks) of this task.' store=True args: 'Sub-tasks Hours Spent'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'task_id', 'Timesheets'
  • total_hours_spent Float
    compute='_compute_total_hours_spent' help='Time spent on this task, including its sub-tasks.' store=True args: 'Total Hours'
Public methods (4)
  • action_view_subtask_timesheet(self)
  • name_get(self)
  • unlink(self)
    If some tasks to unlink have some timesheets entries, these timesheets entries must be unlinked first. In this case, a warning message is displayed through a RedirectWarning and allows the user to see timesheets entries to unlink.
  • write(self, values)

New fields (3)
  • description Char
    args: 'Description'
  • task_id Many2one → project.task
    default=<expr> help='Task for which we are creating a sales order' required=True args: 'project.task', 'Task'
  • time_spent Float
    digits=(16, 2) args: 'Time'
Public methods (1)
  • save_timesheet(self)

New fields (4)
  • hours_effective Float
    readonly=True args: 'Effective Hours'
  • hours_planned Float
    readonly=True args: 'Planned Hours'
  • progress Float
    group_operator='avg' readonly=True args: 'Progress'
  • remaining_hours Float
    readonly=True args: 'Remaining Hours'
Public methods (0)

No public methods.

New fields (2)
  • project_time_mode_id Many2one → uom.uom
    default=_default_project_time_mode_id help="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_id Many2one → uom.uom
    default=_default_timesheet_encode_uom_id domain=<expr> help='This will set the unit of measure used to encode timesheet. This will simply provide tools\n and widgets to help the encoding. All reporting will still be expressed in hours (default value).' string='Timesheet Encoding Unit' args: 'uom.uom'
Public methods (1)
  • create(self, values)
    @api.model_create_multi

New fields (7)
  • is_encode_uom_days Boolean
    compute='_compute_is_encode_uom_days'
  • module_project_timesheet_holidays Boolean
    compute='_compute_timesheet_modules' readonly=False store=True args: 'Record Time Off'
  • module_project_timesheet_synchro Boolean
    compute='_compute_timesheet_modules' readonly=False store=True args: 'Awesome Timesheet'
  • project_time_mode_id Many2one → uom.uom
    help="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=False related='company_id.project_time_mode_id' string='Project Time Unit' args: 'uom.uom'
  • timesheet_encode_uom_id Many2one → uom.uom
    help='This will set the unit of measure used to encode timesheet. This will simply provide tools\n and widgets to help the encoding. All reporting will still be expressed in hours (default value).' readonly=False related='company_id.timesheet_encode_uom_id' string='Encoding Unit' args: 'uom.uom'
  • timesheet_min_duration Integer
    config_parameter='hr_timesheet.timesheet_min_duration' default=15 args: 'Minimal duration'
  • timesheet_rounding Integer
    config_parameter='hr_timesheet.timesheet_rounding' default=15 args: 'Rounding up'
Public methods (0)

No public methods.

New fields (1)
  • timesheet_widget Char
    help='Widget used in the webclient when this unit is the one used to encode timesheets.' args: 'Widget'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYOperations/Timesheets
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Thibault Francois, GitHub, Damien Bouvy, Barad Mahendra, Yannick Tivisse, Martin Geubelle, jem-odoo, Jorge Pinna Puissant, Alexandre Kühn, Adrian Torres, Aurélien Warnon, Priyanka Kakadiya, Xavier-Do, Victor Feyens, Sébastien Theys, Nasreddin (bon), fw-bot, Anh Thao Pham (pta), Lucas Lefèvre, Prakash Prajapati, IEL, Jinal Patel, Kevin Baptiste, Geoffroy Larue, Adrien Peiffer
WEBSITE
WEBSITEhttps://www.odoo.com/page/timesheet-mobile-app
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - mail_bot
    - analytic
    - uom
    - project
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (25)
XML IDNameModelTypeStatus
assets_backend timesheet assets ir.ui.view qweb Inherits web.assets_backend
hr_department_view_kanban hr.department.kanban.inherit hr.department data Inherits hr.hr_department_view_kanban
hr_employee_view_form_inherit_timesheet hr.employee.form.timesheet hr.employee xpath Inherits hr.view_employee_form
hr_timesheet_line_form account.analytic.line.form account.analytic.line form New
hr_timesheet_line_search account.analytic.line.search account.analytic.line search New
hr_timesheet_line_tree account.analytic.line.tree.hr_timesheet account.analytic.line tree New
portal_layout Portal layout: timesheet menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home_timesheet Portal My Home : timesheets entries 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_timesheets My Timesheets ir.ui.view qweb New
portal_timesheet_table Portal Timesheet Table ir.ui.view qweb New
project_invoice_form Inherit project form : Invoicing Data project.project div Inherits project.edit_project
project_project_view_form_simplified_inherit_timesheet project.project.view.form.simplified.inherit.timesheet project.project field Inherits project.project_project_view_form_simplified
report_timesheet report_timesheet ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr.timesheet res.config.settings xpath Inherits base.res_config_settings_view_form
timesheet_view_form_user account.analytic.line.tree.with.user account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
timesheet_view_tree_user account.analytic.line.view.tree.with.user account.analytic.line xpath Inherits hr_timesheet_line_tree
view_hr_timesheet_line_graph 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_project_kanban_inherited project.project.timesheet.kanban.inherited project.project field Inherits project.view_project_kanban
view_task_form2_inherited project.task.form.inherited project.task xpath Inherits project.view_task_form2
view_task_kanban_inherited_progress project.task.timesheet.kanban.inherited.progress project.task templates 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_tree2_inherited project.task.tree.inherited project.task field Inherits project.view_task_tree2
Models touched (9)

New fields (5)
  • department_id Many2one → hr.department
    compute='_compute_department_id' compute_sudo=True store=True args: 'hr.department', 'Department'
  • employee_id Many2one → hr.employee
    args: 'hr.employee', 'Employee'
  • encoding_uom_id Many2one → uom.uom
    compute='_compute_encoding_uom_id' args: 'uom.uom'
  • project_id Many2one → project.project
    domain=[('allow_timesheets', '=', True)] args: 'project.project', 'Project'
  • task_id Many2one → project.task
    domain="[('company_id', '=', company_id)]" index=True args: 'project.task', 'Task'
Public methods (5)
  • create(self, values)
    @api.model
  • default_get(self, field_list)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
    Set the correct label for `unit_amount`, depending on company UoM
  • onchange_project_id(self)
    @api.onchange('project_id')
  • write(self, values)

New fields (2)
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' args: 'res.currency'
  • timesheet_cost Monetary
    currency_field='currency_id' default=0.0 groups='hr.group_hr_user' args: 'Timesheet Cost'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • session_info(self)
    The widget 'timesheet_uom' needs to know which UoM conversion factor and which javascript widget to apply, depending on th ecurrent company.

New fields (1)
  • allow_timesheets Boolean
    default=True help='Enable timesheeting on the project.' args: 'Timesheets'
Public methods (4)
  • create(self, values)
    @api.model
    Create 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
  • name_create(self, name)
    @api.model
    Create a project with name_create should generate analytic account creation
  • unlink(self)
  • write(self, values)

New fields (8)
  • allow_timesheets Boolean
    help='Timesheets can be logged on this task.' readonly=True related='project_id.allow_timesheets' args: 'Allow timesheets'
  • analytic_account_active Boolean
    readonly=True related='project_id.analytic_account_id.active' args: 'Analytic Account'
  • effective_hours Float
    compute='_compute_effective_hours' compute_sudo=True help='Computed using the sum of the task work done.' store=True args: 'Hours Spent'
  • progress Float
    compute='_compute_progress_hours' group_operator='avg' help='Display progress of current task.' store=True args: 'Progress'
  • remaining_hours Float
    compute='_compute_remaining_hours' help='Total remaining time, can be re-estimated periodically by the assignee of the task.' readonly=True store=True args: 'Remaining Hours'
  • subtask_effective_hours Float
    compute='_compute_subtask_effective_hours' help='Sum of actually spent hours on the subtask(s)' store=True args: 'Sub-tasks Hours Spent'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'task_id', 'Timesheets'
  • total_hours_spent Float
    compute='_compute_total_hours_spent' help='Computed as: Time Spent + Sub-tasks Hours.' store=True args: 'Total Hours'
Public methods (1)
  • write(self, values)

New fields (4)
  • hours_effective Float
    readonly=True args: 'Effective Hours'
  • hours_planned Float
    readonly=True args: 'Planned Hours'
  • progress Float
    group_operator='avg' readonly=True args: 'Progress'
  • remaining_hours Float
    readonly=True args: 'Remaining Hours'
Public methods (0)

No public methods.

New fields (2)
  • project_time_mode_id Many2one → uom.uom
    default=_default_project_time_mode_id domain=[('measure_type', '=', 'working_time')] help="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_id Many2one → uom.uom
    default=_default_timesheet_encode_uom_id domain=[('measure_type', '=', 'working_time')] help='This will set the unit of measure used to encode timesheet. This will simply provide tools\n and widgets to help the encoding. All reporting will still be expressed in hours (default value).' required=True string='Timesheet Encoding Unit' args: 'uom.uom'
Public methods (0)

No public methods.

New fields (4)
  • module_project_timesheet_holidays Boolean
    args: 'Record Time Off'
  • module_project_timesheet_synchro Boolean
    args: 'Awesome Timesheet'
  • project_time_mode_id Many2one → uom.uom
    help="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=False related='company_id.project_time_mode_id' string='Project Time Unit' args: 'uom.uom'
  • timesheet_encode_uom_id Many2one → uom.uom
    help='This will set the unit of measure used to encode timesheet. This will simply provide tools\n and widgets to help the encoding. All reporting will still be expressed in hours (default value).' readonly=False related='company_id.timesheet_encode_uom_id' string='Encoding Unit' args: 'uom.uom'
Public methods (0)

No public methods.

New fields (1)
  • timesheet_widget Char
    help='Widget used in the webclient when this unit is the one used to encode timesheets.' args: 'Widget'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Géry Debongnie, GitHub, Yannick Tivisse, Alexandre Kühn, qsm-odoo, Toufik Benjaa, jem-odoo, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Toufik Ben Jaa, Adrian Torres, XavierDo, Xavier-Do, jvm-odoo, Sébastien Theys, LofbergValentin, Naglis Jonaitis
WEBSITE
WEBSITEhttps://www.odoo.com/page/timesheet-mobile-app
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - analytic
    - decimal_precision
    - uom
    - project
    - portal
    - http_routing
    - rating
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (21)
XML IDNameModelTypeStatus
account_analytic_account_view_form_inherit account.analytic.account.form.inherit account.analytic.account xpath Inherits analytic.view_account_analytic_account_form
assets_backend timesheet assets ir.ui.view qweb Inherits web.assets_backend
hr_department_view_kanban hr.department.kanban.inherit hr.department data Inherits hr.hr_department_view_kanban
hr_employee_view_form_inherit_timesheet hr.employee.form.timesheet hr.employee xpath Inherits hr.view_employee_form
hr_timesheet_line_form account.analytic.line.form account.analytic.line form New
hr_timesheet_line_search account.analytic.line.search account.analytic.line search New
hr_timesheet_line_tree account.analytic.line.tree.hr_timesheet account.analytic.line tree New
portal_my_task Portal: My Task with Timesheets ir.ui.view qweb Inherits project.portal_my_task
project_invoice_form Inherit project form : Invoicing Data project.project button Inherits project.edit_project
project_project_view_form_simplified_inherit_timesheet project.project.view.form.simplified.inherit.timesheet project.project field Inherits project.project_project_view_form_simplified
report_timesheet report_timesheet ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr.timesheet res.config.settings xpath Inherits base.res_config_settings_view_form
timesheet_view_form_user account.analytic.line.tree.with.user account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
timesheet_view_tree_user account.analytic.line.view.tree.with.user account.analytic.line xpath Inherits hr_timesheet_line_tree
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_project_kanban_inherited project.project.timesheet.kanban.inherited project.project field Inherits project.view_project_kanban
view_task_form2_inherited project.task.form.inherited project.task xpath Inherits project.view_task_form2
view_task_kanban_inherited_progress project.task.timesheet.kanban.inherited.progress project.task templates 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_tree2_inherited project.task.tree.inherited project.task field Inherits project.view_task_tree2
Models touched (10)

New fields (3)
  • company_uom_id Many2one → uom.uom
    readonly=False related='company_id.project_time_mode_id' string='Company UOM' args: 'uom.uom'
  • project_count Integer
    compute='_compute_project_count' args: 'Project Count'
  • project_ids One2many → project.project
    string='Projects' args: 'project.project', 'analytic_account_id'
Public methods (2)
  • action_view_projects(self)
    @api.multi
  • unlink(self)
    @api.multi

New fields (4)
  • department_id Many2one → hr.department
    compute='_compute_department_id' compute_sudo=True store=True args: 'hr.department', 'Department'
  • employee_id Many2one → hr.employee
    args: 'hr.employee', 'Employee'
  • project_id Many2one → project.project
    domain=[('allow_timesheets', '=', True)] args: 'project.project', 'Project'
  • task_id Many2one → project.task
    index=True args: 'project.task', 'Task'
Public methods (5)
  • create(self, values)
    @api.model
  • default_get(self, field_list)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
    Set the correct label for `unit_amount`, depending on company UoM
  • onchange_project_id(self)
    @api.onchange('project_id')
  • write(self, values)
    @api.multi

New fields (2)
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' args: 'res.currency'
  • timesheet_cost Monetary
    currency_field='currency_id' default=0.0 args: 'Timesheet Cost'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • session_info(self)
    The widget 'timesheet_uom' needs to know which UoM conversion factor and which javascript widget to apply, depending on th ecurrent company.

New fields (2)
  • allow_timesheets Boolean
    default=True args: 'Allow timesheets'
  • analytic_account_id Many2one → account.analytic.account
    copy=False help='Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc.' ondelete='set null' string='Analytic Account' args: 'account.analytic.account'
Public methods (4)
  • create(self, values)
    @api.model
    Create 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
  • name_create(self, name)
    @api.model
    Create a project with name_create should generate analytic account creation
  • unlink(self)
    @api.multi
    Delete the empty related analytic account
  • write(self, values)
    @api.multi

New fields (8)
  • allow_timesheets Boolean
    help='Timesheets can be logged on this task.' readonly=True related='project_id.allow_timesheets' args: 'Allow timesheets'
  • analytic_account_active Boolean
    readonly=True related='project_id.analytic_account_id.active' args: 'Analytic Account'
  • effective_hours Float
    compute='_compute_effective_hours' compute_sudo=True help='Computed using the sum of the task work done.' store=True args: 'Hours Spent'
  • progress Float
    compute='_compute_progress_hours' group_operator='avg' help='Display progress of current task.' store=True args: 'Progress'
  • remaining_hours Float
    compute='_compute_remaining_hours' help='Total remaining time, can be re-estimated periodically by the assignee of the task.' readonly=True store=True args: 'Remaining Hours'
  • subtask_effective_hours Float
    compute='_compute_subtask_effective_hours' help='Sum of actually spent hours on the subtask(s)' oldname='children_hours' store=True args: 'Sub-tasks Hours Spent'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'task_id', 'Timesheets'
  • total_hours_spent Float
    compute='_compute_total_hours_spent' help='Computed as: Time Spent + Sub-tasks Hours.' store=True args: 'Total Hours'
Public methods (1)
  • write(self, values)
    @api.multi

New fields (4)
  • hours_effective Float
    readonly=True args: 'Effective Hours'
  • hours_planned Float
    readonly=True args: 'Planned Hours'
  • progress Float
    group_operator='avg' readonly=True args: 'Progress'
  • remaining_hours Float
    readonly=True args: 'Remaining Hours'
Public methods (0)

No public methods.

New fields (2)
  • project_time_mode_id Many2one → uom.uom
    default=_default_project_time_mode_id domain=[('measure_type', '=', 'time')] help="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_id Many2one → uom.uom
    default=_default_timesheet_encode_uom_id domain=[('measure_type', '=', 'time')] help='This will set the unit of measure used to encode timesheet. This will simply provide tools\n and widgets to help the encoding. All reporting will still be expressed in hours (default value).' required=True string='Timesheet Encoding Unit' args: 'uom.uom'
Public methods (0)

No public methods.

New fields (4)
  • module_project_timesheet_holidays Boolean
    args: 'Leaves'
  • module_project_timesheet_synchro Boolean
    args: 'Awesome Timesheet'
  • project_time_mode_id Many2one → uom.uom
    help="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=False related='company_id.project_time_mode_id' string='Project Time Unit' args: 'uom.uom'
  • timesheet_encode_uom_id Many2one → uom.uom
    help='This will set the unit of measure used to encode timesheet. This will simply provide tools\n and widgets to help the encoding. All reporting will still be expressed in hours (default value).' readonly=False related='company_id.timesheet_encode_uom_id' string='Encoding Unit' args: 'uom.uom'
Public methods (0)

No public methods.

New fields (1)
  • timesheet_widget Char
    help='Widget used in the webclient when this unit is the one used to encode timesheets.' args: 'Widget'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, Julien Legros, Richard Mathot, GitHub, Lucas Perais (lpe), Yannick Tivisse, Odoo Online, Laurent Smet, DVE, jem-odoo, len-odoo, Jorge Pinna Puissant, Denis Vermylen, Florimond Husquinet (fhu)
WEBSITE
WEBSITEhttps://www.odoo.com/page/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - project
    - product
    - decimal_precision
    - analytic
    - portal
    - http_routing
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (20)
XML IDNameModelTypeStatus
hr_department_view_kanban hr.department.kanban.inherit hr.department data Inherits hr.hr_department_view_kanban
hr_employee_view_form_inherit_timesheet hr.employee.form.timesheet hr.employee xpath Inherits hr.view_employee_form
hr_timesheet_line_form account.analytic.line.form account.analytic.line form New
hr_timesheet_line_search account.analytic.line.search account.analytic.line search New
hr_timesheet_line_tree account.analytic.line.tree.hr_timesheet account.analytic.line tree New
portal_my_task Portal: My Task with imesheets ir.ui.view qweb Inherits project.portal_my_task
project_invoice_form Inherit project form : Invoicing Data project.project button Inherits project.edit_project
project_project_view_form_simplified_inherit_timesheet project.project.view.form.simplified.inherit.timesheet project.project field Inherits project.project_project_view_form_simplified
report_timesheet report_timesheet ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr.timesheet res.config.settings xpath Inherits base.res_config_settings_view_form
timesheet_view_calendar account.analytic.line.calendar account.analytic.line calendar New
timesheet_view_form_user account.analytic.line.tree.with.user account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
timesheet_view_tree_user account.analytic.line.view.tree.with.user account.analytic.line xpath Inherits hr_timesheet_line_tree
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_project_kanban_inherited project.project.timesheet.kanban.inherited project.project field Inherits project.view_project_kanban
view_task_form2_inherited project.task.form.inherited project.task xpath Inherits project.view_task_form2
view_task_kanban_inherited_progress project.task.timesheet.kanban.inherited.progress project.task templates 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_tree2_inherited project.task.tree.inherited project.task field Inherits project.view_task_tree2
Models touched (5)

New fields (4)
  • department_id Many2one → hr.department
    compute='_compute_department_id' compute_sudo=True store=True args: 'hr.department', 'Department'
  • employee_id Many2one → hr.employee
    args: 'hr.employee', 'Employee'
  • project_id Many2one → project.project
    domain=[('allow_timesheets', '=', True)] args: 'project.project', 'Project'
  • task_id Many2one → project.task
    index=True args: 'project.task', 'Task'
Public methods (4)
  • create(self, vals)
    @api.model
  • default_get(self, field_list)
    @api.model
  • onchange_project_id(self)
    @api.onchange('project_id')
  • write(self, vals)
    @api.multi

New fields (1)
  • allow_timesheets Boolean
    default=True args: 'Allow timesheets'
Public methods (0)

No public methods.

New fields (8)
  • children_hours Float
    compute='_hours_get' help='Sum of the planned hours of all sub-tasks (when a sub-task is closed or its spent hours exceed its planned hours, spent hours are counted instead)' store=True string='Sub-tasks Hours'
  • delay_hours Float
    compute='_hours_get' help='Computed as difference between planned hours by the project manager and the total hours of the task.' store=True string='Delay Hours'
  • effective_hours Float
    compute='_hours_get' help='Computed using the sum of the task work done.' store=True string='Hours Spent'
  • progress Float
    compute='_hours_get' group_operator='avg' store=True string='Progress'
  • remaining_hours Float
    compute='_hours_get' help='Total remaining time, can be re-estimated periodically by the assignee of the task.' store=True string='Remaining Hours'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'task_id', 'Timesheets'
  • total_hours Float
    compute='_hours_get' help='Computed as: Time Spent + Remaining Time.' store=True string='Total'
  • total_hours_spent Float
    compute='_hours_get' help='Computed as: Time Spent + Sub-tasks Hours.' store=True string='Total Hours'
Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, values)
    @api.multi

New fields (6)
  • hours_delay Float
    readonly=True args: 'Avg. Plan.-Eff.'
  • hours_effective Float
    readonly=True args: 'Effective Hours'
  • hours_planned Float
    readonly=True args: 'Planned Hours'
  • progress Float
    group_operator='avg' readonly=True args: 'Progress'
  • remaining_hours Float
    readonly=True args: 'Remaining Hours'
  • total_hours Float
    readonly=True args: 'Total Hours'
Public methods (0)

No public methods.

New fields (3)
  • module_project_timesheet_holidays Boolean
    args: 'Leaves'
  • module_project_timesheet_synchro Boolean
    args: 'Awesome Timesheet'
  • module_sale_timesheet Boolean
    args: 'Time Billing'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Julien Legros, Thibault Francois, qdp-odoo, GitHub, Damien Bouvy, Yannick Tivisse, Denis Vermylen (dve), Tanguy Charlier
WEBSITE
WEBSITEhttps://www.odoo.com/page/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - report
    - analytic
    - web_planner
    - hr
    - resource
    - project
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (13)
XML IDNameModelTypeStatus
hr_department_view_kanban hr.department.kanban.inherit hr.department data Inherits hr.hr_department_view_kanban
hr_timesheet_line_form account.analytic.line.form.inherit.hr_timesheet account.analytic.line field Inherits analytic.view_account_analytic_line_form
hr_timesheet_line_search account.analytic.line.search account.analytic.line search New
hr_timesheet_line_tree account.analytic.line.tree.hr_timesheet account.analytic.line tree New
project_invoice_form Inherit project form : Invoicing Data project.project button Inherits project.edit_project
project_project_view_form_simplified_inherit_timesheet project.project.view.form.simplified.inherit.timesheet project.project group Inherits project.project_project_view_form_simplified
report_timesheet report_timesheet ir.ui.view qweb New
view_hr_timesheet_line_pivot account.analytic.line.pivot account.analytic.line pivot New
view_project_kanban_inherited project.project.timesheet.kanban.inherited project.project field Inherits project.view_project_kanban
view_task_form2_inherited project.task.form.inherited project.task button Inherits project.view_task_form2
view_task_kanban_inherited_progress project.task.timesheet.kanban.inherited.progress project.task templates 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_tree2_inherited project.task.tree.inherited project.task field Inherits project.view_task_tree2
Models touched (4)

New fields (3)
  • department_id Many2one → hr.department
    compute='_compute_department_id' store=True args: 'hr.department', 'Department'
  • project_id Many2one → project.project
    domain=[('allow_timesheets', '=', True)] args: 'project.project', 'Project'
  • task_id Many2one → project.task
    args: 'project.task', 'Task'
Public methods (3)
  • create(self, vals)
    @api.model
  • onchange_project_id(self)
    @api.onchange('project_id')
  • write(self, vals)
    @api.multi

New fields (2)
  • allow_timesheets Boolean
    default=True args: 'Allow timesheets'
  • subtask_project_id Many2one → project.project
    help='Choosing a sub-tasks project will both enable sub-tasks and set their default project (possibly the project itself)' ondelete='restrict' string='Sub-task Project' args: 'project.project'
Public methods (0)

No public methods.

New fields (12)
  • child_ids One2many → project.task
    string='Sub-tasks' args: 'project.task', 'parent_id'
  • children_hours Float
    compute='_hours_get' help='Sum of the planned hours of all sub-tasks (when a sub-task is closed or its spent hours exceed its planned hours, spent hours are counted instead)' store=True string='Sub-tasks Hours'
  • delay_hours Float
    compute='_hours_get' help='Computed as difference between planned hours by the project manager and the total hours of the task.' store=True string='Delay Hours'
  • effective_hours Float
    compute='_hours_get' help='Computed using the sum of the task work done.' store=True string='Hours Spent'
  • parent_id Many2one → project.task
    string='Parent Task' args: 'project.task'
  • progress Float
    compute='_hours_get' group_operator='avg' store=True string='Working Time Recorded'
  • remaining_hours Float
    compute='_hours_get' help='Total remaining time, can be re-estimated periodically by the assignee of the task.' store=True string='Remaining Hours'
  • subtask_count Integer
    compute='_get_subtask_count' string='Sub-task count' type='integer'
  • subtask_project_id Many2one → project.project
    readonly=True related='project_id.subtask_project_id' string='Sub-task Project' args: 'project.project'
  • timesheet_ids One2many → account.analytic.line
    args: 'account.analytic.line', 'task_id', 'Timesheets'
  • total_hours Float
    compute='_hours_get' help='Computed as: Time Spent + Remaining Time.' store=True string='Total'
  • total_hours_spent Float
    compute='_hours_get' help='Computed as: Time Spent + Sub-tasks Hours.' store=True string='Total Hours'
Public methods (0)

No public methods.

New fields (6)
  • hours_delay Float
    readonly=True args: 'Avg. Plan.-Eff.'
  • hours_effective Float
    readonly=True args: 'Effective Hours'
  • hours_planned Float
    readonly=True args: 'Planned Hours'
  • progress Float
    group_operator='avg' readonly=True args: 'Progress'
  • remaining_hours Float
    readonly=True args: 'Remaining Hours'
  • total_hours Float
    readonly=True args: 'Total Hours'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Josse Colpaert, Christophe Simonis, Nicolas Martinelli, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, Damien Bouvy, Yannick Tivisse, Martin Geubelle, odoo-tac
WEBSITE
WEBSITEhttps://www.odoo.com/page/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - report
    - analytic
    - web_tip
    - web_planner
    - hr
    - resource
    - hr_attendance
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module implements a timesheet system.
==========================================

Each employee can encode and track their time spent on the different projects.
A project is an analytic account and the time spent on a project generates costs on
the analytic account.

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 (7)
XML IDNameModelTypeStatus
hr_department_view_kanban hr.department.kanban.inherit hr.department data Inherits hr.hr_department_view_kanban
hr_timesheet_line_form account.analytic.line.form account.analytic.line form New
hr_timesheet_line_search account.analytic.line.search account.analytic.line search New
hr_timesheet_line_tree account.analytic.line.tree account.analytic.line tree New
view_hr_timesheet_report_graph hr.timesheet.report.graph hr.timesheet.report graph New
view_hr_timesheet_report_pivot hr.timesheet.report.pivot hr.timesheet.report pivot New
view_hr_timesheet_report_search hr.timesheet.report.search hr.timesheet.report search New
Models touched (4)

New fields (1)
  • use_timesheets Boolean
    deprecated=True help='Check this field if this project manages timesheets' args: 'Timesheets'
Public methods (0)

No public methods.

New fields (1)
  • is_timesheet Boolean
    string='Is a Timesheet'
Public methods (0)

No public methods.

New fields (7)
  • account_id Many2one → account.analytic.account
    readonly=True args: 'account.analytic.account', 'Analytic Account'
  • company_id Many2one → res.company
    readonly=True args: 'res.company', 'Company'
  • cost Float
    digits=dp.get_precision('Account') readonly=True args: 'Cost'
  • date Date
    readonly=True args: 'Date'
  • product_id Many2one → product.product
    readonly=True args: 'product.product', 'Product'
  • quantity Float
    readonly=True args: 'Time'
  • user_id Many2one → res.users
    readonly=True args: 'res.users', 'User'
Public methods (1)
  • init(self, cr)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Atul Patel (OpenERP), Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Foram Katharotiya (OpenERP), Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Vo Minh Thu, Launchpad Translations on behalf of openerp, Denis Ledoux, Fabien Meghazi, Christophe Simonis, Xavier Morel, Goffin Simon, Cedric Snauwaert, Simon Lejeune, Vishmita, Amit Bhavsar (Open ERP), Nimesh Contractor (OpenERP), Richard Mathot, Géry Debongnie, Aaron Bohy, Vishmita Jadeja (openerp), Chandni Machchhar (OpenERP Trainee), Richard Mathot (OpenERP), ged-odoo, Gery Debongnie, Randhir Mayatra rma-openerp, sgo@tinyerp.com, Darshan Kalola (OpenERP), Darshan Kalola, Chirag Dodiya (OpenERP), Erwin van der Ploeg, ssh-odoo, Cécile Tonglet
WEBSITE
WEBSITEhttps://www.odoo.com/page/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:38
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - report
    - analytic
    - board
    - edi
    - email_template
    - hr
    - resource
    - hr_attendance
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module implements a timesheet system.
==========================================

Each employee can encode and track their time spent on the different projects.
A project is an analytic account and the time spent on a project generates costs on
the analytic account.

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 (10)
XML IDNameModelTypeStatus
account_analytic_account_timesheet_form account.analytic.account.invoice.form account.analytic.account xpath Inherits analytic.view_account_analytic_account_form
hr_timesheet_employee_extd_form hr.timesheet.employee.extd_form hr.employee xpath Inherits hr.view_employee_form
hr_timesheet_line_form hr.analytic.timesheet.form hr.analytic.timesheet form New
hr_timesheet_line_search hr.analytic.timesheet.search hr.analytic.timesheet search New
hr_timesheet_line_tree hr.analytic.timesheet.tree hr.analytic.timesheet tree New
view_hr_timesheet_report_graph hr.timesheet.report.graph hr.timesheet.report graph New
view_hr_timesheet_report_search hr.timesheet.report.search hr.timesheet.report search New
view_hr_timesheet_sign_in hr.sign.in.project.form hr.sign.in.project form New
view_hr_timesheet_sign_in_message hr.sign.in.project.message.form hr.sign.in.project form New
view_hr_timesheet_sign_out hr.sign.out.project.form hr.sign.out.project form New
Models touched (0)

No models found for this module.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/7.0/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Jagdish Panchal (Open ERP), Twinkle Christian (OpenERP), Cecile Tonglet, Rucha (Open ERP), Atul Patel (OpenERP), Randhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Pinakin Nayi (OpenERP), Harry (OpenERP), Stéphane Bidoul, Antonin Bourguignon, pankita shah (Open ERP), Martin Trigaux, Ajay Chauhan (OpenERP), Purnendu Singh (OpenERP), Fabien Pinckaers, Meera Trambadia (OpenERP), Saurang Suthar, Olivier Dony, Twinkle (OpenERP), Divyesh Makwana (Open ERP), Tejas Tank, Vo Minh Thu, Hardik, pso (OpenERP), Sbh (Openerp), Amit Patel (OpenERP), Launchpad Translations on behalf of openerp, vta vta@openerp.com, Quentin (OpenERP), Kuldeep Joshi (OpenERP), Nimesh (Open ERP), Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, Sanjay Gohel (Open ERP), Alexis de Lattre, ggh-openerp, Xavier ALT, Denis Ledoux dle@openerp.com, dle@openerp.com, Cedric Snauwaert, Amit Patel, Somesh Khare (OpenERP), csn-openerp, Amit (OpenERP)
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:43:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - process
    - decimal_precision
    - mail
    - analytic
    - board
    - edi
    - email_template
    - hr
    - resource
    - hr_attendance
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module implements a timesheet system.
==========================================

Each employee can encode and track their time spent on the different projects.
A project is an analytic account and the time spent on a project generates costs on
the analytic account.

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 (10)
XML IDNameModelTypeStatus
account_analytic_account_timesheet_form account.analytic.account.invoice.form account.analytic.account xpath Inherits analytic.view_account_analytic_account_form
hr_timesheet_employee_extd_form hr.timesheet.employee.extd_form hr.employee xpath Inherits hr.view_employee_form
hr_timesheet_line_form hr.analytic.timesheet.form hr.analytic.timesheet form New
hr_timesheet_line_search hr.analytic.timesheet.search hr.analytic.timesheet search New
hr_timesheet_line_tree hr.analytic.timesheet.tree hr.analytic.timesheet tree New
view_hr_timesheet_employee hr.analytical.timesheet.employee.form hr.analytical.timesheet.employee form New
view_hr_timesheet_sign_in hr.sign.in.project.form hr.sign.in.project form New
view_hr_timesheet_sign_in_message hr.sign.in.project.message.form hr.sign.in.project form New
view_hr_timesheet_sign_out hr.sign.out.project.form hr.sign.out.project form New
view_hr_timesheet_users hr.analytical.timesheet.users.form hr.analytical.timesheet.users form New
Models touched (0)

No models found for this module.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/6.1/hr_timesheet
VERSION
VERSION 1.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Jagdish Panchal (Open ERP), Rucha (Open ERP), Stephane Wirtel, Numerigraphe - Lionel Sausin, Fabien Pinckaers, Antony Lesuisse, Meera Trambadia (OpenERP), Olivier Dony, Thibault Delavallée, Vo Minh Thu, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Kuldeep Joshi (OpenERP), vro, niv-openerp, Ujjvala Collins (OpenERP), Xavier Morel, Chris Biersbach, Carlos Vásquez, ksa (Open ERP), Els Van Vossel, Israel Fermin Montilla, mayur maheshwari (Open ERP), Hardik Ansodariy (OpenERP), rch-openerp, Bharat (OpenERP), ARA (OpenERP), aag (OpenERP), ron@tinyerp.com, mtr, fp, Amit Parmar (OpenERP), Hemendra Paregi (Open ERP)
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:41:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - product
    - process
    - decimal_precision
    - analytic
    - board
    - edi
    - email_template
    - mail
    - base_tools
    - hr
    - resource
    - hr_attendance
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module implements a timesheet system.
==========================================

Each employee can encode and track their time spent on the different projects.
A project is an analytic account and the time spent on a project generates costs on
the analytic account.

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 (10)
XML IDNameModelTypeStatus
hr_timesheet_employee_extd_form hr.timesheet.employee.extd_form hr.employee page Inherits hr.view_employee_form
hr_timesheet_line_form hr.analytic.timesheet.form hr.analytic.timesheet form New
hr_timesheet_line_search hr.analytic.timesheet.search hr.analytic.timesheet search New
hr_timesheet_line_tree hr.analytic.timesheet.tree hr.analytic.timesheet tree New
view_hr_timesheet_employee hr.analytical.timesheet.employee.form hr.analytical.timesheet.employee form New
view_hr_timesheet_my hr.analytical.timesheet.my.form hr.analytical.timesheet.employee form New
view_hr_timesheet_sign_in hr.sign.in.project.form hr.sign.in.project form New
view_hr_timesheet_sign_in_message hr.sign.in.project.message.form hr.sign.in.project form New
view_hr_timesheet_sign_out hr.sign.out.project.form hr.sign.out.project form New
view_hr_timesheet_users hr.analytical.timesheet.users.form hr.analytical.timesheet.users form New
Models touched (0)

No models found for this module.