TIP: You can type at any time to perform a new search.
Payroll
hr_payroll · odoo/odoo
- Repository
- odoo/odoo · module folder
- Module version
- 0.1.0
- Category
- Human Resources
- Folder size
- 4.63 MB
- License
- LGPL-3
- Application
- No
- Auto-installable
- No
- Website
- None
- Last tracking update
- 2026-08-07 05:07:18
- Authors
- Maintainers
- None
- Committers
- Fabien Pinckaers, Raphael Collet, Christophe Simonis, Martin Trigaux, Odoo Translation Bot, Joren Van Onder, qdp-odoo, GitHub, Yannick Tivisse, qsm-odoo, Alexandre Kühn, Christophe Monniez, Jorge Pinna Puissant, Xavier-Do, Andrea Grazioso (agr-odoo), alt-odoo, Kinjal Mehta, Touati Djamel (otd)
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- hr_payroll_account, hr_period, hr_worked_days_from_timesheet, l10n_be_hr_payroll, l10n_fr_hr_payroll, l10n_in_hr_payroll
- Description
Code Analysis ⓘ
Views touched (38)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
hr_contract_advantage_template_view_form |
hr.contract.advantage.template.form | hr.contract.advantage.template | form | New |
hr_contract_advantage_template_view_tree |
hr.contract.advantage.template.tree | hr.contract.advantage.template | tree | New |
hr_contract_form_inherit |
hr.contract.view.form.inherit | hr.contract | form | Inherits hr_contract.hr_contract_view_form |
hr_contribution_register_filter |
hr.contribution.register.search | hr.contribution.register | search | New |
hr_contribution_register_form |
hr.contribution.register.form | hr.contribution.register | form | New |
hr_contribution_register_tree |
hr.contribution.register.tree | hr.contribution.register | tree | New |
hr_contribution_register_view_kanban |
hr.contribution.register.kanban | hr.contribution.register | kanban | New |
hr_payroll_structure_view_kanban |
hr.payroll.structure.kanban | hr.payroll.structure | kanban | New |
hr_payslip_run_filter |
hr.payslip.run.search | hr.payslip.run | search | New |
hr_payslip_run_form |
hr.payslip.run.form | hr.payslip.run | form | New |
hr_payslip_run_tree |
hr.payslip.run.tree | hr.payslip.run | tree | New |
hr_payslip_run_view_kanban |
hr.payslip.run.kanban | hr.payslip.run | kanban | New |
hr_payslip_view_kanban |
hr.payslip.kanban | hr.payslip | kanban | New |
hr_salary_rule_category_form |
hr.salary.rule.category.form | hr.salary.rule.category | form | New |
hr_salary_rule_category_tree |
hr.salary.rule.category.tree | hr.salary.rule.category | tree | New |
hr_salary_rule_form |
hr.salary.rule.form | hr.salary.rule | form | New |
hr_salary_rule_list |
hr.salary.rule.list | hr.salary.rule | tree | New |
hr_salary_rule_tree |
hr.salary.rule.tree | hr.salary.rule | tree | New |
hr_salary_rule_view_kanban |
hr.salary.rule.kanban | hr.salary.rule | kanban | New |
payroll_hr_employee_view_form |
payroll.hr.employee.view.form | hr.employee | form | Inherits hr.view_employee_form |
report_contributionregister |
report_contributionregister | ir.ui.view | qweb | New |
report_payslip |
report_payslip | ir.ui.view | qweb | New |
report_payslipdetails |
report_payslipdetails | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.hr.payroll | res.config.settings | form | Inherits base.res_config_settings_view_form |
view_hr_employee_grade_form |
hr.payroll.structure.form | hr.payroll.structure | form | New |
view_hr_payroll_structure_filter |
hr.payroll.structure.select | hr.payroll.structure | search | New |
view_hr_payroll_structure_list_view |
hr.payroll.structure.tree | hr.payroll.structure | tree | New |
view_hr_payroll_structure_tree |
hr.payroll.structure.tree | hr.payroll.structure | tree | New |
view_hr_payslip_by_employees |
hr_payroll_payslip_employees | hr.payslip.employees | form | New |
view_hr_payslip_filter |
hr.payslip.select | hr.payslip | search | New |
view_hr_payslip_form |
hr.payslip.form | hr.payslip | form | New |
view_hr_payslip_line_filter |
hr.payslip.line.select | hr.payslip.line | search | New |
view_hr_payslip_line_form |
hr.payslip.line.form | hr.payslip.line | form | New |
view_hr_payslip_line_tree |
hr.payslip.line.tree | hr.payslip.line | tree | New |
view_hr_payslip_tree |
hr.payslip.tree | hr.payslip | tree | New |
view_hr_rule_filter |
hr.salary.rule.select | hr.salary.rule | search | New |
view_hr_salary_rule_category_filter |
hr.salary.rule.category.select | hr.salary.rule.category | search | New |
view_payslip_lines_contribution_register |
payslip.lines.contribution.register | payslip.lines.contribution.register | form | New |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (18)
New fields (3)
-
resource_calendar_idMany2onehelp="Employee's working schedule."required=True -
schedule_paySelectiondefault='monthly'help='Defines the frequency of the wage payment.'index=Truestring='Scheduled Pay' args: [('monthly', 'Monthly'), ('quarterly', 'Quarterly'), ('semi-annually', 'Semi-annually'), ('annually', 'Annually'), ('weekly', 'Weekly'), ('bi-weekly', 'Bi-weekly'), ('bi-monthly', 'Bi-monthly')] -
struct_idMany2one → hr.payroll.structurestring='Salary Structure' args: 'hr.payroll.structure'
-
get_all_structures(self)@api.multi@return: the structures linked to the given contracts, ordered by hierachy (parent=False first, then first level children and so on) and without duplicata -
get_attribute(self, code, attribute)@api.multi -
set_attribute_value(self, code, active)@api.multi
New fields (5)
-
codeCharrequired=True args: 'Code' -
default_valueFloatargs: 'Default value for this advantage' -
lower_boundFloathelp='Lower bound authorized by the employer for this advantage' args: 'Lower Bound' -
nameCharrequired=True args: 'Name' -
upper_boundFloathelp='Upper bound authorized by the employer for this advantage' args: 'Upper Bound'
No public methods.
New fields (5)
-
company_idMany2one → res.companydefault=<expr>string='Company' args: 'res.company' -
nameCharrequired=True -
noteTextstring='Description' -
partner_idMany2one → res.partnerstring='Partner' args: 'res.partner' -
register_line_idsOne2many → hr.payslip.linereadonly=Truestring='Register Line' args: 'hr.payslip.line', 'register_id'
No public methods.
New fields (2)
-
payslip_countIntegercompute='_compute_payslip_count'groups='hr_payroll.group_hr_payroll_user'string='Payslip Count' -
slip_idsOne2many → hr.payslipreadonly=Truestring='Payslips' args: 'hr.payslip', 'employee_id'
No public methods.
New fields (7)
-
children_idsOne2many → hr.payroll.structurecopy=Truestring='Children' args: 'hr.payroll.structure', 'parent_id' -
codeCharrequired=Truestring='Reference' -
company_idMany2one → res.companycopy=Falsedefault=<expr>required=Truestring='Company' args: 'res.company' -
nameCharrequired=True -
noteTextstring='Description' -
parent_idMany2one → hr.payroll.structuredefault=_get_parentstring='Parent' args: 'hr.payroll.structure' -
rule_idsMany2many → hr.salary.rulestring='Salary Rules' args: 'hr.salary.rule', 'hr_structure_salary_rule_rel', 'struct_id', 'rule_id'
-
copy(self, default=None)@api.multi@api.returns('self', <expr>) -
get_all_rules(self)@api.multi@return: returns a list of tuple (id, sequence) of rules that are maybe to apply
New fields (18)
-
company_idMany2one → res.companycopy=Falsedefault=<expr>readonly=Truestates={'draft': [('readonly', False)]}string='Company' args: 'res.company' -
contract_idMany2one → hr.contractreadonly=Truestates={'draft': [('readonly', False)]}string='Contract' args: 'hr.contract' -
credit_noteBooleanhelp='Indicates this payslip has a refund of another'readonly=Truestates={'draft': [('readonly', False)]}string='Credit Note' -
date_fromDatedefault=<expr>readonly=Truerequired=Truestates={'draft': [('readonly', False)]}string='Date From' -
date_toDatedefault=<expr>readonly=Truerequired=Truestates={'draft': [('readonly', False)]}string='Date To' -
details_by_salary_rule_categoryOne2many → hr.payslip.linecompute='_compute_details_by_salary_rule_category'string='Details by Salary Rule Category' args: 'hr.payslip.line' -
employee_idMany2one → hr.employeereadonly=Truerequired=Truestates={'draft': [('readonly', False)]}string='Employee' args: 'hr.employee' -
input_line_idsOne2many → hr.payslip.inputreadonly=Truestates={'draft': [('readonly', False)]}string='Payslip Inputs' args: 'hr.payslip.input', 'payslip_id' -
line_idsOne2many → hr.payslip.linereadonly=Truestates={'draft': [('readonly', False)]}string='Payslip Lines' args: 'hr.payslip.line', 'slip_id' -
nameCharreadonly=Truestates={'draft': [('readonly', False)]}string='Payslip Name' -
noteTextreadonly=Truestates={'draft': [('readonly', False)]}string='Internal Note' -
numberCharcopy=Falsereadonly=Truestates={'draft': [('readonly', False)]}string='Reference' -
paidBooleancopy=Falsereadonly=Truestates={'draft': [('readonly', False)]}string='Made Payment Order ? ' -
payslip_countIntegercompute='_compute_payslip_count'string='Payslip Computation Details' -
payslip_run_idMany2one → hr.payslip.runcopy=Falsereadonly=Truestates={'draft': [('readonly', False)]}string='Payslip Batches' args: 'hr.payslip.run' -
stateSelectioncopy=Falsedefault='draft'help="* When the payslip is created the status is 'Draft'\n \n* If the payslip is under verification, the status is 'Waiting'.\n \n* If the payslip is confirmed then status is set to 'Done'.\n \n* When user cancel payslip the status is 'Rejected'."index=Truereadonly=Truestring='Status' args: [('draft', 'Draft'), ('verify', 'Waiting'), ('done', 'Done'), ('cancel', 'Rejected')] -
struct_idMany2one → hr.payroll.structurehelp="Defines the rules that have to be applied to this payslip, accordingly to the contract chosen. If you let empty the field contract, this field isn't mandatory anymore and thus the rules applied will be all the rules set on the structure of all contracts of the employee valid for the chosen period"readonly=Truestates={'draft': [('readonly', False)]}string='Structure' args: 'hr.payroll.structure' -
worked_days_line_idsOne2many → hr.payslip.worked_dayscopy=Truereadonly=Truestates={'draft': [('readonly', False)]}string='Payslip Worked Days' args: 'hr.payslip.worked_days', 'payslip_id'
-
action_payslip_cancel(self)@api.multi -
action_payslip_done(self)@api.multi -
action_payslip_draft(self)@api.multi -
check_done(self)@api.multi -
compute_sheet(self)@api.multi -
copy(self, default=None)@api.multi@api.returns('self', <expr>) -
get_contract(self, employee, date_from, date_to)@api.model@param employee: recordset of employee @param date_from: date field @param date_to: date field @return: returns the ids of all the contracts for the given employee that need to be considered for the given dates -
get_inputs(self, contracts, date_from, date_to)@api.model -
get_salary_line_total(self, code) -
get_worked_day_lines(self, contracts, date_from, date_to)@api.model@param contract: Browse record of contracts @return: returns a list of dict containing the input that should be applied for the given contract between date_from and date_to -
onchange_contract(self)@api.onchange('contract_id') -
onchange_employee(self)@api.onchange('employee_id', 'date_from', 'date_to') -
onchange_employee_id(self, date_from, date_to, employee_id=False, contract_id=False)@api.multi -
refund_sheet(self)@api.multi -
unlink(self)@api.multi
New fields (1)
-
employee_idsMany2many → hr.employeeargs: 'hr.employee', 'hr_employee_group_rel', 'payslip_id', 'employee_id', 'Employees'
-
compute_sheet(self)@api.multi
New fields (6)
-
amountFloathelp='It is used in computation. For e.g. A rule for sales having 1% commission of basic salary for per product can defined in expression like result = inputs.SALEURO.amount * contract.wage*0.01.' -
codeCharhelp='The code that can be used in the salary rules'required=True -
contract_idMany2one → hr.contracthelp='The contract for which applied this input'required=Truestring='Contract' args: 'hr.contract' -
nameCharrequired=Truestring='Description' -
payslip_idMany2one → hr.payslipindex=Trueondelete='cascade'required=Truestring='Pay Slip' args: 'hr.payslip' -
sequenceIntegerdefault=10index=Truerequired=True
No public methods.
New fields (8)
-
amountFloatdigits=dp.get_precision('Payroll') -
contract_idMany2one → hr.contractindex=Truerequired=Truestring='Contract' args: 'hr.contract' -
employee_idMany2one → hr.employeerequired=Truestring='Employee' args: 'hr.employee' -
quantityFloatdefault=1.0digits=dp.get_precision('Payroll') -
rateFloatdefault=100.0digits=dp.get_precision('Payroll Rate')string='Rate (%)' -
salary_rule_idMany2one → hr.salary.rulerequired=Truestring='Rule' args: 'hr.salary.rule' -
slip_idMany2one → hr.payslipondelete='cascade'required=Truestring='Pay Slip' args: 'hr.payslip' -
totalFloatcompute='_compute_total'digits=dp.get_precision('Payroll')store=Truestring='Total'
-
create(self, vals_list)@api.model_create_multi
New fields (6)
-
credit_noteBooleanhelp='If its checked, indicates that all payslips generated from here are refund payslips.'readonly=Truestates={'draft': [('readonly', False)]}string='Credit Note' -
date_endDatedefault=<expr>readonly=Truerequired=Truestates={'draft': [('readonly', False)]}string='Date To' -
date_startDatedefault=<expr>readonly=Truerequired=Truestates={'draft': [('readonly', False)]}string='Date From' -
nameCharreadonly=Truerequired=Truestates={'draft': [('readonly', False)]} -
slip_idsOne2many → hr.payslipreadonly=Truestates={'draft': [('readonly', False)]}string='Payslips' args: 'hr.payslip', 'payslip_run_id' -
stateSelectioncopy=Falsedefault='draft'index=Truereadonly=Truestring='Status' args: [('draft', 'Draft'), ('close', 'Close')]
-
close_payslip_run(self)@api.multi -
draft_payslip_run(self)@api.multi -
unlink(self)@api.multi
New fields (7)
-
codeCharhelp='The code that can be used in the salary rules'required=True -
contract_idMany2one → hr.contracthelp='The contract for which applied this input'required=Truestring='Contract' args: 'hr.contract' -
nameCharrequired=Truestring='Description' -
number_of_daysFloatstring='Number of Days' -
number_of_hoursFloatstring='Number of Hours' -
payslip_idMany2one → hr.payslipindex=Trueondelete='cascade'required=Truestring='Pay Slip' args: 'hr.payslip' -
sequenceIntegerdefault=10index=Truerequired=True
No public methods.
New fields (3)
-
codeCharhelp='The code that can be used in the salary rules'required=True -
input_idMany2one → hr.salary.rulerequired=Truestring='Salary Rule Input' args: 'hr.salary.rule' -
nameCharrequired=Truestring='Description'
No public methods.
New fields (23)
-
activeBooleandefault=Truehelp='If the active field is set to false, it will allow you to hide the salary rule without removing it.' -
amount_fixFloatdigits=dp.get_precision('Payroll')string='Fixed Amount' -
amount_percentageFloatdigits=dp.get_precision('Payroll Rate')help='For example, enter 50.0 to apply a percentage of 50%'string='Percentage (%)' -
amount_percentage_baseCharhelp='result will be affected to a variable'string='Percentage based on' -
amount_python_computeTextdefault="\n # Available variables:\n #----------------------\n # payslip: object containing the payslips\n # employee: hr.employee object\n # contract: hr.contract object\n # rules: object containing the rules code (previously computed)\n # categories: object containing the computed salary rule categories (sum of amount of all rules belonging to that category).\n # worked_days: object containing the computed worked days.\n # inputs: object containing the computed inputs.\n\n # Note: returned value have to be set in the variable 'result'\n\n result = contract.wage * 0.10"string='Python Code' -
amount_selectSelectiondefault='fix'help='The computation method for the rule amount.'index=Truerequired=Truestring='Amount Type' args: [('percentage', 'Percentage (%)'), ('fix', 'Fixed Amount'), ('code', 'Python Code')] -
appears_on_payslipBooleandefault=Truehelp='Used to display the salary rule on payslip.'string='Appears on Payslip' -
category_idMany2one → hr.salary.rule.categoryrequired=Truestring='Category' args: 'hr.salary.rule.category' -
child_idsOne2many → hr.salary.rulecopy=Truestring='Child Salary Rule' args: 'hr.salary.rule', 'parent_rule_id' -
codeCharhelp='The code of salary rules can be used as reference in computation of other rules. In that case, it is case sensitive.'required=True -
company_idMany2one → res.companydefault=<expr>string='Company' args: 'res.company' -
condition_pythonTextdefault="\n # Available variables:\n #----------------------\n # payslip: object containing the payslips\n # employee: hr.employee object\n # contract: hr.contract object\n # rules: object containing the rules code (previously computed)\n # categories: object containing the computed salary rule categories (sum of amount of all rules belonging to that category).\n # worked_days: object containing the computed worked days\n # inputs: object containing the computed inputs\n\n # Note: returned value have to be set in the variable 'result'\n\n result = rules.NET > categories.NET * 0.10"help='Applied this rule for calculation if condition is true. You can specify condition like basic > 1000.'required=Truestring='Python Condition' -
condition_rangeChardefault='contract.wage'help='This will be used to compute the % fields values; in general it is on basic, but you can also use categories code fields in lowercase as a variable names (hra, ma, lta, etc.) and the variable basic.'string='Range Based on' -
condition_range_maxFloathelp='The maximum amount, applied for this rule.'string='Maximum Range' -
condition_range_minFloathelp='The minimum amount, applied for this rule.'string='Minimum Range' -
condition_selectSelectiondefault='none'required=Truestring='Condition Based on' args: [('none', 'Always True'), ('range', 'Range'), ('python', 'Python Expression')] -
input_idsOne2many → hr.rule.inputcopy=Truestring='Inputs' args: 'hr.rule.input', 'input_id' -
nameCharrequired=Truetranslate=True -
noteTextstring='Description' -
parent_rule_idMany2one → hr.salary.ruleindex=Truestring='Parent Salary Rule' args: 'hr.salary.rule' -
quantityChardefault='1.0'help='It is used in computation for percentage and fixed amount. For e.g. A rule for Meal Voucher having fixed amount of 1€ per worked day can have its quantity defined in expression like worked_days.WORK100.number_of_days.' -
register_idMany2one → hr.contribution.registerhelp='Eventual third party involved in the salary payment of the employees.'string='Contribution Register' args: 'hr.contribution.register' -
sequenceIntegerdefault=5help='Use to arrange calculation sequence'index=Truerequired=True
No public methods.
New fields (6)
-
children_idsOne2many → hr.salary.rule.categorystring='Children' args: 'hr.salary.rule.category', 'parent_id' -
codeCharrequired=True -
company_idMany2one → res.companydefault=<expr>string='Company' args: 'res.company' -
nameCharrequired=Truetranslate=True -
noteTextstring='Description' -
parent_idMany2one → hr.salary.rule.categoryhelp='Linking a salary category to its parent is used only for the reporting purpose.'string='Parent' args: 'hr.salary.rule.category'
No public methods.
New fields (2)
-
date_fromDatedefault=datetime.now().strftime('%Y-%m-01')required=Truestring='Date From' -
date_toDatedefault=<expr>required=Truestring='Date To'
-
print_report(self)@api.multi
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (0)
No new fields.
Public methods (2)-
get_details_by_rule_category(self, payslip_lines) -
get_lines_by_contribution_register(self, payslip_lines)
New fields (4)
-
module_account_accountantBooleanstring='Account' -
module_l10n_be_hr_payrollBooleanstring='Belgium Payroll' -
module_l10n_fr_hr_payrollBooleanstring='French Payroll' -
module_l10n_in_hr_payrollBooleanstring='Indian Payroll'
No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…