HR Payroll Period

hr_payroll_period
REPOSITORY
REPOSITORYOCA/payroll
GIT
GIThttps://github.com/OCA/payroll.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/payroll/tree/16.0/hr_payroll_period
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYPayroll
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Gil Arasa Verge, CristianoMafraJunior, Gil Arasa
WEBSITE
WEBSITEhttps://github.com/OCA/payroll
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/payroll:
    - payroll
OCA/server-ux:
    - date_range
odoo/odoo:
    - hr_contract
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - hr_holidays
    - calendar
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
hr_payslip_run_filter hr.payslip.run.period.search hr.payslip.run field Inherits payroll.hr_payslip_run_view_search
hr_payslip_run_form hr.payslip.run.period.form hr.payslip.run field Inherits payroll.hr_payslip_run_view_form
hr_payslip_run_tree hr.payslip.run.period.tree hr.payslip.run field Inherits payroll.hr_payslip_run_view_tree
view_date_range_type_hr_form_view date.range.type.hr.form date.range.type form New
view_date_range_type_hr_tree date.range.type.hr.tree date.range.type tree New
view_hr_fiscalyear_form hr.fiscalyear.form hr.fiscalyear form New
view_hr_fiscalyear_search hr.fiscalyear.search hr.fiscalyear search New
view_hr_fiscalyear_tree hr.fiscalyear.tree hr.fiscalyear tree New
view_hr_payslip_by_employees hr_payroll_payslip_employees hr.payslip.employees field Inherits payroll.view_hr_payslip_by_employees
view_hr_payslip_filter hr.payslip.period.select hr.payslip field Inherits payroll.hr_payslip_view_search
view_hr_payslip_form hr.payslip.period.form hr.payslip field Inherits payroll.hr_payslip_view_form
view_hr_payslip_tree hr.payslip.period.tree hr.payslip field Inherits payroll.hr_payslip_view_tree
view_hr_period_form hr.period.form hr.period form New
view_hr_period_search hr.period.search hr.period search New
view_hr_period_tree hr.period.tree hr.period tree New
Models touched (8)

New fields (2)
  • hr_fiscal_year Boolean
    string='Is HR Fiscal Year?'
  • hr_period Boolean
    string='Is HR period?'
Public methods (0)

No public methods.

New fields (1)
  • schedule_pay Selection
    index=True args: get_schedules
Public methods (0)

No public methods.

New fields (1)
  • contract_id Many2one → hr.contract
    comodel_name='hr.contract' search='_search_contract'
Public methods (0)

No public methods.

New fields (7)
  • payment_day Selection
    states={'draft': [('readonly', False)]} args: get_payment_days, 'Day of Payment'
  • payment_week Selection
    states={'draft': [('readonly', False)]} args: [('0', 'Same Week'), ('1', 'Following Week'), ('2', 'Second Following Week')], 'Week of Payment'
  • payment_weekday Selection
    states={'draft': [('readonly', False)]} args: [('0', 'Sunday'), ('1', 'Monday'), ('2', 'Tuesday'), ('3', 'Wednesday'), ('4', 'Thursday'), ('5', 'Friday'), ('6', 'Saturday')], 'Weekday of Payment'
  • period_ids One2many → hr.period
    states={'draft': [('readonly', False)]} args: 'hr.period', 'fiscalyear_id', 'Periods'
  • schedule_pay Selection
    default='monthly' required=True states={'draft': [('readonly', False)]} args: get_schedules
  • state Selection
    default='draft' args: [('draft', 'Draft'), ('open', 'Open'), ('done', 'Closed')], 'Status'
  • type_id Many2one
    default=_default_type domain=[('hr_fiscal_year', '=', True)]
Public methods (8)
  • button_confirm(self)
  • button_set_to_draft(self)
  • create_periods(self)
    Create every periods a payroll fiscal year
  • cron_create_next_fiscal_year(self)
    @api.model
  • get_generator_vals(self)
  • get_ranges(self)
  • onchange_schedule(self)
    @api.onchange('schedule_pay', 'date_start')
  • search_period(self, number)

New fields (2)
  • date_payment Date
    readonly=True states={'draft': [('readonly', False)]} args: 'Date of Payment'
  • hr_period_id Many2one → hr.period
    readonly=True states={'draft': [('readonly', False)]} string='Period' args: 'hr.period'
Public methods (4)
  • create(self, vals)
    @api.model
  • onchange_company_id(self)
    @api.onchange('company_id', 'contract_id')
  • onchange_contract_period(self)
    @api.onchange('contract_id')
  • onchange_hr_period_id(self)
    @api.onchange('hr_period_id')

New fields (2)
  • company_id Many2one → res.company
    readonly=True args: 'res.company', 'Company'
  • schedule_pay Selection
    readonly=True args: get_schedules
Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one → res.company
    default=<expr> states={'close': [('readonly', True)]} args: 'res.company', 'Company'
  • date_payment Date
    states={'close': [('readonly', True)]} args: 'Date of Payment'
  • hr_period_id Many2one → hr.period
    states={'close': [('readonly', True)]} string='Period' args: 'hr.period'
  • name Char
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]}
  • schedule_pay Selection
    states={'close': [('readonly', True)]} args: get_schedules
Public methods (8)
  • close_payslip_run(self)
  • create(self, vals)
    @api.model
    Keep compatibility between modules
  • draft_payslip_run(self)
  • get_default_schedule(self, company_id)
    @api.model
  • get_payslip_employees_wizard(self)
    Replace the static action used to call the wizard
  • onchange_company_id(self)
    @api.onchange('company_id', 'schedule_pay')
  • onchange_period_id(self)
    @api.onchange('hr_period_id')
  • update_periods(self)

New fields (9)
  • company_id Many2one → res.company
    readonly=True related='fiscalyear_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_payment Date
    required=True states={'draft': [('readonly', False)]} args: 'Date of Payment'
  • fiscalyear_id Many2one → hr.fiscalyear
    ondelete='cascade' required=True states={'draft': [('readonly', False)]} args: 'hr.fiscalyear', 'Fiscal Year'
  • name Char
    required=True states={'draft': [('readonly', False)]}
  • number Integer
    required=True states={'draft': [('readonly', False)]}
  • payslip_ids One2many → hr.payslip
    readonly=True args: 'hr.payslip', 'hr_period_id', 'Payslips'
  • schedule_pay Selection
    default='monthly' required=True states={'draft': [('readonly', False)]} args: get_schedules
  • state Selection
    default='draft' required=True args: [('draft', 'Draft'), ('open', 'Open'), ('done', 'Closed')], 'Status'
  • type_id Many2one
    default=_default_type domain=[('hr_period', '=', True)]
Public methods (5)
  • button_close(self)
  • button_open(self)
  • button_re_open(self)
  • button_set_to_draft(self)
  • get_next_period(self, company_id, schedule_pay)
    @api.model
    Get the next payroll period to process :rtype: hr.period browse record
REPOSITORY
REPOSITORYOCA/payroll
GIT
GIThttps://github.com/OCA/payroll.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/payroll/tree/15.0/hr_payroll_period
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYPayroll
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSAaronHForgeFlow, Weblate, OCA-git-bot, oca-ci, Juany Davila
WEBSITE
WEBSITEhttps://github.com/OCA/payroll
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/payroll:
    - payroll
OCA/server-ux:
    - date_range
odoo/odoo:
    - hr_contract
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - hr_holidays
    - calendar
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
hr_payslip_run_filter hr.payslip.run.period.search hr.payslip.run field Inherits payroll.hr_payslip_run_view_search
hr_payslip_run_form hr.payslip.run.period.form hr.payslip.run field Inherits payroll.hr_payslip_run_view_form
hr_payslip_run_tree hr.payslip.run.period.tree hr.payslip.run field Inherits payroll.hr_payslip_run_view_tree
view_date_range_type_hr_form_view date.range.type.hr.form date.range.type form New
view_date_range_type_hr_tree date.range.type.hr.tree date.range.type tree New
view_hr_fiscalyear_form hr.fiscalyear.form hr.fiscalyear form New
view_hr_fiscalyear_search hr.fiscalyear.search hr.fiscalyear search New
view_hr_fiscalyear_tree hr.fiscalyear.tree hr.fiscalyear tree New
view_hr_payslip_by_employees hr_payroll_payslip_employees hr.payslip.employees field Inherits payroll.view_hr_payslip_by_employees
view_hr_payslip_filter hr.payslip.period.select hr.payslip field Inherits payroll.hr_payslip_view_search
view_hr_payslip_form hr.payslip.period.form hr.payslip field Inherits payroll.hr_payslip_view_form
view_hr_payslip_tree hr.payslip.period.tree hr.payslip field Inherits payroll.hr_payslip_view_tree
view_hr_period_form hr.period.form hr.period form New
view_hr_period_search hr.period.search hr.period search New
view_hr_period_tree hr.period.tree hr.period tree New
Models touched (8)

New fields (2)
  • hr_fiscal_year Boolean
    string='Is HR Fiscal Year?'
  • hr_period Boolean
    string='Is HR period?'
Public methods (0)

No public methods.

New fields (1)
  • schedule_pay Selection
    index=True args: get_schedules
Public methods (0)

No public methods.

New fields (1)
  • contract_id Many2one → hr.contract
    comodel_name='hr.contract' search='_search_contract'
Public methods (0)

No public methods.

New fields (7)
  • payment_day Selection
    states={'draft': [('readonly', False)]} args: get_payment_days, 'Day of Payment'
  • payment_week Selection
    states={'draft': [('readonly', False)]} args: [('0', 'Same Week'), ('1', 'Following Week'), ('2', 'Second Following Week')], 'Week of Payment'
  • payment_weekday Selection
    states={'draft': [('readonly', False)]} args: [('0', 'Sunday'), ('1', 'Monday'), ('2', 'Tuesday'), ('3', 'Wednesday'), ('4', 'Thursday'), ('5', 'Friday'), ('6', 'Saturday')], 'Weekday of Payment'
  • period_ids One2many → hr.period
    states={'draft': [('readonly', False)]} args: 'hr.period', 'fiscalyear_id', 'Periods'
  • schedule_pay Selection
    default='monthly' required=True states={'draft': [('readonly', False)]} args: get_schedules
  • state Selection
    default='draft' args: [('draft', 'Draft'), ('open', 'Open'), ('done', 'Closed')], 'Status'
  • type_id Many2one
    default=_default_type domain=[('hr_fiscal_year', '=', True)]
Public methods (8)
  • button_confirm(self)
  • button_set_to_draft(self)
  • create_periods(self)
    Create every periods a payroll fiscal year
  • cron_create_next_fiscal_year(self)
    @api.model
  • get_generator_vals(self)
  • get_ranges(self)
  • onchange_schedule(self)
    @api.onchange('schedule_pay', 'date_start')
  • search_period(self, number)

New fields (2)
  • date_payment Date
    readonly=True states={'draft': [('readonly', False)]} args: 'Date of Payment'
  • hr_period_id Many2one → hr.period
    readonly=True states={'draft': [('readonly', False)]} string='Period' args: 'hr.period'
Public methods (4)
  • create(self, vals)
    @api.model
  • onchange_company_id(self)
    @api.onchange('company_id', 'contract_id')
  • onchange_contract_period(self)
    @api.onchange('contract_id')
  • onchange_hr_period_id(self)
    @api.onchange('hr_period_id')

New fields (2)
  • company_id Many2one → res.company
    readonly=True args: 'res.company', 'Company'
  • schedule_pay Selection
    readonly=True args: get_schedules
Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one → res.company
    default=<expr> states={'close': [('readonly', True)]} args: 'res.company', 'Company'
  • date_payment Date
    states={'close': [('readonly', True)]} args: 'Date of Payment'
  • hr_period_id Many2one → hr.period
    states={'close': [('readonly', True)]} string='Period' args: 'hr.period'
  • name Char
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]}
  • schedule_pay Selection
    states={'close': [('readonly', True)]} args: get_schedules
Public methods (8)
  • close_payslip_run(self)
  • create(self, vals)
    @api.model
    Keep compatibility between modules
  • draft_payslip_run(self)
  • get_default_schedule(self, company_id)
    @api.model
  • get_payslip_employees_wizard(self)
    Replace the static action used to call the wizard
  • onchange_company_id(self)
    @api.onchange('company_id', 'schedule_pay')
  • onchange_period_id(self)
    @api.onchange('hr_period_id')
  • update_periods(self)

New fields (9)
  • company_id Many2one → res.company
    readonly=True related='fiscalyear_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_payment Date
    required=True states={'draft': [('readonly', False)]} args: 'Date of Payment'
  • fiscalyear_id Many2one → hr.fiscalyear
    ondelete='cascade' required=True states={'draft': [('readonly', False)]} args: 'hr.fiscalyear', 'Fiscal Year'
  • name Char
    required=True states={'draft': [('readonly', False)]}
  • number Integer
    required=True states={'draft': [('readonly', False)]}
  • payslip_ids One2many → hr.payslip
    readonly=True args: 'hr.payslip', 'hr_period_id', 'Payslips'
  • schedule_pay Selection
    default='monthly' required=True states={'draft': [('readonly', False)]} args: get_schedules
  • state Selection
    default='draft' required=True args: [('draft', 'Draft'), ('open', 'Open'), ('done', 'Closed')], 'Status'
  • type_id Many2one
    default=_default_type domain=[('hr_period', '=', True)]
Public methods (5)
  • button_close(self)
  • button_open(self)
  • button_re_open(self)
  • button_set_to_draft(self)
  • get_next_period(self, company_id, schedule_pay)
    @api.model
    Get the next payroll period to process :rtype: hr.period browse record
REPOSITORY
REPOSITORYOCA/payroll
GIT
GIThttps://github.com/OCA/payroll.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/payroll/tree/14.0/hr_payroll_period
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYPayroll
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSAaronHForgeFlow, Weblate, OCA-git-bot, oca-ci, Alessio Renda, nicolasrsande
WEBSITE
WEBSITEhttps://github.com/OCA/payroll
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/payroll:
    - payroll
OCA/server-ux:
    - date_range
odoo/odoo:
    - hr_contract
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - hr_holidays
    - calendar
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
hr_payslip_run_filter hr.payslip.run.period.search hr.payslip.run field Inherits payroll.hr_payslip_run_view_search
hr_payslip_run_form hr.payslip.run.period.form hr.payslip.run field Inherits payroll.hr_payslip_run_view_form
hr_payslip_run_tree hr.payslip.run.period.tree hr.payslip.run field Inherits payroll.hr_payslip_run_view_tree
view_date_range_type_hr_form_view date.range.type.hr.form date.range.type form New
view_date_range_type_hr_tree date.range.type.hr.tree date.range.type tree New
view_hr_fiscalyear_form hr.fiscalyear.form hr.fiscalyear form New
view_hr_fiscalyear_search hr.fiscalyear.search hr.fiscalyear search New
view_hr_fiscalyear_tree hr.fiscalyear.tree hr.fiscalyear tree New
view_hr_payslip_by_employees hr_payroll_payslip_employees hr.payslip.employees field Inherits payroll.view_hr_payslip_by_employees
view_hr_payslip_filter hr.payslip.period.select hr.payslip field Inherits payroll.hr_payslip_view_search
view_hr_payslip_form hr.payslip.period.form hr.payslip field Inherits payroll.hr_payslip_view_form
view_hr_payslip_tree hr.payslip.period.tree hr.payslip field Inherits payroll.hr_payslip_view_tree
view_hr_period_form hr.period.form hr.period form New
view_hr_period_search hr.period.search hr.period search New
view_hr_period_tree hr.period.tree hr.period tree New
Models touched (8)

New fields (2)
  • hr_fiscal_year Boolean
    string='Is HR Fiscal Year?'
  • hr_period Boolean
    string='Is HR period?'
Public methods (0)

No public methods.

New fields (1)
  • schedule_pay Selection
    index=True args: get_schedules, 'Scheduled Pay'
Public methods (0)

No public methods.

New fields (1)
  • contract_id Many2one → hr.contract
    comodel_name='hr.contract' search='_search_contract'
Public methods (0)

No public methods.

New fields (7)
  • payment_day Selection
    states={'draft': [('readonly', False)]} args: get_payment_days, 'Day of Payment'
  • payment_week Selection
    states={'draft': [('readonly', False)]} args: [('0', 'Same Week'), ('1', 'Following Week'), ('2', 'Second Following Week')], 'Week of Payment'
  • payment_weekday Selection
    states={'draft': [('readonly', False)]} args: [('0', 'Sunday'), ('1', 'Monday'), ('2', 'Tuesday'), ('3', 'Wednesday'), ('4', 'Thursday'), ('5', 'Friday'), ('6', 'Saturday')], 'Weekday of Payment'
  • period_ids One2many → hr.period
    states={'draft': [('readonly', False)]} args: 'hr.period', 'fiscalyear_id', 'Periods'
  • schedule_pay Selection
    default='monthly' required=True states={'draft': [('readonly', False)]} args: get_schedules, 'Scheduled Pay'
  • state Selection
    default='draft' args: [('draft', 'Draft'), ('open', 'Open'), ('done', 'Closed')], 'Status'
  • type_id Many2one
    default=_default_type domain=[('hr_fiscal_year', '=', True)]
Public methods (7)
  • button_confirm(self)
  • button_set_to_draft(self)
  • create_periods(self)
    Create every periods a payroll fiscal year
  • get_generator_vals(self)
    @api.model
  • get_ranges(self)
  • onchange_schedule(self)
    @api.onchange('schedule_pay', 'date_start')
  • search_period(self, number)

New fields (2)
  • date_payment Date
    readonly=True states={'draft': [('readonly', False)]} args: 'Date of Payment'
  • hr_period_id Many2one → hr.period
    readonly=True states={'draft': [('readonly', False)]} string='Period' args: 'hr.period'
Public methods (4)
  • create(self, vals)
    @api.model
  • onchange_company_id(self)
    @api.onchange('company_id', 'contract_id')
  • onchange_contract_period(self)
    @api.onchange('contract_id')
  • onchange_hr_period_id(self)
    @api.onchange('hr_period_id')

New fields (2)
  • company_id Many2one → res.company
    readonly=True args: 'res.company', 'Company'
  • schedule_pay Selection
    readonly=True args: get_schedules, 'Scheduled Pay'
Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one → res.company
    default=<expr> states={'close': [('readonly', True)]} args: 'res.company', 'Company'
  • date_payment Date
    states={'close': [('readonly', True)]} args: 'Date of Payment'
  • hr_period_id Many2one → hr.period
    states={'close': [('readonly', True)]} string='Period' args: 'hr.period'
  • name Char
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} args: 'Name'
  • schedule_pay Selection
    states={'close': [('readonly', True)]} args: get_schedules, 'Scheduled Pay'
Public methods (8)
  • close_payslip_run(self)
  • create(self, vals)
    @api.model
    Keep compatibility between modules
  • draft_payslip_run(self)
  • get_default_schedule(self, company_id)
    @api.model
  • get_payslip_employees_wizard(self)
    Replace the static action used to call the wizard
  • onchange_company_id(self)
    @api.onchange('company_id', 'schedule_pay')
  • onchange_period_id(self)
    @api.onchange('hr_period_id')
  • update_periods(self)

New fields (9)
  • company_id Many2one → res.company
    readonly=True related='fiscalyear_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_payment Date
    required=True states={'draft': [('readonly', False)]} args: 'Date of Payment'
  • fiscalyear_id Many2one → hr.fiscalyear
    ondelete='cascade' required=True states={'draft': [('readonly', False)]} args: 'hr.fiscalyear', 'Fiscal Year'
  • name Char
    required=True states={'draft': [('readonly', False)]} args: 'Name'
  • number Integer
    required=True states={'draft': [('readonly', False)]} args: 'Number'
  • payslip_ids One2many → hr.payslip
    readonly=True args: 'hr.payslip', 'hr_period_id', 'Payslips'
  • schedule_pay Selection
    default='monthly' required=True states={'draft': [('readonly', False)]} args: get_schedules, 'Scheduled Pay'
  • state Selection
    default='draft' required=True args: [('draft', 'Draft'), ('open', 'Open'), ('done', 'Closed')], 'Status'
  • type_id Many2one
    default=_default_type domain=[('hr_period', '=', True)]
Public methods (5)
  • button_close(self)
  • button_open(self)
  • button_re_open(self)
  • button_set_to_draft(self)
  • get_next_period(self, company_id, schedule_pay)
    @api.model
    Get the next payroll period to process :rtype: hr.period browse record
REPOSITORY
REPOSITORYOCA/hr
GIT
GIThttps://github.com/OCA/hr.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/hr/tree/7.0/hr_payroll_period
VERSION
VERSION 1.0
CATEGORY
CATEGORYGeneric Modules/Human Resources
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Michael Telahun Makonnen <mmakonnen@gmail.com>
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Michael Telahun Makonnen <mmakonnen@gmail.com>
COMMITTERS
COMMITTERSLorenzo Battistini, Alexandre Fayolle, Michael Telahun Makonnen, Sandy Carter, OCA Transbot, moylop260, dufresnedavid
WEBSITE
WEBSITEhttp://miketelahun.wordpress.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:07:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/hr:
    - hr_contract_init
    - hr_job_categories
    - hr_security
    - hr_simplify
    - hr_employee_state
    - hr_contract_state
    - hr_payroll_register
    - hr_payslip_amendment
    - hr_public_holidays
    - hr_schedule
odoo/odoo:
    - hr_contract
    - hr
    - base_setup
    - base
    - web_kanban
    - web
    - mail
    - resource
    - process
    - board
    - hr_payroll
    - hr_holidays
    - base_calendar
    - base_status
    - base_action_rule
    - decimal_precision
    - hr_attendance
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Easy Payroll Management
=======================
This module implements a more formal payroll cycle.
This cycle is based on payroll period schedules configured by the user.
An end-of-pay-period wizard guides the HR officer or manager through
the payroll process. For each payroll period a specific set
of criteria have to be met in order to proceed to the next stage of the
process. For example:
    - Attendance records are complete
    

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
payroll_period_end_view hr.payroll.period.end.1.form hr.payroll.period.end.1 form New
view_contract_init_form hr.contract.init.form.payroll_period hr.contract.init xpath Inherits hr_contract_init.view_contract_init_form
view_contract_init_tree hr.contract.init.tree.payroll_period hr.contract.init xpath Inherits hr_contract_init.view_contract_init_tree
view_exception_rule_form hr.payslip.exception.rule.form hr.payslip.exception.rule form New
view_exception_rule_tree hr.payslip.exception.rule.tree hr.payslip.exception.rule tree New
view_hr_attendance_form hr.attendance.form.inherit hr.attendance data Inherits hr_attendance.view_attendance_form
view_hr_attendance_tree hr.attendance.tree.inherit hr.attendance data Inherits hr_attendance.view_attendance_tree
view_hr_contract_form_inherit hr.contract.form.inherit hr.contract data Inherits hr_payroll.hr_contract_form_inherit
view_hr_holidays_status_form hr.holidays.status.form.inherit hr.holidays.status xpath Inherits hr_holidays.edit_holiday_status_form
view_hr_payslip_amendment_form hr.payslip.amendment.form.inherit hr.payslip.amendment xpath Inherits hr_payslip_amendment.view_payslip_amendment_form
view_hr_payslip_amendment_tree hr.payslip.amendment.tree.inherit hr.payslip.amendment xpath Inherits hr_payslip_amendment.view_payslip_amendment_tree
view_payperiod_schedule_form hr.payroll.period.schedule.form hr.payroll.period.schedule form New
view_payperiod_schedule_tree hr.payroll.period.schedule.tree hr.payroll.period.schedule tree New
view_payroll_exception_form hr.payslip.exception.form hr.payslip.exception form New
view_payroll_exception_tree hr.payslip.exception.tree hr.payslip.exception tree New
view_payroll_period_form hr.payroll.period.form hr.payroll.period form New
view_payroll_period_tree hr.payroll.period.tree hr.payroll.period tree New
view_payslip_form hr.payslip.form.exception hr.payslip xpath Inherits hr_payroll.view_hr_payslip_form
Models touched (12)

New fields (0)

No new fields.

Public methods (4)
  • create(self, cr, uid, vals, context=None)
  • is_locked(self, cr, uid, employee_id, utcdt_str, context=None)
  • unlink(self, cr, uid, ids, context=None)
  • write(self, cr, uid, ids, vals, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • unlink(self, cr, uid, ids, context=None)
  • write(self, cr, uid, ids, vals, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (5)
  • is_ended(self, cr, uid, period_id, context=None)
  • set_state_closed(self, cr, uid, ids, context=None)
  • set_state_ended(self, cr, uid, ids, context=None)
  • set_state_locked(self, cr, uid, ids, context=None)
  • try_signal_end_period(self, cr, uid, context=None)
    Method called, usually by cron, to transition any payroll periods that are past their end date.

New fields (0)

No new fields.

Public methods (16)
  • close_pay_period(self, cr, uid, ids, context=None)
  • create_payroll_register(self, cr, uid, ids, context=None)
  • create_payslip_runs(self, cr, uid, register_id, dept_ids, contract_ids, tz, context=None)
  • lock_period(self, cr, uid, ids, context=None)
  • print_contribution_registers(self, cr, uid, ids, context=None)
  • print_payroll_register(self, cr, uid, ids, context=None)
  • print_payroll_summary(self, cr, uid, ids, context=None)
  • print_payslip_details(self, cr, uid, ids, context=None)
  • print_payslips(self, cr, uid, ids, context=None)
  • recalc_alerts(self, cr, uid, ids, context=None)
  • reload(self, cr, uid, ids, context=None)
  • start_payments(self, cr, uid, ids, context=None)
  • unlock_period(self, cr, uid, ids, context=None)
  • view_alerts(self, cr, uid, ids, context=None)
  • view_payroll_exceptions(self, cr, uid, ids, context=None)
  • view_payroll_register(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (2)
  • add_pay_period(self, cr, uid, ids, context=None)
  • try_create_new_period(self, cr, uid, context=None)
    Try and create pay periods for up to 3 months from now.

New fields (0)

No new fields.

Public methods (1)
  • compute_sheet(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • satisfy_condition(self, cr, uid, rule_id, localdict, context=None)
    @param rule_id: id of hr.payslip.exception.rule to be tested @param contract_id: id of hr.contract to be tested @return: returns True if the given rule match the condition for the given contract. Return False otherwise.