TIP: You can type at any time to perform a new search.
Attendances
hr_attendance · odoo/odoo
- Repository
- odoo/odoo · module folder
- Module version
- 2.0
- Category
- Human Resources/Attendances
- Folder size
- 5.44 MB
- License
- LGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://www.odoo.com/app/employees
- Last tracking update
- 2026-08-21 10:10:59
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Xavier Morel, Fabien Pinckaers, Raphael Collet, Thibault Delavallée, Odoo Translation Bot, Nicolas Martinelli, Yannick Tivisse, Odoo Online, Jorge Pinna Puissant, Alexandre Kühn, Julien Castiaux, Luis Torres, Sébastien Theys, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, Romain Estievenart, Miquel Raïch, Ahmad Khanalizadeh, william-andre, Dossogne Bertrand, Louis Wicket (wil), Gaetan Vanden Bergh (gavb), Yash Vaishnav, Dylan Kiss (dyki), Mayurrajsinh Rathod, Odoo, Xavier Bol (xbo), Walid (wasa), Mélanie, Youssef Bashandy, reka-odoo, jugj-odoo, Tanguy Quéguineur, Martin Trigaux (mat), nihp-odoo, aamo-odoo, rmun-odoo, thle-odoo, Mathieu Coutant, kais-odoo, Abdelrahman Mahmoud (amah), Léo Gizard, ahta, Ezzuldin Zaky (ezza), sben-odoo, Anton Romanova (roan), Bastien PIERRE, Mahdi Alijani (malj), Krzysztof Magusiak (krma), Ajit Singh, krip-odoo, Hazem Ibrahim, Maeva De Keyser (MDEK), Harrison Hutton, Tyler Landivar (tylan), pajo, Bertrand Dossogne, romc-odoo, Ian Cioppa (iacio), adip-odoo, Quentin Colla (qucol), path-odoo, Ayush Modi, lrizzi1, Amr Elkhatieb, assh-odoo, Elliot ELCO, khom-odoo, Ziri, renol-odoo, saurabh, lebm-odoo, Zachary (zavan), Jurgen Gjini, Federico Falcone, Mahmoudk3m, Martin Lefèvre (mlef), khah-odoo, karygauss03, Manal El Kaidi (maelk), K, djsh-odoo, Yahia, chpa-odoo, Faruk Avcı, amga-odoo, Kishan (kiga), hamza, SurryaT10, Mélanie Peyrat (mepe), Mohammed Farouk, Nat (naja), Ahmed Naem (Ahnae), Mohamed (moaln), Mohamed-moali, ESTEBAN Lucas, arpi-odoo, satp-odoo
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- hr_attendance_report_theoretical_time, 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 ⓘ
Views touched (25)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
expected_hours_from_contract_no |
expected_hours_from_contract_no | ir.ui.view | qweb | New |
expected_hours_from_contract_yes |
expected_hours_from_contract_yes | ir.ui.view | qweb | New |
hr_attendance.public_kiosk_mode |
Attendance Kiosk | ir.ui.view | qweb | New |
hr_attendance_employee_simple_form_view |
hr.attendance.form | hr.attendance | form | Inherits hr_attendance.hr_attendance_view_form |
hr_attendance_employee_simple_tree_view |
hr.attendance.list | hr.attendance | list | New |
hr_attendance_management_view_filter |
hr_attendance_management_view_filter | hr.attendance | search | New |
hr_attendance_overtime_rule_view_form |
hr.attendance.overtime.rule.form | hr.attendance.overtime.rule | form | New |
hr_attendance_overtime_rule_view_list |
hr.attendance.overtime.rule.list | hr.attendance.overtime.rule | list | New |
hr_attendance_overtime_ruleset_view_filter |
hr_attendance_overtime_ruleset_view_filter | hr.attendance.overtime.ruleset | search | New |
hr_attendance_overtime_ruleset_view_form |
hr.attendance.overtime.ruleset.form | hr.attendance.overtime.ruleset | form | New |
hr_attendance_overtime_ruleset_view_list |
hr.attendance.overtime.ruleset.list | hr.attendance.overtime.ruleset | list | New |
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_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 |
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 (13)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/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/attendance_barcode_scanned |
HrAttendance.scan_barcode_with_geolocation |
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/attendance_user_data |
HrAttendance.user_attendance_data |
user | jsonrpc | ALL |
Models touched (11)
New fields (28)
-
attendance_manager_idMany2one → res.usersexport_string_translation=Falserelated='employee_id.attendance_manager_id' args: 'res.users' -
check_inDatetimedefault=fields.Datetime.nowindex=Truerequired=Truestring='Check In'tracking=True -
check_outDatetimestring='Check Out'tracking=True -
colorIntegercompute='_compute_color' -
dateDatecompute='_compute_date'index=Trueprecompute=Truerequired=Truestore=Truestring='Date' -
department_idMany2one → hr.departmentreadonly=Truerelated='employee_id.department_id'string='Department' args: 'hr.department' -
device_tracking_enabledBooleanrelated='employee_id.company_id.attendance_device_tracking' -
employee_idMany2one → hr.employeedefault=_default_employeegroup_expand='_read_group_employee_id'index=Trueondelete='cascade'required=Truestring='Employee' args: 'hr.employee' -
expected_hoursFloataggregator='sum'compute='_compute_expected_hours'store=Truestring='Regular Hours' -
in_browserCharreadonly=Truestring='Browser' -
in_ip_addressCharreadonly=Truestring='IP Address' -
in_latitudeFloataggregator=Nonedigits=(10, 7)readonly=Truestring='Latitude' -
in_locationCharhelp='Based on GPS-Coordinates if available or on IP Address' -
in_longitudeFloataggregator=Nonedigits=(10, 7)readonly=Truestring='Longitude' -
in_modeSelectiondefault='manual'readonly=Trueselection=[('kiosk', 'Kiosk'), ('systray', 'Systray'), ('manual', 'Manual'), ('technical', 'Technical')]string='Mode' -
is_managerBooleancompute='_compute_is_manager' -
linked_overtime_idsMany2many → hr.attendance.overtime.linecompute='_compute_linked_overtime_ids'readonly=False args: 'hr.attendance.overtime.line' -
manager_idMany2one → hr.employeecomodel_name='hr.employee'export_string_translation=Falsereadonly=Truerelated='employee_id.parent_id' -
out_browserCharreadonly=True -
out_ip_addressCharreadonly=True -
out_latitudeFloataggregator=Nonedigits=(10, 7)readonly=True -
out_locationCharhelp='Based on GPS-Coordinates if available or on IP Address' -
out_longitudeFloataggregator=Nonedigits=(10, 7)readonly=True -
out_modeSelectiondefault='manual'readonly=Trueselection=[('kiosk', 'Kiosk'), ('systray', 'Systray'), ('manual', 'Manual'), ('technical', 'Technical'), ('auto_check_out', 'Automatic Check-Out')] -
overtime_hoursFloatcompute='_compute_overtime_hours'store=Truestring='Worked Extra Hours' -
overtime_statusSelectioncompute='_compute_overtime_status'readonly=Falseselection=[('to_approve', 'To Approve'), ('approved', 'Approved'), ('refused', 'Refused')]store=Truetracking=True -
validated_overtime_hoursFloatcompute='_compute_validated_overtime_hours'readonly=Truestore=Truestring='Validated Extra Hours'tracking=True -
worked_hoursFloatcompute='_compute_worked_hours'readonly=Truestore=Truestring='Worked Hours'
-
action_approve_overtime(self) -
action_in_attendance_maps(self) -
action_out_attendance_maps(self) -
action_refuse_overtime(self) -
action_try_kiosk(self) -
copy(self, default=None) -
create(self, vals_list)@api.model_create_multi -
get_kiosk_url(self) -
has_demo_data(self)@api.model -
unlink(self) -
write(self, vals)
New fields (11)
-
amount_rateFloatdefault=1.0required=True args: 'Overtime pay rate' -
company_idMany2onerelated='employee_id.company_id' -
dateDateindex=Truerequired=Truestring='Day' -
durationFloatdefault=0.0required=Truestring='Extra Hours' -
employee_idMany2one → hr.employeeindex=Trueondelete='cascade'required=Truestring='Employee' args: 'hr.employee' -
is_managerBooleancompute='_compute_is_manager' -
manual_durationFloatcompute='_compute_manual_duration'readonly=Falsestore=Truestring='Extra Hours (encoded)' -
rule_idsMany2many → hr.attendance.overtime.rulestring='Applied Rules' args: 'hr.attendance.overtime.rule' -
statusSelectioncompute='_compute_status'precompute=Truereadonly=Falserequired=Truestore=True args: [('to_approve', 'To Approve'), ('approved', 'Approved'), ('refused', 'Refused')] -
time_startDatetimestring='Start' -
time_stopDatetimestring='Stop'
-
action_approve(self) -
action_refuse(self) -
write(self, vals)
New fields (18)
-
amount_rateFloatdefault=1.0 args: 'Rate' -
base_offSelectiondefault='quantity'help="Base for overtime calculation.\nUse 'Quantity' when overtime hours are those in excess of a certain amount per day/week.\nUse 'Timing' when overtime hours happen on specific days or at specific times"required=Truestring='Based Off' args: [('quantity', 'Quantity'), ('timing', 'Timing')] -
company_idMany2onerelated='ruleset_id.company_id' -
descriptionHtml -
employee_toleranceFloat -
employer_toleranceFloat -
expected_hoursFloatstring='Usual work hours' -
expected_hours_from_contractBooleandefault=Truehelp='The attendance can go into negative extra hours to represent the missing hours compared to what is expected if the Absence Management setting is enabled.' args: 'Hours from employee schedule' -
information_displayCharcompute='_compute_information_display' args: 'Information' -
nameCharrequired=True -
paidBooleanargs: 'Pay Extra Hours' -
quantity_periodSelectiondefault='day' args: [('day', 'Day'), ('week', 'Week')] -
resource_calendar_idMany2one → resource.calendardomain=[('flexible_hours', '=', False)]string='Schedule' args: 'resource.calendar' -
ruleset_idMany2one → hr.attendance.overtime.rulesetindex=Truerequired=True args: 'hr.attendance.overtime.ruleset' -
sequenceIntegerdefault=10 -
timing_startFloatdefault=0 args: 'From' -
timing_stopFloatdefault=24 args: 'To' -
timing_typeSelectiondefault='work_days' args: [('work_days', 'On any working day'), ('non_work_days', 'On any non-working day'), ('leave', 'When employee is off'), ('schedule', 'Outside of a specific schedule')]
No public methods.
New fields (8)
-
activeBooleandefault=Truereadonly=False -
company_idMany2one → res.companydefault=<expr> args: 'res.company', 'Company' -
country_idMany2one → res.countrydefault=<expr> args: 'res.country' -
descriptionHtml -
nameCharrequired=True -
rate_combination_modeSelectiondefault='max'help='Controls how the rates from the different rules that apply are combined.\n Max: use the highest rate. (e.g.: combined for 150% and 120 = 150%)\n Sum: sum the *extra* pay (i.e. above 100%).\n e.g.: combined rate for 150% & 120% = 100% (baseline) + (150-100)% + (120-100)% = 170%\n'required=Truestring='Rate Combination Mode' args: [('max', 'Maximum Rate'), ('sum', 'Sum of all rates')] -
rule_idsOne2many → hr.attendance.overtime.ruleargs: 'hr.attendance.overtime.rule', 'ruleset_id' -
rules_countIntegercompute='_compute_rules_count'
-
action_regenerate_overtimes(self)
New fields (17)
-
attendance_idsOne2many → hr.attendancegroups='hr_attendance.group_hr_attendance_officer,hr.group_hr_user' args: 'hr.attendance', 'employee_id' -
attendance_manager_idMany2one → res.usersdomain="[('share', '=', False), ('company_ids', 'in', company_id)]"groups='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=Falsestore=Truestring='Attendance Approver' args: 'res.users' -
attendance_stateSelectioncompute='_compute_attendance_state'groups='hr_attendance.group_hr_attendance_officer,hr.group_hr_user'selection=[('checked_out', 'Checked out'), ('checked_in', 'Checked in')]string='Attendance Status' -
display_attendancesBooleancompute='_compute_display_attendances' -
display_extra_hoursBooleanrelated='company_id.hr_attendance_display_overtime' -
hours_last_monthFloatcompute='_compute_hours_last_month' -
hours_last_month_displayCharcompute='_compute_hours_last_month'groups='hr.group_hr_user' -
hours_last_month_overtimeFloatcompute='_compute_hours_last_month' -
hours_previously_todayFloatcompute='_compute_hours_today'groups='hr_attendance.group_hr_attendance_officer,hr.group_hr_user' -
hours_todayFloatcompute='_compute_hours_today'groups='hr_attendance.group_hr_attendance_officer,hr.group_hr_user' -
last_attendance_idMany2one → hr.attendancecompute='_compute_last_attendance_id'groups='hr_attendance.group_hr_attendance_officer,hr.group_hr_user'store=True args: 'hr.attendance' -
last_attendance_worked_hoursFloatcompute='_compute_hours_today'groups='hr_attendance.group_hr_attendance_officer,hr.group_hr_user' -
last_check_inDatetimegroups='hr_attendance.group_hr_attendance_officer,hr.group_hr_user'related='last_attendance_id.check_in'store=Truetracking=False -
last_check_outDatetimegroups='hr_attendance.group_hr_attendance_officer,hr.group_hr_user'related='last_attendance_id.check_out'store=Truetracking=False -
overtime_idsOne2many → hr.attendance.overtime.linegroups='hr_attendance.group_hr_attendance_officer,hr.group_hr_user' args: 'hr.attendance.overtime.line', 'employee_id' -
ruleset_idMany2onegroups='hr.group_hr_manager'inherited=Truereadonly=Falserelated='version_id.ruleset_id' -
total_overtimeFloatcompute='_compute_total_overtime'
-
action_archive(self) -
action_open_last_month_attendances(self) -
create(self, vals_list)@api.model_create_multi -
get_overtime_data(self, domain=None, employee_id=None)@api.model -
open_barcode_scanner(self) -
write(self, vals)
New fields (11)
-
attendance_manager_idMany2onegroups='hr_attendance.group_hr_attendance_officer'related='employee_id.attendance_manager_id' -
attendance_stateSelectiongroups='hr_attendance.group_hr_attendance_officer'readonly=Truerelated='employee_id.attendance_state' -
display_attendancesBooleanrelated='employee_id.display_attendances' -
display_extra_hoursBooleanrelated='company_id.hr_attendance_display_overtime' -
hours_last_monthFloatrelated='employee_id.hours_last_month' -
hours_last_month_overtimeFloatrelated='employee_id.hours_last_month_overtime' -
hours_todayFloatgroups='hr_attendance.group_hr_attendance_officer'readonly=Truerelated='employee_id.hours_today' -
last_attendance_idMany2onegroups='hr_attendance.group_hr_attendance_officer'readonly=Truerelated='employee_id.last_attendance_id' -
last_check_inDatetimegroups='hr_attendance.group_hr_attendance_officer'related='employee_id.last_check_in' -
last_check_outDatetimegroups='hr_attendance.group_hr_attendance_officer'related='employee_id.last_check_out' -
total_overtimeFloatreadonly=Truerelated='employee_id.total_overtime'
-
action_open_last_month_attendances(self)
New fields (1)
-
ruleset_idMany2one → hr.attendance.overtime.rulesetdefault=<expr>domain=_domain_current_countriesgroups='hr.group_hr_manager'tracking=True args: 'hr.attendance.overtime.ruleset'
No public methods.
New fields (0)
No new fields.
Public methods (1)-
lazy_session_info(self)@api.model
New fields (15)
-
absence_managementBooleandefault=Falsestring='Absence Management' -
attendance_barcode_sourceSelectiondefault='front'string='Barcode Source' args: [('scanner', 'Scanner'), ('front', 'Front Camera'), ('back', 'Back Camera')] -
attendance_device_trackingBooleandefault=Falsestring='Device & Location Tracking' -
attendance_from_systrayBooleandefault=Falsestring='Attendance From Systray' -
attendance_kiosk_delayIntegerdefault=10 -
attendance_kiosk_keyCharcopy=Falsedefault=<expr>groups='hr_attendance.group_hr_attendance_user' -
attendance_kiosk_modeSelectiondefault='barcode_manual'string='Attendance Mode' args: [('barcode', 'Barcode / RFID'), ('barcode_manual', 'Barcode / RFID and Manual Selection'), ('manual', 'Manual Selection')] -
attendance_kiosk_urlCharcompute='_compute_attendance_kiosk_url' -
attendance_kiosk_use_pinBooleanstring='Employee PIN Identification' -
attendance_overtime_validationSelectiondefault='no_validation'string='Extra Hours Validation' args: [('no_validation', 'Automatically Approved'), ('by_manager', 'Approved by Manager')] -
auto_check_outBooleandefault=Falsestring='Automatic Check Out' -
auto_check_out_toleranceFloatdefault=2export_string_translation=False -
hr_attendance_display_overtimeBooleanstring='Display Extra Hours' -
overtime_company_thresholdIntegerdefault=0string='Tolerance Time In Favor Of Company' -
overtime_employee_thresholdIntegerdefault=0string='Tolerance Time In Favor Of Employee'
-
write(self, vals)
New fields (14)
-
absence_managementBooleanreadonly=Falserelated='company_id.absence_management' -
attendance_barcode_sourceSelectionreadonly=Falserelated='company_id.attendance_barcode_source' -
attendance_device_trackingBooleanreadonly=Falserelated='company_id.attendance_device_tracking' -
attendance_from_systrayBooleanreadonly=Falserelated='company_id.attendance_from_systray' -
attendance_kiosk_delayIntegerreadonly=Falserelated='company_id.attendance_kiosk_delay' -
attendance_kiosk_modeSelectionreadonly=Falserelated='company_id.attendance_kiosk_mode' -
attendance_kiosk_urlCharrelated='company_id.attendance_kiosk_url' -
attendance_kiosk_use_pinBooleanreadonly=Falserelated='company_id.attendance_kiosk_use_pin' -
attendance_overtime_validationSelectionreadonly=Falserelated='company_id.attendance_overtime_validation' -
auto_check_outBooleanreadonly=Falserelated='company_id.auto_check_out' -
auto_check_out_toleranceFloatreadonly=Falserelated='company_id.auto_check_out_tolerance' -
hr_attendance_display_overtimeBooleanreadonly=Falserelated='company_id.hr_attendance_display_overtime' -
overtime_company_thresholdIntegerreadonly=Falsestring='Tolerance Time In Favor Of Company' -
overtime_employee_thresholdIntegerreadonly=Falsestring='Tolerance Time In Favor Of Employee'
-
get_values(self)@api.model -
regenerate_kiosk_key(self) -
set_values(self)
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…