| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/19.0/maintenance |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Supply Chain/Maintenance |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo S.A. |
| MAINTAINERS | |
| MAINTAINERS | Odoo S.A. |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Thibault Delavallée, Arnold Moyaux, Julien Castiaux, Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, JF Aubert, Renaud Thiry, Louis Wicket (wil), Adrien Widart (awt), Victor Piryns (pivi), Djamel Touati, Dylan Kiss (dyki), Nguyễn Đại Dương, Paul Stroobant, nihp-odoo, yagp-odoo, dhha-odoo, gteboul, Pierre Pulinckx, Bastien PIERRE, chha-odoo, Krzysztof Magusiak (krma), Basioni (basm), rare-odoo, srap-odoo, saurabh, chpa-odoo |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/maintenance |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 01:51:44 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour - html_editor |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Track equipment and maintenance requests |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_equipment_category_view_form |
equipment.category.form | maintenance.equipment.category | form | New |
hr_equipment_category_view_search |
equipment.category.search | maintenance.equipment.category | search | New |
hr_equipment_category_view_tree |
equipment.category.list | maintenance.equipment.category | list | New |
hr_equipment_request_view_form |
equipment.request.form | maintenance.request | form | New |
hr_equipment_request_view_graph |
equipment.request.graph | maintenance.request | graph | New |
hr_equipment_request_view_kanban |
equipment.request.kanban | maintenance.request | kanban | New |
hr_equipment_request_view_pivot |
equipment.request.pivot | maintenance.request | pivot | New |
hr_equipment_request_view_search |
equipment.request.search | maintenance.request | search | New |
hr_equipment_request_view_tree |
equipment.request.list | maintenance.request | list | New |
hr_equipment_stage_view_kanban |
equipment.stage.kanban | maintenance.stage | kanban | New |
hr_equipment_stage_view_search |
equipment.stage.search | maintenance.stage | search | New |
hr_equipment_stage_view_tree |
equipment.stage.list | maintenance.stage | list | New |
hr_equipment_view_calendar |
equipment.request.calendar | maintenance.request | calendar | New |
hr_equipment_view_form |
equipment.form | maintenance.equipment | form | New |
hr_equipment_view_kanban |
equipment.kanban | maintenance.equipment | kanban | New |
hr_equipment_view_search |
equipment.search | maintenance.equipment | search | New |
hr_equipment_view_tree |
equipment.list | maintenance.equipment | list | New |
maintenance_request_view_activity |
maintenance.request.view.activity | maintenance.request | activity | New |
maintenance_team_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_form |
maintenance.team.form | maintenance.team | form | New |
maintenance_team_view_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_search |
maintenance.team.search | maintenance.team | search | New |
maintenance_team_view_tree |
maintenance.team.list | maintenance.team | list | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.maintenance | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_maintenance_equipment_category_kanban |
maintenance.equipment.category.kanban | maintenance.equipment.category | kanban | New |
active
Boolean
default=True
assign_date
Date
tracking=True
args: 'Assigned Date'
category_id
Many2one → maintenance.equipment.category
group_expand='_read_group_category_ids'
index='btree_not_null'
string='Equipment Category'
tracking=True
args: 'maintenance.equipment.category'
color
Integer
cost
Float
equipment_properties
Properties
copy=True
definition='category_id.equipment_properties_definition'
args: 'Properties'
maintenance_ids
One2many → maintenance.request
model
Char
name
Char
required=True
translate=True
args: 'Equipment Name'
note
Html
owner_user_id
Many2one → res.users
index='btree_not_null'
string='Owner'
tracking=True
args: 'res.users'
partner_id
Many2one → res.partner
check_company=True
string='Vendor'
args: 'res.partner'
partner_ref
Char
scrap_date
Date
serial_no
Char
copy=False
args: 'Serial Number'
warranty_date
Date
create(self, vals_list)
write(self, vals)
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_count
Integer
compute='_compute_equipment_count'
string='Equipment Count'
equipment_ids
One2many → maintenance.equipment
copy=False
string='Equipment'
args: 'maintenance.equipment', 'category_id'
equipment_properties_definition
PropertiesDefinition
fold
Boolean
compute='_compute_fold'
store=True
string='Folded in Maintenance Pipe'
maintenance_count
Integer
compute='_compute_maintenance_count'
string='Maintenance Count'
maintenance_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'category_id'
maintenance_open_count
Integer
compute='_compute_maintenance_count'
string='Current Maintenance'
name
Char
required=True
translate=True
args: 'Category Name'
note
Html
translate=True
args: 'Comments'
technician_user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'Responsible'
No public methods.
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
effective_date
Date
default=fields.Date.context_today
help='This date will be used to compute the Mean Time Between Failure.'
required=True
args: 'Effective Date'
estimated_next_failure
Date
compute='_compute_maintenance_request'
help='Computed as Latest Failure Date + MTBF'
string='Estimated time before next failure (in days)'
expected_mtbf
Integer
help='Expected Mean Time Between Failure'
string='Expected MTBF'
latest_failure_date
Date
compute='_compute_maintenance_request'
string='Latest Failure Date'
maintenance_count
Integer
compute='_compute_maintenance_count'
store=True
string='Maintenance Count'
maintenance_ids
One2many → maintenance.request
maintenance_open_count
Integer
compute='_compute_maintenance_count'
store=True
string='Current Maintenance'
maintenance_team_id
Many2one → maintenance.team
check_company=True
compute='_compute_maintenance_team_id'
index='btree_not_null'
readonly=False
store=True
string='Maintenance Team'
args: 'maintenance.team'
mtbf
Integer
compute='_compute_maintenance_request'
help='Mean Time Between Failure, computed based on done corrective maintenances.'
string='MTBF'
mttr
Integer
compute='_compute_maintenance_request'
help='Mean Time To Repair'
string='MTTR'
technician_user_id
Many2one → res.users
string='Technician'
tracking=True
args: 'res.users'
No public methods.
archive
Boolean
default=False
help='Set archive to true to hide the maintenance request without deleting it.'
category_id
Many2one → maintenance.equipment.category
index='btree_not_null'
readonly=True
related='equipment_id.category_id'
store=True
string='Category'
args: 'maintenance.equipment.category'
close_date
Date
help='Date the maintenance was finished. '
args: 'Close Date'
color
Integer
company_id
Many2one → res.company
default=<expr>
required=True
string='Company'
args: 'res.company'
description
Html
done
Boolean
related='stage_id.done'
duration
Float
compute='_compute_duration'
help='Duration in hours.'
store=True
equipment_id
Many2one → maintenance.equipment
check_company=True
index=True
ondelete='restrict'
string='Equipment'
args: 'maintenance.equipment'
instruction_google_slide
Char
help='Paste the url of your Google Slide. Make sure the access to the document is public.'
args: 'Google Slide'
instruction_pdf
Binary
instruction_text
Html
instruction_type
Selection
default='text'
string='Instruction'
args: [('pdf', 'PDF'), ('google_slide', 'Google Slide'), ('text', 'Text')]
kanban_state
Selection
default='normal'
required=True
string='Kanban State'
tracking=True
args: [('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')]
maintenance_team_id
Many2one → maintenance.team
check_company=True
compute='_compute_maintenance_team_id'
default=_get_default_team_id
index=True
readonly=False
required=True
store=True
string='Team'
args: 'maintenance.team'
maintenance_type
Selection
default='corrective'
string='Maintenance Type'
args: [('corrective', 'Corrective'), ('preventive', 'Preventive')]
name
Char
required=True
args: 'Subjects'
owner_user_id
Many2one → res.users
default=<expr>
string='Created by User'
args: 'res.users'
priority
Selection
string='Priority'
args: [('0', 'Very Low'), ('1', 'Low'), ('2', 'Normal'), ('3', 'High')]
recurring_maintenance
Boolean
compute='_compute_recurring_maintenance'
readonly=False
store=True
string='Recurrent'
repeat_interval
Integer
default=1
string='Repeat Every'
repeat_type
Selection
default='forever'
string='Until'
args: [('forever', 'Forever'), ('until', 'Until')]
repeat_unit
Selection
default='week'
args: [('day', 'Days'), ('week', 'Weeks'), ('month', 'Months'), ('year', 'Years')]
repeat_until
Date
string='End Date'
request_date
Date
default=fields.Date.context_today
help='Date requested for the maintenance to happen'
tracking=True
args: 'Request Date'
schedule_date
Datetime
help='Date the maintenance team plans the maintenance. It should not differ much from the Request Date. '
args: 'Scheduled Date'
schedule_end
Datetime
compute='_compute_schedule_end'
help='Expected completion date and time of the maintenance request.'
readonly=False
store=True
string='Scheduled End'
stage_id
Many2one → maintenance.stage
copy=False
default=_default_stage
group_expand='_read_group_stage_ids'
ondelete='restrict'
string='Stage'
tracking=True
args: 'maintenance.stage'
user_id
Many2one → res.users
compute='_compute_user_id'
readonly=False
store=True
string='Technician'
tracking=True
args: 'res.users'
activity_update(self)
archive_equipment_request(self)
create(self, vals_list)
reset_equipment_request(self)
write(self, vals)
done
Boolean
fold
Boolean
name
Char
required=True
translate=True
args: 'Name'
sequence
Integer
default=20
args: 'Sequence'
No public methods.
active
Boolean
default=True
alias_id
Many2one
help='Email alias for this maintenance team.'
color
Integer
default=0
args: 'Color Index'
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_ids
One2many → maintenance.equipment
copy=False
args: 'maintenance.equipment', 'maintenance_team_id'
member_ids
Many2many → res.users
domain="[('company_ids', 'in', company_id)]"
string='Team Members'
args: 'res.users', 'maintenance_team_users_rel'
name
Char
required=True
translate=True
args: 'Team Name'
request_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'maintenance_team_id'
todo_request_count
Integer
compute='_compute_todo_requests'
string='Number of Requests'
todo_request_count_block
Integer
compute='_compute_todo_requests'
string='Number of Requests Blocked'
todo_request_count_date
Integer
compute='_compute_todo_requests'
string='Number of Requests Scheduled'
todo_request_count_high_priority
Integer
compute='_compute_todo_requests'
string='Number of Requests in High Priority'
todo_request_count_unscheduled
Integer
compute='_compute_todo_requests'
string='Number of Requests Unscheduled'
todo_request_ids
One2many → maintenance.request
compute='_compute_todo_requests'
copy=False
string='Requests'
args: 'maintenance.request'
No public methods.
module_maintenance_worksheet
Boolean
string='Custom Maintenance Worksheets'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/18.0/maintenance |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Manufacturing/Maintenance |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Christophe Simonis, Aaron Bohy, GitHub, Odoo Online, Jorge Pinna Puissant, William Henrotin, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Louis Wicket (wil), Adrien Widart (awt), Pierre-Yves Dufays, clesgow, Djamel Touati, Dylan Kiss (dyki), Nguyễn Đại Dương, Noe Antoine, omra-odoo, Paul Stroobant, Maryam Kia, aath-odoo, Louis (wil), dhha-odoo, gteboul, Pierre Pulinckx (PIPU), Pierre Pulinckx (pipu), Bastien PIERRE, kusi-odoo, Krzysztof Magusiak (krma), bsra-odoo, rare-odoo, saurabh |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/maintenance |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 01:25:57 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour - html_editor |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Track equipment and maintenance requests |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_equipment_category_view_form |
equipment.category.form | maintenance.equipment.category | form | New |
hr_equipment_category_view_search |
equipment.category.search | maintenance.equipment.category | search | New |
hr_equipment_category_view_tree |
equipment.category.list | maintenance.equipment.category | list | New |
hr_equipment_request_view_form |
equipment.request.form | maintenance.request | form | New |
hr_equipment_request_view_graph |
equipment.request.graph | maintenance.request | graph | New |
hr_equipment_request_view_kanban |
equipment.request.kanban | maintenance.request | kanban | New |
hr_equipment_request_view_pivot |
equipment.request.pivot | maintenance.request | pivot | New |
hr_equipment_request_view_search |
equipment.request.search | maintenance.request | search | New |
hr_equipment_request_view_tree |
equipment.request.list | maintenance.request | list | New |
hr_equipment_stage_view_kanban |
equipment.stage.kanban | maintenance.stage | kanban | New |
hr_equipment_stage_view_search |
equipment.stage.search | maintenance.stage | search | New |
hr_equipment_stage_view_tree |
equipment.stage.list | maintenance.stage | list | New |
hr_equipment_view_calendar |
equipment.request.calendar | maintenance.request | calendar | New |
hr_equipment_view_form |
equipment.form | maintenance.equipment | form | New |
hr_equipment_view_kanban |
equipment.kanban | maintenance.equipment | kanban | New |
hr_equipment_view_search |
equipment.search | maintenance.equipment | search | New |
hr_equipment_view_tree |
equipment.list | maintenance.equipment | list | New |
maintenance_request_view_activity |
maintenance.request.view.activity | maintenance.request | activity | New |
maintenance_team_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_form |
maintenance.team.form | maintenance.team | form | New |
maintenance_team_view_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_search |
maintenance.team.search | maintenance.team | search | New |
maintenance_team_view_tree |
maintenance.team.list | maintenance.team | list | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.maintenance | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_maintenance_equipment_category_kanban |
maintenance.equipment.category.kanban | maintenance.equipment.category | kanban | New |
active
Boolean
default=True
assign_date
Date
tracking=True
args: 'Assigned Date'
category_id
Many2one → maintenance.equipment.category
group_expand='_read_group_category_ids'
string='Equipment Category'
tracking=True
args: 'maintenance.equipment.category'
color
Integer
cost
Float
equipment_properties
Properties
copy=True
definition='category_id.equipment_properties_definition'
args: 'Properties'
location
Char
maintenance_ids
One2many → maintenance.request
match_serial
Boolean
compute='_compute_match_serial'
model
Char
name
Char
required=True
translate=True
args: 'Equipment Name'
note
Html
owner_user_id
Many2one → res.users
string='Owner'
tracking=True
args: 'res.users'
partner_id
Many2one → res.partner
check_company=True
string='Vendor'
args: 'res.partner'
partner_ref
Char
scrap_date
Date
serial_no
Char
copy=False
args: 'Serial Number'
warranty_date
Date
action_open_matched_serial(self)
create(self, vals_list)
write(self, vals)
alias_id
Many2one
help='Email alias for this equipment category. New emails will automatically create a new equipment under this category.'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_count
Integer
compute='_compute_equipment_count'
string='Equipment Count'
equipment_ids
One2many → maintenance.equipment
copy=False
string='Equipment'
args: 'maintenance.equipment', 'category_id'
equipment_properties_definition
PropertiesDefinition
fold
Boolean
compute='_compute_fold'
store=True
string='Folded in Maintenance Pipe'
maintenance_count
Integer
compute='_compute_maintenance_count'
string='Maintenance Count'
maintenance_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'category_id'
maintenance_open_count
Integer
compute='_compute_maintenance_count'
string='Current Maintenance'
name
Char
required=True
translate=True
args: 'Category Name'
note
Html
translate=True
args: 'Comments'
technician_user_id
Many2one → res.users
default=<expr>
tracking=True
args: 'res.users', 'Responsible'
No public methods.
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
effective_date
Date
default=fields.Date.context_today
help='This date will be used to compute the Mean Time Between Failure.'
required=True
args: 'Effective Date'
estimated_next_failure
Date
compute='_compute_maintenance_request'
help='Computed as Latest Failure Date + MTBF'
string='Estimated time before next failure (in days)'
expected_mtbf
Integer
help='Expected Mean Time Between Failure'
string='Expected MTBF'
latest_failure_date
Date
compute='_compute_maintenance_request'
string='Latest Failure Date'
maintenance_count
Integer
compute='_compute_maintenance_count'
store=True
string='Maintenance Count'
maintenance_ids
One2many → maintenance.request
maintenance_open_count
Integer
compute='_compute_maintenance_count'
store=True
string='Current Maintenance'
maintenance_team_id
Many2one → maintenance.team
check_company=True
compute='_compute_maintenance_team_id'
readonly=False
store=True
string='Maintenance Team'
args: 'maintenance.team'
mtbf
Integer
compute='_compute_maintenance_request'
help='Mean Time Between Failure, computed based on done corrective maintenances.'
string='MTBF'
mttr
Integer
compute='_compute_maintenance_request'
help='Mean Time To Repair'
string='MTTR'
technician_user_id
Many2one → res.users
string='Technician'
tracking=True
args: 'res.users'
No public methods.
archive
Boolean
default=False
help='Set archive to true to hide the maintenance request without deleting it.'
category_id
Many2one → maintenance.equipment.category
readonly=True
related='equipment_id.category_id'
store=True
string='Category'
args: 'maintenance.equipment.category'
close_date
Date
help='Date the maintenance was finished. '
args: 'Close Date'
color
Integer
company_id
Many2one → res.company
default=<expr>
required=True
string='Company'
args: 'res.company'
description
Html
done
Boolean
related='stage_id.done'
duration
Float
help='Duration in hours.'
equipment_id
Many2one → maintenance.equipment
check_company=True
index=True
ondelete='restrict'
string='Equipment'
args: 'maintenance.equipment'
instruction_google_slide
Char
help='Paste the url of your Google Slide. Make sure the access to the document is public.'
args: 'Google Slide'
instruction_pdf
Binary
instruction_text
Html
instruction_type
Selection
default='text'
string='Instruction'
args: [('pdf', 'PDF'), ('google_slide', 'Google Slide'), ('text', 'Text')]
kanban_state
Selection
default='normal'
required=True
string='Kanban State'
tracking=True
args: [('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')]
maintenance_team_id
Many2one → maintenance.team
check_company=True
compute='_compute_maintenance_team_id'
default=_get_default_team_id
readonly=False
required=True
store=True
string='Team'
args: 'maintenance.team'
maintenance_type
Selection
default='corrective'
string='Maintenance Type'
args: [('corrective', 'Corrective'), ('preventive', 'Preventive')]
name
Char
required=True
args: 'Subjects'
owner_user_id
Many2one → res.users
default=<expr>
string='Created by User'
args: 'res.users'
priority
Selection
string='Priority'
args: [('0', 'Very Low'), ('1', 'Low'), ('2', 'Normal'), ('3', 'High')]
recurring_maintenance
Boolean
compute='_compute_recurring_maintenance'
readonly=False
store=True
string='Recurrent'
repeat_interval
Integer
default=1
string='Repeat Every'
repeat_type
Selection
default='forever'
string='Until'
args: [('forever', 'Forever'), ('until', 'Until')]
repeat_unit
Selection
default='week'
args: [('day', 'Days'), ('week', 'Weeks'), ('month', 'Months'), ('year', 'Years')]
repeat_until
Date
string='End Date'
request_date
Date
default=fields.Date.context_today
help='Date requested for the maintenance to happen'
tracking=True
args: 'Request Date'
schedule_date
Datetime
help='Date the maintenance team plans the maintenance. It should not differ much from the Request Date. '
args: 'Scheduled Date'
stage_id
Many2one → maintenance.stage
copy=False
default=_default_stage
group_expand='_read_group_stage_ids'
ondelete='restrict'
string='Stage'
tracking=True
args: 'maintenance.stage'
user_id
Many2one → res.users
compute='_compute_user_id'
readonly=False
store=True
string='Technician'
tracking=True
args: 'res.users'
activity_update(self)
archive_equipment_request(self)
create(self, vals_list)
reset_equipment_request(self)
write(self, vals)
done
Boolean
fold
Boolean
name
Char
required=True
translate=True
args: 'Name'
sequence
Integer
default=20
args: 'Sequence'
No public methods.
active
Boolean
default=True
color
Integer
default=0
args: 'Color Index'
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_ids
One2many → maintenance.equipment
copy=False
args: 'maintenance.equipment', 'maintenance_team_id'
member_ids
Many2many → res.users
domain="[('company_ids', 'in', company_id)]"
string='Team Members'
args: 'res.users', 'maintenance_team_users_rel'
name
Char
required=True
translate=True
args: 'Team Name'
request_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'maintenance_team_id'
todo_request_count
Integer
compute='_compute_todo_requests'
string='Number of Requests'
todo_request_count_block
Integer
compute='_compute_todo_requests'
string='Number of Requests Blocked'
todo_request_count_date
Integer
compute='_compute_todo_requests'
string='Number of Requests Scheduled'
todo_request_count_high_priority
Integer
compute='_compute_todo_requests'
string='Number of Requests in High Priority'
todo_request_count_unscheduled
Integer
compute='_compute_todo_requests'
string='Number of Requests Unscheduled'
todo_request_ids
One2many → maintenance.request
compute='_compute_todo_requests'
copy=False
string='Requests'
args: 'maintenance.request'
No public methods.
module_maintenance_worksheet
Boolean
string='Custom Maintenance Worksheets'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/17.0/maintenance |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Manufacturing/Maintenance |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Aaron Bohy, GitHub, Damien Bouvy, Odoo Online, Adrien Dieudonne, Jorge Pinna Puissant, Arnold Moyaux, William Henrotin, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Pierre Paridans, JF Aubert, niyasraphy, Thomas Lefebvre (thle), Louis Wicket (wil), Mahamadasif Ansari, Pierre-Yves Dufays, clesgow, Djamel Touati, Dylan Kiss (dyki), Bruno Boi, Brieuc-brd, Nguyễn Đại Dương, Paul Stroobant, aath-odoo, Louis (wil), dhha-odoo, gteboul, bsra-odoo |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/maintenance |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 01:02:08 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Track equipment and maintenance requests |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_equipment_category_view_form |
equipment.category.form | maintenance.equipment.category | form | New |
hr_equipment_category_view_search |
equipment.category.search | maintenance.equipment.category | search | New |
hr_equipment_category_view_tree |
equipment.category.tree | maintenance.equipment.category | tree | New |
hr_equipment_request_view_form |
equipment.request.form | maintenance.request | form | New |
hr_equipment_request_view_graph |
equipment.request.graph | maintenance.request | graph | New |
hr_equipment_request_view_kanban |
equipment.request.kanban | maintenance.request | kanban | New |
hr_equipment_request_view_pivot |
equipment.request.pivot | maintenance.request | pivot | New |
hr_equipment_request_view_search |
equipment.request.search | maintenance.request | search | New |
hr_equipment_request_view_tree |
equipment.request.tree | maintenance.request | tree | New |
hr_equipment_stage_view_kanban |
equipment.stage.kanban | maintenance.stage | kanban | New |
hr_equipment_stage_view_search |
equipment.stage.search | maintenance.stage | search | New |
hr_equipment_stage_view_tree |
equipment.stage.tree | maintenance.stage | tree | New |
hr_equipment_view_calendar |
equipment.request.calendar | maintenance.request | calendar | New |
hr_equipment_view_form |
equipment.form | maintenance.equipment | form | New |
hr_equipment_view_kanban |
equipment.kanban | maintenance.equipment | kanban | New |
hr_equipment_view_search |
equipment.search | maintenance.equipment | search | New |
hr_equipment_view_tree |
equipment.tree | maintenance.equipment | tree | New |
maintenance_request_view_activity |
maintenance.request.view.activity | maintenance.request | activity | New |
maintenance_team_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_form |
maintenance.team.form | maintenance.team | form | New |
maintenance_team_view_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_search |
maintenance.team.search | maintenance.team | search | New |
maintenance_team_view_tree |
maintenance.team.tree | maintenance.team | tree | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.maintenance | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_maintenance_equipment_category_kanban |
maintenance.equipment.category.kanban | maintenance.equipment.category | kanban | New |
active
Boolean
default=True
assign_date
Date
tracking=True
args: 'Assigned Date'
category_id
Many2one → maintenance.equipment.category
group_expand='_read_group_category_ids'
string='Equipment Category'
tracking=True
args: 'maintenance.equipment.category'
color
Integer
cost
Float
location
Char
maintenance_ids
One2many → maintenance.request
model
Char
name
Char
required=True
translate=True
args: 'Equipment Name'
note
Html
owner_user_id
Many2one → res.users
string='Owner'
tracking=True
args: 'res.users'
partner_id
Many2one → res.partner
check_company=True
string='Vendor'
args: 'res.partner'
partner_ref
Char
scrap_date
Date
serial_no
Char
copy=False
args: 'Serial Number'
warranty_date
Date
create(self, vals_list)
write(self, vals)
alias_id
Many2one
help='Email alias for this equipment category. New emails will automatically create a new equipment under this category.'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_count
Integer
compute='_compute_equipment_count'
string='Equipment Count'
equipment_ids
One2many → maintenance.equipment
copy=False
string='Equipment'
args: 'maintenance.equipment', 'category_id'
fold
Boolean
compute='_compute_fold'
store=True
string='Folded in Maintenance Pipe'
maintenance_count
Integer
compute='_compute_maintenance_count'
string='Maintenance Count'
maintenance_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'category_id'
maintenance_open_count
Integer
compute='_compute_maintenance_count'
string='Current Maintenance'
name
Char
required=True
translate=True
args: 'Category Name'
note
Html
translate=True
args: 'Comments'
technician_user_id
Many2one → res.users
default=<expr>
tracking=True
args: 'res.users', 'Responsible'
No public methods.
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
effective_date
Date
default=fields.Date.context_today
help='This date will be used to compute the Mean Time Between Failure.'
required=True
args: 'Effective Date'
estimated_next_failure
Date
compute='_compute_maintenance_request'
help='Computed as Latest Failure Date + MTBF'
string='Estimated time before next failure (in days)'
expected_mtbf
Integer
help='Expected Mean Time Between Failure'
string='Expected MTBF'
latest_failure_date
Date
compute='_compute_maintenance_request'
string='Latest Failure Date'
maintenance_count
Integer
compute='_compute_maintenance_count'
store=True
string='Maintenance Count'
maintenance_ids
One2many → maintenance.request
maintenance_open_count
Integer
compute='_compute_maintenance_count'
store=True
string='Current Maintenance'
maintenance_team_id
Many2one → maintenance.team
check_company=True
compute='_compute_maintenance_team_id'
readonly=False
store=True
string='Maintenance Team'
args: 'maintenance.team'
mtbf
Integer
compute='_compute_maintenance_request'
help='Mean Time Between Failure, computed based on done corrective maintenances.'
string='MTBF'
mttr
Integer
compute='_compute_maintenance_request'
help='Mean Time To Repair'
string='MTTR'
technician_user_id
Many2one → res.users
string='Technician'
tracking=True
args: 'res.users'
No public methods.
archive
Boolean
default=False
help='Set archive to true to hide the maintenance request without deleting it.'
category_id
Many2one → maintenance.equipment.category
readonly=True
related='equipment_id.category_id'
store=True
string='Category'
args: 'maintenance.equipment.category'
close_date
Date
help='Date the maintenance was finished. '
args: 'Close Date'
color
Integer
company_id
Many2one → res.company
default=<expr>
required=True
string='Company'
args: 'res.company'
description
Html
done
Boolean
related='stage_id.done'
duration
Float
help='Duration in hours.'
equipment_id
Many2one → maintenance.equipment
check_company=True
index=True
ondelete='restrict'
string='Equipment'
args: 'maintenance.equipment'
instruction_google_slide
Char
help='Paste the url of your Google Slide. Make sure the access to the document is public.'
args: 'Google Slide'
instruction_pdf
Binary
instruction_text
Html
instruction_type
Selection
default='text'
string='Instruction'
args: [('pdf', 'PDF'), ('google_slide', 'Google Slide'), ('text', 'Text')]
kanban_state
Selection
default='normal'
required=True
string='Kanban State'
tracking=True
args: [('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')]
maintenance_team_id
Many2one → maintenance.team
check_company=True
compute='_compute_maintenance_team_id'
default=_get_default_team_id
readonly=False
required=True
store=True
string='Team'
args: 'maintenance.team'
maintenance_type
Selection
default='corrective'
string='Maintenance Type'
args: [('corrective', 'Corrective'), ('preventive', 'Preventive')]
name
Char
required=True
args: 'Subjects'
owner_user_id
Many2one → res.users
default=<expr>
string='Created by User'
args: 'res.users'
priority
Selection
string='Priority'
args: [('0', 'Very Low'), ('1', 'Low'), ('2', 'Normal'), ('3', 'High')]
recurring_maintenance
Boolean
compute='_compute_recurring_maintenance'
readonly=False
store=True
string='Recurrent'
repeat_interval
Integer
default=1
string='Repeat Every'
repeat_type
Selection
default='forever'
string='Until'
args: [('forever', 'Forever'), ('until', 'Until')]
repeat_unit
Selection
default='week'
args: [('day', 'Days'), ('week', 'Weeks'), ('month', 'Months'), ('year', 'Years')]
repeat_until
Date
string='End Date'
request_date
Date
default=fields.Date.context_today
help='Date requested for the maintenance to happen'
tracking=True
args: 'Request Date'
schedule_date
Datetime
help='Date the maintenance team plans the maintenance. It should not differ much from the Request Date. '
args: 'Scheduled Date'
stage_id
Many2one → maintenance.stage
copy=False
default=_default_stage
group_expand='_read_group_stage_ids'
ondelete='restrict'
string='Stage'
tracking=True
args: 'maintenance.stage'
user_id
Many2one → res.users
compute='_compute_user_id'
readonly=False
store=True
string='Technician'
tracking=True
args: 'res.users'
activity_update(self)
archive_equipment_request(self)
create(self, vals_list)
reset_equipment_request(self)
write(self, vals)
done
Boolean
fold
Boolean
name
Char
required=True
translate=True
args: 'Name'
sequence
Integer
default=20
args: 'Sequence'
No public methods.
active
Boolean
default=True
color
Integer
default=0
args: 'Color Index'
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_ids
One2many → maintenance.equipment
copy=False
args: 'maintenance.equipment', 'maintenance_team_id'
member_ids
Many2many → res.users
domain="[('company_ids', 'in', company_id)]"
string='Team Members'
args: 'res.users', 'maintenance_team_users_rel'
name
Char
required=True
translate=True
args: 'Team Name'
request_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'maintenance_team_id'
todo_request_count
Integer
compute='_compute_todo_requests'
string='Number of Requests'
todo_request_count_block
Integer
compute='_compute_todo_requests'
string='Number of Requests Blocked'
todo_request_count_date
Integer
compute='_compute_todo_requests'
string='Number of Requests Scheduled'
todo_request_count_high_priority
Integer
compute='_compute_todo_requests'
string='Number of Requests in High Priority'
todo_request_count_unscheduled
Integer
compute='_compute_todo_requests'
string='Number of Requests Unscheduled'
todo_request_ids
One2many → maintenance.request
compute='_compute_todo_requests'
copy=False
string='Requests'
args: 'maintenance.request'
No public methods.
module_maintenance_worksheet
Boolean
string='Custom Maintenance Worksheets'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/16.0/maintenance |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Manufacturing/Maintenance |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Aaron Bohy, Damien Bouvy, Yannick Tivisse, Arnold Moyaux, Romeo Fragomeli, Victor Feyens, William Henrotin, Alvaro Fuentes, Pierre Paridans, tranngocson1996, Louis Wicket (wil), Mahamadasif Ansari, Sébastien Geelen (sge), Bruno Boi, Brieuc-brd, Martin Trigaux (mat), aath-odoo |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/maintenance |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:40:51 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Track equipments and maintenance requests |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_equipment_category_view_form |
equipment.category.form | maintenance.equipment.category | form | New |
hr_equipment_category_view_search |
equipment.category.search | maintenance.equipment.category | search | New |
hr_equipment_category_view_tree |
equipment.category.tree | maintenance.equipment.category | tree | New |
hr_equipment_request_view_form |
equipment.request.form | maintenance.request | form | New |
hr_equipment_request_view_graph |
equipment.request.graph | maintenance.request | graph | New |
hr_equipment_request_view_kanban |
equipment.request.kanban | maintenance.request | kanban | New |
hr_equipment_request_view_pivot |
equipment.request.pivot | maintenance.request | pivot | New |
hr_equipment_request_view_search |
equipment.request.search | maintenance.request | search | New |
hr_equipment_request_view_tree |
equipment.request.tree | maintenance.request | tree | New |
hr_equipment_stage_view_kanban |
equipment.stage.kanban | maintenance.stage | kanban | New |
hr_equipment_stage_view_search |
equipment.stage.search | maintenance.stage | search | New |
hr_equipment_stage_view_tree |
equipment.stage.tree | maintenance.stage | tree | New |
hr_equipment_view_calendar |
equipment.request.calendar | maintenance.request | calendar | New |
hr_equipment_view_form |
equipment.form | maintenance.equipment | form | New |
hr_equipment_view_kanban |
equipment.kanban | maintenance.equipment | kanban | New |
hr_equipment_view_search |
equipment.search | maintenance.equipment | search | New |
hr_equipment_view_tree |
equipment.tree | maintenance.equipment | tree | New |
maintenance_team_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_form |
maintenance.team.form | maintenance.team | form | New |
maintenance_team_view_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_search |
maintenance.team.search | maintenance.team | search | New |
maintenance_team_view_tree |
maintenance.team.tree | maintenance.team | tree | New |
view_maintenance_equipment_category_kanban |
maintenance.equipment.category.kanban | maintenance.equipment.category | kanban | New |
active
Boolean
default=True
assign_date
Date
tracking=True
args: 'Assigned Date'
category_id
Many2one → maintenance.equipment.category
group_expand='_read_group_category_ids'
string='Equipment Category'
tracking=True
args: 'maintenance.equipment.category'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
cost
Float
effective_date
Date
default=fields.Date.context_today
help='Date at which the equipment became effective. This date will be used to compute the Mean Time Between Failure.'
required=True
args: 'Effective Date'
location
Char
maintenance_count
Integer
compute='_compute_maintenance_count'
store=True
string='Maintenance Count'
maintenance_duration
Float
help='Maintenance Duration in hours.'
maintenance_ids
One2many → maintenance.request
maintenance_open_count
Integer
compute='_compute_maintenance_count'
store=True
string='Current Maintenance'
maintenance_team_id
Many2one → maintenance.team
check_company=True
ondelete='restrict'
string='Maintenance Team'
args: 'maintenance.team'
model
Char
name
Char
required=True
translate=True
args: 'Equipment Name'
next_action_date
Date
compute='_compute_next_maintenance'
store=True
string='Date of the next preventive maintenance'
note
Html
owner_user_id
Many2one → res.users
string='Owner'
tracking=True
args: 'res.users'
partner_id
Many2one → res.partner
check_company=True
string='Vendor'
args: 'res.partner'
partner_ref
Char
period
Integer
scrap_date
Date
serial_no
Char
copy=False
args: 'Serial Number'
technician_user_id
Many2one → res.users
string='Technician'
tracking=True
args: 'res.users'
warranty_date
Date
create(self, vals_list)
name_get(self)
write(self, vals)
alias_id
Many2one → mail.alias
help='Email alias for this equipment category. New emails will automatically create a new equipment under this category.'
ondelete='restrict'
required=True
args: 'mail.alias', 'Alias'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_count
Integer
compute='_compute_equipment_count'
string='Equipment'
equipment_ids
One2many → maintenance.equipment
copy=False
string='Equipments'
args: 'maintenance.equipment', 'category_id'
fold
Boolean
compute='_compute_fold'
store=True
string='Folded in Maintenance Pipe'
maintenance_count
Integer
compute='_compute_maintenance_count'
string='Maintenance Count'
maintenance_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'category_id'
name
Char
required=True
translate=True
args: 'Category Name'
note
Html
translate=True
args: 'Comments'
technician_user_id
Many2one → res.users
default=<expr>
tracking=True
args: 'res.users', 'Responsible'
No public methods.
archive
Boolean
default=False
help='Set archive to true to hide the maintenance request without deleting it.'
category_id
Many2one → maintenance.equipment.category
readonly=True
related='equipment_id.category_id'
store=True
string='Category'
args: 'maintenance.equipment.category'
close_date
Date
help='Date the maintenance was finished. '
args: 'Close Date'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
description
Html
done
Boolean
related='stage_id.done'
duration
Float
help='Duration in hours.'
equipment_id
Many2one → maintenance.equipment
check_company=True
index=True
ondelete='restrict'
string='Equipment'
args: 'maintenance.equipment'
kanban_state
Selection
default='normal'
required=True
string='Kanban State'
tracking=True
args: [('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')]
maintenance_team_id
Many2one → maintenance.team
check_company=True
default=_get_default_team_id
required=True
string='Team'
args: 'maintenance.team'
maintenance_type
Selection
default='corrective'
string='Maintenance Type'
args: [('corrective', 'Corrective'), ('preventive', 'Preventive')]
name
Char
required=True
args: 'Subjects'
owner_user_id
Many2one → res.users
default=<expr>
string='Created by User'
args: 'res.users'
priority
Selection
string='Priority'
args: [('0', 'Very Low'), ('1', 'Low'), ('2', 'Normal'), ('3', 'High')]
request_date
Date
default=fields.Date.context_today
help='Date requested for the maintenance to happen'
tracking=True
args: 'Request Date'
schedule_date
Datetime
help='Date the maintenance team plans the maintenance. It should not differ much from the Request Date. '
args: 'Scheduled Date'
stage_id
Many2one → maintenance.stage
copy=False
default=_default_stage
group_expand='_read_group_stage_ids'
ondelete='restrict'
string='Stage'
tracking=True
args: 'maintenance.stage'
user_id
Many2one → res.users
string='Technician'
tracking=True
args: 'res.users'
activity_update(self)
archive_equipment_request(self)
create(self, vals_list)
onchange_category_id(self)
onchange_equipment_id(self)
reset_equipment_request(self)
write(self, vals)
done
Boolean
fold
Boolean
name
Char
required=True
translate=True
args: 'Name'
sequence
Integer
default=20
args: 'Sequence'
No public methods.
active
Boolean
default=True
color
Integer
default=0
args: 'Color Index'
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_ids
One2many → maintenance.equipment
copy=False
args: 'maintenance.equipment', 'maintenance_team_id'
member_ids
Many2many → res.users
domain="[('company_ids', 'in', company_id)]"
string='Team Members'
args: 'res.users', 'maintenance_team_users_rel'
name
Char
required=True
translate=True
args: 'Team Name'
request_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'maintenance_team_id'
todo_request_count
Integer
compute='_compute_todo_requests'
string='Number of Requests'
todo_request_count_block
Integer
compute='_compute_todo_requests'
string='Number of Requests Blocked'
todo_request_count_date
Integer
compute='_compute_todo_requests'
string='Number of Requests Scheduled'
todo_request_count_high_priority
Integer
compute='_compute_todo_requests'
string='Number of Requests in High Priority'
todo_request_count_unscheduled
Integer
compute='_compute_todo_requests'
string='Number of Requests Unscheduled'
todo_request_ids
One2many → maintenance.request
compute='_compute_todo_requests'
copy=False
string='Requests'
args: 'maintenance.request'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/15.0/maintenance |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Manufacturing/Maintenance |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Xavier Morel, Xavier-Do, Enric Tobella, Julien Mougenot, Alvaro Fuentes, tranngocson1996, Michael Mattiello (mcm), dht-odoo, Mahamadasif Ansari, Sébastien Geelen (sge), Cao Đình Trung |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/maintenance |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:25:28 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Track equipments and maintenance requests |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_equipment_category_view_form |
equipment.category.form | maintenance.equipment.category | form | New |
hr_equipment_category_view_search |
equipment.category.search | maintenance.equipment.category | search | New |
hr_equipment_category_view_tree |
equipment.category.tree | maintenance.equipment.category | tree | New |
hr_equipment_request_view_form |
equipment.request.form | maintenance.request | form | New |
hr_equipment_request_view_graph |
equipment.request.graph | maintenance.request | graph | New |
hr_equipment_request_view_kanban |
equipment.request.kanban | maintenance.request | kanban | New |
hr_equipment_request_view_pivot |
equipment.request.pivot | maintenance.request | pivot | New |
hr_equipment_request_view_search |
equipment.request.search | maintenance.request | search | New |
hr_equipment_request_view_tree |
equipment.request.tree | maintenance.request | tree | New |
hr_equipment_stage_view_kanban |
equipment.stage.kanban | maintenance.stage | kanban | New |
hr_equipment_stage_view_search |
equipment.stage.search | maintenance.stage | search | New |
hr_equipment_stage_view_tree |
equipment.stage.tree | maintenance.stage | tree | New |
hr_equipment_view_calendar |
equipment.request.calendar | maintenance.request | calendar | New |
hr_equipment_view_form |
equipment.form | maintenance.equipment | form | New |
hr_equipment_view_kanban |
equipment.kanban | maintenance.equipment | kanban | New |
hr_equipment_view_search |
equipment.search | maintenance.equipment | search | New |
hr_equipment_view_tree |
equipment.tree | maintenance.equipment | tree | New |
maintenance_team_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_form |
maintenance.team.form | maintenance.team | form | New |
maintenance_team_view_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_search |
maintenance.team.search | maintenance.team | search | New |
maintenance_team_view_tree |
maintenance.team.tree | maintenance.team | tree | New |
view_maintenance_equipment_category_kanban |
maintenance.equipment.category.kanban | maintenance.equipment.category | kanban | New |
active
Boolean
default=True
assign_date
Date
tracking=True
args: 'Assigned Date'
category_id
Many2one → maintenance.equipment.category
group_expand='_read_group_category_ids'
string='Equipment Category'
tracking=True
args: 'maintenance.equipment.category'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
cost
Float
effective_date
Date
default=fields.Date.context_today
help='Date at which the equipment became effective. This date will be used to compute the Mean Time Between Failure.'
required=True
args: 'Effective Date'
location
Char
maintenance_count
Integer
compute='_compute_maintenance_count'
store=True
string='Maintenance Count'
maintenance_duration
Float
help='Maintenance Duration in hours.'
maintenance_ids
One2many → maintenance.request
maintenance_open_count
Integer
compute='_compute_maintenance_count'
store=True
string='Current Maintenance'
maintenance_team_id
Many2one → maintenance.team
check_company=True
ondelete='restrict'
string='Maintenance Team'
args: 'maintenance.team'
model
Char
name
Char
required=True
translate=True
args: 'Equipment Name'
next_action_date
Date
compute='_compute_next_maintenance'
store=True
string='Date of the next preventive maintenance'
note
Html
owner_user_id
Many2one → res.users
string='Owner'
tracking=True
args: 'res.users'
partner_id
Many2one → res.partner
check_company=True
string='Vendor'
args: 'res.partner'
partner_ref
Char
period
Integer
scrap_date
Date
serial_no
Char
copy=False
args: 'Serial Number'
technician_user_id
Many2one → res.users
string='Technician'
tracking=True
args: 'res.users'
warranty_date
Date
create(self, vals)
name_get(self)
write(self, vals)
alias_id
Many2one → mail.alias
help='Email alias for this equipment category. New emails will automatically create a new equipment under this category.'
ondelete='restrict'
required=True
args: 'mail.alias', 'Alias'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_count
Integer
compute='_compute_equipment_count'
string='Equipment'
equipment_ids
One2many → maintenance.equipment
copy=False
string='Equipments'
args: 'maintenance.equipment', 'category_id'
fold
Boolean
compute='_compute_fold'
store=True
string='Folded in Maintenance Pipe'
maintenance_count
Integer
compute='_compute_maintenance_count'
string='Maintenance Count'
maintenance_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'category_id'
name
Char
required=True
translate=True
args: 'Category Name'
note
Html
translate=True
args: 'Comments'
technician_user_id
Many2one → res.users
default=<expr>
tracking=True
args: 'res.users', 'Responsible'
No public methods.
archive
Boolean
default=False
help='Set archive to true to hide the maintenance request without deleting it.'
category_id
Many2one → maintenance.equipment.category
readonly=True
related='equipment_id.category_id'
store=True
string='Category'
args: 'maintenance.equipment.category'
close_date
Date
help='Date the maintenance was finished. '
args: 'Close Date'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
description
Html
done
Boolean
related='stage_id.done'
duration
Float
help='Duration in hours.'
equipment_id
Many2one → maintenance.equipment
check_company=True
index=True
ondelete='restrict'
string='Equipment'
args: 'maintenance.equipment'
kanban_state
Selection
default='normal'
required=True
string='Kanban State'
tracking=True
args: [('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')]
maintenance_team_id
Many2one → maintenance.team
check_company=True
default=_get_default_team_id
required=True
string='Team'
args: 'maintenance.team'
maintenance_type
Selection
default='corrective'
string='Maintenance Type'
args: [('corrective', 'Corrective'), ('preventive', 'Preventive')]
name
Char
required=True
args: 'Subjects'
owner_user_id
Many2one → res.users
default=<expr>
string='Created by User'
args: 'res.users'
priority
Selection
string='Priority'
args: [('0', 'Very Low'), ('1', 'Low'), ('2', 'Normal'), ('3', 'High')]
request_date
Date
default=fields.Date.context_today
help='Date requested for the maintenance to happen'
tracking=True
args: 'Request Date'
schedule_date
Datetime
help='Date the maintenance team plans the maintenance. It should not differ much from the Request Date. '
args: 'Scheduled Date'
stage_id
Many2one → maintenance.stage
copy=False
default=_default_stage
group_expand='_read_group_stage_ids'
ondelete='restrict'
string='Stage'
tracking=True
args: 'maintenance.stage'
user_id
Many2one → res.users
string='Technician'
tracking=True
args: 'res.users'
activity_update(self)
archive_equipment_request(self)
create(self, vals)
onchange_category_id(self)
onchange_equipment_id(self)
reset_equipment_request(self)
write(self, vals)
done
Boolean
fold
Boolean
name
Char
required=True
translate=True
args: 'Name'
sequence
Integer
default=20
args: 'Sequence'
No public methods.
active
Boolean
default=True
color
Integer
default=0
args: 'Color Index'
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_ids
One2many → maintenance.equipment
copy=False
args: 'maintenance.equipment', 'maintenance_team_id'
member_ids
Many2many → res.users
domain="[('company_ids', 'in', company_id)]"
string='Team Members'
args: 'res.users', 'maintenance_team_users_rel'
name
Char
required=True
translate=True
args: 'Team Name'
request_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'maintenance_team_id'
todo_request_count
Integer
compute='_compute_todo_requests'
string='Number of Requests'
todo_request_count_block
Integer
compute='_compute_todo_requests'
string='Number of Requests Blocked'
todo_request_count_date
Integer
compute='_compute_todo_requests'
string='Number of Requests Scheduled'
todo_request_count_high_priority
Integer
compute='_compute_todo_requests'
string='Number of Requests in High Priority'
todo_request_count_unscheduled
Integer
compute='_compute_todo_requests'
string='Number of Requests Unscheduled'
todo_request_ids
One2many → maintenance.request
compute='_compute_todo_requests'
copy=False
string='Requests'
args: 'maintenance.request'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/14.0/maintenance |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Manufacturing/Maintenance |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Mohammed Shekha, Nicolas Martinelli, Aaron Bohy, Barad Mahendra, Yannick Tivisse, Julien Castiaux, Xavier-Do, Victor Feyens, Enric Tobella, Sébastien Theys, fw-bot, svs-odoo, Alvaro Fuentes, Mathieu Duckerts-Antoine, David Alonso, Kevin Baptiste, tranngocson1996, Mahamadasif Ansari, Cao Đình Trung |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/tpm-maintenance-software |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:14:29 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Track equipments and maintenance requests |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
maintenance assets | ir.ui.view | qweb | Inherits web.assets_backend |
hr_equipment_category_view_form |
equipment.category.form | maintenance.equipment.category | form | New |
hr_equipment_category_view_search |
equipment.category.search | maintenance.equipment.category | search | New |
hr_equipment_category_view_tree |
equipment.category.tree | maintenance.equipment.category | tree | New |
hr_equipment_request_view_form |
equipment.request.form | maintenance.request | form | New |
hr_equipment_request_view_graph |
equipment.request.graph | maintenance.request | graph | New |
hr_equipment_request_view_kanban |
equipment.request.kanban | maintenance.request | kanban | New |
hr_equipment_request_view_pivot |
equipment.request.pivot | maintenance.request | pivot | New |
hr_equipment_request_view_search |
equipment.request.search | maintenance.request | search | New |
hr_equipment_request_view_tree |
equipment.request.tree | maintenance.request | tree | New |
hr_equipment_stage_view_kanban |
equipment.stage.kanban | maintenance.stage | kanban | New |
hr_equipment_stage_view_search |
equipment.stage.search | maintenance.stage | search | New |
hr_equipment_stage_view_tree |
equipment.stage.tree | maintenance.stage | tree | New |
hr_equipment_view_calendar |
equipment.request.calendar | maintenance.request | calendar | New |
hr_equipment_view_form |
equipment.form | maintenance.equipment | form | New |
hr_equipment_view_kanban |
equipment.kanban | maintenance.equipment | kanban | New |
hr_equipment_view_search |
equipment.search | maintenance.equipment | search | New |
hr_equipment_view_tree |
equipment.tree | maintenance.equipment | tree | New |
maintenance_team_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_form |
maintenance.team.form | maintenance.team | form | New |
maintenance_team_view_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_search |
maintenance.team.search | maintenance.team | search | New |
maintenance_team_view_tree |
maintenance.team.tree | maintenance.team | tree | New |
view_maintenance_equipment_category_kanban |
maintenance.equipment.category.kanban | maintenance.equipment.category | kanban | New |
active
Boolean
default=True
assign_date
Date
tracking=True
args: 'Assigned Date'
category_id
Many2one → maintenance.equipment.category
group_expand='_read_group_category_ids'
string='Equipment Category'
tracking=True
args: 'maintenance.equipment.category'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
cost
Float
effective_date
Date
default=fields.Date.context_today
help='Date at which the equipment became effective. This date will be used to compute the Mean Time Between Failure.'
required=True
args: 'Effective Date'
location
Char
maintenance_count
Integer
compute='_compute_maintenance_count'
store=True
string='Maintenance Count'
maintenance_duration
Float
help='Maintenance Duration in hours.'
maintenance_ids
One2many → maintenance.request
maintenance_open_count
Integer
compute='_compute_maintenance_count'
store=True
string='Current Maintenance'
maintenance_team_id
Many2one → maintenance.team
check_company=True
ondelete='restrict'
string='Maintenance Team'
args: 'maintenance.team'
model
Char
name
Char
required=True
translate=True
args: 'Equipment Name'
next_action_date
Date
compute='_compute_next_maintenance'
store=True
string='Date of the next preventive maintenance'
note
Text
owner_user_id
Many2one → res.users
string='Owner'
tracking=True
args: 'res.users'
partner_id
Many2one → res.partner
check_company=True
string='Vendor'
args: 'res.partner'
partner_ref
Char
period
Integer
scrap_date
Date
serial_no
Char
copy=False
args: 'Serial Number'
technician_user_id
Many2one → res.users
string='Technician'
tracking=True
args: 'res.users'
warranty_date
Date
create(self, vals)
name_get(self)
write(self, vals)
alias_id
Many2one → mail.alias
help='Email alias for this equipment category. New emails will automatically create a new equipment under this category.'
ondelete='restrict'
required=True
args: 'mail.alias', 'Alias'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_count
Integer
compute='_compute_equipment_count'
string='Equipment'
equipment_ids
One2many → maintenance.equipment
copy=False
string='Equipments'
args: 'maintenance.equipment', 'category_id'
fold
Boolean
compute='_compute_fold'
store=True
string='Folded in Maintenance Pipe'
maintenance_count
Integer
compute='_compute_maintenance_count'
string='Maintenance Count'
maintenance_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'category_id'
name
Char
required=True
translate=True
args: 'Category Name'
note
Text
translate=True
args: 'Comments'
technician_user_id
Many2one → res.users
default=<expr>
tracking=True
args: 'res.users', 'Responsible'
unlink(self)
archive
Boolean
default=False
help='Set archive to true to hide the maintenance request without deleting it.'
category_id
Many2one → maintenance.equipment.category
readonly=True
related='equipment_id.category_id'
store=True
string='Category'
args: 'maintenance.equipment.category'
close_date
Date
help='Date the maintenance was finished. '
args: 'Close Date'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
description
Text
done
Boolean
related='stage_id.done'
duration
Float
help='Duration in hours.'
equipment_id
Many2one → maintenance.equipment
check_company=True
index=True
ondelete='restrict'
string='Equipment'
args: 'maintenance.equipment'
kanban_state
Selection
default='normal'
required=True
string='Kanban State'
tracking=True
args: [('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')]
maintenance_team_id
Many2one → maintenance.team
check_company=True
default=_get_default_team_id
required=True
string='Team'
args: 'maintenance.team'
maintenance_type
Selection
default='corrective'
string='Maintenance Type'
args: [('corrective', 'Corrective'), ('preventive', 'Preventive')]
name
Char
required=True
args: 'Subjects'
owner_user_id
Many2one → res.users
default=<expr>
string='Created by User'
args: 'res.users'
priority
Selection
string='Priority'
args: [('0', 'Very Low'), ('1', 'Low'), ('2', 'Normal'), ('3', 'High')]
request_date
Date
default=fields.Date.context_today
help='Date requested for the maintenance to happen'
tracking=True
args: 'Request Date'
schedule_date
Datetime
help='Date the maintenance team plans the maintenance. It should not differ much from the Request Date. '
args: 'Scheduled Date'
stage_id
Many2one → maintenance.stage
copy=False
default=_default_stage
group_expand='_read_group_stage_ids'
ondelete='restrict'
string='Stage'
tracking=True
args: 'maintenance.stage'
user_id
Many2one → res.users
string='Technician'
tracking=True
args: 'res.users'
activity_update(self)
archive_equipment_request(self)
create(self, vals)
onchange_category_id(self)
onchange_equipment_id(self)
reset_equipment_request(self)
write(self, vals)
done
Boolean
fold
Boolean
name
Char
required=True
translate=True
args: 'Name'
sequence
Integer
default=20
args: 'Sequence'
No public methods.
active
Boolean
default=True
color
Integer
default=0
args: 'Color Index'
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_ids
One2many → maintenance.equipment
copy=False
args: 'maintenance.equipment', 'maintenance_team_id'
member_ids
Many2many → res.users
domain="[('company_ids', 'in', company_id)]"
string='Team Members'
args: 'res.users', 'maintenance_team_users_rel'
name
Char
required=True
translate=True
args: 'Team Name'
request_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'maintenance_team_id'
todo_request_count
Integer
compute='_compute_todo_requests'
string='Number of Requests'
todo_request_count_block
Integer
compute='_compute_todo_requests'
string='Number of Requests Blocked'
todo_request_count_date
Integer
compute='_compute_todo_requests'
string='Number of Requests Scheduled'
todo_request_count_high_priority
Integer
compute='_compute_todo_requests'
string='Number of Requests in High Priority'
todo_request_count_unscheduled
Integer
compute='_compute_todo_requests'
string='Number of Requests Unscheduled'
todo_request_ids
One2many → maintenance.request
compute='_compute_todo_requests'
copy=False
string='Requests'
args: 'maintenance.request'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/13.0/maintenance |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Operations/Maintenance |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Xavier ALT, Christophe Simonis, Xavier Morel, Simon Lejeune, Nicolas Martinelli, Damien Bouvy, Yannick Tivisse, Martin Geubelle, Odoo Online, Jigar Patel, Adrien Dieudonne, RomainLibert, Jorge Pinna Puissant, Nans Lefebvre, Alexandre Kühn, Arnold Moyaux, Adrian Torres, Xavier-Do, Sébastien Theys, fw-bot, svs-odoo, Alvaro Fuentes, David Alonso, Kevin Baptiste |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/tpm-maintenance-software |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:06:43 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Track equipments and maintenance requests |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
maintenance assets | ir.ui.view | qweb | Inherits web.assets_backend |
hr_equipment_category_view_form |
equipment.category.form | maintenance.equipment.category | form | New |
hr_equipment_category_view_search |
equipment.category.search | maintenance.equipment.category | search | New |
hr_equipment_category_view_tree |
equipment.category.tree | maintenance.equipment.category | tree | New |
hr_equipment_request_view_form |
equipment.request.form | maintenance.request | form | New |
hr_equipment_request_view_graph |
equipment.request.graph | maintenance.request | graph | New |
hr_equipment_request_view_kanban |
equipment.request.kanban | maintenance.request | kanban | New |
hr_equipment_request_view_pivot |
equipment.request.pivot | maintenance.request | pivot | New |
hr_equipment_request_view_search |
equipment.request.search | maintenance.request | search | New |
hr_equipment_request_view_tree |
equipment.request.tree | maintenance.request | tree | New |
hr_equipment_stage_view_kanban |
equipment.stage.kanban | maintenance.stage | kanban | New |
hr_equipment_stage_view_search |
equipment.stage.search | maintenance.stage | search | New |
hr_equipment_stage_view_tree |
equipment.stage.tree | maintenance.stage | tree | New |
hr_equipment_view_calendar |
equipment.request.calendar | maintenance.request | calendar | New |
hr_equipment_view_form |
equipment.form | maintenance.equipment | form | New |
hr_equipment_view_kanban |
equipment.kanban | maintenance.equipment | kanban | New |
hr_equipment_view_search |
equipment.search | maintenance.equipment | search | New |
hr_equipment_view_tree |
equipment.tree | maintenance.equipment | tree | New |
maintenance_team_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_form |
maintenance.team.form | maintenance.team | form | New |
maintenance_team_view_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_search |
maintenance.team.search | maintenance.team | search | New |
maintenance_team_view_tree |
maintenance.team.tree | maintenance.team | tree | New |
view_maintenance_equipment_category_kanban |
maintenance.equipment.category.kanban | maintenance.equipment.category | kanban | New |
active
Boolean
default=True
assign_date
Date
tracking=True
args: 'Assigned Date'
category_id
Many2one → maintenance.equipment.category
group_expand='_read_group_category_ids'
string='Equipment Category'
tracking=True
args: 'maintenance.equipment.category'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
cost
Float
effective_date
Date
default=fields.Date.context_today
help='Date at which the equipment became effective. This date will be used to compute the Mean Time Between Failure.'
required=True
args: 'Effective Date'
location
Char
maintenance_count
Integer
compute='_compute_maintenance_count'
store=True
string='Maintenance Count'
maintenance_duration
Float
help='Maintenance Duration in hours.'
maintenance_ids
One2many → maintenance.request
maintenance_open_count
Integer
compute='_compute_maintenance_count'
store=True
string='Current Maintenance'
maintenance_team_id
Many2one → maintenance.team
check_company=True
string='Maintenance Team'
args: 'maintenance.team'
model
Char
name
Char
required=True
translate=True
args: 'Equipment Name'
next_action_date
Date
compute='_compute_next_maintenance'
store=True
string='Date of the next preventive maintenance'
note
Text
owner_user_id
Many2one → res.users
string='Owner'
tracking=True
args: 'res.users'
partner_id
Many2one → res.partner
check_company=True
string='Vendor'
args: 'res.partner'
partner_ref
Char
period
Integer
scrap_date
Date
serial_no
Char
copy=False
args: 'Serial Number'
technician_user_id
Many2one → res.users
string='Technician'
tracking=True
args: 'res.users'
warranty_date
Date
create(self, vals)
name_get(self)
write(self, vals)
alias_id
Many2one → mail.alias
help='Email alias for this equipment category. New emails will automatically create a new equipment under this category.'
ondelete='restrict'
required=True
args: 'mail.alias', 'Alias'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_count
Integer
compute='_compute_equipment_count'
string='Equipment'
equipment_ids
One2many → maintenance.equipment
copy=False
string='Equipments'
args: 'maintenance.equipment', 'category_id'
fold
Boolean
compute='_compute_fold'
store=True
string='Folded in Maintenance Pipe'
maintenance_count
Integer
compute='_compute_maintenance_count'
string='Maintenance Count'
maintenance_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'category_id'
name
Char
required=True
translate=True
args: 'Category Name'
note
Text
translate=True
args: 'Comments'
technician_user_id
Many2one → res.users
default=<expr>
tracking=True
args: 'res.users', 'Responsible'
create(self, vals)
get_alias_model_name(self, vals)
get_alias_values(self)
unlink(self)
archive
Boolean
default=False
help='Set archive to true to hide the maintenance request without deleting it.'
category_id
Many2one → maintenance.equipment.category
readonly=True
related='equipment_id.category_id'
store=True
string='Category'
args: 'maintenance.equipment.category'
close_date
Date
help='Date the maintenance was finished. '
args: 'Close Date'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
description
Text
done
Boolean
related='stage_id.done'
duration
Float
help='Duration in hours.'
equipment_id
Many2one → maintenance.equipment
check_company=True
index=True
ondelete='restrict'
string='Equipment'
args: 'maintenance.equipment'
kanban_state
Selection
default='normal'
required=True
string='Kanban State'
tracking=True
args: [('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')]
maintenance_team_id
Many2one → maintenance.team
check_company=True
default=_get_default_team_id
required=True
string='Team'
args: 'maintenance.team'
maintenance_type
Selection
default='corrective'
string='Maintenance Type'
args: [('corrective', 'Corrective'), ('preventive', 'Preventive')]
name
Char
required=True
args: 'Subjects'
owner_user_id
Many2one → res.users
default=<expr>
string='Created by User'
args: 'res.users'
priority
Selection
string='Priority'
args: [('0', 'Very Low'), ('1', 'Low'), ('2', 'Normal'), ('3', 'High')]
request_date
Date
default=fields.Date.context_today
help='Date requested for the maintenance to happen'
tracking=True
args: 'Request Date'
schedule_date
Datetime
help='Date the maintenance team plans the maintenance. It should not differ much from the Request Date. '
args: 'Scheduled Date'
stage_id
Many2one → maintenance.stage
copy=False
default=_default_stage
group_expand='_read_group_stage_ids'
ondelete='restrict'
string='Stage'
tracking=True
args: 'maintenance.stage'
user_id
Many2one → res.users
string='Technician'
tracking=True
args: 'res.users'
activity_update(self)
archive_equipment_request(self)
create(self, vals)
onchange_category_id(self)
onchange_equipment_id(self)
reset_equipment_request(self)
write(self, vals)
done
Boolean
fold
Boolean
name
Char
required=True
translate=True
args: 'Name'
sequence
Integer
default=20
args: 'Sequence'
No public methods.
active
Boolean
default=True
color
Integer
default=0
args: 'Color Index'
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_ids
One2many → maintenance.equipment
copy=False
args: 'maintenance.equipment', 'maintenance_team_id'
member_ids
Many2many → res.users
domain="[('company_ids', 'in', company_id)]"
string='Team Members'
args: 'res.users', 'maintenance_team_users_rel'
name
Char
required=True
translate=True
args: 'Team Name'
request_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'maintenance_team_id'
todo_request_count
Integer
compute='_compute_todo_requests'
string='Number of Requests'
todo_request_count_block
Integer
compute='_compute_todo_requests'
string='Number of Requests Blocked'
todo_request_count_date
Integer
compute='_compute_todo_requests'
string='Number of Requests Scheduled'
todo_request_count_high_priority
Integer
compute='_compute_todo_requests'
string='Number of Requests in High Priority'
todo_request_count_unscheduled
Integer
compute='_compute_todo_requests'
string='Number of Requests Unscheduled'
todo_request_ids
One2many → maintenance.request
compute='_compute_todo_requests'
copy=False
string='Requests'
args: 'maintenance.request'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/12.0/maintenance |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Simon Lejeune, GitHub, Yannick Tivisse, Alexandre Kühn, qsm-odoo, Martin Geubelle, Pierre Masereel, Arnold Moyaux, Priyanka Kakadiya, Xavier-Do, Andrea Grazioso (agr-odoo), Kinjal Mehta, snd, Yennifer Santiago, David Alonso |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/tpm-maintenance-software |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:57:01 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Track equipments and maintenance requests |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
maintenance assets | ir.ui.view | qweb | Inherits web.assets_backend |
hr_equipment_category_view_form |
equipment.category.form | maintenance.equipment.category | form | New |
hr_equipment_category_view_search |
equipment.category.search | maintenance.equipment.category | search | New |
hr_equipment_category_view_tree |
equipment.category.tree | maintenance.equipment.category | tree | New |
hr_equipment_request_view_form |
equipment.request.form | maintenance.request | form | New |
hr_equipment_request_view_graph |
equipment.request.graph | maintenance.request | graph | New |
hr_equipment_request_view_kanban |
equipment.request.kanban | maintenance.request | kanban | New |
hr_equipment_request_view_pivot |
equipment.request.pivot | maintenance.request | pivot | New |
hr_equipment_request_view_search |
equipment.request.search | maintenance.request | search | New |
hr_equipment_request_view_tree |
equipment.request.tree | maintenance.request | tree | New |
hr_equipment_stage_view_kanban |
equipment.stage.kanban | maintenance.stage | kanban | New |
hr_equipment_stage_view_search |
equipment.stage.search | maintenance.stage | search | New |
hr_equipment_stage_view_tree |
equipment.stage.tree | maintenance.stage | tree | New |
hr_equipment_view_calendar |
equipment.request.calendar | maintenance.request | calendar | New |
hr_equipment_view_form |
equipment.form | maintenance.equipment | form | New |
hr_equipment_view_kanban |
equipment.kanban | maintenance.equipment | kanban | New |
hr_equipment_view_search |
equipment.search | maintenance.equipment | search | New |
hr_equipment_view_tree |
equipment.tree | maintenance.equipment | tree | New |
maintenance_team_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_form |
maintenance.team.form | maintenance.team | form | New |
maintenance_team_view_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_search |
maintenance.team.search | maintenance.team | search | New |
maintenance_team_view_tree |
maintenance.team.tree | maintenance.team | tree | New |
view_maintenance_equipment_category_kanban |
maintenance.equipment.category.kanban | maintenance.equipment.category | kanban | New |
active
Boolean
default=True
assign_date
Date
track_visibility='onchange'
args: 'Assigned Date'
category_id
Many2one → maintenance.equipment.category
group_expand='_read_group_category_ids'
string='Equipment Category'
track_visibility='onchange'
args: 'maintenance.equipment.category'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
cost
Float
effective_date
Date
default=fields.Date.context_today
help='Date at which the equipment became effective. This date will be used to compute the Mean Time Between Failure.'
required=True
args: 'Effective Date'
location
Char
maintenance_count
Integer
compute='_compute_maintenance_count'
store=True
string='Maintenance Count'
maintenance_duration
Float
help='Maintenance Duration in hours.'
maintenance_ids
One2many → maintenance.request
maintenance_open_count
Integer
compute='_compute_maintenance_count'
store=True
string='Current Maintenance'
maintenance_team_id
Many2one → maintenance.team
string='Maintenance Team'
args: 'maintenance.team'
model
Char
name
Char
required=True
translate=True
args: 'Equipment Name'
next_action_date
Date
compute='_compute_next_maintenance'
store=True
string='Date of the next preventive maintenance'
note
Text
owner_user_id
Many2one → res.users
string='Owner'
track_visibility='onchange'
args: 'res.users'
partner_id
Many2one → res.partner
domain="[('supplier', '=', 1)]"
string='Vendor'
args: 'res.partner'
partner_ref
Char
period
Integer
scrap_date
Date
serial_no
Char
copy=False
args: 'Serial Number'
technician_user_id
Many2one → res.users
oldname='user_id'
string='Technician'
track_visibility='onchange'
args: 'res.users'
warranty_date
Date
oldname='warranty'
args: 'Warranty Expiration Date'
create(self, vals)
name_get(self)
write(self, vals)
alias_id
Many2one → mail.alias
help='Email alias for this equipment category. New emails will automatically create a new equipment under this category.'
ondelete='restrict'
required=True
args: 'mail.alias', 'Alias'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_count
Integer
compute='_compute_equipment_count'
string='Equipment'
equipment_ids
One2many → maintenance.equipment
copy=False
string='Equipments'
args: 'maintenance.equipment', 'category_id'
fold
Boolean
compute='_compute_fold'
store=True
string='Folded in Maintenance Pipe'
maintenance_count
Integer
compute='_compute_maintenance_count'
string='Maintenance Count'
maintenance_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'category_id'
name
Char
required=True
translate=True
args: 'Category Name'
note
Text
translate=True
args: 'Comments'
technician_user_id
Many2one → res.users
default=<expr>
oldname='user_id'
track_visibility='onchange'
args: 'res.users', 'Responsible'
create(self, vals)
get_alias_model_name(self, vals)
get_alias_values(self)
unlink(self)
archive
Boolean
default=False
help='Set archive to true to hide the maintenance request without deleting it.'
category_id
Many2one → maintenance.equipment.category
readonly=True
related='equipment_id.category_id'
store=True
string='Category'
args: 'maintenance.equipment.category'
close_date
Date
help='Date the maintenance was finished. '
args: 'Close Date'
color
Integer
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
description
Text
duration
Float
help='Duration in hours and minutes.'
equipment_id
Many2one → maintenance.equipment
index=True
ondelete='restrict'
string='Equipment'
args: 'maintenance.equipment'
kanban_state
Selection
default='normal'
required=True
string='Kanban State'
track_visibility='onchange'
args: [('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')]
maintenance_team_id
Many2one → maintenance.team
default=_get_default_team_id
required=True
string='Team'
args: 'maintenance.team'
maintenance_type
Selection
default='corrective'
string='Maintenance Type'
args: [('corrective', 'Corrective'), ('preventive', 'Preventive')]
name
Char
required=True
args: 'Subjects'
owner_user_id
Many2one → res.users
default=<expr>
string='Created by User'
args: 'res.users'
priority
Selection
string='Priority'
args: [('0', 'Very Low'), ('1', 'Low'), ('2', 'Normal'), ('3', 'High')]
request_date
Date
default=fields.Date.context_today
help='Date requested for the maintenance to happen'
track_visibility='onchange'
args: 'Request Date'
schedule_date
Datetime
help='Date the maintenance team plans the maintenance. It should not differ much from the Request Date. '
args: 'Scheduled Date'
stage_id
Many2one → maintenance.stage
copy=False
default=_default_stage
group_expand='_read_group_stage_ids'
ondelete='restrict'
string='Stage'
track_visibility='onchange'
args: 'maintenance.stage'
user_id
Many2one → res.users
oldname='technician_user_id'
string='Technician'
track_visibility='onchange'
args: 'res.users'
activity_update(self)
archive_equipment_request(self)
create(self, vals)
onchange_category_id(self)
onchange_equipment_id(self)
reset_equipment_request(self)
write(self, vals)
done
Boolean
fold
Boolean
name
Char
required=True
translate=True
args: 'Name'
sequence
Integer
default=20
args: 'Sequence'
No public methods.
active
Boolean
default=True
color
Integer
default=0
args: 'Color Index'
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
equipment_ids
One2many → maintenance.equipment
copy=False
args: 'maintenance.equipment', 'maintenance_team_id'
member_ids
Many2many → res.users
string='Team Members'
args: 'res.users', 'maintenance_team_users_rel'
name
Char
required=True
translate=True
request_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'maintenance_team_id'
todo_request_count
Integer
compute='_compute_todo_requests'
string='Number of Requests'
todo_request_count_block
Integer
compute='_compute_todo_requests'
string='Number of Requests Blocked'
todo_request_count_date
Integer
compute='_compute_todo_requests'
string='Number of Requests Scheduled'
todo_request_count_high_priority
Integer
compute='_compute_todo_requests'
string='Number of Requests in High Priority'
todo_request_count_unscheduled
Integer
compute='_compute_todo_requests'
string='Number of Requests Unscheduled'
todo_request_ids
One2many → maintenance.request
compute='_compute_todo_requests'
copy=False
string='Requests'
args: 'maintenance.request'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/11.0/maintenance |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Christophe Simonis, Simon Lejeune, xmo-odoo, Aaron Bohy, GitHub, Lucas Perais (lpe), Yannick Tivisse, qsm-odoo, Martin Geubelle, Odoo Online, Pierre Masereel, DVE, Adrien Dieudonne |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:53:43 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Track equipment and manage maintenance requests. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
maintenance assets | ir.ui.view | qweb | Inherits web.assets_backend |
hr_equipment_category_view_form |
equipment.category.form | maintenance.equipment.category | form | New |
hr_equipment_category_view_search |
equipment.category.search | maintenance.equipment.category | search | New |
hr_equipment_category_view_tree |
equipment.category.tree | maintenance.equipment.category | tree | New |
hr_equipment_request_view_form |
equipment.request.form | maintenance.request | form | New |
hr_equipment_request_view_graph |
equipment.request.graph | maintenance.request | graph | New |
hr_equipment_request_view_kanban |
equipment.request.kanban | maintenance.request | kanban | New |
hr_equipment_request_view_pivot |
equipment.request.pivot | maintenance.request | pivot | New |
hr_equipment_request_view_search |
equipment.request.search | maintenance.request | search | New |
hr_equipment_request_view_tree |
equipment.request.tree | maintenance.request | tree | New |
hr_equipment_stage_view_kanban |
equipment.stage.kanban | maintenance.stage | kanban | New |
hr_equipment_stage_view_search |
equipment.stage.search | maintenance.stage | search | New |
hr_equipment_stage_view_tree |
equipment.stage.tree | maintenance.stage | tree | New |
hr_equipment_view_calendar |
equipment.request.calendar | maintenance.request | calendar | New |
hr_equipment_view_form |
equipment.form | maintenance.equipment | form | New |
hr_equipment_view_kanban |
equipment.kanban | maintenance.equipment | kanban | New |
hr_equipment_view_search |
equipment.search | maintenance.equipment | search | New |
hr_equipment_view_tree |
equipment.tree | maintenance.equipment | tree | New |
maintenance_team_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_form |
maintenance.team.form | maintenance.team | form | New |
maintenance_team_view_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_tree |
maintenance.team.tree | maintenance.team | tree | New |
view_maintenance_equipment_category_kanban |
maintenance.equipment.category.kanban | maintenance.equipment.category | kanban | New |
active
Boolean
default=True
assign_date
Date
track_visibility='onchange'
args: 'Assigned Date'
category_id
Many2one → maintenance.equipment.category
group_expand='_read_group_category_ids'
string='Equipment Category'
track_visibility='onchange'
args: 'maintenance.equipment.category'
color
Integer
cost
Float
location
Char
maintenance_count
Integer
compute='_compute_maintenance_count'
store=True
string='Maintenance'
maintenance_duration
Float
help='Maintenance Duration in hours.'
maintenance_ids
One2many → maintenance.request
maintenance_open_count
Integer
compute='_compute_maintenance_count'
store=True
string='Current Maintenance'
maintenance_team_id
Many2one → maintenance.team
string='Maintenance Team'
args: 'maintenance.team'
model
Char
name
Char
required=True
translate=True
args: 'Equipment Name'
next_action_date
Date
compute='_compute_next_maintenance'
store=True
string='Date of the next preventive maintenance'
note
Text
owner_user_id
Many2one → res.users
string='Owner'
track_visibility='onchange'
args: 'res.users'
partner_id
Many2one → res.partner
domain="[('supplier', '=', 1)]"
string='Vendor'
args: 'res.partner'
partner_ref
Char
period
Integer
scrap_date
Date
serial_no
Char
copy=False
args: 'Serial Number'
technician_user_id
Many2one → res.users
oldname='user_id'
string='Technician'
track_visibility='onchange'
args: 'res.users'
warranty
Date
create(self, vals)
name_get(self)
name_search(self, name, args=None, operator='ilike', limit=100)
write(self, vals)
alias_id
Many2one → mail.alias
help='Email alias for this equipment category. New emails will automatically create new maintenance request for this equipment category.'
ondelete='restrict'
required=True
args: 'mail.alias', 'Alias'
color
Integer
equipment_count
Integer
compute='_compute_equipment_count'
string='Equipment'
equipment_ids
One2many → maintenance.equipment
copy=False
string='Equipments'
args: 'maintenance.equipment', 'category_id'
fold
Boolean
compute='_compute_fold'
store=True
string='Folded in Maintenance Pipe'
maintenance_count
Integer
compute='_compute_maintenance_count'
string='Maintenance'
maintenance_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'category_id'
name
Char
required=True
translate=True
args: 'Category Name'
note
Text
translate=True
args: 'Comments'
technician_user_id
Many2one → res.users
default=<expr>
oldname='user_id'
track_visibility='onchange'
args: 'res.users', 'Responsible'
create(self, vals)
get_alias_model_name(self, vals)
get_alias_values(self)
unlink(self)
archive
Boolean
default=False
help='Set archive to true to hide the maintenance request without deleting it.'
category_id
Many2one → maintenance.equipment.category
readonly=True
related='equipment_id.category_id'
store=True
string='Category'
args: 'maintenance.equipment.category'
close_date
Date
help='Date the maintenance was finished. '
args: 'Close Date'
color
Integer
description
Text
duration
Float
help='Duration in minutes and seconds.'
equipment_id
Many2one → maintenance.equipment
index=True
string='Equipment'
args: 'maintenance.equipment'
kanban_state
Selection
default='normal'
required=True
string='Kanban State'
track_visibility='onchange'
args: [('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')]
maintenance_team_id
Many2one → maintenance.team
default=_get_default_team_id
required=True
string='Team'
args: 'maintenance.team'
maintenance_type
Selection
default='corrective'
string='Maintenance Type'
args: [('corrective', 'Corrective'), ('preventive', 'Preventive')]
name
Char
required=True
args: 'Subjects'
owner_user_id
Many2one → res.users
default=<expr>
string='Created by'
args: 'res.users'
priority
Selection
string='Priority'
args: [('0', 'Very Low'), ('1', 'Low'), ('2', 'Normal'), ('3', 'High')]
request_date
Date
default=fields.Date.context_today
help='Date requested for the maintenance to happen'
track_visibility='onchange'
args: 'Request Date'
schedule_date
Datetime
help='Date the maintenance team plans the maintenance. It should not differ much from the Request Date. '
args: 'Scheduled Date'
stage_id
Many2one → maintenance.stage
default=_default_stage
group_expand='_read_group_stage_ids'
string='Stage'
track_visibility='onchange'
args: 'maintenance.stage'
technician_user_id
Many2one → res.users
oldname='user_id'
string='Owner'
track_visibility='onchange'
args: 'res.users'
archive_equipment_request(self)
create(self, vals)
onchange_category_id(self)
onchange_equipment_id(self)
reset_equipment_request(self)
write(self, vals)
done
Boolean
fold
Boolean
name
Char
required=True
translate=True
args: 'Name'
sequence
Integer
default=20
args: 'Sequence'
No public methods.
color
Integer
default=0
args: 'Color Index'
equipment_ids
One2many → maintenance.equipment
copy=False
args: 'maintenance.equipment', 'maintenance_team_id'
member_ids
Many2many → res.users
string='Team Members'
args: 'res.users', 'maintenance_team_users_rel'
name
Char
required=True
translate=True
request_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'maintenance_team_id'
todo_request_count
Integer
compute='_compute_todo_requests'
string='Number of Requests'
todo_request_count_block
Integer
compute='_compute_todo_requests'
string='Number of Requests Blocked'
todo_request_count_date
Integer
compute='_compute_todo_requests'
string='Number of Requests Scheduled'
todo_request_count_high_priority
Integer
compute='_compute_todo_requests'
string='Number of Requests in High Priority'
todo_request_count_unscheduled
Integer
compute='_compute_todo_requests'
string='Number of Requests Unscheduled'
todo_request_ids
One2many → maintenance.request
compute='_compute_todo_requests'
copy=False
string='Requests'
args: 'maintenance.request'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/10.0/maintenance |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Josse Colpaert, Christophe Simonis, Nicolas Martinelli, qsm-odoo, Pierre Masereel, Adrian Torres |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:50:48 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web_kanban - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Track equipment and manage maintenance requests. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
maintenance assets | ir.ui.view | qweb | Inherits web.assets_backend |
hr_equipment_category_view_form |
equipment.category.form | maintenance.equipment.category | form | New |
hr_equipment_category_view_search |
equipment.category.search | maintenance.equipment.category | search | New |
hr_equipment_category_view_tree |
equipment.category.tree | maintenance.equipment.category | tree | New |
hr_equipment_request_view_form |
equipment.request.form | maintenance.request | form | New |
hr_equipment_request_view_graph |
equipment.request.graph | maintenance.request | graph | New |
hr_equipment_request_view_kanban |
equipment.request.kanban | maintenance.request | kanban | New |
hr_equipment_request_view_pivot |
equipment.request.pivot | maintenance.request | pivot | New |
hr_equipment_request_view_search |
equipment.request.search | maintenance.request | search | New |
hr_equipment_request_view_tree |
equipment.request.tree | maintenance.request | tree | New |
hr_equipment_stage_view_search |
equipment.stage.search | maintenance.stage | search | New |
hr_equipment_stage_view_tree |
equipment.stage.tree | maintenance.stage | tree | New |
hr_equipment_view_calendar |
equipment.request.calendar | maintenance.request | calendar | New |
hr_equipment_view_form |
equipment.form | maintenance.equipment | form | New |
hr_equipment_view_kanban |
equipment.kanban | maintenance.equipment | kanban | New |
hr_equipment_view_search |
equipment.search | maintenance.equipment | search | New |
hr_equipment_view_tree |
equipment.tree | maintenance.equipment | tree | New |
maintenance_team_kanban |
maintenance.team.kanban | maintenance.team | kanban | New |
maintenance_team_view_form |
maintenance.team.form | maintenance.team | form | New |
maintenance_team_view_tree |
maintenance.team.tree | maintenance.team | tree | New |
active
Boolean
default=True
assign_date
Date
track_visibility='onchange'
args: 'Assigned Date'
category_id
Many2one → maintenance.equipment.category
group_expand='_read_group_category_ids'
string='Equipment Category'
track_visibility='onchange'
args: 'maintenance.equipment.category'
color
Integer
cost
Float
location
Char
maintenance_count
Integer
compute='_compute_maintenance_count'
store=True
string='Maintenance'
maintenance_duration
Float
help='Maintenance Duration in minutes and seconds.'
maintenance_ids
One2many → maintenance.request
maintenance_open_count
Integer
compute='_compute_maintenance_count'
store=True
string='Current Maintenance'
maintenance_team_id
Many2one → maintenance.team
string='Maintenance Team'
args: 'maintenance.team'
model
Char
name
Char
required=True
translate=True
args: 'Equipment Name'
next_action_date
Date
compute='_compute_next_maintenance'
store=True
string='Date of the next preventive maintenance'
note
Text
owner_user_id
Many2one → res.users
string='Owner'
track_visibility='onchange'
args: 'res.users'
partner_id
Many2one → res.partner
domain="[('supplier', '=', 1)]"
string='Vendor'
args: 'res.partner'
partner_ref
Char
period
Integer
scrap_date
Date
serial_no
Char
copy=False
args: 'Serial Number'
technician_user_id
Many2one → res.users
oldname='user_id'
string='Technician'
track_visibility='onchange'
args: 'res.users'
warranty
Date
create(self, vals)
name_get(self)
name_search(self, name, args=None, operator='ilike', limit=100)
write(self, vals)
alias_id
Many2one → mail.alias
help='Email alias for this equipment category. New emails will automatically create new maintenance request for this equipment category.'
ondelete='cascade'
required=True
args: 'mail.alias', 'Alias'
color
Integer
equipment_count
Integer
compute='_compute_equipment_count'
string='Equipment'
equipment_ids
One2many → maintenance.equipment
copy=False
string='Equipments'
args: 'maintenance.equipment', 'category_id'
fold
Boolean
compute='_compute_fold'
store=True
string='Folded in Maintenance Pipe'
maintenance_count
Integer
compute='_compute_maintenance_count'
string='Maintenance'
maintenance_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'category_id'
name
Char
required=True
translate=True
args: 'Category Name'
note
Text
translate=True
args: 'Comments'
technician_user_id
Many2one → res.users
default=<expr>
oldname='user_id'
track_visibility='onchange'
args: 'res.users', 'Responsible'
create(self, vals)
get_alias_model_name(self, vals)
get_alias_values(self)
unlink(self)
archive
Boolean
default=False
help='Set archive to true to hide the maintenance request without deleting it.'
category_id
Many2one → maintenance.equipment.category
readonly=True
related='equipment_id.category_id'
store=True
string='Category'
args: 'maintenance.equipment.category'
close_date
Date
help='Date the maintenance was finished. '
args: 'Close Date'
color
Integer
description
Text
duration
Float
help='Duration in minutes and seconds.'
equipment_id
Many2one → maintenance.equipment
index=True
string='Equipment'
args: 'maintenance.equipment'
kanban_state
Selection
default='normal'
required=True
string='Kanban State'
track_visibility='onchange'
args: [('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')]
maintenance_team_id
Many2one → maintenance.team
default=_get_default_team_id
required=True
string='Team'
args: 'maintenance.team'
maintenance_type
Selection
default='corrective'
string='Maintenance Type'
args: [('corrective', 'Corrective'), ('preventive', 'Preventive')]
name
Char
required=True
args: 'Subjects'
owner_user_id
Many2one → res.users
default=<expr>
string='Created by'
args: 'res.users'
priority
Selection
string='Priority'
args: [('0', 'Very Low'), ('1', 'Low'), ('2', 'Normal'), ('3', 'High')]
request_date
Date
default=fields.Date.context_today
help='Date requested for the maintenance to happen'
track_visibility='onchange'
args: 'Request Date'
schedule_date
Datetime
help='Date the maintenance team plans the maintenance. It should not differ much from the Request Date. '
args: 'Scheduled Date'
stage_id
Many2one → maintenance.stage
default=_default_stage
group_expand='_read_group_stage_ids'
string='Stage'
track_visibility='onchange'
args: 'maintenance.stage'
technician_user_id
Many2one → res.users
oldname='user_id'
string='Owner'
track_visibility='onchange'
args: 'res.users'
archive_equipment_request(self)
create(self, vals)
onchange_category_id(self)
onchange_equipment_id(self)
reset_equipment_request(self)
write(self, vals)
done
Boolean
fold
Boolean
name
Char
required=True
translate=True
args: 'Name'
sequence
Integer
default=20
args: 'Sequence'
No public methods.
color
Integer
default=0
equipment_ids
One2many → maintenance.equipment
copy=False
args: 'maintenance.equipment', 'maintenance_team_id'
name
Char
required=True
partner_id
Many2one → res.partner
string='Subcontracting Partner'
args: 'res.partner'
request_ids
One2many → maintenance.request
copy=False
args: 'maintenance.request', 'maintenance_team_id'
todo_request_count
Integer
compute='_compute_todo_requests'
todo_request_count_block
Integer
compute='_compute_todo_requests'
todo_request_count_date
Integer
compute='_compute_todo_requests'
todo_request_count_high_priority
Integer
compute='_compute_todo_requests'
todo_request_ids
One2many → maintenance.request
compute='_compute_todo_requests'
copy=False
args: 'maintenance.request'
No public methods.