TIP: You can type at any time to perform a new search.

Security findings

Repository
odoo/odoo · module folder
Module version
2.0
Category
Human Resources/Attendances
Folder size
6.1 MB
License
LGPL-3
Application
Yes
Auto-installable
No
Website
https://www.odoo.com/app/employees
Last tracking update
2026-10-05 00:19:51
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Raphael Collet, odoo, Odoo Translation Bot, Christophe Matthieu, Aaron Bohy, Géry Debongnie, Yannick Tivisse, qsm-odoo, Jorge Pinna Puissant, Julien Castiaux, Xavier-Do, Victor Feyens, Adrien Dieudonné, Sébastien Theys, Julien Mougenot, David Beguin, Tiffany Chang (tic), Miquel Raïch, william-andre, luvi, Vincent Larcin, Victor Piryns (pivi), Dylan Kiss (dyki), Odoo, Xavier Bol (xbo), Youssef Bashandy, ravb-odoo, Gabriel (gdpf), Tanguy Quéguineur, Martin Trigaux (mat), Ahmad (khah), Agustin Castro Bugallo, sami odoo, Harsh Shah, rmun-odoo, thle-odoo, Mathieu Coutant, Yassin Abdelkarim, kais-odoo, Khumam Alzagim, Abdelrahman Mahmoud (amah), ahta, Ezzuldin Zaky (ezza), Bastien PIERRE, Michaël Mattiello, Mahdi Alijani (malj), Krzysztof Magusiak (krma), Ajit Singh, krip-odoo, Hazem Ibrahim, Guillaume V, Maeva De Keyser (MDEK), Harrison Hutton, Tyler Landivar (tylan), pajo, kareem, Bertrand Dossogne, romc-odoo, Ian Cioppa (iacio), Julien Launois (jula), adip-odoo, ksar-odoo, Quentin Colla (qucol), dhka-odoo, path-odoo, Ayush Modi, Saurabh, Hashem Elmaleeh, lrizzi1, Amr Elkhatieb, assh-odoo, khom-odoo, Ziri, renol-odoo, Aurélien Bertrand, abbhi-Odoo, jand-odoo, lebm-odoo, Dilya Anvarbekova, Zachary (zavan), Jurgen Gjini, Federico Falcone, Mahmoudk3m, Martin Lefèvre (mlef), Madhav Pancholi, ELCO, Manal El Kaidi (maelk), djsh-odoo, tshe-odoo, chpa-odoo, Faruk Avcı, 3amo-magdy, Mohamed Ayman, amga-odoo, Kishan (kiga), hamza, niyp-odoo, vifu-odoo, SurryaT10, usseif, Mélanie Peyrat (mepe), Mohammed Farouk, Julien Coppin (jucop), Sara Briki, Ahmed Naem (Ahnae), Mohamed (moaln), Mohamed-moali, ESTEBAN Lucas, satp-odoo, Julien Piron, Jean Schoenlaub, Simon Dumoulin (sidum), Dhananjay Brahmane, yogietama, Abdelrahman Gad (abgad), Ramez Ibrahim
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
hr_holidays_attendance, hr_timesheet_attendance, test_discuss_full
Description
This module aims to manage employee's attendances.
==================================================

Keeps account of the attendances of the employees on the basis of the
actions(Check in/Check out) performed by them.
       

Code Analysis info_outline

Views touched (24)
XML IDNameModelTypeStatus
hr_attendance.public_kiosk_mode Attendance Kiosk ir.ui.view qweb New
hr_attendance_create_view_form hr.attendance.create.form hr.attendance form Inherits hr_attendance.hr_attendance_view_form
hr_attendance_employee_calendar_view hr.attendance.employee.calendar.view hr.attendance calendar New
hr_attendance_employee_simple_form_view hr.attendance.form hr.attendance form Inherits hr_attendance.hr_attendance_view_form
hr_attendance_management_view_filter hr_attendance_management_view_filter hr.attendance search New
hr_attendance_my_calendar_view hr.attendance.my.calendar hr.attendance calendar New
hr_attendance_my_form_view hr.attendance.my.form hr.attendance form Inherits hr_attendance_view_form
hr_attendance_view_filter hr_attendance_view_filter hr.attendance search New
hr_attendance_view_form hr.attendance.form hr.attendance form New
hr_attendance_view_graph hr.attendance.graph hr.attendance graph New
hr_attendance_view_pivot hr.attendance.pivot hr.attendance pivot New
hr_contract_template_view_form hr.contract.template.view.form.inherit.hr_holidays_attendance hr.version form Inherits hr.hr_contract_template_form_view
hr_department_view_kanban hr.department.kanban.inherit hr.department kanban Inherits hr.hr_department_view_kanban
hr_employee_public_view_form hr.employee.public.form.inherit.attendance hr.employee.public form Inherits hr.hr_employee_public_view_form
hr_employee_search_view hr.employee.search.view hr.employee search Inherits hr.view_employee_filter
hr_employees_view_kanban hr.employee.kanban hr.employee kanban New
hr_version_list_view_enhanced_hr_attendance_base hr.version.list.view.enhanced.hr.attendance.base hr.version list Inherits hr.hr_version_list_view_enhanced
hr_version_search_view_enhanced_hr_attendance hr.version.search.view.enhanced.hr.attendance hr.version search Inherits hr.hr_version_search_view_enhanced
res_config_settings_view_form res.config.settings.view.form.inherit.hr.attendance res.config.settings form Inherits base.res_config_settings_view_form
view_attendance_tree hr.attendance.list hr.attendance list New
view_attendance_tree_management hr.attendance.list hr.attendance list New
view_employee_form_inherit_hr_attendance hr.employee hr.employee form Inherits hr.view_employee_form
view_employee_tree_inherit_leave hr.employee.list.leave hr.employee list Inherits hr.view_employee_tree
view_hr_attendance_kanban hr.attendance.kanban hr.attendance kanban New
HTTP endpoints (15)
Route(s)HandlerAuthTypeMethodsFlags
/hr_attendance/create_employee HrAttendance.create_employee public jsonrpc ALL
/hr_attendance/attendance_employee_data HrAttendance.employee_attendance_data public jsonrpc ALL sudo
/hr_attendance/employees_infos HrAttendance.employees_infos public jsonrpc ALL sudo
/hr_attendance/get_employees_without_badge HrAttendance.get_employees_without_badge public jsonrpc ALL
/hr_attendance/kiosk_keepalive HrAttendance.kiosk_keepalive user jsonrpc ALL
/hr_attendance/kiosk_mode_menu/<int:company_id> HrAttendance.kiosk_menu_item_action user http ALL
/hr_attendance/manual_selection HrAttendance.manual_selection public jsonrpc ALL sudo
/hr_attendance/<token> HrAttendance.open_kiosk_mode public http ALL sudo website
/hr_attendance/print_badge HrAttendance.print_badge user http ALL
/hr_attendance/attendance_barcode_scanned HrAttendance.scan_barcode public jsonrpc ALL sudo
/hr_attendance/set_settings HrAttendance.set_attendance_settings public jsonrpc ALL
/hr_attendance/set_badge HrAttendance.set_badge public jsonrpc ALL
/hr_attendance/systray_check_in_out HrAttendance.systray_attendance user jsonrpc ALL
/hr_attendance/update_break_duration HrAttendance.update_break_duration public jsonrpc ALL sudo
/hr_attendance/attendance_user_data HrAttendance.user_attendance_data user jsonrpc ALL
Models touched (11)

New fields (37)
  • attendance_manager_id Many2one → res.users
    export_string_translation=False related='employee_id.attendance_manager_id' args: 'res.users'
  • break_duration Float
    help='Extra unpaid break duration (hours)' string='Break Duration' tracking=True
  • can_edit Boolean
    compute='_compute_can_edit'
  • check_in Datetime
    default=fields.Datetime.now index=True required=True string='Check In' tracking=True
  • check_out Datetime
    string='Check Out' tracking=True
  • color Integer
    compute='_compute_color' export_string_translation=False
  • date Date
    compute='_compute_date' index=True precompute=True required=True store=True string='Date'
  • day_of_date Selection
    compute='_compute_day_of_date' index=True selection=[('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')] store=True string='Day'
  • department_id Many2one → hr.department
    readonly=True related='employee_id.department_id' string='Department' args: 'hr.department'
  • device_tracking_enabled Boolean
    related='employee_id.company_id.attendance_device_tracking'
  • employee_id Many2one → hr.employee
    default=_default_employee index=True ondelete='cascade' required=True string='Employee' args: 'hr.employee'
  • in_browser Char
    readonly=True string='Browser'
  • in_image Binary
    string='Check-In Image'
  • in_ip_address Char
    readonly=True string='IP Address'
  • in_latitude Float
    aggregator=None digits=(10, 7) readonly=True string='Latitude'
  • in_location Char
    help='Based on GPS-Coordinates if available or on IP Address'
  • in_longitude Float
    aggregator=None digits=(10, 7) readonly=True string='Longitude'
  • in_mode Selection
    default='manual' readonly=True selection=[('kiosk', 'Kiosk'), ('systray', 'Systray'), ('manual', 'Manual'), ('technical', 'Technical')] string='Mode'
  • is_manager Boolean
    compute='_compute_is_manager'
  • is_own Boolean
    compute='_compute_is_manager'
  • manager_id Many2one → hr.employee
    comodel_name='hr.employee' export_string_translation=False readonly=True related='employee_id.parent_id'
  • out_browser Char
    readonly=True
  • out_ip_address Char
    readonly=True
  • out_latitude Float
    aggregator=None digits=(10, 7) readonly=True
  • out_location Char
    help='Based on GPS-Coordinates if available or on IP Address'
  • out_longitude Float
    aggregator=None digits=(10, 7) readonly=True
  • out_mode Selection
    default='manual' readonly=True selection=[('kiosk', 'Kiosk'), ('systray', 'Systray'), ('manual', 'Manual'), ('technical', 'Technical'), ('auto_check_out', 'Automatic Check-Out')]
  • overtime_attendance_ids One2many → hr.attendance
    args: 'hr.attendance', 'source_attendance_id'
  • resource_calendar_id Many2one
    related='employee_id.resource_calendar_id' string='Working Schedule'
  • source_attendance_id Many2one → hr.attendance
    index=True args: 'hr.attendance'
  • source_stale Boolean
    copy=False default=False export_string_translation=False
  • state Selection
    copy=False default='draft' index=True readonly=True required=True string='Status' tracking=True args: [('draft', 'Draft'), ('validated', 'Validated'), ('refused', 'Refused')]
  • time_rule_id Many2one → hr.time.rule
    index=True args: 'hr.time.rule'
  • wet_color Integer
    export_string_translation=False related='work_entry_type_id.color' string='Work Entry Color'
  • wet_display_code Char
    export_string_translation=False related='work_entry_type_id.display_code'
  • work_entry_type_id Many2one → hr.work.entry.type
    default=<expr> index=True required=True string='Time Type' args: 'hr.work.entry.type'
  • worked_hours Float
    compute='_compute_worked_hours' readonly=True store=True string='Worked Hours'
Public methods (14)
  • action_in_attendance_maps(self)
  • action_mark_reviewed(self)
  • action_out_attendance_maps(self)
  • action_refuse(self)
  • action_reset_to_draft(self)
  • action_try_kiosk(self)
  • action_validate(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_kiosk_url(self)
  • get_unusual_days(self, date_from, date_to=None)
    @api.model
  • has_demo_data(self)
    @api.model
  • init(self)
  • write(self, vals)

New fields (16)
  • attendance_based Boolean
    groups='hr.group_hr_user' inherited=True readonly=False related='version_id.attendance_based'
  • attendance_ids One2many → hr.attendance
    groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer,hr.group_hr_user' args: 'hr.attendance', 'employee_id'
  • attendance_manager_id Many2one → res.users
    compute='_compute_attendance_manager' domain=_get_attendance_manager_domain groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer' help='The user set in Attendance will access the attendance of the employee through the dedicated app and will be able to edit them.' readonly=False store=True string='Attendance Approver' args: 'res.users'
  • attendance_state Selection
    compute='_compute_attendance_state' groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer,hr.group_hr_user' selection=[('checked_out', 'Checked out'), ('checked_in', 'Checked in')] string='Attendance Status'
  • display_attendances Boolean
    compute='_compute_display_attendances'
  • hours_last_month Float
    compute='_compute_hours_last_month'
  • hours_last_month_display Char
    compute='_compute_hours_last_month' groups='hr.group_hr_user,hr_attendance.group_hr_attendance_officer'
  • hours_last_month_overtime Float
    compute='_compute_hours_last_month'
  • hours_previously_today Float
    compute='_compute_hours_today' groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer,hr.group_hr_user'
  • hours_today Float
    compute='_compute_hours_today' groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer,hr.group_hr_user'
  • last_attendance_id Many2one → hr.attendance
    compute='_compute_last_attendance_id' groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer,hr.group_hr_user' index='btree_not_null' store=True args: 'hr.attendance'
  • last_attendance_worked_hours Float
    compute='_compute_hours_today' groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer,hr.group_hr_user'
  • last_check_in Datetime
    groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer,hr.group_hr_user' related='last_attendance_id.check_in' store=True tracking=False
  • last_check_out Datetime
    groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer,hr.group_hr_user' related='last_attendance_id.check_out' store=True tracking=False
  • today_attendance_ids Many2many → hr.attendance
    compute='_compute_hours_today' groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer,hr.group_hr_user' args: 'hr.attendance'
  • total_overtime Float
    compute='_compute_total_overtime'
Public methods (6)
  • action_archive(self)
  • action_open_last_month_attendances(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_attendance_data_by_employee(self, date_start, date_stop)
  • open_barcode_scanner(self)
  • write(self, vals)

New fields (10)
  • attendance_manager_id Many2one
    groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer' related='employee_id.attendance_manager_id'
  • attendance_state Selection
    groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer' readonly=True related='employee_id.attendance_state'
  • display_attendances Boolean
    related='employee_id.display_attendances'
  • hours_last_month Float
    related='employee_id.hours_last_month'
  • hours_last_month_overtime Float
    related='employee_id.hours_last_month_overtime'
  • hours_today Float
    groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer' readonly=True related='employee_id.hours_today'
  • last_attendance_id Many2one
    groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer' readonly=True related='employee_id.last_attendance_id'
  • last_check_in Datetime
    groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer' related='employee_id.last_check_in'
  • last_check_out Datetime
    groups='hr_attendance.group_hr_attendance_own,hr_attendance.group_hr_attendance_officer' related='employee_id.last_check_out'
  • total_overtime Float
    readonly=True related='employee_id.total_overtime'
Public methods (1)
  • action_open_last_month_attendances(self)

New fields (1)
  • condition_work_entry_type_ids Many2many
    default=<expr>
Public methods (0)

No public methods.

New fields (1)
  • attendance_based Boolean
    default=<expr> groups='hr.group_hr_user' help="When enabled, payslips are computed from badge records rather than the employee's work schedule. Time off is always accounted for." string='Attendance Based'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • lazy_session_info(self)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (20)
  • absence_management Boolean
    default=False string='Absence Management'
  • attendance_barcode_source Selection
    default='front' string='Barcode Source' args: [('scanner', 'Scanner'), ('front', 'Front Camera'), ('back', 'Back Camera')]
  • attendance_based Boolean
    default=False groups='hr.group_hr_user'
  • attendance_break_management Boolean
    help='If enabled, employees can record their total break duration after checking out.' string='Break Management on Checkout'
  • attendance_capture_check_in Boolean
    default=False string='Take Pictures on Check-In'
  • attendance_device_tracking Boolean
    default=False string='Device & Location Tracking'
  • attendance_from_systray Boolean
    default=True string='Attendance From Systray'
  • attendance_kiosk_delay Integer
    default=10
  • attendance_kiosk_key Char
    copy=False default=<expr> groups='hr_attendance.group_hr_attendance_user' init_storage='_init_column_attendance_kiosk_key'
  • attendance_kiosk_mode Selection
    default='barcode_manual' string='Attendance Mode' args: [('barcode', 'Barcode / RFID'), ('barcode_manual', 'Barcode / RFID and Manual Selection'), ('manual', 'Manual Selection')]
  • attendance_kiosk_url Char
    compute='_compute_attendance_kiosk_url'
  • attendance_kiosk_use_pin Boolean
    string='Employee PIN Identification'
  • attendance_validation Selection
    default='no_validation' string='Attendance Validation' args: [('no_validation', 'Worked days are automatically approved'), ('manual_validation', 'Worked days require manual approval'), ('tolerance_validation', 'Worked days require approval if outside tolerance')]
  • attendance_validation_tolerance Float
    default=0.0 string='Validation Tolerance (Hours)'
  • attendance_work_entry_type_id Many2one → hr.work.entry.type
    compute='_compute_attendance_work_entry_type_id' domain=[('count_as', '=', 'working_time')] groups='hr.group_hr_user' help='Work entry type assigned to attendances and read by the time rule engine.' readonly=False store=True string='Attendance Time Type' args: 'hr.work.entry.type'
  • auto_check_out Boolean
    default=False string='Automatic Check Out'
  • auto_check_out_mode Selection
    default='tolerance' args: [('tolerance', 'Tolerance'), ('specific_time', 'Specific Time')]
  • auto_check_out_specific_time Float
    default=20.0 export_string_translation=False
  • auto_check_out_tolerance Float
    default=2 export_string_translation=False
  • single_check_in Boolean
    string='Single Check-In Attendance System'
Public methods (0)

No public methods.

New fields (19)
  • absence_management Boolean
    readonly=False related='company_id.absence_management'
  • attendance_barcode_source Selection
    readonly=False related='company_id.attendance_barcode_source'
  • attendance_based Boolean
    groups='hr.group_hr_user' readonly=False related='company_id.attendance_based' string='Default Tracking'
  • attendance_break_management Boolean
    readonly=False related='company_id.attendance_break_management'
  • attendance_capture_check_in Boolean
    readonly=False related='company_id.attendance_capture_check_in'
  • attendance_device_tracking Boolean
    readonly=False related='company_id.attendance_device_tracking'
  • attendance_from_systray Boolean
    readonly=False related='company_id.attendance_from_systray'
  • attendance_kiosk_delay Integer
    readonly=False related='company_id.attendance_kiosk_delay'
  • attendance_kiosk_mode Selection
    readonly=False related='company_id.attendance_kiosk_mode'
  • attendance_kiosk_url Char
    related='company_id.attendance_kiosk_url'
  • attendance_kiosk_use_pin Boolean
    readonly=False related='company_id.attendance_kiosk_use_pin'
  • attendance_validation Selection
    readonly=False related='company_id.attendance_validation'
  • attendance_validation_tolerance Float
    readonly=False related='company_id.attendance_validation_tolerance'
  • attendance_work_entry_type_id Many2one
    readonly=False related='company_id.attendance_work_entry_type_id'
  • auto_check_out Boolean
    readonly=False related='company_id.auto_check_out'
  • auto_check_out_mode Selection
    readonly=False related='company_id.auto_check_out_mode'
  • auto_check_out_specific_time Float
    readonly=False related='company_id.auto_check_out_specific_time'
  • auto_check_out_tolerance Float
    readonly=False related='company_id.auto_check_out_tolerance'
  • single_check_in Boolean
    readonly=False related='company_id.single_check_in'
Public methods (2)
  • regenerate_kiosk_key(self)
  • set_values(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…