Monday, November 3, 2025
32 changes · 19.0
Enhancements to existing features
[task-5207451](https://www.odoo.com/odoo/all-tasks/5207451)
Original PR description
[task-5207451](https://www.odoo.com/odoo/all-tasks/5207451)
task-5207451
Original PR description
task-5207451
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The POS configuration screen no longer automatically focuses the search field on tablets and phones. This prevents the on-screen keyboard from opening unexpectedly, making the screen easier to use on touch devices.
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 POS config kanban view. 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 POS config kanban view ('view_pos_config_kanban').
Forward-Port-Of: odoo/odoo#231045The booking screen in Point of Sale no longer automatically focuses the search bar on touch devices. This prevents the on-screen keyboard from opening right away, making the experience smoother and less distracting for mobile and tablet 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
The barcode app now uses a more descriptive icon for the unpack action. This makes the button easier to understand at a glance and helps users work faster with less confusion.
Original PR description
In barcode the unpack icon isn't descriptive enough. Since font-awesome doesn't provide any icons to convey the proper meaning, this PR stacks 2 fa icons to create a new one. task-5051649
Resolved issues and error corrections
The Cambodian localization package now avoids duplicate tax names that could block manual chart template installation. This helps businesses set up Cambodian accounting correctly without installation errors.
Original PR description
Fixes an issue where some taxes in the Cambodian package have the same name, leading to errors when manually installing the chart template. Interestingly enough, the constraints does not trigger on the demo data company. Task [link](https://www.odoo.com/odoo/project.task/5194444) task-5194444 Forward-Port-Of: odoo/odoo#233066 Forward-Port-Of: odoo/odoo#232968
Documentation and clarification updates
This change adds the contributor’s signed CLA record to the repository. It ensures the contributor agreement is documented so the contribution can be accepted and tracked properly.
Original PR description
Description of the issue/feature this PR addresses: Absence of my CLA signature Current behavior before PR: Non-existence of my CLA signature Desired behavior after PR is merged: Existence of my CLA signature --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
Because Weblate had a lot of changes to process (we suspect it's due to adding new languages to all components), it delayed the rebase on the latest remote changes and a merge conflict happened. We have to solve this manually by restoring all the translations from the Weblate branch. Related: https://github.com/odoo/industry/pull/1305
Original PR description
Because Weblate had a lot of changes to process (we suspect it's due to adding new languages to all components), it delayed the rebase on the latest remote changes and a merge conflict happened. We have to solve this manually by restoring all the translations from the Weblate branch. Related: https://github.com/odoo/industry/pull/1305
This update fixes an internal automated test for the website editor so it waits for each step before continuing. It helps avoid false failures during busy test runs, improving release confidence without changing user-facing behavior.
Original PR description
This test was not awaiting each step properly, which becomes visible when the runbot is overloaded and the querySelector calls return null, at which point accessing `click` or `value` would trigger a traceback. runbot-161423 Forward-Port-Of: odoo/odoo#233900
Calendar events created through appointments now use the intended contact instead of guessing from the attendee list. This prevents incorrect contact information from appearing and makes related automated checks more stable.
Original PR description
When a calendar event is created, the system automatically adds contact details to the description. It currently "guesses" this contact by picking the first attendee who isn't the organizer. This guessing logic can be wrong, especially for events created by other apps (like Appointments) where a specific contact (e.g., the booker) is known. This not only shows the wrong information to the user but also causes instability in automated tests, which can fail unpredictably depending on the order of attendees. This commit refactors the event creation logic to be more flexible. It allows other modules to specify *which* partner should be used as the main contact, rather than leaving it to a guess. This makes the feature more robust and stabilizes the tests that rely on this behavior. Task-5207757
### Issue: Scans processed during picking batch creation in the barcode app are interpreted as scans related to the BarcodePickingBatchModel edition (that is product, lot, package,... scans) which does not make sense and raises multiple errors. ### Steps to reproduce: - In the settings enable "Batch Transfers" - Inventory/Operations/Transfers/Batch Transfers - Create a new batch and do not confirm it - Go to the barcode app > Batch Transfers > Clear filters - Select your draft batch
Original PR description
### Issue: Scans processed during picking batch creation in the barcode app are interpreted as scans related to the BarcodePickingBatchModel edition (that is product, lot, package,... scans) which…
### Issue: Scans processed during picking batch creation in the barcode app are interpreted as scans related to the BarcodePickingBatchModel edition (that is product, lot, package,... scans) which does not make sense and raises multiple errors. ### Steps to reproduce: - In the settings enable "Batch Transfers" - Inventory/Operations/Transfers/Batch Transfers - Create a new batch and do not confirm it - Go to the barcode app > Batch Transfers > Clear filters - Select your draft batch - Scan anything #### > Traceback #### Other issues: The same flow with a cancelled batch triggers the same tracebacks and, with a done batch triggers the message: "This picking is already done". ### Cause of the issue: Since `this.state.view === "barcodeLines"`, scans are processed as if we were processing an existing `BarcodePickingBatchModel` with lines: https://github.com/odoo/enterprise/blob/ce7460b27028d4133c4689afd2e8f303268494a0/stock_barcode/static/src/components/main.js#L204-L209 In particular, if the scan corresponds to a product, and error will be raised because the scan can not process a `createNewLine` for the scanned product in the current view and if the scan does not correspond to anything valid, it will raise an error because `this.picking` is undefined and `this.picking.use_existing_lots` raises an error: https://github.com/odoo/enterprise/blob/ce7460b27028d4133c4689afd2e8f303268494a0/stock_barcode/static/src/models/barcode_model.js#L1115 https://github.com/odoo/enterprise/blob/ce7460b27028d4133c4689afd2e8f303268494a0/stock_barcode_picking_batch/static/src/models/barcode_picking_batch_model.js#L177-L179 opw-5162164 Forward-Port-Of: odoo/enterprise#98022 Forward-Port-Of: odoo/enterprise#97526
_______________________________________ ## 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 sav
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
**Steps to reproduce:** 1. Install the module `project_timesheet_forecast_sale`. 2. Go to Project > Configuration > Projects and open any project. 3. Go to Dashboard, click the "Timesheets and Planning" button. **Issue:** - Opening the "Timesheets and Planning" view raised the following error: `TypeError: Cannot read properties of undefined (reading 'length')` **Cause:** - Error caused by [method](https://github.com/odoo/odoo/blob/5be6ef1ae3958a25e680f5fa30824fec57d63efe/addons/
Original PR description
**Steps to reproduce:** 1. Install the module `project_timesheet_forecast_sale`. 2. Go to Project > Configuration > Projects and open any project. 3. Go to Dashboard, click the "Timesheets and…
**Steps to reproduce:**
1. Install the module `project_timesheet_forecast_sale`.
2. Go to Project > Configuration > Projects and open any project.
3. Go to Dashboard, click the "Timesheets and Planning" button.
**Issue:**
- Opening the "Timesheets and Planning" view raised the following error:
`TypeError: Cannot read properties of undefined (reading 'length')`
**Cause:**
- Error caused by [method](https://github.com/odoo/odoo/blob/5be6ef1ae3958a25e680f5fa30824fec57d63efe/addons/web/static/src/views/pivot/pivot_renderer.js#L107-L109), occurred because the `planned_costs` and `effective_costs` fields are float fields but were declared with `widget="monetary"` in the pivot view. Since these fields use `format_type="monetary"` and have no corresponding `currency_field`, the pivot renderer failed to resolve currency mappings (`currency_ids` was undefined) and crashed.
**Solution:**
- Removed the `widget="monetary"` attribute from the `planned_costs` and `effective_costs` fields in the pivot view so they are treated as numeric measures instead of monetary ones.
**opw-5179265****Steps to reproduce:** 1. Install the module `project_timesheet_forecast_sale`. 2. Go to Project > Configuration > Projects and open any project. 3. On the project's dashboard, click the Dashboard stat button. 4. In the stats dialog, click "Timesheets and Planning". **Issue:** - Opening the Timesheets and Planning stat button from a Project dashboard (after installing `project_timesheet_forecast_sale`) raises the following error: TypeError: Cannot read properties of undefined (re
Original PR description
**Steps to reproduce:** 1. Install the module `project_timesheet_forecast_sale`. 2. Go to Project > Configuration > Projects and open any project. 3. On the project's dashboard, click the Dashboard…
**Steps to reproduce:**
1. Install the module `project_timesheet_forecast_sale`.
2. Go to Project > Configuration > Projects and open any project.
3. On the project's dashboard, click the Dashboard stat button.
4. In the stats dialog, click "Timesheets and Planning".
**Issue:**
- Opening the Timesheets and Planning stat button from a Project dashboard (after installing `project_timesheet_forecast_sale`) raises the following error:
TypeError: Cannot read properties of undefined (reading 'length')
**Cause:**
- The method _getCellCurrency() expected every dataset to have corresponding currencyIds, but the Timesheet/Forecast report does not include any currency information in its configuration data.
As a result, config.data.currencyIds[key] was empty, leading to the crash when trying to access .length.
**Solution:**
- Handle missing currencyIds in _getCellCurrency() by checking for an empty or undefined entry before accessing it.
If no currency is defined (as is the case for timesheet/forecast reports), the method now simply returns.
**opw-5179265**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/enterprise/pull/98157 opw-5180712 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/o
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/enterprise/pull/98157 opw-5180712 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233997 Forward-Port-Of: odoo/odoo#233183
On small screens (e.g., Zebra scanner, iPhone 4), the image overlaps the barcode scan button, making it impossible to click and scan new items. ### Steps to reproduce: On a small screen size (Zebra scanner, Iphone 4,..) * Open barcode app * Go on Operations -> Receipts * Apply a filter so that the list becomes empty. -> the image is over the barcode button and the text. ### Observation: Our image (in div .o_view_nocontent) has position absolute, anchoring it to the top part of
Original PR description
On small screens (e.g., Zebra scanner, iPhone 4), the image overlaps the barcode scan button, making it impossible to click and scan new items. ### Steps to reproduce: On a small screen size (Zebra…
On small screens (e.g., Zebra scanner, iPhone 4), the image overlaps the barcode scan button, making it impossible to click and scan new items. ### Steps to reproduce: On a small screen size (Zebra scanner, Iphone 4,..) * Open barcode app * Go on Operations -> Receipts * Apply a filter so that the list becomes empty. -> the image is over the barcode button and the text. ### Observation: Our image (in div .o_view_nocontent) has position absolute, anchoring it to the top part of the screen where the search bar is located (in div .o_control_panel). The issue is that in barcode there is another element where the button to scan is located (o_kanban_tip_filter), and since the image is absolutely positioned relative to the top rather than this element, it ends up overlapping the button and the text, preventing interaction. ### Why the fix: The solution we chose is to change the position of the image to relative, for the image to not hide the text. Another possible solution was to make the image (more specifically .o_view_nocontent .o_nocontent_help) ignore all input, allowing them to go through the image and reach the button below. opw-5123880 Forward-Port-Of: odoo/enterprise#98243
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
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
The employee form view displayed misaligned or inconsistent avatar images on mobile screens. task-5058793 Forward-Port-Of: odoo/odoo#225157
Original PR description
The employee form view displayed misaligned or inconsistent avatar images on mobile screens. task-5058793 Forward-Port-Of: odoo/odoo#225157
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".
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
Hr Payroll users that are meant to be able to use the Resend Payslip by email button do not have enough access right to get the documents token to put into the email "Your Payslip" button. Add a sudo on the payslip to get the document access url after the check of user role has been done. If have the right to use the button, sudo the rest. Task-5049444 Forward-Port-Of: odoo/enterprise#93420
Original PR description
Hr Payroll users that are meant to be able to use the Resend Payslip by email button do not have enough access right to get the documents token to put into the email "Your Payslip" button. Add a sudo on the payslip to get the document access url after the check of user role has been done. If have the right to use the button, sudo the rest. Task-5049444 Forward-Port-Of: odoo/enterprise#93420
The return type form now displays with consistent vertical spacing. This is a small visual correction that makes the form look cleaner and easier to read.
Original PR description
The return type form view had an inconsistent vertical spacing due to the use of a paragraph instead of a span. task-5153900
This update adjusts an automated website rental test so it matches the new default date behavior. It helps prevent false failures in the test suite and keeps price checks accurate for current rental flows.
Original PR description
runbot-233276
When sharing a spreadsheet, users will now see only the relevant warning instead of two messages at once. This makes the sharing dialog clearer and avoids confusion when the share settings cannot be saved anyway.
Original PR description
Bug === 1. Create a spreadsheet 2. Add a partner as viewer 3. Set access vial link to edit => 2 warning are displayed (that the right will be extended, and that we can not share spreadsheet in edit mode to non-internal users). The first warning make no sens, because we can not save the modal. Task-5169034
This update corrects a few icons in the Discuss and Mail interface so they match the rest of the design. The affected buttons and chat elements now display the proper Odoo-style icons, improving visual consistency and polish for users.
Original PR description
Icon of invite-people and chats were changed from `fa-user-plus` and `fa-users` to respectively `oi-user-plus` and `oi-users`. Some occurrences of use of these icons were still using the `fa-` version, which looked off on UI. This commit replaces them to `oi-` as it should. Before <img width="653" height="530" alt="Screenshot 2025-11-03 at 11 28 41" src="https://github.com/user-attachments/assets/f76777d5-1b68-4d66-b465-e06e83862e17" /> After <img width="656" height="536" alt="Screenshot 2025-11-03 at 11 28 08" src="https://github.com/user-attachments/assets/8caef6bd-3c03-40c1-8a8b-0593753e6f24" />
The tests for the editor and report builder were updated to match the newer selection placeholder behavior. This keeps automated checks aligned with the current product behavior and avoids false test failures.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/225576 task-4129699
When an image in a website gallery is replaced or edited, the small gallery thumbnails now refresh automatically to show the latest version. This keeps the gallery display consistent and avoids confusion when users change images or image settings.
Original PR description
Steps to reproduce: - Drag and drop an "Image Gallery" snippet onto the page. - Set the indicators to "Squared Miniatures". - Replace an image using the media dialog. - Look at the carousel indicators. They didn’t update. - Same issue if you change any other image options (filter, etc.) Before this commit, the edited image was updated but the small thumbnails under the gallery still showed the old picture. After this commit, the gallery listens to media updates and the thumbnails now refresh to match the edited image. task-5189020 Forward-Port-Of: odoo/odoo#233344
This change ensures that when a date field is opened, any other open date picker is closed first. It prevents confusing screens where two date pickers can appear at the same time, improving the form entry experience for users.
Original PR description
Before this commit, it was possible to have multiple pickers open if you programmatically set the focus on several date inputs. This could occur in a form view when the first date field was a `button` rather than an `input` and the second one is date field as an input. The autofocus feature only selects `input` elements (see `relational_utils.js`). We agree that this behavior should be improved in the future, but for now we prefer a simpler fix. Now, all pickers are closed before opening a new one. This ensures that only one picker is open, even if the focus changes multiple times. Steps to reproduce: - Go to Employees - Click on create - Go in the Certifications tab - Click on "Add a line" => The `valid_from` picker and the `valid_to` picker are open. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The payroll CFDI PDF was showing some employee information in the employer section. This fix places the details in the correct area so the document is clearer and avoids confusion when sharing payroll records.
Original PR description
Some info related to the employee is shown in the employer section. Task: 5224191
The remaining days field now uses the updated date formatting when showing a date. This makes the displayed date consistent with the rest of the app and improves readability for users.
Original PR description
Before this commit, remaining_days widget was not using the new date formatter when showing the date. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website menus linked to pages will now only appear active when the visitor is on the exact matching page. This prevents the wrong menus from being highlighted at the same time, making navigation clearer and more accurate for visitors.
Original PR description
__Current behavior before commit:__ A menu is shown as active if the unslug version of its URL matches the current accessed URL. The issue is that the unslug version of a menu linked to a page has no real meaning. Such menu should only be shown as active if the request URL path matches exactly. __Description of the fix:__ Added a check to ensure that when a menu is linked to a page, it isn't shown as active if its path doesn't exactly match the request path. __Steps to reproduce:__ 1. On the website, go to Site > Pages 2. Create a new page with title "iOS 26" and another page with title "iPadOS 26" 3. Go to /ios-26 4. Both menus "iOS 26" and "iPadOS 26" are highlighted task-5094899 Forward-Port-Of: odoo/odoo#233865 Forward-Port-Of: odoo/odoo#230623
The payment screen no longer shows the total amount on payment method buttons when cash rounding is not configured. This reduces confusion for cashless or standard sales and makes the checkout display more accurate.
Original PR description
Before this commit: ==================== The total amount was displayed on payment method buttons on the payment screen even when no cash rounding method was configured. After this commit: ======================= The total amount is no longer shown on payment method buttons if no cash rounding method is configured. Task-5219865