Daily updates from Odoo
Wednesday, January 21, 2026
58 changes · master
New functionality added to Odoo
This update introduces a new setting that lets users decide whether attachments uploaded through the web client are automatically sent to the cloud. This gives administrators more control over data storage and allows them to tailor workflows without impacting the core functionality of the web client.
Original PR description
Introduce the 'Upload Record Attachments' configuration setting to control whether the web client automatically uploads new attachments to the cloud. This allows users to keep a valid cloud storage provider configured for customized backend logic or specific workflows, while preventing the default web client behavior from uploading every UI attachment to the cloud. Upgrade: https://github.com/odoo/upgrade/pull/9288 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
This update introduces a new keyboard shortcut (Ctrl+Alt+M) within the spreadsheet editor to quickly insert comments. This improves efficiency for users who frequently need to add annotations to their spreadsheets, streamlining the workflow and enhancing collaboration. The change is part of a larger task to improve spreadsheet functionality.
Original PR description
## Description:
Add some shortcuts
Task: [5231802](https://www.odoo.com/odoo/2328/tasks/5231802)
## review checklist
- [ ] feature is organized in plugin, or UI components
- [ ] support of duplicate sheet (deep copy)
- [ ] in model/core: ranges are Range object, and can be adapted (adaptRanges)
- [ ] in model/UI: ranges are strings (to show the user)
- [ ] undo-able commands (uses this.history.update)
- [ ] multiuser-able commands (has inverse commands and transformations where needed)
- [ ] new/updated/removed commands are documented
- [ ] exportable in excel
- [ ] translations (\_t("qmsdf %s", abc))
- [ ] unit tested
- [ ] clean commented code
- [ ] track breaking changes
- [ ] doc is rebuild (npm run doc)
- [ ] status is correct in OdooEnhancements to existing features
This update adjusts the maximum NSSF (National Social Security Fund) contribution limits to align with the latest regulations under the 2013 NSSF Act. Specifically, the lower and upper earnings limits have been revised, impacting the total combined contribution a worker can make. This ensures compliance with current Kenyan law.
Original PR description
This commit updates the NSSF Lower and Upper Earnings Limits in accordance with the 4th year of implementation of the NSSF Act 2013. - Set Lower Earnings Limit (Tier 1) to 9,000. - Set Upper Earnings Limit (Tier 2) to 108,000. - Resulting max combined contribution is now 6,480. Task: 5485002
This update enhances the user experience by visually indicating inactive comodel records (like contacts and users) within Odoo screens. Inactive records are now displayed with a faded text style and grayed-out avatars, making it easier for users to quickly identify and manage archived data. This improves clarity and reduces the need to manually check record status.
Original PR description
**WIP WIP WIP** When a screen displays comodel records (M2x), the only way to check if the record is archived is to open it. This commit sets a `text-faded` on M2x inactive comodel records and grays out the avatars of inactive contacts/users. task-5469063
This update enhances the testing process for Odoo's point-of-sale and self-order modules by making test utilities more realistic. The changes ensure proper initialization and validation of ticket generation, leading to more reliable test results. Additionally, a redundant model has been removed to streamline the system.
Original PR description
pos*: point_of_sale, pos_self_order Previously, ticket-generation tests relied on manual render calls, bypassing initialization logic and missing key method flows. This update refactors the test utilities to mimic real-life execution: tickets are now initialized via the main generation methods, and the final printed ticket is validated through the printer model. Additionally, Remove the extra pos.printer model from the self-order model loading Task-5391327
This update streamlines the process of uploading certifications within Odoo. The team has simplified the system by using a standard activity type for uploads, removing a redundant and complex setup. This change improves efficiency and reduces potential issues with managing certification data.
Original PR description
Simplify the activity type corpus as there is no dedicated logic requiring a specific mail activity type for uploading certifications. Task-5484984
This update enhances the UBO Form data upload process by adding a key piece of information – the ‘res_model’ – to the activity data. This improves the accuracy and completeness of the data sent during uploads, streamlining the reporting process for compliance. It’s a small change designed to improve convenience and data quality.
Original PR description
Improve convenience. Task-5484984
This update enhances how Odoo determines if a holiday falls within a specific year. The change utilizes a more reliable method for comparing dates, ensuring greater accuracy in holiday calculations and scheduling. This improves the overall reliability of the holiday management system.
Original PR description
This commit uses the Luxon method `hasSame` to compare `DateTime` years.
This update improves the email sent to employees after they confirm their appraisals. The email template has been updated to provide a clearer and more professional experience, enhancing communication and user satisfaction. This change focuses on improving the user experience within the HR app.
Original PR description
Task: 5502875
This update enhances the restaurant POS system by automatically summing guest counts when multiple linked tables are used. Previously, each table was counted separately. Now, if two tables are linked, the total number of guests across both tables is accurately displayed, providing a more complete view of customer occupancy.
Original PR description
When two tables are linked in the pos, we would like to sum the guests. Here an example : If Table 1 has two guests and Table 2 has three guests, then Table 1&2 will have five guests. task: 5490906 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243726
This update adds a warning message to the tax return process, alerting users when the companies they're currently managing don't align with the companies selected for the return. This prevents potential errors and ensures users are accurately reporting their business data for tax purposes.
Original PR description
Adds a warning banner to the return kanban view, when the user's active companies do not match the companies on the return. task-5213029
Resolved issues and error corrections
This update prevents the HTML Builder editor from freezing due to rare errors within its internal processes. A timeout mechanism is now in place to release the editor and alert the user to potential data issues, ensuring a smoother user experience. The change also includes safeguards to prevent long-running operations from causing problems.
Original PR description
Before this commit, if an error occurred within the mutex that did not explicitly throw, the mutex could remain locked indefinitely. This blocked subsequent actions and prevented the user from saving. This commit introduces a timeout mechanism for Operations. This is intended for very rare cases as a last resort to prevent the editor from becoming completely unresponsive. When a timeout occurs: - The mutex is released, allowing the user to recover (e.g. by deleting the faulty snippet). - The user is notified of the issue. - A warning is displayed during saving to indicate that the content might be in a corrupted state. Additionally, the `canTimeout: false` flag is added to options that are expected to remain open for long periods (such as the snippet modal). task-5152911 Forward-Port-Of: odoo/odoo#244786 Forward-Port-Of: odoo/odoo#233079
This update removes a redundant 'OK' button from form dialogs within the Point of Sale system. Previously, this change only applied when the 'pos_appointment' module was active. Now, the change is applied consistently across all POS form dialogs, improving the user experience and ensuring a uniform design.
Original PR description
Before this commit: =================== - The extra `OK` button in form view dialogs was removed only when the `pos_appointment` module was installed. After this commit: ================== - The CSS to remove the extra `OK` button has been moved from `pos_appointment` to the base `point_of_sale` module, ensuring consistent behavior across POS form dialogs. Task:5406858 Related Enterprise PR: https://github.com/odoo/enterprise/pull/102197 Forward-Port-Of: odoo/odoo#240165
This update removes a redundant 'OK' button from POS form dialogs, ensuring a cleaner and more consistent user experience across all Point of Sale operations. The change was made to standardize the styling, previously only applied when the 'pos_appointment' module was installed.
Original PR description
Before this commit: =================== - The extra `OK` button in form view dialogs was removed only when the `pos_appointment` module was installed. After this commit: ================== - The CSS to remove the extra `OK` button has been moved from `pos_appointment` to the base `point_of_sale` module, ensuring consistent behavior across POS form dialogs. Task: 5406858 Related Community PR: https://github.com/odoo/odoo/pull/240165 Forward-Port-Of: odoo/enterprise#102197
This update resolves an issue where the website editor could become unreliable when creating new pages under slower network conditions. The fix ensures the editor only opens after the iframe has fully loaded, resulting in a more consistent and dependable editing experience. This improves the overall usability of the website builder.
Original PR description
Steps to reproduce: 1. Set network speed to 3G 2. Create website Page from the systry new menu 3. click on edit button You'll face the traceback. The website editor could try to open before the iframe finished loading, leading to non-deterministic behavior. This commit ensures the editor initializes only after the iframe load event, making the edit action consistent and reliable. Erlier fixed was not covering the all the cases. PR: https://github.com/odoo/odoo/pull/238054 runbot-233039 Forward-Port-Of: odoo/odoo#243256
This pull request resolves a minor issue with the demo functionality within the Quality Control module. The changes ensure the demo runs correctly and provides a functional example for users. This improves the usability and clarity of the Quality Control module's demonstration.
Original PR description
demo
This update resolves an issue preventing localized date/time intervals within the appointment scheduling feature. The fix now correctly localizes only the start and end times of intervals, ensuring accurate display across different locales. This improves the user experience for scheduling appointments in various languages.
Original PR description
Following this refactor PR: https://github.com/odoo/enterprise/pull/96139, the localized method could not be applied to the whole interval object as it contains a model. This commit fixes the issue by localizing only the start and end of the interval. Runbot build error: https://runbot.odoo.com/odoo/runbot.build.error/238001
This update resolves a crash that occurred when grouping data in list views using floating-number fields with the 'monetary' widget. The fix ensures the system handles missing currency information gracefully, preventing aggregation errors and improving the stability of list views. This enhances the reliability of reporting and data analysis.
Original PR description
This commit resolves a traceback during list view aggregation when the view is grouped. The crash occurred specifically when aggregating a `float` field that uses the `monetary` widget. Unlike true `monetary` fields, the server does not automatically send a `currency_id` aggregate for `float` fields. The aggregation logic previously failed when this data was missing; it now handles the case by ignoring it since it's not supported. opw-5725692 Forward-Port-Of: odoo/odoo#244548
This update resolves an issue where a test for marking inbox messages as read would intermittently fail due to the order in which messages were processed. The change ensures the initial fetch of messages occurs first, guaranteeing the expected test outcome. This improves the reliability of the inbox read functionality.
Original PR description
The `Opening thread with needaction messages should mark all messages of thread as read` ensures that opening a channel marks the related inbox messages as read. However, this test can fail in a non-deterministic fashion. There are two flows that can mark inbox messages as read: fetching the messages or a manual request after opening the channel. The test expects the rpc to be issued, but if the messages are fetched before, it won't happen thus making the test fail. This commit awaits the initial fetch to prevent this issue. As a bonus, the second flow is also tested. runbot-237970 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#244693
This update fixes an issue where the Odoo Studio export process incorrectly excluded certain related and computed fields. The team refined the logic to handle these fields separately, ensuring a more accurate export of data. The Industry team has approved these changes.
Original PR description
This commit fixes the computation of excluded fields for the studio export models. Before this commit, the excluded fields computation was considering computed and related fields in a similar way but…
This commit fixes the computation of excluded fields for the studio export models. Before this commit, the excluded fields computation was considering computed and related fields in a similar way but there are subtle differences that cause the excluded fields to sometimes be wrong. While analyzing the heuristic with the ORM team, we decided to separate the computation of related and computed fields. After this commit, we have a refined computation of excluded fields for related and computed fields: - for computed fields (that are not related ones), we always exclude them except when they are writeable (i.e. stored or with inverse) - for related fields, we always exclude them when the relation is in the list of related models to exclude. We also exclude them when they are not writeable on the current record only (not the source record), except if they are required. Some export scenarios have been tested manually and brought with them adaptations in the hardcoded lists of default fields to exclude. The Industry team agreed with these changes. Task id: opw-4974787 Forward-Port-Of: odoo/enterprise#104780 Forward-Port-Of: odoo/enterprise#87530
A recent issue prevented users from using the database obfuscation command. This update corrects a technical error where the command was incorrectly processing database names, resulting in an error. Now, the obfuscate command functions as intended, ensuring data protection.
Original PR description
It is not possible to use the obfuscate command Steps to reproduce: 1. Initialize a database `test` 2. In a terminal, try to obfuscate the database with the command `python odoo/odoo-bin obfuscate --pwd=1234 -d test` 3. An error occurs Issue: `config['db_name']` returns a list Solution: Make sure we use obfuscate with a single database and get the first (and only) database in the list opw-5480280 Forward-Port-Of: odoo/odoo#244577
This update resolves an issue where scanning cashier barcodes would cause an error if employee logging was turned off. Now, the barcode scanning functionality works as expected regardless of whether employee logging is enabled, ensuring a smoother checkout experience for users. This change improves reliability and prevents disruptions during transactions.
Original PR description
Before this commit, if logging with employee was disabled, scanning a cashier barcode would raise an error. opw-5437310 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241756 Forward-Port-Of: odoo/odoo#241131
This update enhances how Odoo's spreadsheet feature retrieves cell data. Previously, data was organized as an object, but now it's returned as a simple array, making it easier for the spreadsheet to process and display information. This change improves the overall performance and reliability of the spreadsheet functionality.
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
This update resolves a test case issue related to creating public leave in Odoo. Specifically, the system now correctly passes the company information during leave creation, preventing errors that could occur due to conflicting work entries. This ensures accurate public leave functionality.
Original PR description
In this PR, We are explicitly passing the company to create a public leave Task-4596057
This update resolves a crash that occurred when users accessed the Gantt Overview within the Time Off application. The fix involved adjustments to how unavailable time periods are handled, ensuring data integrity and stability during Gantt rendering. This improves the reliability of the Time Off module.
Original PR description
Version: - saas-19.2 Steps to reproduce: - Install hr_holidays_gantt - Open the Time Off application - Click on the Overview menu item Issue: - A server traceback occurs when loading the Gantt Overview. Solution: - Adapt _gantt_unavailability() to handle the new return structure of _unavailable_intervals_batch(), which now returns multiple intervals per resource. - Ensure all datetime comparisons are performed using timezone-aware UTC datetimes by converting contract dates with fields.Datetime.to_datetime(). - Properly append unavailable intervals as (start, stop) tuples to avoid data corruption during Gantt rendering. Task- 5702559
This update corrects a visual bug where an 'Add Item' button incorrectly remained visible when no topics were present in a web page snippet. The fix ensures the button disappears when there are no topics, preventing a traceback and improving the user experience. This change impacts the Topics List snippet and related website builder components.
Original PR description
Steps to reproduce: - Drag and drop a "Topics List" snippet onto a web page. - Remove all "Topic" items from the snippet so that none remain. - Click the "Add New" button. - A traceback occurs. This bug is caused by the fact that the "Add item" option is defined in the "Options" section of the parent element of the topics. As a result, the option button remains visible even when no topics exist anymore. Clicking it then triggers a traceback because the option attempts to duplicate an element that does not exist. In this commit, we fix the issue by adding an "applyTo" on the option, targeting the topics, so that the "Add New" button no longer appears when no topic is present. Note that the same bug exists for other snippets, and this commit fixes them as well. task-5462596 Forward-Port-Of: odoo/odoo#244126 Forward-Port-Of: odoo/odoo#244034
This update resolves a technical issue preventing users with the Romanian language pack installed from accessing the settings within the l10n_ro_edi_stock module. The fix corrects a mismatch in the system's text search, ensuring proper functionality for Romanian users. This improves the usability of the module for Romanian-speaking businesses.
Original PR description
**Issue**: When the module `l10n_ro_edi_stock` is installed and Romanian is the selected language, accessing the settings app causes a traceback. **Steps to reproduce**: - Install the module…
**Issue**: When the module `l10n_ro_edi_stock` is installed and Romanian is the selected language, accessing the settings app causes a traceback. **Steps to reproduce**: - Install the module `l10n_ro_edi_stock` - Select a Romanian company - In Profile > My Preferences > select Romanian language - Try to access the settings -> A traceback occurs **Cause**: The error is caused by this XPath: https://github.com/odoo/odoo/blob/2309fb56553e6ae9f89b6dd0947aba2f54408960/addons/l10n_ro_edi_stock/views/res_config_settings_views.xml#L9C13-L11C21 Specifically, the `'select the option'` part. The XPath tries to replace this line in the parent view: https://github.com/odoo/odoo/blob/2309fb56553e6ae9f89b6dd0947aba2f54408960/addons/l10n_ro_edi/views/res_config_settings_views.xml#L39 but fails to find it because the source text has already been translated at that point, so `'select the option'` no longer matches: https://github.com/odoo/odoo/blob/2309fb56553e6ae9f89b6dd0947aba2f54408960/odoo/tools/template_inheritance.py#L154 **Solution** Only rely on strings that are translation-invariant. opw-5490346 Forward-Port-Of: odoo/odoo#244313
This update corrects a calculation error in the fleet module related to the initial acquisition date of vehicles. By setting a default acquisition date, the system now accurately calculates baseline ATN (Asset Tracking Net) values, leading to more precise reporting and financial tracking of fleet assets. This ensures better data for business decisions related to vehicle depreciation and asset management.
Original PR description
Forward-Port-Of: odoo/odoo#244705
This update resolves a technical issue where a default rate was incorrectly overriding the rate used in testing for FedEx deliveries in the EUR currency. By clearing these outdated rates, the test environment now accurately reflects the intended pricing, ensuring reliable testing and accurate delivery calculations.
Original PR description
Issue ----- There is some existing rate that takes precedence over the one specified in the test. Rates should be unlinked for safety. ----- Runbot error 237965 Forward-Port-Of: odoo/enterprise#104779
This update ensures the minimum wage is accurately calculated and pro-rated based on employee work time. The change addresses a previous issue (302bf2b4e201da8f56b1da012dd7f03c81a85e22) to comply with Belgian labor laws, improving payroll accuracy.
Original PR description
Since changes made in 302bf2b4e201da8f56b1da012dd7f03c81a85e22 the minimum wage should be pro-rated to the work time rate. Forward-Port-Of: odoo/enterprise#104781 Forward-Port-Of: odoo/enterprise#104419
This update resolves intermittent failures in image edit tests within the Odoo website builder. These tests were failing due to delays in how the website builder's sidebar updates asynchronously. By adding a 'wait' function to ensure the sidebar is fully loaded before tests run, we've significantly improved test reliability and stability.
Original PR description
Image edit tests using the builder sidebar were failing intermittently because image elements rely on async actions with non-deterministic timing, causing the sidebar options to be unavailable sometimes. Use `waitSidebarUpdated` to ensure the sidebar is fully updated before asserting on its content. Here is an example of an error: error-234951 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#243343 Forward-Port-Of: odoo/odoo#243008
This update prevents users from incorrectly configuring a website category snippet to display product accessories instead of categories. The change ensures that the snippet functions as intended, displaying relevant category lists on product pages. This resolves an issue where the category snippet was producing empty results.
Original PR description
Steps to reproduce: ==================== 1- Go to any product and in the tab Sales add some accessory products 2- Go to the website and edit a page 3- Add a category list block 4- Change category list filter to "Accessories for product" 5- Save -> The block is empty Cause: ====== The category snippet was meant to be used only for categories. The problem is that its possible to change from "Categories List" to anything else. When the user makes the choice to add a categories snippet he shouldn't be able to change the content of the snippet from categories to products, blogs, etc.. Solution: ========== Prevent replacing the category snippet to anything else. opw-5497284 Forward-Port-Of: odoo/odoo#244053
This update resolves a sporadic issue where live chat sessions would unexpectedly crash. The fix addresses a timing conflict between guest leaving and chat closing, preventing a system error. This ensures a more reliable and consistent live chat experience for users.
Original PR description
This commit fixes the `visitor leaving ends the livechat conversation` test that was sometimes failing. There is a race between the simulation of the guest leaving the chat that uses `withGuest` which is known to be problematic and the `action_unfollow` method, called when the chat window is closed. The unfollow method deletes the agent member, but since the guest cookie is still present, the `channels_as_member` rpc retrieves the guest member. The rest of the code doesn't expect this mismatch and a crash occurs. This commit ensures the `channels_as_member` rpc is properly done before closing the chat window. runbot-237947 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#244677
This update combines member and live chat information automatically when creating helpdesk tickets, providing a more complete view of the customer's interaction. Previously, this data was displayed separately, which was confusing for support staff. This change streamlines the support process and improves customer service.
Original PR description
*: website_helpdesk_livechat, whatsapp Task-5496830 https://github.com/odoo/odoo/pull/243864 Forward-Port-Of: odoo/enterprise#104644 Forward-Port-Of: odoo/enterprise#104435
This update fixes an issue where payslip names were not being generated accurately in the Chinese HR payroll module. The change ensures that payslip names are now correctly computed, improving data accuracy and reporting for payroll processing. This impacts the accuracy of payroll reports and employee records.
Original PR description
Forward-Port-Of: odoo/enterprise#104376 Forward-Port-Of: odoo/enterprise#104289
This update fixes a potential issue where default journal types for Turkish invoice documents were incorrectly set. The default value has been changed from 'in_invoice' to 'purchase' to prevent incorrect accounting and ensure proper document handling. This ensures compliance and avoids potential errors in financial reporting.
Original PR description
…hing The default value of the journal type parameter was incorrectly set to a move type (`in_invoice`). Although all current callers explicitly pass the correct journal type, the default value has been corrected to `purchase` to avoid potential misuse. no task-id Forward-Port-Of: odoo/odoo#243139 Forward-Port-Of: odoo/odoo#242865
This update resolves a minor issue where a menu item was incorrectly linked to a different Odoo module, preventing proper translation for non-English users. The change avoids forcing the menu item into another module, ensuring correct localization within the Enterprise POS module. It's a low-impact fix that enhances the user experience for international customers.
Original PR description
When the "Preparation Display" menuitem was added, its id was set to `point_of_sale.menu_pos_preparation_display`. This forced the record to be considered part of the `point_of_sale` module and because it's part of community while this record is defined in Enterprise, it was never translatable because the link was missing in the `pos_enterprise` pot file. This issue was not fixed in stable because it is non-trivial to move records in existing DBs and it is not a blocking bug, just confusing/annoying for non-English speaking users.
This update removes the Gemini 1.5 model from the AI platform, addressing a technical issue that would have caused errors when using the AI agent. The model is now hidden from selection fields, ensuring a smoother and more reliable user experience. This change improves stability and simplifies the AI platform's functionality.
Original PR description
This PR deprecates the Gemini 1.5 models. Specifically, it gives a proper non-technical error when the model is used. The error occurs either when the user tries to set the model on an agent or if the model is already on the agent, it will raise the error upon usage of the agent. The deprecated models are also hidden from the selection field. task-5129790 Upgrade PR: https://github.com/odoo/upgrade/pull/9253
This update fixes a misleading message in the HR contract salary payroll module. The change reflects a new calculation method using part-time gross salaries instead of full-time salaries. This ensures the salary message accurately reflects the employee's compensation.
Original PR description
Since we are now setting the part-time gross and not the full time gross, this message is misleading. Forward-Port-Of: odoo/enterprise#104877
This update resolves a visual issue where document signing would intermittently flicker due to automatic zoom adjustments. The fix removes the code that dynamically changed the zoom level, defaulting to 'Automatic zoom' for a smoother and more stable signing experience. This improves user satisfaction and prevents a distracting visual glitch.
Original PR description
Before this commit, when signing a document the zoom would load with 'Automatic zoom' then less than one second later change to another zoom by the code, e.g. '100%', causing a flickering issue. After this commit, the zoom is not flickering anymore as we remove the code of changing the zoom and make the default the 'Automatic zoom'. task-5461663 Forward-Port-Of: odoo/enterprise#103532
This update resolves an issue where a link popover would incorrectly appear on input fields within protected nodes. The fix ensures that popovers only appear when an editable input is focused, improving the user experience and preventing unexpected behavior when editing content within links.
Original PR description
Problem: When the previous focus was on a link, then focusing an input inside a non-editable protected node shows the link popover on the input. Cause: Given the following structure: `<a>a</a><span…
Problem: When the previous focus was on a link, then focusing an input inside a non-editable protected node shows the link popover on the input. Cause: Given the following structure: `<a>a</a><span protected non-editable><input></span>` If the selection is inside the link and the link preview popover is visible, clicking on the input triggers a selection change. Since the input is inside a protected node, the editor keeps the previous editable selection. As a result, `LinkPlugin.handleSelectionChange` still treats the selection as being inside the link and reopens the link popover. Solution: Only show the link popover when the `activeElement` is the editable element. Steps to reproduce: - Add a link. - Upload a file. - Place the selection on the link. - Focus the file name input to rename it. - Observe that the link popover is shown on the file name input. opw-5414078 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240016
This update resolves an issue where registration emails for events were displaying duplicate headers and footers. The fix removed a redundant email layout setting, ensuring that only the event's standard header and footer are included in the sent emails. This improves the email experience for attendees.
Original PR description
**Steps to reproduce:** - Go to Event module - Go to an open event - Register for the event - Go to the Attendees of the event - On the attendee record, click `Send by Email` - The received email shows twice the header and footer **Issue:** Encapsulating notification layout was applied with `default_email_layout_xmlid` but the main template used is `event_registration_mail_template_badge` which already has its own header and footer. **Fix:** Removed the `default_email_layout_xmlid` opw-5032767 Forward-Port-Of: odoo/odoo#236667
This update fixes default printer settings for Point of Sale (POS) transactions. Now, new receipt printers default to 'receipt' mode, while preparation printers default to 'preparation'. Additionally, a new requirement has been added for preparation printer categories to prevent errors and ensure accurate setup.
Original PR description
The goal of this pr was to set the printer type by default as `receipt` when a quick create was done from the "Receipt Printers" category and as `preparation` when it's done in the "Preparation Printers" category, both in `pos.config` and in `res.config`. Also, in the `pos.printer` form view, for a preparation printer, products categories are now required when creating a printer to avoid user oversights. And, a quick fix to make the default receipt printer as required, under the "Receipt Printers" category in the `res.config` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242780
This update resolves a test failure within the Odoo ecommerce module. The previous code included unnecessary dependencies and configurations that were causing test errors. The changes removed these elements, ensuring the tests run correctly and accurately reflecting the ecommerce order flow.
Original PR description
The code of the payment provider is not relevant to the test_ecommerce_paid_order_is_hidden_in_pos test, and pos_sale doesn't have payment_custom in the dependencies. It caused tests to fail so I removed it. Runbot Build Error-233461 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232638
This update fixes a visual issue where the 'Invite a User' dialog in the discuss app was not taking up the full width of the screen. The fix ensures the dialog displays correctly on various screen sizes, providing a consistent user experience. This improves usability and prevents a potential distraction for users.
Original PR description
Before this commit, the channel invitation dialog had its content not taking the whole width of modal. Steps to reproduce: - Have window take about half size of a 1080p monitor - Open "General" in…
Before this commit, the channel invitation dialog had its content not taking the whole width of modal. Steps to reproduce: - Have window take about half size of a 1080p monitor - Open "General" in discuss app - Open the Member list - Click on "Invite a User" => Invitation dialog takes about half of the width of modal. This happens because the channel invitation was wrongly assumed to be inside a resizable panel, and thus the size was limited by the max width when in resizable panel. The rule to determine whether the action is in a resizable panel was poor: any action panel in discuss app was considered as resizable. This commit fixes the issue by limiting the responsive sizing, intended only for resizable panel, only when the action panel has the `.o_resizable_panel`, which is specific to when action panel is being used inside resizable panel. Task-5804100 Before / After <img width="625" height="231" alt="Screenshot 2026-01-20 at 16 12 31" src="https://github.com/user-attachments/assets/10c02939-c4c1-47fa-82f8-4d8d037d3f0c" /> <img width="621" height="231" alt="Screenshot 2026-01-20 at 16 12 18" src="https://github.com/user-attachments/assets/eec1447c-cb42-4751-b17a-ff7b2e70b8e9" /> Forward-Port-Of: odoo/odoo#244777
This update prevents users from removing all avatars from a website profile by rapidly clicking the 'Remove avatar' button. The original code struggled with asynchronous updates, allowing for unintended avatar removal and subsequent errors. This fix ensures a stable avatar management experience.
Original PR description
**Problem** Users could remove all avatars from the `s_avatars` snippet by clicking the "Remove avatar" button rapidly. This also causes an error when attempting to add a new avatar afterward.…
**Problem** Users could remove all avatars from the `s_avatars` snippet by clicking the "Remove avatar" button rapidly. This also causes an error when attempting to add a new avatar afterward. **Reproduction** 1. Drop the `s_avatars` snippet. 2. Click very quickly on the "Remove avatar" button multiple times. **Cause** The code relied on preventing the removal of the last element by disabling the "Remove avatar" button based on DOM state. Because rendering is asynchronous, rapid clicks could be registered before the button was disabled, allowing the last avatar to be removed. **Fix** Add a check in `AvatarsHeaderMiddleButtons.removeAvatar` to prevent removal when only one avatar remains, covering cases where clicks occur before the UI updates. The components `CarouselItemHeaderMiddleButtons` and `NavTabsHeaderMiddleButtons` use the same logic of `AvatarsHeaderMiddleButtons` and could fail similarly, thus they have been fixed too, even if the bug is not currently reproducible on them. task-5462816 Forward-Port-Of: odoo/odoo#243065
This update addresses minor UI inconsistencies and improves the stability of the o-spreadsheet module. Specifically, the code has been adapted to align with a recent release and resolves issues related to styling and functionality within the spreadsheet interface. These changes ensure a smoother and more reliable user experience.
Original PR description
see https://github.com/odoo/odoo/pull/244983
This update ensures that Live Chat reports accurately group conversations by day of the week, taking into account the user's preferred week start day (Sunday or Monday) as defined in their language settings. Previously, the reports consistently started the week on Sunday, regardless of user preference. This change improves the accuracy and usability of Live Chat reporting.
Original PR description
**Current behavior before PR**: The "Day of Week" group by in the Live Chat report always treats Sunday as the start of the week, ignoring the "First Day of Week" configured in the user's language settings. **Desired behavior after PR is merged**: "Day of Week" group by now correctly takes into account the user's configured "First Day of Week", as set in their language settings. **task**-[4808640](https://www.odoo.com/odoo/project.task/4808640) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243503 Forward-Port-Of: odoo/odoo#213307
This update resolves an issue where invoices sent to Viettel's SInvoice system were failing due to incorrect decimal formatting. The fix ensures the tax amount is calculated using the correct currency rounding method, guaranteeing compatibility with the SInvoice API and preventing invoice delivery errors.
Original PR description
When sending an invoice to SInvoice (Viettel), the API raises an `INVALID_DECIMAL_POINT_TAX_MONEY` error if the tax amount contains excessive decimal places (e.g., 100.02999999999997). This occurs because the tax amount is currently calculated using simple subtraction (`total - subtotal`). Due to standard floating-point precision issues, this can result in unrounded values that the API rejects. The tax amount calculation is now updated to explicitly use the currency's rounding method, ensuring the value is accepted by SInvoice. task-[5484845](https://www.odoo.com/odoo/project/967/tasks/5484845) Forward-Port-Of: odoo/odoo#244647
This update enhances the security of user profile editing by utilizing a new internal helper function, '_can_edit_country()', to determine if a user is authorized to change their country setting. This change aligns with recent Odoo updates (saas-18.4) and ensures a more secure profile management process.
Original PR description
In 'save_edited_profile()', we check that the user can edit his country_id if he tries. As from saas-18.4, a new helper '_can_edit_country()' is available. This commit uses that helper to perform the check. Follow-up of #239789 Task-5331916 Forward-Port-Of: odoo/odoo#244795 Forward-Port-Of: odoo/odoo#244694
This update prevents the API documentation endpoint from crashing when encountering models not currently defined in Odoo's code. The fix addresses a technical issue where the system would fail to load documentation for certain models, improving the reliability of the API. This ensures consistent access to documentation for all models within the Odoo system.
Original PR description
When accessing the API documentation endpoint (`/doc`), the server could crash with an Internal Server Error if the database contained ir.model records for models that are not loaded in the current registry. Steps to reproduce: 1. Insert a record into `ir_model` with `model='ghost.model'` and `state='base'`. 2. Open `/doc`. 3. The server raises a `KeyError: 'ghost.model'`. Root Cause: The `/doc` endpoint iterates over all records in `ir.model`. For each record, it attempts to resolve the Python class using `self.env[ir_model.model]` to check access rights. If a model exists in the database with `state='base'`, Odoo expects it to be defined in the Python source code and does not generate it dynamically. If the corresponding Python class is missing (e.g., from an old module), it is never added to the registry, causing the lookup to fail with a `KeyError`. opw-5401782 Forward-Port-Of: odoo/odoo#241483
This update fixes a problem where users couldn't properly update the linked data source selection within charts. Previously, the interface would incorrectly display the old data source even after a new one was selected. This ensures data visualizations accurately reflect the chosen data sources.
Original PR description
Currently, when a user links a chart to an odoo datasource, the sidepanel is not updated properly when the user tries to select a datasource from the same type as the one already selected. How to reproduce: - In a spreadsheet, insert a chart and a list datasource - duplicate the list datasource - in the chart sidepanel, select list#1 as link - now try to select list#2 -> the model update the link to list#2 but the interface still shows list#1. Task-5725964 Forward-Port-Of: odoo/enterprise#104887
This update resolves an error that prevented users from opening the Gantt view within the Project Stages feature. The fix corrects a coding issue that occurred when the Gantt view was accessed without pre-existing project data, ensuring a smoother user experience.
Original PR description
Currently, an error occurs when the user opens the Gantt view. **Steps to Reproduce:** - Install `timesheet_grid` without demo data. - Go to `Settings` and enable `Project Stages`. - Go to `Projects` and switch to the `Gantt view`. `UnboundLocalError: cannot access local variable 'project' where it is not associated with a value` This error occurs because, in [this commit], line [1] is mistakenly placed outside the loop. If self has no records, project is not defined, and accessing project.date_start raises an error. This commit moves the line inside the loop. [1]: https://github.com/odoo/enterprise/blob/34feeda7d0835d8c65d91493314133b8e83610d1/timesheet_grid/models/project_project.py#L50 [this commit]: https://github.com/odoo/enterprise/commit/c3296d1441400d20e3815207baa1188b5cb8fd93#diff-59e7d75aff5c1e890cd536834137eac5cd3ad185cb45ee1e157be15402cbc90fR50 sentry-7204644855 Forward-Port-Of: odoo/enterprise#105009
This update resolves a technical issue where assets components were missing from the merged account_batch_payment module. This ensures the module functions correctly and avoids potential performance problems. The fix was a simple correction during the module integration process.
Original PR description
During the merge of the module account_accountant_batch_payment and account_batch_payment, we forgot to add the components to the assets of the merged module cfr: https://github.com/odoo/enterprise/pull/97544/files#diff-59095aa2812fc8b48436f7aaf3416dc40bb273c7d234ec18a37ac1576d0643e4 Forward-Port-Of: odoo/enterprise#104358
Features or functions removed from Odoo
This update removes the `stock.scrap` model, simplifying the product scrap process. The change shifts to using `stock.move` records, offering a more efficient workflow for recording and managing scrap quantities. This improves the underlying system's efficiency and reduces complexity.
Original PR description
This commit removes `stock.scrap` model without affecting its functionality from the user perspective. Previous to this commit, when a user wants to scrap some product, a record of `stock.scrap` is…
This commit removes `stock.scrap` model without affecting its functionality from the user perspective. Previous to this commit, when a user wants to scrap some product, a record of `stock.scrap` is created which is a scrap order containing info about the product, quantity, scrap reason, etc. When a scrap order is confirmed, it generates a `stock.move` and confirms it so that the quantity move is reflected in the quants. That's why `stock.scrap` model itself provides no intrinsic value and is dispensable. This commit removes the model completely and relies only on `stock.move.line` and `stock.move` to achieve the same functionality. The menu item "Scrap" now redirects to a list of stock.move.lines that has the new field `is_scrap` = true. If the user creates a new record from the list, a draft `stock.move.line` is created initially. When it's confirmed, it generates its `stock.move` and its state is changed to be done. The only fields that are added to `stock.move.line` to fully replace `stock.scrap` are `scrap_reason_tag_ids` and `should_replenish_scrapped`. This commit also adds a new action to scrap a lot/serial number from its form view directly. Task-4606260
This update removes the scrap model within Odoo, streamlining the system and aligning with recent changes. The removal was necessary to adapt existing features and tests following a related update (ODOO/210299). This change improves system efficiency and reduces complexity.
Original PR description
This commit adapts `stock.barcode` and some other tests for the changes introduced in https://github.com/odoo/odoo/pull/210299. Task-4606260
Code cleanup and technical improvements
This update adjusts how spreadsheet data is accessed within the Enterprise module. The previous method returned data as an object, which has now been updated to return an array. This change ensures consistent data handling and prepares the system for future enhancements to the spreadsheet sale management functionality.
Original PR description
`model.getters.getCells()` now returns an array instead of an object. This commit adapts the code. Task-5491227
This update refactors the styling of message bubbles in the dark theme, streamlining the code and subtly enhancing the visual appearance. The changes result in slightly more saturated bubble colors and a more pronounced 3D border effect, improving the overall look and feel in dark mode.
Original PR description
Reduce amount of LOCs to define dark theme version of message bubble colors, to match with the shape of how this is defined in white theme. While the intent of the change is just simpler LOCs, the visual in dark theme has subtle changes: - bubble colors are very slightly more saturated in dark theme - bubble have more visible border, giving more a 3D look Before <img width="778" height="639" alt="before" src="https://github.com/user-attachments/assets/4f4aa3e3-9e2f-44bf-9437-665203831103" /> After <img width="771" height="642" alt="after" src="https://github.com/user-attachments/assets/1c4f4b84-0eb0-45ce-bda3-3a849e93d49d" />