Maintenance Plan

maintenance_plan
REPOSITORY
REPOSITORYOCA/maintenance
GIT
GIThttps://github.com/OCA/maintenance.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/maintenance/tree/19.0/maintenance_plan
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYMaintenance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
COMMITTERS
COMMITTERSOCA-git-bot, oca-ci, JasminSForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/maintenance
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/maintenance:
    - base_maintenance
odoo/odoo:
    - maintenance
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module extends the functionality of Odoo Maintenance module by
allowing an equipment to have different preventive maintenance kinds.

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
hr_equipment_request_view_form maintenance.request.form@maintenance_plan maintenance.request field Inherits maintenance.hr_equipment_request_view_form
hr_equipment_request_view_tree equipment.request.list@maintenance_plan maintenance.request xpath Inherits maintenance.hr_equipment_request_view_tree
hr_equipment_view_form equipment.form@maintenance_plan maintenance.equipment div Inherits maintenance.hr_equipment_view_form
hr_equipment_view_search equipment.search@maintenance_plan maintenance.equipment xpath Inherits maintenance.hr_equipment_view_search
maintenance_kind_view_tree maintenance.kind.list@maintenance_plan maintenance.kind list New
maintenance_plan_view_form maintenance.plan.form@maintenance_plan maintenance.plan form New
maintenance_plan_view_search maintenance.plan.search@maintenance_plan maintenance.plan search New
maintenance_plan_view_tree maintenance.plan.list@maintenance_plan maintenance.plan list New
report_maintenance_request_document report_maintenance_request_document ir.ui.view qweb Inherits base_maintenance.report_maintenance_request_document
res_config_settings_view_form res.config.settings.view.form@maintenance_plan res.config.settings xpath Inherits maintenance.res_config_settings_view_form
Models touched (5)

New fields (4)
  • maintenance_plan_count Integer
    compute='_compute_maintenance_plan_count' store=True
  • maintenance_plan_ids One2many → maintenance.plan
    comodel_name='maintenance.plan' inverse_name='equipment_id' string='Maintenance Plan'
  • maintenance_team_required Boolean
    compute='_compute_team_required'
  • search_maintenance_plan_count Integer
    compute='_compute_search_maintenance_plan_count' string='Maintenance All Plan Count'
Public methods (0)

No public methods.

New fields (2)
  • active Boolean
    default=True required=True args: 'Active Kind'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (24)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • duration Float
    help='Maintenance duration in hours' string='Duration (hours)'
  • equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' ondelete='cascade' string='Equipment'
  • generate_domain Char
    string='Apply on'
  • generate_with_domain Boolean
  • 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
    args: 'PDF'
  • instruction_text Html
    args: 'Text'
  • instruction_type Selection
    default='text' string='Instruction' args: [('pdf', 'PDF'), ('google_slide', 'Google Slide'), ('text', 'Text')]
  • interval Integer
    default=1 help='Interval between each maintenance' string='Frequency'
  • interval_step Selection
    default='year' help='Let the event automatically repeat at that interval step' string='Recurrence' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • maintenance_count Integer
    compute='_compute_maintenance_count' store=True string='Maintenance'
  • maintenance_ids One2many → maintenance.request
    string='Maintenance requests' args: 'maintenance.request', 'maintenance_plan_id'
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance Kind'
  • maintenance_open_count Integer
    compute='_compute_maintenance_count' store=True string='Current Maintenance'
  • maintenance_plan_horizon Integer
    default=1 help='Maintenance planning horizon. Only the maintenance requests inside the horizon will be created.' string='Planning Horizon period'
  • maintenance_team_id Many2one → maintenance.team
    args: 'maintenance.team'
  • name Char
    args: 'Description'
  • next_maintenance_date Date
    compute='_compute_next_maintenance' store=True
  • planning_step Selection
    default='year' help='Let the event automatically repeat at that interval' string='Planning Horizon step' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • search_equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' compute='_compute_search_equipment' search='_search_search_equipment'
  • skip_notify_follower_on_requests Boolean
    default=True string='Do not notify to follower when creating requests?'
  • start_maintenance_date Date
    default=fields.Date.context_today help='Date from which the maintenance will we active'
Public methods (3)
  • button_manual_request_generation(self)
    Call the same method that the cron for generating manually the maintenance requests.
  • get_relativedelta(self, interval, step)
  • unlink(self)
    Restrict deletion of maintenance plan should there be maintenance requests of this kind which are not done for its equipment

New fields (2)
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance Kind'
  • maintenance_plan_id Many2one → maintenance.plan
    comodel_name='maintenance.plan' ondelete='restrict' string='Maintenance Plan'
Public methods (0)

No public methods.

New fields (1)
  • module_maintenance_plan_only Boolean
    args: 'Hide built-in recurrent settings'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/maintenance
GIT
GIThttps://github.com/OCA/maintenance.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/maintenance/tree/18.0/maintenance_plan
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYMaintenance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
COMMITTERS
COMMITTERSYann Papouin, Weblate, OCA-git-bot, oca-ci, LauraCForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/maintenance
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/maintenance:
    - base_maintenance
odoo/odoo:
    - maintenance
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module extends the functionality of Odoo Maintenance module by
allowing an equipment to have different preventive maintenance kinds.

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
hr_equipment_request_view_form maintenance.request.form@maintenance_plan maintenance.request field Inherits maintenance.hr_equipment_request_view_form
hr_equipment_request_view_tree equipment.request.list@maintenance_plan maintenance.request xpath Inherits maintenance.hr_equipment_request_view_tree
hr_equipment_view_form equipment.form@maintenance_plan maintenance.equipment div Inherits maintenance.hr_equipment_view_form
hr_equipment_view_search equipment.search@maintenance_plan maintenance.equipment xpath Inherits maintenance.hr_equipment_view_search
maintenance_kind_view_tree maintenance.kind.list@maintenance_plan maintenance.kind list New
maintenance_plan_view_form maintenance.plan.form@maintenance_plan maintenance.plan form New
maintenance_plan_view_search maintenance.plan.search@maintenance_plan maintenance.plan search New
maintenance_plan_view_tree maintenance.plan.list@maintenance_plan maintenance.plan list New
report_maintenance_request_document report_maintenance_request_document ir.ui.view qweb Inherits base_maintenance.report_maintenance_request_document
res_config_settings_view_form res.config.settings.view.form@maintenance_plan res.config.settings xpath Inherits maintenance.res_config_settings_view_form
Models touched (5)

New fields (4)
  • maintenance_plan_count Integer
    compute='_compute_maintenance_plan_count' store=True
  • maintenance_plan_ids One2many → maintenance.plan
    comodel_name='maintenance.plan' inverse_name='equipment_id' string='Maintenance Plan'
  • maintenance_team_required Boolean
    compute='_compute_team_required'
  • search_maintenance_plan_count Integer
    compute='_compute_search_maintenance_plan_count' string='Maintenance All Plan Count'
Public methods (0)

No public methods.

New fields (2)
  • active Boolean
    default=True required=True args: 'Active Kind'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (24)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • duration Float
    help='Maintenance duration in hours' string='Duration (hours)'
  • equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' ondelete='cascade' string='Equipment'
  • generate_domain Char
    string='Apply on'
  • generate_with_domain Boolean
  • 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
    args: 'PDF'
  • instruction_text Html
    args: 'Text'
  • instruction_type Selection
    default='text' string='Instruction' args: [('pdf', 'PDF'), ('google_slide', 'Google Slide'), ('text', 'Text')]
  • interval Integer
    default=1 help='Interval between each maintenance' string='Frequency'
  • interval_step Selection
    default='year' help='Let the event automatically repeat at that interval step' string='Recurrence' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • maintenance_count Integer
    compute='_compute_maintenance_count' store=True string='Maintenance'
  • maintenance_ids One2many → maintenance.request
    string='Maintenance requests' args: 'maintenance.request', 'maintenance_plan_id'
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance Kind'
  • maintenance_open_count Integer
    compute='_compute_maintenance_count' store=True string='Current Maintenance'
  • maintenance_plan_horizon Integer
    default=1 help='Maintenance planning horizon. Only the maintenance requests inside the horizon will be created.' string='Planning Horizon period'
  • maintenance_team_id Many2one → maintenance.team
    args: 'maintenance.team'
  • name Char
    args: 'Description'
  • next_maintenance_date Date
    compute='_compute_next_maintenance' store=True
  • planning_step Selection
    default='year' help='Let the event automatically repeat at that interval' string='Planning Horizon step' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • search_equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' compute='_compute_search_equipment' search='_search_search_equipment'
  • skip_notify_follower_on_requests Boolean
    default=True string='Do not notify to follower when creating requests?'
  • start_maintenance_date Date
    default=fields.Date.context_today help='Date from which the maintenance will we active'
Public methods (3)
  • button_manual_request_generation(self)
    Call the same method that the cron for generating manually the maintenance requests.
  • get_relativedelta(self, interval, step)
  • unlink(self)
    Restrict deletion of maintenance plan should there be maintenance requests of this kind which are not done for its equipment

New fields (2)
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance Kind'
  • maintenance_plan_id Many2one → maintenance.plan
    comodel_name='maintenance.plan' ondelete='restrict' string='Maintenance Plan'
Public methods (0)

No public methods.

New fields (1)
  • module_maintenance_plan_only Boolean
    args: 'Hide built-in recurrent settings'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/maintenance
GIT
GIThttps://github.com/OCA/maintenance.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/maintenance/tree/17.0/maintenance_plan
VERSION
VERSION 1.1.2
CATEGORY
CATEGORYMaintenance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
COMMITTERS
COMMITTERSCarlos Lopez, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Vincent Hatakeyama, FernandoRomera
WEBSITE
WEBSITEhttps://github.com/OCA/maintenance
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:06
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/maintenance:
    - base_maintenance
odoo/odoo:
    - maintenance
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module extends the functionality of Odoo Maintenance module by
allowing an equipment to have different preventive maintenance kinds.

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
hr_equipment_request_view_form equipment.request.form.inherit maintenance.request field Inherits base_maintenance.equipment_request_view_form
hr_equipment_request_view_tree equipment.request.tree maintenance.request xpath Inherits maintenance.hr_equipment_request_view_tree
hr_equipment_view_form equipment.form.inherit maintenance.equipment div Inherits maintenance.hr_equipment_view_form
hr_equipment_view_search equipment.search-oxigen maintenance.equipment xpath Inherits maintenance.hr_equipment_view_search
maintenance_kind_view_tree maintenance.kind.tree maintenance.kind tree New
maintenance_plan_view_form maintenance.plan.form maintenance.plan form New
maintenance_plan_view_search maintenance.plan.search maintenance.plan search New
maintenance_plan_view_tree maintenance.plan.tree maintenance.plan tree New
report_maintenance_request_document report_maintenance_request_document ir.ui.view qweb Inherits base_maintenance.report_maintenance_request_document
Models touched (4)

New fields (5)
  • maintenance_plan_count Integer
    compute='_compute_maintenance_plan_count' store=True
  • maintenance_plan_ids One2many → maintenance.plan
    comodel_name='maintenance.plan' inverse_name='equipment_id' string='Maintenance plan'
  • maintenance_team_required Boolean
    compute='_compute_team_required'
  • notes Text
  • search_maintenance_plan_count Integer
    compute='_compute_search_maintenance_plan_count' string='Maintenance All Plan Count'
Public methods (0)

No public methods.

New fields (2)
  • active Boolean
    default=True required=True args: 'Active Kind'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (21)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • duration Float
    help='Maintenance duration in hours' string='Duration (hours)'
  • equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' ondelete='cascade' string='Equipment'
  • generate_domain Char
    string='Apply on'
  • generate_with_domain Boolean
  • interval Integer
    default=1 help='Interval between each maintenance' string='Frequency'
  • interval_step Selection
    default='year' help='Let the event automatically repeat at that interval step' string='Recurrence' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • maintenance_count Integer
    compute='_compute_maintenance_count' store=True string='Maintenance'
  • maintenance_ids One2many → maintenance.request
    string='Maintenance requests' args: 'maintenance.request', 'maintenance_plan_id'
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance Kind'
  • maintenance_open_count Integer
    compute='_compute_maintenance_count' store=True string='Current Maintenance'
  • maintenance_plan_horizon Integer
    default=1 help='Maintenance planning horizon. Only the maintenance requests inside the horizon will be created.' string='Planning Horizon period'
  • maintenance_team_id Many2one → maintenance.team
    args: 'maintenance.team'
  • name Char
    args: 'Description'
  • next_maintenance_date Date
    compute='_compute_next_maintenance' store=True
  • note Html
  • planning_step Selection
    default='year' help='Let the event automatically repeat at that interval' string='Planning Horizon step' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • search_equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' compute='_compute_search_equipment' search='_search_search_equipment'
  • skip_notify_follower_on_requests Boolean
    default=True string='Do not notify to follower when creating requests?'
  • start_maintenance_date Date
    default=fields.Date.context_today help='Date from which the maintenance will we active'
Public methods (4)
  • button_manual_request_generation(self)
    Call the same method that the cron for generating manually the maintenance requests.
  • get_relativedelta(self, interval, step)
  • name_get(self)
  • unlink(self)
    Restrict deletion of maintenance plan should there be maintenance requests of this kind which are not done for its equipment

New fields (3)
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance kind'
  • maintenance_plan_id Many2one → maintenance.plan
    comodel_name='maintenance.plan' ondelete='restrict' string='Maintenance plan'
  • note Html
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/maintenance
GIT
GIThttps://github.com/OCA/maintenance.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/maintenance/tree/16.0/maintenance_plan
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYMaintenance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
COMMITTERS
COMMITTERSWeblate, oca-ci, Alexei Rivera
WEBSITE
WEBSITEhttps://github.com/OCA/maintenance
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/maintenance:
    - base_maintenance
odoo/odoo:
    - maintenance
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
hr_equipment_request_view_form equipment.request.form.inherit maintenance.request field Inherits base_maintenance.equipment_request_view_form
hr_equipment_request_view_tree equipment.request.tree maintenance.request xpath Inherits maintenance.hr_equipment_request_view_tree
hr_equipment_view_form equipment.form.inherit maintenance.equipment div Inherits maintenance.hr_equipment_view_form
hr_equipment_view_search equipment.search-oxigen maintenance.equipment xpath Inherits maintenance.hr_equipment_view_search
maintenance_kind_view_tree maintenance.kind.tree maintenance.kind tree New
maintenance_plan_view_form maintenance.plan.form maintenance.plan form New
maintenance_plan_view_search maintenance.plan.search maintenance.plan search New
maintenance_plan_view_tree maintenance.plan.tree maintenance.plan tree New
report_maintenance_request_document report_maintenance_request_document ir.ui.view qweb Inherits base_maintenance.report_maintenance_request_document
Models touched (4)

New fields (5)
  • maintenance_plan_count Integer
    compute='_compute_maintenance_plan_count' store=True
  • maintenance_plan_ids One2many → maintenance.plan
    comodel_name='maintenance.plan' inverse_name='equipment_id' string='Maintenance plan'
  • maintenance_team_required Boolean
    compute='_compute_team_required'
  • notes Text
  • search_maintenance_plan_count Integer
    compute='_compute_search_maintenance_plan_count' string='Maintenance All Plan Count'
Public methods (0)

No public methods.

New fields (2)
  • active Boolean
    default=True required=True args: 'Active Kind'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (21)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • duration Float
    help='Maintenance duration in hours' string='Duration (hours)'
  • equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' ondelete='cascade' string='Equipment'
  • generate_domain Char
    string='Apply on'
  • generate_with_domain Boolean
  • interval Integer
    default=1 help='Interval between each maintenance' string='Frequency'
  • interval_step Selection
    default='year' help='Let the event automatically repeat at that interval step' string='Recurrence' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • maintenance_count Integer
    compute='_compute_maintenance_count' store=True string='Maintenance'
  • maintenance_ids One2many → maintenance.request
    string='Maintenance requests' args: 'maintenance.request', 'maintenance_plan_id'
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance Kind'
  • maintenance_open_count Integer
    compute='_compute_maintenance_count' store=True string='Current Maintenance'
  • maintenance_plan_horizon Integer
    default=1 help='Maintenance planning horizon. Only the maintenance requests inside the horizon will be created.' string='Planning Horizon period'
  • maintenance_team_id Many2one → maintenance.team
    args: 'maintenance.team'
  • name Char
    args: 'Description'
  • next_maintenance_date Date
    compute='_compute_next_maintenance' store=True
  • note Html
  • planning_step Selection
    default='year' help='Let the event automatically repeat at that interval' string='Planning Horizon step' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • search_equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' compute='_compute_search_equipment' search='_search_search_equipment'
  • skip_notify_follower_on_requests Boolean
    default=True string='Do not notify to follower when creating requests?'
  • start_maintenance_date Date
    default=fields.Date.context_today help='Date from which the maintenance will we active'
Public methods (4)
  • button_manual_request_generation(self)
    Call the same method that the cron for generating manually the maintenance requests.
  • get_relativedelta(self, interval, step)
  • name_get(self)
  • unlink(self)
    Restrict deletion of maintenance plan should there be maintenance requests of this kind which are not done for its equipment

New fields (3)
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance kind'
  • maintenance_plan_id Many2one → maintenance.plan
    comodel_name='maintenance.plan' ondelete='restrict' string='Maintenance plan'
  • note Html
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/maintenance
GIT
GIThttps://github.com/OCA/maintenance.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/maintenance/tree/15.0/maintenance_plan
VERSION
VERSION 1.7.2
CATEGORY
CATEGORYMaintenance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
COMMITTERS
COMMITTERSEnric Tobella, Lois Rilo, OCA Transbot, Miquel Raïch, Víctor Martínez, Weblate, OCA-git-bot, sergiocorato, oca-ci, Stefano Consolaro, mariadforgeflow, Bernat Puig Font
WEBSITE
WEBSITEhttps://github.com/OCA/maintenance
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/maintenance:
    - base_maintenance
odoo/odoo:
    - maintenance
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
hr_equipment_request_view_form equipment.request.form.inherit maintenance.request field Inherits base_maintenance.equipment_request_view_form
hr_equipment_request_view_tree equipment.request.tree maintenance.request xpath Inherits maintenance.hr_equipment_request_view_tree
hr_equipment_view_form equipment.form.inherit maintenance.equipment div Inherits maintenance.hr_equipment_view_form
hr_equipment_view_search equipment.search-oxigen maintenance.equipment xpath Inherits maintenance.hr_equipment_view_search
maintenance_kind_view_tree maintenance.kind.tree maintenance.kind tree New
maintenance_plan_view_form maintenance.plan.form maintenance.plan form New
maintenance_plan_view_search maintenance.plan.search maintenance.plan search New
maintenance_plan_view_tree maintenance.plan.tree maintenance.plan tree New
report_maintenance_request_document report_maintenance_request_document ir.ui.view qweb Inherits base_maintenance.report_maintenance_request_document
Models touched (4)

New fields (5)
  • maintenance_plan_count Integer
    compute='_compute_maintenance_plan_count' store=True
  • maintenance_plan_ids One2many → maintenance.plan
    comodel_name='maintenance.plan' inverse_name='equipment_id' string='Maintenance plan'
  • maintenance_team_required Boolean
    compute='_compute_team_required'
  • notes Text
  • search_maintenance_plan_count Integer
    compute='_compute_search_maintenance_plan_count' string='Maintenance All Plan Count'
Public methods (0)

No public methods.

New fields (2)
  • active Boolean
    default=True required=True args: 'Active Kind'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (21)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • duration Float
    help='Maintenance duration in hours' string='Duration (hours)'
  • equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' ondelete='cascade' string='Equipment'
  • generate_domain Char
    string='Apply on'
  • generate_with_domain Boolean
  • interval Integer
    default=1 help='Interval between each maintenance' string='Frequency'
  • interval_step Selection
    default='year' help='Let the event automatically repeat at that interval step' string='Recurrence' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • maintenance_count Integer
    compute='_compute_maintenance_count' store=True string='Maintenance'
  • maintenance_ids One2many → maintenance.request
    string='Maintenance requests' args: 'maintenance.request', 'maintenance_plan_id'
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance Kind'
  • maintenance_open_count Integer
    compute='_compute_maintenance_count' store=True string='Current Maintenance'
  • maintenance_plan_horizon Integer
    default=1 help='Maintenance planning horizon. Only the maintenance requests inside the horizon will be created.' string='Planning Horizon period'
  • maintenance_team_id Many2one → maintenance.team
    args: 'maintenance.team'
  • name Char
    args: 'Description'
  • next_maintenance_date Date
    compute='_compute_next_maintenance' store=True
  • note Html
  • planning_step Selection
    default='year' help='Let the event automatically repeat at that interval' string='Planning Horizon step' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • search_equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' compute='_compute_search_equipment' search='_search_search_equipment'
  • skip_notify_follower_on_requests Boolean
    default=True string='Do not notify to follower when creating requests?'
  • start_maintenance_date Date
    default=fields.Date.context_today help='Date from which the maintenance will we active'
Public methods (4)
  • button_manual_request_generation(self)
    Call the same method that the cron for generating manually the maintenance requests.
  • get_relativedelta(self, interval, step)
  • name_get(self)
  • unlink(self)
    Restrict deletion of maintenance plan should there be maintenance requests of this kind which are not done for its equipment

New fields (3)
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance kind'
  • maintenance_plan_id Many2one → maintenance.plan
    comodel_name='maintenance.plan' ondelete='restrict' string='Maintenance plan'
  • note Html
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/maintenance
GIT
GIThttps://github.com/OCA/maintenance.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/maintenance/tree/14.0/maintenance_plan
VERSION
VERSION 1.6.5
CATEGORY
CATEGORYMaintenance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
COMMITTERS
COMMITTERSPedro M. Baeza, Enric Tobella, Lois Rilo, David Alonso, OCA Transbot, Miquel Raïch, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, sergiocorato, oca-ci, Stefano Consolaro, mariadforgeflow, pedrocasi, Kevin Luna, oca-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/maintenance
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:01
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/maintenance:
    - base_maintenance
odoo/odoo:
    - maintenance
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
hr_equipment_request_view_form equipment.request.form.inherit maintenance.request field Inherits base_maintenance.equipment_request_view_form
hr_equipment_request_view_tree equipment.request.tree maintenance.request xpath Inherits maintenance.hr_equipment_request_view_tree
hr_equipment_view_form equipment.form.inherit maintenance.equipment div Inherits maintenance.hr_equipment_view_form
hr_equipment_view_search equipment.search-oxigen maintenance.equipment xpath Inherits maintenance.hr_equipment_view_search
maintenance_kind_view_tree maintenance.kind.tree maintenance.kind tree New
maintenance_plan_view_form maintenance.plan.form maintenance.plan form New
maintenance_plan_view_search maintenance.plan.search maintenance.plan search New
maintenance_plan_view_tree maintenance.plan.tree maintenance.plan tree New
report_maintenance_request_document report_maintenance_request_document ir.ui.view qweb Inherits base_maintenance.report_maintenance_request_document
Models touched (4)

New fields (5)
  • maintenance_plan_count Integer
    compute='_compute_maintenance_plan_count' store=True string='Maintenance Plan Count'
  • maintenance_plan_ids One2many → maintenance.plan
    comodel_name='maintenance.plan' inverse_name='equipment_id' string='Maintenance plan'
  • maintenance_team_required Boolean
    compute='_compute_team_required'
  • notes Text
    string='Notes'
  • search_maintenance_plan_count Integer
    compute='_compute_search_maintenance_plan_count' string='Maintenance All Plan Count'
Public methods (0)

No public methods.

New fields (2)
  • active Boolean
    default=True required=True args: 'Active Kind'
  • name Char
    required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (21)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • duration Float
    help='Maintenance duration in hours' string='Duration (hours)'
  • equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' ondelete='cascade' string='Equipment'
  • generate_domain Char
    string='Apply on'
  • generate_with_domain Boolean
  • interval Integer
    default=1 help='Interval between each maintenance' string='Frequency'
  • interval_step Selection
    default='year' help='Let the event automatically repeat at that interval step' string='Recurrence' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • maintenance_count Integer
    compute='_compute_maintenance_count' store=True string='Maintenance'
  • maintenance_ids One2many → maintenance.request
    string='Maintenance requests' args: 'maintenance.request', 'maintenance_plan_id'
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance Kind'
  • maintenance_open_count Integer
    compute='_compute_maintenance_count' store=True string='Current Maintenance'
  • maintenance_plan_horizon Integer
    default=1 help='Maintenance planning horizon. Only the maintenance requests inside the horizon will be created.' string='Planning Horizon period'
  • maintenance_team_id Many2one → maintenance.team
    args: 'maintenance.team'
  • name Char
    args: 'Description'
  • next_maintenance_date Date
    compute='_compute_next_maintenance' store=True args: 'Next maintenance date'
  • note Html
    args: 'Note'
  • planning_step Selection
    default='year' help='Let the event automatically repeat at that interval' string='Planning Horizon step' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • search_equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' compute='_compute_search_equipment' search='_search_search_equipment'
  • skip_notify_follower_on_requests Boolean
    default=True string='Do not notify to follower when creating requests?'
  • start_maintenance_date Date
    default=fields.Date.context_today help='Date from which the maintenance will we active' string='Start maintenance date'
Public methods (4)
  • button_manual_request_generation(self)
    Call the same method that the cron for generating manually the maintenance requests.
  • get_relativedelta(self, interval, step)
  • name_get(self)
  • unlink(self)
    Restrict deletion of maintenance plan should there be maintenance requests of this kind which are not done for its equipment

New fields (3)
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance kind'
  • maintenance_plan_id Many2one → maintenance.plan
    comodel_name='maintenance.plan' ondelete='restrict' string='Maintenance plan'
  • note Html
    args: 'Note'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/maintenance
GIT
GIThttps://github.com/OCA/maintenance.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/maintenance/tree/13.0/maintenance_plan
VERSION
VERSION 1.9.0
CATEGORY
CATEGORYMaintenance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Camptocamp SA
COMMITTERS
COMMITTERSEnric Tobella, Lois Rilo, OCA Transbot, Miquel Raïch, Víctor Martínez, ahenriquez, oca-travis, Weblate, OCA-git-bot, sergiocorato, oca-ci, Stefano Consolaro, mariadforgeflow, Joan Sisquella, Alba Riera, Núria Martín Xifré
WEBSITE
WEBSITEhttps://github.com/OCA/maintenance
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/maintenance:
    - base_maintenance
odoo/odoo:
    - maintenance
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
hr_equipment_request_view_form equipment.request.form.inherit maintenance.request field Inherits base_maintenance.equipment_request_view_form
hr_equipment_request_view_tree equipment.request.tree maintenance.request xpath Inherits maintenance.hr_equipment_request_view_tree
hr_equipment_view_form equipment.form.inherit maintenance.equipment div Inherits maintenance.hr_equipment_view_form
maintenance_kind_view_tree maintenance.kind.tree maintenance.kind tree New
maintenance_plan_view_form maintenance.plan.form maintenance.plan form New
maintenance_plan_view_search maintenance.plan.search maintenance.plan search New
maintenance_plan_view_tree maintenance.plan.tree maintenance.plan tree New
report_maintenance_request_document report_maintenance_request_document ir.ui.view qweb Inherits base_maintenance.report_maintenance_request_document
Models touched (4)

New fields (4)
  • maintenance_plan_count Integer
    compute='_compute_maintenance_plan_count' store=True string='Maintenance Plan Count'
  • maintenance_plan_ids One2many → maintenance.plan
    comodel_name='maintenance.plan' inverse_name='equipment_id' string='Maintenance plan'
  • maintenance_team_required Boolean
    compute='_compute_team_required'
  • notes Text
    string='Notes'
Public methods (0)

No public methods.

New fields (2)
  • active Boolean
    default=True required=True args: 'Active Kind'
  • name Char
    required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (18)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • duration Float
    help='Maintenance duration in hours' string='Duration (hours)'
  • equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' ondelete='cascade' string='Equipment'
  • interval Integer
    default=1 help='Interval between each maintenance' string='Frequency'
  • interval_step Selection
    default='year' help='Let the event automatically repeat at that interval step' string='Recurrence' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • maintenance_count Integer
    compute='_compute_maintenance_count' store=True string='Maintenance'
  • maintenance_ids One2many → maintenance.request
    string='Maintenance requests' args: 'maintenance.request', 'maintenance_plan_id'
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance Kind'
  • maintenance_open_count Integer
    compute='_compute_maintenance_count' store=True string='Current Maintenance'
  • maintenance_plan_horizon Integer
    default=1 help='Maintenance planning horizon. Only the maintenance requests inside the horizon will be created.' string='Planning Horizon period'
  • maintenance_team_id Many2one → maintenance.team
    args: 'maintenance.team'
  • name Char
    args: 'Description'
  • next_maintenance_date Date
    compute='_compute_next_maintenance' store=True args: 'Next maintenance date'
  • note Html
    args: 'Note'
  • planning_step Selection
    default='year' help='Let the event automatically repeat at that interval' string='Planning Horizon step' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • skip_notify_follower_on_requests Boolean
    default=True string='Do not notify to follower when creating requests?'
  • start_maintenance_date Date
    default=fields.Date.context_today help='Date from which the maintenance will we active' string='Start maintenance date'
Public methods (4)
  • button_manual_request_generation(self)
    Call the same method that the cron for generating manually the maintenance requests.
  • get_relativedelta(self, interval, step)
  • name_get(self)
  • unlink(self)
    Restrict deletion of maintenance plan should there be maintenance requests of this kind which are not done for its equipment

New fields (3)
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance kind'
  • maintenance_plan_id Many2one → maintenance.plan
    comodel_name='maintenance.plan' ondelete='restrict' string='Maintenance plan'
  • note Html
    args: 'Note'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/maintenance
GIT
GIThttps://github.com/OCA/maintenance.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/maintenance/tree/12.0/maintenance_plan
VERSION
VERSION 3.2.4
CATEGORY
CATEGORYMaintenance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Eficent, Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Eficent, Camptocamp SA
COMMITTERS
COMMITTERSEnric Tobella, Lois Rilo, OCA Transbot, ahenriquez, oca-travis, Weblate, OCA-git-bot, sergiocorato, Jaime Arroyo, Stefano Consolaro, David Alonso (Solvos), mariadforgeflow, David Alonso // Solvos
WEBSITE
WEBSITEhttps://github.com/OCA/maintenance
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - maintenance
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
hr_equipment_request_view_form equipment.request.form.inherit maintenance.request field Inherits maintenance.hr_equipment_request_view_form
hr_equipment_view_form equipment.form.inherit maintenance.equipment div Inherits maintenance.hr_equipment_view_form
maintenance_kind_view_tree maintenance.kind.tree maintenance.kind tree New
maintenance_plan_view_form maintenance.plan.form maintenance.plan form New
maintenance_plan_view_search maintenance.plan.search maintenance.plan search New
maintenance_plan_view_tree maintenance.plan.tree maintenance.plan tree New
Models touched (4)

New fields (4)
  • maintenance_plan_count Integer
    compute='_compute_maintenance_plan_count' store=True string='Maintenance Plan Count'
  • maintenance_plan_ids One2many → maintenance.plan
    comodel_name='maintenance.plan' inverse_name='equipment_id' string='Maintenance plan'
  • maintenance_team_required Boolean
    compute='_compute_team_required'
  • notes Text
    string='Notes'
Public methods (0)

No public methods.

New fields (2)
  • active Boolean
    default=True required=True args: 'Active Kind'
  • name Char
    required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (16)
  • active Boolean
    default=True
  • duration Float
    help='Maintenance duration in hours' string='Duration (hours)'
  • equipment_id Many2one → maintenance.equipment
    auto_join=True comodel_name='maintenance.equipment' ondelete='cascade' string='Equipment'
  • interval Integer
    default=1 help='Interval between each maintenance' string='Frequency'
  • interval_step Selection
    default='year' help='Let the event automatically repeat at that interval step' string='Recurrence' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • maintenance_count Integer
    compute='_compute_maintenance_count' store=True string='Maintenance'
  • maintenance_ids One2many → maintenance.request
    string='Maintenance requests' args: 'maintenance.request', 'maintenance_plan_id'
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance Kind'
  • maintenance_open_count Integer
    compute='_compute_maintenance_count' store=True string='Current Maintenance'
  • maintenance_plan_horizon Integer
    default=1 help='Maintenance planning horizon. Only the maintenance requests inside the horizon will be created.' string='Planning Horizon period'
  • maintenance_team_id Many2one → maintenance.team
    args: 'maintenance.team'
  • name Char
    oldname='description' args: 'Description'
  • next_maintenance_date Date
    compute='_compute_next_maintenance' store=True args: 'Next maintenance date'
  • note Html
    args: 'Note'
  • planning_step Selection
    default='year' help='Let the event automatically repeat at that interval' string='Planning Horizon step' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • start_maintenance_date Date
    default=fields.Date.context_today help='Date from which the maintenance will we active' string='Start maintenance date'
Public methods (4)
  • get_relativedelta(self, interval, step)
  • name_get(self)
  • unlink(self)
    @api.multi
    Restrict deletion of maintenance plan should there be maintenance requests of this kind which are not done for its equipment
  • write(self, vals)

New fields (3)
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance kind'
  • maintenance_plan_id Many2one → maintenance.plan
    comodel_name='maintenance.plan' ondelete='restrict' string='Maintenance plan'
  • note Html
    args: 'Note'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/maintenance
GIT
GIThttps://github.com/OCA/maintenance.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/maintenance/tree/11.0/maintenance_plan
VERSION
VERSION 2.4.1
CATEGORY
CATEGORYMaintenance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Eficent, Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Eficent, Camptocamp SA
COMMITTERS
COMMITTERSEnric Tobella, Lois Rilo, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Adrià Gil Sorribes, Jaime Arroyo, Stefano Consolaro, David Alonso (Solvos), Matteo Mazzoni, mariadforgeflow
WEBSITE
WEBSITEhttps://github.com/OCA/maintenance
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - maintenance
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
hr_equipment_request_view_form equipment.request.form.inherit maintenance.request field Inherits maintenance.hr_equipment_request_view_form
hr_equipment_request_view_tree equipment.request.tree maintenance.request xpath Inherits maintenance.hr_equipment_request_view_tree
hr_equipment_view_form equipment.form.inherit maintenance.equipment div Inherits maintenance.hr_equipment_view_form
maintenance_kind_view_tree maintenance.kind.tree maintenance.kind tree New
maintenance_plan_view_form maintenance.plan.form maintenance.plan form New
maintenance_plan_view_search maintenance.plan.search maintenance.plan search New
maintenance_plan_view_tree maintenance.plan.tree maintenance.plan tree New
Models touched (4)

New fields (4)
  • maintenance_plan_count Integer
    compute='_compute_maintenance_plan_count' store=True string='Maintenance Plan Count'
  • maintenance_plan_ids One2many → maintenance.plan
    comodel_name='maintenance.plan' inverse_name='equipment_id' string='Maintenance plan'
  • maintenance_team_required Boolean
    compute='_compute_team_required'
  • notes Text
    string='Notes'
Public methods (0)

No public methods.

New fields (2)
  • active Boolean
    default=True required=True args: 'Active Kind'
  • name Char
    required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (16)
  • active Boolean
    default=True
  • duration Float
    help='Maintenance duration in hours' string='Duration (hours)'
  • equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' ondelete='cascade' string='Equipment'
  • interval Integer
    default=1 help='Interval between each maintenance' string='Frequency'
  • interval_step Selection
    default='year' help='Let the event automatically repeat at that interval step' string='Recurrence' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • maintenance_count Integer
    compute='_compute_maintenance_count' store=True string='Maintenance'
  • maintenance_ids One2many → maintenance.request
    args: 'maintenance.request', 'maintenance_plan_id'
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance Kind'
  • maintenance_open_count Integer
    compute='_compute_maintenance_count' store=True string='Current Maintenance'
  • maintenance_plan_horizon Integer
    default=1 help='Maintenance planning horizon. Only the maintenance requests inside the horizon will be created.' string='Planning Horizon period'
  • maintenance_team_id Many2one → maintenance.team
    args: 'maintenance.team'
  • name Char
    oldname='description' args: 'Description'
  • next_maintenance_date Date
    compute='_compute_next_maintenance' store=True args: 'Next maintenance date'
  • note Html
    args: 'Note'
  • planning_step Selection
    default='year' help='Let the event automatically repeat at that interval' string='Planning Horizon step' args: [('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')]
  • start_maintenance_date Date
    default=fields.Date.context_today help='Date from which the maintenance will we active' string='Start maintenance date'
Public methods (3)
  • get_relativedelta(self, interval, step)
  • name_get(self)
  • unlink(self)
    @api.multi
    Restrict deletion of maintenance plan should there be maintenance requests of this kind which are not done for its equipment

New fields (3)
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance kind'
  • maintenance_plan_id Many2one → maintenance.plan
    comodel_name='maintenance.plan' ondelete='restrict' string='Maintenance plan'
  • note Html
    args: 'Note'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/maintenance
GIT
GIThttps://github.com/OCA/maintenance.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/maintenance/tree/10.0/maintenance_plan
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYMaintenance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp SA
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Andrea, OCA-git-bot
WEBSITE
WEBSITEhttp://www.camptocamp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - maintenance
    - mail
    - base
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
hr_equipment_request_view_form equipment.request.form.inherit maintenance.request field Inherits maintenance.hr_equipment_request_view_form
hr_equipment_view_form equipment.form.inherit maintenance.equipment xpath Inherits maintenance.hr_equipment_view_form
maintenance_kind_view_tree maintenance.kind.tree maintenance.kind tree New
maintenance_plan_view_form maintenance.plan.form maintenance.plan form New
maintenance_plan_view_tree maintenance.plan.tree maintenance.plan tree New
Models touched (4)

New fields (2)
  • maintenance_plan_ids One2many → maintenance.plan
    comodel_name='maintenance.plan' inverse_name='equipment_id' string='Maintenance plan'
  • maintenance_team_required Boolean
    compute='_compute_team_required'
Public methods (0)

No public methods.

New fields (2)
  • active Boolean
    default=True required=True args: 'Active Kind'
  • name Char
    required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (5)
  • duration Float
    help='Maintenance duration in hours' string='Duration'
  • equipment_id Many2one → maintenance.equipment
    comodel_name='maintenance.equipment' ondelete='cascade' string='Equipment'
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance kind'
  • next_maintenance_date Date
    compute='_compute_next_maintenance' args: 'Next maintenance date'
  • period Integer
    help='Days between each maintenance' string='Period'
Public methods (1)
  • unlink(self)
    @api.multi
    Restrict deletion of maintenance plan should there be maintenance requests of this kind which are not done for its equipment

New fields (1)
  • maintenance_kind_id Many2one → maintenance.kind
    comodel_name='maintenance.kind' ondelete='restrict' string='Maintenance kind'
Public methods (0)

No public methods.