Introduzione
In Odoo, i modelli definiscono la struttura dei dati e il modo in cui vengono persistiti nel database. Ogni elemento rilevante per l'attività — ordini, fatture, dipendenti — è rappresentato da un modello che organizza campi, relazioni e regole.
Per chi lavora con Odoo, sia dal punto di vista funzionale che tecnico, comprendere i modelli è fondamentale. Sono la spina dorsale dell'architettura dei dati: stabiliscono campi, legami tra record e la logica di business che li governa.
Questo contenuto si concentra su uno dei modelli centrali nell'area HR: hr.employee. Che tu stia impostando workflow per le risorse umane, collegando gestionali paghe o configurando presenze e permessi, lo incontrerai spesso.
Cos'è il modello hr.employee
Il modello hr.employee rappresenta i dipendenti all'interno di Odoo: è il punto unico dove si raccolgono le informazioni anagrafiche e lavorative di una persona nell'azienda.
Fa parte dell'app Risorse Umane e viene sfruttato trasversalmente da moduli come presenze, ferie, contratti, stipendio e timesheet.
Il modello viene installato attivando l'app "Dipendenti" e poi ampliato da altri moduli tramite ereditarietà dei modelli. Ad esempio, hr_contract inserisce i dati del contratto, hr_attendance aggiunge timestamp di ingresso/uscita e hr_leave gestisce le assenze: ciascun modulo estende il nucleo senza duplicarne la struttura.
Odoo fornisce anche una vista limitata dei dipendenti, hr.employee.public, pensata per utenti con visibilità ridotta: è un esempio di come l'ereditarietà e i pattern astratti dei modelli vengano usati per controllare l'accesso ai dati.
Campi chiave del modello
Di seguito trovi i campi più importanti del modello hr.employee — conoscerli ti aiuta a gestire correttamente le anagrafiche e a integrare i processi HR.
1. name
Tipo: Char. Contiene il nome visualizzato del dipendente. È il campo principale con cui viene identificato il record nelle viste e nei report.
2. create_date
Tipo: Datetime. Data e ora di creazione del record. Gestito automaticamente da Odoo, utile per audit e reportistica.
3. write_date
Tipo: Datetime. Data e ora dell'ultima modifica. Sempre gestito automaticamente e utile per tracciare aggiornamenti.
4. active
Tipo: Boolean. Flag di archiviazione (soft delete). Se impostato a False il dipendente viene nascosto dalle viste predefinite senza essere cancellato definitivamente.
5. company_id
Tipo: Many2one (res.company). Indica a quale azienda, nelle configurazioni multi-company, il dipendente appartiene; è fondamentale per la maggior parte dei record.
6. user_id
Tipo: Many2one (res.users). Collega il dipendente a un utente di sistema. Se impostato, il dipendente può accedere a Odoo e partecipare a flussi che richiedono login.
7. work_email
Tipo: Char. L'indirizzo email aziendale usato per comunicazioni interne e notifiche.
8. work_phone
Tipo: Char. Il numero telefonico aziendale, visibile nei form e usato nei flussi di contatto.
9. mobile_phone
Tipo: Char. Il numero di cellulare di lavoro, utile per SMS o comunicazioni urgenti.
10. department_id
Tipo: Many2one (hr.department). Il reparto di appartenenza; serve per organigrammi, report e flussi di approvazione.
11. job_id
Tipo: Many2one (hr.job). La posizione lavorativa collegata al modello hr.job, che descrive ruoli e posizioni aperte.
12. job_title
Tipo: Char. Titolo del ruolo in forma libera, utile quando non si utilizza job_id o si vuole una dicitura personalizzata.
13. parent_id
Tipo: Many2one (hr.employee). Il responsabile diretto; costruisce la gerarchia aziendale e supporta catene di approvazione e organigrammi.
14. coach_id
Tipo: Many2one (hr.employee). Il coach o mentor della risorsa, impiegato nei processi di valutazione e sviluppo; non conferisce automaticamente privilegi speciali.
15. resource_id
Tipo: Many2one (resource.resource). Collegamento al modulo risorse usato per pianificazione, disponibilità e integrazione con il calendario.
16. work_contact_id
Tipo: Many2one (res.partner). Il contatto aziendale associato per comunicazioni e documenti di lavoro.
17. address_id
Tipo: Many2one (res.partner). Indirizzo lavorativo collegato a un partner, utile per uffici e sedi.
18. address_home_id
Tipo: Many2one (res.partner). Indirizzo personale del dipendente, importante per buste paga, emergenze e comunicazioni private.
19. resource_calendar_id
Tipo: Many2one (resource.calendar). Calendario di lavoro che definisce orari e giorni utili per presenze, ferie e pianificazione.
20. employee_type
Tipo: Selection. Tipologia di rapporto (dipendente, libero professionista, stagista). Influenza la gestione dei contratti e la cronologia contrattuale.
21. barcode
Tipo: Char. Identificativo badge per registrare presenze tramite scansione barcode in app come Kiosk.
22. pin
Tipo: Char. Codice PIN usato per il check-in/out in Kiosk e per alcune operazioni al punto cassa.
23. birthday
Tipo: Date. Data di nascita, usata per registri HR e promemoria opzionali.
24. identification_id
Tipo: Char. Numero di identificazione nazionale, necessario per obblighi legali e paghe.
25. passport_id
Tipo: Char. Numero del passaporto, utile per trasferte e permessi di lavoro.
26. bank_account_id
Tipo: Many2one (res.partner.bank). Conto bancario su cui vengono accreditati gli stipendi.
27. private_email
Tipo: Char. Email personale del dipendente, alternativa alla mail di lavoro.
28. phone
Tipo: Char. Numero telefonico privato, distinto dai contatti aziendali.
29. contract_id
Tipo: Many2one (hr.contract). Contratto attuale del dipendente; riferimento al contratto in corso.
30. contract_ids
Tipo: One2many (hr.contract). Storico dei contratti collegati al dipendente.
31. image_1920
Tipo: Binary. Foto o avatar del dipendente; Odoo conserva diverse risoluzioni per form, report e directory.
32. related_partner_id
Tipo: Many2one (res.partner). Contatto collegato al dipendente che permette integrazioni con CRM e altre aree funzionali.
33. leave_manager_id
Tipo: Many2one (res.users). Utente responsabile dell'approvazione ferie; se vuoto l'approvazione ricade su amministratori o approvatori configurati.
34. expense_manager_id
Tipo: Many2one (res.users). Utente che approva le spese; se non impostato si applicano regole di fallback aziendali.
35. timesheet_manager_id
Tipo: Many2one (res.users). Utente responsabile di approvare i timesheet; utile per il controllo qualità delle registrazioni orarie.
Come questo modello entra nei processi aziendali
1. Rubrica dipendenti e onboarding
Durante l'inserimento di un nuovo collaboratore, l'HR compila la scheda hr.employee: nome, reparto, ruolo, referente e dati di contatto. Si collega user_id solo quando serve consentire l'accesso a Odoo.
2. Presenze e tracciamento orario
Le timbrature vengono registrate dall'app Presenze e collegate al modello hr.attendance, che a sua volta fa riferimento a hr.employee. Barcode e PIN abilitano modalità kiosk o tornelli.
3. Ferie e permessi
Le richieste di assenza puntano al record del dipendente; leave_manager_id e resource_calendar_id determinano chi approva e come calcolare i giorni disponibili.
4. Paghe e contratti
Il modulo Paghe utilizza hr.employee per dati su retribuzione, conto corrente e riferimento contrattuale. contract_id indica il contratto attivo, mentre contract_ids conserva lo storico.
5. Timesheet e assegnazione progetti
I fogli presenza collegano le ore al dipendente; il timesheet_manager_id gestisce le approvazioni e resource_id connette la risorsa agli strumenti di pianificazione.
Come gli sviluppatori estendono questo modello
Gli sviluppatori estendono hr.employee con diversi approcci, avvalendosi principalmente dell'ereditarietà dei modelli di Odoo.
Ereditarietà dei modelli
Dichiarando _inherit = 'hr.employee' in un modulo personalizzato puoi aggiungere campi, sovrascrivere metodi o aggiungere vincoli. Questo mantiene le modifiche isolate e facilita gli aggiornamenti.
Aggiunta di campi
Nella classe ereditata si definiscono nuovi fields scegliendo il tipo più adatto (Char, Many2one, Boolean, Integer, Text, Selection). Valuta i campi dipendenti dall'azienda in scenari multi-company.
Estensioni in Python
Puoi ridefinire create, write o unlink per inserire logica aggiuntiva: ricorda di chiamare super() per preservare il comportamento originale. Fai attenzione alle dipendenze dei campi calcolati.
Odoo Studio
Odoo Studio permette di aggiungere campi e semplici personalizzazioni senza scrivere codice: ottimo per prototipi rapidi, mentre per logiche complesse o manutenzione a lungo termine è preferibile un modulo custom.
Buone pratiche
- Assegna user_id solo ai dipendenti che devono accedere a Odoo. Non tutti i collaboratori necessitano di un account di sistema.
- Costruisci la gerarchia usando parent_id in modo coerente: partire dai livelli alti facilita la gestione delle approvazioni e dell'organigramma.
- Configura resource_calendar_id per uniformare orari e garantire calcoli corretti di presenze e permessi.
- Per integrazioni esterne usa XML-RPC o JSON-RPC: hr.employee è disponibile via API. Mappa gli identificativi esterni con attenzione per evitare incoerenze.
- Per campi personalizzati utilizza il prefisso x_ o un prefisso legato al modulo per ridurre il rischio di collisioni con future versioni di Odoo.
- Campi sensibili dovrebbero avere restrizioni basate sui gruppi (es. hr.group_hr_user) per evitare che utenti senza diritti HR vedano informazioni private.
Errori frequenti
- Creare record duplicati invece di cercare esistenti è un errore comune. Usa work_email o identification_id per deduplicare durante import e integrazioni.
- Non confondere user_id con related_partner_id: il primo rappresenta l'accesso a Odoo, il secondo il contatto partner collegato al dipendente.
- Non dimenticare di impostare employee_type: è obbligatorio e influisce sul comportamento relativo ai contratti.
- Non sovrascrivere metodi core senza invocare super(): ciò può compromettere la compatibilità con altri moduli e futuri aggiornamenti.
- Evitare di aggiungere campi obbligatori senza prevedere valori di default: le vecchie registrazioni potrebbero fallire i controlli di validazione durante l'upgrade.
- Non esporre campi HR sensibili a utenti non autorizzati: applica gruppi di accesso sui campi che contengono dati riservati.
Conclusione
Il modello hr.employee è il fulcro delle Risorse Umane in Odoo: centralizza informazioni anagrafiche, contrattuali e di presenza e funge da collegamento con moduli come contratti, presenze e ferie. Capirne i campi e le estensioni facilita configurazioni, personalizzazioni e integrazioni affidabili.
Sia che tu stia mappando processi HR come consulente funzionale, sia che tu stia sviluppando moduli personalizzati, una buona conoscenza di hr.employee ti farà risparmiare tempo e ridurre gli errori.
Hai bisogno di supporto per la tua implementazione Odoo?
Dasolo accompagna le aziende nell'implementazione, personalizzazione e ottimizzazione di Odoo. Siamo specializzati in integrazioni API e sviluppo Odoo, con esperienza approfondita nella struttura dati e nei modelli come hr.employee.
Se ti serve supporto per implementazioni Odoo, moduli HR custom o integrazioni, possiamo aiutarti. Prenota una demo per parlare del tuo progetto.