| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/timesheet |
| GIT | |
| GIT | https://github.com/OCA/timesheet.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/timesheet/tree/18.0/hr_timesheet_sheet |
| VERSION | |
| VERSION | 1.3.2 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| COMMITTERS | |
| COMMITTERS | Miquel Raïch, Víctor Martínez, JordiMForgeFlow, Weblate, OCA-git-bot, oca-ci, Saran440, Borruso, Ricard Calvo, yostashiro |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:17 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_widget_x2many_2d_matrix odoo/odoo: - hr_timesheet - hr - base_setup - base - web - digest - bus - web_tour - html_editor - portal - web_editor - http_routing - auth_signup - resource - phone_validation - resource_mail - hr_hourly_cost - analytic - uom - project - rating - sale_timesheet - sale_project - sale_management - sale - sales_team - account_payment - account - onboarding - product - payment - utm - sale_service - project_account |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module 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 submit their validated sheet and the reviewer must then approve submitted entries. Periods are defined in the company forms and you can set them to run monthly, weekly or daily. By default, policy is configured to have HR Officers as reviewers. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | xpath | Inherits hr.hr_department_view_kanban |
hr_timesheet_line_form |
account.analytic.line.form | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_form |
hr_timesheet_line_search |
account.analytic.line.search | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_search |
hr_timesheet_sheet_employee_extd_form |
hr.timesheet.sheet.employee.extd_form | hr.employee | div | Inherits hr.view_employee_form |
hr_timesheet_sheet_form |
hr_timesheet.sheet.form | hr_timesheet.sheet | form | New |
hr_timesheet_sheet_form_my |
hr.timesheet.sheet.form.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_form |
hr_timesheet_sheet_tree |
hr.timesheet.sheet.list | hr_timesheet.sheet | list | New |
hr_timesheet_sheet_tree_my |
hr.timesheet.sheet.list.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_tree |
res_config_settings_view_form |
res.config.settings.view.form.inherit.hr.timesheet | res.config.settings | xpath | Inherits hr_timesheet.res_config_settings_view_form |
view_hr_timesheet_sheet_filter |
hr_timesheet.sheet.filter | hr_timesheet.sheet | search | New |
view_hr_timesheet_sheet_kanban |
hr_timesheet.sheet.kanban | hr_timesheet.sheet | kanban | New |
No new fields.
Public methods (0)No public methods.
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
string='Sheet'
sheet_state
Selection
related='sheet_id.state'
string='Sheet State'
create(self, values)
merge_timesheets(self)
unlink(self)
write(self, values)
timesheet_sheet_to_approve_count
Integer
compute='_compute_timesheet_to_approve'
string='Timesheet Sheets to Approve'
No public methods.
timesheet_sheet_count
Integer
compute='_compute_timesheet_sheet_count'
string='Timesheet Sheets Count'
timesheet_sheet_ids
One2many → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
inverse_name='employee_id'
string='Timesheet Sheets'
No public methods.
add_line_project_id
Many2one → project.project
comodel_name='project.project'
domain="[('company_id', 'in', [company_id, False]), ('allow_timesheets', '=', True)]"
help='If selected, the associated project is added to the timesheet sheet when clicked the button.'
string='Select Project'
add_line_task_id
Many2one → project.task
comodel_name='project.task'
domain="[('id', 'in', available_task_ids)]"
help='If selected, the associated task is added to the timesheet sheet when clicked the button.'
string='Select Task'
available_task_ids
Many2many → project.task
comodel_name='project.task'
compute='_compute_available_task_ids'
string='Available Tasks'
can_review
Boolean
compute='_compute_can_review'
search='_search_can_review'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
required=True
string='Company'
complete_name
Char
compute='_compute_complete_name'
date_end
Date
default=<expr>
index=True
required=True
string='Date To'
date_start
Date
default=<expr>
index=True
required=True
string='Date From'
department_id
Many2one → hr.department
comodel_name='hr.department'
default=<expr>
string='Department'
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
default=<expr>
required=True
string='Employee'
line_ids
One2many → hr_timesheet.sheet.line
comodel_name='hr_timesheet.sheet.line'
compute='_compute_line_ids'
string='Timesheet Sheet Lines'
name
Char
compute='_compute_name'
new_line_ids
One2many → hr_timesheet.sheet.new.analytic.line
comodel_name='hr_timesheet.sheet.new.analytic.line'
inverse_name='sheet_id'
string='Temporary Timesheets'
review_policy
Selection
default=<expr>
required=True
selection=<expr>
reviewer_id
Many2one → hr.employee
comodel_name='hr.employee'
string='Reviewer'
tracking=True
state
Selection
default='new'
index=True
required=True
string='Status'
tracking=True
args: [('new', 'New'), ('draft', 'Open'), ('confirm', 'Waiting Review'), ('done', 'Approved')]
timesheet_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
inverse_name='sheet_id'
string='Timesheets'
total_time
Float
compute='_compute_total_time'
store=True
user_id
Many2one → res.users
comodel_name='res.users'
related='employee_id.user_id'
store=True
string='User'
action_timesheet_confirm(self)
action_timesheet_done(self)
action_timesheet_draft(self)
action_timesheet_refuse(self)
add_line(self)
add_new_line(self, line)
button_add_line(self)
clean_timesheets(self, timesheets)
copy(self, default=None)
create(self, vals_list)
delete_empty_lines(self, delete_empty_rows=False)
link_timesheets_to_sheet(self, timesheets)
onchange(self, values, field_name, field_onchange)
reset_add_line(self)
unlink(self)
write(self, vals)
new_line_id
Integer
default=0
value_x
Char
string='Date Name'
value_y
Char
string='Project Name'
onchange_unit_amount(self)
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
date
Date
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
string='Employee'
project_id
Many2one → project.project
comodel_name='project.project'
string='Project'
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
ondelete='cascade'
task_id
Many2one → project.task
comodel_name='project.task'
string='Task'
unit_amount
Float
default=0.0
string='Quantity'
get_unique_id(self)
No new fields.
Public methods (0)No public methods.
sheet_range
Selection
default='WEEKLY'
help='The range of your Timesheet Sheet.'
string='Timesheet Sheet Range'
args: [('MONTHLY', 'Month'), ('WEEKLY', 'Week'), ('DAILY', 'Day')]
timesheet_sheet_review_policy
Selection
default='hr'
help='How Timesheet Sheets review is performed.'
selection=[('hr', 'By HR Officers'), ('hr_manager', 'By HR Managers'), ('timesheet_manager', 'By Timesheets Managers')]
timesheet_week_start
Selection
default='0'
selection=_WEEKDAYS
string='Week start day'
No public methods.
sheet_range
Selection
help='The range of your Timesheet Sheet.'
readonly=False
related='company_id.sheet_range'
string='Timesheet Sheet Range'
timesheet_sheet_review_policy
Selection
readonly=False
related='company_id.timesheet_sheet_review_policy'
timesheet_week_start
Selection
help='Starting day for Timesheet Sheets.'
readonly=False
related='company_id.timesheet_week_start'
string='Week Start Day'
No public methods.
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
readonly=True
string='Sheet'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/timesheet |
| GIT | |
| GIT | https://github.com/OCA/timesheet.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/timesheet/tree/17.0/hr_timesheet_sheet |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| COMMITTERS | |
| COMMITTERS | Stéphane Bidoul, Miquel Raïch, Weblate, OCA-git-bot, Manuel Fombuena, oca-ci, hda, Vijay |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:09 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_widget_x2many_2d_matrix odoo/odoo: - hr_timesheet - hr - base_setup - base - web - phone_validation - bus - web_tour - resource - hr_hourly_cost - analytic - uom - project - portal - web_editor - http_routing - auth_signup - rating - digest - sale_timesheet - sale_project - sale_management - sale - sales_team - account_payment - account - onboarding - product - payment - utm - sale_service - project_account |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module 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 submit their validated sheet and the reviewer must then approve submitted entries. Periods are defined in the company forms and you can set them to run monthly, weekly or daily. By default, policy is configured to have HR Officers as reviewers. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | xpath | Inherits hr.hr_department_view_kanban |
hr_timesheet_line_form |
account.analytic.line.form | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_form |
hr_timesheet_line_search |
account.analytic.line.search | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_search |
hr_timesheet_sheet_employee_extd_form |
hr.timesheet.sheet.employee.extd_form | hr.employee | div | Inherits hr.view_employee_form |
hr_timesheet_sheet_form |
hr_timesheet.sheet.form | hr_timesheet.sheet | form | New |
hr_timesheet_sheet_form_my |
hr.timesheet.sheet.form.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_form |
hr_timesheet_sheet_tree |
hr.timesheet.sheet.tree | hr_timesheet.sheet | tree | New |
hr_timesheet_sheet_tree_my |
hr.timesheet.sheet.tree.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_tree |
res_config_settings_view_form |
res.config.settings.view.form.inherit.hr.timesheet | res.config.settings | xpath | Inherits hr_timesheet.res_config_settings_view_form |
view_hr_timesheet_sheet_filter |
hr_timesheet.sheet.filter | hr_timesheet.sheet | search | New |
view_hr_timesheet_sheet_kanban |
hr_timesheet.sheet.kanban | hr_timesheet.sheet | kanban | New |
No new fields.
Public methods (0)No public methods.
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
string='Sheet'
sheet_state
Selection
related='sheet_id.state'
string='Sheet State'
create(self, values)
merge_timesheets(self)
unlink(self)
write(self, values)
timesheet_sheet_to_approve_count
Integer
compute='_compute_timesheet_to_approve'
string='Timesheet Sheets to Approve'
No public methods.
timesheet_sheet_count
Integer
compute='_compute_timesheet_sheet_count'
string='Timesheet Sheets Count'
timesheet_sheet_ids
One2many → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
inverse_name='employee_id'
string='Timesheet Sheets'
No public methods.
add_line_project_id
Many2one → project.project
comodel_name='project.project'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id), ('allow_timesheets', '=', True)]"
help='If selected, the associated project is added to the timesheet sheet when clicked the button.'
string='Select Project'
add_line_task_id
Many2one → project.task
comodel_name='project.task'
domain="[('id', 'in', available_task_ids)]"
help='If selected, the associated task is added to the timesheet sheet when clicked the button.'
string='Select Task'
available_task_ids
Many2many → project.task
comodel_name='project.task'
compute='_compute_available_task_ids'
string='Available Tasks'
can_review
Boolean
compute='_compute_can_review'
search='_search_can_review'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
required=True
string='Company'
complete_name
Char
compute='_compute_complete_name'
date_end
Date
default=<expr>
index=True
required=True
string='Date To'
date_start
Date
default=<expr>
index=True
required=True
string='Date From'
department_id
Many2one → hr.department
comodel_name='hr.department'
default=<expr>
string='Department'
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
default=<expr>
required=True
string='Employee'
line_ids
One2many → hr_timesheet.sheet.line
comodel_name='hr_timesheet.sheet.line'
compute='_compute_line_ids'
string='Timesheet Sheet Lines'
name
Char
compute='_compute_name'
new_line_ids
One2many → hr_timesheet.sheet.new.analytic.line
comodel_name='hr_timesheet.sheet.new.analytic.line'
inverse_name='sheet_id'
string='Temporary Timesheets'
review_policy
Selection
default=<expr>
required=True
selection=<expr>
reviewer_id
Many2one → hr.employee
comodel_name='hr.employee'
string='Reviewer'
tracking=True
state
Selection
default='new'
index=True
required=True
string='Status'
tracking=True
args: [('new', 'New'), ('draft', 'Open'), ('confirm', 'Waiting Review'), ('done', 'Approved')]
timesheet_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
inverse_name='sheet_id'
string='Timesheets'
total_time
Float
compute='_compute_total_time'
store=True
user_id
Many2one → res.users
comodel_name='res.users'
related='employee_id.user_id'
store=True
string='User'
action_timesheet_confirm(self)
action_timesheet_done(self)
action_timesheet_draft(self)
action_timesheet_refuse(self)
add_line(self)
add_new_line(self, line)
button_add_line(self)
clean_timesheets(self, timesheets)
copy(self, default=None)
create(self, vals_list)
delete_empty_lines(self, delete_empty_rows=False)
link_timesheets_to_sheet(self, timesheets)
onchange(self, values, field_name, field_onchange)
reset_add_line(self)
unlink(self)
write(self, vals)
new_line_id
Integer
default=0
value_x
Char
string='Date Name'
value_y
Char
string='Project Name'
onchange_unit_amount(self)
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
date
Date
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
string='Employee'
project_id
Many2one → project.project
comodel_name='project.project'
string='Project'
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
ondelete='cascade'
task_id
Many2one → project.task
comodel_name='project.task'
string='Task'
unit_amount
Float
default=0.0
string='Quantity'
get_unique_id(self)
No new fields.
Public methods (0)No public methods.
sheet_range
Selection
default='WEEKLY'
help='The range of your Timesheet Sheet.'
string='Timesheet Sheet Range'
args: [('MONTHLY', 'Month'), ('WEEKLY', 'Week'), ('DAILY', 'Day')]
timesheet_sheet_review_policy
Selection
default='hr'
help='How Timesheet Sheets review is performed.'
selection=[('hr', 'By HR Officers'), ('hr_manager', 'By HR Managers'), ('timesheet_manager', 'By Timesheets Managers')]
timesheet_week_start
Selection
default='0'
selection=_WEEKDAYS
string='Week start day'
No public methods.
sheet_range
Selection
help='The range of your Timesheet Sheet.'
readonly=False
related='company_id.sheet_range'
string='Timesheet Sheet Range'
timesheet_sheet_review_policy
Selection
readonly=False
related='company_id.timesheet_sheet_review_policy'
timesheet_week_start
Selection
help='Starting day for Timesheet Sheets.'
readonly=False
related='company_id.timesheet_week_start'
string='Week Start Day'
No public methods.
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
readonly=True
string='Sheet'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/timesheet |
| GIT | |
| GIT | https://github.com/OCA/timesheet.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/timesheet/tree/16.0/hr_timesheet_sheet |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| COMMITTERS | |
| COMMITTERS | Holger Brunn, Miquel Raïch, David Beal, Weblate, OCA-git-bot, tarteo, oca-ci, Simon Maillard, LauraCForgeFlow, PicchiSeba |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:56 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_widget_x2many_2d_matrix odoo/odoo: - hr_timesheet - hr - base_setup - base - web - bus - web_tour - resource - hr_hourly_cost - analytic - uom - project - portal - web_editor - http_routing - auth_signup - rating - digest - sale_timesheet - sale_project - sale_management - sale - sales_team - account_payment - account - product - payment - utm |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | xpath | Inherits hr.hr_department_view_kanban |
hr_timesheet_line_form |
account.analytic.line.form | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_form |
hr_timesheet_line_search |
account.analytic.line.search | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_search |
hr_timesheet_sheet_employee_extd_form |
hr.timesheet.sheet.employee.extd_form | hr.employee | div | Inherits hr.view_employee_form |
hr_timesheet_sheet_form |
hr_timesheet.sheet.form | hr_timesheet.sheet | form | New |
hr_timesheet_sheet_form_my |
hr.timesheet.sheet.form.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_form |
hr_timesheet_sheet_tree |
hr.timesheet.sheet.tree | hr_timesheet.sheet | tree | New |
hr_timesheet_sheet_tree_my |
hr.timesheet.sheet.tree.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_tree |
res_config_settings_view_form |
res.config.settings.view.form.inherit.hr.timesheet | res.config.settings | xpath | Inherits hr_timesheet.res_config_settings_view_form |
view_hr_timesheet_sheet_filter |
hr_timesheet.sheet.filter | hr_timesheet.sheet | search | New |
view_hr_timesheet_sheet_kanban |
hr_timesheet.sheet.kanban | hr_timesheet.sheet | kanban | New |
No new fields.
Public methods (0)No public methods.
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
copy=False
string='Sheet'
sheet_state
Selection
related='sheet_id.state'
string='Sheet State'
create(self, values)
merge_timesheets(self)
unlink(self)
write(self, values)
timesheet_sheet_to_approve_count
Integer
compute='_compute_timesheet_to_approve'
string='Timesheet Sheets to Approve'
No public methods.
timesheet_sheet_count
Integer
compute='_compute_timesheet_sheet_count'
string='Timesheet Sheets Count'
timesheet_sheet_ids
One2many → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
inverse_name='employee_id'
string='Timesheet Sheets'
No public methods.
add_line_project_id
Many2one → project.project
comodel_name='project.project'
domain="[('company_id', '=', company_id), ('allow_timesheets', '=', True)]"
help='If selected, the associated project is added to the timesheet sheet when clicked the button.'
string='Select Project'
add_line_task_id
Many2one → project.task
comodel_name='project.task'
domain="[('id', 'in', available_task_ids)]"
help='If selected, the associated task is added to the timesheet sheet when clicked the button.'
string='Select Task'
available_task_ids
Many2many → project.task
comodel_name='project.task'
compute='_compute_available_task_ids'
string='Available Tasks'
can_review
Boolean
compute='_compute_can_review'
search='_search_can_review'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
readonly=True
required=True
string='Company'
complete_name
Char
compute='_compute_complete_name'
date_end
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date To'
date_start
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date From'
department_id
Many2one → hr.department
comodel_name='hr.department'
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
string='Department'
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
default=<expr>
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Employee'
line_ids
One2many → hr_timesheet.sheet.line
comodel_name='hr_timesheet.sheet.line'
compute='_compute_line_ids'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheet Sheet Lines'
name
Char
compute='_compute_name'
new_line_ids
One2many → hr_timesheet.sheet.new.analytic.line
comodel_name='hr_timesheet.sheet.new.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Temporary Timesheets'
review_policy
Selection
default=<expr>
readonly=True
required=True
selection=<expr>
reviewer_id
Many2one → hr.employee
comodel_name='hr.employee'
readonly=True
string='Reviewer'
tracking=True
state
Selection
default='new'
index=True
readonly=True
required=True
string='Status'
tracking=True
args: [('new', 'New'), ('draft', 'Open'), ('confirm', 'Waiting Review'), ('done', 'Approved')]
timesheet_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheets'
total_time
Float
compute='_compute_total_time'
store=True
user_id
Many2one → res.users
comodel_name='res.users'
readonly=True
related='employee_id.user_id'
store=True
string='User'
action_timesheet_confirm(self)
action_timesheet_done(self)
action_timesheet_draft(self)
action_timesheet_refuse(self)
add_line(self)
add_new_line(self, line)
button_add_line(self)
clean_timesheets(self, timesheets)
copy(self, default=None)
create(self, vals_list)
delete_empty_lines(self, delete_empty_rows=False)
link_timesheets_to_sheet(self, timesheets)
onchange(self, values, field_name, field_onchange)
reset_add_line(self)
unlink(self)
write(self, vals)
new_line_id
Integer
default=0
value_x
Char
string='Date Name'
value_y
Char
string='Project Name'
onchange_unit_amount(self)
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
date
Date
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
string='Employee'
project_id
Many2one → project.project
comodel_name='project.project'
string='Project'
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
ondelete='cascade'
task_id
Many2one → project.task
comodel_name='project.task'
string='Task'
unit_amount
Float
default=0.0
string='Quantity'
get_unique_id(self)
No new fields.
Public methods (0)No public methods.
sheet_range
Selection
default='WEEKLY'
help='The range of your Timesheet Sheet.'
string='Timesheet Sheet Range'
args: [('MONTHLY', 'Month'), ('WEEKLY', 'Week'), ('DAILY', 'Day')]
timesheet_sheet_review_policy
Selection
default='hr'
help='How Timesheet Sheets review is performed.'
selection=[('hr', 'By HR Officers'), ('hr_manager', 'By HR Managers'), ('timesheet_manager', 'By Timesheets Managers')]
timesheet_week_start
Selection
default='0'
selection=_WEEKDAYS
string='Week start day'
No public methods.
sheet_range
Selection
help='The range of your Timesheet Sheet.'
readonly=False
related='company_id.sheet_range'
string='Timesheet Sheet Range'
timesheet_sheet_review_policy
Selection
readonly=False
related='company_id.timesheet_sheet_review_policy'
timesheet_week_start
Selection
help='Starting day for Timesheet Sheets.'
readonly=False
related='company_id.timesheet_week_start'
string='Week Start Day'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/timesheet |
| GIT | |
| GIT | https://github.com/OCA/timesheet.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/timesheet/tree/15.0/hr_timesheet_sheet |
| VERSION | |
| VERSION | 1.4.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| COMMITTERS | |
| COMMITTERS | root, OCA Transbot, Miquel Raïch, AaronHForgeFlow, Weblate, OCA-git-bot, Carmen Bianca BAKKER, oca-ci, Christopher Rogos, JasminSForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:41 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_widget_x2many_2d_matrix odoo/odoo: - hr_timesheet - hr - base_setup - base - web - bus - web_tour - resource - analytic - uom - project - portal - web_editor - http_routing - auth_signup - rating - digest - sale_timesheet - sale_project - sale_management - sale - sales_team - payment - account - product - utm |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | xpath | Inherits hr.hr_department_view_kanban |
hr_timesheet_line_form |
account.analytic.line.form | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_form |
hr_timesheet_line_search |
account.analytic.line.search | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_search |
hr_timesheet_sheet_employee_extd_form |
hr.timesheet.sheet.employee.extd_form | hr.employee | div | Inherits hr.view_employee_form |
hr_timesheet_sheet_form |
hr_timesheet.sheet.form | hr_timesheet.sheet | form | New |
hr_timesheet_sheet_form_my |
hr.timesheet.sheet.form.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_form |
hr_timesheet_sheet_tree |
hr.timesheet.sheet.tree | hr_timesheet.sheet | tree | New |
hr_timesheet_sheet_tree_my |
hr.timesheet.sheet.tree.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_tree |
res_config_settings_view_form |
res.config.settings.view.form.inherit.hr.timesheet | res.config.settings | xpath | Inherits hr_timesheet.res_config_settings_view_form |
view_hr_timesheet_sheet_filter |
hr_timesheet.sheet.filter | hr_timesheet.sheet | search | New |
view_hr_timesheet_sheet_kanban |
hr_timesheet.sheet.kanban | hr_timesheet.sheet | kanban | New |
No new fields.
Public methods (0)No public methods.
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
string='Sheet'
sheet_state
Selection
related='sheet_id.state'
string='Sheet State'
create(self, values)
merge_timesheets(self)
unlink(self)
write(self, values)
timesheet_sheet_to_approve_count
Integer
compute='_compute_timesheet_to_approve'
string='Timesheet Sheets to Approve'
No public methods.
timesheet_sheet_count
Integer
compute='_compute_timesheet_sheet_count'
string='Timesheet Sheets Count'
timesheet_sheet_ids
One2many → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
inverse_name='employee_id'
string='Timesheet Sheets'
No public methods.
No new fields.
Public methods (1)open_timesheet(self)
add_line_project_id
Many2one → project.project
comodel_name='project.project'
help='If selected, the associated project is added to the timesheet sheet when clicked the button.'
string='Select Project'
add_line_task_id
Many2one → project.task
comodel_name='project.task'
help='If selected, the associated task is added to the timesheet sheet when clicked the button.'
string='Select Task'
can_review
Boolean
compute='_compute_can_review'
search='_search_can_review'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
readonly=True
required=True
string='Company'
complete_name
Char
compute='_compute_complete_name'
date_end
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date To'
date_start
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date From'
department_id
Many2one → hr.department
comodel_name='hr.department'
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
string='Department'
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
default=<expr>
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Employee'
line_ids
One2many → hr_timesheet.sheet.line
comodel_name='hr_timesheet.sheet.line'
compute='_compute_line_ids'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheet Sheet Lines'
name
Char
compute='_compute_name'
new_line_ids
One2many → hr_timesheet.sheet.new.analytic.line
comodel_name='hr_timesheet.sheet.new.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Temporary Timesheets'
review_policy
Selection
default=<expr>
readonly=True
required=True
selection=<expr>
reviewer_id
Many2one → hr.employee
comodel_name='hr.employee'
readonly=True
string='Reviewer'
tracking=True
state
Selection
default='new'
index=True
readonly=True
required=True
string='Status'
tracking=True
args: [('new', 'New'), ('draft', 'Open'), ('confirm', 'Waiting Review'), ('done', 'Approved')]
timesheet_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheets'
total_time
Float
compute='_compute_total_time'
store=True
user_id
Many2one → res.users
comodel_name='res.users'
readonly=True
related='employee_id.user_id'
store=True
string='User'
action_timesheet_confirm(self)
action_timesheet_done(self)
action_timesheet_draft(self)
action_timesheet_refuse(self)
add_line(self)
add_new_line(self, line)
button_add_line(self)
clean_timesheets(self, timesheets)
copy(self, default=None)
create(self, vals)
delete_empty_lines(self, delete_empty_rows=False)
link_timesheets_to_sheet(self, timesheets)
onchange_add_project_id(self)
reset_add_line(self)
unlink(self)
write(self, vals)
new_line_id
Integer
default=0
value_x
Char
string='Date Name'
value_y
Char
string='Project Name'
onchange_unit_amount(self)
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
date
Date
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
string='Employee'
project_id
Many2one → project.project
comodel_name='project.project'
string='Project'
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
ondelete='cascade'
task_id
Many2one → project.task
comodel_name='project.task'
string='Task'
unit_amount
Float
default=0.0
string='Quantity'
get_unique_id(self)
No new fields.
Public methods (0)No public methods.
sheet_range
Selection
default='WEEKLY'
help='The range of your Timesheet Sheet.'
string='Timesheet Sheet Range'
args: [('MONTHLY', 'Month'), ('WEEKLY', 'Week'), ('DAILY', 'Day')]
timesheet_sheet_review_policy
Selection
default='hr'
help='How Timesheet Sheets review is performed.'
selection=[('hr', 'By HR Officers'), ('hr_manager', 'By HR Managers'), ('timesheet_manager', 'By Timesheets Managers')]
timesheet_week_start
Selection
default='0'
selection=_WEEKDAYS
string='Week start day'
No public methods.
sheet_range
Selection
help='The range of your Timesheet Sheet.'
readonly=False
related='company_id.sheet_range'
string='Timesheet Sheet Range'
timesheet_sheet_review_policy
Selection
readonly=False
related='company_id.timesheet_sheet_review_policy'
timesheet_week_start
Selection
help='Starting day for Timesheet Sheets.'
readonly=False
related='company_id.timesheet_week_start'
string='Week Start Day'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/timesheet |
| GIT | |
| GIT | https://github.com/OCA/timesheet.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/timesheet/tree/14.0/hr_timesheet_sheet |
| VERSION | |
| VERSION | 1.4.3 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| COMMITTERS | |
| COMMITTERS | Holger Brunn, GitHub, Alexey Pelykh, Yann Papouin, OCA Transbot, Miquel Raïch, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, Carmen Bianca BAKKER, Manuel Fombuena, oca-ci, bosd, dessanhemrayev, oca-git-bot, Volodiay616, schhatbar, schhatbar-initos, Thomas Arbib |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:09 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_widget_x2many_2d_matrix odoo/odoo: - hr_timesheet - hr - base_setup - base - web - bus - web_tour - resource - analytic - uom - project - portal - web_editor - http_routing - auth_signup - rating - digest - sale_timesheet - sale_project - sale_management - sale - sales_team - payment - account - product - utm |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
assets_backend | ir.ui.view | qweb | Inherits web.assets_backend |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | xpath | Inherits hr.hr_department_view_kanban |
hr_timesheet_line_form |
account.analytic.line.form | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_form |
hr_timesheet_line_search |
account.analytic.line.search | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_search |
hr_timesheet_sheet_employee_extd_form |
hr.timesheet.sheet.employee.extd_form | hr.employee | div | Inherits hr.view_employee_form |
hr_timesheet_sheet_form |
hr_timesheet.sheet.form | hr_timesheet.sheet | form | New |
hr_timesheet_sheet_form_my |
hr.timesheet.sheet.form.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_form |
hr_timesheet_sheet_tree |
hr.timesheet.sheet.tree | hr_timesheet.sheet | tree | New |
hr_timesheet_sheet_tree_my |
hr.timesheet.sheet.tree.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_tree |
res_config_settings_view_form |
res.config.settings.view.form.inherit.hr.timesheet | res.config.settings | xpath | Inherits hr_timesheet.res_config_settings_view_form |
view_hr_timesheet_sheet_filter |
hr_timesheet.sheet.filter | hr_timesheet.sheet | search | New |
view_hr_timesheet_sheet_kanban |
hr_timesheet.sheet.kanban | hr_timesheet.sheet | kanban | New |
No new fields.
Public methods (0)No public methods.
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
string='Sheet'
sheet_state
Selection
related='sheet_id.state'
string='Sheet State'
create(self, values)
merge_timesheets(self)
unlink(self)
write(self, values)
timesheet_sheet_to_approve_count
Integer
compute='_compute_timesheet_to_approve'
string='Timesheet Sheets to Approve'
No public methods.
timesheet_sheet_count
Integer
compute='_compute_timesheet_sheet_count'
string='Timesheet Sheets Count'
timesheet_sheet_ids
One2many → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
inverse_name='employee_id'
string='Timesheet Sheets'
No public methods.
add_line_project_id
Many2one → project.project
comodel_name='project.project'
help='If selected, the associated project is added to the timesheet sheet when clicked the button.'
string='Select Project'
add_line_task_id
Many2one → project.task
comodel_name='project.task'
help='If selected, the associated task is added to the timesheet sheet when clicked the button.'
string='Select Task'
can_review
Boolean
compute='_compute_can_review'
search='_search_can_review'
string='Can Review'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
readonly=True
required=True
string='Company'
complete_name
Char
compute='_compute_complete_name'
string='Complete Name'
date_end
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date To'
date_start
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date From'
department_id
Many2one → hr.department
comodel_name='hr.department'
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
string='Department'
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
default=<expr>
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Employee'
line_ids
One2many → hr_timesheet.sheet.line
comodel_name='hr_timesheet.sheet.line'
compute='_compute_line_ids'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheet Sheet Lines'
name
Char
compute='_compute_name'
new_line_ids
One2many → hr_timesheet.sheet.new.analytic.line
comodel_name='hr_timesheet.sheet.new.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Temporary Timesheets'
review_policy
Selection
default=<expr>
readonly=True
required=True
selection=<expr>
reviewer_id
Many2one → hr.employee
comodel_name='hr.employee'
readonly=True
string='Reviewer'
tracking=True
state
Selection
default='new'
index=True
readonly=True
required=True
string='Status'
tracking=True
args: [('new', 'New'), ('draft', 'Open'), ('confirm', 'Waiting Review'), ('done', 'Approved')]
timesheet_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheets'
total_time
Float
compute='_compute_total_time'
store=True
user_id
Many2one → res.users
comodel_name='res.users'
readonly=True
related='employee_id.user_id'
store=True
string='User'
action_timesheet_confirm(self)
action_timesheet_done(self)
action_timesheet_draft(self)
action_timesheet_refuse(self)
add_line(self)
add_new_line(self, line)
button_add_line(self)
clean_timesheets(self, timesheets)
copy(self, default=None)
create(self, vals)
delete_empty_lines(self, delete_empty_rows=False)
link_timesheets_to_sheet(self, timesheets)
onchange(self, values, field_name, field_onchange)
onchange_add_project_id(self)
reset_add_line(self)
unlink(self)
write(self, vals)
new_line_id
Integer
default=0
value_x
Char
string='Date Name'
value_y
Char
string='Project Name'
onchange_unit_amount(self)
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
date
Date
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
string='Employee'
project_id
Many2one → project.project
comodel_name='project.project'
string='Project'
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
ondelete='cascade'
task_id
Many2one → project.task
comodel_name='project.task'
string='Task'
unit_amount
Float
default=0.0
string='Quantity'
get_unique_id(self)
No new fields.
Public methods (0)No public methods.
hr_timesheet_reviewer_no_email
Boolean
default=False
string="Don't send email to Reviewer"
sheet_range
Selection
default='WEEKLY'
help='The range of your Timesheet Sheet.'
string='Timesheet Sheet Range'
args: [('MONTHLY', 'Month'), ('WEEKLY', 'Week'), ('DAILY', 'Day')]
timesheet_sheet_review_policy
Selection
default='hr'
help='How Timesheet Sheets review is performed.'
selection=[('hr', 'By HR Officers'), ('hr_manager', 'By HR Managers'), ('timesheet_manager', 'By Timesheets Managers')]
string='Timesheet Sheet Review Policy'
timesheet_week_start
Selection
default='0'
selection=_WEEKDAYS
string='Week start day'
No public methods.
hr_timesheet_reviewer_no_email
Boolean
readonly=False
related='company_id.hr_timesheet_reviewer_no_email'
sheet_range
Selection
help='The range of your Timesheet Sheet.'
readonly=False
related='company_id.sheet_range'
string='Timesheet Sheet Range'
timesheet_sheet_review_policy
Selection
readonly=False
related='company_id.timesheet_sheet_review_policy'
timesheet_week_start
Selection
help='Starting day for Timesheet Sheets.'
readonly=False
related='company_id.timesheet_week_start'
string='Week Start Day'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/timesheet |
| GIT | |
| GIT | https://github.com/OCA/timesheet.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/timesheet/tree/13.0/hr_timesheet_sheet |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, mreficent, Alexey Pelykh, Yann Papouin, OCA Transbot, Adrien Peiffer, oca-travis, Weblate, OCA-git-bot, Pablo Fuentes, Carmen Bianca BAKKER, Manuel Fombuena, Iryna Vushnevska, oca-ci, Vishal Thacker |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:19 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_widget_x2many_2d_matrix odoo/odoo: - hr_timesheet - hr - base_setup - base - web - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
assets_backend | ir.ui.view | qweb | Inherits web.assets_backend |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | xpath | Inherits hr.hr_department_view_kanban |
hr_timesheet_line_form |
account.analytic.line.form | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_form |
hr_timesheet_line_search |
account.analytic.line.search | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_search |
hr_timesheet_sheet_employee_extd_form |
hr.timesheet.sheet.employee.extd_form | hr.employee | div | Inherits hr.view_employee_form |
hr_timesheet_sheet_form |
hr_timesheet.sheet.form | hr_timesheet.sheet | form | New |
hr_timesheet_sheet_form_my |
hr.timesheet.sheet.form.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_form |
hr_timesheet_sheet_tree |
hr.timesheet.sheet.tree | hr_timesheet.sheet | tree | New |
hr_timesheet_sheet_tree_my |
hr.timesheet.sheet.tree.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_tree |
res_config_settings_view_form |
res.config.settings.view.form.inherit.hr.timesheet | res.config.settings | xpath | Inherits hr_timesheet.res_config_settings_view_form |
view_hr_timesheet_sheet_filter |
hr_timesheet.sheet.filter | hr_timesheet.sheet | search | New |
view_hr_timesheet_sheet_kanban |
hr_timesheet.sheet.kanban | hr_timesheet.sheet | kanban | New |
No new fields.
Public methods (0)No public methods.
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
string='Sheet'
sheet_state
Selection
related='sheet_id.state'
string='Sheet State'
create(self, values)
merge_timesheets(self)
unlink(self)
write(self, values)
timesheet_sheet_to_approve_count
Integer
compute='_compute_timesheet_to_approve'
string='Timesheet Sheets to Approve'
No public methods.
timesheet_sheet_count
Integer
compute='_compute_timesheet_sheet_count'
string='Timesheet Sheets Count'
timesheet_sheet_ids
One2many → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
inverse_name='employee_id'
string='Timesheet Sheets'
No public methods.
add_line_project_id
Many2one → project.project
comodel_name='project.project'
help='If selected, the associated project is added to the timesheet sheet when clicked the button.'
string='Select Project'
add_line_task_id
Many2one → project.task
comodel_name='project.task'
help='If selected, the associated task is added to the timesheet sheet when clicked the button.'
string='Select Task'
can_review
Boolean
compute='_compute_can_review'
search='_search_can_review'
string='Can Review'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
readonly=True
required=True
string='Company'
complete_name
Char
compute='_compute_complete_name'
string='Complete Name'
date_end
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date To'
date_start
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date From'
department_id
Many2one → hr.department
comodel_name='hr.department'
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
string='Department'
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
default=<expr>
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Employee'
line_ids
One2many → hr_timesheet.sheet.line
comodel_name='hr_timesheet.sheet.line'
compute='_compute_line_ids'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheet Sheet Lines'
name
Char
compute='_compute_name'
context_dependent=True
new_line_ids
One2many → hr_timesheet.sheet.new.analytic.line
comodel_name='hr_timesheet.sheet.new.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Temporary Timesheets'
review_policy
Selection
default=<expr>
readonly=True
required=True
selection=<expr>
reviewer_id
Many2one → hr.employee
comodel_name='hr.employee'
readonly=True
string='Reviewer'
tracking=True
state
Selection
default='new'
index=True
readonly=True
required=True
string='Status'
tracking=True
args: [('new', 'New'), ('draft', 'Open'), ('confirm', 'Waiting Review'), ('done', 'Approved')]
timesheet_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheets'
total_time
Float
compute='_compute_total_time'
store=True
user_id
Many2one → res.users
comodel_name='res.users'
readonly=True
related='employee_id.user_id'
store=True
string='User'
action_timesheet_confirm(self)
action_timesheet_done(self)
action_timesheet_draft(self)
action_timesheet_refuse(self)
add_line(self)
add_new_line(self, line)
button_add_line(self)
clean_timesheets(self, timesheets)
copy(self, default=None)
create(self, vals)
delete_empty_lines(self, delete_empty_rows=False)
link_timesheets_to_sheet(self, timesheets)
onchange_add_project_id(self)
reset_add_line(self)
unlink(self)
write(self, vals)
new_line_id
Integer
default=0
value_x
Char
string='Date Name'
value_y
Char
string='Project Name'
onchange_unit_amount(self)
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
date
Date
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
string='Employee'
project_id
Many2one → project.project
comodel_name='project.project'
string='Project'
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
ondelete='cascade'
task_id
Many2one → project.task
comodel_name='project.task'
string='Task'
unit_amount
Float
default=0.0
string='Quantity'
get_unique_id(self)
No new fields.
Public methods (0)No public methods.
sheet_range
Selection
default='WEEKLY'
help='The range of your Timesheet Sheet.'
string='Timesheet Sheet Range'
args: [('MONTHLY', 'Month'), ('WEEKLY', 'Week'), ('DAILY', 'Day')]
timesheet_sheet_review_policy
Selection
default='hr'
help='How Timesheet Sheets review is performed.'
selection=[('hr', 'By HR Officers'), ('hr_manager', 'By HR Managers'), ('timesheet_manager', 'By Timesheets Managers')]
string='Timesheet Sheet Review Policy'
timesheet_week_start
Selection
default='0'
selection=_WEEKDAYS
string='Week start day'
No public methods.
sheet_range
Selection
help='The range of your Timesheet Sheet.'
readonly=False
related='company_id.sheet_range'
string='Timesheet Sheet Range'
timesheet_sheet_review_policy
Selection
readonly=False
related='company_id.timesheet_sheet_review_policy'
timesheet_week_start
Selection
help='Starting day for Timesheet Sheets.'
readonly=False
related='company_id.timesheet_week_start'
string='Week Start Day'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/timesheet |
| GIT | |
| GIT | https://github.com/OCA/timesheet.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/timesheet/tree/12.0/hr_timesheet_sheet |
| VERSION | |
| VERSION | 3.7.6 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Eficent, Onestein, CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Eficent, Onestein, CorporateHub |
| COMMITTERS | |
| COMMITTERS | Alexis de Lattre, Pedro M. Baeza, GitHub, mreficent, Andrea, Alexey Pelykh, Yann Papouin, OCA Transbot, ahenriquez, Florian da Costa, oca-travis, Weblate, OCA-git-bot, tarteo, Carmen Bianca BAKKER, Adrià Gil Sorribes, oca-ci, Shruti Singh |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:23 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_widget_x2many_2d_matrix odoo/odoo: - hr_timesheet - hr - base_setup - base - web - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
assets_backend | ir.ui.view | qweb | Inherits web.assets_backend |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | xpath | Inherits hr.hr_department_view_kanban |
hr_timesheet_line_form |
account.analytic.line.form | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_form |
hr_timesheet_line_search |
account.analytic.line.search | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_search |
hr_timesheet_sheet_employee_extd_form |
hr.timesheet.sheet.employee.extd_form | hr.employee | div | Inherits hr.view_employee_form |
hr_timesheet_sheet_form |
hr_timesheet.sheet.form | hr_timesheet.sheet | form | New |
hr_timesheet_sheet_form_my |
hr.timesheet.sheet.form.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_form |
hr_timesheet_sheet_tree |
hr.timesheet.sheet.tree | hr_timesheet.sheet | tree | New |
hr_timesheet_sheet_tree_my |
hr.timesheet.sheet.tree.my | hr_timesheet.sheet | xpath | Inherits hr_timesheet_sheet_tree |
res_config_settings_view_form |
res.config.settings.view.form.inherit.hr.timesheet | res.config.settings | xpath | Inherits hr_timesheet.res_config_settings_view_form |
view_hr_timesheet_sheet_filter |
hr_timesheet.sheet.filter | hr_timesheet.sheet | search | New |
view_hr_timesheet_sheet_kanban |
hr_timesheet.sheet.kanban | hr_timesheet.sheet | kanban | New |
No new fields.
Public methods (0)No public methods.
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
string='Sheet'
sheet_state
Selection
related='sheet_id.state'
string='Sheet State'
create(self, values)
merge_timesheets(self)
unlink(self)
write(self, values)
timesheet_sheet_to_approve_count
Integer
compute='_compute_timesheet_to_approve'
string='Timesheet Sheets to Approve'
No public methods.
timesheet_sheet_count
Integer
compute='_compute_timesheet_sheet_count'
store=True
string='Timesheet Sheets Count'
timesheet_sheet_ids
One2many → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
inverse_name='employee_id'
string='Timesheet Sheets'
No public methods.
add_line_project_id
Many2one → project.project
comodel_name='project.project'
help='If selected, the associated project is added to the timesheet sheet when clicked the button.'
string='Select Project'
add_line_task_id
Many2one → project.task
comodel_name='project.task'
help='If selected, the associated task is added to the timesheet sheet when clicked the button.'
string='Select Task'
can_review
Boolean
compute='_compute_can_review'
search='_search_can_review'
string='Can Review'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
readonly=True
required=True
string='Company'
complete_name
Char
compute='_compute_complete_name'
string='Complete Name'
date_end
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date To'
date_start
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date From'
department_id
Many2one → hr.department
comodel_name='hr.department'
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
string='Department'
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
default=<expr>
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Employee'
line_ids
One2many → hr_timesheet.sheet.line
comodel_name='hr_timesheet.sheet.line'
compute='_compute_line_ids'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheet Sheet Lines'
name
Char
compute='_compute_name'
context_dependent=True
new_line_ids
One2many → hr_timesheet.sheet.new.analytic.line
comodel_name='hr_timesheet.sheet.new.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Temporary Timesheets'
review_policy
Selection
default=<expr>
readonly=True
required=True
selection=<expr>
reviewer_id
Many2one → hr.employee
comodel_name='hr.employee'
readonly=True
string='Reviewer'
track_visibility='onchange'
state
Selection
default='new'
index=True
readonly=True
required=True
string='Status'
track_visibility='onchange'
args: [('new', 'New'), ('draft', 'Open'), ('confirm', 'Waiting Review'), ('done', 'Approved')]
timesheet_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheets'
total_time
Float
compute='_compute_total_time'
store=True
user_id
Many2one → res.users
comodel_name='res.users'
readonly=True
related='employee_id.user_id'
store=True
string='User'
action_timesheet_confirm(self)
action_timesheet_done(self)
action_timesheet_draft(self)
action_timesheet_refuse(self)
add_line(self)
add_new_line(self, line)
button_add_line(self)
clean_timesheets(self, timesheets)
copy(self, default=None)
create(self, vals)
delete_empty_lines(self, delete_empty_rows=False)
link_timesheets_to_sheet(self, timesheets)
onchange_add_project_id(self)
reset_add_line(self)
unlink(self)
write(self, vals)
new_line_id
Integer
default=0
value_x
Char
string='Date Name'
value_y
Char
string='Project Name'
onchange_unit_amount(self)
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
date
Date
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
string='Employee'
project_id
Many2one → project.project
comodel_name='project.project'
string='Project'
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
ondelete='cascade'
task_id
Many2one → project.task
comodel_name='project.task'
string='Task'
unit_amount
Float
default=0.0
string='Quantity'
get_unique_id(self)
No new fields.
Public methods (0)No public methods.
sheet_range
Selection
default=WEEKLY
help='The range of your Timesheet Sheet.'
string='Timesheet Sheet Range'
args: [(MONTHLY, 'Month'), (WEEKLY, 'Week'), (DAILY, 'Day')]
timesheet_sheet_review_policy
Selection
default='hr'
help='How Timesheet Sheets review is performed.'
selection=[('hr', 'By HR Officers'), ('hr_manager', 'By HR Managers'), ('timesheet_manager', 'By Timesheets Managers')]
string='Timesheet Sheet Review Policy'
timesheet_week_start
Selection
default='0'
selection=_WEEKDAYS
string='Week start day'
No public methods.
sheet_range
Selection
help='The range of your Timesheet Sheet.'
readonly=False
related='company_id.sheet_range'
string='Timesheet Sheet Range'
timesheet_sheet_review_policy
Selection
readonly=False
related='company_id.timesheet_sheet_review_policy'
timesheet_week_start
Selection
help='Starting day for Timesheet Sheets.'
readonly=False
related='company_id.timesheet_week_start'
string='Week Start Day'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/timesheet |
| GIT | |
| GIT | https://github.com/OCA/timesheet.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/timesheet/tree/11.0/hr_timesheet_sheet |
| VERSION | |
| VERSION | 2.0.2 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Eficent, Onestein |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Eficent, Onestein |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, mreficent, Andrea, Lois Rilo, Alexey Pelykh, Jordi Ballester Alomar, cubells, OCA Transbot, Ruchir Shukla, oca-travis, Weblate, OCA-git-bot, tarteo, George Smirnov |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:24:01 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_widget_x2many_2d_matrix odoo/odoo: - hr_timesheet - hr - base_setup - base - web - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
assets_backend | 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_timesheet_line_form |
account.analytic.line.form | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_form |
hr_timesheet_line_search |
account.analytic.line.search | account.analytic.line | field | Inherits hr_timesheet.hr_timesheet_line_search |
hr_timesheet_sheet_employee_extd_form |
hr.timesheet.sheet.employee.extd_form | hr.employee | div | Inherits hr.view_employee_form |
hr_timesheet_sheet_form |
hr_timesheet.sheet.form | hr_timesheet.sheet | form | New |
hr_timesheet_sheet_tree_simplified |
hr.timesheet.sheet.tree | hr_timesheet.sheet | tree | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.hr.timesheet | res.config.settings | xpath | Inherits hr_timesheet.res_config_settings_view_form |
view_hr_timesheet_sheet_filter |
hr_timesheet.sheet.filter | hr_timesheet.sheet | search | New |
No new fields.
Public methods (0)No public methods.
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
string='Sheet'
create(self, values)
merge_timesheets(self)
unlink(self)
write(self, values)
timesheet_sheet_to_approve_count
Integer
compute='_compute_timesheet_to_approve'
string='Timesheet Sheets to Approve'
No public methods.
timesheet_count
Integer
compute='_compute_timesheet_count'
string='Timesheet Sheets'
No public methods.
add_line_project_id
Many2one → project.project
comodel_name='project.project'
help='If selected, the associated project is added to the timesheet sheet when clicked the button.'
string='Select Project'
add_line_task_id
Many2one → project.task
comodel_name='project.task'
help='If selected, the associated task is added to the timesheet sheet when clicked the button.'
string='Select Task'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
readonly=True
required=True
string='Company'
date_end
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date To'
date_start
Date
default=<expr>
index=True
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Date From'
department_id
Many2one → hr.department
comodel_name='hr.department'
string='Department'
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
default=<expr>
readonly=True
required=True
states={'new': [('readonly', False)]}
string='Employee'
line_ids
One2many → hr_timesheet.sheet.line
comodel_name='hr_timesheet.sheet.line'
compute='_compute_line_ids'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheets'
name
Char
states={'confirm': [('readonly', True)], 'done': [('readonly', True)]}
string='Note'
new_line_ids
One2many → hr_timesheet.sheet.new.analytic.line
comodel_name='hr_timesheet.sheet.new.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Temporary Timesheets'
state
Selection
default='new'
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
comodel_name='account.analytic.line'
inverse_name='sheet_id'
readonly=True
states={'new': [('readonly', False)], 'draft': [('readonly', False)]}
string='Timesheets'
total_time
Float
compute='_compute_total_time'
store=True
user_id
Many2one → res.users
comodel_name='res.users'
readonly=True
related='employee_id.user_id'
store=True
string='User'
action_timesheet_confirm(self)
action_timesheet_done(self)
action_timesheet_draft(self)
action_timesheet_refuse(self)
add_line(self, project, task)
add_new_line(self, line)
button_add_line(self)
clean_timesheets(self, timesheets)
copy(self, default=None)
create(self, vals)
delete_empty_lines(self, delete_empty_rows=False)
link_timesheets_to_sheet(self, timesheets)
name_get(self)
onchange_add_project_id(self)
reset_add_line(self)
unlink(self)
write(self, vals)
new_line_id
Integer
default=0
value_x
Char
string='Date Name'
value_y
Char
string='Project Name'
onchange_unit_amount(self)
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
date
Date
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
string='Employee'
project_id
Many2one → project.project
comodel_name='project.project'
string='Project'
sheet_id
Many2one → hr_timesheet.sheet
comodel_name='hr_timesheet.sheet'
ondelete='cascade'
task_id
Many2one → project.task
comodel_name='project.task'
string='Task'
unit_amount
Float
default=0.0
string='Quantity'
No public methods.
No new fields.
Public methods (0)No public methods.
sheet_range
Selection
default=WEEKLY
help='The range of your Timesheet Sheet.'
string='Timesheet Sheet Range'
args: [(MONTHLY, 'Month'), (WEEKLY, 'Week'), (DAILY, 'Day')]
timesheet_week_start
Selection
default='0'
selection=_WEEKDAYS
string='Week start day'
No public methods.
sheet_range
Selection
help='The range of your Timesheet Sheet.'
related='company_id.sheet_range'
string='Timesheet Sheet Range'
timesheet_week_start
Selection
help='Starting day for Timesheet Sheets.'
related='company_id.timesheet_week_start'
string='Week Start Day'
No public methods.
| STATUS | |
|---|---|
| STATUS | Open migration PR - not merged yet for this version |
| REPOSITORY | |
| REPOSITORY | OCA/timesheet |
| PULL REQUEST | |
| PULL REQUEST | [19.0][MIG] hr_timesheet_sheet: Migration to 19.0 (#941) |