Employees

hr
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources/Employees
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, Christophe Simonis, David Monjoie, Xavier Morel, Lucas Perais (lpe), Yannick Tivisse, Pierre Masereel, Jorge Pinna Puissant, Alexandre Kühn, Julien Castiaux, Sébastien Theys, Julien Mougenot, std-odoo, David Beguin, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Mathieu Duckerts-Antoine, William Braeckman, Ahmad Khanalizadeh, Didier (did), Dossogne Bertrand, luvi, Renaud Thiry, Vincent Larcin, Ipsita Borisagar, alsh-odoo, Louis Wicket (wil), tsm-odoo, Victor Piryns (pivi), Yash Vaishnav, Maruan Aguerdouh (magm), Dylan Kiss (dyki), Jinane Maksoud, Mayurrajsinh Rathod, Simon Goffaux (sigo), Xavier Bol (xbo), omra-odoo, Zelong Lin, maad-odoo, ravb-odoo, Mélanie, bary, reka-odoo, jugj-odoo, Abderraouf Ghrissi (abgh), Nathaniel (naja), Julien Carion (juca), Tanguy Quéguineur, Alex Kühn, Martin Trigaux (mat), Agustin Castro Bugallo, Chrysanthe (chgo), asno-odoo, rmun-odoo, aamo-odoo, Shaan Thakkar (THSH), Mathieu Coutant, Yassin Abdelkarim, kais-odoo, guce, yagp-odoo, rame-odoo, Abdelrahman Mahmoud (amah), gteboul, Ian, gvar-odoo, Maira Salazar (srma), Michaël Mattiello, nikj-odoo, Pierre Pulinckx, Bastien PIERRE, Krzysztof Magusiak (krma), kkuj-odoo, devp-odoo, Basioni (basm), Guillaume V, rida, pajo, Giorgio Tocco (gito), jayp-odoo, akha, Bertrand Dossogne, MAGREMENT, romc-odoo, kareem, Dhwani Patel, Laetitia (ldau), adip-odoo, ksar-odoo, dhka-odoo, Einar Andersen (eian), Ayush Modi, Arthur Pierrot (arpi), Dinh Van Khoa (JocelynVN), assh-odoo, Elliot ELCO, khom-odoo, Kevin Gerard (kege), Waleed Elgamal, kuay-odoo, saurabh, Camila Vives, Jurgen Gjini, lebm-odoo, Mahmoudk3m, alan-odoo, raja prasad, Martin Lefèvre (mlef), Hashem, karygauss03, Lucas ESTEBAN (lues), djsh-odoo, chpa-odoo, SaraBriki, shmn-odoo, Mohamed Ayman, Faruk Avcı, amga-odoo, 3amo-magdy, Devendra Ladhani, adak-ahmed, arkp-odoo, Ziri, metu-odoo, Nat (naja), Mohammed Farouk, hamza, Tatiana Skvortsova (taskv), abshe, SurryaT10, Priyanshu Goyal (prgo), usseif, claireclan, FedericoBraidi, Omar Khair, hkafe-odoo, Mélanie Peyrat (mepe)
WEBSITE
WEBSITEhttps://www.odoo.com/app/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - digest
    - mail
    - bus
    - web_tour
    - html_editor
    - portal
    - http_routing
    - auth_signup
    - resource
    - phone_validation
    - resource_mail
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (58)
XML IDNameModelTypeStatus
discuss_channel_view_form discuss.channel.view.form.inherit.hr discuss.channel xpath Inherits mail.discuss_channel_view_form
hr_contract_template_form_view hr.contract.template.form hr.version form New
hr_contract_template_list_view hr.contract.template.list hr.version list New
hr_contract_type_view_form hr.contract.type form New
hr_contract_type_view_tree hr.contract.type list New
hr_department_view_kanban hr.department.kanban hr.department kanban New
hr_departure_reason_view_form hr.departure.reason form New
hr_departure_reason_view_list hr.departure.reason list New
hr_departure_wizard_view_form hr.departure.wizard.view.form hr.departure.wizard form New
hr_employee_list_activites_view hr.employee.list.activites.view hr.employee list New
hr_employee_list_view hr.employee.list hr.employee list New
hr_employee_plan_activity_summary hr_employee_plan_activity_summary ir.ui.view qweb New
hr_employee_public_view_form hr.employee.public.form hr.employee.public form New
hr_employee_public_view_kanban hr.employee.kanban hr.employee.public kanban New
hr_employee_public_view_search hr.employee.search hr.employee.public search New
hr_employee_public_view_tree hr.employee.list hr.employee.public list New
hr_employee_view_activity hr.employee.activity hr.employee activity New
hr_employee_view_graph hr.employee.view.graph hr.employee graph New
hr_employee_view_pivot hr.employee.view.pivot hr.employee pivot New
hr_job_view_kanban hr.job.kanban hr.job kanban New
hr_kanban_view_employees hr.employee.kanban hr.employee kanban New
hr_version_graph_view hr.version.graph hr.version graph New
hr_version_list_view hr.version.list hr.version list New
hr_version_pivot_view hr.version.pivot hr.version pivot New
hr_version_search_view hr.version.search hr.version search New
hr_version_wizard_view_form hr.version.wizard.view.form hr.version.wizard form New
hr_work_location_form_view hr.work.location.view.form hr.work.location form New
hr_work_location_tree_view hr.work.location.view.list hr.work.location list New
mail_activity_plan_template_view_form mail.activity.plan.template.view.form.inherit.hr mail.activity.plan.template xpath Inherits mail.mail_activity_plan_template_view_form
mail_activity_plan_view_form mail.activity.plan.view.form.inherit.hr mail.activity.plan xpath Inherits mail.mail_activity_plan_view_form
mail_activity_plan_view_form_hr_employee mail.activity.plan.view.form.hr.employee mail.activity.plan xpath Inherits mail.mail_activity_plan_view_form_fixed_model
mail_activity_plan_view_tree mail.activity.plan.view.list.inherit.hr mail.activity.plan xpath Inherits mail.mail_activity_plan_view_tree
mail_activity_schedule_view_form mail.activity.schedule.view.form.inherit.hr mail.activity.schedule xpath Inherits mail.mail_activity_schedule_view_form
print_employee_badge print_employee_badge ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_form res.partner.view.form.inherit.hr res.partner div Inherits base.view_partner_form
res_partner_view_search res.partner.search.inherit res.partner xpath Inherits base.view_res_partner_filter
res_users_view_form res.users.form.inherit res.users xpath Inherits base.view_users_form
res_users_view_form_preferences res.users.preferences.form.inherit res.users form Inherits res_users_view_form_simple_modif
res_users_view_form_simple_modif res.users.preferences.form.simplified.inherit res.users form Inherits base.view_users_form_simple_modif
view_bank_account_allocation_line_list hr.bank.account.allocation.wizard.line.list hr.bank.account.allocation.wizard.line list New
view_bank_account_allocation_wizard hr.bank.account.allocation.wizard.form hr.bank.account.allocation.wizard form New
view_department_filter hr.department.search hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.list hr.department list New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category list New
view_employee_filter hr.employee.search hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_form_smartbutton_inherited view.employee.form.smartbutton.inherited hr.employee button Inherits view_employee_form
view_employee_tree hr.employee.list hr.employee list New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.list hr.job list New
view_job_filter hr.job.search hr.job search New
view_partner_bank_form_inherit_hr res.partner.bank.form.inherit.hr res.partner.bank xpath Inherits base.view_partner_bank_form
view_users_form_simple_modif_resource res.users.preferences.form.resource res.users field Inherits base.view_users_form_simple_modif
view_users_simple_form view.users.simple.form.hr res.users sheet Inherits base.view_users_simple_form
view_users_simple_form_inherit_hr view.users.simple.form.inherit.hr res.users xpath Inherits base.view_users_simple_form
Models touched (30)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • subscription_department_ids Many2many → hr.department
    help='Automatically subscribe members of those departments to the channel.' string='HR Departments' args: 'hr.department'
Public methods (1)
  • write(self, vals)

New fields (2)
  • allocation_ids One2many → hr.bank.account.allocation.wizard.line
    readonly=False string='Allocations' args: 'hr.bank.account.allocation.wizard.line', 'wizard_id'
  • employee_id Many2one → hr.employee
    required=True args: 'hr.employee'
Public methods (2)
  • action_save(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (8)
  • acc_number Char
    readonly=True related='bank_account_id.acc_number'
  • amount Float
    digits=(16, 2) readonly=False string='Amount'
  • amount_type Selection
    readonly=False selection='_get_amount_type_selection_vals'
  • bank_account_id Many2one → res.partner.bank
    readonly=True required=True args: 'res.partner.bank'
  • sequence Integer
    default=10
  • symbol Char
    compute='_compute_symbol' readonly=True
  • trusted Boolean
    string='Trusted'
  • wizard_id Many2one → hr.bank.account.allocation.wizard
    ondelete='cascade' required=True args: 'hr.bank.account.allocation.wizard'
Public methods (0)

No public methods.

New fields (4)
  • code Char
    compute='_compute_code' readonly=False store=True
  • country_id Many2one → res.country
    domain=<expr> args: 'res.country'
  • name Char
    required=True translate=True
  • sequence Integer
Public methods (0)

No public methods.

New fields (17)
  • active Boolean
    default=True args: 'Active'
  • child_ids One2many → hr.department
    string='Child Departments' args: 'hr.department', 'parent_id'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    compute='_compute_company_id' default=<expr> index=True readonly=False recursive=True store=True string='Company' tracking=True args: 'res.company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True search='_search_complete_name' args: 'Complete Name'
  • has_read_access Boolean
    export_string_translation=False search='_search_has_read_access' store=False
  • jobs_ids One2many → hr.job
    string='Jobs' args: 'hr.job', 'department_id'
  • manager_id Many2one → hr.employee
    domain="['|', ('company_id', '=', False), ('company_id', 'in', allowed_company_ids)]" string='Manager' tracking=True args: 'hr.employee'
  • master_department_id Many2one → hr.department
    compute='_compute_master_department_id' store=True args: 'hr.department', 'Master Department'
  • member_ids One2many → hr.employee
    readonly=True string='Members' args: 'hr.employee', 'department_id'
  • name Char
    required=True translate=True args: 'Department Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → hr.department
    check_company=True index=True string='Parent Department' args: 'hr.department'
  • parent_path Char
    index=True
  • plan_ids One2many → mail.activity.plan
    args: 'mail.activity.plan', 'department_id'
  • plans_count Integer
    compute='_compute_plan_count'
  • total_employee Integer
    compute='_compute_total_employee' export_string_translation=False string='Total Employee'
Public methods (9)
  • action_employee_from_department(self)
  • action_open_view_child_departments(self)
  • action_plan_from_department(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_children_department_ids(self)
  • get_department_hierarchy(self)
  • get_formview_action(self, access_uid=None)
  • name_create(self, name)
    @api.model
  • write(self, vals)
    If updating manager of a department, we need to update all the employees of department hierarchy, and subscribe the new manager.

New fields (4)
  • country_code Char
    related='country_id.code'
  • country_id Many2one → res.country
    default=<expr> string='Country' args: 'res.country'
  • name Char
    required=True string='Reason' translate=True
  • sequence Integer
    default=10 args: 'Sequence'
Public methods (0)

No public methods.

New fields (7)
  • departure_date Date
    default=_get_default_departure_date required=True string='Contract End Date'
  • departure_description Html
    string='Additional Information'
  • departure_reason_id Many2one → hr.departure.reason
    default=<expr> required=True args: 'hr.departure.reason'
  • employee_ids Many2many → hr.employee
    context={'active_test': False} default=_get_default_employee_ids domain=_get_domain_employee_ids required=True string='Employees' args: 'hr.employee'
  • is_user_employee Boolean
    compute='_compute_is_user_employee' string='User Employee'
  • remove_related_user Boolean
    help='If checked, the related user will be removed from the system.' string='Related User'
  • set_date_end Boolean
    default=<expr> help='Set the end date on the current contract.' string='Set Contract End Date'
Public methods (1)
  • action_register_departure(self)

New fields (105)
  • active Boolean
    default=True readonly=False related='resource_id.active' store=True args: 'Active'
  • activity_date_deadline Date
    groups='hr.group_hr_user'
  • activity_exception_decoration Selection
    groups='hr.group_hr_user'
  • activity_exception_icon Char
    groups='hr.group_hr_user'
  • activity_ids One2many
    groups='hr.group_hr_user'
  • activity_state Selection
    groups='hr.group_hr_user'
  • activity_summary Char
    groups='hr.group_hr_user'
  • activity_type_icon Char
    groups='hr.group_hr_user'
  • activity_type_id Many2one
    groups='hr.group_hr_user'
  • activity_user_id Many2one
    groups='hr.group_hr_user'
  • bank_account_ids Many2many → res.partner.bank
    column1='employee_id' column2='bank_account_id' copy=False domain="[('partner_id', '=', work_contact_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" groups='hr.group_hr_user' help='Employee bank accounts to pay salaries' relation='employee_bank_account_rel' string='Bank Accounts' tracking=True args: 'res.partner.bank'
  • barcode Char
    copy=False groups='hr.group_hr_user' help='ID used for employee identification.' string='Badge ID'
  • birthday Date
    groups='hr.group_hr_user' tracking=True args: 'Birthday'
  • birthday_public_display Boolean
    default=False groups='hr.group_hr_user' args: 'Show to all employees'
  • birthday_public_display_string Char
    compute='_compute_birthday_public_display_string' default='hidden' args: 'Public Date of Birth'
  • category_ids Many2many → hr.employee.category
    groups='hr.group_hr_user' string='Tags' args: 'hr.employee.category', 'employee_category_rel', 'employee_id', 'category_id'
  • certificate Selection
    groups='hr.group_hr_user' selection='_get_certificate_selection' string='Certificate Level' tracking=True
  • child_ids One2many → hr.employee
    string='Direct subordinates' args: 'hr.employee', 'parent_id'
  • coach_id Many2one → hr.employee
    compute='_compute_coach' domain="['|', ('company_id', '=', False), ('company_id', 'in', allowed_company_ids)]" help='Select the "Employee" who is the coach of this employee.\nThe "Coach" has no specific rights or responsibilities by default.' readonly=False store=True args: 'hr.employee', 'Coach'
  • color Integer
    default=0 args: 'Color Index'
  • company_country_code Char
    depends=['company_country_id'] groups='base.group_system,hr.group_hr_user' readonly=True related='company_country_id.code' string='Company Country Code'
  • company_country_id Many2one → res.country
    groups='base.group_system,hr.group_hr_user' readonly=True related='company_id.country_id' args: 'res.country', 'Company Country'
  • company_id Many2one → res.company
    required=True tracking=True args: 'res.company'
  • contract_date_end Date
    groups='hr.group_hr_manager' inherited=True readonly=False related='version_id.contract_date_end'
  • contract_date_start Date
    groups='hr.group_hr_manager' inherited=True readonly=False related='version_id.contract_date_start'
  • contract_type_id Many2one
    groups='hr.group_hr_manager' inherited=True readonly=False related='version_id.contract_type_id'
  • contract_wage Monetary
    groups='hr.group_hr_manager' inherited=True related='version_id.contract_wage'
  • country_of_birth Many2one → res.country
    groups='hr.group_hr_user' string='Country of Birth' tracking=True args: 'res.country'
  • currency_id Many2one → res.currency
    groups='hr.group_hr_user' readonly=True related='company_id.currency_id' args: 'res.currency'
  • current_date_version Date
    groups='hr.group_hr_user' related='current_version_id.date_version' string='Current Date Version'
  • current_version_id Many2one → hr.version
    bypass_search_access=True compute='_compute_current_version_id' store=True args: 'hr.version'
  • date_end Date
    groups='hr.group_hr_manager' inherited=True related='version_id.date_end'
  • date_start Date
    groups='hr.group_hr_manager' inherited=True related='version_id.date_start'
  • driving_license Binary
    groups='hr.group_hr_user' string='Driving License'
  • email Char
    related='user_id.email'
  • emergency_contact Char
    groups='hr.group_hr_user' tracking=True
  • emergency_phone Char
    groups='hr.group_hr_user' tracking=True
  • employee_properties Properties
    definition='company_id.employee_properties_definition' groups='hr.group_hr_user' precompute=False args: 'Properties'
  • has_message Boolean
    groups='hr.group_hr_user'
  • has_multiple_bank_accounts Boolean
    compute='_compute_has_multiple_bank_accounts' default=False groups='hr.group_hr_user'
  • has_work_permit Binary
    groups='hr.group_hr_user' string='Work Permit'
  • hr_icon_display Selection
    compute='_compute_presence_icon' args: [('presence_present', 'Present'), ('presence_out_of_working_hour', 'Off-Hours'), ('presence_absent', 'Absent'), ('presence_archive', 'Archived'), ('presence_undetermined', 'Undetermined')]
  • hr_presence_state Selection
    compute='_compute_presence_state' default='out_of_working_hour' args: [('present', 'Present'), ('absent', 'Absent'), ('archive', 'Archived'), ('out_of_working_hour', 'Off-Hours')]
  • id_card Binary
    groups='hr.group_hr_user' string='ID Card Copy'
  • im_status Char
    related='user_id.im_status'
  • is_current Boolean
    groups='hr.group_hr_manager' inherited=True related='version_id.is_current'
  • is_future Boolean
    groups='hr.group_hr_manager' inherited=True related='version_id.is_future'
  • is_in_contract Boolean
    groups='hr.group_hr_manager' inherited=True related='version_id.is_in_contract'
  • is_past Boolean
    groups='hr.group_hr_manager' inherited=True related='version_id.is_past'
  • is_trusted_bank_account Boolean
    compute='_compute_is_trusted_bank_account' groups='hr.group_hr_user'
  • is_user_active Boolean
    groups='hr.group_hr_user' related='user_id.active' string="User's active"
  • lang Selection
    groups='hr.group_hr_user' selection=_lang_get string='Lang'
  • last_activity Date
    compute='_compute_last_activity'
  • last_activity_time Char
    compute='_compute_last_activity'
  • legal_name Char
    compute='_compute_legal_name' groups='hr.group_hr_user' readonly=False store=True
  • message_attachment_count Integer
    groups='hr.group_hr_user'
  • message_follower_ids One2many
    groups='hr.group_hr_user'
  • message_has_error Boolean
    groups='hr.group_hr_user'
  • message_has_error_counter Integer
    groups='hr.group_hr_user'
  • message_ids One2many
    groups='hr.group_hr_user'
  • message_is_follower Boolean
    groups='hr.group_hr_user'
  • message_main_attachment_id Many2one
    groups='hr.group_hr_user'
  • message_needaction Boolean
    groups='hr.group_hr_user'
  • message_needaction_counter Integer
    groups='hr.group_hr_user'
  • message_partner_ids Many2many
    groups='hr.group_hr_user'
  • mobile_phone Char
    args: 'Work Mobile'
  • my_activity_date_deadline Date
    groups='hr.group_hr_user'
  • name Char
    readonly=False related='resource_id.name' store=True string='Employee Name' tracking=True
  • newly_hired Boolean
    compute='_compute_newly_hired' search='_search_newly_hired' args: 'Newly Hired'
  • parent_id Many2one → hr.employee
    domain="['|', ('company_id', '=', False), ('company_id', 'in', allowed_company_ids)]" index=True tracking=True args: 'hr.employee', 'Manager'
  • permit_no Char
    groups='hr.group_hr_user' tracking=True args: 'Work Permit No'
  • phone Char
    related='user_id.phone'
  • pin Char
    copy=False groups='hr.group_hr_user' help='PIN used to Check In/Out in the Kiosk Mode of the Attendance application (if enabled in Configuration) and to change the cashier in the Point of Sale application.' string='PIN'
  • place_of_birth Char
    groups='hr.group_hr_user' tracking=True args: 'Place of Birth'
  • primary_bank_account_id Many2one → res.partner.bank
    compute='_compute_primary_bank_account_id' groups='hr.group_hr_user' args: 'res.partner.bank'
  • private_car_plate Char
    groups='hr.group_hr_user' help='If you have more than one car, just separate the plates by a space.'
  • private_email Char
    groups='hr.group_hr_user' string='Private Email'
  • private_phone Char
    groups='hr.group_hr_user' string='Private Phone'
  • related_partners_count Integer
    compute='_compute_related_partners_count' groups='hr.group_hr_user'
  • resource_calendar_id Many2one
    check_company=True index=False inherited=True related='version_id.resource_calendar_id' store=False
  • resource_id Many2one → resource.resource
    required=True args: 'resource.resource'
  • salary_distribution Json
    compute='_sync_salary_distribution' groups='hr.group_hr_user' readonly=False store=True string='Salary Distribution'
  • share Boolean
    related='user_id.share'
  • show_hr_icon_display Boolean
    compute='_compute_presence_icon'
  • structure_type_id Many2one
    groups='hr.group_hr_manager' inherited=True readonly=False related='version_id.structure_type_id'
  • study_field Char
    groups='hr.group_hr_user' tracking=True args: 'Field of Study'
  • study_school Char
    groups='hr.group_hr_user' tracking=True args: 'School'
  • trial_date_end Date
    groups='hr.group_hr_manager' inherited=True readonly=False related='version_id.trial_date_end'
  • tz Selection
    tracking=True
  • user_id Many2one → res.users
    check_company=True index='btree_not_null' ondelete='restrict' precompute=True readonly=False related='resource_id.user_id' store=True args: 'res.users', 'User'
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • version_id Many2one → hr.version
    compute='_compute_version_id' compute_sudo=True groups='hr.group_hr_user' ondelete='cascade' required=True search='_search_version_id' store=False args: 'hr.version'
  • version_ids One2many → hr.version
    groups='hr.group_hr_user' required=True string='Employee Versions' args: 'hr.version', 'employee_id'
  • version_revision Char
    compute='_compute_version_revision' groups='hr.group_hr_user'
  • versions_count Integer
    compute='_compute_versions_count' groups='hr.group_hr_user'
  • visa_expire Date
    groups='hr.group_hr_user' tracking=True args: 'Visa Expiration Date'
  • visa_no Char
    groups='hr.group_hr_user' tracking=True args: 'Visa No'
  • work_contact_id Many2one → res.partner
    copy=False index='btree_not_null' args: 'res.partner', 'Work Contact'
  • work_email Char
    compute='_compute_work_contact_details' inverse='_inverse_work_contact_details' store=True args: 'Work Email'
  • work_location_name Char
    compute='_compute_work_location_name' args: 'Work Location Name'
  • work_location_type Selection
    compute='_compute_work_location_type' tracking=True args: [('home', 'Home'), ('office', 'Office'), ('other', 'Other')]
  • work_permit_expiration_date Date
    groups='hr.group_hr_user' tracking=True args: 'Work Permit Expiration Date'
  • work_permit_name Char
    compute='_compute_work_permit_name' groups='hr.group_hr_user' args: 'work_permit_name'
  • work_permit_scheduled_activity Boolean
    default=False groups='hr.group_hr_user'
  • work_phone Char
    compute='_compute_work_contact_details' inverse='_inverse_work_contact_details' readonly=False store=True tracking=True args: 'Work Phone'
Public methods (30)
  • action_archive(self)
  • action_create_user(self)
  • action_create_users(self)
  • action_create_users_confirmation(self)
  • action_open_allocation_wizard(self)
  • action_open_versions(self)
  • action_related_contacts(self)
  • action_toggle_primary_bank_account_trust(self)
  • action_unarchive(self)
  • check_field_access_rights(self, operation, field_names)
    @api.model@api.deprecated('Override of a deprecated method')
  • check_no_existing_contract(self, date)
  • create(self, vals_list)
    @api.model_create_multi
  • create_contract(self, date)
  • create_version(self, values)
  • fetch(self, field_names=None)
  • generate_random_barcode(self)
  • get_accounts_with_fixed_allocations(self)
  • get_avatar_card_data(self, fields)
  • get_bank_account_salary_allocation(self, account_id)
  • get_formview_action(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_formview_id(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_import_templates(self)
    @api.model
  • get_remaining_percentage(self)
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
  • get_views(self, views, options=None)
    @api.model
  • new(self, values=None, origin=None, ref=None)
    @api.model
  • notify_expiring_contract_work_permit(self)
    @api.model
  • search_fetch(self, domain, field_names=None, offset=0, limit=None, order=None)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (3)
  • color Integer
    default=_get_default_color string='Color Index'
  • employee_ids Many2many → hr.employee
    string='Employees' args: 'hr.employee', 'employee_category_rel', 'category_id', 'employee_id'
  • name Char
    required=True string='Tag Name'
Public methods (0)

No public methods.

New fields (50)
  • active Boolean
    readonly=True
  • address_id Many2one → res.partner
    readonly=True args: 'res.partner'
  • avatar_1024 Image
    compute_sudo=True related='employee_id.avatar_1024' args: 'Avatar 1024'
  • avatar_128 Image
    compute_sudo=True related='employee_id.avatar_128' args: 'Avatar 128'
  • avatar_1920 Image
    compute_sudo=True related='employee_id.avatar_1920' args: 'Avatar'
  • avatar_256 Image
    compute_sudo=True related='employee_id.avatar_256' args: 'Avatar 256'
  • avatar_512 Image
    compute_sudo=True related='employee_id.avatar_512' args: 'Avatar 512'
  • birthday_public_display_string Char
    related='employee_id.birthday_public_display_string' args: 'Public Date of Birth'
  • child_ids One2many → hr.employee.public
    readonly=True string='Direct subordinates' args: 'hr.employee.public', 'parent_id'
  • coach_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Coach'
  • color Integer
    readonly=True
  • company_id Many2one → res.company
    readonly=True args: 'res.company'
  • country_code Char
    compute='_compute_country_code'
  • create_date Datetime
    readonly=True
  • department_id Many2one → hr.department
    readonly=True args: 'hr.department'
  • email Char
    related='employee_id.email'
  • employee_id Many2one → hr.employee
    readonly=True args: 'hr.employee', 'Employee'
  • hr_icon_display Selection
    compute='_compute_presence_icon' selection='_get_selection_hr_icon_display'
  • hr_presence_state Selection
    compute='_compute_presence_state' default='out_of_working_hour' args: [('present', 'Present'), ('absent', 'Absent'), ('archive', 'Archived'), ('out_of_working_hour', 'Off-Hours')]
  • im_status Char
    related='employee_id.im_status'
  • image_1024 Image
    compute_sudo=True related='employee_id.image_1024' args: 'Image 1024'
  • image_128 Image
    compute_sudo=True related='employee_id.image_128' args: 'Image 128'
  • image_1920 Image
    compute_sudo=True related='employee_id.image_1920' args: 'Image'
  • image_256 Image
    compute_sudo=True related='employee_id.image_256' args: 'Image 256'
  • image_512 Image
    compute_sudo=True related='employee_id.image_512' args: 'Image 512'
  • is_manager Boolean
    compute='_compute_is_manager'
  • is_user Boolean
    compute='_compute_is_user'
  • job_id Many2one → hr.job
    readonly=True args: 'hr.job'
  • job_title Char
    related='employee_id.job_title'
  • last_activity Date
    compute='_compute_last_activity'
  • last_activity_time Char
    compute='_compute_last_activity'
  • member_of_department Boolean
    compute='_compute_member_of_department' search='_search_part_of_department'
  • mobile_phone Char
    readonly=True
  • name Char
    readonly=True
  • newly_hired Boolean
    compute='_compute_newly_hired' search='_search_newly_hired' args: 'Newly Hired'
  • parent_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Manager'
  • phone Char
    related='employee_id.phone'
  • resource_calendar_id Many2one → resource.calendar
    readonly=True args: 'resource.calendar'
  • resource_id Many2one → resource.resource
    readonly=True args: 'resource.resource'
  • share Boolean
    related='employee_id.share'
  • show_hr_icon_display Boolean
    compute='_compute_presence_icon'
  • tz Selection
    related='resource_id.tz'
  • user_id Many2one → res.users
    readonly=True args: 'res.users'
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • work_contact_id Many2one → res.partner
    readonly=True args: 'res.partner'
  • work_email Char
    readonly=True
  • work_location_id Many2one → hr.work.location
    readonly=True args: 'hr.work.location'
  • work_location_name Char
    related='employee_id.work_location_name'
  • work_location_type Selection
    related='employee_id.work_location_type'
  • work_phone Char
    readonly=True
Public methods (2)
  • get_avatar_card_data(self, fields)
  • init(self)

New fields (14)
  • active Boolean
    default=True
  • allowed_user_ids Many2many → res.users
    compute='_compute_allowed_user_ids' readonly=True args: 'res.users'
  • company_id Many2one → res.company
    default=<expr> string='Company' tracking=True args: 'res.company'
  • contract_type_id Many2one → hr.contract.type
    string='Employment Type' tracking=True args: 'hr.contract.type'
  • department_id Many2one → hr.department
    check_company=True index='btree_not_null' string='Department' tracking=True args: 'hr.department'
  • description Html
    sanitize_attributes=False string='Job Description'
  • employee_ids One2many → hr.employee
    groups='base.group_user' string='Employees' args: 'hr.employee', 'job_id'
  • expected_employees Integer
    compute='_compute_employees' groups='hr.group_hr_user' help='Expected number of employees for this job position after new recruitment.' string='Total Forecasted Employees'
  • name Char
    index='trigram' required=True string='Job Position' translate=True
  • no_of_employee Integer
    compute='_compute_employees' groups='hr.group_hr_user' help='Number of employees currently occupying this job position.' string='Current Number of Employees'
  • no_of_recruitment Integer
    copy=False default=1 help='Number of new employees you expect to recruit.' string='Target'
  • requirements Text
    groups='hr.group_hr_user' args: 'Requirements'
  • sequence Integer
    default=10
  • user_id Many2one → res.users
    default=<expr> domain="[('share', '=', False), ('company_ids', '=?', company_id)]" groups='hr.group_hr_user' help='The Recruiter will be the default value for all Applicants in this job position. The Recruiter is automatically added to all meetings with the Applicant.' tracking=True args: 'res.users', 'Recruiter'
Public methods (3)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
    We don't want the current user to be follower of all created job
  • write(self, vals)

New fields (2)
  • employee_id Many2one → hr.employee
    readonly=True string='Employee' args: 'hr.employee'
  • has_department_manager_access Boolean
    compute='_compute_has_department_manager_access' search='_search_has_department_manager_access'
Public methods (0)

No public methods.

New fields (4)
  • country_code Char
    related='country_id.code'
  • country_id Many2one → res.country
    default=<expr> domain=<expr> string='Country' args: 'res.country'
  • default_resource_calendar_id Many2one → resource.calendar
    default=<expr> args: 'resource.calendar', 'Working Hours'
  • name Char
    args: 'Salary Structure Type'
Public methods (0)

No public methods.

New fields (63)
  • active Boolean
    default=True tracking=True
  • active_employee Boolean
    groups='hr.group_hr_user' related='employee_id.active' string='Active Employee'
  • additional_note Text
    copy=False groups='hr.group_hr_user' string='Additional Note' tracking=True
  • address_id Many2one → res.partner
    check_company=True default=_get_default_address_id readonly=False store=True string='Work Address' tracking=True args: 'res.partner'
  • allowed_country_state_ids Many2many → res.country.state
    compute='_compute_allowed_country_state_ids' groups='hr.group_hr_user' args: 'res.country.state'
  • children Integer
    groups='hr.group_hr_user' string='Dependent Children' tracking=True
  • company_country_id Many2one → res.country
    readonly=True related='company_id.country_id' string='Company country' args: 'res.country'
  • company_id Many2one → res.company
    compute='_compute_company_id' default=<expr> readonly=False store=True tracking=True args: 'res.company'
  • contract_date_end Date
    groups='hr.group_hr_manager' help="End date of the contract (if it's a fixed-term contract)." tracking=True args: 'Contract End Date'
  • contract_date_start Date
    groups='hr.group_hr_manager' tracking=True args: 'Contract Start Date'
  • contract_template_id Many2one → hr.version
    domain="[('company_id', '=', company_id), ('employee_id', '=', False)]" groups='hr.group_hr_user' help='Select a contract template to auto-fill the contract form with predefined values. You can still edit the fields as needed after applying the template.' string='Contract Template' tracking=True args: 'hr.version'
  • contract_type_id Many2one → hr.contract.type
    groups='hr.group_hr_manager' tracking=True args: 'hr.contract.type', 'Contract Type'
  • contract_wage Monetary
    compute='_compute_contract_wage' groups='hr.group_hr_manager' args: 'Contract Wage'
  • country_code Char
    depends=['company_country_id'] readonly=True related='company_country_id.code'
  • country_id Many2one → res.country
    groups='hr.group_hr_user' tracking=True args: 'res.country', 'Nationality (Country)'
  • currency_id Many2one
    readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    compute='_compute_dates' groups='hr.group_hr_manager' search='_search_end_date'
  • date_start Date
    compute='_compute_dates' groups='hr.group_hr_manager' search='_search_start_date'
  • date_version Date
    default=fields.Date.today groups='hr.group_hr_user' required=True tracking=True
  • department_id Many2one → hr.department
    check_company=True index=True tracking=True args: 'hr.department'
  • departure_date Date
    copy=False groups='hr.group_hr_user' string='Departure Date' tracking=True
  • departure_description Html
    copy=False groups='hr.group_hr_user' string='Additional Information'
  • departure_reason_id Many2one → hr.departure.reason
    copy=False groups='hr.group_hr_user' ondelete='restrict' string='Departure Reason' tracking=True args: 'hr.departure.reason'
  • display_name Char
    compute='_compute_display_name'
  • distance_home_work Integer
    groups='hr.group_hr_user' string='Home-Work Distance' tracking=True
  • distance_home_work_unit Selection
    default='kilometers' groups='hr.group_hr_user' required=True tracking=True args: [('kilometers', 'km'), ('miles', 'mi')], 'Home-Work Distance unit'
  • employee_id Many2one → hr.employee
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" index=True string='Employee' tracking=True args: 'hr.employee'
  • employee_type Selection
    default='employee' groups='hr.group_hr_user' required=True string='Employee Type' tracking=True args: [('employee', 'Employee'), ('worker', 'Worker'), ('student', 'Student'), ('trainee', 'Trainee'), ('contractor', 'Contractor'), ('freelance', 'Freelancer')]
  • hr_responsible_id Many2one → res.users
    default=<expr> domain=_get_hr_responsible_domain groups='hr.group_hr_user' help="Person responsible for validating the employee's contracts." required=True tracking=True args: 'res.users', 'HR Responsible'
  • identification_id Char
    groups='hr.group_hr_user' help="Enter the employee's National Identification Number issued by the government (e.g., Aadhaar, SIN, NIN). This is used for official records and statutory compliance." string='Identification No' tracking=True
  • is_current Boolean
    compute='_compute_is_current' groups='hr.group_hr_manager'
  • is_custom_job_title Boolean
    compute='_compute_is_custom_job_title' default=False groups='hr.group_hr_user' store=True
  • is_flexible Boolean
    compute='_compute_is_flexible' groups='hr.group_hr_user' store=True
  • is_fully_flexible Boolean
    compute='_compute_is_flexible' groups='hr.group_hr_user' store=True
  • is_future Boolean
    compute='_compute_is_future' groups='hr.group_hr_manager'
  • is_in_contract Boolean
    compute='_compute_is_in_contract' groups='hr.group_hr_manager'
  • is_past Boolean
    compute='_compute_is_past' groups='hr.group_hr_manager'
  • job_id Many2one → hr.job
    check_company=True index=True tracking=True args: 'hr.job'
  • job_title Char
    compute='_compute_job_title' inverse='_inverse_job_title' readonly=False store=True string='Job Title' tracking=True
  • km_home_work Integer
    compute='_compute_km_home_work' groups='hr.group_hr_user' inverse='_inverse_km_home_work' store=True string='Home-Work Distance in Km' tracking=True
  • last_modified_date Datetime
    default=fields.Datetime.now groups='hr.group_hr_user' required=True string='Last Modified on'
  • last_modified_uid Many2one → res.users
    default=<expr> groups='hr.group_hr_user' required=True string='Last Modified by' args: 'res.users'
  • marital Selection
    default='single' groups='hr.group_hr_user' required=True selection='_get_marital_status_selection' string='Marital Status' tracking=True
  • member_of_department Boolean
    compute='_compute_part_of_department' help="Whether the employee is a member of the active user's department or one of it's child department." search='_search_part_of_department' args: 'Member of department'
  • name Char
    tracking=True
  • passport_expiration_date Date
    groups='hr.group_hr_user' tracking=True args: 'Passport Expiration Date'
  • passport_id Char
    groups='hr.group_hr_user' tracking=True args: 'Passport No'
  • private_city Char
    groups='hr.group_hr_user' string='Private City' tracking=True
  • private_country_id Many2one → res.country
    groups='hr.group_hr_user' string='Private Country' tracking=True args: 'res.country'
  • private_state_id Many2one → res.country.state
    domain="[('id', 'in', allowed_country_state_ids)]" groups='hr.group_hr_user' string='Private State' tracking=True args: 'res.country.state'
  • private_street Char
    groups='hr.group_hr_user' string='Private Street' tracking=True
  • private_street2 Char
    groups='hr.group_hr_user' string='Private Street2' tracking=True
  • private_zip Char
    groups='hr.group_hr_user' string='Private Zip' tracking=True
  • resource_calendar_id Many2one → resource.calendar
    check_company=True inverse='_inverse_resource_calendar_id' string='Working Hours' tracking=True args: 'resource.calendar'
  • sex Selection
    groups='hr.group_hr_user' help='This is the legal sex recognized by the state.' string='Gender' tracking=True args: [('male', 'Male'), ('female', 'Female'), ('other', 'Other')]
  • spouse_birthdate Date
    groups='hr.group_hr_user' string='Spouse Birthdate' tracking=True
  • spouse_complete_name Char
    groups='hr.group_hr_user' string='Spouse Legal Name' tracking=True
  • ssnid Char
    groups='hr.group_hr_user' help='Social Security Number' tracking=True args: 'SSN No'
  • structure_type_id Many2one → hr.payroll.structure.type
    compute='_compute_structure_type_id' default=_default_salary_structure groups='hr.group_hr_manager' readonly=False store=True string='Salary Structure Type' tracking=True args: 'hr.payroll.structure.type'
  • trial_date_end Date
    groups='hr.group_hr_manager' help='End date of the trial period (if there is one).' tracking=True args: 'End of Trial Period'
  • tz Selection
    related='employee_id.tz'
  • wage Monetary
    aggregator='avg' groups='hr.group_hr_manager' help="Employee's monthly gross wage." tracking=True args: 'Wage'
  • work_location_id Many2one → hr.work.location
    domain="[('address_id', '=', address_id)]" tracking=True args: 'hr.work.location', 'Work Location'
Public methods (7)
  • action_open_version(self)
  • action_open_version_form_view(self)
  • check_contract_finished(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_formview_action(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model - Contract template -> hr.version - Employee record -> hr.employee(.public) with version_id in context
  • get_values_from_contract_template(self, contract_template_id)
  • write(self, vals)

New fields (1)
  • contract_template_id Many2one → hr.version
    domain=<expr> groups='hr.group_hr_user' help='Select a contract template to auto-fill the contract form with predefined values. You can still edit the fields as needed after applying the template.' required=True string='Contract Template' args: 'hr.version'
Public methods (1)
  • action_load_template(self)

New fields (6)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    check_company=True required=True string='Work Address' args: 'res.partner'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • location_number Char
  • location_type Selection
    default='office' required=True string='Cover Image' args: [('home', 'Home'), ('office', 'Office'), ('other', 'Other')]
  • name Char
    required=True string='Work Location'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • department_assignable Boolean
    compute='_compute_department_assignable'
  • department_id Many2one → hr.department
    check_company=True compute='_compute_department_id' index='btree_not_null' ondelete='cascade' readonly=False store=True args: 'hr.department'
Public methods (0)

No public methods.

New fields (1)
  • responsible_type Selection
    ondelete={'coach': 'cascade', 'manager': 'cascade', 'employee': 'cascade'} selection_add=[('coach', 'Coach'), ('manager', 'Manager'), ('employee', 'Employee')]
Public methods (0)

No public methods.

New fields (2)
  • department_id Many2one → hr.department
    compute='_compute_department_id' args: 'hr.department'
  • plan_department_filterable Boolean
    compute='_compute_plan_department_filterable'
Public methods (0)

No public methods.

New fields (1)
  • alias_contact Selection
    ondelete={'employees': 'cascade'} selection_add=[('employees', 'Authenticated Employees')]
Public methods (0)

No public methods.

New fields (9)
  • contract_expiration_notice_period Integer
    default=7 args: 'Contract Expiry Notice Period'
  • employee_properties_definition PropertiesDefinition
    args: 'Employee Properties'
  • hr_presence_control_attendance Boolean
    string='Based on attendances'
  • hr_presence_control_email Boolean
    string='Based on number of emails sent'
  • hr_presence_control_email_amount Integer
    string='# emails to send'
  • hr_presence_control_ip Boolean
    string='Based on IP Address'
  • hr_presence_control_ip_list Char
    string='Valid IP addresses'
  • hr_presence_control_login Boolean
    default=True string='Based on user status in system'
  • work_permit_expiration_notice_period Integer
    default=60 args: 'Work Permit Expiry Notice Period'
Public methods (0)

No public methods.

New fields (11)
  • contract_expiration_notice_period Integer
    readonly=False related='company_id.contract_expiration_notice_period' string='Contract Expiry Notice Period'
  • hr_presence_control_email Boolean
    readonly=False related='company_id.hr_presence_control_email'
  • hr_presence_control_email_amount Integer
    readonly=False related='company_id.hr_presence_control_email_amount'
  • hr_presence_control_ip Boolean
    readonly=False related='company_id.hr_presence_control_ip'
  • hr_presence_control_ip_list Char
    readonly=False related='company_id.hr_presence_control_ip_list'
  • hr_presence_control_login Boolean
    readonly=False related='company_id.hr_presence_control_login'
  • module_hr_attendance Boolean
    readonly=False related='company_id.hr_presence_control_attendance'
  • module_hr_presence Boolean
    string='Advanced Presence Control'
  • module_hr_skills Boolean
    string='Skills Management'
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='company_id.resource_calendar_id' args: 'resource.calendar', 'Company Working Hours'
  • work_permit_expiration_notice_period Integer
    readonly=False related='company_id.work_permit_expiration_notice_period' string='Work Permit Expiry Notice Period'
Public methods (0)

No public methods.

New fields (3)
  • employee Boolean
    compute='_compute_employee' copy=False help='Whether this contact is an Employee.' readonly=False store=True
  • employee_ids One2many → hr.employee
    groups='hr.group_hr_user' help='Related employees based on their private address' string='Employees' args: 'hr.employee', 'work_contact_id'
  • employees_count Integer
    compute='_compute_employees_count' groups='hr.group_hr_user'
Public methods (1)
  • action_open_employees(self)

New fields (13)
  • bank_city Char
    readonly=False related='bank_id.city'
  • bank_country Many2one
    readonly=False related='bank_id.country'
  • bank_email Char
    readonly=False related='bank_id.email'
  • bank_phone Char
    readonly=False related='bank_id.phone'
  • bank_state Many2one
    readonly=False related='bank_id.state'
  • bank_street Char
    readonly=False related='bank_id.street'
  • bank_street2 Char
    readonly=False related='bank_id.street2'
  • bank_zip Char
    readonly=False related='bank_id.zip'
  • currency_symbol Char
    related='currency_id.symbol'
  • employee_has_multiple_bank_accounts Boolean
    related='employee_id.has_multiple_bank_accounts'
  • employee_id Many2many → hr.employee
    compute='_compute_employee_id' search='_search_employee_id' args: 'hr.employee', 'Employee'
  • employee_salary_amount Float
    compute='_compute_salary_amount' digits=(16, 4) readonly=True store=False string='Salary Allocation'
  • employee_salary_amount_is_percentage Boolean
    compute='_compute_salary_amount' readonly=True store=False
Public methods (1)
  • action_open_allocation_wizard(self)

New fields (34)
  • additional_note Text
    readonly=False related='employee_id.additional_note' related_sudo=False
  • bank_account_ids Many2many
    related='employee_id.bank_account_ids'
  • barcode Char
    readonly=False related='employee_id.barcode' related_sudo=False
  • category_ids Many2many
    readonly=False related='employee_id.category_ids' related_sudo=False string='Employee Tags'
  • create_employee Boolean
    copy=False default=False store=False string='Technical field, whether to create an employee'
  • create_employee_id Many2one → hr.employee
    copy=False store=False string='Technical field, bind user to this employee on create' args: 'hr.employee'
  • emergency_contact Char
    readonly=False related='employee_id.emergency_contact' related_sudo=False
  • emergency_phone Char
    readonly=False related='employee_id.emergency_phone' related_sudo=False
  • employee_bank_account_ids Many2many → res.partner.bank
    readonly=False related='employee_id.bank_account_ids' related_sudo=False string="Employee's Bank Accounts" args: 'res.partner.bank'
  • employee_count Integer
    compute='_compute_employee_count'
  • employee_id Many2one → hr.employee
    compute='_compute_company_employee' search='_search_company_employee' store=False string='Company employee' args: 'hr.employee'
  • employee_ids One2many → hr.employee
    domain=_employee_ids_domain string='Related employee' args: 'hr.employee', 'user_id'
  • employee_resource_calendar_id Many2one
    readonly=True related='employee_id.resource_calendar_id' string="Employee's Working Hours"
  • is_hr_user Boolean
    compute='_compute_is_hr_user'
  • is_system Boolean
    compute='_compute_is_system'
  • job_title Char
    related='employee_id.job_title'
  • km_home_work Integer
    readonly=False related='employee_id.km_home_work' related_sudo=False
  • mobile_phone Char
    readonly=False related='employee_id.mobile_phone' related_sudo=False
  • pin Char
    readonly=False related='employee_id.pin' related_sudo=False
  • private_city Char
    readonly=False related='employee_id.private_city' related_sudo=False string='Private City'
  • private_country_id Many2one
    readonly=False related='employee_id.private_country_id' related_sudo=False string='Private Country'
  • private_email Char
    readonly=False related='employee_id.private_email' string='Private Email'
  • private_phone Char
    readonly=False related='employee_id.private_phone' related_sudo=False
  • private_state_id Many2one
    domain="[('country_id', '=?', private_country_id)]" readonly=False related='employee_id.private_state_id' related_sudo=False string='Private State'
  • private_street Char
    readonly=False related='employee_id.private_street' related_sudo=False string='Private Street'
  • private_street2 Char
    readonly=False related='employee_id.private_street2' related_sudo=False string='Private Street2'
  • private_zip Char
    readonly=False related='employee_id.private_zip' related_sudo=False string='Private Zip'
  • visa_expire Date
    readonly=False related='employee_id.visa_expire' related_sudo=False
  • work_contact_id Many2one
    readonly=False related='employee_id.work_contact_id' related_sudo=False
  • work_email Char
    readonly=False related='employee_id.work_email' related_sudo=False
  • work_location_id Many2one
    readonly=False related='employee_id.work_location_id' related_sudo=True
  • work_location_name Char
    related='employee_id.work_location_name'
  • work_location_type Selection
    related='employee_id.work_location_type'
  • work_phone Char
    readonly=False related='employee_id.work_phone' related_sudo=False
Public methods (11)
  • SELF_READABLE_FIELDS(self)
    @property
  • SELF_WRITEABLE_FIELDS(self)
    @property
  • action_create_employee(self)
  • action_get(self)
    @api.model
  • action_open_employees(self)
  • action_related_contact(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_formview_action(self, access_uid=None)
    Override this method in order to redirect many2one towards the full user form view incase the user is ERP manager and the request coming from employee form.
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
  • get_views(self, views, options=None)
    @api.model
  • write(self, vals)
    Synchronize user and its related employee and check access rights if employees are not allowed to update their own data (otherwise sudo is applied for self data).

New fields (0)

No new fields.

Public methods (1)
  • transfer_leaves_to(self, other_calendar, resources=None, from_date=None)
    Transfer some resource.calendar.leaves from 'self' to another calendar 'other_calendar'. Transfered leaves linked to `resources` (or all if `resources` is None) and starting after 'from_date' (or today if None).

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (10)
  • calendar_id Many2one
    inverse='_inverse_calendar_id'
  • department_id Many2one → hr.department
    compute='_compute_department_id' compute_sudo=True args: 'hr.department'
  • employee_id One2many → hr.employee
    check_company=True context={'active_test': False} args: 'hr.employee', 'resource_id'
  • hr_icon_display Selection
    related='employee_id.hr_icon_display'
  • job_title Char
    compute='_compute_job_title' compute_sudo=True
  • show_hr_icon_display Boolean
    related='employee_id.show_hr_icon_display'
  • user_id Many2one
    copy=False
  • work_email Char
    related='employee_id.work_email'
  • work_location_id Many2one
    related='employee_id.work_location_id'
  • work_phone Char
    related='employee_id.work_phone'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources/Employees
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Xavier ALT, Christophe Simonis, Aaron Bohy, Jeremy Kersten, Damien Bouvy, Yannick Tivisse, Odoo Online, Pierre Masereel, Jorge Pinna Puissant, Alexandre Kühn, Xavier-Do, Sébastien Theys, Alvaro Fuentes, Brice bib Bartoletti, Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, bit-odoo, Ahmad Khanalizadeh, sofiagvaladze, Didier (did), Hubert Van De Walle, Dossogne Bertrand, Vincent Larcin, Thomas Lefebvre (thle), alsh-odoo, Louis Wicket (wil), tsm-odoo, Victor Piryns (pivi), Yash Vaishnav, Mahamadasif Ansari, amdi-odoo, Simon Genin (ges), Pierre-Yves Dufays, Levi Siuzdak (sile), Dylan Kiss (dyki), Simon Goffaux (sigo), Hugo Carlier (Huca), Xavier Bol (xbo), Mattis Megevand (mmeg), omra-odoo, kdeb@odoo.com, stefanorigano (SRI), ravb-odoo, Mélanie, Youssef Bashandy, Ethan Vincent, Benjamin Hanquin (beha), bary, Maryam Kia, Flotchet, jugj-odoo, Bastien Fafchamps (bafa), Julien Carion (juca), Tanguy Quéguineur, Martin Trigaux (mat), Ahmad (khah), Chrysanthe (chgo), sami odoo, Louis (wil), asno-odoo, mano-odoo, rmun-odoo, aamo-odoo, Shaan Thakkar (THSH), kais-odoo, rame-odoo, Kacper Gasior, Abdelrahman Mahmoud (amah), sapp-odoo, Sina Chaichi Maleki (cmsi), gteboul, Pierre Pulinckx (PIPU), sben-odoo, gvar-odoo, Maira Salazar (srma), Chris Duvivier, nikj-odoo, Pierre Pulinckx (pipu), Bastien PIERRE, zel-odoo, Krzysztof Magusiak (krma), Basioni (basm), Guillaume V, MAGREMENT, Dhwani Patel, adip-odoo, ksar-odoo, dhka-odoo, Einar Andersen (eian), Arthur Pierrot (arpi), Dinh Van Khoa (JocelynVN), Hashem Elmaleeh, saurabh, cmsi-odoo, raja prasad, floctchet, Martin Lefèvre (mlef), Hashem
WEBSITE
WEBSITEhttps://www.odoo.com/app/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - digest
    - mail
    - bus
    - web_tour
    - html_editor
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - phone_validation
    - resource_mail
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (46)
XML IDNameModelTypeStatus
discuss_channel_view_form discuss.channel.view.form.inherit.hr discuss.channel xpath Inherits mail.discuss_channel_view_form
hr_contract_type_view_form hr.contract.type form New
hr_contract_type_view_tree hr.contract.type list New
hr_department_view_kanban hr.department.kanban hr.department kanban New
hr_departure_reason_view_form hr.departure.reason form New
hr_departure_reason_view_list hr.departure.reason list New
hr_departure_wizard_view_form hr.departure.wizard.view.form hr.departure.wizard form New
hr_employee_plan_activity_summary hr_employee_plan_activity_summary ir.ui.view qweb New
hr_employee_public_view_form hr.employee.public.form hr.employee.public form New
hr_employee_public_view_kanban hr.employee.kanban hr.employee.public kanban New
hr_employee_public_view_search hr.employee.search hr.employee.public search New
hr_employee_public_view_tree hr.employee.list hr.employee.public list New
hr_employee_view_activity hr.employee.activity hr.employee activity New
hr_employee_view_graph hr.employee.view.graph hr.employee graph New
hr_employee_view_pivot hr.employee.view.pivot hr.employee pivot New
hr_job_view_kanban hr.job.kanban hr.job kanban New
hr_kanban_view_employees hr.employee.kanban hr.employee kanban New
hr_work_location_form_view hr.work.location.view.form hr.work.location form New
hr_work_location_tree_view hr.work.location.view.list hr.work.location list New
mail_activity_plan_template_view_form mail.activity.plan.template.view.form.inherit.hr mail.activity.plan.template xpath Inherits mail.mail_activity_plan_template_view_form
mail_activity_plan_view_form mail.activity.plan.view.form.inherit.hr mail.activity.plan xpath Inherits mail.mail_activity_plan_view_form
mail_activity_plan_view_form_hr_employee mail.activity.plan.view.form.hr.employee mail.activity.plan xpath Inherits mail.mail_activity_plan_view_form_fixed_model
mail_activity_plan_view_tree mail.activity.plan.view.list.inherit.hr mail.activity.plan xpath Inherits mail.mail_activity_plan_view_tree
mail_activity_schedule_view_form mail.activity.schedule.view.form.inherit.hr mail.activity.schedule xpath Inherits mail.mail_activity_schedule_view_form
print_employee_badge print_employee_badge ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_form res.partner.view.form.inherit.hr res.partner div Inherits base.view_partner_form
res_partner_view_search res.partner.search.inherit res.partner xpath Inherits base.view_res_partner_filter
res_users_view_form res.users.form.inherit res.users xpath Inherits base.view_users_form
res_users_view_form_profile res.users.preferences.form.inherit res.users form Inherits res_users_view_form_simple_modif
res_users_view_form_simple_modif res.users.preferences.form.simplified.inherit res.users footer Inherits base.view_users_form_simple_modif
view_department_filter hr.department.search hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.list hr.department list New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category list New
view_employee_filter hr.employee.search hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_form_smartbutton_inherited view.employee.form.smartbutton.inherited hr.employee div Inherits view_employee_form
view_employee_tree hr.employee.list hr.employee list New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.list hr.job list New
view_job_filter hr.job.search hr.job search New
view_users_form_simple_modif_resource res.users.preferences.form.resource res.users field Inherits base.view_users_form_simple_modif
view_users_simple_form view.users.simple.form.hr res.users sheet Inherits base.view_users_simple_form
view_users_simple_form_inherit_hr view.users.simple.form.inherit.hr res.users xpath Inherits base.view_users_simple_form
Models touched (25)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • subscription_department_ids Many2many → hr.department
    help='Automatically subscribe members of those departments to the channel.' string='HR Departments' args: 'hr.department'
Public methods (1)
  • write(self, vals)

New fields (4)
  • code Char
    compute='_compute_code' readonly=False store=True
  • country_id Many2one → res.country
    args: 'res.country'
  • name Char
    required=True translate=True
  • sequence Integer
Public methods (0)

No public methods.

New fields (17)
  • active Boolean
    default=True args: 'Active'
  • child_ids One2many → hr.department
    string='Child Departments' args: 'hr.department', 'parent_id'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> index=True string='Company' args: 'res.company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True store=True args: 'Complete Name'
  • has_read_access Boolean
    export_string_translation=False search='_search_has_read_access' store=False
  • jobs_ids One2many → hr.job
    string='Jobs' args: 'hr.job', 'department_id'
  • manager_id Many2one → hr.employee
    domain="['|', ('company_id', '=', False), ('company_id', 'in', allowed_company_ids)]" string='Manager' tracking=True args: 'hr.employee'
  • master_department_id Many2one → hr.department
    compute='_compute_master_department_id' store=True args: 'hr.department', 'Master Department'
  • member_ids One2many → hr.employee
    readonly=True string='Members' args: 'hr.employee', 'department_id'
  • name Char
    required=True translate=True args: 'Department Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → hr.department
    check_company=True index=True string='Parent Department' args: 'hr.department'
  • parent_path Char
    index=True
  • plan_ids One2many → mail.activity.plan
    args: 'mail.activity.plan', 'department_id'
  • plans_count Integer
    compute='_compute_plan_count'
  • total_employee Integer
    compute='_compute_total_employee' export_string_translation=False string='Total Employee'
Public methods (9)
  • action_employee_from_department(self)
  • action_open_view_child_departments(self)
  • action_plan_from_department(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_children_department_ids(self)
  • get_department_hierarchy(self)
  • get_formview_action(self, access_uid=None)
  • name_create(self, name)
    @api.model
  • write(self, vals)
    If updating manager of a department, we need to update all the employees of department hierarchy, and subscribe the new manager.

New fields (3)
  • name Char
    required=True string='Reason' translate=True
  • reason_code Integer
  • sequence Integer
    default=10 args: 'Sequence'
Public methods (0)

No public methods.

New fields (4)
  • departure_date Date
    default=_get_default_departure_date required=True string='Departure Date'
  • departure_description Html
    string='Additional Information'
  • departure_reason_id Many2one → hr.departure.reason
    default=<expr> required=True args: 'hr.departure.reason'
  • employee_id Many2one → hr.employee
    default=<expr> required=True string='Employee' args: 'hr.employee'
Public methods (1)
  • action_register_departure(self)

New fields (86)
  • active Boolean
    default=True readonly=False related='resource_id.active' store=True args: 'Active'
  • activity_date_deadline Date
    groups='hr.group_hr_user'
  • activity_exception_decoration Selection
    groups='hr.group_hr_user'
  • activity_exception_icon Char
    groups='hr.group_hr_user'
  • activity_ids One2many
    groups='hr.group_hr_user'
  • activity_state Selection
    groups='hr.group_hr_user'
  • activity_summary Char
    groups='hr.group_hr_user'
  • activity_type_icon Char
    groups='hr.group_hr_user'
  • activity_type_id Many2one
    groups='hr.group_hr_user'
  • activity_user_id Many2one
    groups='hr.group_hr_user'
  • additional_note Text
    groups='hr.group_hr_user' string='Additional Note' tracking=True
  • bank_account_id Many2one → res.partner.bank
    copy=False domain="[('partner_id', '=', work_contact_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" groups='hr.group_hr_user' help='Employee bank account to pay salaries' tracking=True args: 'res.partner.bank', 'Bank Account'
  • barcode Char
    copy=False groups='hr.group_hr_user' help='ID used for employee identification.' string='Badge ID'
  • birthday Date
    groups='hr.group_hr_user' tracking=True args: 'Date of Birth'
  • category_ids Many2many → hr.employee.category
    groups='hr.group_hr_user' string='Tags' args: 'hr.employee.category', 'employee_category_rel', 'employee_id', 'category_id'
  • certificate Selection
    groups='hr.group_hr_user' tracking=True args: [('graduate', 'Graduate'), ('bachelor', 'Bachelor'), ('master', 'Master'), ('doctor', 'Doctor'), ('other', 'Other')], 'Certificate Level'
  • child_ids One2many → hr.employee
    string='Direct subordinates' args: 'hr.employee', 'parent_id'
  • children Integer
    groups='hr.group_hr_user' string='Number of Dependent Children' tracking=True
  • color Integer
    default=0 args: 'Color Index'
  • company_country_code Char
    depends=['company_country_id'] groups='base.group_system,hr.group_hr_user' readonly=True related='company_country_id.code'
  • company_country_id Many2one → res.country
    groups='base.group_system,hr.group_hr_user' readonly=True related='company_id.country_id' args: 'res.country', 'Company Country'
  • company_id Many2one → res.company
    required=True args: 'res.company'
  • country_id Many2one → res.country
    groups='hr.group_hr_user' tracking=True args: 'res.country', 'Nationality (Country)'
  • country_of_birth Many2one → res.country
    groups='hr.group_hr_user' string='Country of Birth' tracking=True args: 'res.country'
  • currency_id Many2one → res.currency
    groups='hr.group_hr_user' readonly=True related='company_id.currency_id' args: 'res.currency'
  • department_id Many2one
    tracking=True
  • departure_date Date
    copy=False groups='hr.group_hr_user' string='Departure Date' tracking=True
  • departure_description Html
    copy=False groups='hr.group_hr_user' string='Additional Information'
  • departure_reason_id Many2one → hr.departure.reason
    copy=False groups='hr.group_hr_user' ondelete='restrict' string='Departure Reason' tracking=True args: 'hr.departure.reason'
  • distance_home_work Integer
    groups='hr.group_hr_user' string='Home-Work Distance' tracking=True
  • distance_home_work_unit Selection
    default='kilometers' groups='hr.group_hr_user' required=True tracking=True args: [('kilometers', 'km'), ('miles', 'mi')], 'Home-Work Distance unit'
  • driving_license Binary
    groups='hr.group_hr_user' string='Driving License'
  • emergency_contact Char
    groups='hr.group_hr_user' tracking=True args: 'Contact Name'
  • emergency_phone Char
    groups='hr.group_hr_user' tracking=True args: 'Contact Phone'
  • employee_properties Properties
    definition='company_id.employee_properties_definition' groups='hr.group_hr_user' precompute=False args: 'Properties'
  • employee_type Selection
    default='employee' groups='hr.group_hr_user' help='Categorize your Employees by type. This field also has an impact on contracts. Only Employees, Students and Trainee will have contract history.' required=True string='Employee Type' args: [('employee', 'Employee'), ('worker', 'Worker'), ('student', 'Student'), ('trainee', 'Trainee'), ('contractor', 'Contractor'), ('freelance', 'Freelancer')]
  • gender Selection
    groups='hr.group_hr_user' tracking=True args: [('male', 'Male'), ('female', 'Female'), ('other', 'Other')]
  • has_message Boolean
    groups='hr.group_hr_user'
  • has_work_permit Binary
    groups='hr.group_hr_user' string='Work Permit'
  • id_card Binary
    groups='hr.group_hr_user' string='ID Card Copy'
  • identification_id Char
    groups='hr.group_hr_user' string='Identification No' tracking=True
  • job_id Many2one
    tracking=True
  • km_home_work Integer
    compute='_compute_km_home_work' groups='hr.group_hr_user' inverse='_inverse_km_home_work' store=True string='Home-Work Distance in Km'
  • lang Selection
    groups='hr.group_hr_user' selection=_lang_get string='Lang'
  • marital Selection
    default='single' groups='hr.group_hr_user' required=True selection='_get_marital_status_selection' string='Marital Status' tracking=True
  • message_attachment_count Integer
    groups='hr.group_hr_user'
  • message_follower_ids One2many
    groups='hr.group_hr_user'
  • message_has_error Boolean
    groups='hr.group_hr_user'
  • message_has_error_counter Integer
    groups='hr.group_hr_user'
  • message_ids One2many
    groups='hr.group_hr_user'
  • message_is_follower Boolean
    groups='hr.group_hr_user'
  • message_main_attachment_id Many2one
    groups='hr.group_hr_user'
  • message_needaction Boolean
    groups='hr.group_hr_user'
  • message_needaction_counter Integer
    groups='hr.group_hr_user'
  • message_partner_ids Many2many
    groups='hr.group_hr_user'
  • my_activity_date_deadline Date
    groups='hr.group_hr_user'
  • name Char
    readonly=False related='resource_id.name' store=True string='Employee Name' tracking=True
  • notes Text
    groups='hr.group_hr_user' args: 'Notes'
  • passport_id Char
    groups='hr.group_hr_user' tracking=True args: 'Passport No'
  • permit_no Char
    groups='hr.group_hr_user' tracking=True args: 'Work Permit No'
  • pin Char
    copy=False groups='hr.group_hr_user' help='PIN used to Check In/Out in the Kiosk Mode of the Attendance application (if enabled in Configuration) and to change the cashier in the Point of Sale application.' string='PIN'
  • place_of_birth Char
    groups='hr.group_hr_user' tracking=True args: 'Place of Birth'
  • private_car_plate Char
    groups='hr.group_hr_user' help='If you have more than one car, just separate the plates by a space.'
  • private_city Char
    groups='hr.group_hr_user' string='Private City'
  • private_country_id Many2one → res.country
    groups='hr.group_hr_user' string='Private Country' args: 'res.country'
  • private_email Char
    groups='hr.group_hr_user' string='Private Email'
  • private_phone Char
    groups='hr.group_hr_user' string='Private Phone'
  • private_state_id Many2one → res.country.state
    domain="[('country_id', '=?', private_country_id)]" groups='hr.group_hr_user' string='Private State' args: 'res.country.state'
  • private_street Char
    groups='hr.group_hr_user' string='Private Street'
  • private_street2 Char
    groups='hr.group_hr_user' string='Private Street2'
  • private_zip Char
    groups='hr.group_hr_user' string='Private Zip'
  • related_partners_count Integer
    compute='_compute_related_partners_count' groups='hr.group_hr_user'
  • resource_calendar_id Many2one
    tracking=True
  • sinid Char
    groups='hr.group_hr_user' help='Social Insurance Number' tracking=True args: 'SIN No'
  • spouse_birthdate Date
    groups='hr.group_hr_user' string='Spouse Birthdate' tracking=True
  • spouse_complete_name Char
    groups='hr.group_hr_user' string='Spouse Complete Name' tracking=True
  • ssnid Char
    groups='hr.group_hr_user' help='Social Security Number' tracking=True args: 'SSN No'
  • study_field Char
    groups='hr.group_hr_user' tracking=True args: 'Field of Study'
  • study_school Char
    groups='hr.group_hr_user' tracking=True args: 'School'
  • user_id Many2one → res.users
    check_company=True ondelete='restrict' precompute=True readonly=False related='resource_id.user_id' store=True args: 'res.users', 'User'
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • visa_expire Date
    groups='hr.group_hr_user' tracking=True args: 'Visa Expiration Date'
  • visa_no Char
    groups='hr.group_hr_user' tracking=True args: 'Visa No'
  • work_permit_expiration_date Date
    groups='hr.group_hr_user' tracking=True args: 'Work Permit Expiration Date'
  • work_permit_name Char
    compute='_compute_work_permit_name' groups='hr.group_hr_user' args: 'work_permit_name'
  • work_permit_scheduled_activity Boolean
    default=False groups='hr.group_hr_user'
Public methods (16)
  • action_create_user(self)
  • action_related_contacts(self)
  • check_field_access_rights(self, operation, field_names)
    @api.model
  • create(self, vals_list)
    @api.model_create_multi
  • fetch(self, field_names)
  • filter_valid(self, checked_date)
  • generate_random_barcode(self)
  • get_formview_action(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_formview_id(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_import_templates(self)
    @api.model
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
  • get_views(self, views, options=None)
    @api.model
  • search_fetch(self, domain, field_names, offset=0, limit=None, order=None)
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (34)
  • active Boolean
    args: 'Active'
  • address_id Many2one → res.partner
    check_company=True compute='_compute_address_id' precompute=True readonly=False store=True string='Work Address' args: 'res.partner'
  • coach_id Many2one → hr.employee
    compute='_compute_coach' domain="['|', ('company_id', '=', False), ('company_id', 'in', allowed_company_ids)]" help='Select the "Employee" who is the coach of this employee.\nThe "Coach" has no specific rights or responsibilities by default.' readonly=False store=True args: 'hr.employee', 'Coach'
  • color Integer
    default=0 args: 'Color Index'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • department_id Many2one → hr.department
    check_company=True args: 'hr.department', 'Department'
  • email Char
    related='user_id.email'
  • hr_icon_display Selection
    compute='_compute_presence_icon' args: [('presence_present', 'Present'), ('presence_out_of_working_hour', 'Out of Working hours'), ('presence_absent', 'Absent'), ('presence_archive', 'Archived'), ('presence_undetermined', 'Undetermined')]
  • hr_presence_state Selection
    compute='_compute_presence_state' default='out_of_working_hour' args: [('present', 'Present'), ('absent', 'Absent'), ('archive', 'Archived'), ('out_of_working_hour', 'Out of Working hours')]
  • im_status Char
    related='user_id.im_status'
  • is_flexible Boolean
    compute='_compute_is_flexible' store=True
  • is_fully_flexible Boolean
    compute='_compute_is_flexible' store=True
  • job_id Many2one → hr.job
    check_company=True args: 'hr.job', 'Job Position'
  • job_title Char
    compute='_compute_job_title' readonly=False store=True args: 'Job Title'
  • last_activity Date
    compute='_compute_last_activity'
  • last_activity_time Char
    compute='_compute_last_activity'
  • member_of_department Boolean
    compute='_compute_part_of_department' help="Whether the employee is a member of the active user's department or one of it's child department." search='_search_part_of_department' args: 'Member of department'
  • mobile_phone Char
    compute='_compute_work_contact_details' inverse='_inverse_work_contact_details' store=True args: 'Work Mobile'
  • name Char
  • newly_hired Boolean
    compute='_compute_newly_hired' search='_search_newly_hired' args: 'Newly Hired'
  • parent_id Many2one → hr.employee
    compute='_compute_parent_id' domain="['|', ('company_id', '=', False), ('company_id', 'in', allowed_company_ids)]" readonly=False store=True args: 'hr.employee', 'Manager'
  • phone Char
    related='user_id.phone'
  • resource_calendar_id Many2one → resource.calendar
    check_company=True args: 'resource.calendar'
  • resource_id Many2one → resource.resource
    args: 'resource.resource'
  • share Boolean
    related='user_id.share'
  • show_hr_icon_display Boolean
    compute='_compute_presence_icon'
  • tz Selection
    help='This field is used in order to define in which timezone the employee will work.' readonly=False related='resource_id.tz' string='Timezone'
  • user_id Many2one → res.users
    help='' args: 'res.users'
  • work_contact_id Many2one → res.partner
    copy=False args: 'res.partner', 'Work Contact'
  • work_email Char
    compute='_compute_work_contact_details' inverse='_inverse_work_contact_details' store=True args: 'Work Email'
  • work_location_id Many2one → hr.work.location
    domain="[('address_id', '=', address_id)]" args: 'hr.work.location', 'Work Location'
  • work_location_name Char
    compute='_compute_work_location_name_type' args: 'Work Location Name'
  • work_location_type Selection
    compute='_compute_work_location_name_type' args: [('home', 'Home'), ('office', 'Office'), ('other', 'Other')]
  • work_phone Char
    compute='_compute_phones' readonly=False store=True args: 'Work Phone'
Public methods (1)
  • get_avatar_card_data(self, fields)

New fields (3)
  • color Integer
    default=_get_default_color string='Color Index'
  • employee_ids Many2many → hr.employee
    string='Employees' args: 'hr.employee', 'employee_category_rel', 'category_id', 'employee_id'
  • name Char
    required=True string='Tag Name'
Public methods (0)

No public methods.

New fields (33)
  • active Boolean
    readonly=True
  • address_id Many2one
    readonly=True
  • avatar_1024 Image
    compute_sudo=True related='employee_id.avatar_1024' args: 'Avatar 1024'
  • avatar_128 Image
    compute_sudo=True related='employee_id.avatar_128' args: 'Avatar 128'
  • avatar_1920 Image
    compute_sudo=True related='employee_id.avatar_1920' args: 'Avatar'
  • avatar_256 Image
    compute_sudo=True related='employee_id.avatar_256' args: 'Avatar 256'
  • avatar_512 Image
    compute_sudo=True related='employee_id.avatar_512' args: 'Avatar 512'
  • child_ids One2many → hr.employee.public
    readonly=True string='Direct subordinates' args: 'hr.employee.public', 'parent_id'
  • coach_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Coach'
  • color Integer
    readonly=True
  • company_id Many2one
    readonly=True
  • create_date Datetime
    readonly=True
  • department_id Many2one
    readonly=True
  • employee_id Many2one → hr.employee
    compute='_compute_employee_id' compute_sudo=True search='_search_employee_id' args: 'hr.employee', 'Employee'
  • image_1024 Image
    compute_sudo=True related='employee_id.image_1024' args: 'Image 1024'
  • image_128 Image
    compute_sudo=True related='employee_id.image_128' args: 'Image 128'
  • image_1920 Image
    compute_sudo=True related='employee_id.image_1920' args: 'Image'
  • image_256 Image
    compute_sudo=True related='employee_id.image_256' args: 'Image 256'
  • image_512 Image
    compute_sudo=True related='employee_id.image_512' args: 'Image 512'
  • is_manager Boolean
    compute='_compute_is_manager'
  • job_id Many2one
    readonly=True
  • job_title Char
    readonly=True
  • mobile_phone Char
    readonly=True
  • name Char
    readonly=True
  • parent_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Manager'
  • resource_id Many2one
    readonly=True
  • tz Selection
    readonly=True
  • user_id Many2one
    readonly=True
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • work_contact_id Many2one
    readonly=True
  • work_email Char
    readonly=True
  • work_location_id Many2one
    readonly=True
  • work_phone Char
    readonly=True
Public methods (1)
  • init(self)

New fields (12)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • contract_type_id Many2one → hr.contract.type
    string='Employment Type' args: 'hr.contract.type'
  • department_id Many2one → hr.department
    check_company=True string='Department' args: 'hr.department'
  • description Html
    sanitize_attributes=False string='Job Description'
  • employee_ids One2many → hr.employee
    groups='base.group_user' string='Employees' args: 'hr.employee', 'job_id'
  • expected_employees Integer
    compute='_compute_employees' help='Expected number of employees for this job position after new recruitment.' store=True string='Total Forecasted Employees'
  • name Char
    index='trigram' required=True string='Job Position' translate=True
  • no_of_employee Integer
    compute='_compute_employees' help='Number of employees currently occupying this job position.' store=True string='Current Number of Employees'
  • no_of_recruitment Integer
    copy=False default=1 help='Number of new employees you expect to recruit.' string='Target'
  • requirements Text
    args: 'Requirements'
  • sequence Integer
    default=10
Public methods (3)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
    We don't want the current user to be follower of all created job
  • write(self, vals)

New fields (2)
  • employee_id Many2one → hr.employee
    readonly=True string='Employee' args: 'hr.employee'
  • has_department_manager_access Boolean
    compute='_compute_has_department_manager_access' search='_search_has_department_manager_access'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    check_company=True required=True string='Work Address' args: 'res.partner'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • location_number Char
  • location_type Selection
    default='office' required=True string='Cover Image' args: [('home', 'Home'), ('office', 'Office'), ('other', 'Other')]
  • name Char
    required=True string='Work Location'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • department_assignable Boolean
    compute='_compute_department_assignable'
  • department_id Many2one → hr.department
    check_company=True compute='_compute_department_id' ondelete='cascade' readonly=False store=True args: 'hr.department'
Public methods (0)

No public methods.

New fields (1)
  • responsible_type Selection
    ondelete={'coach': 'cascade', 'manager': 'cascade', 'employee': 'cascade'} selection_add=[('coach', 'Coach'), ('manager', 'Manager'), ('employee', 'Employee')]
Public methods (0)

No public methods.

New fields (2)
  • department_id Many2one → hr.department
    compute='_compute_department_id' args: 'hr.department'
  • plan_department_filterable Boolean
    compute='_compute_plan_department_filterable'
Public methods (0)

No public methods.

New fields (1)
  • alias_contact Selection
    ondelete={'employees': 'cascade'} selection_add=[('employees', 'Authenticated Employees')]
Public methods (0)

No public methods.

New fields (7)
  • employee_properties_definition PropertiesDefinition
    args: 'Employee Properties'
  • hr_presence_control_attendance Boolean
    string='Based on attendances'
  • hr_presence_control_email Boolean
    string='Based on number of emails sent'
  • hr_presence_control_email_amount Integer
    string='# emails to send'
  • hr_presence_control_ip Boolean
    string='Based on IP Address'
  • hr_presence_control_ip_list Char
    string='Valid IP addresses'
  • hr_presence_control_login Boolean
    default=True string='Based on user status in system'
Public methods (0)

No public methods.

New fields (11)
  • hr_employee_self_edit Boolean
    config_parameter='hr.hr_employee_self_edit' string='Employee Editing'
  • hr_presence_control_email Boolean
    readonly=False related='company_id.hr_presence_control_email'
  • hr_presence_control_email_amount Integer
    readonly=False related='company_id.hr_presence_control_email_amount'
  • hr_presence_control_ip Boolean
    readonly=False related='company_id.hr_presence_control_ip'
  • hr_presence_control_ip_list Char
    readonly=False related='company_id.hr_presence_control_ip_list'
  • hr_presence_control_login Boolean
    readonly=False related='company_id.hr_presence_control_login'
  • module_hr_attendance Boolean
    readonly=False related='company_id.hr_presence_control_attendance'
  • module_hr_homeworking Boolean
    string='Remote Work'
  • module_hr_presence Boolean
    string='Advanced Presence Control'
  • module_hr_skills Boolean
    string='Skills Management'
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='company_id.resource_calendar_id' args: 'resource.calendar', 'Company Working Hours'
Public methods (0)

No public methods.

New fields (2)
  • employee_ids One2many → hr.employee
    groups='hr.group_hr_user' help='Related employees based on their private address' string='Employees' args: 'hr.employee', 'work_contact_id'
  • employees_count Integer
    compute='_compute_employees_count' groups='hr.group_hr_user'
Public methods (1)
  • action_open_employees(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (62)
  • additional_note Text
    readonly=False related='employee_id.additional_note' related_sudo=False
  • address_id Many2one
    readonly=False related='employee_id.address_id' related_sudo=False
  • barcode Char
    readonly=False related='employee_id.barcode' related_sudo=False
  • birthday Date
    readonly=False related='employee_id.birthday' related_sudo=False
  • can_edit Boolean
    compute='_compute_can_edit'
  • category_ids Many2many
    readonly=False related='employee_id.category_ids' related_sudo=False string='Employee Tags'
  • certificate Selection
    readonly=False related='employee_id.certificate' related_sudo=False
  • children Integer
    readonly=False related='employee_id.children' related_sudo=False
  • coach_id Many2one
    readonly=False related='employee_id.coach_id' related_sudo=False
  • country_of_birth Many2one
    readonly=False related='employee_id.country_of_birth' related_sudo=False
  • create_employee Boolean
    copy=False default=False store=False string='Technical field, whether to create an employee'
  • create_employee_id Many2one → hr.employee
    copy=False store=False string='Technical field, bind user to this employee on create' args: 'hr.employee'
  • department_id Many2one
    readonly=False related='employee_id.department_id' related_sudo=False
  • distance_home_work Integer
    readonly=False related='employee_id.distance_home_work' related_sudo=False
  • distance_home_work_unit Selection
    readonly=False related='employee_id.distance_home_work_unit' related_sudo=False
  • emergency_contact Char
    readonly=False related='employee_id.emergency_contact' related_sudo=False
  • emergency_phone Char
    readonly=False related='employee_id.emergency_phone' related_sudo=False
  • employee_bank_account_id Many2one
    readonly=False related='employee_id.bank_account_id' related_sudo=False string="Employee's Bank Account Number"
  • employee_count Integer
    compute='_compute_employee_count'
  • employee_country_code Char
    readonly=True related='employee_id.company_country_code' related_sudo=False string="Employee's Country Code"
  • employee_country_id Many2one
    readonly=False related='employee_id.country_id' related_sudo=False string="Employee's Country"
  • employee_id Many2one → hr.employee
    compute='_compute_company_employee' search='_search_company_employee' store=False string='Company employee' args: 'hr.employee'
  • employee_ids One2many → hr.employee
    domain=_employee_ids_domain string='Related employee' args: 'hr.employee', 'user_id'
  • employee_parent_id Many2one
    readonly=False related='employee_id.parent_id' related_sudo=False
  • employee_resource_calendar_id Many2one
    readonly=True related='employee_id.resource_calendar_id' string="Employee's Working Hours"
  • employee_type Selection
    readonly=False related='employee_id.employee_type' related_sudo=False
  • gender Selection
    readonly=False related='employee_id.gender' related_sudo=False
  • hr_presence_state Selection
    related='employee_id.hr_presence_state'
  • identification_id Char
    readonly=False related='employee_id.identification_id' related_sudo=False
  • is_system Boolean
    compute='_compute_is_system'
  • job_title Char
    readonly=False related='employee_id.job_title' related_sudo=False
  • km_home_work Integer
    readonly=False related='employee_id.km_home_work' related_sudo=False
  • last_activity Date
    related='employee_id.last_activity'
  • last_activity_time Char
    related='employee_id.last_activity_time'
  • marital Selection
    readonly=False related='employee_id.marital' related_sudo=False
  • mobile_phone Char
    readonly=False related='employee_id.mobile_phone' related_sudo=False
  • passport_id Char
    readonly=False related='employee_id.passport_id' related_sudo=False
  • permit_no Char
    readonly=False related='employee_id.permit_no' related_sudo=False
  • pin Char
    readonly=False related='employee_id.pin' related_sudo=False
  • place_of_birth Char
    readonly=False related='employee_id.place_of_birth' related_sudo=False
  • private_city Char
    readonly=False related='employee_id.private_city' related_sudo=False string='Private City'
  • private_country_id Many2one
    readonly=False related='employee_id.private_country_id' related_sudo=False string='Private Country'
  • private_email Char
    readonly=False related='employee_id.private_email' string='Private Email'
  • private_lang Selection
    readonly=False related='employee_id.lang' string='Employee Lang'
  • private_phone Char
    readonly=False related='employee_id.private_phone' related_sudo=False
  • private_state_id Many2one
    domain="[('country_id', '=?', private_country_id)]" readonly=False related='employee_id.private_state_id' related_sudo=False string='Private State'
  • private_street Char
    readonly=False related='employee_id.private_street' related_sudo=False string='Private Street'
  • private_street2 Char
    readonly=False related='employee_id.private_street2' related_sudo=False string='Private Street2'
  • private_zip Char
    readonly=False related='employee_id.private_zip' related_sudo=False string='Private Zip'
  • spouse_birthdate Date
    readonly=False related='employee_id.spouse_birthdate' related_sudo=False
  • spouse_complete_name Char
    readonly=False related='employee_id.spouse_complete_name' related_sudo=False
  • ssnid Char
    readonly=False related='employee_id.ssnid' related_sudo=False
  • study_field Char
    readonly=False related='employee_id.study_field' related_sudo=False
  • study_school Char
    readonly=False related='employee_id.study_school' related_sudo=False
  • visa_expire Date
    readonly=False related='employee_id.visa_expire' related_sudo=False
  • visa_no Char
    readonly=False related='employee_id.visa_no' related_sudo=False
  • work_contact_id Many2one
    readonly=False related='employee_id.work_contact_id' related_sudo=False
  • work_email Char
    readonly=False related='employee_id.work_email' related_sudo=False
  • work_location_id Many2one
    readonly=False related='employee_id.work_location_id' related_sudo=False
  • work_location_name Char
    related='employee_id.work_location_name'
  • work_location_type Selection
    related='employee_id.work_location_type'
  • work_phone Char
    readonly=False related='employee_id.work_phone' related_sudo=False
Public methods (9)
  • SELF_READABLE_FIELDS(self)
    @property
  • SELF_WRITEABLE_FIELDS(self)
    @property
  • action_create_employee(self)
  • action_get(self)
    @api.model
  • action_open_employees(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
  • get_views(self, views, options=None)
    @api.model
  • write(self, vals)
    Synchronize user and its related employee and check access rights if employees are not allowed to update their own data (otherwise sudo is applied for self data).

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • department_id Many2one
    related='employee_id.department_id'
  • employee_id One2many → hr.employee
    check_company=True context={'active_test': False} args: 'hr.employee', 'resource_id'
  • hr_icon_display Selection
    related='employee_id.hr_icon_display'
  • job_title Char
    related='employee_id.job_title'
  • show_hr_icon_display Boolean
    related='employee_id.show_hr_icon_display'
  • user_id Many2one
    copy=False
  • work_email Char
    related='employee_id.work_email'
  • work_phone Char
    related='employee_id.work_phone'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources/Employees
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, Wolfgang Taferner, Yannick Tivisse, Odoo Online, Pierre Masereel, Jorge Pinna Puissant, Alexandre Kühn, Julien Castiaux, Aurélien Warnon, Xavier-Do, Victor Feyens, Adrien Dieudonné, Sébastien Theys, Joseph Caburnay, alt-odoo, Samuel Degueldre, Alvaro Fuentes, Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Pierre Paridans, William Braeckman, bit-odoo, Romain Estievenart, Kevin Baptiste, Philippe Wauthy, Benoit Socias, Miquel Raïch, Ahmad Khanalizadeh, Sylvain Francis, sofiagvaladze, mafo-odoo, Audric Onockx (auon), Patrick Hoste, Nicolas Bayet, Hubert Van De Walle, Dossogne Bertrand, Roy Le, niyasraphy, Thomas Lefebvre (thle), alsh-odoo, Louis Wicket (wil), tsm-odoo, Victor Piryns (pivi), Yash Vaishnav, Pierre-Yves Dufays, Malay Khamar, Yosua Nicolaus, Jurgen (jugj), pash-odoo, Levi Siuzdak (sile), Dylan Kiss (dyki), Hansun (hale), Bruno Boi, FrancoisGe, Michael (mcm), paso-odoo, Simon Goffaux (sigo), Adrien Schoffeniels, Xavier Bol (xbo), Brieuc-brd, micheledic, Leonardo Pavan Rocha, Mattis Megevand (mmeg), Zelong Lin, kdeb@odoo.com, stefanorigano (SRI), ravb-odoo, dasz, Mélanie, Youssef Bashandy, Ethan Vincent, Benjamin Hanquin (beha), Flotchet, jugj-odoo, Julien Carion (juca), Tanguy Quéguineur, Martin Trigaux (mat), Chrysanthe (chgo), Louis (wil), asno-odoo, Elisabeth Dickinson, rame-odoo, Kacper Gasior, Rob Coekaerts, gteboul, Maira Salazar (srma), Viktors Lipskis (vili), David Van Droogenbroeck (DROD), nikj-odoo, Pierre Pulinckx (pipu), Bastien PIERRE, zel-odoo, uso-odoo, ksar-odoo, Arthur Pierrot (arpi), Dinh Van Khoa (JocelynVN), Hashem Elmaleeh
WEBSITE
WEBSITEhttps://www.odoo.com/app/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:06
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - phone_validation
    - mail
    - bus
    - web_tour
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (44)
XML IDNameModelTypeStatus
discuss_channel_view_form discuss.channel.view.form.inherit.hr discuss.channel xpath Inherits mail.discuss_channel_view_form
hr_contract_type_view_form hr.contract.type form New
hr_contract_type_view_tree hr.contract.type tree New
hr_department_view_kanban hr.department.kanban hr.department kanban New
hr_departure_reason_view_form hr.departure.reason form New
hr_departure_reason_view_list hr.departure.reason tree New
hr_departure_wizard_view_form hr.departure.wizard.view.form hr.departure.wizard form New
hr_employee_plan_activity_summary hr_employee_plan_activity_summary ir.ui.view qweb New
hr_employee_public_view_form hr.employee.public.form hr.employee.public form New
hr_employee_public_view_kanban hr.employee.kanban hr.employee.public kanban New
hr_employee_public_view_search hr.employee.search hr.employee.public search New
hr_employee_public_view_tree hr.employee.tree hr.employee.public tree New
hr_employee_view_activity hr.employee.activity hr.employee activity New
hr_employee_view_graph hr.employee.view.graph hr.employee graph New
hr_employee_view_pivot hr.employee.view.pivot hr.employee pivot New
hr_job_view_kanban hr.job.kanban hr.job kanban New
hr_kanban_view_employees hr.employee.kanban hr.employee kanban New
hr_work_location_form_view hr.work.location.view.form hr.work.location form New
hr_work_location_tree_view hr.work.location.view.tree hr.work.location tree New
mail_activity_plan_template_view_form mail.activity.plan.template.view.form.inherit.hr mail.activity.plan.template xpath Inherits mail.mail_activity_plan_template_view_form
mail_activity_plan_view_form mail.activity.plan.view.form.inherit.hr mail.activity.plan xpath Inherits mail.mail_activity_plan_view_form
mail_activity_plan_view_form_hr_employee mail.activity.plan.view.form.hr.employee mail.activity.plan xpath Inherits mail.mail_activity_plan_view_form_fixed_model
mail_activity_plan_view_tree mail.activity.plan.view.tree.inherit.hr mail.activity.plan xpath Inherits mail.mail_activity_plan_view_tree
mail_activity_schedule_view_form mail.activity.schedule.view.form.inherit.hr mail.activity.schedule xpath Inherits mail.mail_activity_schedule_view_form
print_employee_badge print_employee_badge ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_form res.partner.view.form.inherit.hr res.partner div Inherits base.view_partner_form
res_users_view_form res.users.form.inherit res.users xpath Inherits base.view_users_form
res_users_view_form_profile res.users.preferences.form.inherit res.users form Inherits res_users_view_form_simple_modif
res_users_view_form_simple_modif res.users.preferences.form.simplified.inherit res.users footer Inherits base.view_users_form_simple_modif
view_department_filter hr.department.search hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_filter hr.employee.search hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_job_filter hr.job.search hr.job search New
view_users_form_simple_modif_resource res.users.preferences.form.resource res.users field Inherits base.view_users_form_simple_modif
view_users_simple_form view.users.simple.form.hr res.users sheet Inherits base.view_users_simple_form
view_users_simple_form_inherit_hr view.users.simple.form.inherit.hr res.users xpath Inherits base.view_users_simple_form
Models touched (28)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • subscription_department_ids Many2many → hr.department
    help='Automatically subscribe members of those departments to the channel.' string='HR Departments' args: 'hr.department'
Public methods (1)
  • write(self, vals)

New fields (4)
  • code Char
    compute='_compute_code' readonly=False store=True
  • country_id Many2one → res.country
    args: 'res.country'
  • name Char
    required=True translate=True
  • sequence Integer
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (16)
  • active Boolean
    default=True args: 'Active'
  • child_ids One2many → hr.department
    string='Child Departments' args: 'hr.department', 'parent_id'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> index=True string='Company' args: 'res.company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True store=True args: 'Complete Name'
  • jobs_ids One2many → hr.job
    string='Jobs' args: 'hr.job', 'department_id'
  • manager_id Many2one → hr.employee
    check_company=True string='Manager' tracking=True args: 'hr.employee'
  • master_department_id Many2one → hr.department
    compute='_compute_master_department_id' store=True args: 'hr.department', 'Master Department'
  • member_ids One2many → hr.employee
    readonly=True string='Members' args: 'hr.employee', 'department_id'
  • name Char
    required=True translate=True args: 'Department Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → hr.department
    check_company=True index=True string='Parent Department' args: 'hr.department'
  • parent_path Char
    index=True unaccent=False
  • plan_ids One2many → mail.activity.plan
    args: 'mail.activity.plan', 'department_id'
  • plans_count Integer
    compute='_compute_plan_count'
  • total_employee Integer
    compute='_compute_total_employee' string='Total Employee'
Public methods (7)
  • action_plan_from_department(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_children_department_ids(self)
  • get_department_hierarchy(self)
  • get_formview_action(self, access_uid=None)
  • name_create(self, name)
    @api.model
  • write(self, vals)
    If updating manager of a department, we need to update all the employees of department hierarchy, and subscribe the new manager.

New fields (3)
  • name Char
    required=True string='Reason' translate=True
  • reason_code Integer
  • sequence Integer
    default=10 args: 'Sequence'
Public methods (0)

No public methods.

New fields (4)
  • departure_date Date
    default=_get_default_departure_date required=True string='Departure Date'
  • departure_description Html
    string='Additional Information'
  • departure_reason_id Many2one → hr.departure.reason
    default=<expr> required=True args: 'hr.departure.reason'
  • employee_id Many2one → hr.employee
    default=<expr> required=True string='Employee' args: 'hr.employee'
Public methods (1)
  • action_register_departure(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (63)
  • active Boolean
    default=True readonly=False related='resource_id.active' store=True args: 'Active'
  • additional_note Text
    groups='hr.group_hr_user' string='Additional Note' tracking=True
  • bank_account_id Many2one → res.partner.bank
    copy=False domain="[('partner_id', '=', work_contact_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" groups='hr.group_hr_user' help='Employee bank account to pay salaries' tracking=True args: 'res.partner.bank', 'Bank Account Number'
  • barcode Char
    copy=False groups='hr.group_hr_user' help='ID used for employee identification.' string='Badge ID'
  • birthday Date
    groups='hr.group_hr_user' tracking=True args: 'Date of Birth'
  • category_ids Many2many → hr.employee.category
    groups='hr.group_hr_user' string='Tags' args: 'hr.employee.category', 'employee_category_rel', 'emp_id', 'category_id'
  • certificate Selection
    default='other' groups='hr.group_hr_user' tracking=True args: [('graduate', 'Graduate'), ('bachelor', 'Bachelor'), ('master', 'Master'), ('doctor', 'Doctor'), ('other', 'Other')], 'Certificate Level'
  • child_ids One2many → hr.employee
    string='Direct subordinates' args: 'hr.employee', 'parent_id'
  • children Integer
    groups='hr.group_hr_user' string='Number of Dependent Children' tracking=True
  • color Integer
    default=0 args: 'Color Index'
  • company_country_code Char
    depends=['company_country_id'] readonly=True related='company_country_id.code'
  • company_country_id Many2one → res.country
    readonly=True related='company_id.country_id' args: 'res.country', 'Company Country'
  • company_id Many2one → res.company
    required=True args: 'res.company'
  • country_id Many2one → res.country
    groups='hr.group_hr_user' tracking=True args: 'res.country', 'Nationality (Country)'
  • country_of_birth Many2one → res.country
    groups='hr.group_hr_user' string='Country of Birth' tracking=True args: 'res.country'
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' args: 'res.currency'
  • department_id Many2one
    tracking=True
  • departure_date Date
    copy=False groups='hr.group_hr_user' string='Departure Date' tracking=True
  • departure_description Html
    copy=False groups='hr.group_hr_user' string='Additional Information'
  • departure_reason_id Many2one → hr.departure.reason
    copy=False groups='hr.group_hr_user' ondelete='restrict' string='Departure Reason' tracking=True args: 'hr.departure.reason'
  • driving_license Binary
    groups='hr.group_hr_user' string='Driving License'
  • emergency_contact Char
    groups='hr.group_hr_user' tracking=True args: 'Contact Name'
  • emergency_phone Char
    groups='hr.group_hr_user' tracking=True args: 'Contact Phone'
  • employee_properties Properties
    definition='company_id.employee_properties_definition' precompute=False args: 'Properties'
  • employee_type Selection
    default='employee' groups='hr.group_hr_user' help='The employee type. Although the primary purpose may seem to categorize employees, this field has also an impact in the Contract History. Only Employee type is supposed to be under contract and will have a Contract History.' required=True string='Employee Type' args: [('employee', 'Employee'), ('student', 'Student'), ('trainee', 'Trainee'), ('contractor', 'Contractor'), ('freelance', 'Freelancer')]
  • gender Selection
    groups='hr.group_hr_user' tracking=True args: [('male', 'Male'), ('female', 'Female'), ('other', 'Other')]
  • has_work_permit Binary
    groups='hr.group_hr_user' string='Work Permit'
  • id_card Binary
    groups='hr.group_hr_user' string='ID Card Copy'
  • identification_id Char
    groups='hr.group_hr_user' string='Identification No' tracking=True
  • job_id Many2one
    tracking=True
  • km_home_work Integer
    groups='hr.group_hr_user' string='Home-Work Distance' tracking=True
  • lang Selection
    groups='hr.group_hr_user' selection=_lang_get string='Lang'
  • marital Selection
    default='single' groups='hr.group_hr_user' string='Marital Status' tracking=True args: [('single', 'Single'), ('married', 'Married'), ('cohabitant', 'Legal Cohabitant'), ('widower', 'Widower'), ('divorced', 'Divorced')]
  • message_main_attachment_id Many2one
    groups='hr.group_hr_user'
  • name Char
    readonly=False related='resource_id.name' store=True string='Employee Name' tracking=True
  • notes Text
    groups='hr.group_hr_user' args: 'Notes'
  • passport_id Char
    groups='hr.group_hr_user' tracking=True args: 'Passport No'
  • permit_no Char
    groups='hr.group_hr_user' tracking=True args: 'Work Permit No'
  • pin Char
    copy=False groups='hr.group_hr_user' help='PIN used to Check In/Out in the Kiosk Mode of the Attendance application (if enabled in Configuration) and to change the cashier in the Point of Sale application.' string='PIN'
  • place_of_birth Char
    groups='hr.group_hr_user' tracking=True args: 'Place of Birth'
  • private_car_plate Char
    groups='hr.group_hr_user' help='If you have more than one car, just separate the plates by a space.'
  • private_city Char
    groups='hr.group_hr_user' string='Private City'
  • private_country_id Many2one → res.country
    groups='hr.group_hr_user' string='Private Country' args: 'res.country'
  • private_email Char
    groups='hr.group_hr_user' string='Private Email'
  • private_phone Char
    groups='hr.group_hr_user' string='Private Phone'
  • private_state_id Many2one → res.country.state
    domain="[('country_id', '=?', private_country_id)]" groups='hr.group_hr_user' string='Private State' args: 'res.country.state'
  • private_street Char
    groups='hr.group_hr_user' string='Private Street'
  • private_street2 Char
    groups='hr.group_hr_user' string='Private Street2'
  • private_zip Char
    groups='hr.group_hr_user' string='Private Zip'
  • resource_calendar_id Many2one
    tracking=True
  • sinid Char
    groups='hr.group_hr_user' help='Social Insurance Number' tracking=True args: 'SIN No'
  • spouse_birthdate Date
    groups='hr.group_hr_user' string='Spouse Birthdate' tracking=True
  • spouse_complete_name Char
    groups='hr.group_hr_user' string='Spouse Complete Name' tracking=True
  • ssnid Char
    groups='hr.group_hr_user' help='Social Security Number' tracking=True args: 'SSN No'
  • study_field Char
    groups='hr.group_hr_user' tracking=True args: 'Field of Study'
  • study_school Char
    groups='hr.group_hr_user' tracking=True args: 'School'
  • user_id Many2one → res.users
    ondelete='restrict' readonly=False related='resource_id.user_id' store=True args: 'res.users', 'User'
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • visa_expire Date
    groups='hr.group_hr_user' tracking=True args: 'Visa Expiration Date'
  • visa_no Char
    groups='hr.group_hr_user' tracking=True args: 'Visa No'
  • work_permit_expiration_date Date
    groups='hr.group_hr_user' tracking=True args: 'Work Permit Expiration Date'
  • work_permit_name Char
    compute='_compute_work_permit_name' args: 'work_permit_name'
  • work_permit_scheduled_activity Boolean
    default=False groups='hr.group_hr_user'
Public methods (13)
  • action_create_user(self)
  • create(self, vals_list)
    @api.model_create_multi
  • fetch(self, field_names)
  • generate_random_barcode(self)
  • get_formview_action(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_formview_id(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_import_templates(self)
    @api.model
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
  • get_views(self, views, options=None)
    @api.model
  • search_fetch(self, domain, field_names, offset=0, limit=None, order=None)
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (26)
  • active Boolean
    args: 'Active'
  • address_id Many2one → res.partner
    check_company=True compute='_compute_address_id' precompute=True readonly=False store=True string='Work Address' args: 'res.partner'
  • coach_id Many2one → hr.employee
    check_company=True compute='_compute_coach' help='Select the "Employee" who is the coach of this employee.\nThe "Coach" has no specific rights or responsibilities by default.' readonly=False store=True args: 'hr.employee', 'Coach'
  • color Integer
    default=0 args: 'Color Index'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • department_id Many2one → hr.department
    check_company=True args: 'hr.department', 'Department'
  • hr_icon_display Selection
    compute='_compute_presence_icon' args: [('presence_present', 'Present'), ('presence_absent_active', 'Present but not active'), ('presence_absent', 'Absent'), ('presence_to_define', 'To define'), ('presence_undetermined', 'Undetermined')]
  • hr_presence_state Selection
    compute='_compute_presence_state' default='to_define' args: [('present', 'Present'), ('absent', 'Absent'), ('to_define', 'To Define')]
  • job_id Many2one → hr.job
    check_company=True args: 'hr.job', 'Job Position'
  • job_title Char
    compute='_compute_job_title' readonly=False store=True args: 'Job Title'
  • last_activity Date
    compute='_compute_last_activity'
  • last_activity_time Char
    compute='_compute_last_activity'
  • member_of_department Boolean
    compute='_compute_part_of_department' help="Whether the employee is a member of the active user's department or one of it's child department." search='_search_part_of_department' args: 'Member of department'
  • mobile_phone Char
    compute='_compute_work_contact_details' inverse='_inverse_work_contact_details' store=True args: 'Work Mobile'
  • name Char
  • newly_hired Boolean
    compute='_compute_newly_hired' search='_search_newly_hired' args: 'Newly Hired'
  • parent_id Many2one → hr.employee
    compute='_compute_parent_id' domain="['|', ('company_id', '=', False), ('company_id', 'in', allowed_company_ids)]" readonly=False store=True args: 'hr.employee', 'Manager'
  • resource_calendar_id Many2one → resource.calendar
    check_company=True args: 'resource.calendar'
  • resource_id Many2one → resource.resource
    args: 'resource.resource'
  • show_hr_icon_display Boolean
    compute='_compute_presence_icon'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
  • user_id Many2one → res.users
    args: 'res.users'
  • work_contact_id Many2one → res.partner
    copy=False args: 'res.partner', 'Work Contact'
  • work_email Char
    compute='_compute_work_contact_details' inverse='_inverse_work_contact_details' store=True args: 'Work Email'
  • work_location_id Many2one → hr.work.location
    domain="[('address_id', '=', address_id)]" args: 'hr.work.location', 'Work Location'
  • work_phone Char
    compute='_compute_phones' readonly=False store=True args: 'Work Phone'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • color Integer
    default=_get_default_color string='Color Index'
  • employee_ids Many2many → hr.employee
    string='Employees' args: 'hr.employee', 'employee_category_rel', 'category_id', 'emp_id'
  • name Char
    required=True string='Tag Name'
Public methods (0)

No public methods.

New fields (33)
  • active Boolean
    readonly=True
  • address_id Many2one
    readonly=True
  • avatar_1024 Image
    compute_sudo=True related='employee_id.avatar_1024' args: 'Avatar 1024'
  • avatar_128 Image
    compute_sudo=True related='employee_id.avatar_128' args: 'Avatar 128'
  • avatar_1920 Image
    compute_sudo=True related='employee_id.avatar_1920' args: 'Avatar'
  • avatar_256 Image
    compute_sudo=True related='employee_id.avatar_256' args: 'Avatar 256'
  • avatar_512 Image
    compute_sudo=True related='employee_id.avatar_512' args: 'Avatar 512'
  • child_ids One2many → hr.employee.public
    readonly=True string='Direct subordinates' args: 'hr.employee.public', 'parent_id'
  • coach_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Coach'
  • color Integer
    readonly=True
  • company_id Many2one
    readonly=True
  • create_date Datetime
    readonly=True
  • department_id Many2one
    readonly=True
  • employee_id Many2one → hr.employee
    compute='_compute_employee_id' compute_sudo=True search='_search_employee_id' args: 'hr.employee', 'Employee'
  • image_1024 Image
    compute_sudo=True related='employee_id.image_1024' args: 'Image 1024'
  • image_128 Image
    compute_sudo=True related='employee_id.image_128' args: 'Image 128'
  • image_1920 Image
    compute_sudo=True related='employee_id.image_1920' args: 'Image'
  • image_256 Image
    compute_sudo=True related='employee_id.image_256' args: 'Image 256'
  • image_512 Image
    compute_sudo=True related='employee_id.image_512' args: 'Image 512'
  • is_manager Boolean
    compute='_compute_is_manager'
  • job_id Many2one
    readonly=True
  • job_title Char
    readonly=True
  • mobile_phone Char
    readonly=True
  • name Char
    readonly=True
  • parent_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Manager'
  • resource_id Many2one
    readonly=True
  • tz Selection
    readonly=True
  • user_id Many2one
    readonly=True
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • work_contact_id Many2one
    readonly=True
  • work_email Char
    readonly=True
  • work_location_id Many2one
    readonly=True
  • work_phone Char
    readonly=True
Public methods (1)
  • init(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (13)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • contract_type_id Many2one → hr.contract.type
    string='Employment Type' args: 'hr.contract.type'
  • department_id Many2one → hr.department
    check_company=True string='Department' args: 'hr.department'
  • description Html
    default='Perform assigned responsibilities, collaborate with team members, and adhere to company policies. Strong communication, problem-solving, and work ethic required. Adaptability, initiative, and willingness to learn are valued.' sanitize_attributes=False string='Job Description'
  • employee_ids One2many → hr.employee
    groups='base.group_user' string='Employees' args: 'hr.employee', 'job_id'
  • expected_employees Integer
    compute='_compute_employees' help='Expected number of employees for this job position after new recruitment.' store=True string='Total Forecasted Employees'
  • name Char
    index='trigram' required=True string='Job Position' translate=True
  • no_of_employee Integer
    compute='_compute_employees' help='Number of employees currently occupying this job position.' store=True string='Current Number of Employees'
  • no_of_hired_employee Integer
    copy=False help='Number of hired employees for this job position during recruitment phase.' string='Hired Employees'
  • no_of_recruitment Integer
    copy=False default=1 help='Number of new employees you expect to recruit.' string='Target'
  • requirements Text
    args: 'Requirements'
  • sequence Integer
    default=10
Public methods (3)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
    We don't want the current user to be follower of all created job
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    check_company=True required=True string='Work Address' args: 'res.partner'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • location_number Char
  • location_type Selection
    default='office' required=True string='Cover Image' args: [('home', 'Home'), ('office', 'Office'), ('other', 'Other')]
  • name Char
    required=True string='Work Location'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • department_id Many2one → hr.department
    check_company=True compute='_compute_department_id' ondelete='cascade' readonly=False store=True args: 'hr.department'
Public methods (0)

No public methods.

New fields (1)
  • responsible_type Selection
    ondelete={'coach': 'cascade', 'manager': 'cascade', 'employee': 'cascade'} selection_add=[('coach', 'Coach'), ('manager', 'Manager'), ('employee', 'Employee')]
Public methods (0)

No public methods.

New fields (1)
  • department_id Many2one → hr.department
    compute='_compute_department_id' args: 'hr.department'
Public methods (0)

No public methods.

New fields (1)
  • alias_contact Selection
    ondelete={'employees': 'cascade'} selection_add=[('employees', 'Authenticated Employees')]
Public methods (0)

No public methods.

New fields (3)
  • employee_properties_definition PropertiesDefinition
    args: 'Employee Properties'
  • hr_presence_control_email_amount Integer
    string='# emails to send'
  • hr_presence_control_ip_list Char
    string='Valid IP addresses'
Public methods (0)

No public methods.

New fields (11)
  • hr_employee_self_edit Boolean
    config_parameter='hr.hr_employee_self_edit' string='Employee Editing'
  • hr_presence_control_email Boolean
    config_parameter='hr_presence.hr_presence_control_email' string='Based on number of emails sent'
  • hr_presence_control_email_amount Integer
    readonly=False related='company_id.hr_presence_control_email_amount'
  • hr_presence_control_ip Boolean
    config_parameter='hr_presence.hr_presence_control_ip' string='Based on IP Address'
  • hr_presence_control_ip_list Char
    readonly=False related='company_id.hr_presence_control_ip_list'
  • hr_presence_control_login Boolean
    config_parameter='hr.hr_presence_control_login' string='Based on user status in system'
  • module_hr_attendance Boolean
    string='Based on attendances'
  • module_hr_homeworking Boolean
    string='Remote Work'
  • module_hr_presence Boolean
    string='Advanced Presence Control'
  • module_hr_skills Boolean
    string='Skills Management'
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='company_id.resource_calendar_id' args: 'resource.calendar', 'Company Working Hours'
Public methods (0)

No public methods.

New fields (2)
  • employee_ids One2many → hr.employee
    groups='hr.group_hr_user' help='Related employees based on their private address' string='Employees' args: 'hr.employee', 'work_contact_id'
  • employees_count Integer
    compute='_compute_employees_count' groups='hr.group_hr_user'
Public methods (1)
  • action_open_employees(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (58)
  • additional_note Text
    readonly=False related='employee_id.additional_note' related_sudo=False
  • address_id Many2one
    readonly=False related='employee_id.address_id' related_sudo=False
  • barcode Char
    readonly=False related='employee_id.barcode' related_sudo=False
  • birthday Date
    readonly=False related='employee_id.birthday' related_sudo=False
  • can_edit Boolean
    compute='_compute_can_edit'
  • category_ids Many2many
    readonly=False related='employee_id.category_ids' related_sudo=False string='Employee Tags'
  • certificate Selection
    readonly=False related='employee_id.certificate' related_sudo=False
  • children Integer
    readonly=False related='employee_id.children' related_sudo=False
  • coach_id Many2one
    readonly=False related='employee_id.coach_id' related_sudo=False
  • country_of_birth Many2one
    readonly=False related='employee_id.country_of_birth' related_sudo=False
  • create_employee Boolean
    copy=False default=False store=False string='Technical field, whether to create an employee'
  • create_employee_id Many2one → hr.employee
    copy=False store=False string='Technical field, bind user to this employee on create' args: 'hr.employee'
  • department_id Many2one
    readonly=False related='employee_id.department_id' related_sudo=False
  • emergency_contact Char
    readonly=False related='employee_id.emergency_contact' related_sudo=False
  • emergency_phone Char
    readonly=False related='employee_id.emergency_phone' related_sudo=False
  • employee_bank_account_id Many2one
    readonly=False related='employee_id.bank_account_id' related_sudo=False string="Employee's Bank Account Number"
  • employee_count Integer
    compute='_compute_employee_count'
  • employee_country_code Char
    readonly=True related='employee_id.company_country_code' related_sudo=False string="Employee's Country Code"
  • employee_country_id Many2one
    readonly=False related='employee_id.country_id' related_sudo=False string="Employee's Country"
  • employee_id Many2one → hr.employee
    compute='_compute_company_employee' search='_search_company_employee' store=False string='Company employee' args: 'hr.employee'
  • employee_ids One2many → hr.employee
    domain=_employee_ids_domain string='Related employee' args: 'hr.employee', 'user_id'
  • employee_parent_id Many2one
    readonly=False related='employee_id.parent_id' related_sudo=False
  • employee_resource_calendar_id Many2one
    readonly=True related='employee_id.resource_calendar_id' string="Employee's Working Hours"
  • employee_type Selection
    readonly=False related='employee_id.employee_type' related_sudo=False
  • gender Selection
    readonly=False related='employee_id.gender' related_sudo=False
  • hr_presence_state Selection
    related='employee_id.hr_presence_state'
  • identification_id Char
    readonly=False related='employee_id.identification_id' related_sudo=False
  • is_system Boolean
    compute='_compute_is_system'
  • job_title Char
    readonly=False related='employee_id.job_title' related_sudo=False
  • km_home_work Integer
    readonly=False related='employee_id.km_home_work' related_sudo=False
  • last_activity Date
    related='employee_id.last_activity'
  • last_activity_time Char
    related='employee_id.last_activity_time'
  • marital Selection
    readonly=False related='employee_id.marital' related_sudo=False
  • mobile_phone Char
    readonly=False related='employee_id.mobile_phone' related_sudo=False
  • passport_id Char
    readonly=False related='employee_id.passport_id' related_sudo=False
  • permit_no Char
    readonly=False related='employee_id.permit_no' related_sudo=False
  • pin Char
    readonly=False related='employee_id.pin' related_sudo=False
  • place_of_birth Char
    readonly=False related='employee_id.place_of_birth' related_sudo=False
  • private_city Char
    readonly=False related='employee_id.private_city' related_sudo=False string='Private City'
  • private_country_id Many2one
    readonly=False related='employee_id.private_country_id' related_sudo=False string='Private Country'
  • private_email Char
    readonly=False related='employee_id.private_email' string='Private Email'
  • private_lang Selection
    readonly=False related='employee_id.lang' string='Employee Lang'
  • private_phone Char
    readonly=False related='employee_id.private_phone' related_sudo=False
  • private_state_id Many2one
    domain="[('country_id', '=?', private_country_id)]" readonly=False related='employee_id.private_state_id' related_sudo=False string='Private State'
  • private_street Char
    readonly=False related='employee_id.private_street' related_sudo=False string='Private Street'
  • private_street2 Char
    readonly=False related='employee_id.private_street2' related_sudo=False string='Private Street2'
  • private_zip Char
    readonly=False related='employee_id.private_zip' related_sudo=False string='Private Zip'
  • spouse_birthdate Date
    readonly=False related='employee_id.spouse_birthdate' related_sudo=False
  • spouse_complete_name Char
    readonly=False related='employee_id.spouse_complete_name' related_sudo=False
  • ssnid Char
    readonly=False related='employee_id.ssnid' related_sudo=False
  • study_field Char
    readonly=False related='employee_id.study_field' related_sudo=False
  • study_school Char
    readonly=False related='employee_id.study_school' related_sudo=False
  • visa_expire Date
    readonly=False related='employee_id.visa_expire' related_sudo=False
  • visa_no Char
    readonly=False related='employee_id.visa_no' related_sudo=False
  • work_contact_id Many2one
    readonly=False related='employee_id.work_contact_id' related_sudo=False
  • work_email Char
    readonly=False related='employee_id.work_email' related_sudo=False
  • work_location_id Many2one
    readonly=False related='employee_id.work_location_id' related_sudo=False
  • work_phone Char
    readonly=False related='employee_id.work_phone' related_sudo=False
Public methods (9)
  • SELF_READABLE_FIELDS(self)
    @property
  • SELF_WRITEABLE_FIELDS(self)
    @property
  • action_create_employee(self)
  • action_get(self)
    @api.model
  • action_open_employees(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
  • get_views(self, views, options=None)
    @api.model
  • write(self, vals)
    Synchronize user and its related employee and check access rights if employees are not allowed to update their own data (otherwise sudo is applied for self data).

New fields (2)
  • employee_id One2many → hr.employee
    check_company=True args: 'hr.employee', 'resource_id'
  • user_id Many2one
    copy=False
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources/Employees
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Denis Ledoux, Christophe Simonis, Jeremy Kersten, GitHub, Barad Mahendra, Wolfgang Taferner, Yannick Tivisse, Christophe Monniez, Jorge Pinna Puissant, Alexandre Kühn, Aurélien Warnon, Xavier-Do, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Dieudonné, Sébastien Theys, alt-odoo, Julien Mougenot, Vincent Schippefilt, Samuel Degueldre, Alvaro Fuentes, Achraf (abz), Prakash Prajapati, Swapnesh Shah, Tiffany Chang (tic), Nathan Marotte (nama), Gorash, Pierre Paridans, William Braeckman, Kevin Baptiste, Philippe Wauthy, Xavier BOL (xbo), roen-odoo, Benoit Socias, Hubert Van de Walle (huvw), Miquel Raïch, Ahmad Khanalizadeh, Sylvain Francis, sofiagvaladze, Víctor Martínez, Florian Damhaut, mafo-odoo, Audric Onockx (auon), Florian Charlier, anhe-odoo, Abdelouahab (abla), Nicolas Bayet, Francisco Alejandro Gonzalez Luna, Thibault Libioulle, Laurent Stukkens (LTU), Dossogne Bertrand, Roy Le, Pierrot (prro), niyasraphy, Thomas Lefebvre (thle), Louis Wicket (wil), tsm-odoo, Victor Piryns (pivi), Malay Khamar, duongnguyen, Jurgen (jugj), Hansun (hale), Sébastien Geelen (sge), FrancoisGe, Michael (mcm), Rahul Prajapati, Chong Wang (cwg), paso-odoo, Simon Goffaux (sigo), Kartik Chavda, Brieuc-brd, Leonardo Pavan Rocha, Noe Antoine, Zelong Lin, Nidhi Patel, stefanorigano (SRI), Benjamin Hanquin (beha), mizosoft, Flotchet, jugj-odoo, Tanguy Quéguineur, Martin Trigaux (mat), asno-odoo, rame-odoo, Kacper Gasior, Rob Coekaerts, Viktors Lipskis (vili)
WEBSITE
WEBSITEhttps://www.odoo.com/app/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (44)
XML IDNameModelTypeStatus
hr_contract_type_view_form hr.contract.type form New
hr_contract_type_view_tree hr.contract.type tree New
hr_department_view_kanban hr.department.kanban hr.department kanban New
hr_departure_reason_view_form hr.departure.reason form New
hr_departure_reason_view_list hr.departure.reason tree New
hr_departure_wizard_view_form hr.departure.wizard.view.form hr.departure.wizard form New
hr_employee_public_view_form hr.employee.public.form hr.employee.public form New
hr_employee_public_view_kanban hr.employee.kanban hr.employee.public kanban New
hr_employee_public_view_search hr.employee.search hr.employee.public search New
hr_employee_public_view_tree hr.employee.tree hr.employee.public tree New
hr_employee_view_activity hr.employee.activity hr.employee activity New
hr_job_view_kanban hr.job.kanban hr.job kanban New
hr_kanban_view_employees hr.employee.kanban hr.employee kanban New
hr_plan_activity_type_view_form hr.plan.activity.type.view.form hr.plan.activity.type form New
hr_plan_activity_type_view_tree hr.plan.activity.type.view.tree hr.plan.activity.type tree New
hr_plan_view_form hr.plan.view.form hr.plan form New
hr_plan_view_search hr.plan.view.search hr.plan search New
hr_plan_view_tree hr.plan.view.tree hr.plan tree New
hr_work_location_form_view hr.work.location.view.form hr.work.location form New
hr_work_location_tree_view hr.work.location.view.tree hr.work.location tree New
mail_channel_view_form_ mail.channel.view.form.inherit.hr mail.channel xpath Inherits mail.mail_channel_view_form
plan_wizard plan wizard hr.plan.wizard form New
print_employee_badge print_employee_badge ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_form res.partner.view.form.inherit.hr res.partner div Inherits base.view_partner_form
res_users_view_form res.users.form.inherit res.users xpath Inherits base.view_users_form
res_users_view_form_profile res.users.preferences.form.inherit res.users form Inherits res_users_view_form_simple_modif
res_users_view_form_simple_modif res.users.preferences.form.simplified.inherit res.users footer Inherits base.view_users_form_simple_modif
view_department_filter hr.department.search hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_filter hr.employee.search hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_form_smartbutton view.employee.form.smartbutton hr.employee div Inherits view_employee_form
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_job_filter hr.job.search hr.job search New
view_partner_tree2 hr.employee.tree hr.employee tree New
view_users_form_simple_modif_resource res.users.preferences.form.resource res.users field Inherits base.view_users_form_simple_modif
view_users_simple_form view.users.simple.form.hr res.users sheet Inherits base.view_users_simple_form
view_users_simple_form_inherit_hr view.users.simple.form.inherit.hr res.users xpath Inherits base.view_users_simple_form
Models touched (28)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True translate=True
  • sequence Integer
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (16)
  • active Boolean
    default=True args: 'Active'
  • child_ids One2many → hr.department
    string='Child Departments' args: 'hr.department', 'parent_id'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> index=True string='Company' args: 'res.company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True store=True args: 'Complete Name'
  • jobs_ids One2many → hr.job
    string='Jobs' args: 'hr.job', 'department_id'
  • manager_id Many2one → hr.employee
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Manager' tracking=True args: 'hr.employee'
  • master_department_id Many2one → hr.department
    compute='_compute_master_department_id' store=True args: 'hr.department', 'Master Department'
  • member_ids One2many → hr.employee
    readonly=True string='Members' args: 'hr.employee', 'department_id'
  • name Char
    required=True args: 'Department Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" index=True string='Parent Department' args: 'hr.department'
  • parent_path Char
    index=True unaccent=False
  • plan_ids One2many → hr.plan
    args: 'hr.plan', 'department_id'
  • plans_count Integer
    compute='_compute_plan_count'
  • total_employee Integer
    compute='_compute_total_employee' string='Total Employee'
Public methods (7)
  • action_plan_from_department(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_children_department_ids(self)
  • get_formview_action(self, access_uid=None)
  • name_create(self, name)
    @api.model
  • name_get(self)
  • write(self, vals)
    If updating manager of a department, we need to update all the employees of department hierarchy, and subscribe the new manager.

New fields (2)
  • name Char
    required=True string='Reason' translate=True
  • sequence Integer
    default=10 args: 'Sequence'
Public methods (0)

No public methods.

New fields (5)
  • archive_private_address Boolean
    default=True args: 'Archive Private Address'
  • departure_date Date
    default=_get_default_departure_date required=True string='Departure Date'
  • departure_description Html
    string='Additional Information'
  • departure_reason_id Many2one → hr.departure.reason
    default=<expr> required=True args: 'hr.departure.reason'
  • employee_id Many2one → hr.employee
    default=<expr> required=True string='Employee' args: 'hr.employee'
Public methods (1)
  • action_register_departure(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (54)
  • active Boolean
    default=True readonly=False related='resource_id.active' store=True args: 'Active'
  • additional_note Text
    groups='hr.group_hr_user' string='Additional Note' tracking=True
  • address_home_id Many2one → res.partner
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" groups='hr.group_hr_user' help='Enter here the private address of the employee, not the one linked to your company.' tracking=True args: 'res.partner', 'Address'
  • bank_account_id Many2one → res.partner.bank
    copy=False domain="[('partner_id', '=', address_home_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" groups='hr.group_hr_user' help='Employee bank account to pay salaries' tracking=True args: 'res.partner.bank', 'Bank Account Number'
  • barcode Char
    copy=False groups='hr.group_hr_user' help='ID used for employee identification.' string='Badge ID'
  • birthday Date
    groups='hr.group_hr_user' tracking=True args: 'Date of Birth'
  • category_ids Many2many → hr.employee.category
    groups='hr.group_hr_user' string='Tags' args: 'hr.employee.category', 'employee_category_rel', 'emp_id', 'category_id'
  • certificate Selection
    default='other' groups='hr.group_hr_user' tracking=True args: [('graduate', 'Graduate'), ('bachelor', 'Bachelor'), ('master', 'Master'), ('doctor', 'Doctor'), ('other', 'Other')], 'Certificate Level'
  • child_ids One2many → hr.employee
    string='Direct subordinates' args: 'hr.employee', 'parent_id'
  • children Integer
    groups='hr.group_hr_user' string='Number of Dependent Children' tracking=True
  • color Integer
    default=0 args: 'Color Index'
  • company_country_code Char
    depends=['company_country_id'] readonly=True related='company_country_id.code'
  • company_country_id Many2one → res.country
    readonly=True related='company_id.country_id' args: 'res.country', 'Company Country'
  • company_id Many2one → res.company
    required=True args: 'res.company'
  • country_id Many2one → res.country
    groups='hr.group_hr_user' tracking=True args: 'res.country', 'Nationality (Country)'
  • country_of_birth Many2one → res.country
    groups='hr.group_hr_user' string='Country of Birth' tracking=True args: 'res.country'
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' args: 'res.currency'
  • departure_date Date
    copy=False groups='hr.group_hr_user' string='Departure Date' tracking=True
  • departure_description Html
    copy=False groups='hr.group_hr_user' string='Additional Information' tracking=True
  • departure_reason_id Many2one → hr.departure.reason
    copy=False groups='hr.group_hr_user' ondelete='restrict' string='Departure Reason' tracking=True args: 'hr.departure.reason'
  • driving_license Binary
    groups='hr.group_hr_user' string='Driving License'
  • emergency_contact Char
    groups='hr.group_hr_user' tracking=True args: 'Contact Name'
  • emergency_phone Char
    groups='hr.group_hr_user' tracking=True args: 'Contact Phone'
  • gender Selection
    groups='hr.group_hr_user' tracking=True args: [('male', 'Male'), ('female', 'Female'), ('other', 'Other')]
  • has_work_permit Binary
    groups='hr.group_hr_user' string='Work Permit' tracking=True
  • id_card Binary
    groups='hr.group_hr_user' string='ID Card Copy'
  • identification_id Char
    groups='hr.group_hr_user' string='Identification No' tracking=True
  • is_address_home_a_company Boolean
    compute='_compute_is_address_home_a_company' args: 'The employee address has a company linked'
  • job_id Many2one
    tracking=True
  • km_home_work Integer
    groups='hr.group_hr_user' string='Home-Work Distance' tracking=True
  • lang Selection
    groups='hr.group_hr_user' readonly=False related='address_home_id.lang' string='Lang'
  • marital Selection
    default='single' groups='hr.group_hr_user' string='Marital Status' tracking=True args: [('single', 'Single'), ('married', 'Married'), ('cohabitant', 'Legal Cohabitant'), ('widower', 'Widower'), ('divorced', 'Divorced')]
  • message_main_attachment_id Many2one
    groups='hr.group_hr_user'
  • name Char
    readonly=False related='resource_id.name' store=True string='Employee Name' tracking=True
  • notes Text
    groups='hr.group_hr_user' args: 'Notes'
  • passport_id Char
    groups='hr.group_hr_user' tracking=True args: 'Passport No'
  • permit_no Char
    groups='hr.group_hr_user' tracking=True args: 'Work Permit No'
  • phone Char
    groups='hr.group_hr_user' readonly=False related='address_home_id.phone' related_sudo=False string='Private Phone'
  • pin Char
    copy=False groups='hr.group_hr_user' help='PIN used to Check In/Out in the Kiosk Mode of the Attendance application (if enabled in Configuration) and to change the cashier in the Point of Sale application.' string='PIN'
  • place_of_birth Char
    groups='hr.group_hr_user' tracking=True args: 'Place of Birth'
  • private_email Char
    groups='hr.group_hr_user' related='address_home_id.email' string='Private Email'
  • sinid Char
    groups='hr.group_hr_user' help='Social Insurance Number' tracking=True args: 'SIN No'
  • spouse_birthdate Date
    groups='hr.group_hr_user' string='Spouse Birthdate' tracking=True
  • spouse_complete_name Char
    groups='hr.group_hr_user' string='Spouse Complete Name' tracking=True
  • ssnid Char
    groups='hr.group_hr_user' help='Social Security Number' tracking=True args: 'SSN No'
  • study_field Char
    groups='hr.group_hr_user' tracking=True args: 'Field of Study'
  • study_school Char
    groups='hr.group_hr_user' tracking=True args: 'School'
  • user_id Many2one → res.users
    readonly=False related='resource_id.user_id' store=True args: 'res.users', 'User'
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • visa_expire Date
    groups='hr.group_hr_user' tracking=True args: 'Visa Expiration Date'
  • visa_no Char
    groups='hr.group_hr_user' tracking=True args: 'Visa No'
  • work_permit_expiration_date Date
    groups='hr.group_hr_user' tracking=True args: 'Work Permit Expiration Date'
  • work_permit_name Char
    compute='_compute_work_permit_name' args: 'work_permit_name'
  • work_permit_scheduled_activity Boolean
    default=False groups='hr.group_hr_user'
Public methods (14)
  • action_create_user(self)
  • create(self, vals_list)
    @api.model_create_multi
  • generate_random_barcode(self)
  • get_formview_action(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_formview_id(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_import_templates(self)
    @api.model
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
  • get_views(self, views, options)
    @api.model
  • message_post(self, **kwargs)
    @api.returns('mail.message', <expr>)
  • name_get(self)
  • read(self, fields, load='_classic_read')
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (28)
  • active Boolean
    args: 'Active'
  • address_id Many2one → res.partner
    compute='_compute_address_id' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=False store=True args: 'res.partner', 'Work Address'
  • coach_id Many2one → hr.employee
    compute='_compute_coach' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Select the "Employee" who is the coach of this employee.\nThe "Coach" has no specific rights or responsibilities by default.' readonly=False store=True args: 'hr.employee', 'Coach'
  • color Integer
    default=0 args: 'Color Index'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • department_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'hr.department', 'Department'
  • employee_type Selection
    default='employee' help='The employee type. Although the primary purpose may seem to categorize employees, this field has also an impact in the Contract History. Only Employee type is supposed to be under contract and will have a Contract History.' required=True string='Employee Type' args: [('employee', 'Employee'), ('student', 'Student'), ('trainee', 'Trainee'), ('contractor', 'Contractor'), ('freelance', 'Freelancer')]
  • hr_icon_display Selection
    compute='_compute_presence_icon' args: [('presence_present', 'Present'), ('presence_absent_active', 'Present but not active'), ('presence_absent', 'Absent'), ('presence_to_define', 'To define'), ('presence_undetermined', 'Undetermined')]
  • hr_presence_state Selection
    compute='_compute_presence_state' default='to_define' args: [('present', 'Present'), ('absent', 'Absent'), ('to_define', 'To Define')]
  • job_id Many2one → hr.job
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'hr.job', 'Job Position'
  • job_title Char
    compute='_compute_job_title' readonly=False store=True args: 'Job Title'
  • last_activity Date
    compute='_compute_last_activity'
  • last_activity_time Char
    compute='_compute_last_activity'
  • member_of_department Boolean
    compute='_compute_part_of_department' help="Whether the employee is a member of the active user's department or one of it's child department." search='_search_part_of_department' args: 'Member of department'
  • mobile_phone Char
    compute='_compute_work_contact_details' inverse='_inverse_work_contact_details' store=True args: 'Work Mobile'
  • name Char
  • parent_id Many2one → hr.employee
    compute='_compute_parent_id' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=False store=True args: 'hr.employee', 'Manager'
  • related_contact_ids Many2many → res.partner
    compute='_compute_related_contacts' string='Related Contacts' args: 'res.partner'
  • related_contacts_count Integer
    compute='_compute_related_contacts_count' args: 'Number of related contacts'
  • resource_calendar_id Many2one → resource.calendar
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'resource.calendar'
  • resource_id Many2one → resource.resource
    args: 'resource.resource'
  • show_hr_icon_display Boolean
    compute='_compute_presence_icon'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
  • user_id Many2one → res.users
    args: 'res.users'
  • work_contact_id Many2one → res.partner
    copy=False args: 'res.partner', 'Work Contact'
  • work_email Char
    compute='_compute_work_contact_details' inverse='_inverse_work_contact_details' store=True args: 'Work Email'
  • work_location_id Many2one → hr.work.location
    compute='_compute_work_location_id' domain="[('address_id', '=', address_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=False store=True args: 'hr.work.location', 'Work Location'
  • work_phone Char
    compute='_compute_phones' readonly=False store=True args: 'Work Phone'
Public methods (1)
  • action_related_contacts(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • color Integer
    default=_get_default_color string='Color Index'
  • employee_ids Many2many → hr.employee
    string='Employees' args: 'hr.employee', 'employee_category_rel', 'category_id', 'emp_id'
  • name Char
    required=True string='Tag Name'
Public methods (0)

No public methods.

New fields (35)
  • active Boolean
    readonly=True
  • address_id Many2one
    readonly=True
  • avatar_1024 Image
    compute_sudo=True related='employee_id.avatar_1024' args: 'Avatar 1024'
  • avatar_128 Image
    compute_sudo=True related='employee_id.avatar_128' args: 'Avatar 128'
  • avatar_1920 Image
    compute_sudo=True related='employee_id.avatar_1920' args: 'Avatar'
  • avatar_256 Image
    compute_sudo=True related='employee_id.avatar_256' args: 'Avatar 256'
  • avatar_512 Image
    compute_sudo=True related='employee_id.avatar_512' args: 'Avatar 512'
  • child_ids One2many → hr.employee.public
    readonly=True string='Direct subordinates' args: 'hr.employee.public', 'parent_id'
  • coach_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Coach'
  • color Integer
    readonly=True
  • company_id Many2one
    readonly=True
  • create_date Datetime
    readonly=True
  • department_id Many2one
    readonly=True
  • employee_id Many2one → hr.employee
    compute='_compute_employee_id' compute_sudo=True search='_search_employee_id' args: 'hr.employee', 'Employee'
  • employee_type Selection
    readonly=True
  • image_1024 Image
    compute_sudo=True related='employee_id.image_1024' args: 'Image 1024'
  • image_128 Image
    compute_sudo=True related='employee_id.image_128' args: 'Image 128'
  • image_1920 Image
    compute_sudo=True related='employee_id.image_1920' args: 'Image'
  • image_256 Image
    compute_sudo=True related='employee_id.image_256' args: 'Image 256'
  • image_512 Image
    compute_sudo=True related='employee_id.image_512' args: 'Image 512'
  • job_id Many2one
    readonly=True
  • job_title Char
    readonly=True
  • mobile_phone Char
    readonly=True
  • name Char
    readonly=True
  • parent_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Manager'
  • related_contact_ids Many2many
    readonly=True
  • resource_calendar_id Many2one
    readonly=True
  • resource_id Many2one
    readonly=True
  • tz Selection
    readonly=True
  • user_id Many2one
    readonly=True
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • work_contact_id Many2one
    readonly=True
  • work_email Char
    readonly=True
  • work_location_id Many2one
    readonly=True
  • work_phone Char
    readonly=True
Public methods (1)
  • init(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (13)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • contract_type_id Many2one → hr.contract.type
    string='Employment Type' args: 'hr.contract.type'
  • department_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Department' args: 'hr.department'
  • description Html
    sanitize_attributes=False string='Job Description'
  • employee_ids One2many → hr.employee
    groups='base.group_user' string='Employees' args: 'hr.employee', 'job_id'
  • expected_employees Integer
    compute='_compute_employees' help='Expected number of employees for this job position after new recruitment.' store=True string='Total Forecasted Employees'
  • name Char
    index='trigram' required=True string='Job Position' translate=True
  • no_of_employee Integer
    compute='_compute_employees' help='Number of employees currently occupying this job position.' store=True string='Current Number of Employees'
  • no_of_hired_employee Integer
    copy=False help='Number of hired employees for this job position during recruitment phase.' string='Hired Employees'
  • no_of_recruitment Integer
    copy=False default=1 help='Number of new employees you expect to recruit.' string='Target'
  • requirements Text
    args: 'Requirements'
  • sequence Integer
    default=10
Public methods (3)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
    We don't want the current user to be follower of all created job
  • write(self, vals)

New fields (6)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> args: 'res.company'
  • department_id Many2one → hr.department
    check_company=True args: 'hr.department'
  • name Char
    required=True args: 'Name'
  • plan_activity_type_ids One2many → hr.plan.activity.type
    domain="[('company_id', '=', company_id)]" string='Activities' args: 'hr.plan.activity.type', 'plan_id'
  • steps_count Integer
    compute='_compute_steps_count'
Public methods (0)

No public methods.

New fields (7)
  • activity_type_id Many2one → mail.activity.type
    default=<expr> domain=<expr> ondelete='restrict' args: 'mail.activity.type', 'Activity Type'
  • company_id Many2one → res.company
    default=<expr> args: 'res.company'
  • note Html
    args: 'Note'
  • plan_id Many2one → hr.plan
    args: 'hr.plan'
  • responsible Selection
    default='employee' required=True string='Responsible' args: [('coach', 'Coach'), ('manager', 'Manager'), ('employee', 'Employee'), ('other', 'Other')]
  • responsible_id Many2one → res.users
    check_company=True help='Specific responsible of activity if not linked to the employee.' args: 'res.users', 'Other Responsible'
  • summary Char
    compute='_compute_default_summary' readonly=False store=True args: 'Summary'
Public methods (1)
  • get_responsible_id(self, employee)

New fields (5)
  • company_id Many2one → res.company
    compute='_compute_company_id' required=True args: 'res.company', 'Company'
  • department_id Many2one → hr.department
    compute='_compute_department_id' args: 'hr.department'
  • employee_ids Many2many → hr.employee
    default=<expr> required=True string='Employee' args: 'hr.employee', 'hr_employee_hr_plan_wizard_rel', 'employee_id', 'plan_wizard_id'
  • plan_id Many2one → hr.plan
    default=<expr> domain="[('company_id', 'in', [False, company_id]), '|', ('department_id', '=', department_id), ('department_id', '=', False)]" args: 'hr.plan'
  • warning Html
    compute='_compute_warning'
Public methods (1)
  • action_launch(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" required=True string='Work Address' args: 'res.partner'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • location_number Char
  • name Char
    required=True string='Work Location'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • alias_contact Selection
    ondelete={'employees': 'cascade'} selection_add=[('employees', 'Authenticated Employees')]
Public methods (0)

No public methods.

New fields (1)
  • subscription_department_ids Many2many → hr.department
    help='Automatically subscribe members of those departments to the channel.' string='HR Departments' args: 'hr.department'
Public methods (1)
  • write(self, vals)

New fields (2)
  • hr_presence_control_email_amount Integer
    string='# emails to send'
  • hr_presence_control_ip_list Char
    string='Valid IP addresses'
Public methods (0)

No public methods.

New fields (11)
  • hr_employee_self_edit Boolean
    config_parameter='hr.hr_employee_self_edit' string='Employee Editing'
  • hr_presence_control_email Boolean
    config_parameter='hr_presence.hr_presence_control_email' string='Based on number of emails sent'
  • hr_presence_control_email_amount Integer
    readonly=False related='company_id.hr_presence_control_email_amount'
  • hr_presence_control_ip Boolean
    config_parameter='hr_presence.hr_presence_control_ip' string='Based on IP Address'
  • hr_presence_control_ip_list Char
    readonly=False related='company_id.hr_presence_control_ip_list'
  • hr_presence_control_login Boolean
    config_parameter='hr.hr_presence_control_login' string='Based on user status in system'
  • module_hr_attendance Boolean
    string='Based on attendances'
  • module_hr_homeworking Boolean
    string='Homeworking'
  • module_hr_presence Boolean
    string='Advanced Presence Control'
  • module_hr_skills Boolean
    string='Skills Management'
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='company_id.resource_calendar_id' args: 'resource.calendar', 'Company Working Hours'
Public methods (0)

No public methods.

New fields (2)
  • employee_ids One2many → hr.employee
    groups='hr.group_hr_user' help='Related employees based on their private address' string='Employees' args: 'hr.employee', 'address_home_id'
  • employees_count Integer
    compute='_compute_employees_count' groups='hr.group_hr_user'
Public methods (2)
  • action_open_employees(self)
  • name_get(self)
    Override to allow an employee to see its private address in his profile. This avoids to relax access rules on `res.parter` and to add an `ir.rule`. (advantage in both security and performance). Use a try/except instead of systematically checking to minimize the impact on performance.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (57)
  • additional_note Text
    readonly=False related='employee_id.additional_note' related_sudo=False
  • address_home_id Many2one
    readonly=False related='employee_id.address_home_id' related_sudo=False
  • address_id Many2one
    readonly=False related='employee_id.address_id' related_sudo=False
  • barcode Char
    readonly=False related='employee_id.barcode' related_sudo=False
  • birthday Date
    readonly=False related='employee_id.birthday' related_sudo=False
  • can_edit Boolean
    compute='_compute_can_edit'
  • category_ids Many2many
    readonly=False related='employee_id.category_ids' related_sudo=False string='Employee Tags'
  • certificate Selection
    readonly=False related='employee_id.certificate' related_sudo=False
  • children Integer
    readonly=False related='employee_id.children' related_sudo=False
  • coach_id Many2one
    readonly=False related='employee_id.coach_id' related_sudo=False
  • country_of_birth Many2one
    readonly=False related='employee_id.country_of_birth' related_sudo=False
  • create_employee Boolean
    copy=False default=True store=False string='Technical field, whether to create an employee'
  • create_employee_id Many2one → hr.employee
    copy=False store=False string='Technical field, bind user to this employee on create' args: 'hr.employee'
  • department_id Many2one
    readonly=False related='employee_id.department_id' related_sudo=False
  • emergency_contact Char
    readonly=False related='employee_id.emergency_contact' related_sudo=False
  • emergency_phone Char
    readonly=False related='employee_id.emergency_phone' related_sudo=False
  • employee_bank_account_id Many2one
    readonly=False related='employee_id.bank_account_id' related_sudo=False string="Employee's Bank Account Number"
  • employee_count Integer
    compute='_compute_employee_count'
  • employee_country_id Many2one
    readonly=False related='employee_id.country_id' related_sudo=False string="Employee's Country"
  • employee_id Many2one → hr.employee
    compute='_compute_company_employee' search='_search_company_employee' store=False string='Company employee' args: 'hr.employee'
  • employee_ids One2many → hr.employee
    domain=_employee_ids_domain string='Related employee' args: 'hr.employee', 'user_id'
  • employee_parent_id Many2one
    readonly=False related='employee_id.parent_id' related_sudo=False
  • employee_phone Char
    readonly=False related='employee_id.phone' related_sudo=False
  • employee_resource_calendar_id Many2one
    readonly=True related='employee_id.resource_calendar_id' string="Employee's Working Hours"
  • employee_type Selection
    readonly=False related='employee_id.employee_type' related_sudo=False
  • gender Selection
    readonly=False related='employee_id.gender' related_sudo=False
  • hr_presence_state Selection
    related='employee_id.hr_presence_state'
  • identification_id Char
    readonly=False related='employee_id.identification_id' related_sudo=False
  • is_address_home_a_company Boolean
    readonly=False related='employee_id.is_address_home_a_company' related_sudo=False
  • is_system Boolean
    compute='_compute_is_system'
  • job_title Char
    readonly=False related='employee_id.job_title' related_sudo=False
  • km_home_work Integer
    readonly=False related='employee_id.km_home_work' related_sudo=False
  • last_activity Date
    related='employee_id.last_activity'
  • last_activity_time Char
    related='employee_id.last_activity_time'
  • marital Selection
    readonly=False related='employee_id.marital' related_sudo=False
  • mobile_phone Char
    readonly=False related='employee_id.mobile_phone' related_sudo=False
  • passport_id Char
    readonly=False related='employee_id.passport_id' related_sudo=False
  • permit_no Char
    readonly=False related='employee_id.permit_no' related_sudo=False
  • pin Char
    readonly=False related='employee_id.pin' related_sudo=False
  • place_of_birth Char
    readonly=False related='employee_id.place_of_birth' related_sudo=False
  • private_city Char
    readonly=False related='address_home_id.city' related_sudo=False string='Private City'
  • private_country_id Many2one
    readonly=False related='address_home_id.country_id' related_sudo=False string='Private Country'
  • private_email Char
    readonly=False related='address_home_id.email' string='Private Email'
  • private_lang Selection
    readonly=False related='address_home_id.lang' string='Employee Lang'
  • private_state_id Many2one
    domain="[('country_id', '=?', private_country_id)]" readonly=False related='address_home_id.state_id' related_sudo=False string='Private State'
  • private_street Char
    readonly=False related='address_home_id.street' related_sudo=False string='Private Street'
  • private_street2 Char
    readonly=False related='address_home_id.street2' related_sudo=False string='Private Street2'
  • private_zip Char
    readonly=False related='address_home_id.zip' related_sudo=False string='Private Zip'
  • spouse_birthdate Date
    readonly=False related='employee_id.spouse_birthdate' related_sudo=False
  • spouse_complete_name Char
    readonly=False related='employee_id.spouse_complete_name' related_sudo=False
  • study_field Char
    readonly=False related='employee_id.study_field' related_sudo=False
  • study_school Char
    readonly=False related='employee_id.study_school' related_sudo=False
  • visa_expire Date
    readonly=False related='employee_id.visa_expire' related_sudo=False
  • visa_no Char
    readonly=False related='employee_id.visa_no' related_sudo=False
  • work_email Char
    readonly=False related='employee_id.work_email' related_sudo=False
  • work_location_id Many2one
    readonly=False related='employee_id.work_location_id' related_sudo=False
  • work_phone Char
    readonly=False related='employee_id.work_phone' related_sudo=False
Public methods (8)
  • SELF_READABLE_FIELDS(self)
    @property
  • SELF_WRITEABLE_FIELDS(self)
    @property
  • action_create_employee(self)
  • action_get(self)
    @api.model
  • create(self, vals_list)
    @api.model_create_multi
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
  • get_views(self, views, options=None)
    @api.model
  • write(self, vals)
    Synchronize user and its related employee and check access rights if employees are not allowed to update their own data (otherwise sudo is applied for self data).

New fields (2)
  • employee_id One2many → hr.employee
    domain="[('company_id', '=', company_id)]" args: 'hr.employee', 'resource_id'
  • user_id Many2one
    copy=False
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources/Employees
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Goffin Simon, Mohammed Shekha, Thibault Francois, Aaron Bohy, Jeremy Kersten, Barad Mahendra, Yannick Tivisse, Nicolas Seinlet, Romain Derie, Christophe Monniez, Priyanka Kakadiya, Xavier-Do, Sébastien Theys, alt-odoo, Julien Mougenot, Samuel Degueldre, Alvaro Fuentes, Achraf (abz), Swapnesh Shah, Tiffany Chang (tic), IEL, Gorash, jbm-odoo, Aurélien (avd), yograj tandel, William Braeckman, Kevin Baptiste, Philippe Wauthy, roen-odoo, Benoit Socias, Robin Heinz, Miquel Raïch, Sylvain Francis, sofiagvaladze, mafo-odoo, Didier (did), anhe-odoo, Abdelouahab (abla), Nicolas Bayet, Francisco Alejandro Gonzalez Luna, Michael Mattiello (mcm), dht-odoo, Roy Le, Pierrot (prro), niyasraphy, Francois (fge), Thomas Lefebvre (thle), Malay Khamar, Qiuyu (QHO), Sébastien Geelen (sge), Leonardo Pavan Rocha, Zelong Lin, mizosoft, Flotchet, jugj-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (39)
XML IDNameModelTypeStatus
hr_department_view_kanban hr.department.kanban hr.department kanban New
hr_departure_reason_view_form hr.departure.reason form New
hr_departure_reason_view_list hr.departure.reason tree New
hr_departure_wizard_view_form hr.departure.wizard.view.form hr.departure.wizard form New
hr_employee_public_view_form hr.employee.public.form hr.employee.public form New
hr_employee_public_view_kanban hr.employee.kanban hr.employee.public kanban New
hr_employee_public_view_search hr.employee.search hr.employee.public search New
hr_employee_public_view_tree hr.employee.tree hr.employee.public tree New
hr_employee_view_activity hr.employee.activity hr.employee activity New
hr_job_view_kanban hr.job.kanban hr.job kanban New
hr_kanban_view_employees hr.employee.kanban hr.employee kanban New
hr_plan_activity_type_view_form hr.plan.activity.type.view.form hr.plan.activity.type form New
hr_plan_activity_type_view_tree hr.plan.activity.type.view.tree hr.plan.activity.type tree New
hr_plan_view_form hr.plan.view.form hr.plan form New
hr_plan_view_search hr.plan.view.search hr.plan search New
hr_plan_view_tree hr.plan.view.tree hr.plan tree New
hr_work_location_form_view hr.work.location.view.form hr.work.location form New
hr_work_location_tree_view hr.work.location.view.tree hr.work.location tree New
mail_channel_view_form_ mail.channel.view.form.inherit.hr mail.channel xpath Inherits mail.mail_channel_view_form
plan_wizard plan wizard hr.plan.wizard form New
print_employee_badge print_employee_badge ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_form res.partner.view.form.inherit.hr res.partner div Inherits base.view_partner_form
res_users_view_form res.users.form.inherit res.users xpath Inherits base.view_users_form
res_users_view_form_profile res.users.preferences.form.inherit res.users form Inherits res_users_view_form_simple_modif
res_users_view_form_simple_modif res.users.preferences.form.simplified.inherit res.users footer Inherits base.view_users_form_simple_modif
view_department_filter hr.department.search hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_filter hr.employee.search hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_job_filter hr.job.search hr.job search New
view_partner_tree2 hr.employee.tree hr.employee tree New
view_users_form_simple_modif_resource res.users.preferences.form.resource res.users field Inherits base.view_users_form_simple_modif
Models touched (21)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (12)
  • active Boolean
    default=True args: 'Active'
  • child_ids One2many → hr.department
    string='Child Departments' args: 'hr.department', 'parent_id'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> index=True string='Company' args: 'res.company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True store=True args: 'Complete Name'
  • jobs_ids One2many → hr.job
    string='Jobs' args: 'hr.job', 'department_id'
  • manager_id Many2one → hr.employee
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Manager' tracking=True args: 'hr.employee'
  • member_ids One2many → hr.employee
    readonly=True string='Members' args: 'hr.employee', 'department_id'
  • name Char
    required=True args: 'Department Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" index=True string='Parent Department' args: 'hr.department'
  • total_employee Integer
    compute='_compute_total_employee' string='Total Employee'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_create(self, name)
    @api.model
  • name_get(self)
  • write(self, vals)
    If updating manager of a department, we need to update all the employees of department hierarchy, and subscribe the new manager.

New fields (2)
  • name Char
    required=True string='Reason' translate=True
  • sequence Integer
    default=10 args: 'Sequence'
Public methods (0)

No public methods.

New fields (5)
  • archive_private_address Boolean
    default=True args: 'Archive Private Address'
  • departure_date Date
    default=_get_default_departure_date required=True string='Departure Date'
  • departure_description Html
    string='Additional Information'
  • departure_reason_id Many2one → hr.departure.reason
    default=<expr> required=True args: 'hr.departure.reason'
  • employee_id Many2one → hr.employee
    default=<expr> required=True string='Employee' args: 'hr.employee'
Public methods (1)
  • action_register_departure(self)

New fields (52)
  • active Boolean
    default=True readonly=False related='resource_id.active' store=True args: 'Active'
  • additional_note Text
    groups='hr.group_hr_user' string='Additional Note' tracking=True
  • address_home_id Many2one → res.partner
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" groups='hr.group_hr_user' help='Enter here the private address of the employee, not the one linked to your company.' tracking=True args: 'res.partner', 'Address'
  • bank_account_id Many2one → res.partner.bank
    domain="[('partner_id', '=', address_home_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" groups='hr.group_hr_user' help='Employee bank salary account' tracking=True args: 'res.partner.bank', 'Bank Account Number'
  • barcode Char
    copy=False groups='hr.group_hr_user' help='ID used for employee identification.' string='Badge ID'
  • birthday Date
    groups='hr.group_hr_user' tracking=True args: 'Date of Birth'
  • category_ids Many2many → hr.employee.category
    groups='hr.group_hr_manager' string='Tags' args: 'hr.employee.category', 'employee_category_rel', 'emp_id', 'category_id'
  • certificate Selection
    default='other' groups='hr.group_hr_user' tracking=True args: [('graduate', 'Graduate'), ('bachelor', 'Bachelor'), ('master', 'Master'), ('doctor', 'Doctor'), ('other', 'Other')], 'Certificate Level'
  • child_ids One2many → hr.employee
    string='Direct subordinates' args: 'hr.employee', 'parent_id'
  • children Integer
    groups='hr.group_hr_user' string='Number of Children' tracking=True
  • color Integer
    default=0 args: 'Color Index'
  • company_country_code Char
    readonly=True related='company_country_id.code'
  • company_country_id Many2one → res.country
    readonly=True related='company_id.country_id' args: 'res.country', 'Company Country'
  • company_id Many2one → res.company
    required=True args: 'res.company'
  • country_id Many2one → res.country
    groups='hr.group_hr_user' tracking=True args: 'res.country', 'Nationality (Country)'
  • country_of_birth Many2one → res.country
    groups='hr.group_hr_user' string='Country of Birth' tracking=True args: 'res.country'
  • departure_date Date
    copy=False groups='hr.group_hr_user' string='Departure Date' tracking=True
  • departure_description Html
    copy=False groups='hr.group_hr_user' string='Additional Information' tracking=True
  • departure_reason_id Many2one → hr.departure.reason
    copy=False groups='hr.group_hr_user' ondelete='restrict' string='Departure Reason' tracking=True args: 'hr.departure.reason'
  • driving_license Binary
    groups='hr.group_hr_user' string='Driving License'
  • emergency_contact Char
    groups='hr.group_hr_user' tracking=True args: 'Emergency Contact'
  • emergency_phone Char
    groups='hr.group_hr_user' tracking=True args: 'Emergency Phone'
  • gender Selection
    groups='hr.group_hr_user' tracking=True args: [('male', 'Male'), ('female', 'Female'), ('other', 'Other')]
  • has_work_permit Binary
    groups='hr.group_hr_user' string='Work Permit' tracking=True
  • id_card Binary
    groups='hr.group_hr_user' string='ID Card Copy'
  • identification_id Char
    groups='hr.group_hr_user' string='Identification No' tracking=True
  • is_address_home_a_company Boolean
    compute='_compute_is_address_home_a_company' args: 'The employee address has a company linked'
  • job_id Many2one
    tracking=True
  • km_home_work Integer
    groups='hr.group_hr_user' string='Home-Work Distance' tracking=True
  • lang Selection
    groups='hr.group_hr_user' readonly=False related='address_home_id.lang' string='Lang'
  • marital Selection
    default='single' groups='hr.group_hr_user' string='Marital Status' tracking=True args: [('single', 'Single'), ('married', 'Married'), ('cohabitant', 'Legal Cohabitant'), ('widower', 'Widower'), ('divorced', 'Divorced')]
  • message_main_attachment_id Many2one
    groups='hr.group_hr_user'
  • name Char
    readonly=False related='resource_id.name' store=True string='Employee Name' tracking=True
  • notes Text
    groups='hr.group_hr_user' args: 'Notes'
  • passport_id Char
    groups='hr.group_hr_user' tracking=True args: 'Passport No'
  • permit_no Char
    groups='hr.group_hr_user' tracking=True args: 'Work Permit No'
  • phone Char
    groups='hr.group_hr_user' readonly=False related='address_home_id.phone' related_sudo=False string='Private Phone'
  • pin Char
    copy=False groups='hr.group_hr_user' help='PIN used to Check In/Out in the Kiosk Mode of the Attendance application (if enabled in Configuration) and to change the cashier in the Point of Sale application.' string='PIN'
  • place_of_birth Char
    groups='hr.group_hr_user' tracking=True args: 'Place of Birth'
  • private_email Char
    groups='hr.group_hr_user' related='address_home_id.email' string='Private Email'
  • sinid Char
    groups='hr.group_hr_user' help='Social Insurance Number' tracking=True args: 'SIN No'
  • spouse_birthdate Date
    groups='hr.group_hr_user' string='Spouse Birthdate' tracking=True
  • spouse_complete_name Char
    groups='hr.group_hr_user' string='Spouse Complete Name' tracking=True
  • ssnid Char
    groups='hr.group_hr_user' help='Social Security Number' tracking=True args: 'SSN No'
  • study_field Char
    groups='hr.group_hr_user' tracking=True args: 'Field of Study'
  • study_school Char
    groups='hr.group_hr_user' tracking=True args: 'School'
  • user_id Many2one → res.users
    readonly=False related='resource_id.user_id' store=True args: 'res.users', 'User'
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • visa_expire Date
    groups='hr.group_hr_user' tracking=True args: 'Visa Expiration Date'
  • visa_no Char
    groups='hr.group_hr_user' tracking=True args: 'Visa No'
  • work_permit_expiration_date Date
    groups='hr.group_hr_user' tracking=True args: 'Work Permit Expiration Date'
  • work_permit_scheduled_activity Boolean
    default=False groups='hr.group_hr_user'
Public methods (12)
  • create(self, vals)
    @api.model
  • generate_random_barcode(self)
  • get_formview_action(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_formview_id(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_import_templates(self)
    @api.model
  • load_views(self, views, options=None)
    @api.model
  • message_post(self, **kwargs)
    @api.returns('mail.message', <expr>)
  • name_get(self)
  • read(self, fields, load='_classic_read')
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (23)
  • active Boolean
    args: 'Active'
  • address_id Many2one → res.partner
    compute='_compute_address_id' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=False store=True args: 'res.partner', 'Work Address'
  • coach_id Many2one → hr.employee
    compute='_compute_coach' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Select the "Employee" who is the coach of this employee.\nThe "Coach" has no specific rights or responsibilities by default.' readonly=False store=True args: 'hr.employee', 'Coach'
  • color Integer
    default=0 args: 'Color Index'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • department_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'hr.department', 'Department'
  • employee_type Selection
    default='employee' help='The employee type. Although the primary purpose may seem to categorize employees, this field has also an impact in the Contract History. Only Employee type is supposed to be under contract and will have a Contract History.' required=True string='Employee Type' args: [('employee', 'Employee'), ('student', 'Student'), ('trainee', 'Trainee'), ('contractor', 'Contractor'), ('freelance', 'Freelancer')]
  • hr_icon_display Selection
    compute='_compute_presence_icon' args: [('presence_present', 'Present'), ('presence_absent_active', 'Present but not active'), ('presence_absent', 'Absent'), ('presence_to_define', 'To define'), ('presence_undetermined', 'Undetermined')]
  • hr_presence_state Selection
    compute='_compute_presence_state' default='to_define' args: [('present', 'Present'), ('absent', 'Absent'), ('to_define', 'To Define')]
  • job_id Many2one → hr.job
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'hr.job', 'Job Position'
  • job_title Char
    compute='_compute_job_title' readonly=False store=True args: 'Job Title'
  • last_activity Date
    compute='_compute_last_activity'
  • last_activity_time Char
    compute='_compute_last_activity'
  • mobile_phone Char
    args: 'Work Mobile'
  • name Char
  • parent_id Many2one → hr.employee
    compute='_compute_parent_id' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=False store=True args: 'hr.employee', 'Manager'
  • resource_calendar_id Many2one → resource.calendar
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'resource.calendar'
  • resource_id Many2one → resource.resource
    args: 'resource.resource'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
  • user_id Many2one → res.users
    args: 'res.users'
  • work_email Char
    args: 'Work Email'
  • work_location_id Many2one → hr.work.location
    compute='_compute_work_location_id' domain="[('address_id', '=', address_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=False store=True args: 'hr.work.location', 'Work Location'
  • work_phone Char
    compute='_compute_phones' readonly=False store=True args: 'Work Phone'
Public methods (0)

No public methods.

New fields (3)
  • color Integer
    default=_get_default_color string='Color Index'
  • employee_ids Many2many → hr.employee
    string='Employees' args: 'hr.employee', 'employee_category_rel', 'category_id', 'emp_id'
  • name Char
    required=True string='Tag Name'
Public methods (0)

No public methods.

New fields (33)
  • active Boolean
    readonly=True
  • address_id Many2one
    readonly=True
  • avatar_1024 Image
    compute_sudo=True related='employee_id.avatar_1024' args: 'Avatar 1024'
  • avatar_128 Image
    compute_sudo=True related='employee_id.avatar_128' args: 'Avatar 128'
  • avatar_1920 Image
    compute_sudo=True related='employee_id.avatar_1920' args: 'Avatar'
  • avatar_256 Image
    compute_sudo=True related='employee_id.avatar_256' args: 'Avatar 256'
  • avatar_512 Image
    compute_sudo=True related='employee_id.avatar_512' args: 'Avatar 512'
  • child_ids One2many → hr.employee.public
    readonly=True string='Direct subordinates' args: 'hr.employee.public', 'parent_id'
  • coach_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Coach'
  • color Integer
    readonly=True
  • company_id Many2one
    readonly=True
  • create_date Datetime
    readonly=True
  • department_id Many2one
    readonly=True
  • employee_id Many2one → hr.employee
    compute='_compute_employee_id' compute_sudo=True search='_search_employee_id' args: 'hr.employee', 'Employee'
  • employee_type Selection
    readonly=True
  • image_1024 Image
    compute_sudo=True related='employee_id.image_1024' args: 'Image 1024'
  • image_128 Image
    compute_sudo=True related='employee_id.image_128' args: 'Image 128'
  • image_1920 Image
    compute_sudo=True related='employee_id.image_1920' args: 'Image'
  • image_256 Image
    compute_sudo=True related='employee_id.image_256' args: 'Image 256'
  • image_512 Image
    compute_sudo=True related='employee_id.image_512' args: 'Image 512'
  • job_id Many2one
    readonly=True
  • job_title Char
    readonly=True
  • mobile_phone Char
    readonly=True
  • name Char
    readonly=True
  • parent_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Manager'
  • resource_calendar_id Many2one
    readonly=True
  • resource_id Many2one
    readonly=True
  • tz Selection
    readonly=True
  • user_id Many2one
    readonly=True
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • work_email Char
    readonly=True
  • work_location_id Many2one
    readonly=True
  • work_phone Char
    readonly=True
Public methods (1)
  • init(self)

New fields (12)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • department_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Department' args: 'hr.department'
  • description Html
    sanitize_attributes=False string='Job Description'
  • employee_ids One2many → hr.employee
    groups='base.group_user' string='Employees' args: 'hr.employee', 'job_id'
  • expected_employees Integer
    compute='_compute_employees' help='Expected number of employees for this job position after new recruitment.' store=True string='Total Forecasted Employees'
  • name Char
    index=True required=True string='Job Position' translate=True
  • no_of_employee Integer
    compute='_compute_employees' help='Number of employees currently occupying this job position.' store=True string='Current Number of Employees'
  • no_of_hired_employee Integer
    copy=False help='Number of hired employees for this job position during recruitment phase.' string='Hired Employees'
  • no_of_recruitment Integer
    copy=False default=1 help='Number of new employees you expect to recruit.' string='Expected New Employees'
  • requirements Text
    args: 'Requirements'
  • sequence Integer
    default=10
  • state Selection
    copy=False default='recruit' help='Set whether the recruitment process is open or closed for this job position.' readonly=True required=True string='Status' tracking=True args: [('recruit', 'Recruitment in Progress'), ('open', 'Not Recruiting')]
Public methods (5)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, values)
    @api.model
    We don't want the current user to be follower of all created job
  • set_open(self)
  • set_recruit(self)
  • write(self, vals)

New fields (3)
  • active Boolean
    default=True
  • name Char
    required=True args: 'Name'
  • plan_activity_type_ids Many2many → hr.plan.activity.type
    string='Activities' args: 'hr.plan.activity.type'
Public methods (0)

No public methods.

New fields (5)
  • activity_type_id Many2one → mail.activity.type
    default=<expr> domain=<expr> ondelete='restrict' args: 'mail.activity.type', 'Activity Type'
  • note Html
    args: 'Note'
  • responsible Selection
    default='employee' required=True string='Responsible' args: [('coach', 'Coach'), ('manager', 'Manager'), ('employee', 'Employee'), ('other', 'Other')]
  • responsible_id Many2one → res.users
    help='Specific responsible of activity if not linked to the employee.' args: 'res.users', 'Name'
  • summary Char
    compute='_compute_default_summary' readonly=False store=True args: 'Summary'
Public methods (1)
  • get_responsible_id(self, employee)

New fields (2)
  • employee_id Many2one → hr.employee
    default=<expr> required=True string='Employee' args: 'hr.employee'
  • plan_id Many2one → hr.plan
    default=<expr> args: 'hr.plan'
Public methods (1)
  • action_launch(self)

New fields (5)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" required=True string='Work Address' args: 'res.partner'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • location_number Char
  • name Char
    required=True string='Work Location'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • alias_contact Selection
    ondelete={'employees': 'cascade'} selection_add=[('employees', 'Authenticated Employees')]
Public methods (0)

No public methods.

New fields (1)
  • subscription_department_ids Many2many → hr.department
    help='Automatically subscribe members of those departments to the channel.' string='HR Departments' args: 'hr.department'
Public methods (1)
  • write(self, vals)

New fields (2)
  • hr_presence_control_email_amount Integer
    string='# emails to send'
  • hr_presence_control_ip_list Char
    string='Valid IP addresses'
Public methods (0)

No public methods.

New fields (10)
  • hr_employee_self_edit Boolean
    config_parameter='hr.hr_employee_self_edit' string='Employee Editing'
  • hr_presence_control_email Boolean
    config_parameter='hr_presence.hr_presence_control_email' string='Based on number of emails sent'
  • hr_presence_control_email_amount Integer
    readonly=False related='company_id.hr_presence_control_email_amount'
  • hr_presence_control_ip Boolean
    config_parameter='hr_presence.hr_presence_control_ip' string='Based on IP Address'
  • hr_presence_control_ip_list Char
    readonly=False related='company_id.hr_presence_control_ip_list'
  • hr_presence_control_login Boolean
    config_parameter='hr.hr_presence_control_login' string='Based on user status in system'
  • module_hr_attendance Boolean
    string='Based on attendances'
  • module_hr_presence Boolean
    string='Advanced Presence Control'
  • module_hr_skills Boolean
    string='Skills Management'
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='company_id.resource_calendar_id' args: 'resource.calendar', 'Company Working Hours'
Public methods (0)

No public methods.

New fields (2)
  • employee_ids One2many → hr.employee
    groups='hr.group_hr_user' help='Related employees based on their private address' string='Employees' args: 'hr.employee', 'address_home_id'
  • employees_count Integer
    compute='_compute_employees_count' groups='hr.group_hr_user'
Public methods (2)
  • action_open_employees(self)
  • name_get(self)
    Override to allow an employee to see its private address in his profile. This avoids to relax access rules on `res.parter` and to add an `ir.rule`. (advantage in both security and performance). Use a try/except instead of systematically checking to minimize the impact on performance.

New fields (54)
  • additional_note Text
    readonly=False related='employee_id.additional_note' related_sudo=False
  • address_home_id Many2one
    readonly=False related='employee_id.address_home_id' related_sudo=False
  • address_id Many2one
    readonly=False related='employee_id.address_id' related_sudo=False
  • barcode Char
    readonly=False related='employee_id.barcode' related_sudo=False
  • birthday Date
    readonly=False related='employee_id.birthday' related_sudo=False
  • can_edit Boolean
    compute='_compute_can_edit'
  • category_ids Many2many
    readonly=False related='employee_id.category_ids' related_sudo=False string='Employee Tags'
  • certificate Selection
    readonly=False related='employee_id.certificate' related_sudo=False
  • children Integer
    readonly=False related='employee_id.children' related_sudo=False
  • coach_id Many2one
    readonly=False related='employee_id.coach_id' related_sudo=False
  • country_of_birth Many2one
    readonly=False related='employee_id.country_of_birth' related_sudo=False
  • department_id Many2one
    readonly=False related='employee_id.department_id' related_sudo=False
  • emergency_contact Char
    readonly=False related='employee_id.emergency_contact' related_sudo=False
  • emergency_phone Char
    readonly=False related='employee_id.emergency_phone' related_sudo=False
  • employee_bank_account_id Many2one
    readonly=False related='employee_id.bank_account_id' related_sudo=False string="Employee's Bank Account Number"
  • employee_count Integer
    compute='_compute_employee_count'
  • employee_country_id Many2one
    readonly=False related='employee_id.country_id' related_sudo=False string="Employee's Country"
  • employee_id Many2one → hr.employee
    compute='_compute_company_employee' search='_search_company_employee' store=False string='Company employee' args: 'hr.employee'
  • employee_ids One2many → hr.employee
    domain=_employee_ids_domain string='Related employee' args: 'hr.employee', 'user_id'
  • employee_parent_id Many2one
    readonly=False related='employee_id.parent_id' related_sudo=False
  • employee_phone Char
    readonly=False related='employee_id.phone' related_sudo=False
  • employee_type Selection
    readonly=False related='employee_id.employee_type' related_sudo=False
  • gender Selection
    readonly=False related='employee_id.gender' related_sudo=False
  • hr_presence_state Selection
    related='employee_id.hr_presence_state'
  • identification_id Char
    readonly=False related='employee_id.identification_id' related_sudo=False
  • is_address_home_a_company Boolean
    readonly=False related='employee_id.is_address_home_a_company' related_sudo=False
  • is_system Boolean
    compute='_compute_is_system'
  • job_title Char
    readonly=False related='employee_id.job_title' related_sudo=False
  • km_home_work Integer
    readonly=False related='employee_id.km_home_work' related_sudo=False
  • last_activity Date
    related='employee_id.last_activity'
  • last_activity_time Char
    related='employee_id.last_activity_time'
  • marital Selection
    readonly=False related='employee_id.marital' related_sudo=False
  • mobile_phone Char
    readonly=False related='employee_id.mobile_phone' related_sudo=False
  • passport_id Char
    readonly=False related='employee_id.passport_id' related_sudo=False
  • permit_no Char
    readonly=False related='employee_id.permit_no' related_sudo=False
  • pin Char
    readonly=False related='employee_id.pin' related_sudo=False
  • place_of_birth Char
    readonly=False related='employee_id.place_of_birth' related_sudo=False
  • private_city Char
    readonly=False related='address_home_id.city' related_sudo=False string='Private City'
  • private_country_id Many2one
    readonly=False related='address_home_id.country_id' related_sudo=False string='Private Country'
  • private_email Char
    readonly=False related='address_home_id.email' string='Private Email'
  • private_lang Selection
    readonly=False related='address_home_id.lang' string='Employee Lang'
  • private_state_id Many2one
    domain="[('country_id', '=?', private_country_id)]" readonly=False related='address_home_id.state_id' related_sudo=False string='Private State'
  • private_street Char
    readonly=False related='address_home_id.street' related_sudo=False string='Private Street'
  • private_street2 Char
    readonly=False related='address_home_id.street2' related_sudo=False string='Private Street2'
  • private_zip Char
    readonly=False related='address_home_id.zip' related_sudo=False string='Private Zip'
  • spouse_birthdate Date
    readonly=False related='employee_id.spouse_birthdate' related_sudo=False
  • spouse_complete_name Char
    readonly=False related='employee_id.spouse_complete_name' related_sudo=False
  • study_field Char
    readonly=False related='employee_id.study_field' related_sudo=False
  • study_school Char
    readonly=False related='employee_id.study_school' related_sudo=False
  • visa_expire Date
    readonly=False related='employee_id.visa_expire' related_sudo=False
  • visa_no Char
    readonly=False related='employee_id.visa_no' related_sudo=False
  • work_email Char
    readonly=False related='employee_id.work_email' related_sudo=False
  • work_location_id Many2one
    readonly=False related='employee_id.work_location_id' related_sudo=False
  • work_phone Char
    readonly=False related='employee_id.work_phone' related_sudo=False
Public methods (6)
  • SELF_READABLE_FIELDS(self)
    @property
  • SELF_WRITEABLE_FIELDS(self)
    @property
  • action_create_employee(self)
  • action_get(self)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • write(self, vals)
    Synchronize user and its related employee and check access rights if employees are not allowed to update their own data (otherwise sudo is applied for self data).

New fields (1)
  • user_id Many2one
    copy=False
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources/Employees
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Thibault Francois, Aaron Bohy, GitHub, Lucas Perais (lpe), Barad Mahendra, Yannick Tivisse, Nicolas Seinlet, Jorge Pinna Puissant, Priyanka Kakadiya, Xavier-Do, jvm-odoo, Victor Feyens, Andrea Grazioso (agr-odoo), Sébastien Theys, Nasreddin (bon), Julien Mougenot, fw-bot, Lucas Lefèvre, Baptiste Vergote, Swapnesh Shah, Tiffany Chang (tic), IEL, Pierre Paridans, qho, jbm-odoo, Aurélien (avd), Arnaud Joset, William Braeckman, Kevin Baptiste, roen-odoo, Miquel Raïch, jdoutreloux, mafo-odoo, Didier (did), anhe-odoo, Abdelouahab (abla), Adrien Minet, Francisco Alejandro Gonzalez Luna, Pierrot (prro), bve-odoo, Francois (fge), Thomas Lefebvre (thle), Simon Genin (ges), dmonzonis, Nisha patel, Bruno Boi
WEBSITE
WEBSITEhttps://www.odoo.com/page/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:28
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (36)
XML IDNameModelTypeStatus
assets_backend hr assets ir.ui.view qweb Inherits web.assets_backend
hr_department_view_kanban hr.department.kanban hr.department kanban New
hr_departure_wizard_view_form hr.departure.wizard.view.form hr.departure.wizard form New
hr_employee_public_view_form hr.employee.public.form hr.employee.public form New
hr_employee_public_view_kanban hr.employee.kanban hr.employee.public kanban New
hr_employee_public_view_search hr.employee.search hr.employee.public search New
hr_employee_public_view_tree hr.employee.tree hr.employee.public tree New
hr_employee_view_activity hr.employee.activity hr.employee activity New
hr_job_view_kanban hr.job.kanban hr.job kanban New
hr_kanban_view_employees hr.employee.kanban hr.employee kanban New
hr_plan_activity_type_view_form hr.plan.activity.type.view.form hr.plan.activity.type form New
hr_plan_activity_type_view_tree hr.plan.activity.type.view.tree hr.plan.activity.type tree New
hr_plan_view_form hr.plan.view.form hr.plan form New
hr_plan_view_search hr.plan.view.search hr.plan search New
hr_plan_view_tree hr.plan.view.tree hr.plan tree New
mail_channel_view_form_ mail.channel.view.form.inherit.hr mail.channel xpath Inherits mail.mail_channel_view_form
plan_wizard plan wizard hr.plan.wizard form New
print_employee_badge print_employee_badge ir.ui.view qweb New
qunit_suite hr tests ir.ui.view qweb Inherits web.qunit_suite_tests
res_config_settings_view_form res.config.settings.view.form.inherit.hr res.config.settings xpath Inherits base.res_config_settings_view_form
res_users_view_form res.users.form.inherit res.users xpath Inherits base.view_users_form
res_users_view_form_profile res.users.preferences.form.inherit res.users form Inherits res_users_view_form_simple_modif
res_users_view_form_simple_modif res.users.preferences.form.simplified.inherit res.users xpath Inherits base.view_users_form_simple_modif
view_department_filter hr.department.search hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_filter hr.employee.search hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_job_filter hr.job.search hr.job search New
view_partner_tree2 hr.employee.tree hr.employee tree New
view_users_form_simple_modif_resource res.users.preferences.form.resource res.users field Inherits base.view_users_form_simple_modif
Models touched (18)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (11)
  • active Boolean
    default=True args: 'Active'
  • child_ids One2many → hr.department
    string='Child Departments' args: 'hr.department', 'parent_id'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> index=True string='Company' args: 'res.company'
  • complete_name Char
    compute='_compute_complete_name' store=True args: 'Complete Name'
  • jobs_ids One2many → hr.job
    string='Jobs' args: 'hr.job', 'department_id'
  • manager_id Many2one → hr.employee
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Manager' tracking=True args: 'hr.employee'
  • member_ids One2many → hr.employee
    readonly=True string='Members' args: 'hr.employee', 'department_id'
  • name Char
    required=True args: 'Department Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" index=True string='Parent Department' args: 'hr.department'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_create(self, name)
    @api.model
  • name_get(self)
  • write(self, vals)
    If updating manager of a department, we need to update all the employees of department hierarchy, and subscribe the new manager.

New fields (5)
  • archive_private_address Boolean
    default=True args: 'Archive Private Address'
  • departure_date Date
    default=fields.Date.today required=True string='Departure Date'
  • departure_description Text
    string='Additional Information'
  • departure_reason Selection
    default='fired' string='Departure Reason' args: [('fired', 'Fired'), ('resigned', 'Resigned'), ('retired', 'Retired')]
  • employee_id Many2one → hr.employee
    default=<expr> required=True string='Employee' args: 'hr.employee'
Public methods (1)
  • action_register_departure(self)

New fields (44)
  • active Boolean
    default=True readonly=False related='resource_id.active' store=True args: 'Active'
  • additional_note Text
    groups='hr.group_hr_user' string='Additional Note' tracking=True
  • address_home_id Many2one → res.partner
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" groups='hr.group_hr_user' help='Enter here the private address of the employee, not the one linked to your company.' tracking=True args: 'res.partner', 'Address'
  • bank_account_id Many2one → res.partner.bank
    domain="[('partner_id', '=', address_home_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" groups='hr.group_hr_user' help='Employee bank salary account' tracking=True args: 'res.partner.bank', 'Bank Account Number'
  • barcode Char
    copy=False groups='hr.group_hr_user' help='ID used for employee identification.' string='Badge ID'
  • birthday Date
    groups='hr.group_hr_user' tracking=True args: 'Date of Birth'
  • category_ids Many2many → hr.employee.category
    groups='hr.group_hr_manager' string='Tags' args: 'hr.employee.category', 'employee_category_rel', 'emp_id', 'category_id'
  • certificate Selection
    default='other' groups='hr.group_hr_user' tracking=True args: [('graduate', 'Graduate'), ('bachelor', 'Bachelor'), ('master', 'Master'), ('doctor', 'Doctor'), ('other', 'Other')], 'Certificate Level'
  • child_ids One2many → hr.employee
    string='Direct subordinates' args: 'hr.employee', 'parent_id'
  • children Integer
    groups='hr.group_hr_user' string='Number of Children' tracking=True
  • color Integer
    default=0 args: 'Color Index'
  • company_id Many2one → res.company
    required=True args: 'res.company'
  • country_id Many2one → res.country
    groups='hr.group_hr_user' tracking=True args: 'res.country', 'Nationality (Country)'
  • country_of_birth Many2one → res.country
    groups='hr.group_hr_user' string='Country of Birth' tracking=True args: 'res.country'
  • departure_date Date
    copy=False groups='hr.group_hr_user' string='Departure Date' tracking=True
  • departure_description Text
    copy=False groups='hr.group_hr_user' string='Additional Information' tracking=True
  • departure_reason Selection
    copy=False groups='hr.group_hr_user' string='Departure Reason' tracking=True args: [('fired', 'Fired'), ('resigned', 'Resigned'), ('retired', 'Retired')]
  • emergency_contact Char
    groups='hr.group_hr_user' tracking=True args: 'Emergency Contact'
  • emergency_phone Char
    groups='hr.group_hr_user' tracking=True args: 'Emergency Phone'
  • gender Selection
    groups='hr.group_hr_user' tracking=True args: [('male', 'Male'), ('female', 'Female'), ('other', 'Other')]
  • identification_id Char
    groups='hr.group_hr_user' string='Identification No' tracking=True
  • image_1920 Image
    default=_default_image
  • is_address_home_a_company Boolean
    compute='_compute_is_address_home_a_company' args: 'The employee address has a company linked'
  • km_home_work Integer
    groups='hr.group_hr_user' string='Home-Work Distance' tracking=True
  • marital Selection
    default='single' groups='hr.group_hr_user' string='Marital Status' tracking=True args: [('single', 'Single'), ('married', 'Married'), ('cohabitant', 'Legal Cohabitant'), ('widower', 'Widower'), ('divorced', 'Divorced')]
  • message_main_attachment_id Many2one
    groups='hr.group_hr_user'
  • name Char
    readonly=False related='resource_id.name' store=True string='Employee Name' tracking=True
  • notes Text
    groups='hr.group_hr_user' args: 'Notes'
  • passport_id Char
    groups='hr.group_hr_user' tracking=True args: 'Passport No'
  • permit_no Char
    groups='hr.group_hr_user' tracking=True args: 'Work Permit No'
  • phone Char
    groups='hr.group_hr_user' readonly=False related='address_home_id.phone' related_sudo=False string='Private Phone'
  • pin Char
    copy=False groups='hr.group_hr_user' help='PIN used to Check In/Out in Kiosk Mode (if enabled in Configuration).' string='PIN'
  • place_of_birth Char
    groups='hr.group_hr_user' tracking=True args: 'Place of Birth'
  • private_email Char
    groups='hr.group_hr_user' related='address_home_id.email' string='Private Email'
  • sinid Char
    groups='hr.group_hr_user' help='Social Insurance Number' tracking=True args: 'SIN No'
  • spouse_birthdate Date
    groups='hr.group_hr_user' string='Spouse Birthdate' tracking=True
  • spouse_complete_name Char
    groups='hr.group_hr_user' string='Spouse Complete Name' tracking=True
  • ssnid Char
    groups='hr.group_hr_user' help='Social Security Number' tracking=True args: 'SSN No'
  • study_field Char
    groups='hr.group_hr_user' tracking=True args: 'Field of Study'
  • study_school Char
    groups='hr.group_hr_user' tracking=True args: 'School'
  • user_id Many2one → res.users
    readonly=False related='resource_id.user_id' store=True args: 'res.users', 'User'
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • visa_expire Date
    groups='hr.group_hr_user' tracking=True args: 'Visa Expire Date'
  • visa_no Char
    groups='hr.group_hr_user' tracking=True args: 'Visa No'
Public methods (12)
  • create(self, vals)
    @api.model
  • generate_random_barcode(self)
  • get_formview_action(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_formview_id(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_import_templates(self)
    @api.model
  • load_views(self, views, options=None)
    @api.model
  • message_post(self, **kwargs)
    @api.returns('mail.message', <expr>)
  • name_get(self)
  • read(self, fields, load='_classic_read')
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (22)
  • active Boolean
    args: 'Active'
  • address_id Many2one → res.partner
    compute='_compute_address_id' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=False store=True args: 'res.partner', 'Work Address'
  • coach_id Many2one → hr.employee
    compute='_compute_coach' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Select the "Employee" who is the coach of this employee.\nThe "Coach" has no specific rights or responsibilities by default.' readonly=False store=True args: 'hr.employee', 'Coach'
  • color Integer
    default=0 args: 'Color Index'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • department_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'hr.department', 'Department'
  • hr_icon_display Selection
    compute='_compute_presence_icon' args: [('presence_present', 'Present'), ('presence_absent_active', 'Present but not active'), ('presence_absent', 'Absent'), ('presence_to_define', 'To define'), ('presence_undetermined', 'Undetermined')]
  • hr_presence_state Selection
    compute='_compute_presence_state' default='to_define' args: [('present', 'Present'), ('absent', 'Absent'), ('to_define', 'To Define')]
  • job_id Many2one → hr.job
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'hr.job', 'Job Position'
  • job_title Char
    compute='_compute_job_title' readonly=False store=True args: 'Job Title'
  • last_activity Date
    compute='_compute_last_activity'
  • last_activity_time Char
    compute='_compute_last_activity'
  • mobile_phone Char
    args: 'Work Mobile'
  • name Char
  • parent_id Many2one → hr.employee
    compute='_compute_parent_id' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=False store=True args: 'hr.employee', 'Manager'
  • resource_calendar_id Many2one → resource.calendar
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'resource.calendar'
  • resource_id Many2one → resource.resource
    args: 'resource.resource'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
  • user_id Many2one → res.users
    args: 'res.users'
  • work_email Char
    args: 'Work Email'
  • work_location Char
    args: 'Work Location'
  • work_phone Char
    compute='_compute_phones' readonly=False store=True args: 'Work Phone'
Public methods (0)

No public methods.

New fields (3)
  • color Integer
    default=_get_default_color string='Color Index'
  • employee_ids Many2many → hr.employee
    string='Employees' args: 'hr.employee', 'employee_category_rel', 'category_id', 'emp_id'
  • name Char
    required=True string='Tag Name'
Public methods (0)

No public methods.

New fields (26)
  • active Boolean
    readonly=True
  • address_id Many2one
    readonly=True
  • child_ids One2many → hr.employee.public
    readonly=True string='Direct subordinates' args: 'hr.employee.public', 'parent_id'
  • coach_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Coach'
  • color Integer
    readonly=True
  • company_id Many2one
    readonly=True
  • create_date Datetime
    readonly=True
  • department_id Many2one
    readonly=True
  • image_1024 Image
    compute='_compute_image' compute_sudo=True args: 'Image 1024'
  • image_128 Image
    compute='_compute_image' compute_sudo=True args: 'Image 128'
  • image_1920 Image
    compute='_compute_image' compute_sudo=True args: 'Original Image'
  • image_256 Image
    compute='_compute_image' compute_sudo=True args: 'Image 256'
  • image_512 Image
    compute='_compute_image' compute_sudo=True args: 'Image 512'
  • job_id Many2one
    readonly=True
  • job_title Char
    readonly=True
  • mobile_phone Char
    readonly=True
  • name Char
    readonly=True
  • parent_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Manager'
  • resource_calendar_id Many2one
    readonly=True
  • resource_id Many2one
    readonly=True
  • tz Selection
    readonly=True
  • user_id Many2one
    readonly=True
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • work_email Char
    readonly=True
  • work_location Char
    readonly=True
  • work_phone Char
    readonly=True
Public methods (1)
  • init(self)

New fields (11)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • department_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Department' args: 'hr.department'
  • description Text
    string='Job Description'
  • employee_ids One2many → hr.employee
    groups='base.group_user' string='Employees' args: 'hr.employee', 'job_id'
  • expected_employees Integer
    compute='_compute_employees' help='Expected number of employees for this job position after new recruitment.' store=True string='Total Forecasted Employees'
  • name Char
    index=True required=True string='Job Position' translate=True
  • no_of_employee Integer
    compute='_compute_employees' help='Number of employees currently occupying this job position.' store=True string='Current Number of Employees'
  • no_of_hired_employee Integer
    copy=False help='Number of hired employees for this job position during recruitment phase.' string='Hired Employees'
  • no_of_recruitment Integer
    copy=False default=1 help='Number of new employees you expect to recruit.' string='Expected New Employees'
  • requirements Text
    args: 'Requirements'
  • state Selection
    copy=False default='recruit' help='Set whether the recruitment process is open or closed for this job position.' readonly=True required=True string='Status' tracking=True args: [('recruit', 'Recruitment in Progress'), ('open', 'Not Recruiting')]
Public methods (4)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, values)
    @api.model
    We don't want the current user to be follower of all created job
  • set_open(self)
  • set_recruit(self)

New fields (3)
  • active Boolean
    default=True
  • name Char
    required=True args: 'Name'
  • plan_activity_type_ids Many2many → hr.plan.activity.type
    string='Activities' args: 'hr.plan.activity.type'
Public methods (0)

No public methods.

New fields (5)
  • activity_type_id Many2one → mail.activity.type
    default=<expr> domain=<expr> ondelete='restrict' args: 'mail.activity.type', 'Activity Type'
  • note Html
    args: 'Note'
  • responsible Selection
    default='employee' required=True string='Responsible' args: [('coach', 'Coach'), ('manager', 'Manager'), ('employee', 'Employee'), ('other', 'Other')]
  • responsible_id Many2one → res.users
    help='Specific responsible of activity if not linked to the employee.' args: 'res.users', 'Responsible Person'
  • summary Char
    compute='_compute_default_summary' readonly=False store=True args: 'Summary'
Public methods (1)
  • get_responsible_id(self, employee)

New fields (2)
  • employee_id Many2one → hr.employee
    default=<expr> required=True string='Employee' args: 'hr.employee'
  • plan_id Many2one → hr.plan
    default=<expr> args: 'hr.plan'
Public methods (1)
  • action_launch(self)

New fields (1)
  • alias_contact Selection
    ondelete={'employees': 'cascade'} selection_add=[('employees', 'Authenticated Employees')]
Public methods (0)

No public methods.

New fields (1)
  • subscription_department_ids Many2many → hr.department
    help='Automatically subscribe members of those departments to the channel.' string='HR Departments' args: 'hr.department'
Public methods (1)
  • write(self, vals)

New fields (2)
  • hr_presence_control_email_amount Integer
    string='# emails to send'
  • hr_presence_control_ip_list Char
    string='Valid IP addresses'
Public methods (0)

No public methods.

New fields (10)
  • hr_employee_self_edit Boolean
    config_parameter='hr.hr_employee_self_edit' string='Employee Editing'
  • hr_presence_control_email Boolean
    config_parameter='hr_presence.hr_presence_control_email' string='Based on number of emails sent'
  • hr_presence_control_email_amount Integer
    readonly=False related='company_id.hr_presence_control_email_amount'
  • hr_presence_control_ip Boolean
    config_parameter='hr_presence.hr_presence_control_ip' string='Based on IP Address'
  • hr_presence_control_ip_list Char
    readonly=False related='company_id.hr_presence_control_ip_list'
  • hr_presence_control_login Boolean
    config_parameter='hr.hr_presence_control_login' string='Based on user status in system'
  • module_hr_attendance Boolean
    string='Based on attendances'
  • module_hr_presence Boolean
    string='Advanced Presence Control'
  • module_hr_skills Boolean
    string='Skills Management'
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='company_id.resource_calendar_id' args: 'resource.calendar', 'Company Working Hours'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)
    Override to allow an employee to see its private address in his profile. This avoids to relax access rules on `res.parter` and to add an `ir.rule`. (advantage in both security and performance). Use a try/except instead of systematically checking to minimize the impact on performance.

New fields (45)
  • additional_note Text
    readonly=False related='employee_id.additional_note' related_sudo=False
  • address_home_id Many2one
    readonly=False related='employee_id.address_home_id' related_sudo=False
  • address_id Many2one
    readonly=False related='employee_id.address_id' related_sudo=False
  • barcode Char
    readonly=False related='employee_id.barcode' related_sudo=False
  • birthday Date
    readonly=False related='employee_id.birthday' related_sudo=False
  • can_edit Boolean
    compute='_compute_can_edit'
  • category_ids Many2many
    readonly=False related='employee_id.category_ids' related_sudo=False string='Employee Tags'
  • certificate Selection
    readonly=False related='employee_id.certificate' related_sudo=False
  • children Integer
    readonly=False related='employee_id.children' related_sudo=False
  • coach_id Many2one
    readonly=False related='employee_id.coach_id' related_sudo=False
  • country_of_birth Many2one
    readonly=False related='employee_id.country_of_birth' related_sudo=False
  • department_id Many2one
    readonly=False related='employee_id.department_id' related_sudo=False
  • emergency_contact Char
    readonly=False related='employee_id.emergency_contact' related_sudo=False
  • emergency_phone Char
    readonly=False related='employee_id.emergency_phone' related_sudo=False
  • employee_bank_account_id Many2one
    readonly=False related='employee_id.bank_account_id' related_sudo=False string="Employee's Bank Account Number"
  • employee_count Integer
    compute='_compute_employee_count'
  • employee_country_id Many2one
    readonly=False related='employee_id.country_id' related_sudo=False string="Employee's Country"
  • employee_id Many2one → hr.employee
    compute='_compute_company_employee' search='_search_company_employee' store=False string='Company employee' args: 'hr.employee'
  • employee_ids One2many → hr.employee
    domain=_employee_ids_domain string='Related employee' args: 'hr.employee', 'user_id'
  • employee_parent_id Many2one
    readonly=False related='employee_id.parent_id' related_sudo=False
  • employee_phone Char
    readonly=False related='employee_id.phone' related_sudo=False
  • gender Selection
    readonly=False related='employee_id.gender' related_sudo=False
  • hr_presence_state Selection
    related='employee_id.hr_presence_state'
  • identification_id Char
    readonly=False related='employee_id.identification_id' related_sudo=False
  • is_address_home_a_company Boolean
    readonly=False related='employee_id.is_address_home_a_company' related_sudo=False
  • job_title Char
    readonly=False related='employee_id.job_title' related_sudo=False
  • km_home_work Integer
    readonly=False related='employee_id.km_home_work' related_sudo=False
  • last_activity Date
    related='employee_id.last_activity'
  • last_activity_time Char
    related='employee_id.last_activity_time'
  • marital Selection
    readonly=False related='employee_id.marital' related_sudo=False
  • mobile_phone Char
    readonly=False related='employee_id.mobile_phone' related_sudo=False
  • passport_id Char
    readonly=False related='employee_id.passport_id' related_sudo=False
  • permit_no Char
    readonly=False related='employee_id.permit_no' related_sudo=False
  • pin Char
    readonly=False related='employee_id.pin' related_sudo=False
  • place_of_birth Char
    readonly=False related='employee_id.place_of_birth' related_sudo=False
  • private_email Char
    readonly=False related='address_home_id.email' string='Private Email'
  • spouse_birthdate Date
    readonly=False related='employee_id.spouse_birthdate' related_sudo=False
  • spouse_complete_name Char
    readonly=False related='employee_id.spouse_complete_name' related_sudo=False
  • study_field Char
    readonly=False related='employee_id.study_field' related_sudo=False
  • study_school Char
    readonly=False related='employee_id.study_school' related_sudo=False
  • visa_expire Date
    readonly=False related='employee_id.visa_expire' related_sudo=False
  • visa_no Char
    readonly=False related='employee_id.visa_no' related_sudo=False
  • work_email Char
    readonly=False related='employee_id.work_email' related_sudo=False
  • work_location Char
    readonly=False related='employee_id.work_location' related_sudo=False
  • work_phone Char
    readonly=False related='employee_id.work_phone' related_sudo=False
Public methods (4)
  • action_create_employee(self)
  • action_get(self)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • write(self, vals)
    Synchronize user and its related employee and check access rights if employees are not allowed to update their own data (otherwise sudo is applied for self data).

New fields (1)
  • user_id Many2one
    copy=False
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources/Employees
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Richard Mathot, Aaron Bohy, GitHub, Yannick Tivisse, Martin Geubelle, Odoo Online, jem-odoo, Adrien Dieudonne, RomainLibert, Jorge Pinna Puissant, Toufik Ben Jaa, Adrian Torres, Xavier-Do, jvm-odoo, Andrea Grazioso (agr-odoo), Sébastien Theys, Nasreddin (bon), fw-bot, Lucas Lefèvre, Naglis Jonaitis, Swapnesh Shah, IEL, Mathieu Duckerts-Antoine, Pierre Paridans, qho, jbm-odoo, Kevin Baptiste, roen-odoo, Geoffroy Larue, pha-odoo, Sapan Zaveri, Francisco Alejandro Gonzalez Luna
WEBSITE
WEBSITEhttps://www.odoo.com/page/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - mail_bot
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (35)
XML IDNameModelTypeStatus
assets_backend hr assets ir.ui.view qweb Inherits web.assets_backend
hr_department_view_kanban hr.department.kanban hr.department kanban New
hr_departure_wizard_view_form hr.departure.wizard.view.form hr.departure.wizard form New
hr_employee_public_view_form hr.employee.public.form hr.employee.public form New
hr_employee_public_view_kanban hr.employee.kanban hr.employee.public kanban New
hr_employee_public_view_search hr.employee.search hr.employee.public search New
hr_employee_public_view_tree hr.employee.tree hr.employee.public tree New
hr_employee_view_activity hr.employee.activity hr.employee activity New
hr_job_view_kanban hr.job.kanban hr.job kanban New
hr_kanban_view_employees hr.employee.kanban hr.employee kanban New
hr_plan_activity_type_view_form hr.plan.activity.type.view.form hr.plan.activity.type form New
hr_plan_activity_type_view_tree hr.plan.activity.type.view.tree hr.plan.activity.type tree New
hr_plan_view_form hr.plan.view.form hr.plan form New
hr_plan_view_search hr.plan.view.search hr.plan search New
hr_plan_view_tree hr.plan.view.tree hr.plan tree New
mail_channel_view_form_ mail.channel.view.form.inherit.hr mail.channel xpath Inherits mail.mail_channel_view_form
plan_wizard plan wizard hr.plan.wizard form New
print_employee_badge print_employee_badge ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr res.config.settings xpath Inherits base.res_config_settings_view_form
res_users_view_form res.users.form.inherit res.users xpath Inherits base.view_users_form
res_users_view_form_profile res.users.preferences.form.inherit res.users xpath Inherits res_users_view_form_simple_modif
res_users_view_form_simple_modif res.users.preferences.form.simplified.inherit res.users footer Inherits base.view_users_form_simple_modif
view_department_filter hr.department.search hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_filter hr.employee.search hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_job_filter hr.job.search hr.job search New
view_partner_tree2 hr.employee.tree hr.employee tree New
view_users_form_simple_modif_resource res.users.preferences.form.resource res.users field Inherits base.view_users_form_simple_modif
Models touched (18)

New fields (11)
  • active Boolean
    default=True args: 'Active'
  • child_ids One2many → hr.department
    string='Child Departments' args: 'hr.department', 'parent_id'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> index=True string='Company' args: 'res.company'
  • complete_name Char
    compute='_compute_complete_name' store=True args: 'Complete Name'
  • jobs_ids One2many → hr.job
    string='Jobs' args: 'hr.job', 'department_id'
  • manager_id Many2one → hr.employee
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Manager' tracking=True args: 'hr.employee'
  • member_ids One2many → hr.employee
    readonly=True string='Members' args: 'hr.employee', 'department_id'
  • name Char
    required=True args: 'Department Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" index=True string='Parent Department' args: 'hr.department'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_create(self, name)
    @api.model
  • name_get(self)
  • write(self, vals)
    If updating manager of a department, we need to update all the employees of department hierarchy, and subscribe the new manager.

New fields (4)
  • departure_description Text
    string='Additional Information'
  • departure_reason Selection
    default='fired' string='Departure Reason' args: [('fired', 'Fired'), ('resigned', 'Resigned'), ('retired', 'Retired')]
  • employee_id Many2one → hr.employee
    required=True string='Employee' args: 'hr.employee'
  • plan_id Many2one → hr.plan
    default=<expr> args: 'hr.plan'
Public methods (2)
  • action_register_departure(self)
  • default_get(self, fields)
    @api.model

New fields (42)
  • active Boolean
    default=True readonly=False related='resource_id.active' store=True args: 'Active'
  • additional_note Text
    groups='hr.group_hr_user' string='Additional Note' tracking=True
  • address_home_id Many2one → res.partner
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" groups='hr.group_hr_user' help='Enter here the private address of the employee, not the one linked to your company.' tracking=True args: 'res.partner', 'Address'
  • bank_account_id Many2one → res.partner.bank
    domain="[('partner_id', '=', address_home_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" groups='hr.group_hr_user' help='Employee bank salary account' tracking=True args: 'res.partner.bank', 'Bank Account Number'
  • barcode Char
    copy=False groups='hr.group_hr_user' help='ID used for employee identification.' string='Badge ID'
  • birthday Date
    groups='hr.group_hr_user' tracking=True args: 'Date of Birth'
  • category_ids Many2many → hr.employee.category
    groups='hr.group_hr_manager' string='Tags' args: 'hr.employee.category', 'employee_category_rel', 'emp_id', 'category_id'
  • certificate Selection
    default='other' groups='hr.group_hr_user' tracking=True args: [('bachelor', 'Bachelor'), ('master', 'Master'), ('other', 'Other')], 'Certificate Level'
  • child_ids One2many → hr.employee
    string='Direct subordinates' args: 'hr.employee', 'parent_id'
  • children Integer
    groups='hr.group_hr_user' string='Number of Children' tracking=True
  • color Integer
    default=0 args: 'Color Index'
  • country_id Many2one → res.country
    groups='hr.group_hr_user' tracking=True args: 'res.country', 'Nationality (Country)'
  • country_of_birth Many2one → res.country
    groups='hr.group_hr_user' string='Country of Birth' tracking=True args: 'res.country'
  • departure_description Text
    copy=False groups='hr.group_hr_user' string='Additional Information' tracking=True
  • departure_reason Selection
    copy=False groups='hr.group_hr_user' string='Departure Reason' tracking=True args: [('fired', 'Fired'), ('resigned', 'Resigned'), ('retired', 'Retired')]
  • emergency_contact Char
    groups='hr.group_hr_user' tracking=True args: 'Emergency Contact'
  • emergency_phone Char
    groups='hr.group_hr_user' tracking=True args: 'Emergency Phone'
  • gender Selection
    default='male' groups='hr.group_hr_user' tracking=True args: [('male', 'Male'), ('female', 'Female'), ('other', 'Other')]
  • identification_id Char
    groups='hr.group_hr_user' string='Identification No' tracking=True
  • image_1920 Image
    default=_default_image
  • is_address_home_a_company Boolean
    compute='_compute_is_address_home_a_company' args: 'The employee address has a company linked'
  • km_home_work Integer
    groups='hr.group_hr_user' string='Km Home-Work' tracking=True
  • marital Selection
    default='single' groups='hr.group_hr_user' string='Marital Status' tracking=True args: [('single', 'Single'), ('married', 'Married'), ('cohabitant', 'Legal Cohabitant'), ('widower', 'Widower'), ('divorced', 'Divorced')]
  • message_main_attachment_id Many2one
    groups='hr.group_hr_user'
  • name Char
    readonly=False related='resource_id.name' store=True string='Employee Name' tracking=True
  • notes Text
    groups='hr.group_hr_user' args: 'Notes'
  • passport_id Char
    groups='hr.group_hr_user' tracking=True args: 'Passport No'
  • permit_no Char
    groups='hr.group_hr_user' tracking=True args: 'Work Permit No'
  • phone Char
    groups='hr.group_hr_user' readonly=False related='address_home_id.phone' related_sudo=False string='Private Phone'
  • pin Char
    copy=False groups='hr.group_hr_user' help='PIN used to Check In/Out in Kiosk Mode (if enabled in Configuration).' string='PIN'
  • place_of_birth Char
    groups='hr.group_hr_user' tracking=True args: 'Place of Birth'
  • private_email Char
    groups='hr.group_hr_user' related='address_home_id.email' string='Private Email'
  • sinid Char
    groups='hr.group_hr_user' help='Social Insurance Number' tracking=True args: 'SIN No'
  • spouse_birthdate Date
    groups='hr.group_hr_user' string='Spouse Birthdate' tracking=True
  • spouse_complete_name Char
    groups='hr.group_hr_user' string='Spouse Complete Name' tracking=True
  • ssnid Char
    groups='hr.group_hr_user' help='Social Security Number' tracking=True args: 'SSN No'
  • study_field Char
    groups='hr.group_hr_user' tracking=True args: 'Field of Study'
  • study_school Char
    groups='hr.group_hr_user' tracking=True args: 'School'
  • user_id Many2one → res.users
    readonly=False related='resource_id.user_id' store=True args: 'res.users', 'User'
  • user_partner_id Many2one
    related='user_id.partner_id' related_sudo=False string="User's partner"
  • visa_expire Date
    groups='hr.group_hr_user' tracking=True args: 'Visa Expire Date'
  • visa_no Char
    groups='hr.group_hr_user' tracking=True args: 'Visa No'
Public methods (12)
  • create(self, vals)
    @api.model
  • generate_random_barcode(self)
  • get_formview_action(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_formview_id(self, access_uid=None)
    Override this method in order to redirect many2one towards the right model depending on access_uid
  • get_import_templates(self)
    @api.model
  • load_views(self, views, options=None)
    @api.model
  • message_post(self, **kwargs)
    @api.returns('mail.message', <expr>)
  • name_get(self)
  • read(self, fields, load='_classic_read')
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (21)
  • active Boolean
    args: 'Active'
  • address_id Many2one → res.partner
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'res.partner', 'Work Address'
  • coach_id Many2one → hr.employee
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'hr.employee', 'Coach'
  • color Integer
    default=0 args: 'Color Index'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • department_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'hr.department', 'Department'
  • hr_presence_state Selection
    compute='_compute_presence_state' default='to_define' args: [('present', 'Present'), ('absent', 'Absent'), ('to_define', 'To Define')]
  • job_id Many2one → hr.job
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'hr.job', 'Job Position'
  • job_title Char
    args: 'Job Title'
  • last_activity Date
    compute='_compute_last_activity'
  • last_activity_time Char
    compute='_compute_last_activity'
  • mobile_phone Char
    args: 'Work Mobile'
  • name Char
  • parent_id Many2one → hr.employee
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'hr.employee', 'Manager'
  • resource_calendar_id Many2one → resource.calendar
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'resource.calendar'
  • resource_id Many2one → resource.resource
    args: 'resource.resource'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
  • user_id Many2one → res.users
    args: 'res.users'
  • work_email Char
    args: 'Work Email'
  • work_location Char
    args: 'Work Location'
  • work_phone Char
    args: 'Work Phone'
Public methods (0)

No public methods.

New fields (3)
  • color Integer
    string='Color Index'
  • employee_ids Many2many → hr.employee
    string='Employees' args: 'hr.employee', 'employee_category_rel', 'category_id', 'emp_id'
  • name Char
    required=True string='Tag Name'
Public methods (0)

No public methods.

New fields (25)
  • active Boolean
    readonly=True
  • address_id Many2one
    readonly=True
  • child_ids One2many → hr.employee.public
    readonly=True string='Direct subordinates' args: 'hr.employee.public', 'parent_id'
  • coach_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Coach'
  • color Integer
    readonly=True
  • company_id Many2one
    readonly=True
  • create_date Datetime
    readonly=True
  • department_id Many2one
    readonly=True
  • image_1024 Image
    compute='_compute_image' compute_sudo=True args: 'Image 1024'
  • image_128 Image
    compute='_compute_image' compute_sudo=True args: 'Image 128'
  • image_1920 Image
    compute='_compute_image' compute_sudo=True args: 'Original Image'
  • image_256 Image
    compute='_compute_image' compute_sudo=True args: 'Image 256'
  • image_512 Image
    compute='_compute_image' compute_sudo=True args: 'Image 512'
  • job_id Many2one
    readonly=True
  • job_title Char
    readonly=True
  • mobile_phone Char
    readonly=True
  • name Char
    readonly=True
  • parent_id Many2one → hr.employee.public
    readonly=True args: 'hr.employee.public', 'Manager'
  • resource_calendar_id Many2one
    readonly=True
  • resource_id Many2one
    readonly=True
  • tz Selection
    readonly=True
  • user_id Many2one
    readonly=True
  • work_email Char
    readonly=True
  • work_location Char
    readonly=True
  • work_phone Char
    readonly=True
Public methods (1)
  • init(self)

New fields (11)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • department_id Many2one → hr.department
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Department' args: 'hr.department'
  • description Text
    string='Job Description'
  • employee_ids One2many → hr.employee
    groups='base.group_user' string='Employees' args: 'hr.employee', 'job_id'
  • expected_employees Integer
    compute='_compute_employees' help='Expected number of employees for this job position after new recruitment.' store=True string='Total Forecasted Employees'
  • name Char
    index=True required=True string='Job Position' translate=True
  • no_of_employee Integer
    compute='_compute_employees' help='Number of employees currently occupying this job position.' store=True string='Current Number of Employees'
  • no_of_hired_employee Integer
    copy=False help='Number of hired employees for this job position during recruitment phase.' string='Hired Employees'
  • no_of_recruitment Integer
    copy=False default=1 help='Number of new employees you expect to recruit.' string='Expected New Employees'
  • requirements Text
    args: 'Requirements'
  • state Selection
    copy=False default='recruit' help='Set whether the recruitment process is open or closed for this job position.' readonly=True required=True string='Status' tracking=True args: [('recruit', 'Recruitment in Progress'), ('open', 'Not Recruiting')]
Public methods (4)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, values)
    @api.model
    We don't want the current user to be follower of all created job
  • set_open(self)
  • set_recruit(self)

New fields (3)
  • active Boolean
    default=True
  • name Char
    required=True args: 'Name'
  • plan_activity_type_ids Many2many → hr.plan.activity.type
    string='Activities' args: 'hr.plan.activity.type'
Public methods (0)

No public methods.

New fields (5)
  • activity_type_id Many2one → mail.activity.type
    default=<expr> domain=<expr> args: 'mail.activity.type', 'Activity Type'
  • note Html
    args: 'Note'
  • responsible Selection
    default='employee' required=True string='Responsible' args: [('coach', 'Coach'), ('manager', 'Manager'), ('employee', 'Employee'), ('other', 'Other')]
  • responsible_id Many2one → res.users
    help='Specific responsible of activity if not linked to the employee.' args: 'res.users', 'Responsible Person'
  • summary Char
    args: 'Summary'
Public methods (1)
  • get_responsible_id(self, employee)

New fields (2)
  • employee_id Many2one → hr.employee
    required=True string='Employee' args: 'hr.employee'
  • plan_id Many2one → hr.plan
    default=<expr> args: 'hr.plan'
Public methods (2)
  • action_launch(self)
  • default_get(self, fields_list)
    @api.model

New fields (1)
  • alias_contact Selection
    selection_add=[('employees', 'Authenticated Employees')]
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • subscription_department_ids Many2many → hr.department
    help='Automatically subscribe members of those departments to the channel.' string='HR Departments' args: 'hr.department'
Public methods (1)
  • write(self, vals)

New fields (2)
  • hr_presence_control_email_amount Integer
    string='# emails to send'
  • hr_presence_control_ip_list Char
    string='Valid IP addresses'
Public methods (0)

No public methods.

New fields (11)
  • hr_employee_self_edit Boolean
    config_parameter='hr.hr_employee_self_edit' string='Employee Edition'
  • hr_presence_control_email Boolean
    config_parameter='hr_presence.hr_presence_control_email' string='Based on number of emails sent'
  • hr_presence_control_email_amount Integer
    readonly=False related='company_id.hr_presence_control_email_amount'
  • hr_presence_control_ip Boolean
    config_parameter='hr_presence.hr_presence_control_ip' string='Based on IP Address'
  • hr_presence_control_ip_list Char
    readonly=False related='company_id.hr_presence_control_ip_list'
  • hr_presence_control_login Boolean
    config_parameter='hr.hr_presence_control_login' string='Based on user status in system'
  • module_hr_attendance Boolean
    string='Based on attendances'
  • module_hr_org_chart Boolean
    string='Organizational Chart'
  • module_hr_presence Boolean
    string='Advanced Presence Control'
  • module_hr_skills Boolean
    string='Skills Management'
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='company_id.resource_calendar_id' args: 'resource.calendar', 'Company Working Hours'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • get_static_mention_suggestions(self)
    @api.model
    Extend the mail's static mention suggestions by adding the employees.
  • name_get(self)
    Override to allow an employee to see its private address in his profile. This avoids to relax access rules on `res.parter` and to add an `ir.rule`. (advantage in both security and performance). Use a try/except instead of systematically checking to minimize the impact on performance.

New fields (45)
  • additional_note Text
    readonly=False related='employee_id.additional_note' related_sudo=False
  • address_home_id Many2one
    readonly=False related='employee_id.address_home_id' related_sudo=False
  • address_id Many2one
    readonly=False related='employee_id.address_id' related_sudo=False
  • barcode Char
    readonly=False related='employee_id.barcode' related_sudo=False
  • birthday Date
    readonly=False related='employee_id.birthday' related_sudo=False
  • can_edit Boolean
    compute='_compute_can_edit'
  • category_ids Many2many
    readonly=False related='employee_id.category_ids' related_sudo=False string='Employee Tags'
  • certificate Selection
    readonly=False related='employee_id.certificate' related_sudo=False
  • children Integer
    readonly=False related='employee_id.children' related_sudo=False
  • coach_id Many2one
    readonly=False related='employee_id.coach_id' related_sudo=False
  • country_of_birth Many2one
    readonly=False related='employee_id.country_of_birth' related_sudo=False
  • department_id Many2one
    readonly=False related='employee_id.department_id' related_sudo=False
  • emergency_contact Char
    readonly=False related='employee_id.emergency_contact' related_sudo=False
  • emergency_phone Char
    readonly=False related='employee_id.emergency_phone' related_sudo=False
  • employee_bank_account_id Many2one
    readonly=False related='employee_id.bank_account_id' related_sudo=False string="Employee's Bank Account Number"
  • employee_count Integer
    compute='_compute_employee_count'
  • employee_country_id Many2one
    readonly=False related='employee_id.country_id' related_sudo=False string="Employee's Country"
  • employee_id Many2one → hr.employee
    compute='_compute_company_employee' search='_search_company_employee' store=False string='Company employee' args: 'hr.employee'
  • employee_ids One2many → hr.employee
    string='Related employee' args: 'hr.employee', 'user_id'
  • employee_parent_id Many2one
    readonly=False related='employee_id.parent_id' related_sudo=False
  • employee_phone Char
    readonly=False related='employee_id.phone' related_sudo=False
  • gender Selection
    readonly=False related='employee_id.gender' related_sudo=False
  • hr_presence_state Selection
    related='employee_id.hr_presence_state'
  • identification_id Char
    readonly=False related='employee_id.identification_id' related_sudo=False
  • is_address_home_a_company Boolean
    readonly=False related='employee_id.is_address_home_a_company' related_sudo=False
  • job_title Char
    readonly=False related='employee_id.job_title' related_sudo=False
  • km_home_work Integer
    readonly=False related='employee_id.km_home_work' related_sudo=False
  • last_activity Date
    related='employee_id.last_activity'
  • last_activity_time Char
    related='employee_id.last_activity_time'
  • marital Selection
    readonly=False related='employee_id.marital' related_sudo=False
  • mobile_phone Char
    readonly=False related='employee_id.mobile_phone' related_sudo=False
  • passport_id Char
    readonly=False related='employee_id.passport_id' related_sudo=False
  • permit_no Char
    readonly=False related='employee_id.permit_no' related_sudo=False
  • pin Char
    readonly=False related='employee_id.pin' related_sudo=False
  • place_of_birth Char
    readonly=False related='employee_id.place_of_birth' related_sudo=False
  • private_email Char
    readonly=False related='address_home_id.email' string='Private Email'
  • spouse_birthdate Date
    readonly=False related='employee_id.spouse_birthdate' related_sudo=False
  • spouse_complete_name Char
    readonly=False related='employee_id.spouse_complete_name' related_sudo=False
  • study_field Char
    readonly=False related='employee_id.study_field' related_sudo=False
  • study_school Char
    readonly=False related='employee_id.study_school' related_sudo=False
  • visa_expire Date
    readonly=False related='employee_id.visa_expire' related_sudo=False
  • visa_no Char
    readonly=False related='employee_id.visa_no' related_sudo=False
  • work_email Char
    readonly=False related='employee_id.work_email' related_sudo=False
  • work_location Char
    readonly=False related='employee_id.work_location' related_sudo=False
  • work_phone Char
    readonly=False related='employee_id.work_phone' related_sudo=False
Public methods (4)
  • action_create_employee(self)
  • action_get(self)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • write(self, vals)
    Synchronize user and its related employee and check access rights if employees are not allowed to update their own data (otherwise sudo is applied for self data).

New fields (1)
  • user_id Many2one
    copy=False
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Lempereur, xmo-odoo, Richard Mathot, qdp-odoo, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Yannick Tivisse, Alexandre Kühn, qsm-odoo, jem-odoo, fda-odoo, Adrian Torres, Julien Castiaux, Xavier-Do, Nasreddin (bon), fw-bot
WEBSITE
WEBSITEhttps://www.odoo.com/page/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:01
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (19)
XML IDNameModelTypeStatus
assets_backend hr assets ir.ui.view qweb Inherits web.assets_backend
hr_department_view_kanban hr.department.kanban hr.department kanban New
hr_job_view_kanban hr.job.kanban hr.job kanban New
hr_kanban_view_employees hr.employee.kanban hr.employee kanban New
mail_channel_view_form_ mail.channel.view.form.inherit.hr mail.channel xpath Inherits mail.mail_channel_view_form
res_config_settings_view_form res.config.settings.view.form.inherit.hr res.config.settings xpath Inherits base.res_config_settings_view_form
view_department_filter hr.department.search hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_filter hr.employee.search hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_job_filter hr.job.search hr.job search New
view_partner_tree2 hr.employee.tree hr.employee tree New
view_users_form_simple_modif_resource res.users.preferences.form.resource res.users field Inherits base.view_users_form_simple_modif
Models touched (10)

New fields (11)
  • active Boolean
    default=True args: 'Active'
  • child_ids One2many → hr.department
    string='Child Departments' args: 'hr.department', 'parent_id'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> index=True string='Company' args: 'res.company'
  • complete_name Char
    compute='_compute_complete_name' store=True args: 'Complete Name'
  • jobs_ids One2many → hr.job
    string='Jobs' args: 'hr.job', 'department_id'
  • manager_id Many2one → hr.employee
    string='Manager' track_visibility='onchange' args: 'hr.employee'
  • member_ids One2many → hr.employee
    readonly=True string='Members' args: 'hr.employee', 'department_id'
  • name Char
    required=True args: 'Department Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → hr.department
    index=True string='Parent Department' args: 'hr.department'
Public methods (3)
  • create(self, vals)
    @api.model
  • name_create(self, name)
    @api.model
  • write(self, vals)
    @api.multi
    If updating manager of a department, we need to update all the employees of department hierarchy, and subscribe the new manager.

New fields (47)
  • active Boolean
    default=True readonly=False related='resource_id.active' store=True args: 'Active'
  • additional_note Text
    groups='hr.group_hr_user' string='Additional Note'
  • address_home_id Many2one → res.partner
    groups='hr.group_hr_user' help='Enter here the private address of the employee, not the one linked to your company.' args: 'res.partner', 'Private Address'
  • address_id Many2one → res.partner
    args: 'res.partner', 'Work Address'
  • bank_account_id Many2one → res.partner.bank
    domain="[('partner_id', '=', address_home_id)]" groups='hr.group_hr_user' help='Employee bank salary account' args: 'res.partner.bank', 'Bank Account Number'
  • birthday Date
    groups='hr.group_hr_user' args: 'Date of Birth'
  • category_ids Many2many → hr.employee.category
    string='Tags' args: 'hr.employee.category', 'employee_category_rel', 'emp_id', 'category_id'
  • certificate Selection
    default='master' groups='hr.group_hr_user' args: [('bachelor', 'Bachelor'), ('master', 'Master'), ('other', 'Other')], 'Certificate Level'
  • child_ids One2many → hr.employee
    string='Subordinates' args: 'hr.employee', 'parent_id'
  • children Integer
    groups='hr.group_hr_user' string='Number of Children'
  • coach_id Many2one → hr.employee
    args: 'hr.employee', 'Coach'
  • color Integer
    default=0 args: 'Color Index'
  • country_id Many2one → res.country
    groups='hr.group_hr_user' args: 'res.country', 'Nationality (Country)'
  • country_of_birth Many2one → res.country
    groups='hr.group_hr_user' string='Country of Birth' args: 'res.country'
  • department_id Many2one → hr.department
    args: 'hr.department', 'Department'
  • emergency_contact Char
    groups='hr.group_hr_user' args: 'Emergency Contact'
  • emergency_phone Char
    groups='hr.group_hr_user' args: 'Emergency Phone'
  • gender Selection
    default='male' groups='hr.group_hr_user' args: [('male', 'Male'), ('female', 'Female'), ('other', 'Other')]
  • google_drive_link Char
    groups='hr.group_hr_user' string='Employee Documents'
  • identification_id Char
    groups='hr.group_hr_user' string='Identification No'
  • image Binary
    attachment=True default=_default_image help='This field holds the image used as photo for the employee, limited to 1024x1024px.' args: 'Photo'
  • image_medium Binary
    attachment=True help='Medium-sized photo of the employee. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' args: 'Medium-sized photo'
  • image_small Binary
    attachment=True help='Small-sized photo of the employee. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' args: 'Small-sized photo'
  • is_address_home_a_company Boolean
    compute='_compute_is_address_home_a_company' args: 'The employee adress has a company linked'
  • job_id Many2one → hr.job
    args: 'hr.job', 'Job Position'
  • job_title Char
    args: 'Job Title'
  • km_home_work Integer
    groups='hr.group_hr_user' string='Km home-work'
  • marital Selection
    default='single' groups='hr.group_hr_user' string='Marital Status' args: [('single', 'Single'), ('married', 'Married'), ('cohabitant', 'Legal Cohabitant'), ('widower', 'Widower'), ('divorced', 'Divorced')]
  • mobile_phone Char
    args: 'Work Mobile'
  • name Char
    oldname='name_related' readonly=False related='resource_id.name' store=True
  • notes Text
    args: 'Notes'
  • parent_id Many2one → hr.employee
    args: 'hr.employee', 'Manager'
  • passport_id Char
    groups='hr.group_hr_user' args: 'Passport No'
  • permit_no Char
    groups='hr.group_hr_user' args: 'Work Permit No'
  • place_of_birth Char
    groups='hr.group_hr_user' args: 'Place of Birth'
  • sinid Char
    groups='hr.group_hr_user' help='Social Insurance Number' args: 'SIN No'
  • spouse_birthdate Date
    groups='hr.group_hr_user' string='Spouse Birthdate'
  • spouse_complete_name Char
    groups='hr.group_hr_user' string='Spouse Complete Name'
  • ssnid Char
    groups='hr.group_hr_user' help='Social Security Number' args: 'SSN No'
  • study_field Char
    groups='hr.group_hr_user' placeholder='Computer Science' args: 'Field of Study'
  • study_school Char
    groups='hr.group_hr_user' args: 'School'
  • user_id Many2one → res.users
    readonly=False related='resource_id.user_id' store=True args: 'res.users', 'User'
  • visa_expire Date
    groups='hr.group_hr_user' args: 'Visa Expire Date'
  • visa_no Char
    groups='hr.group_hr_user' args: 'Visa No'
  • work_email Char
    args: 'Work Email'
  • work_location Char
    args: 'Work Location'
  • work_phone Char
    args: 'Work Phone'
Public methods (4)
  • create(self, vals)
    @api.model
  • get_import_templates(self)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (3)
  • color Integer
    string='Color Index'
  • employee_ids Many2many → hr.employee
    string='Employees' args: 'hr.employee', 'employee_category_rel', 'category_id', 'emp_id'
  • name Char
    required=True string='Employee Tag'
Public methods (0)

No public methods.

New fields (11)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • department_id Many2one → hr.department
    string='Department' args: 'hr.department'
  • description Text
    string='Job Description'
  • employee_ids One2many → hr.employee
    groups='base.group_user' string='Employees' args: 'hr.employee', 'job_id'
  • expected_employees Integer
    compute='_compute_employees' help='Expected number of employees for this job position after new recruitment.' store=True string='Total Forecasted Employees'
  • name Char
    index=True required=True string='Job Position' translate=True
  • no_of_employee Integer
    compute='_compute_employees' help='Number of employees currently occupying this job position.' store=True string='Current Number of Employees'
  • no_of_hired_employee Integer
    copy=False help='Number of hired employees for this job position during recruitment phase.' string='Hired Employees'
  • no_of_recruitment Integer
    copy=False default=1 help='Number of new employees you expect to recruit.' string='Expected New Employees'
  • requirements Text
    args: 'Requirements'
  • state Selection
    copy=False default='recruit' help='Set whether the recruitment process is open or closed for this job position.' readonly=True required=True string='Status' track_visibility='always' args: [('recruit', 'Recruitment in Progress'), ('open', 'Not Recruiting')]
Public methods (4)
  • copy(self, default=None)
    @api.multi@api.returns('self', <expr>)
  • create(self, values)
    @api.model
    We don't want the current user to be follower of all created job
  • set_open(self)
    @api.multi
  • set_recruit(self)
    @api.multi

New fields (1)
  • alias_contact Selection
    selection_add=[('employees', 'Authenticated Employees')]
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • subscription_department_ids Many2many → hr.department
    help='Automatically subscribe members of those departments to the channel.' string='HR Departments' args: 'hr.department'
Public methods (1)
  • write(self, vals)

New fields (2)
  • module_hr_org_chart Boolean
    string='Show Organizational Chart'
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='company_id.resource_calendar_id' args: 'resource.calendar', 'Company Working Hours'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • get_static_mention_suggestions(self)
    @api.model
    Extend the mail's static mention suggestions by adding the employees.

New fields (1)
  • employee_ids One2many → hr.employee
    string='Related employees' args: 'hr.employee', 'user_id'
Public methods (1)
  • write(self, vals)
    @api.multi
    Synchronize user and its related employee
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Christophe Simonis, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, Richard Mathot, qdp-odoo, Aaron Bohy, GitHub, Lucas Perais (lpe), Olivier Colson, Yannick Tivisse, qsm-odoo, Martin Geubelle, Odoo Online, DVE, Adrien Dieudonne, Christophe Monniez, Denis Vermylen, This Is Banana, Nasreddin (bon)
WEBSITE
WEBSITEhttps://www.odoo.com/page/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
assets_backend hr assets ir.ui.view qweb Inherits web.assets_backend
hr_department_view_kanban hr.department.kanban hr.department kanban New
hr_job_view_kanban hr.job.kanban hr.job kanban New
hr_kanban_view_employees hr.employee.kanban hr.employee kanban New
res_config_settings_view_form res.config.settings.view.form.inherit.hr res.config.settings xpath Inherits base.res_config_settings_view_form
view_department_filter hr.department.search hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_filter hr.employee.search hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_job_filter hr.job.search hr.job search New
view_partner_tree2 hr.employee.tree hr.employee tree New
Models touched (9)

New fields (11)
  • active Boolean
    default=True args: 'Active'
  • child_ids One2many → hr.department
    string='Child Departments' args: 'hr.department', 'parent_id'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> index=True string='Company' args: 'res.company'
  • complete_name Char
    compute='_compute_complete_name' store=True args: 'Complete Name'
  • jobs_ids One2many → hr.job
    string='Jobs' args: 'hr.job', 'department_id'
  • manager_id Many2one → hr.employee
    string='Manager' track_visibility='onchange' args: 'hr.employee'
  • member_ids One2many → hr.employee
    readonly=True string='Members' args: 'hr.employee', 'department_id'
  • name Char
    required=True args: 'Department Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → hr.department
    index=True string='Parent Department' args: 'hr.department'
Public methods (3)
  • create(self, vals)
    @api.model
  • name_create(self, name)
    @api.model
  • write(self, vals)
    @api.multi
    If updating manager of a department, we need to update all the employees of department hierarchy, and subscribe the new manager.

New fields (33)
  • active Boolean
    default=True related='resource_id.active' store=True args: 'Active'
  • address_home_id Many2one → res.partner
    groups='hr.group_hr_user' help='Enter here the private address of the employee, not the one linked to your company.' args: 'res.partner', 'Private Address'
  • address_id Many2one → res.partner
    args: 'res.partner', 'Work Address'
  • bank_account_id Many2one → res.partner.bank
    domain="[('partner_id', '=', address_home_id)]" groups='hr.group_hr_user' help='Employee bank salary account' args: 'res.partner.bank', 'Bank Account Number'
  • birthday Date
    groups='hr.group_hr_user' args: 'Date of Birth'
  • category_ids Many2many → hr.employee.category
    string='Tags' args: 'hr.employee.category', 'employee_category_rel', 'emp_id', 'category_id'
  • child_ids One2many → hr.employee
    string='Subordinates' args: 'hr.employee', 'parent_id'
  • coach_id Many2one → hr.employee
    args: 'hr.employee', 'Coach'
  • color Integer
    default=0 args: 'Color Index'
  • country_id Many2one → res.country
    groups='hr.group_hr_user' args: 'res.country', 'Nationality (Country)'
  • department_id Many2one → hr.department
    args: 'hr.department', 'Department'
  • gender Selection
    default='male' groups='hr.group_hr_user' args: [('male', 'Male'), ('female', 'Female'), ('other', 'Other')]
  • identification_id Char
    groups='hr.group_hr_user' string='Identification No'
  • image Binary
    attachment=True default=_default_image help='This field holds the image used as photo for the employee, limited to 1024x1024px.' args: 'Photo'
  • image_medium Binary
    attachment=True help='Medium-sized photo of the employee. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' args: 'Medium-sized photo'
  • image_small Binary
    attachment=True help='Small-sized photo of the employee. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' args: 'Small-sized photo'
  • is_address_home_a_company Boolean
    compute='_compute_is_address_home_a_company' args: 'The employee adress has a company linked'
  • job_id Many2one → hr.job
    args: 'hr.job', 'Job Position'
  • marital Selection
    default='single' groups='hr.group_hr_user' string='Marital Status' args: [('single', 'Single'), ('married', 'Married'), ('cohabitant', 'Legal Cohabitant'), ('widower', 'Widower'), ('divorced', 'Divorced')]
  • mobile_phone Char
    args: 'Work Mobile'
  • name Char
    oldname='name_related' related='resource_id.name' store=True
  • notes Text
    args: 'Notes'
  • parent_id Many2one → hr.employee
    args: 'hr.employee', 'Manager'
  • passport_id Char
    groups='hr.group_hr_user' args: 'Passport No'
  • permit_no Char
    groups='hr.group_hr_user' args: 'Work Permit No'
  • sinid Char
    groups='hr.group_hr_user' help='Social Insurance Number' args: 'SIN No'
  • ssnid Char
    groups='hr.group_hr_user' help='Social Security Number' args: 'SSN No'
  • user_id Many2one → res.users
    related='resource_id.user_id' args: 'res.users', 'User'
  • visa_expire Date
    groups='hr.group_hr_user' args: 'Visa Expire Date'
  • visa_no Char
    groups='hr.group_hr_user' args: 'Visa No'
  • work_email Char
    args: 'Work Email'
  • work_location Char
    args: 'Work Location'
  • work_phone Char
    args: 'Work Phone'
Public methods (5)
  • action_follow(self)
    @api.multi
    Wrapper because message_subscribe_users take a user_ids=None that receive the context without the wrapper.
  • action_unfollow(self)
    @api.multi
    Wrapper because message_unsubscribe_users take a user_ids=None that receive the context without the wrapper.
  • create(self, vals)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (3)
  • color Integer
    string='Color Index'
  • employee_ids Many2many → hr.employee
    string='Employees' args: 'hr.employee', 'employee_category_rel', 'category_id', 'emp_id'
  • name Char
    required=True string='Employee Tag'
Public methods (0)

No public methods.

New fields (11)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • department_id Many2one → hr.department
    string='Department' args: 'hr.department'
  • description Text
    string='Job Description'
  • employee_ids One2many → hr.employee
    groups='base.group_user' string='Employees' args: 'hr.employee', 'job_id'
  • expected_employees Integer
    compute='_compute_employees' help='Expected number of employees for this job position after new recruitment.' store=True string='Total Forecasted Employees'
  • name Char
    index=True required=True string='Job Position' translate=True
  • no_of_employee Integer
    compute='_compute_employees' help='Number of employees currently occupying this job position.' store=True string='Current Number of Employees'
  • no_of_hired_employee Integer
    copy=False help='Number of hired employees for this job position during recruitment phase.' string='Hired Employees'
  • no_of_recruitment Integer
    copy=False default=1 help='Number of new employees you expect to recruit.' string='Expected New Employees'
  • requirements Text
    args: 'Requirements'
  • state Selection
    copy=False default='recruit' help='Set whether the recruitment process is open or closed for this job position.' readonly=True required=True string='Status' track_visibility='always' args: [('recruit', 'Recruitment in Progress'), ('open', 'Not Recruiting')]
Public methods (4)
  • copy(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
    We don't want the current user to be follower of all created job
  • set_open(self)
    @api.multi
  • set_recruit(self)
    @api.multi

New fields (1)
  • alias_contact Selection
    selection_add=[('employees', 'Authenticated Employees')]
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • module_hr_org_chart Boolean
    string='Show Organizational Chart'
  • resource_calendar_id Many2one → resource.calendar
    related='company_id.resource_calendar_id' args: 'resource.calendar', 'Company Working Hours'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • get_static_mention_suggestions(self)
    @api.model
    Extend the mail's static mention suggestions by adding the employees.

New fields (1)
  • employee_ids One2many → hr.employee
    string='Related employees' args: 'hr.employee', 'user_id'
Public methods (2)
  • message_post(self, **kwargs)
    @api.multi@api.returns('self', <expr>)
    Redirect the posting of message on res.users to the related employees. This is done because when giving the context of Chatter on the various mailboxes, we do not have access to the current partner_id.
  • write(self, vals)
    @api.multi
    When renaming admin user, we want its new name propagated to its related employees
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Nicolas Martinelli, Jérome Maes, Julien Legros, xmo-odoo, qdp-odoo, Aaron Bohy, Damien Bouvy, Yannick Tivisse, qsm-odoo, Denis Vermylen (dve), Tanguy Charlier
WEBSITE
WEBSITEhttps://www.odoo.com/page/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - mail
    - bus
    - web_tour
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Human Resources Management
==========================

This application enables you to manage important aspects of your company's staff and other details such as their skills, contacts, working time...


You can manage:
---------------
* Employees and hierarchies : You can define your employee with User and display hierarchies
* HR Departments
* HR Jobs
    

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
assets_backend hr assets ir.ui.view qweb Inherits web.assets_backend
hr_department_view_kanban hr.department.kanban hr.department kanban New
hr_kanban_view_employees hr.employee.kanban hr.employee kanban New
view_department_filter hr.department.search hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_filter hr.employee.search hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_job_filter hr.job.search hr.job search New
view_partner_tree2 hr.employee.tree hr.employee tree New
Models touched (8)

New fields (10)
  • active Boolean
    default=True args: 'Active'
  • child_ids One2many → hr.department
    string='Child Departments' args: 'hr.department', 'parent_id'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> index=True string='Company' args: 'res.company'
  • jobs_ids One2many → hr.job
    string='Jobs' args: 'hr.job', 'department_id'
  • manager_id Many2one → hr.employee
    string='Manager' track_visibility='onchange' args: 'hr.employee'
  • member_ids One2many → hr.employee
    readonly=True string='Members' args: 'hr.employee', 'department_id'
  • name Char
    required=True args: 'Department Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → hr.department
    index=True string='Parent Department' args: 'hr.department'
Public methods (3)
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi
  • write(self, vals)
    @api.multi
    If updating manager of a department, we need to update all the employees of department hierarchy, and subscribe the new manager.

New fields (31)
  • address_home_id Many2one → res.partner
    string='Home Address' args: 'res.partner'
  • address_id Many2one → res.partner
    string='Working Address' args: 'res.partner'
  • bank_account_id Many2one → res.partner.bank
    domain="[('partner_id', '=', address_home_id)]" groups='hr.group_hr_user' help='Employee bank salary account' string='Bank Account Number' args: 'res.partner.bank'
  • birthday Date
    groups='hr.group_hr_user' args: 'Date of Birth'
  • category_ids Many2many → hr.employee.category
    string='Tags' args: 'hr.employee.category', 'employee_category_rel', 'emp_id', 'category_id'
  • child_ids One2many → hr.employee
    string='Subordinates' args: 'hr.employee', 'parent_id'
  • city Char
    related='address_id.city'
  • coach_id Many2one → hr.employee
    string='Coach' args: 'hr.employee'
  • color Integer
    default=0 args: 'Color Index'
  • country_id Many2one → res.country
    string='Nationality (Country)' args: 'res.country'
  • department_id Many2one → hr.department
    string='Department' args: 'hr.department'
  • gender Selection
    groups='hr.group_hr_user' args: [('male', 'Male'), ('female', 'Female'), ('other', 'Other')]
  • identification_id Char
    groups='hr.group_hr_user' string='Identification No'
  • image Binary
    attachment=True default=_default_image help='This field holds the image used as photo for the employee, limited to 1024x1024px.' args: 'Photo'
  • image_medium Binary
    attachment=True help='Medium-sized photo of the employee. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' args: 'Medium-sized photo'
  • image_small Binary
    attachment=True help='Small-sized photo of the employee. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' args: 'Small-sized photo'
  • job_id Many2one → hr.job
    string='Job Title' args: 'hr.job'
  • last_login Datetime
    readonly=True related='user_id.login_date' string='Latest Connection'
  • login Char
    readonly=True related='user_id.login'
  • marital Selection
    groups='hr.group_hr_user' string='Marital Status' args: [('single', 'Single'), ('married', 'Married'), ('widower', 'Widower'), ('divorced', 'Divorced')]
  • mobile_phone Char
    args: 'Work Mobile'
  • name_related Char
    readonly=True related='resource_id.name' store=True string='Resource Name'
  • notes Text
    args: 'Notes'
  • parent_id Many2one → hr.employee
    string='Manager' args: 'hr.employee'
  • passport_id Char
    groups='hr.group_hr_user' args: 'Passport No'
  • resource_id Many2one → resource.resource
    auto_join=True ondelete='cascade' required=True string='Resource' args: 'resource.resource'
  • sinid Char
    groups='hr.group_hr_user' help='Social Insurance Number' args: 'SIN No'
  • ssnid Char
    groups='hr.group_hr_user' help='Social Security Number' args: 'SSN No'
  • work_email Char
    args: 'Work Email'
  • work_location Char
    args: 'Work Location'
  • work_phone Char
    args: 'Work Phone'
Public methods (5)
  • action_follow(self)
    @api.multi
    Wrapper because message_subscribe_users take a user_ids=None that receive the context without the wrapper.
  • action_unfollow(self)
    @api.multi
    Wrapper because message_unsubscribe_users take a user_ids=None that receive the context without the wrapper.
  • create(self, vals)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (3)
  • color Integer
    string='Color Index'
  • employee_ids Many2many → hr.employee
    string='Employees' args: 'hr.employee', 'employee_category_rel', 'category_id', 'emp_id'
  • name Char
    required=True string='Employee Tag'
Public methods (0)

No public methods.

New fields (11)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • department_id Many2one → hr.department
    string='Department' args: 'hr.department'
  • description Text
    string='Job Description'
  • employee_ids One2many → hr.employee
    groups='base.group_user' string='Employees' args: 'hr.employee', 'job_id'
  • expected_employees Integer
    compute='_compute_employees' help='Expected number of employees for this job position after new recruitment.' store=True string='Total Forecasted Employees'
  • name Char
    index=True required=True string='Job Title' translate=True
  • no_of_employee Integer
    compute='_compute_employees' help='Number of employees currently occupying this job position.' store=True string='Current Number of Employees'
  • no_of_hired_employee Integer
    copy=False help='Number of hired employees for this job position during recruitment phase.' string='Hired Employees'
  • no_of_recruitment Integer
    copy=False default=1 help='Number of new employees you expect to recruit.' string='Expected New Employees'
  • requirements Text
    args: 'Requirements'
  • state Selection
    copy=False default='recruit' help='Set whether the recruitment process is open or closed for this job position.' readonly=True required=True string='Status' track_visibility='always' args: [('recruit', 'Recruitment in Progress'), ('open', 'Not Recruiting')]
Public methods (4)
  • copy(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
    We don't want the current user to be follower of all created job
  • set_open(self)
    @api.multi
  • set_recruit(self)
    @api.multi

New fields (1)
  • alias_contact Selection
    selection_add=[('employees', 'Authenticated Employees')]
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • message_route_verify(self, message, message_dict, route, update_author=True, assert_model=True, create_fallback=True, allow_private=False, drop_alias=False)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • get_static_mention_suggestions(self)
    @api.model
    Extend the mail's static mention suggestions by adding the employees.

New fields (1)
  • employee_ids One2many → hr.employee
    string='Related employees' args: 'hr.employee', 'user_id'
Public methods (2)
  • message_post(self, **kwargs)
    @api.multi@api.returns('self', <expr>)
    Redirect the posting of message on res.users to the related employees. This is done because when giving the context of Chatter on the various mailboxes, we do not have access to the current partner_id.
  • write(self, vals)
    @api.multi
    When renaming admin user, we want its new name propagated to its related employees
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Fabien Meghazi, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Nicolas Martinelli, Jérome Maes, Julien Legros, Richard Mathot, Géry Debongnie, Aaron Bohy, Jeremy Kersten, Damien Bouvy, Yannick Tivisse, qsm-odoo, Martin Geubelle, Pierre Masereel, Denis Vermylen (dve), DVE
WEBSITE
WEBSITEhttps://www.odoo.com/page/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - mail
    - bus
    - resource
    - web_tip
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Human Resources Management
==========================

This application enables you to manage important aspects of your company's staff and other details such as their skills, contacts, working time...


You can manage:
---------------
* Employees and hierarchies : You can define your employee with User and display hierarchies
* HR Departments
* HR Jobs
    

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
assets_backend hr assets ir.ui.view qweb Inherits web.assets_backend
hr_department_view_kanban hr.department.kanban hr.department kanban New
hr_kanban_view_employees HR - Employess Kanban hr.employee kanban New
view_department_filter Departments hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_filter Employees hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_job_filter Job hr.job search New
view_partner_tree2 hr.employee.tree hr.employee tree New
Models touched (4)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (4)
  • copy(self, cr, uid, id, default=None, context=None)
  • create(self, values)
    @api.model
  • set_open(self, cr, uid, ids, context=None)
  • set_recruit(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • get_static_mention_suggestions(self)
    @api.model
    Extend the mail's static mention suggestions by adding the employees.

New fields (0)

No new fields.

Public methods (1)
  • message_post(self, cr, uid, thread_id, context=None, **kwargs)
    @api.cr_uid_ids_context
    Redirect the posting of message on res.users to the related employee. This is done because when giving the context of Chatter on the various mailboxes, we do not have access to the current partner_id.
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Christophe Matthieu, Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Purnendu Singh (OpenERP), Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Tejas Tank, Thibault Delavallée, Vo Minh Thu, Launchpad Translations on behalf of openerp, Denis Ledoux, Fabien Meghazi, ggh-openerp, Christophe Simonis, Xavier Morel, Anael Closson, Vishmita, Chirag Dodiya (OpenERP Trainee), Amit Bhavsar (Open ERP), Paramjit Singh Sahota, Richard Mathot, Géry Debongnie, Aaron Bohy, bth-openerp, Vishmita Jadeja (openerp), Richard Mathot (OpenERP), ged-odoo, Jeremy Kersten, Randhir Mayatra rma-openerp, sgo@tinyerp.com, Mansi Kariya (OpenERP Trainee), Darshan Kalola (OpenERP), Darshan Kalola, Sunil Sharma (OpenERP)
WEBSITE
WEBSITEhttps://www.odoo.com/page/employees
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - mail
    - resource
    - board
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Human Resources Management
==========================

This application enables you to manage important aspects of your company's staff and other details such as their skills, contacts, working time...


You can manage:
---------------
* Employees and hierarchies : You can define your employee with User and display hierarchies
* HR Departments
* HR Jobs
    

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
assets_backend hr assets ir.ui.view qweb Inherits web.assets_backend
hr_kanban_view_employees HR - Employess Kanban hr.employee kanban New
view_department_filter Departments hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_category_tree hr.employee.category.tree hr.employee.category tree New
view_employee_filter Employees hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_human_resources_configuration hr settings hr.config.settings form New
view_job_filter Job hr.job search New
view_partner_tree2 hr.employee.tree hr.employee tree New
view_users_form_mail res.users.form.hr res.users data Inherits mail.view_users_form_mail
Models touched (3)

New fields (0)

No new fields.

Public methods (1)
  • name_get(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (3)
  • copy(self, cr, uid, id, default=None, context=None)
  • set_open(self, cr, uid, ids, context=None)
  • set_recruit(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (2)
  • message_post(self, cr, uid, thread_id, context=None, **kwargs)
    @api.cr_uid_ids_context
    Redirect the posting of message on res.users to the related employee. This is done because when giving the context of Chatter on the various mailboxes, we do not have access to the current partner_id.
  • stop_showing_employees_suggestions(self, cr, uid, user_id, context=None)
    Update display_employees_suggestions value to False
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/7.0/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Jagdish Panchal (Open ERP), Twinkle Christian (OpenERP), Cecile Tonglet, Rucha (Open ERP), Atul Patel (OpenERP), Jalpesh Patel (OpenERP), Randhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Christophe Matthieu, Pinakin Nayi (OpenERP), DBR (OpenERP), Harry (OpenERP), Antonin Bourguignon, ajay javiya (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Bhumika (OpenERP), Purnendu Singh (OpenERP), Saurang Suthar (OpenERP), Fabien Pinckaers, Antony Lesuisse, Bharat Devnani (OpenERP), Meera Trambadia (OpenERP), Saurang Suthar, Olivier Dony, Rajesh Prajapati (OpenERP), Twinkle (OpenERP), Divyesh Makwana (Open ERP), Tejas Tank, Thibault Delavallée, Vo Minh Thu, Hardik, Josse Colpaert, Arnaud Pineux, pso (OpenERP), Sbh (Openerp), Amit Patel (OpenERP), Launchpad Translations on behalf of openerp, vta vta@openerp.com, Quentin (OpenERP), Kuldeep Joshi (OpenERP), ara@tinyerp.com, Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, Sanjay Gohel (Open ERP), Alexis de Lattre, help, Fabien Meghazi, niv-openerp, Jiten (OpenERP), Dharti Ratani (OpenERP), Cedric Snauwaert, Amit Patel, Frédéric van der Essen, Gilles Major, Vijaykumar Baladaniya, Jigar Amin, Amit (OpenERP), RGA(OpenERP), Paramjit Singh Sahota, Hiral Patel (OpenERP), Amit Vora, Richard Mathot, nwi-openerp, jri@openerp.com, Amit Vora (OpenERP)
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:43:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - mail
    - resource
    - process
    - board
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Human Resources Management
==========================

This application enables you to manage important aspects of your company's staff and other details such as their skills, contacts, working time...


You can manage:
---------------
* Employees and hierarchies : You can define your employee with User and display hierarchies
* HR Departments
* HR Jobs
    

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
board_hr_form board.hr.form board.board form New
hr_kanban_view_employees HR - Employess Kanban hr.employee kanban New
view_department_filter Departments hr.department search New
view_department_form hr.department.form hr.department form New
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_category_tree hr.employee.category.tree hr.employee.category tree New
view_employee_filter Employees hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_employee_form hr.job.employee.form hr.job form New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_human_resources_configuration hr settings hr.config.settings form New
view_job_filter Job hr.job search New
view_partner_tree2 hr.employee.tree hr.employee tree New
Models touched (0)

No models found for this module.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/6.1/hr
VERSION
VERSION 1.1
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Jagdish Panchal (Open ERP), Rucha (Open ERP), Stephane Wirtel, Harry (OpenERP), Fabien Pinckaers, Antony Lesuisse, Meera Trambadia (OpenERP), Olivier Dony, Divyesh Makwana (Open ERP), Vo Minh Thu, pso (OpenERP), Launchpad Translations on behalf of openerp, Quentin (OpenERP), Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, vro, Fabien Meghazi, niv-openerp, Ujjvala Collins (OpenERP), Xavier Morel, Serpent Consulting Services, Amit (OpenERP), Minh Tran, Thibault Francois, Carlos Vásquez, Bogdan Stanciu, ksa (Open ERP), Els Van Vossel, Israel Fermin Montilla, mayur maheshwari (Open ERP), Hardik Ansodariy (OpenERP), ssu, rch-openerp, ARA (OpenERP), aag (OpenERP), mtr, fp, qdp-launchpad@tinyerp.com, Mustufa Rangwala, psi (Open ERP), Tejas (OpenERP), Amit Parmar (OpenERP), Kirti Savalia (OpenERP)
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:41:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - mail
    - base_tools
    - resource
    - process
    - board
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for human resource management.
=====================================

You can manage:
    * Employees and hierarchies : You can define your employee with User and display hierarchies
    * HR Departments
    * HR Jobs
    

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
board_hr_form board.hr.form board.board form New
board_hr_manager_form board.hr.manager.form board.board form New
hr_kanban_view_employees HR - Employess Kanban hr.employee kanban New
view_department_filter Departments hr.department search New
view_department_form hr.department.form hr.department form New
view_department_form_simple_modif_inherited1 view.department.form.hr.inherited1 res.users group Inherits base.view_users_form_simple_modif
view_department_tree hr.department.tree hr.department tree New
view_employee_category_form hr.employee.category.form hr.employee.category form New
view_employee_category_list hr.employee.category.list hr.employee.category tree New
view_employee_category_tree hr.employee.category.tree hr.employee.category tree New
view_employee_filter Employees hr.employee search New
view_employee_form hr.employee.form hr.employee form New
view_employee_tree hr.employee.tree hr.employee tree New
view_hr_job_form hr.job.form hr.job form New
view_hr_job_tree hr.job.tree hr.job tree New
view_job_filter Job hr.job search New
view_partner_tree2 hr.employee.tree hr.employee tree New
view_users_form_inherit res.users.form res.users group Inherits base.view_users_form
Models touched (0)

No models found for this module.