| 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_report |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), CorporateHub |
| COMMITTERS | |
| COMMITTERS | OCA-git-bot, oca-ci, tendil |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:17 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/reporting-engine: - report_xlsx 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 |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows to generate configurable Timesheet Report from Task Logs. Features: > - Select reported fields > - Select and reorder report line grouping > - Configure time format (HH:MM, HH:MM:SS, or decimal) > - View in browser, export in PDF and XLSX formats |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_timesheet_report_wizard_form |
hr.timesheet.report.wizard.form | hr.timesheet.report.wizard | form | New |
report |
report | ir.ui.view | qweb | New |
No new fields.
Public methods (1)action_timesheet_report_wizard(self)
date_from
Date
string='Start Date'
date_to
Date
string='End Date'
department_ids
Many2many → hr.department
comodel_name='hr.department'
string='Departments'
employee_category_ids
Many2many → hr.employee.category
comodel_name='hr.employee.category'
string='Employee Tags'
employee_ids
Many2many → hr.employee
comodel_name='hr.employee'
string='Employees'
entry_field_ids
One2many → hr.timesheet.report.field.entry
comodel_name='hr.timesheet.report.field.entry'
inverse_name='report_id'
string='Entry Fields'
group_ids
One2many → hr.timesheet.report.group
comodel_name='hr.timesheet.report.group'
compute='_compute_group_ids'
inverse_name='report_id'
store=True
string='Groups'
groupby_field_ids
One2many → hr.timesheet.report.field.groupby
comodel_name='hr.timesheet.report.field.groupby'
inverse_name='report_id'
string='Group-By Fields'
line_ids
Many2many → account.analytic.line
comodel_name='account.analytic.line'
string='Account Analytics Lines'
project_ids
Many2many → project.project
comodel_name='project.project'
string='Projects'
task_ids
Many2many → project.task
comodel_name='project.task'
string='Tasks'
time_format
Selection
required=True
selection=<expr>
string='Time format'
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
get_action(self, report_type='qweb-html')
any_line_id
Many2one → account.analytic.line
comodel_name='account.analytic.line'
compute='_compute_any_line_id'
string='Account Analytics Lines'
group_id
Many2one → hr.timesheet.report.group
comodel_name='hr.timesheet.report.group'
ondelete='cascade'
required=True
string='Group'
scope
Char
sequence
Integer
required=True
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
render_value(self, field_name)
aggregation
Char
field_name
Char
required=True
string='Field name'
field_title
Char
required=True
string='Field title'
field_type
Char
required=True
string='Field type'
groupby
Char
compute='_compute_groupby'
string='Group-by expression'
report_id
Many2one → hr.timesheet.report
comodel_name='hr.timesheet.report'
ondelete='cascade'
required=True
string='Report'
sequence
Integer
required=True
No public methods.
cell_classes
Char
compute='_compute_cell_classes'
string='Cell classes'
No public methods.
No new fields.
Public methods (0)No public methods.
entry_ids
One2many → hr.timesheet.report.entry
comodel_name='hr.timesheet.report.entry'
compute='_compute_entry_ids'
inverse_name='group_id'
store=True
string='Entries'
name
Char
report_id
Many2one → hr.timesheet.report
comodel_name='hr.timesheet.report'
ondelete='cascade'
required=True
string='Report'
scope
Char
sequence
Integer
required=True
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
No public methods.
date_from
Date
string='Start Date'
date_to
Date
string='End Date'
department_ids
Many2many → hr.department
comodel_name='hr.department'
string='Departments'
employee_category_ids
Many2many → hr.employee.category
comodel_name='hr.employee.category'
string='Employee Tags'
employee_ids
Many2many → hr.employee
comodel_name='hr.employee'
string='Employees'
entry_field_ids
One2many → hr.timesheet.report.wizard.field.details
comodel_name='hr.timesheet.report.wizard.field.details'
default=<expr>
inverse_name='wizard_id'
string='Details Fields'
grouping_field_ids
One2many → hr.timesheet.report.wizard.field.grouping
comodel_name='hr.timesheet.report.wizard.field.grouping'
default=<expr>
inverse_name='wizard_id'
string='Grouping Fields'
has_line_ids
Boolean
compute='_compute_has_line_ids'
string='Has lines (technical)'
line_ids
Many2many → account.analytic.line
comodel_name='account.analytic.line'
string='Account Analytics Lines'
project_ids
Many2many → project.project
comodel_name='project.project'
string='Projects'
task_ids
Many2many → project.task
comodel_name='project.task'
string='Tasks'
time_format
Selection
default=<expr>
required=True
selection=<expr>
string='Time format'
action_export_html(self)
action_export_pdf(self)
action_export_xlsx(self)
create(self, vals_list)
field_name
Selection
required=True
selection='_selection_field_name'
string='Field'
field_title
Char
compute='_compute_field_title'
string='Title'
field_type
Char
compute='_compute_field_type'
string='Type'
sequence
Integer
default=10
required=True
wizard_id
Many2one → hr.timesheet.report.wizard
comodel_name='hr.timesheet.report.wizard'
ondelete='cascade'
required=True
string='Wizard'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)generate_xlsx_report(self, workbook, data, docs)
| 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_report |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), CorporateHub |
| COMMITTERS | |
| COMMITTERS | OCA-git-bot, oca-ci, CristianoMafraJunior, Cristiano Mafra Junior |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:09 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/reporting-engine: - report_xlsx 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 |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
xlrd xlsxwriter |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows to generate configurable Timesheet Report from Task Logs. Features: > - Select reported fields > - Select and reorder report line grouping > - Configure time format (HH:MM, HH:MM:SS, or decimal) > - View in browser, export in PDF and XLSX formats |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_timesheet_report_wizard_form |
hr.timesheet.report.wizard.form | hr.timesheet.report.wizard | form | New |
report |
report | ir.ui.view | qweb | New |
No new fields.
Public methods (1)action_timesheet_report_wizard(self)
date_from
Date
string='Start Date'
date_to
Date
string='End Date'
department_ids
Many2many → hr.department
comodel_name='hr.department'
string='Departments'
employee_category_ids
Many2many → hr.employee.category
comodel_name='hr.employee.category'
string='Employee Tags'
employee_ids
Many2many → hr.employee
comodel_name='hr.employee'
string='Employees'
entry_field_ids
One2many → hr.timesheet.report.field.entry
comodel_name='hr.timesheet.report.field.entry'
inverse_name='report_id'
string='Entry Fields'
group_ids
One2many → hr.timesheet.report.group
comodel_name='hr.timesheet.report.group'
compute='_compute_group_ids'
inverse_name='report_id'
store=True
string='Groups'
groupby_field_ids
One2many → hr.timesheet.report.field.groupby
comodel_name='hr.timesheet.report.field.groupby'
inverse_name='report_id'
string='Group-By Fields'
line_ids
Many2many → account.analytic.line
comodel_name='account.analytic.line'
string='Account Analytics Lines'
project_ids
Many2many → project.project
comodel_name='project.project'
string='Projects'
task_ids
Many2many → project.task
comodel_name='project.task'
string='Tasks'
time_format
Selection
required=True
selection=<expr>
string='Time format'
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
get_action(self, report_type='qweb-html')
any_line_id
Many2one → account.analytic.line
comodel_name='account.analytic.line'
compute='_compute_any_line_id'
string='Account Analytics Lines'
group_id
Many2one → hr.timesheet.report.group
comodel_name='hr.timesheet.report.group'
ondelete='cascade'
required=True
string='Group'
scope
Char
sequence
Integer
required=True
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
render_value(self, field_name)
aggregation
Char
field_name
Char
required=True
string='Field name'
field_title
Char
required=True
string='Field title'
field_type
Char
required=True
string='Field type'
groupby
Char
compute='_compute_groupby'
string='Group-by expression'
report_id
Many2one → hr.timesheet.report
comodel_name='hr.timesheet.report'
ondelete='cascade'
required=True
string='Report'
sequence
Integer
required=True
No public methods.
cell_classes
Char
compute='_compute_cell_classes'
string='Cell classes'
No public methods.
No new fields.
Public methods (0)No public methods.
entry_ids
One2many → hr.timesheet.report.entry
comodel_name='hr.timesheet.report.entry'
compute='_compute_entry_ids'
inverse_name='group_id'
store=True
string='Entries'
name
Char
report_id
Many2one → hr.timesheet.report
comodel_name='hr.timesheet.report'
ondelete='cascade'
required=True
string='Report'
scope
Char
sequence
Integer
required=True
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
No public methods.
date_from
Date
string='Start Date'
date_to
Date
string='End Date'
department_ids
Many2many → hr.department
comodel_name='hr.department'
string='Departments'
employee_category_ids
Many2many → hr.employee.category
comodel_name='hr.employee.category'
string='Employee Tags'
employee_ids
Many2many → hr.employee
comodel_name='hr.employee'
string='Employees'
entry_field_ids
One2many → hr.timesheet.report.wizard.field.details
comodel_name='hr.timesheet.report.wizard.field.details'
default=<expr>
inverse_name='wizard_id'
string='Details Fields'
grouping_field_ids
One2many → hr.timesheet.report.wizard.field.grouping
comodel_name='hr.timesheet.report.wizard.field.grouping'
default=<expr>
inverse_name='wizard_id'
string='Grouping Fields'
has_line_ids
Boolean
compute='_compute_has_line_ids'
string='Has lines (technical)'
line_ids
Many2many → account.analytic.line
comodel_name='account.analytic.line'
string='Account Analytics Lines'
project_ids
Many2many → project.project
comodel_name='project.project'
string='Projects'
task_ids
Many2many → project.task
comodel_name='project.task'
string='Tasks'
time_format
Selection
default=<expr>
required=True
selection=<expr>
string='Time format'
action_export_html(self)
action_export_pdf(self)
action_export_xlsx(self)
create(self, vals_list)
field_name
Selection
required=True
selection='_selection_field_name'
string='Field'
field_title
Char
compute='_compute_field_title'
string='Title'
field_type
Char
compute='_compute_field_type'
string='Type'
sequence
Integer
default=10
required=True
wizard_id
Many2one → hr.timesheet.report.wizard
comodel_name='hr.timesheet.report.wizard'
ondelete='cascade'
required=True
string='Wizard'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)generate_xlsx_report(self, workbook, data, docs)
| 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_report |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), CorporateHub |
| COMMITTERS | |
| COMMITTERS | Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Simon Maillard |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:56 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/reporting-engine: - report_xlsx 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 |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_timesheet_report_wizard_form |
hr.timesheet.report.wizard.form | hr.timesheet.report.wizard | form | New |
report |
report | ir.ui.view | qweb | New |
No new fields.
Public methods (1)action_timesheet_report_wizard(self)
date_from
Date
string='Start Date'
date_to
Date
string='End Date'
department_ids
Many2many → hr.department
comodel_name='hr.department'
string='Departments'
employee_category_ids
Many2many → hr.employee.category
comodel_name='hr.employee.category'
string='Employee Tags'
employee_ids
Many2many → hr.employee
comodel_name='hr.employee'
string='Employees'
entry_field_ids
One2many → hr.timesheet.report.field.entry
comodel_name='hr.timesheet.report.field.entry'
inverse_name='report_id'
string='Entry Fields'
group_ids
One2many → hr.timesheet.report.group
comodel_name='hr.timesheet.report.group'
compute='_compute_group_ids'
inverse_name='report_id'
store=True
string='Groups'
groupby_field_ids
One2many → hr.timesheet.report.field.groupby
comodel_name='hr.timesheet.report.field.groupby'
inverse_name='report_id'
string='Group-By Fields'
line_ids
Many2many → account.analytic.line
comodel_name='account.analytic.line'
string='Account Analytics Lines'
project_ids
Many2many → project.project
comodel_name='project.project'
string='Projects'
task_ids
Many2many → project.task
comodel_name='project.task'
string='Tasks'
time_format
Selection
required=True
selection=<expr>
string='Time format'
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
uom
Many2one → uom.uom
compute='_compute_uom'
store=True
args: 'uom.uom'
get_action(self, report_type='qweb-html')
any_line_id
Many2one → account.analytic.line
comodel_name='account.analytic.line'
compute='_compute_any_line_id'
string='Account Analytics Lines'
group_id
Many2one → hr.timesheet.report.group
comodel_name='hr.timesheet.report.group'
ondelete='cascade'
required=True
string='Group'
scope
Char
sequence
Integer
required=True
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
uom
Many2one → uom.uom
related='group_id.report_id.uom'
args: 'uom.uom'
render_value(self, field_name)
aggregation
Char
field_name
Char
required=True
string='Field name'
field_title
Char
required=True
string='Field title'
field_type
Char
required=True
string='Field type'
groupby
Char
compute='_compute_groupby'
string='Group-by expression'
report_id
Many2one → hr.timesheet.report
comodel_name='hr.timesheet.report'
ondelete='cascade'
required=True
string='Report'
sequence
Integer
required=True
No public methods.
cell_classes
Char
compute='_compute_cell_classes'
string='Cell classes'
No public methods.
No new fields.
Public methods (0)No public methods.
entry_ids
One2many → hr.timesheet.report.entry
comodel_name='hr.timesheet.report.entry'
compute='_compute_entry_ids'
inverse_name='group_id'
store=True
string='Entries'
name
Char
report_id
Many2one → hr.timesheet.report
comodel_name='hr.timesheet.report'
ondelete='cascade'
required=True
string='Report'
scope
Char
sequence
Integer
required=True
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
No public methods.
date_from
Date
string='Start Date'
date_to
Date
string='End Date'
department_ids
Many2many → hr.department
comodel_name='hr.department'
string='Departments'
employee_category_ids
Many2many → hr.employee.category
comodel_name='hr.employee.category'
string='Employee Tags'
employee_ids
Many2many → hr.employee
comodel_name='hr.employee'
string='Employees'
entry_field_ids
One2many → hr.timesheet.report.wizard.field.details
comodel_name='hr.timesheet.report.wizard.field.details'
default=<expr>
inverse_name='wizard_id'
string='Details Fields'
grouping_field_ids
One2many → hr.timesheet.report.wizard.field.grouping
comodel_name='hr.timesheet.report.wizard.field.grouping'
default=<expr>
inverse_name='wizard_id'
string='Grouping Fields'
has_line_ids
Boolean
compute='_compute_has_line_ids'
string='Has lines (technical)'
line_ids
Many2many → account.analytic.line
comodel_name='account.analytic.line'
string='Account Analytics Lines'
project_ids
Many2many → project.project
comodel_name='project.project'
string='Projects'
task_ids
Many2many → project.task
comodel_name='project.task'
string='Tasks'
time_format
Selection
default=<expr>
required=True
selection=<expr>
string='Time format'
action_export_html(self)
action_export_pdf(self)
action_export_xlsx(self)
create(self, vals_list)
field_name
Selection
required=True
selection='_selection_field_name'
string='Field'
field_title
Char
compute='_compute_field_title'
string='Title'
field_type
Char
compute='_compute_field_type'
string='Type'
sequence
Integer
default=10
required=True
wizard_id
Many2one → hr.timesheet.report.wizard
comodel_name='hr.timesheet.report.wizard'
ondelete='cascade'
required=True
string='Wizard'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)generate_xlsx_report(self, workbook, data, docs)
| 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_report |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), CorporateHub |
| COMMITTERS | |
| COMMITTERS | OCA Transbot, oca-travis, Weblate, OCA-git-bot, oca-ci, Stefano Consolaro, dsolanki |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:09 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/reporting-engine: - report_xlsx 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 |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_timesheet_report_wizard_form |
hr.timesheet.report.wizard.form | hr.timesheet.report.wizard | form | New |
report |
report | ir.ui.view | qweb | New |
No new fields.
Public methods (1)action_timesheet_report_wizard(self)
date_from
Date
string='Start Date'
date_to
Date
string='End Date'
department_ids
Many2many → hr.department
comodel_name='hr.department'
string='Departments'
employee_category_ids
Many2many → hr.employee.category
comodel_name='hr.employee.category'
string='Employee Tags'
employee_ids
Many2many → hr.employee
comodel_name='hr.employee'
string='Employees'
entry_field_ids
One2many → hr.timesheet.report.field.entry
comodel_name='hr.timesheet.report.field.entry'
inverse_name='report_id'
string='Entry Fields'
group_ids
One2many → hr.timesheet.report.group
comodel_name='hr.timesheet.report.group'
compute='_compute_group_ids'
inverse_name='report_id'
store=True
string='Groups'
groupby_field_ids
One2many → hr.timesheet.report.field.groupby
comodel_name='hr.timesheet.report.field.groupby'
inverse_name='report_id'
string='Group-By Fields'
line_ids
Many2many → account.analytic.line
comodel_name='account.analytic.line'
string='Account Analytics Lines'
project_ids
Many2many → project.project
comodel_name='project.project'
string='Projects'
task_ids
Many2many → project.task
comodel_name='project.task'
string='Tasks'
time_format
Selection
required=True
selection=<expr>
string='Time format'
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
get_action(self, report_type='qweb-html')
any_line_id
Many2one → account.analytic.line
comodel_name='account.analytic.line'
compute='_compute_any_line_id'
string='Account Analytics Lines'
group_id
Many2one → hr.timesheet.report.group
comodel_name='hr.timesheet.report.group'
ondelete='cascade'
required=True
string='Group'
scope
Char
string='Scope'
sequence
Integer
required=True
string='Sequence'
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
render_value(self, field_name)
aggregation
Char
string='Aggregation'
field_name
Char
required=True
string='Field name'
field_title
Char
required=True
string='Field title'
field_type
Char
required=True
string='Field type'
groupby
Char
compute='_compute_groupby'
string='Group-by expression'
report_id
Many2one → hr.timesheet.report
comodel_name='hr.timesheet.report'
ondelete='cascade'
required=True
string='Report'
sequence
Integer
required=True
string='Sequence'
No public methods.
cell_classes
Char
compute='_compute_cell_classes'
string='Cell classes'
No public methods.
No new fields.
Public methods (0)No public methods.
entry_ids
One2many → hr.timesheet.report.entry
comodel_name='hr.timesheet.report.entry'
compute='_compute_entry_ids'
inverse_name='group_id'
store=True
string='Entries'
name
Char
report_id
Many2one → hr.timesheet.report
comodel_name='hr.timesheet.report'
ondelete='cascade'
required=True
string='Report'
scope
Char
string='Scope'
sequence
Integer
required=True
string='Sequence'
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
No public methods.
date_from
Date
string='Start Date'
date_to
Date
string='End Date'
department_ids
Many2many → hr.department
comodel_name='hr.department'
string='Departments'
employee_category_ids
Many2many → hr.employee.category
comodel_name='hr.employee.category'
string='Employee Tags'
employee_ids
Many2many → hr.employee
comodel_name='hr.employee'
string='Employees'
entry_field_ids
One2many → hr.timesheet.report.wizard.field.details
comodel_name='hr.timesheet.report.wizard.field.details'
default=<expr>
inverse_name='wizard_id'
string='Details Fields'
grouping_field_ids
One2many → hr.timesheet.report.wizard.field.grouping
comodel_name='hr.timesheet.report.wizard.field.grouping'
default=<expr>
inverse_name='wizard_id'
string='Grouping Fields'
has_line_ids
Boolean
compute='_compute_has_line_ids'
string='Has lines (technical)'
line_ids
Many2many → account.analytic.line
comodel_name='account.analytic.line'
string='Account Analytics Lines'
project_ids
Many2many → project.project
comodel_name='project.project'
string='Projects'
task_ids
Many2many → project.task
comodel_name='project.task'
string='Tasks'
time_format
Selection
default=<expr>
required=True
selection=<expr>
string='Time format'
action_export_html(self)
action_export_pdf(self)
action_export_xlsx(self)
create(self, vals)
field_name
Selection
required=True
selection='_selection_field_name'
string='Field'
field_title
Char
compute='_compute_field_title'
string='Title'
field_type
Char
compute='_compute_field_type'
string='Type'
sequence
Integer
default=10
required=True
string='Sequence'
wizard_id
Many2one → hr.timesheet.report.wizard
comodel_name='hr.timesheet.report.wizard'
ondelete='cascade'
required=True
string='Wizard'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)generate_xlsx_report(self, workbook, data, docs)
| 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_report |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), CorporateHub |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), CorporateHub |
| COMMITTERS | |
| COMMITTERS | Alexey Pelykh, OCA Transbot, oca-travis, Weblate, OCA-git-bot |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:23 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/reporting-engine: - report_xlsx 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 |
xlrd xlsxwriter |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_timesheet_report_wizard_form |
hr.timesheet.report.wizard.form | hr.timesheet.report.wizard | form | New |
report |
report | ir.ui.view | qweb | New |
No new fields.
Public methods (1)action_timesheet_report_wizard(self)
date_from
Date
string='Start Date'
date_to
Date
string='End Date'
department_ids
Many2many → hr.department
comodel_name='hr.department'
string='Departments'
employee_category_ids
Many2many → hr.employee.category
comodel_name='hr.employee.category'
string='Employee Tags'
employee_ids
Many2many → hr.employee
comodel_name='hr.employee'
string='Employees'
entry_field_ids
One2many → hr.timesheet.report.field.entry
comodel_name='hr.timesheet.report.field.entry'
inverse_name='report_id'
string='Entry Fields'
group_ids
One2many → hr.timesheet.report.group
comodel_name='hr.timesheet.report.group'
compute='_compute_group_ids'
inverse_name='report_id'
store=True
string='Groups'
groupby_field_ids
One2many → hr.timesheet.report.field.groupby
comodel_name='hr.timesheet.report.field.groupby'
inverse_name='report_id'
string='Group-By Fields'
line_ids
Many2many → account.analytic.line
comodel_name='account.analytic.line'
string='Account Analytics Lines'
project_ids
Many2many → project.project
comodel_name='project.project'
string='Projects'
task_ids
Many2many → project.task
comodel_name='project.task'
string='Tasks'
time_format
Selection
required=True
selection=<expr>
string='Time format'
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
get_action(self, report_type='qweb-html')
any_line_id
Many2one → account.analytic.line
comodel_name='account.analytic.line'
compute='_compute_any_line_id'
string='Account Analytics Lines'
group_id
Many2one → hr.timesheet.report.group
comodel_name='hr.timesheet.report.group'
ondelete='cascade'
required=True
string='Group'
scope
Char
string='Scope'
sequence
Integer
required=True
string='Sequence'
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
render_value(self, field_name)
aggregation
Char
string='Aggregation'
field_name
Char
required=True
string='Field name'
field_title
Char
required=True
string='Field title'
field_type
Char
required=True
string='Field type'
groupby
Char
compute='_compute_groupby'
string='Group-by expression'
report_id
Many2one → hr.timesheet.report
comodel_name='hr.timesheet.report'
ondelete='cascade'
required=True
string='Report'
sequence
Integer
required=True
string='Sequence'
No public methods.
cell_classes
Char
compute='_compute_cell_classes'
string='Cell classes'
No public methods.
No new fields.
Public methods (0)No public methods.
entry_ids
One2many → hr.timesheet.report.entry
comodel_name='hr.timesheet.report.entry'
compute='_compute_entry_ids'
inverse_name='group_id'
store=True
string='Entries'
name
Char
report_id
Many2one → hr.timesheet.report
comodel_name='hr.timesheet.report'
ondelete='cascade'
required=True
string='Report'
scope
Char
string='Scope'
sequence
Integer
required=True
string='Sequence'
total_unit_amount
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity'
No public methods.
date_from
Date
string='Start Date'
date_to
Date
string='End Date'
department_ids
Many2many → hr.department
comodel_name='hr.department'
string='Departments'
employee_category_ids
Many2many → hr.employee.category
comodel_name='hr.employee.category'
string='Employee Tags'
employee_ids
Many2many → hr.employee
comodel_name='hr.employee'
string='Employees'
entry_field_ids
One2many → hr.timesheet.report.wizard.field.details
comodel_name='hr.timesheet.report.wizard.field.details'
default=<expr>
inverse_name='wizard_id'
string='Details Fields'
grouping_field_ids
One2many → hr.timesheet.report.wizard.field.grouping
comodel_name='hr.timesheet.report.wizard.field.grouping'
default=<expr>
inverse_name='wizard_id'
string='Grouping Fields'
has_line_ids
Boolean
compute='_compute_has_line_ids'
string='Has lines (technical)'
line_ids
Many2many → account.analytic.line
comodel_name='account.analytic.line'
string='Account Analytics Lines'
project_ids
Many2many → project.project
comodel_name='project.project'
string='Projects'
task_ids
Many2many → project.task
comodel_name='project.task'
string='Tasks'
time_format
Selection
default=<expr>
required=True
selection=<expr>
string='Time format'
action_export_html(self)
action_export_pdf(self)
action_export_xlsx(self)
create(self, vals)
field_name
Selection
required=True
selection='_selection_field_name'
string='Field'
field_title
Char
compute='_compute_field_title'
string='Title'
field_type
Char
compute='_compute_field_type'
string='Type'
sequence
Integer
default=10
required=True
string='Sequence'
wizard_id
Many2one → hr.timesheet.report.wizard
comodel_name='hr.timesheet.report.wizard'
ondelete='cascade'
required=True
string='Wizard'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)generate_xlsx_report(self, workbook, data, docs)
| STATUS | |
|---|---|
| STATUS | Open migration PR - not merged yet for this version |
| REPOSITORY | |
| REPOSITORY | OCA/timesheet |
| PULL REQUEST | |
| PULL REQUEST | [19.0][MIG] hr_timesheet_report: Migration to 19.0 (#919) |