Repository
odoo/odoo · module folder
Module version
1.1
Category
Human Resources
Folder size
1.33 MB
License
LGPL-3
Application
No
Auto-installable
No
Website
https://www.odoo.com/page/employees
Last tracking update
2026-08-07 04:59:45
Authors
Maintainers
None
Committers
Xavier Morel, Antony Lesuisse, Olivier Dony, Fabien Pinckaers, Christophe Simonis, Thibault Delavallée, Martin Trigaux, Odoo Translation Bot, Denis Ledoux, Simon Lejeune, Julien Legros, qdp-odoo, Jeremy Kersten, Yannick Tivisse, qsm-odoo, Denis Vermylen (dve), Tanguy Charlier, jem-odoo, Toufik Ben Jaa, Giulio Marcon
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
analytic_secondaxis_timesheet, hr_timesheet_activity_begin_end, hr_timesheet_attendance, hr_timesheet_fulfill, hr_timesheet_holiday, hr_timesheet_improvement, hr_timesheet_reminder, hr_timesheet_sheet_change_period, hr_timesheet_sheet_period, hr_timesheet_sheet_restrict_project, hr_timesheet_sheet_week_start_day, hr_timesheet_task, hr_worked_days_from_timesheet, project_issue_sheet
Description
Record and validate timesheets and attendances easily
=====================================================

This application supplies a new screen enabling you to manage your work encoding (timesheet) by period. Timesheet entries are made by employees each day. At the end of the defined period, employees validate their sheet and the manager must then approve his team's entries. Periods are defined in the company forms and you can set them to run monthly or weekly.

The complete timesheet validation process is:
---------------------------------------------
* Draft sheet
* Confirmation at the end of the period by the employee
* Validation by the project manager

The validation can be configured in the company:
------------------------------------------------
* Period size (Day, Week, Month)
* Maximal difference between timesheet and attendances
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
assets_backend hr_timesheet_sheet assets ir.ui.view qweb Inherits web.assets_backend
hr_department_view_kanban hr.department.kanban.inherit hr.department kanban Inherits hr.hr_department_view_kanban
hr_timesheet_account_filter hr.timesheet.account.filter hr_timesheet_sheet.sheet.account search New
hr_timesheet_account_form hr.timesheet.account.form hr_timesheet_sheet.sheet.account form New
hr_timesheet_account_tree hr.timesheet.account.tree hr_timesheet_sheet.sheet.account tree New
hr_timesheet_line_form account.analytic.line.form account.analytic.line form Inherits hr_timesheet.hr_timesheet_line_form
hr_timesheet_line_search account.analytic.line.search account.analytic.line search Inherits hr_timesheet.hr_timesheet_line_search
hr_timesheet_sheet_employee_extd_form hr.timesheet.sheet.employee.extd_form hr.employee form Inherits hr.view_employee_form
hr_timesheet_sheet_form hr.timesheet.sheet.form hr_timesheet_sheet.sheet form New
hr_timesheet_sheet_tree_simplified hr.timesheet.sheet.tree hr_timesheet_sheet.sheet tree New
view_config_settings_form_inherit_hr_timesheet_sheet project.config.settings.form.inherit.timesheet.sheet project.config.settings form Inherits project.view_config_settings
view_hr_timesheet_sheet_filter hr_timesheet_sheet.sheet.filter hr_timesheet_sheet.sheet search New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (8)

New fields (2)
  • sheet_id Many2one → hr_timesheet_sheet.sheet
    compute='_compute_sheet' store=True string='Sheet' args: 'hr_timesheet_sheet.sheet'
  • sheet_id_computed Many2one → hr_timesheet_sheet.sheet
    compute='_compute_sheet' index=True ondelete='cascade' search='_search_sheet' string='Sheet' args: 'hr_timesheet_sheet.sheet'
Public methods (2)
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (1)
  • timesheet_to_approve_count Integer
    compute='_compute_timesheet_to_approve' string='Timesheet to Approve'
Public methods (0)

No public methods.

New fields (1)
  • timesheet_count Integer
    compute='_compute_timesheet_count' string='Timesheets'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • open_timesheet(self)
    @api.model

New fields (10)
  • account_ids One2many → hr_timesheet_sheet.sheet.account
    readonly=True string='Analytic accounts' args: 'hr_timesheet_sheet.sheet.account', 'sheet_id'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • date_from Date
    default=_default_date_from index=True readonly=True required=True states={'new': [('readonly', False)]} string='Date From'
  • date_to Date
    default=_default_date_to index=True readonly=True required=True states={'new': [('readonly', False)]} string='Date To'
  • department_id Many2one → hr.department
    string='Department' args: 'hr.department'
  • employee_id Many2one → hr.employee
    default=_default_employee required=True string='Employee' args: 'hr.employee'
  • name Char
    states={'confirm': [('readonly', True)], 'done': [('readonly', True)]} string='Note'
  • state Selection
    default='new' help=" * The 'Open' status is used when a user is encoding a new and unconfirmed timesheet. \n* The 'Waiting Approval' status is used to confirm the timesheet by user. \n* The 'Approved' status is used when the users timesheet is accepted by his/her senior." index=True readonly=True required=True string='Status' track_visibility='onchange' args: [('new', 'New'), ('draft', 'Open'), ('confirm', 'Waiting Approval'), ('done', 'Approved')]
  • timesheet_ids One2many → account.analytic.line
    readonly=True states={'draft': [('readonly', False)], 'new': [('readonly', False)]} string='Timesheet lines' args: 'account.analytic.line', 'sheet_id'
  • user_id Many2one → res.users
    compute_sudo=True readonly=True related='employee_id.user_id' store=True string='User' args: 'res.users'
Public methods (9)
  • action_timesheet_confirm(self)
    @api.multi
  • action_timesheet_done(self)
    @api.multi
  • action_timesheet_draft(self)
    @api.multi
  • copy(self, *args, **argv)
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi
  • onchange_employee_id(self)
    @api.onchange('employee_id')
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (3)
  • name Many2one → account.analytic.account
    readonly=True string='Project / Analytic Account' args: 'account.analytic.account'
  • sheet_id Many2one → hr_timesheet_sheet.sheet
    readonly=True string='Sheet' args: 'hr_timesheet_sheet.sheet'
  • total Float
    digits=(16, 2) readonly=True args: 'Total Time'
Public methods (1)
  • init(self)
    @api.model_cr

New fields (2)
  • module_project_timesheet_synchro Boolean
    string='Timesheet app for Chrome/Android/iOS'
  • timesheet_range Selection
    related='company_id.timesheet_range' string='Timesheet range *'
Public methods (0)

No public methods.

New fields (1)
  • timesheet_range Selection
    default='week' help='Periodicity on which you validate your timesheets.' string='Timesheet range' args: [('week', 'Week'), ('month', 'Month')]
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…