Skip to main content

Employee Management

The employee form is the spine of ONe-HR. Every downstream calculation — leave balances, loan deductions, OT rates, payroll — reads from it, and every mobile-app view is rendered from this record.

Audience

HR Administrators for day-to-day maintenance; MSD Administrators for onboarding and transfers.

Opening the list

Human Resource ▸ Maintenance ▸ Employees ▸ Non-Executives (or Executives, if you have rights).

Non-Executives list

The module ships two filtered action windows built on the same hr.employee model:

ActionDomainVisible to
Non-Executivesexecutive=FalseAll HR admins
Executivesexecutive=Truehr_executive_processor, msd_administrators

The Org Chart menu opens the standard Odoo hr_org_chart view, scoped by the same ir.rule.

Creating an employee

Click New on the list. The form is a heavily extended hr.employee — the tabs you see depend on your groups.

Names and identity

The module enforces a strict naming convention (models/hr_employee.py:16–17, 40–45, 319–328, 345–364):

FieldNotes
First NameRequired. Auto-uppercased on save.
Middle NameOptional. Auto-uppercased.
Family NameRequired. Auto-uppercased.
Full NameComputed from the three above as FAMILY, FIRST MIDDLE.
Display nameLASTNAME, FIRSTNAME MIDDLENAME, fully uppercased — drives every employee dropdown across the app.
Employee IDThe canonical UAAGI employee code.
Employee ID tmpLegacy/staging field — kept for transition migrations.

When an employee is archived (active=False), the linked res.users is also deactivated and the crosschex_id biometrics link is cleared — protection against stale mobile-app sessions on departure.

Employment Status

Tracks the contract lifecycle. One of six statuses:

ValueLabel
cosContract of Service
probiProbational
ojtO.J.T.
pbProject Base
cbCommission Base
regularRegular

Each status has a matching start date and end date field (cos_date/cos_enddate, probi_date/probi_enddate, etc.), plus date_hired and date_regular. The Tenure badge on the form header is computed from date_hired as a live {years}y {months}m string.

Employee form — Employment Status tab

Personal information

Personal details live on their own tab, with tracking enabled on every field (any edit appears in the chatter):

  • Address 1 / Address 2 — home and alternate addresses. The Mailing Address selector chooses which is currently active.
  • Email (Personal) and Contact Numbers — for HR contact outside work channels.
  • Birthday, Place of Birth, Country of Birth.
  • Father's Name, Mother's Name.
  • Gender, Marital Status, Spouse Name, Spouse Birthdate, Number of Dependent Children.
  • Emergency Contact — free-text block.
PII

Every field on the Personal Info tab is PII. Screenshots in these docs have the sensitive ones blurred (addresses, phone, email, family names, birthday). See the note at the top of the Compensation & Benefits page for the full blur convention.

Employee form — Personal Info tab (blurred)

The tab is labeled Personal Info in the UI. Education rows (hr.employee.education) render as a sub-list within this same tab.

Identifications

Separate tab for government-issued numbers and financial details:

FieldType
Tax CodeZ, S/HF/ME, ME1/HF1 through ME4/HF4 — drives the withholding tax bracket
T.I.N.Tax Identification Number
S.S.S.#Social Security System
Pag-IBIG#HDMF number
PhilHealth#PhilHealth number
Bank Account#For salary crediting
MaxiCare / MaxiCare ActiveHealth insurance number + toggle
SignatureBinary image — used on the Authority to Deduct and ID Card reports

Education

A One2many list of hr.employee.education rows: degree, institution, year graduated, awards. Rendered inline within the Personal Info tab, not as a separate page. Used for HR reporting and future skills-matching.

Documents

The module depends on employee_documents_expiry, so each employee carries a list of scanned documents (IDs, contracts, certifications) with expiry dates that can be tracked and notified on.

Actions on the form

Transfer to another O.B.U.

Header button Transfer Employee launches the hr.employee.transfer wizard. It updates company_id to the target BU and reassigns related records appropriately. This is an MSD-level operation — the button is visible to users with the right group.

Toggle Executive

A header action flips the executive flag. This moves the record from the Non-Executives action window into Executives and grants access to the Subordinates + Team Availability sections (see Organization).

Two report wizards — Employee ID Card (Front) and Employee ID Card (Back) — generate PDF identity cards via the iNet Crystal Clear integration. The output respects the inet_host/inet_folder settings on the employee's res.company.

Lifecycle hooks

HookTrigger
createAuto-uppercases names, builds display_name, and auto-creates one hr.employee.leave.master row per active hr.leave.type — so a new employee immediately has balance records for every leave type, even if those balances are zero.
write with active=FalseDeactivates the linked res.users and clears crosschex_id.
write on name fieldsRebuilds name on the record in title case.
onchange department_idAuto-populates executive_id, avp_id, all_employee_manager_id, assistant_manager_id from the department's defaults — the HR admin rarely sets these manually.
onchange all_employee_manager_idSets parent_id (Odoo's standard manager hierarchy) — keeps the built-in org chart wired up.
onchange monthly_rateCascades the rate through semi-monthly, weekly, daily, hourly — see Compensation & Benefits.

Read-only mirror models

Three helper models expose employee data without the multi-company ir.rule filter:

  • hr.all.employee
  • hr.all.department
  • hr.all.jobs

These are used in dropdowns where cross-BU visibility is required — most notably the approver, AVP, and Manager pickers. They are read-only and populate from hr.employee with sudo().