HR Timesheet Sheet

hr_timesheet_sheet
REPOSITORY
REPOSITORYOCA/timesheet
GIT
GIThttps://github.com/OCA/timesheet.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/timesheet/tree/18.0/hr_timesheet_sheet
VERSION
VERSION 1.3.2
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
COMMITTERS
COMMITTERSMiquel Raïch, Víctor Martínez, JordiMForgeFlow, Weblate, OCA-git-bot, oca-ci, Saran440, Borruso, Ricard Calvo, yostashiro
WEBSITE
WEBSITEhttps://github.com/OCA/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-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
    - 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
    - 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.

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
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
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • sheet_id Many2one → hr_timesheet.sheet
    comodel_name='hr_timesheet.sheet' string='Sheet'
  • sheet_state Selection
    related='sheet_id.state' string='Sheet State'
Public methods (4)
  • create(self, values)
    @api.model_create_multi
  • merge_timesheets(self)
  • unlink(self)
  • write(self, values)

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

No public methods.

New fields (2)
  • 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'
Public methods (0)

No public methods.

New fields (19)
  • 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'
Public methods (16)
  • 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)
    @api.model_create_multi
  • delete_empty_lines(self, delete_empty_rows=False)
  • link_timesheets_to_sheet(self, timesheets)
  • onchange(self, values, field_name, field_onchange)
    Pass a flag for _compute_line_ids not to clean timesheet lines to be (kind of) idempotent during onchange
  • reset_add_line(self)
  • unlink(self)
  • write(self, vals)

New fields (3)
  • new_line_id Integer
    default=0
  • value_x Char
    string='Date Name'
  • value_y Char
    string='Project Name'
Public methods (1)
  • onchange_unit_amount(self)
    @api.onchange('unit_amount')
    This method is called when filling a cell of the matrix.

New fields (7)
  • 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'
Public methods (1)
  • get_unique_id(self)
    Hook for extensions

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

New fields (1)
  • sheet_id Many2one → hr_timesheet.sheet
    comodel_name='hr_timesheet.sheet' readonly=True string='Sheet'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/timesheet
GIT
GIThttps://github.com/OCA/timesheet.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/timesheet/tree/17.0/hr_timesheet_sheet
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
COMMITTERS
COMMITTERSStéphane Bidoul, Miquel Raïch, Weblate, OCA-git-bot, Manuel Fombuena, oca-ci, hda, Vijay
WEBSITE
WEBSITEhttps://github.com/OCA/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-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
    - mail
    - 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.

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
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
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • sheet_id Many2one → hr_timesheet.sheet
    comodel_name='hr_timesheet.sheet' string='Sheet'
  • sheet_state Selection
    related='sheet_id.state' string='Sheet State'
Public methods (4)
  • create(self, values)
    @api.model_create_multi
  • merge_timesheets(self)
  • unlink(self)
  • write(self, values)

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

No public methods.

New fields (2)
  • 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'
Public methods (0)

No public methods.

New fields (19)
  • 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'
Public methods (16)
  • 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)
    @api.model_create_multi
  • delete_empty_lines(self, delete_empty_rows=False)
  • link_timesheets_to_sheet(self, timesheets)
  • onchange(self, values, field_name, field_onchange)
    Pass a flag for _compute_line_ids not to clean timesheet lines to be (kind of) idempotent during onchange
  • reset_add_line(self)
  • unlink(self)
  • write(self, vals)

New fields (3)
  • new_line_id Integer
    default=0
  • value_x Char
    string='Date Name'
  • value_y Char
    string='Project Name'
Public methods (1)
  • onchange_unit_amount(self)
    @api.onchange('unit_amount')
    This method is called when filling a cell of the matrix.

New fields (7)
  • 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'
Public methods (1)
  • get_unique_id(self)
    Hook for extensions

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

New fields (1)
  • sheet_id Many2one → hr_timesheet.sheet
    comodel_name='hr_timesheet.sheet' readonly=True string='Sheet'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/timesheet
GIT
GIThttps://github.com/OCA/timesheet.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/timesheet/tree/16.0/hr_timesheet_sheet
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
COMMITTERS
COMMITTERSHolger Brunn, Miquel Raïch, David Beal, Weblate, OCA-git-bot, tarteo, oca-ci, Simon Maillard, LauraCForgeFlow, PicchiSeba
WEBSITE
WEBSITEhttps://github.com/OCA/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-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
    - mail
    - 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

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
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
Models touched (10)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • 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'
Public methods (4)
  • create(self, values)
    @api.model_create_multi
  • merge_timesheets(self)
  • unlink(self)
  • write(self, values)

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

No public methods.

New fields (2)
  • 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'
Public methods (0)

No public methods.

New fields (19)
  • 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'
Public methods (16)
  • 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)
    @api.model_create_multi
  • delete_empty_lines(self, delete_empty_rows=False)
  • link_timesheets_to_sheet(self, timesheets)
  • onchange(self, values, field_name, field_onchange)
    Pass a flag for _compute_line_ids not to clean timesheet lines to be (kind of) idempotent during onchange
  • reset_add_line(self)
  • unlink(self)
  • write(self, vals)

New fields (3)
  • new_line_id Integer
    default=0
  • value_x Char
    string='Date Name'
  • value_y Char
    string='Project Name'
Public methods (1)
  • onchange_unit_amount(self)
    @api.onchange('unit_amount')
    This method is called when filling a cell of the matrix.

New fields (7)
  • 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'
Public methods (1)
  • get_unique_id(self)
    Hook for extensions

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/timesheet
GIT
GIThttps://github.com/OCA/timesheet.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/timesheet/tree/15.0/hr_timesheet_sheet
VERSION
VERSION 1.4.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
COMMITTERS
COMMITTERSroot, OCA Transbot, Miquel Raïch, AaronHForgeFlow, Weblate, OCA-git-bot, Carmen Bianca BAKKER, oca-ci, Christopher Rogos, JasminSForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-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
    - mail
    - 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

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
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
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • sheet_id Many2one → hr_timesheet.sheet
    comodel_name='hr_timesheet.sheet' string='Sheet'
  • sheet_state Selection
    related='sheet_id.state' string='Sheet State'
Public methods (4)
  • create(self, values)
    @api.model
  • merge_timesheets(self)
  • unlink(self)
  • write(self, values)

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

No public methods.

New fields (2)
  • 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'
Public methods (0)

No public methods.

New fields (0)

No new fields.

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

New fields (18)
  • 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'
Public methods (16)
  • 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)
    @api.model
  • delete_empty_lines(self, delete_empty_rows=False)
  • link_timesheets_to_sheet(self, timesheets)
  • onchange_add_project_id(self)
    @api.onchange('add_line_project_id')
    Load the project to the timesheet sheet
  • reset_add_line(self)
  • unlink(self)
  • write(self, vals)

New fields (3)
  • new_line_id Integer
    default=0
  • value_x Char
    string='Date Name'
  • value_y Char
    string='Project Name'
Public methods (1)
  • onchange_unit_amount(self)
    @api.onchange('unit_amount')
    This method is called when filling a cell of the matrix.

New fields (7)
  • 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'
Public methods (1)
  • get_unique_id(self)
    Hook for extensions

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/timesheet
GIT
GIThttps://github.com/OCA/timesheet.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/timesheet/tree/14.0/hr_timesheet_sheet
VERSION
VERSION 1.4.3
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
COMMITTERS
COMMITTERSHolger 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
WEBSITEhttps://github.com/OCA/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-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
    - mail
    - 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

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
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
Models touched (10)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • sheet_id Many2one → hr_timesheet.sheet
    comodel_name='hr_timesheet.sheet' string='Sheet'
  • sheet_state Selection
    related='sheet_id.state' string='Sheet State'
Public methods (4)
  • create(self, values)
    @api.model
  • merge_timesheets(self)
  • unlink(self)
  • write(self, values)

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

No public methods.

New fields (2)
  • 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'
Public methods (0)

No public methods.

New fields (18)
  • 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'
Public methods (17)
  • 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)
    @api.model
  • delete_empty_lines(self, delete_empty_rows=False)
  • link_timesheets_to_sheet(self, timesheets)
  • onchange(self, values, field_name, field_onchange)
    Pass a flag for _compute_line_ids not to clean timesheet lines to be (kind of) idempotent during onchange
  • onchange_add_project_id(self)
    @api.onchange('add_line_project_id')
    Load the project to the timesheet sheet
  • reset_add_line(self)
  • unlink(self)
  • write(self, vals)

New fields (3)
  • new_line_id Integer
    default=0
  • value_x Char
    string='Date Name'
  • value_y Char
    string='Project Name'
Public methods (1)
  • onchange_unit_amount(self)
    @api.onchange('unit_amount')
    This method is called when filling a cell of the matrix.

New fields (7)
  • 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'
Public methods (1)
  • get_unique_id(self)
    Hook for extensions

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • 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'
Public methods (0)

No public methods.

New fields (4)
  • 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'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/timesheet
GIT
GIThttps://github.com/OCA/timesheet.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/timesheet/tree/13.0/hr_timesheet_sheet
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Onestein, CorporateHub
COMMITTERS
COMMITTERSPedro 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
WEBSITEhttps://github.com/OCA/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-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
    - 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 (12)
XML IDNameModelTypeStatus
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
Models touched (10)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • sheet_id Many2one → hr_timesheet.sheet
    comodel_name='hr_timesheet.sheet' string='Sheet'
  • sheet_state Selection
    related='sheet_id.state' string='Sheet State'
Public methods (4)
  • create(self, values)
    @api.model
  • merge_timesheets(self)
  • unlink(self)
  • write(self, values)

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

No public methods.

New fields (2)
  • 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'
Public methods (0)

No public methods.

New fields (18)
  • 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'
Public methods (16)
  • 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)
    @api.model
  • delete_empty_lines(self, delete_empty_rows=False)
  • link_timesheets_to_sheet(self, timesheets)
  • onchange_add_project_id(self)
    @api.onchange('add_line_project_id')
    Load the project to the timesheet sheet
  • reset_add_line(self)
  • unlink(self)
  • write(self, vals)

New fields (3)
  • new_line_id Integer
    default=0
  • value_x Char
    string='Date Name'
  • value_y Char
    string='Project Name'
Public methods (1)
  • onchange_unit_amount(self)
    @api.onchange('unit_amount')
    This method is called when filling a cell of the matrix.

New fields (7)
  • 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'
Public methods (1)
  • get_unique_id(self)
    Hook for extensions

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/timesheet
GIT
GIThttps://github.com/OCA/timesheet.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/timesheet/tree/12.0/hr_timesheet_sheet
VERSION
VERSION 3.7.6
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Eficent, Onestein, CorporateHub
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Eficent, Onestein, CorporateHub
COMMITTERS
COMMITTERSAlexis 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
WEBSITEhttps://github.com/OCA/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-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
    - 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 (12)
XML IDNameModelTypeStatus
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
Models touched (10)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • sheet_id Many2one → hr_timesheet.sheet
    comodel_name='hr_timesheet.sheet' string='Sheet'
  • sheet_state Selection
    related='sheet_id.state' string='Sheet State'
Public methods (4)
  • create(self, values)
    @api.model
  • merge_timesheets(self)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

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

No public methods.

New fields (2)
  • 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'
Public methods (0)

No public methods.

New fields (18)
  • 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'
Public methods (16)
  • action_timesheet_confirm(self)
    @api.multi
  • action_timesheet_done(self)
    @api.multi
  • action_timesheet_draft(self)
    @api.multi
  • action_timesheet_refuse(self)
    @api.multi
  • add_line(self)
  • add_new_line(self, line)
    @api.multi
  • button_add_line(self)
    @api.multi
  • clean_timesheets(self, timesheets)
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
  • delete_empty_lines(self, delete_empty_rows=False)
  • link_timesheets_to_sheet(self, timesheets)
  • onchange_add_project_id(self)
    @api.onchange('add_line_project_id')
    Load the project to the timesheet sheet
  • reset_add_line(self)
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (3)
  • new_line_id Integer
    default=0
  • value_x Char
    string='Date Name'
  • value_y Char
    string='Project Name'
Public methods (1)
  • onchange_unit_amount(self)
    @api.onchange('unit_amount')
    This method is called when filling a cell of the matrix.

New fields (7)
  • 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'
Public methods (1)
  • get_unique_id(self)
    @api.multi
    Hook for extensions

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/timesheet
GIT
GIThttps://github.com/OCA/timesheet.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/timesheet/tree/11.0/hr_timesheet_sheet
VERSION
VERSION 2.0.2
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Eficent, Onestein
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Eficent, Onestein
COMMITTERS
COMMITTERSPedro 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
WEBSITEhttps://github.com/OCA/timesheet
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-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
    - 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 (9)
XML IDNameModelTypeStatus
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
Models touched (10)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • sheet_id Many2one → hr_timesheet.sheet
    comodel_name='hr_timesheet.sheet' string='Sheet'
Public methods (4)
  • create(self, values)
    @api.model
  • merge_timesheets(self)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

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

No public methods.

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

No public methods.

New fields (14)
  • 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'
Public methods (17)
  • action_timesheet_confirm(self)
    @api.multi
  • action_timesheet_done(self)
    @api.multi
  • action_timesheet_draft(self)
    @api.multi
  • action_timesheet_refuse(self)
    @api.multi
  • add_line(self, project, task)
    @api.multi
  • add_new_line(self, line)
    @api.multi
  • button_add_line(self)
    @api.multi
  • clean_timesheets(self, timesheets)
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
  • delete_empty_lines(self, delete_empty_rows=False)
  • link_timesheets_to_sheet(self, timesheets)
  • name_get(self)
    @api.multi
  • onchange_add_project_id(self)
    @api.onchange('add_line_project_id')
    Load the project to the timesheet sheet
  • reset_add_line(self)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (3)
  • new_line_id Integer
    default=0
  • value_x Char
    string='Date Name'
  • value_y Char
    string='Project Name'
Public methods (1)
  • onchange_unit_amount(self)
    @api.onchange('unit_amount')
    This method is called when filling a cell of the matrix.

New fields (7)
  • 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'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • 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'
Public methods (0)

No public methods.

New fields (2)
  • 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'
Public methods (0)

No public methods.

STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/timesheet
PULL REQUEST
PULL REQUEST[19.0][MIG] hr_timesheet_sheet: Migration to 19.0 (#941)