Skip to main content
iVentureTeam

Odoo 20 Expenses Release Notes

All 3 Expenses changes from the official Odoo 20 release notes, explained in plain words with a screenshot from a live Odoo 20 database, plus where to find each one and what it means for your upgrade.

Planning the move? See our Odoo upgrade services, the Odoo 20 upgrade guide or get a number from the migration cost calculator.

New feature 1Enhancement 2In Community 2Enterprise only 1

Change 1 of 3

Consolidated expenses report

EnhancementCommunity

Select and print multiple expenses at once in a single consolidated report.

Official Odoo 20 release note

In plain words

In the expenses list you can select several expenses and click Print. Instead of one page per expense, Odoo builds one report with all lines in a single table and one total, followed by the receipts.

Expenses > select expenses > PrintOne Expenses Report holding four expenses from two employees in a single table, with one untaxed amount, taxes and total.

Where to find it

  1. Expenses > My Expenses, select several expenses.
  2. Click Print.

For users

Expenses > select several lines > Print gives one combined report with header data (employee, manager, paid by) and a total.

For developers

The report template no longer loops over docs; it reads a general_info dict built in ir.actions.report overrides (_hr_expense_get_general_info). Custom inherits of hr_expense.report_expense that used o.* fields must be rewritten.

Upgrading from Odoo 19

Check custom QWeb inherits of the expense report.

  • The PDF groups expenses per employee and payment mode; the screenshot shows the HTML version of the same report.

Change 2 of 3

Expense limits per job position

New featureCommunity

Define maximum allowable expense amounts per job position. Managers can cap expenses at the authorized limit before granting final approval.

Official Odoo 20 release note

In plain words

Each expense category has a Limits list: a maximum amount per job position (or one default for all). If an expense is above the limit, the employee gets a warning, and the approver sees the limit with a Cap Reimbursement to Policy button that splits off the part above the limit.

Expenses > submitted expense (approver view)The approver sees that this expense is over the 100.00 limit for the job position, with the Cap Reimbursement to Policy button.

Where to find it

  1. Expenses > Configuration > Expense Categories, open Meals, add a limit of 100 for Experienced Developer.
  2. Submit a 180 Meals expense for Keith Byrd (Experienced Developer).
  3. Open it as the approver.

For users

Expenses > Configuration > Expense Categories > Limits. Approvers see an alert on submitted expenses above the limit.

For developers

New model hr.expense.product.job.position.limit (product_id, job_ids, limit_amount); new computed fields on hr.expense (is_expense_exceeding_job_position_limit, expense_job_position_limit_amount) and action_cap_reimbursement_to_policy, which uses the split wizard.

Upgrading from Odoo 19

No migration; limits are empty by default.

Change 3 of 3

Salary rules for expense products

EnhancementEnterprise only

Expense products can now be assigned the appropriate salary rule to ensure the correct calculation for the type of expense.

Official Odoo 20 release note

In plain words

With Payroll installed, an expense category has a Salary Rules field. When an expense is reimbursed through a payslip, Odoo uses the rule set on its category for that salary structure, instead of one fixed reimbursement rule.

Expenses > Configuration > Expense Categories > MealsThe Payroll group on the expense category, with the salary rule used when this expense is paid through a payslip.

Where to find it

  1. Expenses > Configuration > Expense Categories, open Meals.
  2. In the Payroll group, set Salary Rules to Expenses Reimbursement.

For users

Expenses > Configuration > Expense Categories: a Payroll group with Salary Rules on each category.

For developers

product.template gets salary_rule_ids (rules with condition property_input used on payslips). Constraints: one rule per structure, and the rule needs a debit account of type Liability Payable. Payslips pick the rule per structure via _get_correct_salary_rule_per_expense.

Upgrading from Odoo 19

Categories without rules are not sent to payslips; set the rules after upgrading if you reimburse through payroll.

See all 585 Odoo 20 changes across 52 apps

Odoo 20 Expenses: common questions

What is new in Odoo 20 Expenses?

The official Odoo 20 release notes list 3 Expenses changes (1 new feature, 2 enhancements). They include Consolidated expenses report, Expense limits per job position, Salary rules for expense products.

Are the Odoo 20 Expenses changes available in Community edition?

2 of the 3 changes are in Odoo 20 Community (and Enterprise). 1 is Enterprise only. Each change on this page is labeled with its edition.

Do Odoo 20 Expenses changes affect my customizations when upgrading from Odoo 19?

2 of the 3 changes have something to check when upgrading from Odoo 19, for example Consolidated expenses report, Salary rules for expense products. Each change on this page has an "Upgrading from Odoo 19" note. Test custom modules on a copy of your database before moving production.

How do I upgrade Expenses to Odoo 20?

Restore a copy of your database, run the Odoo 20 upgrade on the copy, fix any custom modules that extend Expenses, then test your main Expenses flows with real users before switching production. iVentureTeam runs Odoo upgrades end to end, including custom module migration and user testing.

Odoo services for this

More Odoo 20 release notes

Planning your Odoo 20 move

Want these Expenses changes in your database?

We upgrade Odoo databases with their customizations and data intact, and test every custom module against the new version before go-live.