Monday, February 23, 2026
61 changes · saas-19.2
New functionality added to Odoo
This update incorporates the National Bank of Kazakhstan as a currency rate provider. This change fulfills regulatory requirements specific to Kazakhstan, ensuring accurate currency conversions for users in that region. It improves the system's compliance and functionality within the Kazakhstan market.
Original PR description
This PR adds the National Bank of Kazakhstan as a provider in order to meet the requirements of the Kazakhstan code. Task-4144725 Forward-Port-Of: odoo/enterprise#107797
This update incorporates essential testing for the Stripe expense module within Odoo Enterprise. Previously missing, these tests ensure the module functions correctly and reliably, addressing a gap in the original development task. This improves the stability and quality of the expense reporting process.
Original PR description
Add tests for the module, as it wasn't included in the original task Forward-Port-Of: odoo/enterprise#107969 Forward-Port-Of: odoo/enterprise#106191
Enhancements to existing features
This update replaces a complex caching mechanism with a simpler one for functions without arguments. This change reduces unnecessary overhead and improves the performance of key Odoo modules, leading to faster response times. The update focuses on internal optimizations without impacting user-facing features.
Original PR description
A 0-argument function can definitionally only have one cache entry (at `()`). Not only is a bound entirely useless (`lru_cache` does not do any presizing), using `lru_cache` incurs the full cost of maintaining an LRU's doubly-linked list. Using `cache` (~ `lru_cache(None)`) still allocates and interacts with a dict, but it at least skips the whole LRU.
Resolved issues and error corrections
This update fixes an issue preventing the Hungarian VAT integration from correctly communicating with the NAV system. A change in how the software ID was generated resulted in a shortened string, failing validation. The fix adds padding to ensure the ID is always 18 characters long, resolving the communication error and enabling proper functionality.
Original PR description
**Steps to reproduce:** * Create a **Hungarian** database with **Accounting** or **Invoicing**. * Set a valid **VAT number** on the company. * Configure **NAV credentials** in **production mode**.…
**Steps to reproduce:**
* Create a **Hungarian** database with **Accounting** or **Invoicing**.
* Set a valid **VAT number** on the company.
* Configure **NAV credentials** in **production mode**. (use credentials from ticket)
* Try to save the Settings.
**Observed behavior:**
* Authentication fails with error: `INVALID_REQUEST: Helytelen kérés!`
* NAV returns schema violation: `Value 'BE477472701-19110' is not facet-valid with respect to pattern '[0-9A-Z\-]{18}' for type 'SoftwareIdType'.`
* The softwareId is only 17 characters instead of required 18.
**Cause:**
* The `version` parameter was removed from the module manifest by this [commit](https://github.com/odoo/odoo/commit/717619571d1297d6b299b7c47b728841bcd81e69#diff-d96ba04bb478d9dcbade7b9bf9f07305d42a38ce7a906f3387879271cde35fecL7)
* This change shortened the module version string used to build the `softwareId`.
* Truncating the value to 18 characters therefore produced a string shorter than required.
* The NAV API requires the `softwareId` to be **exactly 18 characters**.
**Fix:**
* Pad the generated `softwareId` to **18 characters** using `ljust(18, '0')`.
* Ensures the value always complies with NAV schema validation rules.
opw-5902414
Forward-Port-Of: odoo/odoo#247737Features or functions removed from Odoo
This update removes a redundant piece of code within the Spanish localization module (l10n_es) that was impacting performance. This change simplifies the codebase and prepares for future improvements by eliminating a dependency. The removal ensures the Spanish version of Odoo continues to function efficiently.
Original PR description
We want to remove all count_rows since it's the only thing that uses next_groupby which will allow us to remove it as an argument from the engines functions. task-5145246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Documentation and clarification updates
This pull request updates the Adhoc Corporate Legal Agreement (CLA) membership list. This ensures Odoo continues to comply with legal requirements and protects the company from potential liabilities. The change is purely a legal update and does not affect Odoo's 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 Forward-Port-Of: odoo/odoo#248642 Forward-Port-Of: odoo/odoo#248286
This update optimizes the Delivery Ups module by replacing a less efficient caching method (`lru_cache`) with a standard cache. This change improves performance, particularly for argument-less functions, leading to faster processing times. It's a routine performance enhancement.
Original PR description
On an argument-less function, `lru_cache` is strictly worse.
This update adds more flexible options for calculating AVS (Additional Voluntary Savings) deductions within Odoo's payroll system for Swiss businesses. The changes improve the system's adaptability to various Swiss tax regulations and reporting requirements. A new test has been implemented to ensure accurate salary rule calculations.
Original PR description
5 more generic AVS is added to l10n_ch_hr_payroll/hr_salary_rule_data and /hr_payroll_input_types. task - 5902593 Forward-Port-Of: odoo/enterprise#107901 Forward-Port-Of: odoo/enterprise#106218
This update enables administrators to create API keys programmatically, streamlining the process and reducing manual steps. Previously, API keys needed to be created through a user interface. This change allows for more efficient key management and integration with automated systems.
Original PR description
Previously, API keys could only be created interactively: the method required an interactive session and a recently typed password. This commit adds a new method on `res.users.apikeys` that allows creating an API key when an existing one is provided. Optionally, in the case of a renewal, the new key can replace the old one, and the provided one is unlinked. Forward-Port-Of: odoo/odoo#249528 Forward-Port-Of: odoo/odoo#246118
This update optimizes the creation of global invoices in the Mexican tax system (l10n_mx_edi). By changing the wizard to a 'TransientModel,' the system no longer stores temporary data permanently, leading to a smoother and more efficient invoice creation process. This change avoids unnecessary database usage and improves performance.
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
This update enhances the user experience in the chatter by changing the action when clicking on a follower. Instead of opening the partner form, clicking now opens the follower's avatar card. This provides a more intuitive and streamlined way to engage with followers within the Odoo platform.
Original PR description
Before this commit, clicking on a follower in the chatter always opened the partner form view. This commit changes the behaviour to open the avatar card. enterprise-https://github.com/odoo/enterprise/pull/107393 task-[5873738](https://www.odoo.com/odoo/project/1519/tasks/5873738)
This update enhances the user experience by automatically opening a user's avatar card when a follower is clicked in the follower list. Previously, users were directed to a partner form view. This change simplifies navigation and provides a more modern interaction.
Original PR description
The tours are updated to reflect the new behaviour where clicking on a follower opens the avatar card for users instead of the partner form view task-5873738
This update enhances the user experience by recentering the Odoo logo and floor plan button across different screen sizes. A subtle shadow has also been added to the logo for improved visual clarity and a more polished look. This ensures consistent branding and a better user interface.
Original PR description
** = pos_restaurant In this commit: - Recentered the Odoo logo and floor plan button based on the viewport size for better alignment and responsiveness. - Applied a shadow on the Odoo logo for a better user experience. Before: <img width="1920" height="852" alt="image" src="https://github.com/user-attachments/assets/e8b05b7a-11be-4652-90dc-2b89236fc190" /> After: <img width="1920" height="852" alt="image" src="https://github.com/user-attachments/assets/b32c4b46-3e66-4948-8bd6-ae7dc935e037" /> Task-5946199 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where users experienced unexpected behavior when editing file names within the HTML editor. The change now prevents automatic editing and ensures consistent keyboard navigation, providing a smoother and more predictable editing experience. This improves overall usability of the HTML editor.
Original PR description
### Purpose of this PR: - In the static file box, the file name is contenteditable by default, which leads to unexpected caret movement and arrow-key navigation behavior. - Change the behavior so that the file name is contenteditable="false" by default and becomes editable only when the user explicitly clicks on it. The editability is reverted when clicking outside of the file name. - This ensures consistent keyboard navigation while keeping the change limited to the static file box. task-5427329 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249333 Forward-Port-Of: odoo/odoo#241591
This update removes an unnecessary parameter ('next_groupby') from Odoo's report engines, improving their performance and reducing complexity. The change was made after consolidating code and eliminating redundant checks, ensuring a more efficient and maintainable system for generating financial reports.
Original PR description
We removed count_rows which used the next_groupby by using a custom engine where they specify their next_groupby directly instead. Since next_groupby isn't used anywhere else in the engines, we can remove this parameter (for the engines)! Also removed redondant calls to _check_groupby_fields in custom engines where it would be called by _compute_formula_batch_with_engine_custom before calling the function. task-5145246
This update enhances the visual presentation of tables inserted into HTML fields by automatically converting `thead` tags to `tbody` and applying a specific styling class. This ensures tables created within Odoo look more professional and consistent. Additionally, changes were made to support AI chat functionality within the discuss thread actions.
Original PR description
Prior to this commit, when inserting a table in an html_field, it would use tags such as `thead` which are not supposed by the table plugin when doing table manipulations. With this commit, we create an insertion handler which changes any thead to tbody and applies the `o_table_header` class to the rows so it visually resembles a thead. Exported some variables for the expand-discuss thread action since we are modifying the thread action registry in the AI module. Specifically we export the sequencegroup and the sequencequick variables since we are changing those for AI chats. Task-5164382
This update adjusts how subchannels are displayed in the sidebar. Previously, opening a subchannel automatically added the user to it. Now, subchannels are temporarily pinned while being viewed, but return to their unpinned state when the user navigates away. This change enhances the user experience by preventing unwanted channel additions.
Original PR description
Backport of https://github.com/odoo/odoo/pull/239480 Before this commit: - Opening a subchannel from the thread list automatically joined the user to the subchannel - if not already a member - Unpinned subchannels were pinned to sidebar when user opened them After this commit: - Opening a subchannel from the thread list no longer joins the user - Unpinned subchannels are only temporarily repinned while being viewed; once the user navigates away, they return to their unpinned state. task-4207854
This update fixes a confusing inconsistency in how the system displays a user's location status. Previously, 'User is at the office' and 'User is at other location' were used. Now, the system consistently uses 'User is at other location' for homeworking status, providing a clearer and more accurate representation of employee availability.
Original PR description
User is at the office -> User is at other location
This update resolves an error that occurred when setting the accounting period for tax returns in the Invoicing module. The issue stemmed from incorrect initialization of onboarding progress, now corrected to ensure smooth operation of this key accounting function.
Original PR description
Currently, an error occurs when a user tries to set the accounting period. **Step to Reproduce:** 1. Install Invoicing without demo data and log-in as a super user. (from v19.0, no need to log-in as super user) 2. Invoicing > Accounting > Tax Returns. 3. Set an Opening Date in the wizard and try to apply the accounting period. **Error:** `ValueError - Expected singleton: onboarding.progress()` **Cause:** PR 1, added `_initiate_account_onboardings()` in the accountant (**accounting**) module. However, the onboarding progress should be initialized in the account (**invoicing**) module. **Fix:** This commit ensures that `_initiate_account_onboardings()` is called from the `account` module instead of the `accountant` module. [1] - odoo/enterprise#101442 Enterprise PR: https://github.com/odoo/enterprise/pull/107476 sentry-7064593163 Forward-Port-Of: odoo/odoo#248790
This update resolves an issue where setting accounting periods for tax returns would fail when the Invoicing module was also installed. The change ensures that a key setup process is consistently executed, regardless of which modules are used. This improves the reliability of tax return configuration.
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 ensures that timesheet entries, regardless of whether the hours spent are positive or negative, are limited to a maximum of six digits. Previously, users could enter excessively large negative values without any error message. This change improves data accuracy and prevents potential issues with timesheet reporting.
Original PR description
Currently, a user can add a timesheet entry with a negative Hours Spent value `exceeding six digits`. **Steps to reproduce:** - Install the `timesheet_grid` module. - Open the `Timesheets` app and…
Currently, a user can add a timesheet entry with a negative Hours Spent value `exceeding six digits`. **Steps to reproduce:** - Install the `timesheet_grid` module. - Open the `Timesheets` app and click `Add a line`. - Set Hours Spent to a `negative` value with more than six digits (e.g., -1000000). **Observation:** The line is added without any warning, whereas entering a positive value with more than six digits correctly raises an `error`. **Root cause:** At [1], the constraint validates only positive values exceeding six digits. As a result, negative values with more than six digits are not checked and bypass the `UserError validation`. **Fix:** This commit updates the constraint to ensure the six-digit limit applies to both positive and negative values. [1]: https://github.com/odoo/enterprise/blob/660905872909405c0a07a8317b4eb0a42e5854ca/timesheet_grid/models/analytic.py#L46-L49 opw-5909417 Forward-Port-Of: odoo/enterprise#108182 Forward-Port-Of: odoo/enterprise#106781
This update corrects a display issue where unused coupon IDs were incorrectly shown in order history, leading to user confusion. The fix ensures that coupon IDs are properly removed when rewards are applied or the reward dialog is closed, improving the clarity of loyalty program data. While a full solution requires a view update, the current fix remains stable.
Original PR description
### Issue: Due to this issue, `coupon_ids` which are never used are still shown in loyalty coupons history which is confusing for users. #### Steps to reproduce: 1- Create two promotions: - Promo A:…
### Issue: Due to this issue, `coupon_ids` which are never used are still shown in loyalty coupons history which is confusing for users. #### Steps to reproduce: 1- Create two promotions: - Promo A: 10% discount - Promo B: 20% discount 2- Create a SO and add a line. Then confirm the SO. 3- Click on `Reward` button. 4- A dialog should show both promos. Discard the dialog. 5- Navigate to `Discount and Loyalty`. 6- Open Promo A and B and you can see both have lines with `coupon_id.order_id` = `created SO` which is confusing. `Issue 1` 7- Navigate back to SO. Click on `Reward` and select Promo A, apply. 8- Navigate to Promo B. As you see the the `coupon_id` related to the SO is still there. `Issue 2` ### Cause and Fix: This is due to unlinking `coupon_ids` only in SO confirm action, causing this issue on already confirmed SOs: https://github.com/odoo/odoo/blob/604d07ab324caa5f3aa6f3baa9902c2137ea24db/addons/sale_loyalty/models/sale_order.py#L132-L136 We can fix this issue by `unlinking` the `coupons_ids` when a reward is applied or the dialog is discarded. However there are 2 limitations: 1- The view needs to be updated. Otherwise, `coupon_ids` will not be deleted upon clicking on `discard` button. However the fix is still stable. 2- What if the dialog is closed with the cross button or the tab is closed without selecting a reward? In that case the issue will still persist. To fix these issues, we can show only used `coupon_ids` in `loyalty_coupon_id` list view. However that cannot be done in stable as it requires `use_count` to be stored. NB: With some complex filters this also could be fixed on stable but not worth it. opw-5424753 Forward-Port-Of: odoo/odoo#245534
This update corrects a technical issue related to the transmission of 13th month salaries for Swiss companies using the LPP (Lohn- und Pensionskasse) reporting system. Specifically, the system now correctly includes the 13th month's base amount in the required data transmission, ensuring accurate reporting and compliance with Swiss tax regulations. This ensures proper payroll calculations and reporting for our Swiss clients.
Original PR description
Forward-Port-Of: odoo/enterprise#107913 Forward-Port-Of: odoo/enterprise#107908
This update fixes an issue where changing the Payment Partner in the accounting system didn't consistently save the new selection. The fix removes a technical restriction that prevented the system from properly updating the Payment Partner Bank record, ensuring changes are saved and reflected after refreshing the record.
Original PR description
**Steps to reproduce:** 1. Install Accounting. 2. Go to Return Type. 3. Create a record and set a Payment Partner Bank. 4. Change the Payment Partner. **Issue:** Changing the Payment Partner creates a log entry but does not update partner on the selected Payment Partner Bank. After refreshing the record the value is reverted to the previous partner. **Cause:** The field payment_partner_id is defined as `readonly` at the model level. As a result, when the ORM attempts to update this field, the write operation is silently ignored. Although the field appears editable in the view due to `readonly="0"`, model-level `readonly=True` still prevents the value from being saved. **Fix:** Make the field writable at the model level so that ORM updates are persisted, This ensures that changes to Payment Partner are properly saved and no longer reverted after refresh. **opw-5423029** Forward-Port-Of: odoo/enterprise#103041
This update adds a back button to the combo product configuration screen, making it easier for users to navigate and adjust settings. The change also improves the readability of the code by renaming a method. This enhancement streamlines the user experience for managing combo products.
Original PR description
The goal of this pr was to always have a Back button visible on the combo product configuration. I also change method name to be more readable. task: 5877219 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245870
This update resolves an issue where duplicate personal stages (like Inbox) were created in the Project module's demo data. The fix ensures that personal stage definitions are loaded before tasks are created, preventing the automatic stage generation logic from producing duplicates. This improves the consistency of demo data for new users.
Original PR description
Steps to reproduce: -- 1. Install the Project module with demo data enabled. 2. Create a new private task. Issue: -- The personal stages (Inbox, Today, This Week, etc.) are duplicated. Cause: -- In project_demo.xml, some tasks assigned to users (introduced in https://github.com/odoo/odoo/pull/224307) were defined before the personal stage records. Creating these tasks triggered the automatic stage generation logic (_populate_missing_personal_stages) because the personal stages in demo data were not loaded yet. This resulted in a duplicate set of stages being created once the demo data records were processed. Fix: -- The personal stage definitions in project_demo.xml have been moved higher up in the file so they load before any user is assigned to a task. task-5454658 Forward-Port-Of: odoo/odoo#241805
This update resolves an issue where users lacking write permissions on the `ir.sequence` model would encounter an error when generating serial numbers for manufacturing orders. The change simplifies the serial number generation process, eliminating the need for write access and ensuring reliable operation for all users.
Original PR description
## Issue When generating a batch of serial numbers, an AccessError is raised if the user does not have the *Write* access on the `ir.sequence` model. ## Steps to reproduce 1. Install *Manufacturing*…
## Issue
When generating a batch of serial numbers, an AccessError is raised if the user does not have the *Write* access on the `ir.sequence` model.
## Steps to reproduce
1. Install *Manufacturing* (`mrp`)
2. In Settings, enable *Lots & Serial Numbers*
3. Create a Product P
- Tracked *By Unique Serial Number*
- Create a BoM for product P
5. As a user without *Write* access on the `ir.sequence` model:
- Create and confirm a Manufacturing Order for product P - Quantity >= 2
- Click *Generate Serial*, *Generate*, *Apply*
6. **An Access Error is displayed, stating that you are not allowed to modify 'Sequence' records.**
## Cause
Commit https://github.com/odoo/odoo/commit/3ff0f2e3ef4f (and https://github.com/odoo/odoo/commit/9cd0c4affeb1) changed the way the serial sequence was updated by replacing `IrSequence.next_by_id()` with manual incrementation (`IrSequence.number_next_actual += 1`). The former method requires read access but does not require write access, whereas the latter does.
https://github.com/odoo/odoo/blob/8f0a5d31d62ea6fc2a1c94be8501735a01323954/odoo/addons/base/models/ir_sequence.py#L272-L275
Since the write access should not be required to generate serial numbers, the sequence is incremented using `sudo()`.
(related to)
opw-5882578
Forward-Port-Of: odoo/odoo#249778
Forward-Port-Of: odoo/odoo#249662This update optimizes the process of retrieving tax tags for invoices related to India. By restricting the operation to Indian localization and using faster XMLID resolution, the system now performs more efficiently, reducing unnecessary processing and improving overall speed. This change primarily impacts the l10n_in module.
Original PR description
Before this commit: - `_get_l10n_in_tax_tag_ids()` was executed for moves unrelated to Indian localization, causing unnecessary processing. - Profiling showed repeated `env.ref` lookups (>≈1.6% transactions each) even for a simple invoice flow (create → add products → post). After this commit: - Restrict execution to Indian-specific moves only. - Replace `env.ref` with `_xmlid_to_res_id` for faster XMLID resolution. task-5935607 Forward-Port-Of: odoo/odoo#248960
This update fixes an issue where pick-up point names and days were incorrectly capitalized in the website's 'Click and Collect' feature, particularly when using the Dutch language. The change ensures pick-up point names are displayed correctly and that weekdays are consistently capitalized regardless of the selected language. This improves the user experience and consistency of the pick-up point listings.
Original PR description
Issue: --- In pick-up point list, the case formatting should be: 1- Pick-up point's `name`, `street` and `city` should not be auto-capitalized. 2- Weekdays should must be always capitalized regardless of language. Steps to reproduce: --- 1- Create a second Company named `store`. 2- Create a wh for the created company and add the wh to click-and-collect pick-up points. (There should be more than 1 pick-up points) 3- In the website, add Dutch lang. 4- In website, open a product and, open the `Click and Collect`. Outcome: --- Name is capitalized to `Store` and the days are not capitalized if you switch to dutch lang. Cause: --- Due to CLDR, luxon doesn't capitalize weekdays in some languages. opw-5941830 Forward-Port-Of: odoo/odoo#249600 Forward-Port-Of: odoo/odoo#249078
This update resolves a technical issue that caused errors when exporting sales orders involving goods moving between countries in Europe. The fix ensures the system correctly checks for the presence of invoices during export, preventing unexpected errors and improving data accuracy. This enhancement ensures smooth order processing across borders.
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 the Planning calendar view would crash due to incorrect data validation in the sample data. The fix adapts the system to handle a 'false' value for a required field, preventing the crash. While a more comprehensive solution was considered, this quick fix ensures stability for sample data usage.
Original PR description
Go to the Planning calendar view and toggle filters such that there is no data displayed. Save the current filters as favorite. Then, reload and switch to the list view. Before this commit, in…
Go to the Planning calendar view and toggle filters such that there is no data displayed. Save the current filters as favorite. Then, reload and switch to the list view. Before this commit, in **debug mode**, the props validation of the ResourceTag component crashed, because it received `false` as value for the `type` props, which expected a `string`. The problem comes from the SampleServer, which only knows about the fields of the main model, but not those of co-models reachable from relational fields. In this case, there's a `resource_ids` many2many field on the main model whose relation is `resource.resource`, and there's a `type` selection field on that model. That field is required, so the code only expected `string` values, not `false`. But as the SampleModel doesn't know about that `type` field, it generates `false` as value. Ideally, the SampleModel should know about the whole field specs (main model + relations). However, even though that would be quite easily doable for kanban and list views (unity specs), it wouldn't be the case for the other views (the SampleServer is shared between all views using sample data). So it would require non trivial architectural changes to make this work. For that reasons, we went for the easy fix, which is to adapt the props definition to support `false`, as the value was actually already correctly handled by the Component itself. runbot error~239951 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 corrects a technical error within the HR holidays module that was causing incorrect calculations of working intervals. Specifically, the system was incorrectly mixing employee and resource IDs, leading to inaccurate holiday scheduling. This fix ensures accurate holiday calculations for all employees and resources.
Original PR description
Employee and resource ids were the same during testing. These were mixed in the function. runbot-240926 Note: https://github.com/odoo/odoo/pull/248661 aims to avoid such errors in the future --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249839
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 including inactive ones in 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 temporary issues. Previously, repeated errors would disable the process, even if the servers were functioning again. Now, errors are only reported when manually triggering the sync, ensuring a smoother and more reliable experience.
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 a technical error that was preventing notifications from the signature field. The issue stemmed from a missing declaration in the notification service, which was causing an error. This fix ensures that signature field notifications function correctly.
Original PR description
The notification service is later used in this [method](https://github.com/odoo/odoo/blob/04f3473da52ec74f3955cadd58eb016537497d44/addons/web/static/src/views/fields/signature/signature_field.js#L120), but it was never declared so it was causing an error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249143 Forward-Port-Of: odoo/odoo#248602
This update fixes a bug preventing users from searching the Colombian Daily Journal (Libro Diario) effectively. Previously, report lines were missing key information, causing the search bar to not function. The fix ensures all journal entries are searchable by move, partner, account, and label, improving reporting accuracy.
Original PR description
Steps to reproduce: 1. Open the Colombian Daily Journal (Libro Diario). 2. Type a move name or partner in the search bar. 3. Observe that no results are returned. Cause: Report lines were generated with an empty 'name' attribute. The accounting report framework uses this field for client-side filtering. Empty names make the search bar non-functional. Solution: Populate the 'name' field with move, partner, account, and label data. This enables the frontend search bar to match against these strings. opw-5495558 Forward-Port-Of: odoo/enterprise#106179
This update addresses an issue where the search bar in the Odoo iOS app was incorrectly clearing input when using a Korean keyboard and Safari. The fix prevents premature processing of search values during IME composition, ensuring accurate search functionality. This improvement specifically targets iOS devices.
Original PR description
Safari does not reliably set `KeyboardEvent.isComposing` during IME composition (e.g. Korean). As a result, the search value was processed too early and got cleared while composition was still in progress. Interestingly, the issue could not be reproduced with the Japanese keyboard, which appeared to behave correctly. See [1]. This commit adds an early return while composing to prevent interpreting the value prematurely. Since this is a targeted fix, it is applied only on iOS. Steps to reproduce: - Configure a Korean keyboard on an iPhone - Open a Sale Order - Focus the search bar - Type a character, then type a second one to combine them - The search input value gets reset [1] https://github.com/odoo/odoo/pull/222151 opw-5448385 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249473
This update resolves an issue where products created through the Services and Materials view were incorrectly assigned a default 'no' expense policy. The fix ensures these products now default to the standard 'sales_price' policy, aligning with expected sales accounting practices. This improves data accuracy and simplifies product costing.
Original PR description
This commit fixes an issue where products created from the `Services and Materials` view were assigned the default `no` expense policy. They should instead default to `sales_price` task-5490517 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that when a user unfollows a record in the inbox, all related notifications are automatically marked as read. This prevents a confusing situation where only one notification is marked as read, accurately reflecting the user's desire to stop following the conversation and improving the inbox's clarity.
Original PR description
**Description of the issue this PR addresses:** Previously, unfollowing a record from the inbox only marked the notification on which the action was performed as read. As a result, other unread notifications related to the same record remained in the inbox, even though unfollowing is a global action, indicating that the user is no longer interested in the entire conversation. **Desired behavior after PR is merged:** - Marks all notifications related to the same record as read when unfollowing from the inbox. - Ensures the inbox state accurately reflects the user’s intent to stop following the conversation. task-[5119331](https://www.odoo.com/odoo/project/1519/tasks/5119331) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an accounting error in Odoo's international tax reporting. Previously, the same account was used for both tax payable and receivable, leading to incorrect balance reporting. This change ensures that tax receivable balances are accurately reflected, improving accounting accuracy across various countries.
This update resolves an accounting error in the UK and Netherlands tax reporting by ensuring that tax receivable and payable accounts are distinct. Previously, the same account was used for both, leading to incorrect balance reporting. This change ensures accurate tax reporting and avoids potential accounting discrepancies.
This update improves the user experience by correcting the label for the GIF button within Odoo's email functionality. The change ensures a clearer and more intuitive way for users to attach GIFs to their emails. This is a minor improvement focused on usability.
Original PR description
task-5867464 (point 84) backport of https://github.com/odoo/odoo/pull/249459
This update resolves a bug where autofilling pivot cells with incorrect relational IDs caused the application to crash. The fix ensures that while the autofill process continues to function correctly, the associated tooltip functionality is stable, preventing unexpected errors. This improves the reliability of pivot table data entry.
Original PR description
If you try to autofill a pivot cell that has an invalid relational id in its domain (eg. `=PIVOT.HEADER(1, "stage_id", 99999999)`), the autofill actually works but the tooltip make everything crash. Task: [5913754](https://www.odoo.com/web#id=5913754&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#107807 Forward-Port-Of: odoo/enterprise#106601
This update fixes a visual issue where date pickers displayed arrows in the wrong direction when the website was viewed in RTL languages like Arabic. The fix ensures that date pickers correctly align with the language direction, providing a consistent and user-friendly experience for all users.
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
This update resolves a visual glitch preventing live chat visitors on mobile from adding reactions. The fix removes an outdated override of quick action counts, allowing the emoji picker to display properly. This ensures a smoother and more functional live chat experience for all users.
Original PR description
Before this commit, live chat visitors in mobile could not add a message reaction due to visual glitch. This happens because there's an override in livechat to show 3 quick message actions rather…
Before this commit, live chat visitors in mobile could not add a message reaction due to visual glitch. This happens because there's an override in livechat to show 3 quick message actions rather than 4, and this patch also applies in mobile where there's only 1 with the "..." button. The "Add reaction" message action in mobile, when shown as a quick action, is buggy: click on it glitches the visual of message in a way that disrupt the viewing of message... And this doesn't show the emoji picker. This commit fixes the issue by removing the override of quick action count of live chat visitors. This overrides was added a long time ago when the "Add reaction" and "View reactions" had the same icon, and playing with the amount of quick actions was a way to avoid showing these 2 actions as quick actions with similar icons [1]. Also quick actions in chat window has been tweaked to show 2 actions at most in desktop, which is the best presentation in chat window. Removal of the override let it use this better quick action count. [1]: https://github.com/odoo/odoo/pull/140335 Task-5953287 Before / After <img width="399" height="767" alt="Screenshot 2026-02-19 at 17 41 21" src="https://github.com/user-attachments/assets/4f1fb8e7-fa0b-4c8c-8f41-552432224064" /> <img width="401" height="771" alt="Screenshot 2026-02-19 at 17 56 20" src="https://github.com/user-attachments/assets/5aadc9df-d858-49ec-b894-d2c424396f54" /> Forward-Port-Of: odoo/odoo#249776 Forward-Port-Of: odoo/odoo#249550
This update resolves an issue where formatted text in course quiz descriptions was incorrectly displayed as raw HTML tags after a page refresh. The fix ensures that quiz descriptions are properly rendered, regardless of whether they are loaded initially or retrieved from a cached version. This improves the user experience for course content.
Original PR description
When a user navigates away from a course quiz page and comes back, the quiz data is retrieved from a local cache to avoid reloading it. However, the caching mechanism stores the field as a String. As a result, when the data is restored from the cache, it escapes the HTML tags, displaying them to the user instead of rendering the formatting. This commit ensures that the markup is re-applied to the description when retrieving the quiz from the cache. Steps to reproduce: 1. Open a Course Slide that has a Quiz with a formatted description (e.g., bold text). 2. Navigate to the next Slide. 3. Navigate back to the previous Slide. 4. The description now displays raw HTML tags (e.g., `<b>text</b>`) instead of the formatted text. Task-5452792 Forward-Port-Of: odoo/odoo#242489
This update resolves a visual bug where folded option groups within the email editor were incorrectly displayed. The fix ensures that option groups are hidden when folded, improving the user experience and preventing confusing displays. This enhancement maintains a clean and organized email creation interface.
Original PR description
Commit 64d35ccd6fade9e0473686b8484f561b5f4215ce added folding of groups of options, but the customization to the options container made in `mass_mailing` removed the condition to hide the group if folded. This commit fixes the replacing content to take into account the whether the groupd is currently folded. Steps to reproduce: - Open the mail editor for a html mail - Click on an element with option, that has an ancestor with option - Bug: the group of options for the ancestor appears, but has the "folded" indicator task-5959568
This update fixes a synchronization issue within the point-of-sale and pos_restaurant modules, ensuring that tours accurately wait for order updates before proceeding. Previously, reopening a table could overwrite local orders with server versions. This enhancement provides a smoother and more reliable tour experience for users.
Original PR description
point_of_sale, pos_restaurant This fix ensures that the tour waits for the order to fully sync before proceeding to the next step when clickPlanButton is triggered. This prevents the local order from being overwritten by the server version when the table is reopened. runbot-23878, runbot-238529, runbot-238892 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a technical issue preventing users from correctly adding documents through the document creation dialog in the Enterprise version of Odoo. The fix involved correcting a broken XPath expression, ensuring the dialog functions as intended and improving the user experience. This ensures seamless document integration for Enterprise users.
Original PR description
task-5952598
This update fixes a usability issue in the channel invitation feature by repositioning the 'Generate a new link' button. Previously, its placement led to accidental clicks, but the change ensures users more naturally access this key function. This improves the overall user experience and efficiency.
Original PR description
The channel invitation has a new feature to generate a new link. Before this commit, this was placed as an icon button next to the copy clipboard. While this looks like a good placement at first,…
The channel invitation has a new feature to generate a new link. Before this commit, this was placed as an icon button next to the copy clipboard. While this looks like a good placement at first, there is some UX issues: this doesn't feel as natural as before to copy link in clipboard. This happens because the save to clipboard was the last item, therefore it felt extremely easy to just click on it. With the new button, the generate new link is at the end, and so we are more prone to click on the renew link button than the save to clipboard. Even with the primary button, the placement of save to clipboard requires more precision than we'd expect from such a heavily used button. This commit fixes the issue by moving the "Generate a new link" below, with the "Access restricted to" text. Justifications are: - Other positions next to input felt off, whether swap order with save to clipboard or renew button as prefix of input. - This button is niche, so being below matches more the niche usage of the feature. - Overall UI of channel invitation feels more balanced. - Moving to bottom allows to put plain text on button, making it clearer what this button means. Before / After <img width="626" height="243" alt="Screenshot 2026-02-23 at 15 42 46" src="https://github.com/user-attachments/assets/01bbf9b6-6fda-4981-8191-a09598e98af8" /> <img width="618" height="251" alt="Screenshot 2026-02-23 at 15 42 25" src="https://github.com/user-attachments/assets/21a797c7-c61e-404f-afe0-fcb4eefe177e" />
This update resolves an issue where the description field for new tasks was being duplicated within the project form. The root cause was a default field content being incorrectly appended. This change ensures that task descriptions are displayed accurately and consistently, improving the user experience when viewing project details.
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 issue where non-admin users couldn't use the Purchase Order Suggest feature. The fix ensures that users with purchase permissions can now correctly suggest products, resolving an AccessError and improving usability. This allows for more efficient purchase order creation.
Original PR description
**Issue:** Non-admin users get an AccessError as follows ```doesn't have 'create' access to: - Default Values, Based on (Purchase Order Suggest) (ir.default: 45)... ``` when using the Purchase Order…
**Issue:** Non-admin users get an AccessError as follows ```doesn't have 'create' access to: - Default Values, Based on (Purchase Order Suggest) (ir.default: 45)... ``` when using the Purchase Order Suggest wizard. **Cause:** The `ir_default_user_rule` record rule restricts non-admin users to only create/modify ir.default records where `user_id = user.id` However, in `_save_values_for_vendor` method: https://github.com/odoo/odoo/blob/6b8a8196c63275eead6709bb20002df0be12a059/addons/purchase_stock/wizard/purchase_order_suggest.py#L199-L204 `ir.default.set()` is called without setting the `user_id` parameter, which defaults to an attempt to create a global default: what only admins can do. **Steps to reproduce:** - create a non-admin user with purchase user permissions. - log in as that user and create a Purchase Order - add products to the catalog and click "Suggest. - configure suggest parameters and click "Compute" (Note: compute is only enabled when estimated_price > 0) An AccessError occurs opw-5076647 Forward-Port-Of: odoo/odoo#236743 Forward-Port-Of: odoo/odoo#227643
This update adds a new setting to mail activity types, allowing administrators to control visibility related to KPI providers. This change improves the flexibility and control over how mail activities are configured within the Odoo system. The change was implemented to address a missing configuration option.
Original PR description
Introduced in ff941e6555c12918803db4a72511c9381cc58c31, the field `kpi_provider_visibility` was not added to the form view. With this commit, we add the field to the form view, so that the value can be changed by the administrator of the database. Task-id: [5167740](https://www.odoo.com/odoo/project.task/5167740) Forward-Port-Of: odoo/odoo#249252
This update resolves an issue preventing custom event form fields from being added. Previously, changes to the attendee registration process caused errors when attempting to convert data types. The fix allows for more flexible customization of event forms, ensuring that third-party modules can easily add and manage additional attendee information without disrupting the core registration flow.
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#244378This update improves how Odoo identifies companies in Malaysia based on their VAT registration numbers. Specifically, if a VAT number starts with 'IG', the system now correctly flags the record as not representing a company. This ensures accurate accounting and reporting for Malaysian businesses.
Original PR description
In this commit: - For Malaysia, TIN is distinguishable between an individual and a company by prefix - if vat starts with 'IG', 'is_company' should remain False Task [link](https://www.odoo.com/odoo/project.task/5912436) task-5912436 Forward-Port-Of: odoo/odoo#247937
This update resolves an issue where borders were missing from mention elements in the email interface. The problem stemmed from an unnecessary inline-block property being applied to the mention links. This change ensures consistent and proper display of borders, improving the visual quality of emails.
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" /> Forward-Port-Of: odoo/odoo#249811
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 improves the user experience for managing rental agreements.
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#108157 Forward-Port-Of: odoo/enterprise#107621
This update fixes a display issue in the Point of Sale product information popup. Previously, the 'Financials' section incorrectly showed the tax identification number (RFC) instead of the correct VAT or IVA name. This change ensures accurate tax information is presented to users, improving data clarity and accuracy within the POS system.
Original PR description
How to reproduce; - Use a company from a country with a different vat_label (Mexico for example) - Go to the frontend of POS - Select a product > ... > Info The problem: Under the "Financials" section, "RFC" is displayed instead of "VAT" or "IVA". RFC is the tax identification number, not the tax name Why: This commit (https://github.com/odoo/odoo/commit/4fa9f9b849016f312efcb73f9a76b223e429aec0) introduced the usage of vat_label to display the tax name in a dynamic way. However, the vat_label field is used to store the tax identification number, not the tax name opw-5915087 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249374 Forward-Port-Of: odoo/odoo#247618
This update fixes a potential issue with how Odoo accesses email messages, ensuring more reliable performance and stability. The changes include enhanced testing to cover complex access scenarios and improve the overall robustness of the mail system. This resolves a technical problem that could have impacted email delivery.
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 Forward-Port-Of: odoo/odoo#248125 Forward-Port-Of: odoo/odoo#245744
This update removes a redundant field from the VoIP call data used in the spreadsheet dashboard. The field was added in a separate module and wasn't actually utilized, so it's been removed to streamline the data. This ensures the dashboard remains efficient and focused on relevant information.
Original PR description
`summary` field on `voip.call` is added in `voip_ai` which is not a dependency of `spreadsheet_dashboard_voip`. As the field is not used in the dashboard, this commit removes it. Fixes runbot #240996
This pull request confirms that the developer has signed a Corporate License Agreement (CLA) for Odoo. The change involves a documentation update to record this signature, ensuring compliance with Odoo's contribution guidelines. This is a standard legal process for contributing to the Odoo 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