Personal Protective Equipment (PPE) Management

hr_employee_ppe
REPOSITORY
REPOSITORYOCA/hr
GIT
GIThttps://github.com/OCA/hr.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr/tree/18.0/hr_employee_ppe
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Escodoo
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Escodoo
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Bhavesh Heliconia
WEBSITE
WEBSITEhttps://github.com/OCA/hr
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:08
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/hr:
    - hr_personal_equipment_request
odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - hr
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - phone_validation
    - resource_mail
    - purchase
    - account
    - onboarding
    - analytic
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows you to manage allocation of PPE to your employees. A
product can be marked as ppe and additional information as duration and
indications can also be added. If ppe products are selected in a
equipment request, a button to print a receipt of PPE will appear. In
addition, a chron will check every day if an allocation has been
expired.

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
hr_employee_ppe_report_template hr_employee_ppe_report_template ir.ui.view qweb New
hr_personal_equipment_form_view hr.personal.equipment.form (in hr_employee_ppe) hr.personal.equipment xpath Inherits hr_personal_equipment_request.hr_personal_equipment_form_view
hr_personal_equipment_form_view_base_user hr.personal.equipment.form (in hr_employee_ppe) hr.personal.equipment field Inherits hr_employee_ppe.hr_personal_equipment_form_view
hr_personal_equipment_request_form_view hr.personal.equipment.request.form (in hr_employee_ppe) hr.personal.equipment.request xpath Inherits hr_personal_equipment_request.hr_personal_equipment_request_form_view
hr_personal_equipment_tree_view hr.personal.equipment.tree hr.personal.equipment xpath Inherits hr_personal_equipment_request.hr_personal_equipment_list_view
product_template_form_view product.template.form (in hr_employee_ppe) product.template page Inherits product.product_template_form_view
Models touched (3)

New fields (5)
  • certification Char
    help='Certification Number' string='Certification Number'
  • expire_ppe Boolean
    help='True if the PPE expires'
  • indications Text
    help='Situations in which the employee should use this equipment.'
  • is_ppe Boolean
  • issued_by Many2one → res.users
    comodel_name='res.users'
Public methods (2)
  • cron_ppe_expiry_verification(self, date_ref=None)
    @api.model
  • validate_allocation(self)

New fields (1)
  • contains_ppe Boolean
    compute='_compute_contains_ppe'
Public methods (1)
  • action_view_ppe_report(self)

New fields (5)
  • expirable_ppe Boolean
    default=False help='Select this option if the PPE has expiry date.'
  • indications Text
    help='Situations in which the employee should use this equipment. Only for ppe'
  • is_ppe Boolean
    default=False
  • ppe_duration Integer
    string='PPE duration'
  • ppe_interval_type Selection
    string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/hr
GIT
GIThttps://github.com/OCA/hr.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr/tree/17.0/hr_employee_ppe
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Escodoo
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Escodoo
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, FernandoRomera
WEBSITE
WEBSITEhttps://github.com/OCA/hr
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:01
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/hr:
    - hr_personal_equipment_request
odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - hr
    - phone_validation
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows you to manage allocation of PPE to your employees. A
product can be marked as ppe and additional information as duration and
indications can also be added. If ppe products are selected in a
equipment request, a button to print a receipt of PPE will appear. In
addition, a chron will check every day if an allocation has been
expired.

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
hr_employee_ppe_report_template hr_employee_ppe_report_template ir.ui.view qweb New
hr_personal_equipment_form_view hr.personal.equipment.form (in hr_employee_ppe) hr.personal.equipment xpath Inherits hr_personal_equipment_request.hr_personal_equipment_form_view
hr_personal_equipment_form_view_base_user hr.personal.equipment.form (in hr_employee_ppe) hr.personal.equipment field Inherits hr_employee_ppe.hr_personal_equipment_form_view
hr_personal_equipment_request_form_view hr.personal.equipment.request.form (in hr_employee_ppe) hr.personal.equipment.request xpath Inherits hr_personal_equipment_request.hr_personal_equipment_request_form_view
hr_personal_equipment_tree_view hr.personal.equipment.tree hr.personal.equipment xpath Inherits hr_personal_equipment_request.hr_personal_equipment_tree_view
product_template_form_view product.template.form (in hr_employee_ppe) product.template page Inherits product.product_template_form_view
Models touched (3)

New fields (5)
  • certification Char
    help='Certification Number' string='Certification Number'
  • expire_ppe Boolean
    help='True if the PPE expires'
  • indications Text
    help='Situations in which the employee should use this equipment.'
  • is_ppe Boolean
  • issued_by Many2one → res.users
    comodel_name='res.users'
Public methods (2)
  • cron_ppe_expiry_verification(self, date_ref=None)
    @api.model
  • validate_allocation(self)

New fields (1)
  • contains_ppe Boolean
    compute='_compute_contains_ppe'
Public methods (1)
  • action_view_ppe_report(self)

New fields (5)
  • expirable_ppe Boolean
    default=False help='Select this option if the PPE has expiry date.'
  • indications Text
    help='Situations in which the employee should use this equipment. Only for ppe'
  • is_ppe Boolean
    default=False
  • ppe_duration Integer
    string='PPE duration'
  • ppe_interval_type Selection
    string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/hr
GIT
GIThttps://github.com/OCA/hr.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr/tree/16.0/hr_employee_ppe
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Escodoo
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Escodoo
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, anusrinps96
WEBSITE
WEBSITEhttps://github.com/OCA/hr
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/hr:
    - hr_personal_equipment_request
odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - hr
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
hr_employee_ppe_report_template hr_employee_ppe_report_template ir.ui.view qweb New
hr_personal_equipment_form_view hr.personal.equipment.form (in hr_employee_ppe) hr.personal.equipment xpath Inherits hr_personal_equipment_request.hr_personal_equipment_form_view
hr_personal_equipment_form_view_base_user hr.personal.equipment.form (in hr_employee_ppe) hr.personal.equipment field Inherits hr_employee_ppe.hr_personal_equipment_form_view
hr_personal_equipment_request_form_view hr.personal.equipment.request.form (in hr_employee_ppe) hr.personal.equipment.request xpath Inherits hr_personal_equipment_request.hr_personal_equipment_request_form_view
hr_personal_equipment_tree_view hr.personal.equipment.tree hr.personal.equipment xpath Inherits hr_personal_equipment_request.hr_personal_equipment_tree_view
product_template_form_view product.template.form (in hr_employee_ppe) product.template page Inherits product.product_template_form_view
Models touched (3)

New fields (5)
  • certification Char
    help='Certification Number' string='Certification Number'
  • expire_ppe Boolean
    help='True if the PPE expires'
  • indications Text
    help='Situations in which the employee should use this equipment.'
  • is_ppe Boolean
  • issued_by Many2one → res.users
    comodel_name='res.users'
Public methods (2)
  • cron_ppe_expiry_verification(self, date_ref=None)
    @api.model
  • validate_allocation(self)

New fields (1)
  • contains_ppe Boolean
    compute='_compute_contains_ppe'
Public methods (1)
  • action_view_ppe_report(self)

New fields (5)
  • expirable_ppe Boolean
    default=False help='Select this option if the PPE has expiry date.'
  • indications Text
    help='Situations in which the employee should use this equipment. Only for ppe'
  • is_ppe Boolean
    default=False
  • ppe_duration Integer
    string='PPE duration'
  • ppe_interval_type Selection
    string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/hr
GIT
GIThttps://github.com/OCA/hr.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr/tree/14.0/hr_employee_ppe
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Escodoo
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Escodoo
COMMITTERS
COMMITTERSOCA Transbot, oca-travis, Weblate, OCA-git-bot, aromera, miguels73
WEBSITE
WEBSITEhttps://github.com/OCA/hr
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/hr:
    - hr_personal_equipment_request
odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - hr
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
hr_employee_ppe_report_template hr_employee_ppe_report_template ir.ui.view qweb New
hr_personal_equipment_form_view hr.personal.equipment.form (in hr_employee_ppe) hr.personal.equipment xpath Inherits hr_personal_equipment_request.hr_personal_equipment_form_view
hr_personal_equipment_form_view_base_user hr.personal.equipment.form (in hr_employee_ppe) hr.personal.equipment field Inherits hr_employee_ppe.hr_personal_equipment_form_view
hr_personal_equipment_request_form_view hr.personal.equipment.request.form (in hr_employee_ppe) hr.personal.equipment.request xpath Inherits hr_personal_equipment_request.hr_personal_equipment_request_form_view
hr_personal_equipment_tree_view hr.personal.equipment.tree hr.personal.equipment xpath Inherits hr_personal_equipment_request.hr_personal_equipment_tree_view
product_template_form_view product.template.form (in hr_employee_ppe) product.template page Inherits product.product_template_form_view
Models touched (3)

New fields (5)
  • certification Char
    help='Certification Number' string='Certification Number'
  • expire_ppe Boolean
    help='True if the PPE expires'
  • indications Text
    help='Situations in which the employee should use this equipment.'
  • is_ppe Boolean
  • issued_by Many2one → res.users
    comodel_name='res.users'
Public methods (2)
  • cron_ppe_expiry_verification(self, date_ref=None)
    @api.model
  • validate_allocation(self)

New fields (1)
  • contains_ppe Boolean
    compute='_compute_contains_ppe'
Public methods (1)
  • action_view_ppe_report(self)

New fields (5)
  • expirable_ppe Boolean
    default=False help='Select this option if the PPE has expiry date.'
  • indications Text
    help='Situations in which the employee should use this equipment. Only for ppe' string='Indications'
  • is_ppe Boolean
    default=False
  • ppe_duration Integer
    string='PPE duration'
  • ppe_interval_type Selection
    string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/hr
GIT
GIThttps://github.com/OCA/hr.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr/tree/13.0/hr_employee_ppe
VERSION
VERSION 2.0.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Escodoo
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Escodoo
COMMITTERS
COMMITTERSOCA Transbot, oca-travis, Weblate, OCA-git-bot, Marcel Savegnago, Alba Riera, Wesley Oliveira
WEBSITE
WEBSITEhttps://github.com/OCA/hr
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/hr:
    - hr_personal_equipment_request
odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - hr
    - resource
    - mail_bot
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
hr_employee_ppe_report_template hr_employee_ppe_report_template ir.ui.view qweb New
hr_personal_equipment_form_view hr.personal.equipment.form (in hr_employee_ppe) hr.personal.equipment xpath Inherits hr_personal_equipment_request.hr_personal_equipment_form_view
hr_personal_equipment_form_view_base_user hr.personal.equipment.form (in hr_employee_ppe) hr.personal.equipment field Inherits hr_employee_ppe.hr_personal_equipment_form_view
hr_personal_equipment_request_form_view hr.personal.equipment.request.form (in hr_employee_ppe) hr.personal.equipment.request xpath Inherits hr_personal_equipment_request.hr_personal_equipment_request_form_view
hr_personal_equipment_tree_view hr.personal.equipment.tree hr.personal.equipment xpath Inherits hr_personal_equipment_request.hr_personal_equipment_tree_view
product_template_form_view product.template.form (in hr_employee_ppe) product.template page Inherits product.product_template_form_view
Models touched (3)

New fields (5)
  • certification Char
    help='Certification Number' string='Certification Number'
  • expire_ppe Boolean
    help='True if the PPE expires'
  • indications Text
    help='Situations in which the employee should use this equipment.'
  • is_ppe Boolean
  • issued_by Many2one → res.users
    comodel_name='res.users'
Public methods (2)
  • cron_ppe_expiry_verification(self, date_ref=None)
    @api.model
  • validate_allocation(self)

New fields (1)
  • contains_ppe Boolean
    compute='_compute_contains_ppe'
Public methods (1)
  • action_view_ppe_report(self)

New fields (5)
  • expirable_ppe Boolean
    default=False help='Select this option if the PPE has expiry date.'
  • indications Text
    help='Situations in which the employee should use this equipment. Only for ppe' string='Indications'
  • is_ppe Boolean
    default=False
  • ppe_duration Integer
    string='PPE duration'
  • ppe_interval_type Selection
    string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/hr
GIT
GIThttps://github.com/OCA/hr.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr/tree/12.0/hr_employee_ppe
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Escodoo
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Escodoo
COMMITTERS
COMMITTERSOCA Transbot, oca-travis, Weblate, OCA-git-bot, Azucena Luque, Eduardo Aparicio, Marcel Savegnago
WEBSITE
WEBSITEhttps://github.com/oca/hr
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - product
    - decimal_precision
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
hr_employee_ppe_equipment_form_view hr.employee.ppe.equipment.form (in hr_employee_ppe) hr.employee.ppe.equipment form New
hr_employee_ppe_equipment_search_view hr.employee.ppe.equipment.search (in hr_employee_ppe) hr.employee.ppe.equipment search New
hr_employee_ppe_equipment_tree_view hr.employee.ppe.equipment.tree (in hr_employee_ppe) hr.employee.ppe.equipment tree New
view_employee_form_inherit hr.employee.ppe.employee.form hr.employee notebook Inherits hr.view_employee_form
view_employee_ppe_form hr.employee.ppe.form hr.employee.ppe form New
view_employee_ppe_kanban hr.employee.ppe.kanban hr.employee.ppe kanban New
view_employee_ppe_search hr.employee.ppe.search hr.employee.ppe search New
view_ppe_tree hr.employee.ppe.tree hr.employee.ppe tree New
Models touched (3)

New fields (1)
  • ppe_ids One2many → hr.employee.ppe
    help='PPEs' args: 'hr.employee.ppe', 'employee_id', 'PPEs'
Public methods (0)

No public methods.

New fields (11)
  • certification Char
    help='Certification Number' string='Certification Number'
  • description Text
    string='Description'
  • employee_id Many2one → hr.employee
    comodel_name='hr.employee' required=True string='Employee'
  • end_date Date
    string='End Date'
  • expire Boolean
    default=True help='True if the PPE expires' string='Expire'
  • indications Text
    help='Situations in which the employee should use this equipment.' string='Indications'
  • name Char
    compute='_compute_name'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' help='Certification Authority' string='Issued By'
  • ppe_id Many2one → hr.employee.ppe.equipment
    comodel_name='hr.employee.ppe.equipment' required=True string='Equipment'
  • start_date Date
    default=fields.Date.today() string='Start Date'
  • status Selection
    compute='_compute_status' help='PPE Status' readonly=True args: [('valid', 'Valid'), ('expired', 'Expired')]
Public methods (1)
  • cron_ppe_expiry_verification(self, date_ref=None)
    @api.model

New fields (2)
  • expirable Boolean
    help='Select this option if the PPE has expiry date.'
  • product_id Many2one → product.product
    comodel_name='product.product' domain="[('type', '=', 'consu')]" help='Select the PPE from the product list.\n Please note that the PPE must be a consumable product.' required=True
Public methods (1)
  • update_name(self)
    @api.onchange('product_id')
STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/hr
PULL REQUEST
PULL REQUEST[19.0] [MIG] hr_employee_ppe: Migration to 19.0 (#1531)