| 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_utilization_report |
| VERSION | |
| VERSION | 1.0.3 |
| 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, Weblate, OCA-git-bot, sergiocorato, 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 - base_setup - base - web - bus - web_tour - resource - hr_timesheet - 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_utilization_report_wizard_form |
hr.utilization.report.wizard.form | hr.utilization.report.wizard | form | New |
report |
report | ir.ui.view | qweb | New |
report_block |
report_block | ir.ui.view | qweb | New |
report_block_empty |
report_block_empty | ir.ui.view | qweb | New |
report_capacity |
report_capacity | ir.ui.view | qweb | New |
report_group |
report_group | ir.ui.view | qweb | New |
report_group_footer |
report_group_footer | ir.ui.view | qweb | New |
report_group_header |
report_group_header | ir.ui.view | qweb | New |
report_header |
report_header | ir.ui.view | qweb | New |
report_utilization |
report_utilization | ir.ui.view | qweb | New |
date_from
Date
required=True
string='Start Date'
date_to
Date
required=True
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.utilization.report.field.entry
comodel_name='hr.utilization.report.field.entry'
inverse_name='report_id'
string='Entry Fields'
group_ids
One2many → hr.utilization.report.group
comodel_name='hr.utilization.report.group'
compute='_compute_group_ids'
inverse_name='report_id'
store=True
string='Groups'
groupby_field_ids
One2many → hr.utilization.report.field.groupby
comodel_name='hr.utilization.report.field.groupby'
inverse_name='report_id'
string='Group-By Fields'
has_multientry_blocks
Boolean
compute='_compute_has_multientry_blocks'
store=True
string='Has Multi-Entry Blocks'
only_active_employees
Boolean
default=True
string='Only Active Employees'
split_by_field_name
Selection
selection=<expr>
string='Split-By Field'
split_by_field_title
Char
compute='_compute_split_by_field_title'
string='Split-By Field Title'
time_format
Selection
required=True
selection=<expr>
string='Time format'
total_capacity
Float
compute='_compute_total_capacity'
store=True
string='Total Capacity'
total_unit_amount_a
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (A)'
total_unit_amount_b
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (B)'
total_utilization_a
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (A)'
total_utilization_b
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (B)'
utilization_format
Selection
required=True
selection=<expr>
string='Utilization format'
get_action(self, report_type='qweb-html')
capacity
Float
compute='_compute_capacity'
store=True
string='Capacity'
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
required=True
string='Employee'
entry_ids
One2many → hr.utilization.report.entry
comodel_name='hr.utilization.report.entry'
compute='_compute_entry_ids'
inverse_name='block_id'
store=True
string='Entries'
group_id
Many2one → hr.utilization.report.group
comodel_name='hr.utilization.report.group'
ondelete='cascade'
required=True
string='Group'
is_multientry
Boolean
compute='_compute_is_multientry'
store=True
string='Is Multi-Entry'
sequence
Integer
required=True
string='Sequence'
total_unit_amount_a
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (A)'
total_unit_amount_b
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (B)'
total_utilization_a
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (A)'
total_utilization_b
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (B)'
No public methods.
any_line_id
Many2one → account.analytic.line
comodel_name='account.analytic.line'
compute='_compute_any_line_id'
string='Account Analytics Lines'
block_id
Many2one → hr.utilization.report.block
comodel_name='hr.utilization.report.block'
ondelete='cascade'
required=True
string='Block'
scope
Char
required=True
string='Scope'
sequence
Integer
required=True
string='Sequence'
total_unit_amount_a
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (A)'
total_unit_amount_b
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (B)'
total_utilization_a
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (A)'
total_utilization_b
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (B)'
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.utilization.report
comodel_name='hr.utilization.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.
block_ids
One2many → hr.utilization.report.block
comodel_name='hr.utilization.report.block'
compute='_compute_block_ids'
inverse_name='group_id'
store=True
string='Blocks'
has_multientry_blocks
Boolean
compute='_compute_has_multientry_blocks'
store=True
string='Has Multi-Entry Blocks'
name
Char
report_id
Many2one → hr.utilization.report
comodel_name='hr.utilization.report'
ondelete='cascade'
required=True
string='Report'
scope
Char
required=True
string='Scope'
sequence
Integer
required=True
string='Sequence'
total_capacity
Float
compute='_compute_total_capacity'
store=True
string='Total Capacity'
total_unit_amount_a
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (A)'
total_unit_amount_b
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (B)'
total_utilization_a
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (A)'
total_utilization_b
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (B)'
No public methods.
date_from
Date
required=True
string='Start Date'
date_to
Date
required=True
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.utilization.report.wizard.field.details
comodel_name='hr.utilization.report.wizard.field.details'
default=<expr>
inverse_name='wizard_id'
string='Details Fields'
grouping_field_ids
One2many → hr.utilization.report.wizard.field.grouping
comodel_name='hr.utilization.report.wizard.field.grouping'
default=<expr>
inverse_name='wizard_id'
string='Grouping Fields'
only_active_employees
Boolean
default=True
string='Only Active Employees'
split_by_field_name
Selection
selection=<expr>
string='Split-By Field'
time_format
Selection
default=<expr>
required=True
selection=<expr>
string='Time format'
utilization_format
Selection
default=<expr>
required=True
selection=<expr>
string='Utilization format'
action_export_html(self)
action_export_pdf(self)
action_export_xlsx(self)
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.utilization.report.wizard
comodel_name='hr.utilization.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_utilization_report |
| VERSION | |
| VERSION | 1.0.3 |
| 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, yousef.soliman, Yousef Soliman |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/timesheet |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:24 |
| 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_utilization_report_wizard_form |
hr.utilization.report.wizard.form | hr.utilization.report.wizard | form | New |
report |
report | ir.ui.view | qweb | New |
report_block |
report_block | ir.ui.view | qweb | New |
report_block_empty |
report_block_empty | ir.ui.view | qweb | New |
report_capacity |
report_capacity | ir.ui.view | qweb | New |
report_group |
report_group | ir.ui.view | qweb | New |
report_group_footer |
report_group_footer | ir.ui.view | qweb | New |
report_group_header |
report_group_header | ir.ui.view | qweb | New |
report_header |
report_header | ir.ui.view | qweb | New |
report_utilization |
report_utilization | ir.ui.view | qweb | New |
date_from
Date
required=True
string='Start Date'
date_to
Date
required=True
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.utilization.report.field.entry
comodel_name='hr.utilization.report.field.entry'
inverse_name='report_id'
string='Entry Fields'
group_ids
One2many → hr.utilization.report.group
comodel_name='hr.utilization.report.group'
compute='_compute_group_ids'
inverse_name='report_id'
store=True
string='Groups'
groupby_field_ids
One2many → hr.utilization.report.field.groupby
comodel_name='hr.utilization.report.field.groupby'
inverse_name='report_id'
string='Group-By Fields'
has_multientry_blocks
Boolean
compute='_compute_has_multientry_blocks'
store=True
string='Has Multi-Entry Blocks'
only_active_employees
Boolean
default=True
string='Only Active Employees'
split_by_field_name
Selection
selection=<expr>
string='Split-By Field'
split_by_field_title
Char
compute='_compute_split_by_field_title'
string='Split-By Field Title'
time_format
Selection
required=True
selection=<expr>
string='Time format'
total_capacity
Float
compute='_compute_total_capacity'
store=True
string='Total Capacity'
total_unit_amount_a
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (A)'
total_unit_amount_b
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (B)'
total_utilization_a
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (A)'
total_utilization_b
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (B)'
utilization_format
Selection
required=True
selection=<expr>
string='Utilization format'
get_action(self, report_type='qweb-html')
capacity
Float
compute='_compute_capacity'
store=True
string='Capacity'
employee_id
Many2one → hr.employee
comodel_name='hr.employee'
required=True
string='Employee'
entry_ids
One2many → hr.utilization.report.entry
comodel_name='hr.utilization.report.entry'
compute='_compute_entry_ids'
inverse_name='block_id'
store=True
string='Entries'
group_id
Many2one → hr.utilization.report.group
comodel_name='hr.utilization.report.group'
ondelete='cascade'
required=True
string='Group'
is_multientry
Boolean
compute='_compute_is_multientry'
store=True
string='Is Multi-Entry'
sequence
Integer
required=True
string='Sequence'
total_unit_amount_a
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (A)'
total_unit_amount_b
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (B)'
total_utilization_a
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (A)'
total_utilization_b
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (B)'
No public methods.
any_line_id
Many2one → account.analytic.line
comodel_name='account.analytic.line'
compute='_compute_any_line_id'
string='Account Analytics Lines'
block_id
Many2one → hr.utilization.report.block
comodel_name='hr.utilization.report.block'
ondelete='cascade'
required=True
string='Block'
scope
Char
required=True
string='Scope'
sequence
Integer
required=True
string='Sequence'
total_unit_amount_a
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (A)'
total_unit_amount_b
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (B)'
total_utilization_a
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (A)'
total_utilization_b
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (B)'
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.utilization.report
comodel_name='hr.utilization.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.
block_ids
One2many → hr.utilization.report.block
comodel_name='hr.utilization.report.block'
compute='_compute_block_ids'
inverse_name='group_id'
store=True
string='Blocks'
has_multientry_blocks
Boolean
compute='_compute_has_multientry_blocks'
store=True
string='Has Multi-Entry Blocks'
name
Char
report_id
Many2one → hr.utilization.report
comodel_name='hr.utilization.report'
ondelete='cascade'
required=True
string='Report'
scope
Char
required=True
string='Scope'
sequence
Integer
required=True
string='Sequence'
total_capacity
Float
compute='_compute_total_capacity'
store=True
string='Total Capacity'
total_unit_amount_a
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (A)'
total_unit_amount_b
Float
compute='_compute_total_unit_amount'
store=True
string='Total Quantity (B)'
total_utilization_a
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (A)'
total_utilization_b
Float
compute='_compute_total_utilization'
store=True
string='Total Utilization (B)'
No public methods.
date_from
Date
required=True
string='Start Date'
date_to
Date
required=True
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.utilization.report.wizard.field.details
comodel_name='hr.utilization.report.wizard.field.details'
default=<expr>
inverse_name='wizard_id'
string='Details Fields'
grouping_field_ids
One2many → hr.utilization.report.wizard.field.grouping
comodel_name='hr.utilization.report.wizard.field.grouping'
default=<expr>
inverse_name='wizard_id'
string='Grouping Fields'
only_active_employees
Boolean
default=True
string='Only Active Employees'
split_by_field_name
Selection
selection=<expr>
string='Split-By Field'
time_format
Selection
default=<expr>
required=True
selection=<expr>
string='Time format'
utilization_format
Selection
default=<expr>
required=True
selection=<expr>
string='Utilization format'
action_export_html(self)
action_export_pdf(self)
action_export_xlsx(self)
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.utilization.report.wizard
comodel_name='hr.utilization.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 | [18.0][MIG] hr_utilization_report: Migration to 18.0 (#748) |
| STATUS | |
|---|---|
| STATUS | Open migration PR - not merged yet for this version |
| REPOSITORY | |
| REPOSITORY | OCA/timesheet |
| PULL REQUEST | |
| PULL REQUEST | [15.0][MIG] hr_utilization_report: Migration to 15.0 (#745) |
| STATUS | |
|---|---|
| STATUS | Open migration PR - not merged yet for this version |
| REPOSITORY | |
| REPOSITORY | OCA/timesheet |
| PULL REQUEST | |
| PULL REQUEST | [16.0][MIG] hr_utilization_report: Migration to 16.0 (#746) |
| STATUS | |
|---|---|
| STATUS | Open migration PR - not merged yet for this version |
| REPOSITORY | |
| REPOSITORY | OCA/timesheet |
| PULL REQUEST | |
| PULL REQUEST | [17.0][MIG] hr_utilization_report: Migration to 17.0 (#747) |