Project timesheet time control

project_timesheet_time_control
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/18.0/project_timesheet_time_control
VERSION
VERSION 1.0.7
CATEGORY
CATEGORYProject
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci, pilarvargas-tecnativa, Christopher Rogos, Jan Suhr, David Bañón, Simon Leblanc, Jonathan Debétaz
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr_timesheet
    - 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
Allow to track the exact moment when a timesheet line is started (not
only the day, but also the minute and second) and let users start and
stop timers easily.

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
account_analytic_line_tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
hr_timesheet_line_form account.analytic.line.form.inherit account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
hr_timesheet_switch_form hr.timesheet.switch resume form hr.timesheet.switch form New
project_invoice_form Add timesheet time controls project.project div Inherits hr_timesheet.project_invoice_form
view_kanban_account_analytic_line account.analytic.line.kanban account.analytic.line xpath Inherits hr_timesheet.view_kanban_account_analytic_line
view_project_kanban_inherited Add timesheet time controls project.project xpath Inherits hr_timesheet.view_project_kanban_inherited
view_project_tree Add timesheet time controls project.project list Inherits project.view_project
view_task_form2_inherited Add timesheet time controls project.task div Inherits hr_timesheet.view_task_form2_inherited
view_task_kanban Add timesheet time controls project.task xpath Inherits project.view_task_kanban
view_task_tree2_inherited Add timesheet time controls project.task list Inherits hr_timesheet.view_task_tree2_inherited
Models touched (5)

New fields (3)
  • date_time Datetime
    copy=False default=fields.Datetime.now string='Start Time'
  • date_time_end Datetime
    compute='_compute_date_time_end' inverse='_inverse_date_time_end' search='_search_date_time_end' string='End Time'
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('resume', 'Resume'), ('stop', 'Stop')]
Public methods (4)
  • button_end_work(self)
  • button_resume_work(self)
    Create a new record starting now, with a running timer.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (10)
  • analytic_line_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' string='Origin line'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • date_time Datetime
    default=fields.Datetime.now required=True string='Start Time'
  • date_time_end Datetime
    string='End Time'
  • name Char
    required=True string='Description'
  • project_id Many2one → project.project
    comodel_name='project.project' compute='_compute_project_id' domain=_domain_project_id readonly=False store=True string='Project'
  • running_timer_duration Float
    compute='_compute_running_timer_duration' help='When the previous timer is stopped, it will save this duration.' string='Previous timer duration'
  • running_timer_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' default=<expr> help='This timer is running and will be stopped' ondelete='cascade' readonly=True string='Previous timer'
  • running_timer_start Datetime
    readonly=True related='running_timer_id.date_time' string='Previous timer start'
  • task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_task_id' domain="\n [\n ('company_id', '=', company_id),\n ('project_id.allow_timesheets', '=', True),\n ('project_id', '=?', project_id)\n ]\n " index=True readonly=False store=True string='Task'
Public methods (2)
  • action_switch(self)
    Stop old timer, start new one.
  • default_get(self, fields_list)
    @api.model
    Return defaults depending on the context where it is called.

New fields (1)
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('start', 'Start'), ('stop', 'Stop')]
Public methods (2)
  • button_end_work(self)
  • button_start_work(self)
    Create a new record starting now, with a running timer.

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/17.0/project_timesheet_time_control
VERSION
VERSION 1.1.2
CATEGORY
CATEGORYProject
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci, pilarvargas-tecnativa, Roger, David Bañón
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr_timesheet
    - 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
Allow to track the exact moment when a timesheet line is started (not
only the day, but also the minute and second) and let users start and
stop timers easily.

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
account_analytic_line_tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
hr_timesheet_line_form account.analytic.line.form.inherit account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
hr_timesheet_switch_form hr.timesheet.switch resume form hr.timesheet.switch form New
project_invoice_form Add timesheet time controls project.project div Inherits hr_timesheet.project_invoice_form
view_kanban_account_analytic_line account.analytic.line.kanban account.analytic.line xpath Inherits hr_timesheet.view_kanban_account_analytic_line
view_project_kanban_inherited Add timesheet time controls project.project xpath Inherits hr_timesheet.view_project_kanban_inherited
view_project_tree Add timesheet time controls project.project tree Inherits project.view_project
view_task_form2_inherited Add timesheet time controls project.task div Inherits hr_timesheet.view_task_form2_inherited
view_task_kanban Add timesheet time controls project.task xpath Inherits project.view_task_kanban
view_task_tree2_inherited Add timesheet time controls project.task tree Inherits hr_timesheet.view_task_tree2_inherited
Models touched (5)

New fields (3)
  • date_time Datetime
    copy=False default=fields.Datetime.now string='Start Time'
  • date_time_end Datetime
    compute='_compute_date_time_end' inverse='_inverse_date_time_end' string='End Time'
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('resume', 'Resume'), ('stop', 'Stop')]
Public methods (4)
  • button_end_work(self)
  • button_resume_work(self)
    Create a new record starting now, with a running timer.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (10)
  • analytic_line_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' string='Origin line'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • date_time Datetime
    default=fields.Datetime.now required=True string='Start Time'
  • date_time_end Datetime
    string='End Time'
  • name Char
    required=True string='Description'
  • project_id Many2one → project.project
    comodel_name='project.project' compute='_compute_project_id' domain=_domain_project_id readonly=False store=True string='Project'
  • running_timer_duration Float
    compute='_compute_running_timer_duration' help='When the previous timer is stopped, it will save this duration.' string='Previous timer duration'
  • running_timer_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' default=<expr> help='This timer is running and will be stopped' ondelete='cascade' readonly=True string='Previous timer'
  • running_timer_start Datetime
    readonly=True related='running_timer_id.date_time' string='Previous timer start'
  • task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_task_id' domain="\n [\n ('company_id', '=', company_id),\n ('project_id.allow_timesheets', '=', True),\n ('project_id', '=?', project_id)\n ]\n " index=True readonly=False store=True string='Task'
Public methods (2)
  • action_switch(self)
    Stop old timer, start new one.
  • default_get(self, fields_list)
    @api.model
    Return defaults depending on the context where it is called.

New fields (1)
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('start', 'Start'), ('stop', 'Stop')]
Public methods (2)
  • button_end_work(self)
  • button_start_work(self)
    Create a new record starting now, with a running timer.

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/16.0/project_timesheet_time_control
VERSION
VERSION 1.0.4
CATEGORY
CATEGORYProject
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, angel, Moctar Diallo
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr_timesheet
    - 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

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
account_analytic_line_tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
hr_timesheet_line_form account.analytic.line.form.inherit account.analytic.line xpath Inherits hr_timesheet.hr_timesheet_line_form
hr_timesheet_switch_form hr.timesheet.switch resume form hr.timesheet.switch form New
project_invoice_form Add timesheet time controls project.project div Inherits hr_timesheet.project_invoice_form
view_kanban_account_analytic_line account.analytic.line.kanban account.analytic.line xpath Inherits hr_timesheet.view_kanban_account_analytic_line
view_project_kanban_inherited Add timesheet time controls project.project xpath Inherits hr_timesheet.view_project_kanban_inherited
view_project_tree Add timesheet time controls project.project tree Inherits project.view_project
view_task_form2_inherited Add timesheet time controls project.task div Inherits hr_timesheet.view_task_form2_inherited
view_task_kanban Add timesheet time controls project.task xpath Inherits project.view_task_kanban
view_task_tree2_inherited Add timesheet time controls project.task tree Inherits hr_timesheet.view_task_tree2_inherited
Models touched (5)

New fields (3)
  • date_time Datetime
    copy=False default=fields.Datetime.now string='Start Time'
  • date_time_end Datetime
    compute='_compute_date_time_end' inverse='_inverse_date_time_end' string='End Time'
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('resume', 'Resume'), ('stop', 'Stop')]
Public methods (4)
  • button_end_work(self)
  • button_resume_work(self)
    Create a new record starting now, with a running timer.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (10)
  • analytic_line_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' string='Origin line'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • date_time Datetime
    default=fields.Datetime.now required=True string='Start Time'
  • date_time_end Datetime
    string='End Time'
  • name Char
    required=True string='Description'
  • project_id Many2one → project.project
    comodel_name='project.project' compute='_compute_project_id' domain=_domain_project_id readonly=False store=True string='Project'
  • running_timer_duration Float
    compute='_compute_running_timer_duration' help='When the previous timer is stopped, it will save this duration.' string='Previous timer duration'
  • running_timer_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' default=<expr> help='This timer is running and will be stopped' ondelete='cascade' readonly=True string='Previous timer'
  • running_timer_start Datetime
    readonly=True related='running_timer_id.date_time' string='Previous timer start'
  • task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_task_id' domain="\n [\n ('company_id', '=', company_id),\n ('project_id.allow_timesheets', '=', True),\n ('project_id', '=?', project_id)\n ]\n " index=True readonly=False store=True string='Task'
Public methods (2)
  • action_switch(self)
    Stop old timer, start new one.
  • default_get(self, fields_list)
    @api.model
    Return defaults depending on the context where it is called.

New fields (1)
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('start', 'Start'), ('stop', 'Stop')]
Public methods (2)
  • button_end_work(self)
  • button_start_work(self)
    Create a new record starting now, with a running timer.

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/15.0/project_timesheet_time_control
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYProject
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, CarlosRoca13, Ignacio Rodriguez
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:36
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/timesheet:
    - hr_timesheet_task_domain
    - hr_timesheet_task_stage
OCA/web:
    - web_ir_actions_act_multi
    - web_ir_actions_act_view_reload
odoo/odoo:
    - hr_timesheet
    - 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

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
account_analytic_line_tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
hr_timesheet_line_form account.analytic.line.form.inherit account.analytic.line div Inherits hr_timesheet_task_stage.account_analytic_line_form
hr_timesheet_switch_form hr.timesheet.switch resume form hr.timesheet.switch form New
project_invoice_form Add timesheet time controls project.project div Inherits hr_timesheet.project_invoice_form
view_kanban_account_analytic_line account.analytic.line.kanban account.analytic.line xpath Inherits hr_timesheet.view_kanban_account_analytic_line
view_project_kanban_inherited Add timesheet time controls project.project xpath Inherits hr_timesheet.view_project_kanban_inherited
view_project_tree Add timesheet time controls project.project tree Inherits project.view_project
view_task_form2_inherited Add timesheet time controls project.task div Inherits hr_timesheet.view_task_form2_inherited
view_task_kanban Add timesheet time controls project.task xpath Inherits project.view_task_kanban
view_task_tree2_inherited Add timesheet time controls project.task tree Inherits hr_timesheet.view_task_tree2_inherited
Models touched (5)

New fields (3)
  • date_time Datetime
    copy=False default=fields.Datetime.now string='Start Time'
  • date_time_end Datetime
    compute='_compute_date_time_end' inverse='_inverse_date_time_end' string='End Time'
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('resume', 'Resume'), ('stop', 'Stop')]
Public methods (4)
  • button_end_work(self)
  • button_resume_work(self)
    Create a new record starting now, with a running timer.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (10)
  • analytic_line_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' string='Origin line'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • date_time Datetime
    default=fields.Datetime.now required=True string='Start Time'
  • date_time_end Datetime
    string='End Time'
  • name Char
    required=True string='Description'
  • project_id Many2one → project.project
    comodel_name='project.project' compute='_compute_project_id' domain=_domain_project_id readonly=False store=True string='Project'
  • running_timer_duration Float
    compute='_compute_running_timer_duration' help='When the previous timer is stopped, it will save this duration.' string='Previous timer duration'
  • running_timer_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' default=<expr> help='This timer is running and will be stopped' ondelete='cascade' readonly=True string='Previous timer'
  • running_timer_start Datetime
    readonly=True related='running_timer_id.date_time' string='Previous timer start'
  • task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_task_id' domain="\n [\n ('company_id', '=', company_id),\n ('project_id.allow_timesheets', '=', True),\n ('project_id', '=?', project_id)\n ]\n " index=True readonly=False store=True string='Task'
Public methods (2)
  • action_switch(self)
    Stop old timer, start new one.
  • default_get(self, fields_list)
    @api.model
    Return defaults depending on the context where it is called.

New fields (1)
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('start', 'Start'), ('stop', 'Stop')]
Public methods (2)
  • button_end_work(self)
  • button_start_work(self)
    Create a new record starting now, with a running timer.

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/14.0/project_timesheet_time_control
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYProject
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, Pierre Verkest, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, oca-ci, Alessandro Uffreduzzi, ntsirintanis, aromera, Antoni Romera luis
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:03
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/timesheet:
    - hr_timesheet_task_domain
    - hr_timesheet_task_stage
OCA/web:
    - web_ir_actions_act_multi
    - web_ir_actions_act_view_reload
odoo/odoo:
    - hr_timesheet
    - 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

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
account_analytic_line_tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
hr_timesheet_line_form account.analytic.line.form.inherit account.analytic.line div Inherits hr_timesheet_task_stage.account_analytic_line_form
hr_timesheet_switch_form hr.timesheet.switch resume form hr.timesheet.switch div Inherits hr_timesheet_line_form
project_invoice_form Add timesheet time controls project.project div Inherits hr_timesheet.project_invoice_form
view_kanban_account_analytic_line account.analytic.line.kanban account.analytic.line xpath Inherits hr_timesheet.view_kanban_account_analytic_line
view_project_kanban_inherited Add timesheet time controls project.project xpath Inherits hr_timesheet.view_project_kanban_inherited
view_project_tree Add timesheet time controls project.project tree Inherits project.view_project
view_task_form2_inherited Add timesheet time controls project.task div Inherits hr_timesheet.view_task_form2_inherited
view_task_kanban Add timesheet time controls project.task xpath Inherits project.view_task_kanban
view_task_tree2_inherited Add timesheet time controls project.task tree Inherits hr_timesheet.view_task_tree2_inherited
Models touched (5)

New fields (3)
  • date_time Datetime
    copy=False default=fields.Datetime.now string='Start Time'
  • date_time_end Datetime
    compute='_compute_date_time_end' inverse='_inverse_date_time_end' string='End Time'
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('resume', 'Resume'), ('stop', 'Stop')]
Public methods (4)
  • button_end_work(self)
  • button_resume_work(self)
    Create a new record starting now, with a running timer.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (4)
  • running_timer_duration Float
    compute='_compute_running_timer_duration' help='When the previous timer is stopped, it will save this duration.' string='Previous timer duration'
  • running_timer_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' default=<expr> help='This timer is running and will be stopped' ondelete='cascade' readonly=True string='Previous timer'
  • running_timer_start Datetime
    readonly=True related='running_timer_id.date_time' string='Previous timer start'
  • tag_ids Many2many
    relation='hr_timesheet_switch_line_tag_rel'
Public methods (2)
  • action_switch(self)
    Stop old timer, start new one.
  • default_get(self, fields_list)
    @api.model
    Return defaults depending on the context where it is called.

New fields (1)
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('start', 'Start'), ('stop', 'Stop')]
Public methods (2)
  • button_end_work(self)
  • button_start_work(self)
    Create a new record starting now, with a running timer.

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/13.0/project_timesheet_time_control
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYProject
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSeLBati, Pedro M. Baeza, OCA Transbot, oca-travis, Weblate, OCA-git-bot, oca-ci, David James
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/project:
    - project_stage_closed
OCA/timesheet:
    - hr_timesheet_task_stage
    - hr_timesheet_task_domain
OCA/web:
    - web_ir_actions_act_multi
    - web_ir_actions_act_view_reload
odoo/odoo:
    - hr_timesheet
    - 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

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
account_analytic_line_tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
hr_timesheet_line_form account.analytic.line.form.inherit account.analytic.line div Inherits hr_timesheet_task_stage.account_analytic_line_form
hr_timesheet_switch_form hr.timesheet.switch resume form hr.timesheet.switch div Inherits hr_timesheet_line_form
project_invoice_form Add timesheet time controls project.project div Inherits hr_timesheet.project_invoice_form
view_kanban_account_analytic_line account.analytic.line.kanban account.analytic.line xpath Inherits hr_timesheet.view_kanban_account_analytic_line
view_project_kanban_inherited Add timesheet time controls project.project xpath Inherits hr_timesheet.view_project_kanban_inherited
view_project_tree Add timesheet time controls project.project tree Inherits project.view_project
view_task_form2_inherited Add timesheet time controls project.task div Inherits hr_timesheet.view_task_form2_inherited
view_task_kanban Add timesheet time controls project.task xpath Inherits project.view_task_kanban
view_task_tree2_inherited Add timesheet time controls project.task tree Inherits hr_timesheet.view_task_tree2_inherited
Models touched (5)

New fields (3)
  • date_time Datetime
    copy=False default=fields.Datetime.now string='Start Time'
  • date_time_end Datetime
    compute='_compute_date_time_end' inverse='_inverse_date_time_end' string='End Time'
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('resume', 'Resume'), ('stop', 'Stop')]
Public methods (4)
  • button_end_work(self)
  • button_resume_work(self)
    Create a new record starting now, with a running timer.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (4)
  • running_timer_duration Float
    compute='_compute_running_timer_duration' help='When the previous timer is stopped, it will save this duration.' string='Previous timer duration'
  • running_timer_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' default=<expr> help='This timer is running and will be stopped' ondelete='cascade' readonly=True string='Previous timer'
  • running_timer_start Datetime
    readonly=True related='running_timer_id.date_time' string='Previous timer start'
  • tag_ids Many2many
    relation='hr_timesheet_switch_line_tag_rel'
Public methods (2)
  • action_switch(self)
    Stop old timer, start new one.
  • default_get(self, fields_list)
    @api.model
    Return defaults depending on the context where it is called.

New fields (1)
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('start', 'Start'), ('stop', 'Stop')]
Public methods (2)
  • button_end_work(self)
  • button_start_work(self)
    Create a new record starting now, with a running timer.

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/12.0/project_timesheet_time_control
VERSION
VERSION 2.1.2
CATEGORY
CATEGORYProject
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSeLBati, GitHub, Jairo Llopis, OCA Transbot, oca-travis, Weblate, OCA-git-bot, oca-ci, Marcel Savegnago
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/project:
    - project_stage_closed
OCA/timesheet:
    - hr_timesheet_task_stage
    - hr_timesheet_task_domain
OCA/web:
    - web_ir_actions_act_multi
    - web_ir_actions_act_view_reload
odoo/odoo:
    - hr_timesheet
    - 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

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
account_analytic_line_tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
hr_timesheet_line_form account.analytic.line.form.inherit account.analytic.line div Inherits hr_timesheet_task_stage.account_analytic_line_form
hr_timesheet_switch_form hr.timesheet.switch resume form hr.timesheet.switch div Inherits hr_timesheet_line_form
project_invoice_form Add timesheet time controls project.project div Inherits hr_timesheet.project_invoice_form
view_kanban_account_analytic_line account.analytic.line.kanban account.analytic.line xpath Inherits hr_timesheet.view_kanban_account_analytic_line
view_project_kanban_inherited Add timesheet time controls project.project xpath Inherits hr_timesheet.view_project_kanban_inherited
view_project_tree Add timesheet time controls project.project tree Inherits project.view_project
view_task_form2_inherited Add timesheet time controls project.task div Inherits hr_timesheet.view_task_form2_inherited
view_task_kanban Add timesheet time controls project.task xpath Inherits project.view_task_kanban
view_task_tree2_inherited Add timesheet time controls project.task tree Inherits hr_timesheet.view_task_tree2_inherited
Models touched (5)

New fields (2)
  • date_time Datetime
    copy=False default=fields.Datetime.now
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('resume', 'Resume'), ('stop', 'Stop')]
Public methods (4)
  • button_end_work(self)
    @api.multi
  • button_resume_work(self)
    Create a new record starting now, with a running timer.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
    @api.multi

New fields (3)
  • running_timer_duration Float
    compute='_compute_running_timer_duration' help='When the previous timer is stopped, it will save this duration.' string='Previous timer duration'
  • running_timer_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' default=<expr> help='This timer is running and will be stopped' ondelete='cascade' readonly=True string='Previous timer'
  • running_timer_start Datetime
    readonly=True related='running_timer_id.date_time' string='Previous timer start'
Public methods (2)
  • action_switch(self)
    Stop old timer, start new one.
  • default_get(self, fields_list)
    @api.model
    Return defaults depending on the context where it is called.

New fields (1)
  • show_time_control Selection
    compute='_compute_show_time_control' help='Indicate which time control button to show, if any.' selection=[('start', 'Start'), ('stop', 'Stop')]
Public methods (2)
  • button_end_work(self)
  • button_start_work(self)
    Create a new record starting now, with a running timer.

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)

New fields (0)

No new fields.

Public methods (1)
  • button_start_work(self)
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/11.0/project_timesheet_time_control
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYProject
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, OCA Transbot, oca-travis, Weblate, OCA-git-bot, OCA Git Bot, tbaden
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/project:
    - project_stage_closed
odoo/odoo:
    - hr_timesheet
    - 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

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
account_analytic_line_tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
hr_timesheet_line_form account.analytic.line.form.inherit account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_form
view_kanban_account_analytic_line account.analytic.line.kanban account.analytic.line xpath Inherits hr_timesheet.view_kanban_account_analytic_line
view_task_form2_inherited project.task xpath Inherits hr_timesheet.view_task_form2_inherited
Models touched (1)

New fields (2)
  • closed Boolean
    readonly=True related='task_id.stage_id.closed'
  • date_time Datetime
    default=fields.Datetime.now string='Date'
Public methods (9)
  • button_close_task(self)
    @api.multi
  • button_end_work(self)
    @api.multi
  • button_open_task(self)
    @api.multi
  • create(self, vals)
    @api.model
  • eval_date(self, vals)
  • onchange_project_id(self)
    @api.onchange('project_id')
  • onchange_task_id_project_timesheet_time_control(self)
    @api.onchange('task_id')
  • toggle_closed(self)
    @api.multi
  • write(self, vals)
    @api.multi
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/10.0/project_timesheet_time_control
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYProject
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, OCA Transbot, oca-travis, Weblate, Luis M. Ontalba
WEBSITE
WEBSITEhttp://www.serviciosbaeza.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/project:
    - project_stage_closed
odoo/odoo:
    - hr_timesheet
    - 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

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
account_analytic_line_tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
view_task_form2_inherited project.task xpath Inherits hr_timesheet.view_task_form2_inherited
Models touched (1)

New fields (2)
  • closed Boolean
    readonly=True related='task_id.stage_id.closed'
  • date_time Datetime
    default=fields.Datetime.now string='Date'
Public methods (8)
  • button_close_task(self)
    @api.multi
  • button_end_work(self)
    @api.multi
  • button_open_task(self)
    @api.multi
  • create(self, vals)
    @api.model
  • eval_date(self, vals)
  • onchange_project_id(self)
    @api.onchange('project_id')
  • onchange_task_id(self)
    @api.onchange('task_id')
  • write(self, vals)
    @api.multi
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/9.0/project_timesheet_time_control
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYProject
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, OCA Transbot, oca-travis, Weblate
WEBSITE
WEBSITEhttp://www.serviciosbaeza.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/project:
    - project_stage_closed
odoo/odoo:
    - project_timesheet
    - resource
    - base
    - project
    - base_setup
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - report
    - analytic
    - portal
    - auth_signup
    - web_tip
    - web_planner
    - sale_timesheet
    - sale
    - sales_team
    - account
    - procurement
    - hr_timesheet
    - hr
    - hr_attendance
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
account_analytic_line_search account.analytic.line group Inherits hr_timesheet.hr_timesheet_line_search
account_analytic_line_tree account.analytic.line field Inherits project_timesheet.view_account_analytic_line_tree_inherit_account_id
view_task_form2_inherited project.task xpath Inherits project_timesheet.view_task_form2_inherited
Models touched (1)

New fields (2)
  • closed Boolean
    readonly=True related='task_id.stage_id.closed'
  • date_time Datetime
    default=fields.Datetime.now string='Date'
Public methods (8)
  • button_close_task(self)
    @api.multi
  • button_end_work(self)
    @api.multi
  • button_open_task(self)
    @api.multi
  • create(self, vals)
    @api.model
  • eval_date(self, vals)
  • onchange_account_id(self)
    @api.onchange('account_id')
  • onchange_task_id(self)
    @api.onchange('task_id')
  • write(self, vals)
    @api.multi