Monday, April 13, 2026
1 change · saas-18.4
Resolved issues and error corrections
Posting multiple employee expenses at once now keeps each expense's attachments on the correct generated bill. This prevents files from one employee's expense from appearing on another employee's accounting document, protecting confidentiality and reducing cleanup work.
Original PR description
Steps to reproduce: 1. Create two expenses for different employees (e.g., Expense A for Employee 1, Expense B for Employee 2). 2. Upload different attachments to each (e.g., 2 files for A, 3 files…
Steps to reproduce:
1. Create two expenses for different employees (e.g., Expense A for Employee 1, Expense B for Employee 2).
2. Upload different attachments to each (e.g., 2 files for A, 3 files for B).
3. Select both expenses and use the 'Post' action to open the posting wizard.
4. Click 'Post' in the wizard.
5. Check the generated journal entries (vendor bills).
Result: Both vendor bills contain all 5 attachments (copies of A's files and copies of B's files).
Issue:
In `_prepare_bills_vals`, `self.attachment_ids` is collected before the
`grouped('employee_id')` loop (see: https://github.com/odoo/odoo/blob/6b7fff433335edf7459f7a6eb5c274c0f4d5d1df/addons/hr_expense/models/hr_expense.py#L1572-L1578).
Since `self` refers to the full expense recordset, `self.attachment_ids` returns
the union of all attachments across every expense. This combined list is then
assigned to every bill created inside the loop, causing attachments from one
employee's expenses to leak into another employee's journal entry.
opw-6056590
Forward-Port-Of: odoo/odoo#256031