Monday, February 23, 2026
31 changes · 19.0
Enhancements to existing features
The emoji picker now recognizes the common :100: shortcut for the hundred points emoji, making it easier for users to find. The empty search message was also reworded slightly for clearer, more natural language.
Original PR description
Purpose of this PR: Before this PR, the 💯 emoji could only be found using the`:hundred_points:` shortcode, which is less commonly used. This PR adds the `:100:` shortcode to improve discoverability. Additionally, the empty-state helper text in the emoji picker is adjusted from `"No emoji matches your search"` to `"No emojis match your search"` for better wording. task-5873748 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Internal users who open message links to eLearning slides are now taken to the back-office slide form instead of the public website page. This keeps the experience consistent with other portal documents while preserving the public website view for portal and public users.
Original PR description
Since #202555, a message link in slides redirects internal users to the website page if it's published. To ensure consistency with other documents in the portal, this commit redirects internal users to the backend form view of the slides. Portal and public users continue to be redirected to the published website page. Forward-Port-Of: odoo/odoo#249720
This update optimizes the creation of global invoices in the Mexican EDI module. By changing the wizard to a 'TransientModel,' it prevents unnecessary data storage in the database, improving performance and reducing storage requirements. This change ensures a smoother and more efficient invoice creation experience.
Original PR description
Change to TransientModel so a wizard is not permanently stored in db when creating a global invoice. Forward-Port-Of: odoo/enterprise#107950 Forward-Port-Of: odoo/enterprise#107244
Resolved issues and error corrections
When users create a calendar event quickly and choose More options, details such as location, notes, and privacy settings are now preserved. This prevents users from having to re-enter information and reduces the risk of losing event details.
Original PR description
Steps to produce: --- - Install `calendar` module. - Go to `Calendar and create a new event using quick create`. - Set Location and Notes and other values. - Click `More options`. Issue: --- - When…
Steps to produce: --- - Install `calendar` module. - Go to `Calendar and create a new event using quick create`. - Set Location and Notes and other values. - Click `More options`. Issue: --- - When the full form view opens, the `Location, Notes and Privacy` fields are empty, even though they were filled in the quick-create dialog. Root cause: --- - At [1], [2] & [3], `Location, Notes and Privacy` values are correctly stored in the location, notes and privacy fields respectively. - When opening the full form, default values are built via `getDefaultValuesFromRecord`. - And here at [4], location,notes and privacy are missing from the `QUICK_CREATE_CALENDAR_EVENT_FIELDS`. - As a result, these fields are skipped and not passed through the context, causing data loss. Solution: --- - Add the location and privacy fields to the `QUICK_CREATE_CALENDAR_EVENT_FIELDS` dictionary so they are included when generating default values for the full form view. - And replace `description` with `notes`. Note: --- - As this is a small and simple case, the test has not been added to avoid unnecessary overhead. [1]: https://github.com/odoo/odoo/blob/7abd7ba2f38fdb1953c39fd3693f012c2ad1b497/addons/calendar/views/calendar_views.xml#L378-L381 [2]: https://github.com/odoo/odoo/blob/7abd7ba2f38fdb1953c39fd3693f012c2ad1b497/addons/calendar/views/calendar_views.xml#L404-L407 [3]: https://github.com/odoo/odoo/blob/7abd7ba2f38fdb1953c39fd3693f012c2ad1b497/addons/calendar/views/calendar_views.xml#L400-L403 [4]: https://github.com/odoo/odoo/blob/7abd7ba2f38fdb1953c39fd3693f012c2ad1b497/addons/calendar/static/src/views/calendar_form/calendar_quick_create.js#L7-L17 opw-5504553 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Features or functions removed from Odoo
This update eliminates outdated warning messages related to IoT receipt printers. As we no longer collect printer status data, these messages are no longer generated or displayed. This improves the user experience by reducing unnecessary notifications.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/249819 As we are no longer querying the status of the receipt printer on the IoT box, some of the error messages such as being low on paper will no longer be sent by the IoT. This commit removes the messages in the JS code too.
Documentation and clarification updates
This pull request adds a corporate contributor license agreement signature for Tecnativa. It helps keep contribution rights and legal documentation up to date for the project.
Original PR description
@pedrobaeza --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248793
Fixes an issue where task descriptions submitted through the website contact form appeared twice in the Project app. This keeps submitted task details clean and avoids confusion for teams reviewing new website-created tasks.
Original PR description
Steps to reproduce: =================== 1. Go to website > contact us page 2. Submit a new task with description. 3. View the Description in the project app. -> The description field is already shown in the form by default. You will find another time it is repeated. Cause: ====== The default field content is always appended to the form content. Solution: ========= Avoid adding description to the description field content. opw-5868382 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246952
This update fixes an intermittent failure in the automated check for editing website mega menus. It improves confidence that website menu editing continues to work correctly without changing the user-facing experience.
Original PR description
Fix the random tour error by adding a step runbot-error-id~234870 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The work entry Gantt view now shows a friendlier error message instead of technical wording. This helps HR users better understand what went wrong and what needs attention without requiring technical knowledge.
Original PR description
In this commit, we improve the error message by replacing technical wording with a more user-friendly message. sentry-7140947833
This fixes a rare issue where a selection menu could try to process a chosen item before its list of options was ready. Users should experience fewer interface errors when interacting with dropdown-style menus.
Original PR description
With this commit, we fix the scenario where onItemSelected can be called but state.choices can still be empty. runbot-error-id~234527 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website date picker now shows navigation arrows in the correct direction when visitors use right-to-left languages such as Arabic. This improves the rental booking experience and avoids confusion when selecting dates on multilingual websites.
Original PR description
### Steps to reproduce: - Download Rental and eCommerce apps. - Install an RTL language (e.g., Arabic) on the website. - Create a rental and go to website. - Try to pick a date for the rental. ###…
### Steps to reproduce: - Download Rental and eCommerce apps. - Install an RTL language (e.g., Arabic) on the website. - Create a rental and go to website. - Try to pick a date for the rental. ### Issue: When the website is viewed in an RTL language, the navigation arrows of the date picker are displayed in the wrong direction. This happens because the date picker is not inside `o_rtl` component, but inside `o-main-components-container` component. So, when `o_rtl` is called in css (for example): https://github.com/odoo/odoo/blob/2264f330859b79010b227e3a9fda1075de8ed4e8/addons/web/static/lib/odoo_ui_icons/style.css#L67-L76 Since the arrows are not inside `o_rtl`, the transformation doesn't apply to them. ### Solution: The `o_rtl` class has been appended to `o-main-components-container` class in case of a RTL language, so that had the css file contain rules for `o_rtl`, they would be applied automatically. opw-5498615 Forward-Port-Of: odoo/odoo#249541 Forward-Port-Of: odoo/odoo#246190
Muted notifications in the messaging menu now display correctly when hovered, without creating an unnecessary horizontal scrollbar. This keeps the notification menu cleaner and easier to use for users managing messages.
Original PR description
**Purpose of this PR:** Hovering over a muted notification in the messaging menu caused a horizontal scrollbar because the `'Mark as Read'` button retained a margin that overflowed the container when the unread counter was hidden. This commit makes the margin conditional on the counter's presence, preventing the layout overflow. task-[5904526](https://www.odoo.com/odoo/project.task/5904526) **Before/After:**  
Point of Sale receipts in the GCC localization now show key invoice labels in Arabic when users print receipts in Arabic. This prevents mixed-language receipts and improves clarity for Arabic-speaking customers and businesses.
Original PR description
Problem: When printing a receipt in arabic using the l10n_gcc_pos module, some of the text is in English. Cause: Translation is not enabled for the module and the text is written in English only in the receipts XML. Solution: Add the arabic translations of texts to the receipts XML and choose the display language based on the user's language (same behaviour in other receipts). Steps to reproduce: - Install l10n_gcc_pos module - Activate and choose Arabic as the language - Open Point of Sale and validate an order - See how some text (specifically "Tax Invoice" and "Simplified Tax Invoice") are printed in English although the rest of the receipt is printed in Arabic. opw-5501464
This fixes a visual issue in Mail where user mentions could appear with missing top and bottom borders. Mentions now display consistently, improving message readability and polish without changing functionality.
Original PR description
Backport of https://github.com/odoo/odoo/pull/248999 Before this PR, the border from the mention element was missing at the top and bottom. This is caused by the inline-block property. `<a>` is already an inline element and doesn't need this property. Task-5867464 (point 68) Before / After <img width="272" height="63" alt="Screenshot 2026-02-20 at 14 38 24" src="https://github.com/user-attachments/assets/c5c3ffe2-d8a7-4405-9e69-59f4e6e05a77" /> <img width="268" height="57" alt="Screenshot 2026-02-20 at 14 38 36" src="https://github.com/user-attachments/assets/29cf6777-b84a-46c4-b78a-4950865e1ef0" />
This fixes an issue where the Update Prices button could disappear after saving a sales quotation with a changed pricelist. Sales users can now continue updating quotation prices when applicable, reducing confusion and avoiding extra workarounds.
Original PR description
Steps to produce: --- - Install sales module. - Go to Settings and enable Pricelists (make sure we have 2 pricelists so that we able to change the pricelist value in quotation). - Create a new…
Steps to produce: --- - Install sales module. - Go to Settings and enable Pricelists (make sure we have 2 pricelists so that we able to change the pricelist value in quotation). - Create a new quotation > Add a customer and product. - Change the pricelist. - Save the record. Issue: --- - After saving the quotation, the `Update Prices` button becomes invisible. Root cause: --- - The field `show_update_pricelist`, which controls the visibility of the button, is not present in the view. As a result, when the record is saved, the field is not included in the form data and its value is not properly maintained, causing the button to become invisible. - The field is removed from the view in this [commit]. Solution: --- - Added the `show_update_pricelist` field to the view to ensure its value is properly maintained. This allows the `Update Prices` button to remain visible when applicable. [commit]: https://github.com/odoo/odoo/commit/da4b588b272432095f549c012e0a0d7238f00dc0 **Enterprice PR:** https://github.com/odoo/enterprise/pull/107621 opw-5927659 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248957
This fixes an issue in Odoo Discuss where a typing indicator could remain visible even after someone stopped typing. The update ensures the indicator reliably expires, reducing confusion in chat conversations.
Original PR description
Typing expiration was indirectly tied to typing timestamp updates. Typing timestamps are second-precision, so two consecutive typing events can carry the same timestamp value. In that case, the timestamp field may not be considered updated on the client. The expiration timeout is then not re-armed even though typing is set to true. When that happens, the typing indicator can remain visible indefinitely unless an explicit "stop typing" event is received. This change makes timeout registration depend on typing state updates directly. Expiration is always scheduled when typing becomes active, regardless of timestamp equality. [task-4922630](https://www.odoo.com/odoo/project/1519/tasks/4922630) Forward-Port-Of: odoo/odoo#249796
This fix prevents certain Peppol-specific validation checks from blocking BIS3 e-invoice files used outside Peppol, such as B2C invoices shared with accountants. Businesses can now export these files without requiring recipient endpoint details that are not needed for those workflows.
Original PR description
…peppol checked Some people are using BIS3 files even for B2C. They give the xml files to the accountant for him/her to import the file and generate the invoice in the accounting software. In that case, since it's a B2C transaction, the EndpointId might not be set but that's ok since it's only used to generate the invoice. opw-5952109 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249751
Event registration now handles custom attendee form fields without failing when the value is not a number. This restores flexibility for businesses that extend event sign-up forms with extra information such as addresses.
Original PR description
Before the addition of identification questions like "name", "email", and "phone" in the commit [1] as event questions instead of having them static, we could add custom data, such as fields for the address, with static inputs in the form. After that addition, it's no longer possible because the registration gives us the following error when trying to convert data that isn't a M2o ID or an Integer value:
invalid literal for int() with base 10
By adding the check for the field's type, we can still add custom fields with static fields in the template, as an alternative, given that there's no question type for other fields.
[1]: https://github.com/odoo/odoo/commit/6b8daa880c
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#244378The add snippet dialog now follows the back-office interface direction when users navigate previews with the keyboard. This makes the first focused snippet match the visible UI order for languages with different reading directions, improving accessibility and reducing confusion.
Original PR description
After the accessibility improvement in [9ae02d8], snippets previews within the add snippet dialog are tabable. It reveals an issue with the order of the columns depending on the interface language:…
After the accessibility improvement in [9ae02d8], snippets previews within the add snippet dialog are tabable. It reveals an issue with the order of the columns depending on the interface language: when the backend language and the frontend language are not read in the same direction (RTL / LTR), the frontend language is taken to display the previews (see [f9c77de]). This is the right approach to show the snippets themselves, but the order of the columns should be done according to the backend language, which is the one that gives the instructions for the overall UI. To reproduce: - Set the admin's language to arabic - Clear the cache and refresh your page - Edit and open the add snippet dialog - Navigate with Tab => The 1st focused snippet is in the wrong column compared with the rest of the UI. [9ae02d8]: https://github.com/odoo/odoo/commit/9ae02d80894d4043e49d8e2cad068f8018e6f113 [f9c77de]: https://github.com/odoo/odoo/commit/f9c77de84aa6ea705e5d3f129328fb2199103b9a task-5109547
The point of sale loyalty process now avoids creating loyalty cards with zero points when a loyalty program did not apply to the order. This reduces unnecessary records while still keeping history when a reward was actually used.
Original PR description
Currently, when you have multiple loyalty program but only 1 applies points on the current order, the other will have a loyalty card created with 0 points. steps to reproduce: ------------------- * Create a loyalty program giving you 1 point per $ on product 1 * Create a loyalty program giving you 1 point per § on product 2 * Make a pos order with just product 1, add a customer * Check the programs in the backend > Observation, a loyalty card with 0 points was create for the second loyalty program Why the fix: ------------ This creates a lot of unecessary records. We now only create cards where there are points or when there 0 points because a reward has been applied, thus keeping history. opw-5405109 Forward-Port-Of: odoo/odoo#247491 Forward-Port-Of: odoo/odoo#244254
This fix ensures help icons on website builder options display their tooltips correctly and mirror properly for right-to-left languages. It improves usability for teams working in languages such as Arabic or Hebrew without changing existing builder behavior.
Original PR description
Among other things, commit [0aba7f3] added a `?` icon on builder options with a tooltip. However: - since [94e17fd], the key `state.tooltip` was removed from the BuilderRow component (to use `props.tooltip` directly), but the XML wasn't properly adapted in 19.0. - the icon isn't mirrored in RTL languages. This commit fixes both issues. [0aba7f3]: https://github.com/odoo/odoo/commit/0aba7f383c86dec00e9fc6d324a5bfdec7a19707 [94e17fd]: https://github.com/odoo/odoo/commit/94e17fd9845486a959f2544e1b26199abc96a56a task-5109547
This fix prevents sales order exports from crashing when goods are shipped between two European countries without an invoice being present. It improves reliability for businesses handling cross-border European deliveries and electronic document exports.
Original PR description
…e_date' When exporting an SO, we got a traceback when the goods are traveling inside Europe in 2 differents countries because that part of the code was not checking an invoice was involved or not. opw-5959874 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250066
This update resolves an issue where setting up accounting periods for tax returns would fail when the Invoicing module was also installed. The change ensures that a necessary setup process is always executed, regardless of which modules are used. This prevents disruptions during the initial accounting setup.
Original PR description
To align with the changes introduced in **community PR** [1], this commit moves the `_initiate_account_onboardings()` method in the `account` module to ensure it is executed even when Invoicing is installed. [1] - https://github.com/odoo/odoo/pull/248790 sentry-7064593163 Forward-Port-Of: odoo/enterprise#107476
This update fixes a bug where inactive accounts were excluded from key financial reports (P&L, Balance Sheet, Accounts Coverage). The change adjusts how the system searches for accounts, now correctly incorporating inactive ones into these reports. This ensures more accurate financial reporting.
Original PR description
Purpose: In P&L, Balance Sheet and Accounts Coverage Report, inactive accounts are not considered. Root cause: `deprecated` field on `account.account` is replaced with `active`, and orm search by default returns only active records. Solution: add `active_test=False` in the context. task- 5906024 Forward-Port-Of: odoo/enterprise#106956
This update prevents unnecessary errors from being raised when the Codabox sync process (CRON) encounters a temporary issue. This change improves the reliability of the Codabox integration by avoiding automatic disabling of the process due to repeated errors, ensuring smoother operation when servers are back online.
Original PR description
In case of a failure/downtime from the IAP/Codabox servers, an error is currently being raised. Although this is useful when manually clicking the Fetch button to see what happens, in the context of a CRON it's much less desirable as multiple failures from a CRON will automatically disable it which is not useful as the servers might be back up later on. Now, instead, we only raise if we're not in a CRON environment. opw-5922549 Forward-Port-Of: odoo/enterprise#107798
This update resolves an issue where an unnecessary 'add inputs' button was appearing on Swiss payroll payslips. This change improves the user experience for employees and administrators using the Swiss localization of Odoo Enterprise, ensuring a cleaner and more intuitive interface.
Original PR description
don't show add inputs button on payslips on the swiss localization.
This update fixes an issue where users could inadvertently make changes to knowledge articles due to incorrect navigation. The change ensures the correct article is loaded before any actions like sharing or editing, enhancing the user experience and data integrity. This improves the reliability of the knowledge base.
Original PR description
With this commit, We ensure we're in the correct article before making any changes (share, add to favorites, edit) using `waitUntil`. We've added a `checkArticle` function to ensure the article is in the correct place in the menu. runbot-error-id~234645
This update resolves an issue where the 'Update Rental Prices' button disappeared after saving a rental order. The fix adds a field to the view that ensures the button remains visible when a rental period is changed and the order is saved. This ensures users can easily adjust rental prices as needed.
Original PR description
Steps to produce: --- - Install `sale_renting` module. - Rental > Open any order > Change the rental period. - Save the record. Issue: --- - After saving the order, the `Update Rental Prices` button becomes invisible. Root cause: --- - The field `show_update_duration`, which controls the visibility of the button, is not present in the view. As a result, when the record is saved, the field is not included in the form data and its value is not properly maintained, causing the button to become invisible. - The field is removed from the view in this [commit]. Solution: --- - Added the `show_update_duration` field to the view to ensure its value is properly maintained. This allows the `Update Rental Prices` button to remain visible when applicable. [commit]: https://github.com/odoo/enterprise/commit/b90bbdef10a7a37fb065626ba995811ab388c7a1 opw-5937145 --- Forward-Port-Of: odoo/enterprise#107621
This update resolves an issue that prevented users from clicking the Work Entries button when overtime records lacked a 'Stop' time. The fix corrects a comparison error between a date and a boolean value, ensuring the button functionality is consistently available. This improves the reliability of the HR module.
Original PR description
Clicking the Work Entries smart button raises a traceback when an overtime record has no Stop (time_stop). Steps to reproduce the error: - Install ``hr_work_entry_attendance`` module with demo data - Activate developer mode - Create an Employee A > Settings > Set Default Ruleset in Overtime Ruleset In Payroll Tab, Work Entry Source: ``Attendances`` and set Contract - Create an overtime attendance > Save > Open the Overtime Details > Unset the ``Stop(time_stop)`` > Save - Open Employee A > Click on Work Entries smart button Traceback: ```py TypeError: '<' not supported between instances of 'bool' and 'datetime.datetime' ``` https://github.com/odoo/enterprise/blob/56c3723a925f718ba39d11cde12933542ebcd7c1/hr_work_entry_attendance/models/hr_version.py#L49-L52 When ``stop(time_stop)`` is unset in the overtime, ``ot.time_stop`` is False, causing ``min()`` to compare a ``datetime`` with ``False``, which raises the above traceback. sentry-7169332615
This update resolves a problem where test data for the Stripe expense reporting module wasn't correctly applied. The fix ensures that tests run successfully by utilizing a dedicated demo company data set. This prevents test failures and maintains the stability of the expense reporting functionality.
Original PR description
When adding the tests, the changes in d15faf0 were not taken into account. The tests wouldn't fail as the `hr_expense_stripe_demo` module would contain the necessary data runbot-241008
This update corrects a minor oversight in the system's invoice matching tolerance settings. Previously, a hardcoded tolerance value wasn't updated correctly, leading to potential inaccuracies in bank statement reconciliation. This fix ensures more reliable matching of financial data.
Original PR description
During this commit:https://github.com/odoo/enterprise/commit/15d26e62f14bb0224712a1712b47ebe16c3b8702 we forgot to change one part of the hardcoded tolerance. task-5952881 Forward-Port-Of: odoo/enterprise#108112