Repository
OCA/timesheet · module folder · Try on Runboat
Module version
1.0.3
Category
Project
Folder size
0.95 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/timesheet
Last tracking update
2026-08-07 09:06:28
Authors
Odoo Community Association (OCA), Tecnativa
Maintainers
Odoo Community Association (OCA), Tecnativa
Committers
Christopher Rogos, Weblate, OCA-git-bot, oca-ci, christian-ramos-tecnativa
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
crm_timesheet, hr_timesheet_time_control_begin_end
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 tree Inherits hr_timesheet.hr_timesheet_line_tree
hr_timesheet_line_form account.analytic.line.form.inherit account.analytic.line form 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 form Inherits hr_timesheet.project_invoice_form
view_kanban_account_analytic_line account.analytic.line.kanban account.analytic.line kanban Inherits hr_timesheet.view_kanban_account_analytic_line
view_project_kanban_inherited Add timesheet time controls project.project kanban 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 Inherits hr_timesheet.view_task_form2_inherited
view_task_kanban Add timesheet time controls project.task kanban Inherits project.view_task_kanban
view_task_tree2_inherited Add timesheet time controls project.task list Inherits hr_timesheet.view_task_tree2_inherited
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (5)

New fields (3)
  • date_time Datetime
    copy=False default=<expr> 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=<expr> 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)