Daily updates from Odoo
Thursday, October 9, 2025
83 changes
20 changes
Resolved issues and error corrections
This fixes a typo in the UAE payroll configuration where a salary rule was incorrectly labeled "Out of version" instead of "Out of Contract". The correction helps payroll users see the intended wording and avoid confusion when reviewing salary rules.
Original PR description
fix an accidental change during a forward port from "Out of Contract" to "Out of version" task-5075058
This change updates the mail module's automated tests so saving email HTML fields waits until the save action is actually available. This helps reduce false failures in Odoo's runbot test system and improves confidence in build results.
Original PR description
This commit tries to solve runbot issues with mail html fields widget. It seems clicking on the save button manually is not generating a call to the backend. This could be due to the fact the button is not enabled due to the data being invalid. Therefore using the clickSave util could be useful in those situation since waiting that the button becomes enabled. This solution is not 100% sure to fix the issue in all cases but manually disabling the button is creating the issue we can observe in those runbots. There is a good chance it might work. fixes-runbot-231582 fixes-runbot-233049 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227484
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/odoo/2328/tasks/5003595) Forward-Port-Of: odoo/enterprise#94769
Original PR description
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/odoo/2328/tasks/5003595) Forward-Port-Of: odoo/enterprise#94769
The employee form now displays the private address city, state, and ZIP fields in better horizontal alignment. This makes the Swiss payroll employee form easier to read and use, reducing visual confusion when entering address details.
Original PR description
Wrap private address city, state, and zip fields in a flexbox container to ensure proper horizontal alignment on the employee form view. task-5082714 Forward-Port-Of: odoo/enterprise#94779
The employee form layout now keeps the private address city, state, and zip fields aligned on the same row. This improves readability and reduces visual confusion when viewing or editing employee address details.
Original PR description
Wrap private address city, state, and zip fields in a flexbox container to ensure proper horizontal alignment on the employee form view. task-5082714 Forward-Port-Of: odoo/odoo#226935
This fix prevents an error that could occur when an administrator clears browser data in Chrome while Live Chat is installed. It adds a safeguard so the Live Chat storage cleanup handles Chrome's empty storage notification correctly, improving reliability without changing user-facing features.
Original PR description
**Steps to reproduce:** Install 'Live Chat' Open Chrome Log in as 'Admin' Clear browser data **Current behavior before PR:** Clearing data triggers a storage event where the key parameter is null. An event listener attempts to call a method on this null key, leading to a runtime error. **Desired behavior after PR is merged:** A check has been added to ensure the key is not null, preventing the error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230298
Vendor credit notes created through purchase order matching now show the correct positive quantity when reversing over-billed purchase items. This prevents confusing negative quantities and helps keep purchase billing corrections accurate.
Original PR description
Steps to reproduce:- - Create a Purchase Order with Product A(invoicing policy: received quantities) and Quantity 3. - Create Vendor Bill with Product A and Quantity 3 and match it with the PO. - Receive only 2 on PO. - Now on PO, Quantity: 3, Received:2, Billed:3 - Create a Vendor Credit Note for that partner, add an empty line and save. - Click on PO Matching at the top. - Select line from Vendor Credit Note and line from PO, click match. Problem: In Vendor Credit Note Quantity: -1 (which should be 1) Before this commit: When credit note values are prepared from purchase order, quantity to invoice on purchase order is set as quantity on credit note. After this commit: When credit note values are prepared from purchase order, inverse(-ve) of quantity to invoice on purchase order is set as quantity on credit note. task-4975200 Forward-Port-Of: odoo/odoo#230487 Forward-Port-Of: odoo/odoo#221203
Spreadsheet-related tests now load the full chart library setup they depend on. This prevents later tests from failing unpredictably when they need specialized chart types such as treemap or geographic charts, improving reliability without changing user-facing behavior.
Original PR description
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/web#id=5003595&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
The restaurant appointment feature has been updated so its floor screen stays compatible with recent core point-of-sale changes. This helps prevent display or navigation issues for businesses using restaurant tables together with appointments.
Original PR description
This commit adapts an overriding method to reflect changes in the base method done in this pr https://github.com/odoo/odoo/pull/176016. Forward-Port-Of: odoo/enterprise#91334
Odoo Studio now identifies custom fields using their stored status rather than relying on naming rules. This keeps custom field behavior reliable as older name-based checks are phased out and reduces duplicate configuration work in related apps.
Original PR description
With the fields method `_is_manual_name` being deprecated, checking whether a field is manual can be done through the state instead of the field name. This avoids the need to override the definition of a custom field name in another place in the applications that need to do it. Related https://github.com/odoo/odoo/pull/224524
Test data for Hong Kong payroll accounting now includes required leave allocation records. This prevents validation errors in automated checks, helping keep payroll-related releases stable.
Original PR description
Issue: Unit tests are failing because test data was created without leave allocations, leading to validation errors. Fix: Added leave allocation data for time off types which requiring allocation in some tests. build_error-230409 Forward-Port-Of: odoo/enterprise#96060 Forward-Port-Of: odoo/enterprise#93160
The sales timesheet invoicing wizard now uses a safer format for a setting in its screen definition. This prevents errors for customers with custom tools that read these views outside the browser, while keeping the user experience unchanged.
Original PR description
Versions -------- - 17.0+ Issue ----- Some customizations may parse XML views using Python, in which case the `date_start_invoice_timesheet` field could return an error, as the `options` attribute uses a Javascript boolean `true`. Solution -------- Use `'true'`, which will get parsed as `true` in JS via `archParseBoolean`. Forward-Port-Of: odoo/odoo#230278
This fixes an issue where custom hour or half-day options could be unintentionally cleared when an employee changed the time off type. It helps preserve the user's leave request choices and reduces the need to re-enter information.
Original PR description
- made the value of checkboxes for `request_unit_half` and `request_unit_hours` stay the same when switching between timeoffs that can have hourly type task-id: 5085389 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228981
This fix ensures multiple quote carousels on the same website page each receive a unique identifier. As a result, visitors can use carousel arrows without accidentally controlling a different carousel on the page.
Original PR description
The selector used to target the carousel, to generate unique ID, did not include some carousels (s_quotes[...]). This led to issues with the controllers that would not be linked to the correct carousel. Steps to reproduce the issue: - Go to Edit - Drop two "s_quotes_carousel" - Save - Click on the "next" arrow of the second carousel => The second carousel does not slide, but the first one does.
The appraisal skills list now scrolls properly on mobile devices, so users can access the justification field and add or remove skill entries. This fixes a mobile usability issue that could prevent completing appraisal skill information smoothly.
Original PR description
Horizontal scrolling has been disabled on the appraisal skills list. An unwanted side effect of that is that the justification field along with the add and remove buttons are not visible on mobile. This PR re-enables the scrolling and removes some dead css. task-5001344 Forward-Port-Of: odoo/enterprise#96527 Forward-Port-Of: odoo/enterprise#91882
This fixes a small issue in the HTML editor that could trigger an unexpected JavaScript error when inserting content. The change helps keep editing actions stable and prevents interruptions for users working with rich text fields.
Original PR description
In `dom.insert`, the variable `container` was being redefined to a constant within a `while` loop, making it impossible to use the original variable within the loop. This caused an `Uncaught Javascript Error` ("Cannot access 'container' before initialization") whenever trying to access it within the loop but above the redefinition. This commit renames the constant to a previously unused name.
opw-5053872
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe color picker in the website and HTML editing tools now reopens on the tab that matches the user's last color choice, such as custom colors or gradients. This makes styling pages smoother by avoiding extra clicks and reducing confusion when adjusting colors repeatedly.
Original PR description
*web, website Before this commit, `BuilderColorPicker` had no memory of the last used tab and always opened on the first tab, regardless of whether the user had previously selected a color. After this commit, if the user has done a selection, the color picker opens on the tab of that selection. How to reproduce the problem: 1. Drop a new snippet, e.g. `s_text_block`, 2. Click on the snippet, then open the "Background" color picker 3. Pick a custom color or a gradient 4. If the color picker is stil open, press ESC 5. Open the color picker again 6. PROBLEM: the color picker is opened on the "theme" tab task-4367641
This fixes an issue where links opened from non-Website apps could be incorrectly changed and send users to the website homepage instead of the intended internal page. The change keeps Website-specific link behavior limited to the Website app, reducing confusion when working in other Odoo apps such as Knowledge.
Original PR description
Before this commit: we have the function in website to prefix a frontend url with `@` when clicking on the url in linkpopover. However, this function is usually used inside website. It also affects places where the url is an internal redirecting url like `/knowledge/article/33` and prefixing will lead to the website homepage. After this commit: we also check if the current url of the browser is also a frontend url, which means the user is inside the website app. Frontend links will not be prefixed in the backend pages, e.g. in all other apps except for website. The website patch doesn't influence public users as they won't have access to the website app anyways. task-5048403 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes an internal website test more dependable by using a standard helper to switch between websites. It reduces unstable automated test failures, helping keep website translation features safer to release.
Original PR description
`snippet_translation_switching_website` was previously using custom steps to switch the website. Though it worked, it was not very deterministic and broke the tour in a few runbot builds. This commit updates the `snippet_translation_switching_website` tour to use the `testSwitchWebsite` helper function instead of custom steps, providing a more reliable and deterministic way to switch websites. runbot-[229696](https://runbot.odoo.com/odoo/error/229696) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where highlighted, animated text could make mobile website pages scroll sideways. The change keeps the highlight graphic within the available screen width, improving the mobile editing and viewing experience.
Original PR description
Steps to reproduce: ==================== 1. Open Website Builder and switch to mobile screen 2. Select any word of a text 3. Apply highlight and animation Bug: - Page becomes scrollable to the right Cause: ======= SVG elements default to a `300px` `width`, which can overflow on smaller screens (e.g. mobile). This commit sets a `width` to prevent horizontal overflow. This is the link for the same issue but for vertical overflow. https://github.com/odoo/odoo/pull/215826 Reference: https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/width opw-5120678 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
17 changes
Resolved issues and error corrections
This fix prevents Live Chat from showing a runtime error in Chrome when an administrator clears browser data. It adds a safeguard for missing storage information, improving reliability during routine browser maintenance.
Original PR description
**Steps to reproduce:** Install 'Live Chat' Open Chrome Log in as 'Admin' Clear browser data **Current behavior before PR:** Clearing data triggers a storage event where the key parameter is null. An event listener attempts to call a method on this null key, leading to a runtime error. **Desired behavior after PR is merged:** A check has been added to ensure the key is not null, preventing the error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230298
The payroll test data for Hong Kong was updated to include required leave allocations. This prevents internal validation errors and helps keep automated checks reliable for future updates.
Original PR description
Issue: Unit tests are failing because test data was created without leave allocations, leading to validation errors. Fix: Added leave allocation data for time off types which requiring allocation in some tests. build_error-230409 Forward-Port-Of: odoo/enterprise#96060 Forward-Port-Of: odoo/enterprise#93160
This fix keeps the restaurant floor screen working correctly when appointments are used, following related updates in the core point-of-sale system. It helps prevent disruptions for restaurants that manage table service and bookings through Odoo.
Original PR description
This commit adapts an overriding method to reflect changes in the base method done in this pr https://github.com/odoo/odoo/pull/176016. Forward-Port-Of: odoo/enterprise#91334
This update adjusts how a setting is written in the sales timesheet invoice wizard so it can be safely read by Python-based customizations. It helps prevent errors for businesses using customized invoice workflows, with no expected change to normal user behavior.
Original PR description
Versions -------- - 17.0+ Issue ----- Some customizations may parse XML views using Python, in which case the `date_start_invoice_timesheet` field could return an error, as the `options` attribute uses a Javascript boolean `true`. Solution -------- Use `'true'`, which will get parsed as `true` in JS via `archParseBoolean`. Forward-Port-Of: odoo/odoo#230278
This fix prevents the editor from creating invalid page content when users change the style of text inside certain formatted elements. It helps ensure edited content keeps the expected layout and displays consistently in browsers.
Original PR description
Before this commit we would insert a block inside of a phrasing content if it's displayed as a block and we change its font style. For example, if we tried to modify text inside of a `<small>` that has `display: block` style, it would insert a new block inside of it. Steps to see the issue: - Have an open editor with `<small>Text</small>` content, that has `display: block` style - Select "Text" and change the font style to paragraph => It will be `<small><p>Text</p></small>` which is not valid HTML, and it will be parsed by a browser as `<small></small><p>Text</p>`, which is not the expected behavior. task-5123274 Forward-Port-Of: odoo/odoo#229043
Fixes an issue where custom hour or half-day selections could be cleared when employees changed the time off type. This helps avoid accidental changes to leave requests and reduces the need for users to re-enter their choices.
Original PR description
- made the value of checkboxes for `request_unit_half` and `request_unit_hours` stay the same when switching between timeoffs that can have hourly type task-id: 5085389 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228981
Inventory transfers now list each source document only once, even when multiple items come from the same receipt. This keeps transfer records clearer and avoids confusing repeated references for warehouse users.
Original PR description
### Behavior: #### Current: During the assignment of a picking, if several of its moves have the same origin, it will repeat that origin in its own origin. #### Expected: Only have one time each…
### Behavior: #### Current: During the assignment of a picking, if several of its moves have the same origin, it will repeat that origin in its own origin. #### Expected: Only have one time each origin. ### Steps to reproduce: From Inventory * Enable two step transfer for the warehouse From Barcode * create and validate new receipts with "Product A" * create and validate a second new receipts with "Product A" and other products From Inventory/Operations/Transfers/Receipts * Open the corresponding receipts * In "source Document" (Field: origin, Model : stock.picking) we can see that the reference from second receipts is repeated. ### Observation: In the case of already existing origins it will not duplicate them but it's missing if several item comes from the same origin. https://github.com/odoo/odoo/commit/0caa44ca97d9d197811a03ad2ff227df68d4437a#diff-55c6314416a6a400da6acd5018d161a55eeeb0e3008fec8828121e3dd12be0ebR1410 opw-4970159 Forward-Port-Of: odoo/odoo#223251
Survey participants can now submit a comment as their answer to eligible multiple-choice questions, even when roaming is enabled. This prevents incorrect required-answer warnings and adds safeguards so single-choice questions cannot receive multiple answers.
Original PR description
Issue: When answering a question with a comment in multiple choice with roaming activated for the survey, the UI will display a warning message that says the question requires an answer. Cause: The backend creates a skipped record if none of the pre-created answers is chosen. Solution: Don't create a skipped record if a comment counts as an answer and a comment is provided. Added validation of input and unittests Task-5062984 Forward-Port-Of: odoo/odoo#226022
Creating a goal from an employee appraisal now assigns it to the employee being appraised instead of the current logged-in user. Goals created from the general Goals menu remain blank by default, reducing accidental misassignment and improving data accuracy.
Original PR description
If you go on _appraisals -> any employee -> goals smart button -> new_, it will populate the employee field with the current user. Instead, the field should be filled by the appraisal's user. If the goal is created from the "Goals" menu item directly, then no user / manager should be put by default in the goal's fields. I changed the field's default value to use the employee already passed in the context. I also added some tests to make sure the bug doesn't happen again. task-5048292 Forward-Port-Of: odoo/enterprise#93522
This fix stops Odoo from recreating the default administrator employee record during updates. It helps companies that have replaced the default setup with their own HR workflow avoid unwanted duplicate or obsolete employee records.
Original PR description
The `employee_admin` is a default admin option. Later when clients set up their work flow they set up their own admin employee. This record is not present, and it doesn't make sense recreate it with every update. 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 Forward-Port-Of: odoo/odoo#230250 Forward-Port-Of: odoo/odoo#228117
Videos added inside certain website building blocks now expand to the full available width instead of appearing too small. This makes pages using Masonry and similar layouts look more consistent and gives editors the expected visual result without extra workarounds.
Original PR description
To reproduce: ============= 1- In Website edit mode, drop the "Masonry" snippet. 2- Add a video in one of the text blocks. -> It will appear smaller than expected, with no way to make it larger Why: ==== The child iframe already had width: 100%, but it can only stretch to 100% of its parent container. If the parent container (.media_iframe_video) doesn't have an explicit width, it defaults to its minimum content size. This issue happens specifically in blocks where the columns are display: flex. As a result, the iframe ends up being too narrow despite having width: 100%. Solution: ========= By adding width: 100% to the container itself, it now fills the grid cell, and the iframe inside fills the container. opw-5104640 Forward-Port-Of: odoo/odoo#229001
A typo was corrected in the Attendance app's department grouping option. This helps users see the correct department label when organizing attendance records, reducing small reporting or navigation confusion.
Original PR description
- Fixed typo in groupby for 'department' task-id - 5109185 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228334
This fixes missed updates from a previous merge for India's localization setup. It corrects chart of accounts data and renames export-related taxes so accounting labels and configuration are accurate for Indian companies.
Original PR description
During the following [fw-port](https://github.com/odoo/odoo/pull/229757/) and resolving conflicts few changes such as Renaming of taxes and change of CoA was missed out in this commit we resolve the issue and add the missing changes that were unintentially missout during fw-port --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes failing automated tests for Hong Kong payroll accounting after a related leave type was moved to another part of the product. It helps keep the payroll accounting test suite reliable without changing customer-facing behavior.
Original PR description
Explanation: l10n_hk_hr_payroll.holiday_type_hk_annual_leave is moved to community. build_error-233182
This fixes an issue where pasted text could lose active formatting, such as bold, when inserted into an empty editor field. Users can now rely on selected formatting being kept for plain text, while special media handling remains unchanged.
Original PR description
Problem: When text is inserted inside an empty format, the format is lost. Cause: After https://github.com/odoo/odoo/commit/ae33ca3d38d4a5adaad3015f036321d473713638, any empty format gets removed if content is inserted inside. Solution: Only remove the empty format if a media element is added. This preserves styling when inserting plain text inside an empty format. Steps to reproduce: 1. Copy some text from somewhere. 2. In an empty task description, press CTRL+B. 3. Press CTRL+SHIFT+V. 4. Notice that the text is not bold, even though the format was active. task-5136314 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adjusts an internal test related to link previews in messages so it is formatted more clearly and reliably. It helps maintain quality for the messaging feature without changing how users interact with the system.
In restaurant point of sale, the bill splitting screen now closes correctly once the last split item has been paid. This prevents staff from seeing an empty 0 amount split screen after a fully paid order, reducing confusion during checkout.
Original PR description
When splitting a bill, a specific flow would leave the bill splitting screen open event when everything was paid. Steps to reproduce: ------------------- * In pos restaurant add 2 product to the order * Select Action > Split * Select a product * Click Pay(ment) and validate the payment * Continue * Select the last product * Click Pay(ment) and validate the payment * Continue > Observation: The Bill splitting screen is still open at 0$ Why the fix: ------------ When one or more products are selected a new order is created with those products. If the quantities match, it's the last payement for that bill, we can directly pay. The original order will then be closed. opw-5006042 Forward-Port-Of: odoo/odoo#228991
1 change
Resolved issues and error corrections
Fixes an issue where helper text in Barcode receipts could appear as raw HTML after validating a filtered transfer. Users now see the intended readable message, reducing confusion during warehouse operations.
Original PR description
Issue: ------ When validating a transfer after filtering by scanning a product, the empty help message was shown as raw HTML instead of parsed text. Steps to reproduce: ------------------- 1. Install Barcode. 2. In Inventory, create a receipt with product Pedal Bin. 3. Click Mark as Todo. 4. Open Barcode → Operations → Receipts. 5. Scan the barcode of Pedal Bin. 6. Open the receipt and validate. The helper text is displayed in raw format. Cause: ------ The server returned the help text as a plain HTML string. Since JSON serialization strips Python markup objects, the client received raw HTML, which was not parsed and therefore rendered as-is. Fix: ---- The web client now wraps the help text with `markup()` before display, ensuring the message is parsed and shown in a readable format. opw-5090075 Forward-Port-Of: odoo/enterprise#95020
10 changes
Resolved issues and error corrections
WhatsApp message read indicators can now be shared consistently across message previews and chat bubbles. This reduces duplicated logic and helps ensure users see the same read-status cues in more places.
Original PR description
Before [this](https://github.com/odoo/odoo/pull/230075), the `showSeenIndicator` was part of the `Message` component, since that is the only place it was used, but with the intended change it will now be used by the `NotificationItems` and `Chatbubble` to show in the message previews. As the `showSeenIndicator` was part of the message component we had to redifine this getter every time we had to use it. This commit moves it from message component to message model so that it can be reused anywhere it is needed. Community PR: https://github.com/odoo/odoo/pull/230075 task-4825814
This update changes how AI tool functions are called so they are easier to customize and stay aligned with newer Odoo versions. It helps reduce compatibility issues for future overrides without changing the user-facing AI experience.
Original PR description
To ease the override and compatibility with what is done in 19.0, we call the function with kwargs instead of args. Forward-Port-Of: odoo/enterprise#96630 Forward-Port-Of: odoo/enterprise#96528
The Mexican electronic invoicing module now preserves valid accented characters, including ü, in legal names. This prevents compliant customer or company names from being incorrectly altered and helps avoid issues with SAT invoice validation.
Original PR description
Previous commit (#95207) removed accents for names including character ü which indeed is a recognized character for SAT opw-5125107 Forward-Port-Of: odoo/enterprise#96043
The Indian payroll demo contract now uses Mitchell Admin as the HR Responsible instead of OdooBot. This makes the sample offer signing flow better match a realistic logged-in user scenario for demos and testing.
Original PR description
Currently, OdooBot is set as the HR Responsible in the default contract template demo data. To make the offer signing process more realistic and aligned with the login user, OdooBot is replaced with Mitchell Admin. task-5095841 Forward-Port-Of: odoo/enterprise#95176
Payroll payment reports now handle employees who have multiple bank accounts, including accounts assigned a 0% salary split. This prevents report generation from failing and lets payroll teams produce the CSV reliably in split-payment setups.
Original PR description
-When generating a payment report CSV for user with multiple bank accounts that have a salary split of 100%/0%, a traceback occurs. -The logic has been adjusted so that bank account of 0% split percentage can be included in the payment report. Forward-Port-Of: odoo/enterprise#94468
The update moves HR-related scheduling tests into the HR-specific project module so builds no longer fail when the HR app is not installed. This keeps automated checks aligned with installed apps and improves reliability without changing user-facing behavior.
Original PR description
Steps to reproduce: - start test_auto_schedule_flex_resource when hr not installed. => `AttributeError: 'res.users' object has no attribute 'action_create_employee' Source: - action_create_employee comes from hr, but the test is in project_enterprise Fix: - tests related to hr moved to project_enterprise_hr Forward-Port-Of: odoo/enterprise#96365
Closing the AI chat window in Discuss is now covered by a test to ensure it does not cause a crash. This helps keep the messaging experience stable when users dismiss AI-assisted drafting.
Original PR description
https://github.com/odoo/odoo/pull/230609
fix an accidental change during a forward port from "Out of Contract" to "Out of version" task-5075058 Forward-Port-Of: odoo/enterprise#94144
Original PR description
fix an accidental change during a forward port from "Out of Contract" to "Out of version" task-5075058 Forward-Port-Of: odoo/enterprise#94144
The spreadsheet document tests now load the full chart support they need before running. This prevents later tests from failing unpredictably when they rely on specialized chart types such as treemap or geo charts.
Original PR description
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/web#id=5003595&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#96697
The payroll settings now show the Accounting section for every country, making the Batch account move lines option accessible to all users. SEPA-specific payroll settings remain limited to SEPA countries, so businesses outside SEPA can use the accounting batching option without seeing irrelevant payment settings.
Original PR description
Made the "Accounting" block visible for all countries and placed the Batch account move lines option inside it, instead of inside Payroll SEPA. As a result, Payroll SEPA remains visible only for SEPA countries, while Batch account move lines is now available for all. task-5138344
24 changes
Resolved issues and error corrections
Clearing browser data in Chrome could cause Live Chat to run into an error in the background. This update adds a safeguard so the feature handles that browser event cleanly, improving reliability for users.
Original PR description
**Steps to reproduce:** Install 'Live Chat' Open Chrome Log in as 'Admin' Clear browser data **Current behavior before PR:** Clearing data triggers a storage event where the key parameter is null. An event listener attempts to call a method on this null key, leading to a runtime error. **Desired behavior after PR is merged:** A check has been added to ensure the key is not null, preventing the error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230298
This update adjusts the Mail module's automated test behavior so saving email HTML content waits for the save action to be available before proceeding. It helps reduce false test failures in Odoo's validation systems, improving release reliability without changing day-to-day user functionality.
Original PR description
This commit tries to solve runbot issues with mail html fields widget. It seems clicking on the save button manually is not generating a call to the backend. This could be due to the fact the button is not enabled due to the data being invalid. Therefore using the clickSave util could be useful in those situation since waiting that the button becomes enabled. This solution is not 100% sure to fix the issue in all cases but manually disabling the button is creating the issue we can observe in those runbots. There is a good chance it might work. fixes-runbot-231582 fixes-runbot-233049 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230375 Forward-Port-Of: odoo/odoo#227484
This update adjusts payroll accounting tests to match recent changes in how employee contract information is stored. It helps keep automated checks reliable without changing day-to-day payroll features for users.
Original PR description
Explanation: hr.contract is reworked into hr.version runbot-229897 Forward-Port-Of: odoo/enterprise#90357
An automated accounting reports test was adjusted to match the updated top bar behavior. This prevents a test from manually opening a menu that now opens automatically, helping keep quality checks reliable without changing user functionality.
Original PR description
As the dropdown of embedded actions of the top bar is now automatically opened when the top bar is enabled and there is only one visible action (see https://github.com/odoo/odoo/pull/208005), we remove a step that would manually open that dropdown. task-5072899
This fixes an issue where custom hour or half-day options could be unintentionally cleared when employees changed the type of time off request. It helps users keep their intended leave settings when switching between compatible time off types, reducing mistakes and rework.
Original PR description
- made the value of checkboxes for `request_unit_half` and `request_unit_hours` stay the same when switching between timeoffs that can have hourly type task-id: 5085389 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228981
The AI Copywriter dialog now shows its alternative writing mode labels in the user's selected language. This improves localization consistency and makes the tool clearer for non-English users.
Original PR description
Description of the issue/feature this PR addresses: The alternativemodes on the AI Copywriter dialog are not translated Current behavior before PR: <img width="1079" height="250" alt="image" src="https://github.com/user-attachments/assets/fced9432-b557-44de-9b7c-a31547b7a16b" /> Desired behavior after PR is merged: <img width="1078" height="250" alt="image" src="https://github.com/user-attachments/assets/1499836a-924e-425c-b328-27a378eae62a" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a small formatting issue in the sales timesheet invoicing wizard that could cause errors for some customized systems. It improves compatibility for businesses using custom integrations or Python-based view processing without changing normal user workflows.
Original PR description
Versions -------- - 17.0+ Issue ----- Some customizations may parse XML views using Python, in which case the `date_start_invoice_timesheet` field could return an error, as the `options` attribute uses a Javascript boolean `true`. Solution -------- Use `'true'`, which will get parsed as `true` in JS via `archParseBoolean`. Forward-Port-Of: odoo/odoo#230278
This fixes an issue in Firefox where users could accidentally type into a website search bar while editing a page. The change keeps the search bar stable during editing, preventing accidental content changes and matching behavior seen in other browsers.
Original PR description
It's possible to type something inside of a searchbar while in the edit mode on Firefox, which is not the expected behavior and which is not the case in other browsers, for example, Chrome. Steps to see the issue: - Open Website and start editing - Drop a searchbar - Click on the input - Type something => It will remove the searchbar and add text to the searchbar button. This happens because of the different behavior on Chrome and Firefox of `pointer-events`. The searchbar input has `pointer-events` set to `none` and in Chrome it blocks any activity on the input, including `beforeinput` events, but Firefox doesn't. This commit fixes this problem making the searchbar input not `contenteditable`. task-5144517
This fix prevents selected start and end hours from changing when an employee switches between hourly time off types. It helps avoid accidental changes to leave requests and keeps the requested time accurate.
Original PR description
- made `request_hour_from` and `request_hour_to` stay unchanged when switching between time off types task-id: 5085389 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue in the Recruitment app where some demo job offers showed a warning and blocked users from editing their properties. The affected demo jobs now use the current company automatically, so configuration works as expected.
Original PR description
Steps to reproduce: - Go to the Recruitment app - Open the configuration panel for the demo offer for CTO, Consultant, Experienced Developer or Human Resources Manager - Click on the cogwheel - Select "Edit properties" - A warning appears and you can't edit properties Reason: The definition of the job demo data sets the "company_id" field to False, which causes an error when you try to edit the properties. How it was fixed: By removing the explicit value of False for the field "company_id", it will auto assign the field to the current company and allow the properties to be edited correctly. Task ID: 5093032 Forward-Port-Of: odoo/odoo#227633
fix an accidental change during a forward port from "Out of Contract" to "Out of version" task-5075058 Forward-Port-Of: odoo/enterprise#94144
Original PR description
fix an accidental change during a forward port from "Out of Contract" to "Out of version" task-5075058 Forward-Port-Of: odoo/enterprise#94144
Creating a new website page while using mobile view no longer causes an error. This helps website editors work reliably across device previews without being interrupted by a technical traceback.
Original PR description
Steps to reproduce: 1.open website. 2.switch to mobile view. 3.click new button and select new page option 4.a traceback occurs. Before this commit: Creating a new page in mobile view raised a traceback because contentDocument was undefined due to an incorrect selector. After this commit: The issue is resolved by using the correct querySelector value, ensuring that contentDocument can be accessed properly. Forward-Port-Of: odoo/odoo#227218
Forum navigation now has more consistent breadcrumb and heading typography. This makes forum pages easier to scan and creates a more polished experience for visitors.
Original PR description
This commit fixes typography in the forum by refining the style of breadcrumbs and headings, making navigation more consistent. | Before | After | |--------|--------| | <img width="369" height="104" alt="Screenshot 2025-09-16 at 10 54 29" src="https://github.com/user-attachments/assets/545ade80-beb9-4846-a83a-6cccbaff66d5" /> | <img width="341" height="106" alt="Screenshot 2025-09-16 at 10 53 54" src="https://github.com/user-attachments/assets/f8752432-c1ea-4f63-a48c-eb1b2a4316d4" /> | task-5079831 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents Odoo from recreating the default employee administrator record during updates. It helps companies that have already configured their own HR administrator avoid unwanted default data returning after upgrades.
Original PR description
The `employee_admin` is a default admin option. Later when clients set up their work flow they set up their own admin employee. This record is not present, and it doesn't make sense recreate it with every update. 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 Forward-Port-Of: odoo/odoo#230250 Forward-Port-Of: odoo/odoo#228117
The AI attachment handling now recognizes PDFs that are labeled with an alternate PDF format marker. This helps prevent valid PDF attachments from being missed when their file type is stored slightly differently.
Original PR description
## FIX Extend the PDF detection condition in `_get_attachment_content` to handle attachments with mimetype 'application/pdf;base64' in addition to 'application/pdf'.
Payroll calculations now retrieve payslip line information in a more targeted way, avoiding unnecessary system-wide cache refreshes. This should reduce extra processing and help keep payroll computations more reliable and efficient without changing user workflows.
Original PR description
Before this commit, when a compute needed to fetch the payslip lines values, we need to flush all to be able to correctly get the values thanks to a sql query. The problem is the `flush_all` will invalidate all recordset in cache and will do more than expected. This commit converts the sql query made to fetch the payslip lines values into a read_group to be able to remove the flush_all and let the orm invalidates the recordset/fields needed to correctly get what we want.
Navigation items no longer appear focused simply because the user hovered over them before an update. This prevents confusing visual focus states and keeps keyboard-style navigation indicators aligned with the user's actual focus.
Original PR description
This commit fixes an issue where some navigation items would be focused after a patch if it was hovered before. Now navigation items are not set as active when hovered, only if the container already was navigable. This commit also remove the "focus" class from any navigable items when the focus moves to a target that's outside of navigatable container. Task: [5145033](https://www.odoo.com/odoo/project.task/5145033) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The AI assistant now considers planned activities from the chatter alongside existing messages when building its prompt context. This helps produce responses that better reflect upcoming tasks and commitments recorded on a business record.
Original PR description
Append any planned activities to the chatter messages to be sent as a part of the prompt's context with the rest of the messages. task-id-5079055 Forward-Port-Of: odoo/enterprise#95764
Manual bank account creation now assigns the new journal to the same company as the online bank connection. This prevents errors when a user's current environment company differs from the bank connection's company.
Original PR description
Before this commit, when a user does a manual bank account creation, we didn't pass the company id for the journal creation. It implies that we use the environment value which is problematic because it could be different from the one account online link one leading to an error. The aim of this commit is ensuring that we pass, as company_id the same value as the one we have on account online link. no task id
This fix ensures Indian payroll template setup data is copied with all required fields. It prevents missing payroll configuration values when templates are loaded, helping reduce manual correction during setup.
Original PR description
in this commit, fixes issue when load template data fields
values didn't get copy.
issue:
missing fields in list of whitelisted_fields.
task-5155428The rental schedule once again shows products grouped as expected, fixing a regression introduced when the schedule became editable. This helps users navigate rental lines more easily and keeps the schedule view consistent with prior behavior.
Original PR description
This commit restores the `group_expand` functionality for the product field in the rental schedule, which was inadvertently removed in [^1] when the schedule was made editable. [^1]: https://github.com/odoo/enterprise/pull/88689
This fix ensures spreadsheet-related tests load the complete charting tools they need. It prevents later tests from failing unpredictably when specialized chart types such as treemap or geo charts are required.
Original PR description
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/web#id=5003595&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#96697
A typo was corrected in the Attendance app’s department grouping option. This helps users reliably group attendance records by department when reviewing employee attendance data.
Original PR description
- Fixed typo in groupby for 'department' task-id - 5109185 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228334
Creating a goal from an employee appraisal now correctly assigns the goal to the employee being appraised instead of the current user. Goals created directly from the Goals menu no longer prefill employee or manager fields, reducing incorrect records and cleanup work.
Original PR description
If you go on _appraisals -> any employee -> goals smart button -> new_, it will populate the employee field with the current user. Instead, the field should be filled by the appraisal's user. If the goal is created from the "Goals" menu item directly, then no user / manager should be put by default in the goal's fields. I changed the field's default value to use the employee already passed in the context. I also added some tests to make sure the bug doesn't happen again. task-5048292 Forward-Port-Of: odoo/enterprise#93522
5 changes
Resolved issues and error corrections
The Indian payroll demo leave records were adjusted so they no longer block system upgrades. This prevents upgrade errors caused by demo leave entries that had already been validated, with no impact on real employee leave data.
Original PR description
Issue: - Validation Error: 'This modification is not allowed in the current state.' When trying to update validated leave records during upgrade. Reason: - In Indian leave records, some demo leave entries were in the `validate` state. - During the upgrade, changes in the leave type triggered updates to these records that were already validated. - Trying to update validated records caused constraint errors due to the validation state. Fix: - Removed the leave validation for these demo records as it was not necessary. - The records stay in the `confirm` state during upgrade, preventing validation errors and allowing the upgrade to proceed without impacting demo data. build_error-231279
This fix updates the sales timesheet invoice wizard so its settings are easier for custom tools to read correctly. It reduces the risk of errors for businesses using customizations that process Odoo screens outside the standard browser flow.
Original PR description
Versions -------- - 17.0+ Issue ----- Some customizations may parse XML views using Python, in which case the `date_start_invoice_timesheet` field could return an error, as the `options` attribute uses a Javascript boolean `true`. Solution -------- Use `'true'`, which will get parsed as `true` in JS via `archParseBoolean`. Forward-Port-Of: odoo/odoo#230278
Adds a regression test to help ensure appointments can still be booked when resources use flexible working calendars. This reduces the risk of future changes breaking flexible resource scheduling and protects appointment booking reliability.
Original PR description
Adds regression test to ensure appointments can be booked with resources that have flexible calendars (flexible_hours=True). The test verifies that _check_appointment_is_valid_slot correctly validates slots for flexible resources, which was previously failing due to inverted unavailable intervals being generated in the resource module. This test validates the fix applied in odoo/odoo#229777 Related: odoo/odoo#229777
This fixes an issue where custom hour or half-day options could be unexpectedly cleared when users changed the time off type. Employees and HR teams can now switch between compatible time off types without losing their selected leave duration settings.
Original PR description
- made the value of checkboxes for `request_unit_half` and `request_unit_hours` stay the same when switching between timeoffs that can have hourly type task-id: 5085389 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228981
This fixes a timing issue that could make an automated barcode workflow test fail unpredictably. The change helps ensure validation waits for the right screen state, improving test reliability without changing business functionality.
Original PR description
Sometime, the test `test_scrap_change_source_location` could fail randomly. The issue happens in last few steps of the tour. What we do is: - We edit a move line lot in the form view; - We save it; -…
Sometime, the test `test_scrap_change_source_location` could fail randomly. The issue happens in last few steps of the tour. What we do is: - We edit a move line lot in the form view; - We save it; - We validate the operation. The validation is done by a barcode scan (`OBTVALI`) but since [1](https://github.com/odoo-dev/enterprise/commit/b3a855a870d1861515abaff8683081a39f95558f), barcodes scanned when the user is somewhere else than in the barcode lines view are skipped. With a little bit of bad luck, the tour scans `OBTVALI` while the save from the form view is not finished yet and thus, the scanned barcode is ignored. To reproduce that, run the test `test_scrap_change_source_location` locally in debug mode and add a throttling (eg.: Fast 4G) before to run the tour. To solve the issue, finetune the `validateBarcodeOperation` default trigger, so the error won't happen in this tour and other similar contexts. Runbot build error: [232331](https://runbot.odoo.com/odoo/runbot.build.error/232331)
6 changes
Resolved issues and error corrections
Invoices resent after a salesperson is archived now keep showing the correct sender name and image in the message history. This prevents confusion for customers and staff by ensuring invoice communications remain tied to the intended salesperson.
Original PR description
Steps to Reproduce: ------------------------- 1. Create a user (e.g., Test 1) with an email 2. Create an invoice with Test 1 as the salesperson and confirm it 3. Click Send and send the mail. 4.…
Steps to Reproduce: ------------------------- 1. Create a user (e.g., Test 1) with an email 2. Create an invoice with Test 1 as the salesperson and confirm it 3. Click Send and send the mail. 4. Archive the Test 1 user 5. Go to Customers and copy any customer’s email 6. Update the email on Test 1’s partner record 7. Go to the same previously created invoice and repeat step 3 Observation: ------------------------- In the chatter, the displayed sender name and image change. They no longer correspond to Test 1’s partner, even though the salesperson is still the same. Issue: ------------------------- In the following code: https://github.com/odoo/odoo/blob/3a1ec3bad5d4884952e09ed4eaabccf10cebbddf/addons/account/models/account_move_send.py#L451-L467 the `active_test` context is missing. Because of this, the partner search method in ORM skips archived users https://github.com/odoo/odoo/blob/3a1ec3bad5d4884952e09ed4eaabccf10cebbddf/addons/mail/models/mail_thread.py#L1942-L1951 Solution: ------------------------- Set `active_test=False` in the context so that archived user's partner records are also considered when determining the sender. opw-5067129
Opening an equipment record no longer crashes when a related maintenance request has no completion date. This prevents an error in the Maintenance app and lets users continue viewing equipment records normally.
Original PR description
**Steps:** 1. Create a new maintenance stage. 2. Create an equipment. 3. Create a maintenance request linked to that equipment. 4. Mark the maintenance stage as done. 5. Open the equipment. **Issue:** Opening equipment caused an error if close_date was empty: `unsupported operand type(s) for -: 'bool' and 'datetime.date'`. Cause: The maintenance request’s close_date remained empty when the stage was marked DONE. **Fix:** Check that close_date is not empty prior to computing MTBF. **Technical:** In _compute_maintenance_request, we calculate the difference between close_date and request_date.If close_date is empty, this calculation fails.
The call participant volume control is now hidden unless the user has joined the call. This avoids showing irrelevant controls and makes the call interface clearer for users who are only viewing the conversation.
Original PR description
Before this PR, the volume slider for call participants was visible even when the user was not part of the call. This PR fixes the behavior by ensuring the volume slider is only available when the user is in the call. task-[5092826](https://www.odoo.com/odoo/project/1519/tasks/5092826)
This fixes an editing option that appeared on the Partners page even though it only applies to the Customers page. Website editors will no longer see or try to use a filter setting that has no effect, reducing confusion when managing website pages.
Original PR description
Scenario: - install website_customer and website_crm_partner_assign - go to /partners - in edit mode, disable the option "Countries Filter" Result: nothing happen Cause: there is no filter options on /partners page, but the options of /customers page are targetting class o_wcrm_filters_top that is common to both page, so they are shown on /partners incorrectly. Fix in stable: change the selector to only show options on /customers. Fix in master: in website_customer, change the o_wcrm_filters_top class to o_wc_filters_top class. opw-5102381
SEPA payments will now only be marked as high priority for Belgian companies. This helps avoid unnecessary bank fees in countries where high-priority payments can carry extra charges, such as Switzerland.
Original PR description
Having priority set as HIGH for SEPA payments can induce extra fees (ex. in CH). This commit only sets the priority to HIGH for BE companies. task-4874217
The employee working schedule calendar now keeps the hours-per-week value on one line. This small visual fix makes schedules easier to read and avoids awkward wrapping in the interface.
Original PR description
Changed the style of hours/week in working schedule calendar so it doesn't appear on 2 lines Forward-Port-Of: odoo/enterprise#91993