Saturday, September 12, 2026
9 changes · saas-19.4
Resolved issues and error corrections
The attendance Gantt test setup now limits its data to the company created for the test. This prevents unrelated company data from affecting results, making validation more stable without changing the user-facing product.
Original PR description
Some tests in `hr_attendance_gantt` could include employees from other companies, making their expected employee counts depend on unrelated demo data. This commit adds the test company to the common domain so the gantt data only includes employees created for the test case. [error-945955](https://runbot.odoo.com/odoo/error/945955) Forward-Port-Of: odoo/enterprise#128108
This update prevents invoice forms from trying to show Ecuador reimbursement details to users who do not have accounting access. It avoids access errors for non-accounting users while keeping restricted reimbursement information available only to authorized accounting staff.
Original PR description
The reimbursement lines are added to the invoice form without any group restriction, while their model can only be accessed by accounting users. As a result, opening an invoice form as a user without accounting rights can raise an AccessError when the form view tries to retrieve the reimbursement subview. This commit restricts the reimbursement page to the groups allowed to access reimbursement lines. [error-946579](https://runbot.odoo.com/odoo/error/946579) Forward-Port-Of: odoo/enterprise#129981
Fixed an issue where a company card could be blocked from making new payments if one of its generated expenses had no date. Expenses without dates are now handled safely and only counted in all-time limit checks, keeping card payments available while preserving spending controls.
Original PR description
Fix a traceback preventing card users to make any payment with their card if at least one expense created by said card has no date Steps to reproduce: - Install hr_expense_stripe_demo (to access the test wizards) - Setup the stripe (demo) account with a valid card and funds - Create one transaction with the card - Remove the date of the generated expense -> Any further transaction with that card will fail After this commit: An expense with no date is considered only in the 'all time' Ticket [link](https://www.odoo.com/odoo/project.task/6326124) opw-6326124 Forward-Port-Of: odoo/enterprise#130337
The Chilean electronic invoicing process now handles empty responses from the tax authority when checking document status. This prevents scheduled processing from failing unexpectedly, helping invoice workflows continue reliably.
Original PR description
When checking the status of a DTE, sometimes the response will have no `text`. This causes a traceback error that halts execution of the cron `cron_run_sii_workflow`. opw-6322106 Forward-Port-Of: odoo/enterprise#130873 Forward-Port-Of: odoo/enterprise#129582
Vertical notebook tabs now line up correctly, making dialogs easier to read and use. Long tab titles wrap onto a new line instead of disrupting the layout, improving the experience in affected Kanban example dialogs.
Original PR description
When a user opened a page with a vertical notebook, the tabs were not aligned with each other. Vertical notebooks should now have properly aligned tabs. If a tab title is too long, it will wrap onto the next line instead of breaking the layout. task-[5933892](https://www.odoo.com/odoo/project/4105/tasks/5933892) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#287711 Forward-Port-Of: odoo/odoo#279098
Vertical notebook tabs are now visually separated when using dark mode. This makes pages easier to read and navigate, reducing confusion for users switching between tabs.
Original PR description
## Behavior Before the Commit When a user opens a page with a vertical notebook in dark mode, the different tabs aren't separate from one another. task-[5933892](https://www.odoo.com/odoo/project/4105/tasks/5933892) Forward-Port-Of: odoo/enterprise#131166 Forward-Port-Of: odoo/enterprise#126013
Image upload fields now apply the Android camera workaround only for affected Android Chromium browsers. This prevents unnecessary or confusing file picker options in other browsers and in the mobile app while keeping camera access available where it was missing.
Original PR description
Since Android 14, Chromium sends a file input accepting only images straight to the photo picker, which has no "Camera" entry. The image fields work around it by appending `dummy/allowAndroidCamera`…
Since Android 14, Chromium sends a file input accepting only images straight to the photo picker, which has no "Camera" entry. The image fields work around it by appending `dummy/allowAndroidCamera` to their accept attribute: a mimetype which is not an image is enough to get the generic chooser, and its camera, back. https://issues.chromium.org/issues/40937303 That invalid mimetype was appended for everyone, while only the browsers based on Chromium on Android need it: - the issue is an Android one, the desktop file dialogs are not concerned - the native app builds its own file chooser out of the accept attribute, and the invalid mimetype makes it offer the document picker on a field which only accepts images - Firefox and Safari are not based on Chromium and are not affected The workaround is now limited to the browsers needing it, and the expression moved from the template to a getter, since it is no longer a simple concatenation. Code made by Claude Supervised by RFR --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#287840 Forward-Port-Of: odoo/odoo#285643
SEPA payment XML files no longer include an address field that some European banks reject. This helps Austrian, German, and other affected banks accept batch payment files generated from Accounting.
Original PR description
### Issue before this commit: Generating a SEPA Credit Transfer XML for certain European banks (e.g., Austrian and German banks) fails because the generated XML contains an unexpected `<CtrySubDvsn>`…
### Issue before this commit: Generating a SEPA Credit Transfer XML for certain European banks (e.g., Austrian and German banks) fails because the generated XML contains an unexpected `<CtrySubDvsn>` tag inside the `<PstlAdr>` node, leading to the rejection of the batch payment file. ### Steps to reproduce the issue: 1. Download Accounting and l10n_at 2. Go to settings and activate SEPA Credit Transfer / ISO20022 3. Go to Journals > Bank > set an account number 4. Create an austrian contact (ex. FK Austria Wien AG) and set in the invoicing tab a bank (ex. AT526000071856851733) and set it trusted 5. Go to Bills, create a new one with the contact created and confirm it 6. Then click 'PAY' and select SEPA Credit Transfer 7. Go to Vendors > Batch Payments 8. Create a new one with: 1. Bank as bank 2. SEPA Credit Transfer as Payment Method 3. Add the bill just created 9. Validate and download the XML 10. See that a wrong tag <CtrySubDvsn> is added. This makes some banks refuse it ### Cause of the issue: External commit 30b023d394a5e4de64873188aa1d5961fecccb10 introduced the `<CtrySubDvsn>` tag to support US and CA requirements. However, the change was incorrectly applied to the common `account_iso20022` file, making it leak into standard European SEPA exports where the tag is not compliant with certain strict banking validation rules. ### Reason to introduce the fix: Revert the generic addition of the `<CtrySubDvsn>` tag in the common ISO20022 XML generation and restrict it only to the specific localizations (US/CA) that require it. This brings the `<PstlAdr>` node back to compliance, allowing Austrian, German, and other European banks to successfully process the files. opw-6523035 Forward-Port-Of: odoo/enterprise#131156 Forward-Port-Of: odoo/enterprise#131090
The Timesheets Assistant sample data generator now uses regular tasks instead of task templates. This ensures generated sample activities are properly connected to tasks, making demo and onboarding data more accurate.
Original PR description
The Timesheets Assistant sample data generator searches project.task with `is_template != False`, so it collects template tasks instead of regular ones and the generated activity never links to a task. Task-6566451 Forward-Port-Of: odoo/enterprise#131248