HR Attendance Sheet

hr_attendance_sheet
REPOSITORY
REPOSITORYOCA/hr-attendance
GIT
GIThttps://github.com/OCA/hr-attendance.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr-attendance/tree/14.0/hr_attendance_sheet
VERSION
VERSION 1.0.4
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Odoo S.A.
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Odoo S.A.
COMMITTERS
COMMITTERSGitHub, Enric Tobella, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Murtaza Mithaiwala, Urvisha-OSI
WEBSITE
WEBSITEhttps://github.com/OCA/hr-attendance
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:06
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr_attendance
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
hr_attendance_company_payment_window res.company notebook Inherits base.view_company_form
hr_attendance_employee_view_form hr.attendance.employee.form hr.employee group Inherits hr.view_employee_form
hr_attendance_sheet_attendance_view_form hr.attendance.sheet.attendance.form hr.attendance sheet Inherits hr_attendance.hr_attendance_view_form
hr_attendance_sheet_attendance_view_tree hr.attendance.sheet.attendance.tree hr.attendance field Inherits hr_attendance.view_attendance_tree
hr_attendance_sheet_view_form hr.attendance.sheet.form hr.attendance.sheet form New
hr_attendance_sheet_view_search hr.attendance.sheet.search hr.attendance.sheet search New
hr_attendance_sheet_view_tree hr.attendance.sheet.tree hr.attendance.sheet tree New
hr_department_view_form hr.department.form hr.department field Inherits hr.view_department_form
report_hr_attendance_sheet_document report_hr_attendance_sheet_document ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr.attendance res.config.settings xpath Inherits hr_attendance.res_config_settings_view_form
Models touched (7)

New fields (8)
  • attendance_admin Many2one → hr.employee
    help='In addition to the employees manager, this person can\n administer attendances for all employees in the department. This field\n is set on the department.' related='department_id.attendance_admin' string='Attendance Admin' args: 'hr.employee'
  • attendance_sheet_id Many2one → hr.attendance.sheet
    compute='_compute_attendance_sheet_id' store=True string='Sheet' args: 'hr.attendance.sheet'
  • auto_lunch Boolean
    help='If Auto Lunch is enabled and applied on this attendance.' string='Auto Lunch Applied'
  • auto_lunch_enabled Boolean
    related='company_id.auto_lunch' string='Auto Lunch Enabled'
  • company_id Many2one → res.company
    related='attendance_sheet_id.company_id' string='Company' args: 'res.company'
  • duration Float
    compute='_compute_duration' string='Duration (Hrs)'
  • override_auto_lunch Boolean
    help="Enable if you don't want the auto lunch to calculate." string='Override Auto Lunch'
  • override_reason Text
    help='State the reason you are overriding the auto lunch.' string='Override Reason'
Public methods (2)
  • unlink(self)
    Restrict to delete attendance from confirmed/locked sheet
  • write(self, vals)
    Restrict to write attendance from confirmed/locked sheet.

New fields (20)
  • active Boolean
    default=True string='Active'
  • attendance_admin Many2one → hr.employee
    help='In addition to the employees manager, this person can\n administer attendances for all employees in the department. This field\n is set on the department.' related='department_id.attendance_admin' string='Attendance Admin' args: 'hr.employee'
  • attendance_ids One2many → hr.attendance
    string='Attendances' args: 'hr.attendance', 'attendance_sheet_id'
  • can_review Boolean
    compute='_compute_can_review' search='_search_can_review' string='Can Review'
  • company_id Many2one → res.company
    related='employee_id.company_id' string='Company' args: 'res.company'
  • date_end Date
    index=True required=True string='Date To'
  • date_start Date
    index=True required=True string='Date From'
  • department_id Many2one → hr.department
    related='employee_id.department_id' string='Department' args: 'hr.department'
  • employee_id Many2one → hr.employee
    required=True string='Employee' args: 'hr.employee'
  • hours_to_work Float
    help='Expected working hours based on company policy. This is used on attendance sheets to calculate overtime values.' related='employee_id.hours_to_work' string='Hours to Work'
  • manager_id Many2one → hr.employee
    related='employee_id.parent_id' string='Manager' args: 'hr.employee'
  • name Char
    compute='_compute_name'
  • overtime Float
    compute='_compute_overtime' store=True
  • review_policy Selection
    related='company_id.attendance_sheet_review_policy' string='Review Policy'
  • reviewed_on Datetime
    readonly=True string='Reviewed On'
  • reviewer_id Many2one → hr.employee
    readonly=True string='Reviewer' tracking=True args: 'hr.employee'
  • state Selection
    default='draft' index=True readonly=True required=True string='Status' tracking=True args: [('draft', 'Draft'), ('confirm', 'Waiting Review'), ('done', 'Approved'), ('locked', 'Locked')]
  • total_time Float
    compute='_compute_total_time' store=True
  • user_id Many2one → res.users
    related='employee_id.user_id' store=True string='User' args: 'res.users'
  • working_hours Many2one → resource.calendar
    related='employee_id.resource_calendar_id' string='Working Hours' args: 'resource.calendar'
Public methods (11)
  • action_attendance_sheet_confirm(self)
    Restrict to submit sheet contains attendance without checkout.
  • action_attendance_sheet_done(self)
    Approve button.
  • action_attendance_sheet_draft(self)
    Convert to Draft button.
  • action_attendance_sheet_lock(self)
    Lock button to lock the sheet and prevent any changes.
  • action_attendance_sheet_refuse(self)
    Refuse button sending back to draft.
  • action_attendance_sheet_unlock(self)
    Unlock button, moves back to Confirm (Must have HR Group).
  • activity_update(self)
    Activity processing that shows in chatter for approval activity.
  • attendance_action_change(self)
    Call to perform Check In/Check Out action
  • check_pay_period_dates(self)
  • create(self, vals)
    @api.model
    On create, link existing attendances.
  • write(self, values)
    Prevent writing on a locked sheet.

New fields (1)
  • attendance_admin Many2one → hr.employee
    help='In addition to the employees manager, this person can\n administer attendances for all employees in the department.' string='Attendance Admin' args: 'hr.employee'
Public methods (0)

No public methods.

New fields (3)
  • attendance_admin Many2one → hr.employee
    help='In addition to the employees manager, this person can\n administer attendances for all employees in the department. This field\n is set on the department.' related='department_id.attendance_admin' string='Attendance Admin' args: 'hr.employee'
  • hours_to_work Float
    help='Expected working hours based on company policy. This is used on attendance sheets to calculate overtime values.' string='Hours to Work'
  • use_attendance_sheets Boolean
    help="Used in the attendance sheet auto creation process. Employees that have the 'Hourly' type will have attendance sheets automatically created" string='Use Attendance Sheets'
Public methods (0)

No public methods.

New fields (3)
  • attendance_admin Many2one → hr.employee
    help='In addition to the employees manager, this person can\n administer attendances for all employees in the department. This field\n is set on the department.' related='department_id.attendance_admin' string='Attendance Admin' args: 'hr.employee'
  • hours_to_work Float
    help='Expected working hours based on company policy. This is used on attendance sheets to calculate overtime values.' string='Hours to Work'
  • use_attendance_sheets Boolean
    help="Used in the attendance sheet auto creation process. Employees that have the 'Hourly' type will have attendance sheets automatically created" string='Use Attendance Sheets'
Public methods (0)

No public methods.

New fields (9)
  • attendance_sheet_range Selection
    default='WEEKLY' help='The range of your Attendance Sheet.' selection=[('MONTHLY', 'Month'), ('BIWEEKLY', 'Bi-Week'), ('WEEKLY', 'Week'), ('DAILY', 'Day')] string='Attendance Sheet Range'
  • attendance_sheet_review_policy Selection
    default='hr' help='How Attendance Sheets review is performed.' selection=[('hr', 'HR Manager/Officer'), ('employee_manager', "Employee's Manager or Attendance Admin"), ('hr_or_manager', "HR or Employee's Manager or Attendance Admin")] string='Attendance Sheet Review Policy'
  • attendance_week_start Selection
    default='0' selection=[('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')] string='Week Starting Day'
  • auto_lunch Boolean
    help='Applies a lunch period if duration is over the max time.' string='Auto Lunch'
  • auto_lunch_duration Float
    help='The duration on an attendance that would trigger an auto lunch.' string='Duration'
  • auto_lunch_hours Float
    help='Enter the lunch period that would be used for an auto lunch.' string='Lunch Hours'
  • date_end Date
    index=True readonly=True string='Date To'
  • date_start Date
    default=datetime.today().date() index=True string='Date From'
  • use_attendance_sheets Boolean
    default=False args: 'Use Attendance Sheets'
Public methods (4)
  • create(self, vals)
    @api.model
  • onchange_attendance_sheet_range(self)
    @api.onchange('attendance_sheet_range')
  • set_date_end(self, company)
  • write(self, vals)

New fields (6)
  • attendance_sheet_range Selection
    help='The range of your Attendance Sheet.' readonly=False related='company_id.attendance_sheet_range' string='Attendance Sheet Range'
  • attendance_sheet_review_policy Selection
    readonly=False related='company_id.attendance_sheet_review_policy'
  • attendance_week_start Selection
    help='Starting day for Attendance Sheets.' readonly=False related='company_id.attendance_week_start' string='Week Starting Day'
  • auto_lunch Boolean
    help='Forces a lunch period if duration is over the max time.' readonly=False related='company_id.auto_lunch' string='Auto Lunch'
  • auto_lunch_duration Float
    help='The duration on an attendance that would trigger an auto lunch.' readonly=False related='company_id.auto_lunch_duration' string='Duration'
  • auto_lunch_hours Float
    help='Enter the lunch period that would be used for an auto lunch.' readonly=False related='company_id.auto_lunch_hours' string='Lunch Hours'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/hr
GIT
GIThttps://github.com/OCA/hr.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr/tree/12.0/hr_attendance_sheet
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYHuman Resources
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Odoo S.A.
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Odoo S.A.
COMMITTERS
COMMITTERSoca-travis, Weblate, OCA-git-bot, Patrick Wilson
WEBSITE
WEBSITEhttps://github.com/OCA/hr
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr_attendance
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
hr_attendance_company_payment_window res.company notebook Inherits base.view_company_form
hr_attendance_employee_view_form hr.attendance.employee.form hr.employee field Inherits hr_attendance.view_employee_form_inherit_hr_attendance
hr_attendance_sheet_attendance_view_form hr.attendance.sheet.attendance.form hr.attendance sheet Inherits hr_attendance.hr_attendance_view_form
hr_attendance_sheet_attendance_view_tree hr.attendance.sheet.attendance.tree hr.attendance field Inherits hr_attendance.view_attendance_tree
hr_attendance_sheet_view_form hr.attendance.sheet.form hr.attendance.sheet form New
hr_attendance_sheet_view_search hr.attendance.sheet.search hr.attendance.sheet search New
hr_attendance_sheet_view_tree hr.attendance.sheet.tree hr.attendance.sheet tree New
hr_department_view_form hr.department.form hr.department field Inherits hr.view_department_form
report_hr_attendance_sheet_document report_hr_attendance_sheet_document ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.hr.attendance res.config.settings xpath Inherits hr_attendance.res_config_settings_view_form
Models touched (6)

New fields (8)
  • attendance_admin Many2one → hr.employee
    help='In addition to the employees manager, this person can\n administer attendances for all employees in the department. This field\n is set on the department.' related='department_id.attendance_admin' string='Attendance Admin' args: 'hr.employee'
  • attendance_sheet_id Many2one → hr.attendance.sheet
    compute='_compute_attendance_sheet_id' store=True string='Sheet' args: 'hr.attendance.sheet'
  • auto_lunch Boolean
    help='If Auto Lunch is enabled and applied on this attendance.' string='Auto Lunch Applied'
  • auto_lunch_enabled Boolean
    related='company_id.auto_lunch' string='Auto Lunch Enabled'
  • company_id Many2one → res.company
    related='attendance_sheet_id.company_id' string='Company' args: 'res.company'
  • duration Float
    compute='_compute_duration' string='Duration (Hrs)'
  • override_auto_lunch Boolean
    help="Enable if you don't want the auto lunch to calculate." string='Override Auto Lunch'
  • override_reason Text
    help='State the reason you are overriding the auto lunch.' string='Override Reason'
Public methods (2)
  • unlink(self)
    @api.multi
    Restrict to delete attendance from confirmed/locked sheet
  • write(self, vals)
    @api.multi
    Restrict to write attendance from confirmed/locked sheet.

New fields (20)
  • active Boolean
    default=True string='Active'
  • attendance_admin Many2one → hr.employee
    help='In addition to the employees manager, this person can\n administer attendances for all employees in the department. This field\n is set on the department.' related='department_id.attendance_admin' string='Attendance Admin' args: 'hr.employee'
  • attendance_ids One2many → hr.attendance
    string='Attendances' args: 'hr.attendance', 'attendance_sheet_id'
  • can_review Boolean
    compute='_compute_can_review' search='_search_can_review' string='Can Review'
  • company_id Many2one → res.company
    related='employee_id.company_id' string='Company' args: 'res.company'
  • date_end Date
    index=True required=True string='Date To'
  • date_start Date
    index=True required=True string='Date From'
  • department_id Many2one → hr.department
    related='employee_id.department_id' string='Department' args: 'hr.department'
  • employee_id Many2one → hr.employee
    required=True string='Employee' args: 'hr.employee'
  • hours_to_work Float
    help='Expected working hours based on company policy. This is used on attendance sheets to calculate overtime values.' related='employee_id.hours_to_work' string='Hours to Work'
  • manager_id Many2one → hr.employee
    related='employee_id.parent_id' string='Manager' args: 'hr.employee'
  • name Char
    compute='_compute_name' context_dependent=True
  • overtime Float
    compute='_compute_overtime' store=True
  • review_policy Selection
    related='company_id.attendance_sheet_review_policy' string='Review Policy'
  • reviewed_on Datetime
    readonly=True string='Reviewed On'
  • reviewer_id Many2one → hr.employee
    readonly=True string='Reviewer' track_visibility='onchange' args: 'hr.employee'
  • state Selection
    default='draft' index=True readonly=True required=True string='Status' track_visibility='onchange' args: [('draft', 'Draft'), ('confirm', 'Waiting Review'), ('done', 'Approved'), ('locked', 'Locked')]
  • total_time Float
    compute='_compute_total_time' store=True
  • user_id Many2one → res.users
    related='employee_id.user_id' store=True string='User' args: 'res.users'
  • working_hours Many2one → resource.calendar
    related='employee_id.resource_calendar_id' string='Working Hours' args: 'resource.calendar'
Public methods (11)
  • action_attendance_sheet_confirm(self)
    @api.multi
    Restrict to submit sheet contains attendance without checkout.
  • action_attendance_sheet_done(self)
    @api.multi
    Approve button.
  • action_attendance_sheet_draft(self)
    @api.multi
    Convert to Draft button.
  • action_attendance_sheet_lock(self)
    @api.multi
    Lock button to lock the sheet and prevent any changes.
  • action_attendance_sheet_refuse(self)
    @api.multi
    Refuse button sending back to draft.
  • action_attendance_sheet_unlock(self)
    @api.multi
    Unlock button, moves back to Confirm (Must have HR Group).
  • activity_update(self)
    Activity processing that shows in chatter for approval activity.
  • attendance_action_change(self)
    @api.multi
    Call to perform Check In/Check Out action
  • check_pay_period_dates(self)
  • create(self, vals)
    @api.model
    On create, link existing attendances.
  • write(self, values)
    @api.multi
    Prevent writing on a locked sheet.

New fields (1)
  • attendance_admin Many2one → hr.employee
    help='In addition to the employees manager, this person can\n administer attendances for all employees in the department.' string='Attendance Admin' args: 'hr.employee'
Public methods (0)

No public methods.

New fields (3)
  • attendance_admin Many2one → hr.employee
    help='In addition to the employees manager, this person can\n administer attendances for all employees in the department. This field\n is set on the department.' related='department_id.attendance_admin' string='Attendance Admin' args: 'hr.employee'
  • hours_to_work Float
    help='Expected working hours based on company policy. This is used on attendance sheets to calculate overtime values.' string='Hours to Work'
  • use_attendance_sheets Boolean
    help="Used in the attendance sheet auto creation process. Employees that have the 'Hourly' type will have attendance sheets automatically created" string='Use Attendance Sheets'
Public methods (0)

No public methods.

New fields (9)
  • attendance_sheet_range Selection
    default='WEEKLY' help='The range of your Attendance Sheet.' selection=[('MONTHLY', 'Month'), ('BIWEEKLY', 'Bi-Week'), ('WEEKLY', 'Week'), ('DAILY', 'Day')] string='Attendance Sheet Range'
  • attendance_sheet_review_policy Selection
    default='hr' help='How Attendance Sheets review is performed.' selection=[('hr', 'HR Manager/Officer'), ('employee_manager', "Employee's Manager or Attendance Admin"), ('hr_or_manager', "HR or Employee's Manager or Attendance Admin")] string='Attendance Sheet Review Policy'
  • attendance_week_start Selection
    default='0' selection=[('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')] string='Week Starting Day'
  • auto_lunch Boolean
    help='Applies a lunch period if duration is over the max time.' string='Auto Lunch'
  • auto_lunch_duration Float
    help='The duration on an attendance that would trigger an auto lunch.' string='Duration'
  • auto_lunch_hours Float
    help='Enter the lunch period that would be used for an auto lunch.' string='Lunch Hours'
  • date_end Date
    index=True readonly=True string='Date To'
  • date_start Date
    default=datetime.today().date() index=True string='Date From'
  • use_attendance_sheets Boolean
    default=False args: 'Use Attendance Sheets'
Public methods (4)
  • create(self, vals)
    @api.model
  • onchange_attendance_sheet_range(self)
    @api.onchange('attendance_sheet_range')
  • set_date_end(self, company)
  • write(self, vals)
    @api.multi

New fields (6)
  • attendance_sheet_range Selection
    help='The range of your Attendance Sheet.' readonly=False related='company_id.attendance_sheet_range' string='Attendance Sheet Range'
  • attendance_sheet_review_policy Selection
    readonly=False related='company_id.attendance_sheet_review_policy'
  • attendance_week_start Selection
    help='Starting day for Attendance Sheets.' readonly=False related='company_id.attendance_week_start' string='Week Starting Day'
  • auto_lunch Boolean
    help='Forces a lunch period if duration is over the max time.' readonly=False related='company_id.auto_lunch' string='Auto Lunch'
  • auto_lunch_duration Float
    help='The duration on an attendance that would trigger an auto lunch.' readonly=False related='company_id.auto_lunch_duration' string='Duration'
  • auto_lunch_hours Float
    help='Enter the lunch period that would be used for an auto lunch.' readonly=False related='company_id.auto_lunch_hours' string='Lunch Hours'
Public methods (0)

No public methods.