Daily updates from Odoo
Thursday, August 28, 2025
28 changes
Enhancements to existing features
Payroll contract type lists now prioritize country-specific options when a localization is installed, followed by the standard options. This makes it easier for users in Belgium, Switzerland, India, Morocco, and the United States to pick the contract types most relevant to their local payroll setup.
Original PR description
When localizations are installed, the standard contract types are shown first. It should be the ones from the loca in first position then the standard ones. Task: 4979947
The audit report PDF export window has been made clearer and easier to use. Its title now better explains the action, and the available options appear earlier in the text so users can understand and set them more quickly.
Original PR description
This PR refines the modal used when exporting an audit report to PDF. The input toggles have been moved to the beginning of the text, and the modal's title has been updated to provide a clearer description of its purpose. Task-4989809
The accounting reports module now stores the return status in the database again. This lets the fiduciary dashboard retrieve complete return information more reliably for reporting and analysis.
Original PR description
The dashboard fidu needs the state field in sql so they can fetch all the data. task-5043219
This change standardizes an internal WhatsApp field name to better match Odoo naming conventions. It is a low-impact technical cleanup that helps keep the codebase consistent without changing user-facing behavior.
Original PR description
**Purpose of this PR**: Renaming selfMember to self_member_id task-[5000747](https://www.odoo.com/odoo/project/1519/tasks/5000747)
Website editors now get a smoother experience when creating pages and adjusting helpdesk website menus. This small improvement aligns Helpdesk with the updated website editor flow, making menu setup more intuitive and reducing friction for content teams.
Original PR description
This commit makes a small adjustment in website_helpdesk following the related community PR, which improves the menu editor to make page creation and menu editing easier and more intuitive for website editors. task-4422810
This update improves internal test helpers for text insertion in the HTML editor by better matching browser behavior. It helps ensure editor-related features are tested more accurately, reducing the risk of regressions for users.
Original PR description
Simulate BR removed by the browser in the unit tests.
This update adds automated checks for point-of-sale IoT hardware flows, including device setup and payment terminal handling with Six. It helps reduce the risk of regressions in connected checkout hardware and payment integrations without changing day-to-day user workflows.
Original PR description
*: pos_iot, pos_iot_six In this commit: ------------------ - Loaded data for `iot.box`, `iot.device`, and `iot.channel` to test the complete IoT flow from setup to core device functionalities. - Added payment method records and validated the payment terminal integration using Six. task- 4945645 Related PR: https://github.com/odoo/odoo/pull/220801 Forward-Port-Of: odoo/enterprise#93109 Forward-Port-Of: odoo/enterprise#91117
Resolved issues and error corrections
Signing a Belgian salary contract now correctly updates assigned cars or bikes so they are no longer shown as available for change. This prevents confusion in fleet planning and keeps employee vehicle assignments accurate.
Original PR description
Issue: When a contract was signed and a future driver was assigned to a vehicle, the car still remained marked as available. Fix: Once the first signature is completed and the future driver is assigned, the vehicle is correctly marked with plan_to_change_car = False (the same applies to the bike). Related task: 4926335. Forward-Port-Of: odoo/enterprise#92590 Forward-Port-Of: odoo/enterprise#89774
This update adds automated coverage for a previously fixed issue in bank statement reconciliation when no payment account is set. It helps ensure the accounting workflow remains reliable and prevents the same customer issue from returning in future releases.
Original PR description
Add a test to previous fix: https://github.com/odoo/enterprise/commit/582e3ee22cba404ff38782534e76569bc93a44ef opw-5039931 opw-5039807 Forward-Port-Of: odoo/enterprise#93308 Forward-Port-Of: odoo/enterprise#93182
The Belgian reporting tests were updated to match a renamed account used in annual account export checks. This keeps automated validation aligned with the latest account naming changes and helps prevent false test failures.
Original PR description
### PURPOSE:- - With this [PR](https://github.com/odoo/odoo/pull/221416), we are going to remove or update some accounts. - The test case **test_annual_account_export** fails because we change the account name of account 700000, from **Sales in Belgium (Trade Goods)** to **Sales of Goods in Belgium** in the above PR. ### SPECIFICATION:- - The above test case is modified as per the updated name. task-4948805
The Peru electronic purchase report now places detraction details in the official columns required by SUNAT. This helps businesses submit compliant TXT reports and reduces the risk of reporting errors or rework.
Original PR description
According to the Annex N.°8 of RS 040-2022/SUNAT (page 20 of https://www.sunat.gob.pe/legislacion/superin/2022/anexo-040-2022.pdf), detraction informations are considered as additional informations and should be displayed in columns 42 and 43. This commit moves detraction infos from columns 38, 39 to columns 42, 43. opw-4860530 Forward-Port-Of: odoo/enterprise#93044
The payroll test setup now gives the test user the needed payroll permissions before running Saudi payroll accounting checks. This prevents false build failures caused by missing access rights, helping keep payroll validation reliable.
Original PR description
steps to reproduce: install l10n_sa_hr_payroll_account run test_payslip_overtime_1 test added payroll user and manager groups to the test user to avoid missing access rights error build_error-230673
The payroll accounting test setup for Poland now gives the test user the required permissions. This prevents avoidable access errors during automated checks, helping keep payroll-related updates reliable.
Original PR description
add missing user groups to the test user to avoid access errors build_error-230676
Fixes an error that could stop an expense from being saved when the selected employee was not linked to a user account. This helps ensure expense uploads and edits remain reliable for all employee records.
Original PR description
Currently, an error occurs when creating an expense for an employee that is not linked to a user. **Steps to reproduce:** - Install the `hr_expense` module. - Create a new employee `test` (ensure…
Currently, an error occurs when creating an expense for an employee that is not linked to a user. **Steps to reproduce:** - Install the `hr_expense` module. - Create a new employee `test` (ensure this employee is not linked to a user). - Go to Expenses > upload [1] and open it. - Set the `Employee` to `test` and click `Save` (it may take up to 5 seconds). (See [2] for Steps to reproduce) **Error:** `AttributeError: 'hr.expense' object has no attribute 'uid'` **Root Cause:** At [3], the code incorrectly uses `self.uid` instead of `self.env.uid`. Since `hr.expense` records do not have a `uid` field, this leads to an `error`. **Fix:** This commit ensures that expenses can be saved correctly, even when the selected employee is not linked to a user. [1]: https://drive.google.com/file/d/1Ew2B_zMFCQbw-6nwfKctJPy1W4y2ZaIb/view?usp=sharing [2]: https://drive.google.com/file/d/1qP-9L_emaox3l9JyoNVYjqj1Ht8bJSmZ/view?usp=sharing [3]: https://github.com/odoo/enterprise/blob/804f263b80cb78884e3f246bcc7fa7ea4e0cf73a/hr_expense_extract/models/hr_expense.py#L90 sentry-6834628909 Forward-Port-Of: odoo/enterprise#93211
The AI Website page creation dialog now shows only the intended styled Generate Text toggle instead of both a checkbox and a switch. This removes a confusing duplicate visual element while keeping the option fully functional for users.
Original PR description
The 'Generate text' option used a custom switch with an AI icon, but the checkbox was still visible alongside the styled toggle, causing duplicate UI elements. The standard 'Switch' component already hides its checkbox with 'visually-hidden' class. This commit applies the same approach by adding the 'visually-hidden' class, ensuring the checkbox remains functional but only the styled toggle with AI icon is visible to the user. Task-5039009
This change makes an internal appointment-related test more predictable by fixing the appointment time used during the test. It helps prevent occasional false test failures, supporting smoother quality checks without changing customer-facing behavior.
Original PR description
Before this commit: --- - In the test case, the appointment start time was not explicitly set. - By default, the time was rounded (e.g, if current time is 8:09 PM, it defaults to 8:30 PM). - Sometimes this default time did not fall within the current hour filter, causing test failures. After this commit: --- - In the test case add `freezeDateTime` to ensure created appointemnt always matches the current filter. runbot-231194
This fixes a small setup error where return report options pointed to the return record instead of the correct report. It helps ensure users open and work with the intended return report without confusion or incorrect navigation.
Original PR description
During this pr: https://github.com/odoo/enterprise/pull/93187 We made a small mistake by setting the return id instead of the report id in the options.
Rental invoice lines are now excluded from automatic cost-of-goods-sold accounting entries. This prevents rental sales from generating inappropriate stock cost postings, improving financial accuracy for companies using rental workflows.
Original PR description
…entries Modified the COGS generation logic to skip any invoice lines that come from a rental sales order. task-4919306 Forward-Port-Of: odoo/enterprise#91472 Forward-Port-Of: odoo/enterprise#90901
Accounting report exports to XLSX now handle unusual account codes or values that look like infinity without crashing. This helps users reliably export reports such as the Trial Balance even when account data contains extreme numeric-looking text.
Original PR description
_set_xlsx_cell_sizes tries to convert each cell into a float if it's possible. If the cell contains "inf", "1e1000" (or any value such that float(value) = float("inf")), then there is an OverflowError which is not catch by the try/except.
To reproduce, set an account code as "1E1000", make this account appearing in the trial balance (by creating a move) and export it as XLSX.
opw-4981385
Forward-Port-Of: odoo/enterprise#91686Fixed an issue that caused the Payroll payslips page to crash when debug mode was enabled on a new database. This ensures payroll users and administrators can access payslips reliably while troubleshooting or configuring the system.
Original PR description
steps to reproduce: - create an empty db (without demo data) - install payroll - enable "debug" mode - go to Payroll > Payslips > Payslips menu - notice the traceback (`payrunId` is not a number) cause: - in "debug" mode the prop types are strictly checked - and `payrunId` is set optional but the type is `Number`, and `null` is passed fix: - pass `payrunId` only if it is not `null` :) task-5004937 Forward-Port-Of: odoo/enterprise#91996
Subscription upsells and renewals now keep the invoice journal from the original sale order when one was set. This prevents billing details from being lost or left blank when company templates do not provide the right subscription journal.
Original PR description
Up until now, the invoice journal set on a given subscription sale order was not copied when the order was upsold or renewed. Only the sale_order_template_id was copied, which depends on the company and has a value for the invoice journal inside. Usually, the copany either doesn't have a sale_order_template attached or they have one for normal sale orders, not subscriptions. In these cases, the invoice journal was extracted from the sale_order_template which didn't contain any (or any valid) and so was left empty. Here we check if the invoice journal value on the order has a value of its own and, in that case, we copy it so that it is preserved. This might be overridden by the value in the company template if there is one. Task: 5031427
Fixed an issue in OCR manual correction where removing a selected box appeared to work but was not saved. This prevents previously unselected boxes from reappearing as selected after refreshing the page.
Original PR description
During refactoring of the boxes interface of the OCR (see commit acfbaf3), this occurrence of `dataMoveId` wasn't replaced with `recordId`. It causes a small bug where the box unselection wouldn't work properly. Visually, it looked like it was working as the JS code handling the unselection of boxes worked fine, but the unselection wasn't saved to the database. Upon refresh, all the boxes that were selected at some point will still be displayed as "user selected" in the UI. task-none Forward-Port-Of: odoo/enterprise#92980
Restoring an Excel spreadsheet without a folder no longer saves an invalid folder value. This keeps the Documents view consistent and avoids confusing search panel behavior after files are restored from the trash.
Original PR description
Steps to reproduce: - Go to documents and upload an XLSX file - Move the XLSX file to the trash - Restore the XLSX file Current behavior before PR: - The key 'searchpanel_documents_document' was set to undefined, When the file had no folder Desired behavior after PR is merged: - Files without a folder now store 'false' as the default search panel folder_id Task: [5005319](https://www.odoo.com/odoo/2328/tasks/5005319) Forward-Port-Of: odoo/enterprise#92799
Features or functions removed from Odoo
Payroll configuration for salary structures and salary rules now opens only in list and form views. This removes an unsuitable card-style view, keeping administrators focused on the views intended for setup work.
Original PR description
#### Steps to Reproduce Payroll -> Configuration -> Salary Structures / Salary Rules #### Issue Kanban views are not relevant for payroll configuration. Users are supposed to work in list view, and mobile usage for editing payroll configuration is not meaningful. #### Fix This commit removes the kanban views from salary structures and salary rules, and updates the actions to use only list and form views. task-5025479
Code cleanup and technical improvements
This update refines internal automated tours used to verify key workflows across HR, payroll, manufacturing, inventory, restaurant appointments, timesheets, knowledge, and barcode operations. It makes these checks wait for the right screen elements before running, reducing false failures and improving confidence in release quality without changing day-to-day user features.
Original PR description
In this commit, we prefer to use : - trigger instead of assertions in run function. Tour engine wait for trigger in DOM while run fires directly when trigger is found. Then if trigger is too much obvious (like 'body') run is fired ... and assertions can occur too fast. - delay from currency, not hoot. - animation frame from native, not hoot.
This update reorganizes how Odoo identifies certain search rule operators behind the scenes. It helps keep behavior consistent across several apps without introducing visible workflow changes for users.
The payment form code for SEPA Direct Debit and subscriptions has been reworked to use Odoo’s newer interaction approach. This is an internal modernization that should help keep payment-related screens easier to maintain without changing the customer-facing process.
Original PR description
Convert payment form Public Widget to Interaction. task-4721516 See also: - https://github.com/odoo/odoo/pull/222198
Miscellaneous changes
Before this commit: Some of the names in the stock_type list were wrong, causing an invalid type error when validating delivery. After the commit: Added a lookup table to update the incorrect names to match names in FedEx documentation. Fedex docs: https://developer.fedex.com/api/en-is/catalog/ship/docs.html opw-4725488 Forward-Port-Of: odoo/enterprise#84762
Original PR description
Before this commit: Some of the names in the stock_type list were wrong, causing an invalid type error when validating delivery. After the commit: Added a lookup table to update the incorrect names to match names in FedEx documentation. Fedex docs: https://developer.fedex.com/api/en-is/catalog/ship/docs.html opw-4725488 Forward-Port-Of: odoo/enterprise#84762