Monday, November 3, 2025
17 changes · master
Enhancements to existing features
This update removes use of an outdated page rendering instruction from the system. It helps keep the platform aligned with current standards and reduces the risk of future compatibility issues, with little expected day-to-day impact for users.
Original PR description
task-4461090
Demo employee payroll data for India now uses the correct employee pay category and regular pay structure. Two sample payslips are also marked as paid, making the demo data better reflect realistic payroll workflows.
Original PR description
-Update the Pay Category of all demo data employees to "India: Employee Pay". -Update "India: Regular" Pay Structure on all the Demo Payslip Records. -Mark two payslips in the demo data as "Paid".
The POS booking screen no longer automatically opens the search field on tablets and phones. This prevents the on-screen keyboard from appearing unexpectedly, making booking navigation smoother for mobile users.
Original PR description
Task: [#5016943](https://www.odoo.com/odoo/project/1737/tasks/5016943) --- On tablets and phones, the search bar was autofocus when opening the booking screen in the POS frontend. This was causing the keyboard to open automatically, which was not a good user experience. Now the search bar is not autofocus on touch devices for the booking screen by creating a new controller to manage this. Forward-Port-Of: odoo/enterprise#96873
Resolved issues and error corrections
This fix ensures payroll runs only check payslips that actually have issues before listing those issues. It prevents incorrect issue handling when a pay run contains a mix of problematic and normal payslips, helping payroll teams review exceptions accurately.
Original PR description
Commit e4e573e1219f38561ae74e2086cee6d54cda6f46 introduced a bug. Steps to reproduce: - Generate a payrun with at least two payslips: one with an issue and another without any issue This commit fixes the issue by filtering the issues payslips before getting their issues. task-5230921
Code cleanup and technical improvements
This update modernizes internal messaging-related code by using the current shared model reference path instead of an older compatibility path. It should not change day-to-day behavior for users, but it helps keep maintenance simpler across AI, approvals, VoIP, live chat helpdesk, and WhatsApp features.
Original PR description
Imports of `@mail/src/model` should be made through `@mail/model/export`. In the past the source code of JS models was also in `@mail/core/common` but was moved in its `model/` folder. `@mail/core/common/record` was kept for backward compatibility.
The Planning shift recurrence banner no longer appears immediately after recurrence is enabled. It now shows only after recurring shifts have actually been created, avoiding misleading guidance for users.
Original PR description
**Steps to reproduce:** --------- 1. Create a shift. 2. Save the shift. 3. Open the shift and enable the recurrence. 4. Observe that the recurrence banner is immediately displayed. **Issue:** ----- The recurrence banner is shown as soon as a shift is marked recurring, even though no recurring shifts have been generated yet. This is misleading since the banner has no effect until the actual recurrence slots exist. **Cause:** ------- The banner visibility was based on repeat and id, so it appeared too early, before any recurring shifts were actually created. **Fix:** -------- Update the banner visibility condition to check for both repeat and recurrency. Now, the recurrence banner only appears once the recurrence record exists and recurring shifts are generated: task-5163851 Forward-Port-Of: odoo/enterprise#97245
A failing test setup was corrected so spreadsheet edition tests pass when that module is installed on its own. This helps keep automated validation reliable and reduces false failures during quality checks.
Original PR description
tests `test_image_attachment_copy_access_rights` and `test_image_attachment_deleted_access_rights` are failing when only `test_spreadsheet_edition` is installed. Runbot error: 233711
Fixed an error that could block French companies from sending a VAT report when launching the EDI VAT action from the tax return report menu. The wizard now keeps the related tax return context, so users can submit the VAT report without encountering a crash.
Original PR description
Steps to reproduce: - With a FR Company Setup - Create a bill with tax in past month - Create Tax return for past month, validate - Click "Submit", fill the required vals in wizard and 'Send VAT report' - Everything works as expected - From Accounting / Accounting / Closing / Tax Returns click Cog > EDI VAT - Fill the required vals in wizard and again 'Send VAT report' Issue: Traceback will raise `ValueError: Expected singleton: account.return()` Analysis: When opening the VAT Return wizard from Accounting / Accounting / Closing / Tax Returns the value of return record is not passed on opw-5107549 Forward-Port-Of: odoo/enterprise#98544
New salary offers created from an existing offer now receive a proper secure link with a generated token. This prevents broken offer links showing "False" instead of a valid token, helping recruiters share salary configurator offers reliably.
Original PR description
_______________________________________ ## Short functional explanation of the error When creating an offer on the page of another offer, the salary configurator url doesn't contain a token, but instead, contains token = false. ## Reproduction Steps 1. Open the recruitment module. If there's no job position nor application, create some. 2. Open an existing application and click on Generate Offer. 3. Click on New on the top left of the screen. 4. Fill the new application and click on save. ### Expected behavior The field 'Link' contains an URL with, at the end, &token=x, with x a randomly generated token. ### Unexpected behavior The field 'Link' contains an URL with, at the end, &token=False. ## Origin of the issue The token generation code wasn't called when creating a new offer the way described in reproduction steps. _________________________________________ opw-4885796 --- Forward-Port-Of: odoo/enterprise#98503 Forward-Port-Of: odoo/enterprise#89546
This fix prevents salary rule forms from incorrectly requiring a percentage base field after certain condition changes. Payroll users can now save salary rules without unnecessary validation errors, reducing friction when configuring payroll rules.
Original PR description
**Steps to reproduce:** - Install the hr_payroll module. - Open a salary rule form view. - Change amount_select to Percentage and try to save → validation error occurs because amount_percentage_base is required. - Keep amount_select the same and change condition_select to Salary Input → the same validation error occurs. **Issue:** The amount_percentage_base field is incorrectly made required even when condition_select changes. The requirement should depend solely on amount_select, not condition_select. **Cause:** The field amount_percentage_base remains mandatory when condition_select is updated, leading to validation errors. **Fix:** This PR adjusts the logic so that the amount_percentage_base field is required only when appropriate, based on both condition_select and amount_select. task-5090125 Forward-Port-Of: odoo/enterprise#95419
This change fixes an intermittent issue that could occur when closing AI-related chat windows. It makes the close process happen in the expected order, reducing unpredictable failures and improving reliability for users.
Original PR description
Attempt to fix runbot error 233689 by refactoring `_onClose` across patches. The problem occurs because of the async nature and the many side effects that occur. `_onClose` is not supposed to be async. PR community https://github.com/odoo/odoo/pull/233597
Point of Sale cash session names now keep a continuous sequence when cash posting fails. This prevents missing session numbers, making records easier to follow and reducing confusion during audits or daily reconciliation.
Original PR description
Before this commit, if an issue occurred while posting the cash details, the session sequence would still increment even though the operation failed, leading to gaps in session names. With this commit, the sequence only increments when the operation succeeds, ensuring continuous session naming without gaps. related: https://github.com/odoo/odoo/pull/233183 opw-5180712 Forward-Port-Of: odoo/enterprise#98468 Forward-Port-Of: odoo/enterprise#98157
This update makes closing AI-related chat windows more dependable by preventing timing issues that could cause inconsistent behavior. It helps reduce errors in automated checks and improves stability for users interacting with chat features.
Point of Sale preparation displays now include any free-text details entered for custom product attributes. This helps kitchen or preparation staff see the full customer request, matching the information already shown on receipts.
Original PR description
Steps to reproduce: ------------------- 1. Create a PoS product with an attribute of type "Radio", name it "X", and add a value to it, name it "Y", with the "Free text" option selected. 2. From PoS, click the product, for the attribute "X", select the value "Y", and enter some text in the text input area "blabla". 3. Order the product. Observation: On the preparation display, only the attribute name and value are display, but not the entered text, i.e. "X: Y" instead of "X: Y: blabla". Fix: ---- We now show the custom value (free text) if any. This matches what's been shown on the receipt in PoS. opw-5111768 Forward-Port-Of: odoo/enterprise#95874
The salary contract test setup was corrected to rely only on permission groups from modules it already depends on. This prevents avoidable test failures and helps keep quality checks stable without changing employee-facing functionality.
Original PR description
Before this commit: Running `hr_contract_salary` tests were failing, due to groups used from the module `hr_payroll`, which is not part of the dependencies. After this commit: Use groups from the dependencies. runbot-233547 Forward-Port-Of: odoo/enterprise#98286
The appointment calendar was adjusted to stay compatible with recent calendar display changes. This keeps appointment scheduling working smoothly as the interface evolves to support viewing multiple months.
Original PR description
This commit makes some changes to the appointment calendar renderer, since the renderer from /web has been changed to support the display of multiple months at once in the ActionSwiper.
This update cleans and standardizes website-related JavaScript files across several website modules. It helps keep the codebase easier to maintain without introducing expected changes for end users.
Original PR description
[LINT] website_documents, *: lint website related files *: website_enterprise, website_generator, website_product_barcodelookup, website_studio The goal of this commit is to lint the website related js files. task-5110180