Daily updates from Odoo
Wednesday, June 24, 2026
144 changes
20 changes
Resolved issues and error corrections
This update fixes an issue where clicking the 'Documents' button on an employee form opened a new browser tab. The change adds a setting to open the document link directly within the existing employee form, improving user workflow and efficiency. This ensures a smoother experience for accessing employee documents.
Original PR description
Issue: ---------------------------------------- When on an employee form, clicking the "Documents" button opens a new page instead of staying on the same. Steps to reproduce: ---------------------------------------- - Install `documents_hr` - Go on an employee form - Click the "Documents" button - It opens a new page Cause: ---------------------------------------- The `'ir.actions.act_url'` opens a new page by default. Solution: ---------------------------------------- Add `'target': 'self',` to make it open the URL in the same page. opw-6284677 Forward-Port-Of: odoo/enterprise#120285
This update corrects a technical issue where new version creations were inadvertently duplicating notes associated with those versions. This change ensures that each version has its own unique note, improving data accuracy and organization within the HR system. It's a small but important fix for maintaining consistent version tracking.
Original PR description
When we create a new version, we don't want to copy the note which should be version specific task-6304034 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#271379 Forward-Port-Of: odoo/odoo#270110
This update corrects a technical issue where the system incorrectly rejected zero measurement values received from caliper devices via IoT. This ensures accurate data reporting, particularly for items with no measurement, and improves the reliability of IoT-driven quality checks. It also includes a minor typo correction.
Original PR description
Fix a check on the IoT response that incorrectly rejected valid measurements of 0 from caliper devices Also fix a typo opw-6184669 Forward-Port-Of: odoo/enterprise#121226 Forward-Port-Of: odoo/enterprise#121116
This update resolves an error that prevented users from accessing task suggestions within the timesheet timer. The fix filters task suggestions to only include tasks the user currently has access to, ensuring a smoother and more reliable timesheet experience. This prevents access errors and improves usability.
Original PR description
Steps to reproduce: - 1. Log in as a user who can see their own timesheets and has already logged time on tasks that are now in projects they can no longer read (e.g. Marc Demo in the demo data). 2. Open the Timesheets timer in the systray and check in. 3. Click the task field to open the suggestions dropdown. Issue: - An access error is raised when the task dropdown is opened. Cause: - The timer's `project.task` `name_search` override suggests recently used tasks via `account.analytic.line.sudo()._get_recently_used_records()`. The sudo surfaces task ids the user can no longer read. `name_search` returns them, raising the access error. Fix: - Filter the aggregation result so only tasks the user can read are returned. task-6319815 Forward-Port-Of: odoo/enterprise#121345
This update simplifies the process of updating the Account EDI UBL Cii reporting module. Previously, the module's reliance on specific inherited view structures caused potential conflicts. This change removes that fragile inheritance, leading to a more stable and easier-to-maintain system.
Original PR description
**Description of the issue/feature this PR addresses:** As the new `xpath` is expecting a very specific type of `t-if` which is possibly changed in other templates of third parties or even Odoo itself which do not depend on this module, we take a more robust approach to identify the block **Current behavior before PR:** Issues with inherited views outside the dependency tree (because of primary=True) **Desired behavior after PR is merged:** Less friction and smoother identifier of the needed diff Info: @wt-io-it --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270605
This update resolves a stability issue in the point-of-sale tour. Previously, the tour could fail due to asynchronous order processing, leading to duplicate requests. The fix ensures the tour waits for order processing to complete, preventing these race conditions and improving the overall reliability of the test.
Original PR description
The tour could fail because `sendOrderInPreparationUpdateLastChange` is asynchronous when sending the order to the kitchen. The test was continuing to the next steps before the request was fully resolved, which could lead to sending the order again while the previous call was still in progress. This commit updates the tour to explicitly wait for the async call to complete before continuing, by adding a delay step after clicking the order button. This prevents race conditions during the test. --- Runbot Error: https://runbot.odoo.com/odoo/runbot.build.error/181846 Forward-Port-Of: odoo/enterprise#121237 Forward-Port-Of: odoo/enterprise#110909
This update resolves an issue where users without survey rights would encounter a technical error when creating interview records. The fix ensures that the system gracefully handles users without survey permissions by returning an empty list, preventing the TypeError. This ensures all users can access the interview configuration feature.
Original PR description
Steps-to-Reproduce - Install hr_recruitment_survey - Make a user with no Survey rights but Recruitment Admin. - From that user go to Recruitment > Configurations > Interview. - Trying to create…
Steps-to-Reproduce
- Install hr_recruitment_survey
- Make a user with no Survey rights but Recruitment Admin.
- From that user go to Recruitment > Configurations > Interview.
- Trying to create record will reproduce this error
```
File "/home/odoo/src/odoo/saas-19.3/addons/hr_recruitment_survey/models/
survey_survey.py", line 19, in _compute_allowed_survey_types
survey.allowed_survey_types = [*survey.allowed_survey_types, 'recruitment']
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Value after * must be an iterable, not bool
```
Reason
- Because user may not have survey rights return `[]` [here](https://github.com/odoo/odoo/blob/a7f9b44aad071efe401d3caa70d069aaf7e19cc9/addons/survey/models/survey_survey.py#L400) which gets converted to false by orm [here](https://github.com/odoo/odoo/blob/3a4b2a320c1496e97eeb1834862230439da6ea2f/odoo/orm/fields_misc.py#L55-L74).
- upg : [4282172](https://upgrade.odoo.com/odoo/upgrade.request/4282172)
- opw : [6231531](https://www.odoo.com/odoo/project/70/tasks/6231531)
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-prThis update fixes an issue where AI-generated views lacked proper 'no content' messages. The change ensures that help messages are correctly formatted when views are opened by the AI agent, providing a better user experience. This improves the clarity and usability of AI-driven views.
Original PR description
Purpose: -------- Currently, when a view is opened by an AI Agent and if there are no records to show (even after filtering them manually), the no content helper is not formatted as it would be if the user opened the view manually. This happens because the tools to open the views by AI return the action dictionaries instead of letting the action service fetch them based on an action Id. However `_loadAction` in the action service only markups the "help" key when it fetches the action, not if it was passed. With this commit, the "help" key will be markuped before being processed by the action service when an action dict is returned from an AI tool. Task-6251090
This update addresses a test failure related to database constraints within the Odoo email alias functionality. A recent database update triggered a different error (RESTRICT_VIOLATION) instead of the previously reported FOREIGN_KEY_VIOLATION. The test has been updated to handle this new error type for consistent results.
Original PR description
This commit is kind of a follow up of
odoo/odoo@39cd4ea856fe00f5674f8c44b2b66cbf2705426d (in 18.0).
In a nutshell, following a standard-compliance fix (postgres/postgres@086c84b) has led to `RESTRICT_VIOLATION` being emitted in cases which formerly emitted `FOREIGN_KEY_VIOLATION`. One such case is specifically being tested for by `test_alias_domain_setup`, leading to this test failing systematically when running pg18:
psycopg2.errors.RestrictViolation: update or delete on table "mail_alias_domain" violates RESTRICT setting of foreign key constraint "mail_alias_alias_domain_id_fkey" on table "mail_alias"
DETAIL: Key (id)=(191) is referenced from table "mail_alias".
This commit updates the test to use the more generic `IntegrityError` as it's probably more than sufficient for our purposes.
Forward-Port-Of: odoo/odoo#271403
Forward-Port-Of: odoo/odoo#271302This update adds a new setting to our spreadsheet tests that allows them to bypass waiting for data to fully load. Previously, tests were slow because they had to wait for all data to be ready. Now, tests can run faster and more reliably by skipping this wait, ensuring consistent results.
Original PR description
Added the parameter `skipWaitForDataLoaded` to `createSpreadsheetWithList` to test what happens when the list is not ready yet. Task: [6289944](https://www.odoo.com/odoo/2328/tasks/6289944) 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#271144 Forward-Port-Of: odoo/odoo#269096
This update resolves an issue where tooltips in the list autofill feature were displaying error messages instead of correct information when the list data wasn't immediately available. The fix ensures that tooltips display the correct data, improving the user experience and preventing misleading information. This was part of a larger effort to improve data reliability.
Original PR description
The getter `getTooltipListFormula` would return the result of `getListHeaderValue` as the content of the tooltip, but this returned a loading error instead of a string if the list was not ready yet. Task: [6289944](https://www.odoo.com/web#id=6289944&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#121228 Forward-Port-Of: odoo/enterprise#119876
This update optimizes how Odoo processes QWeb templates, specifically addressing a performance issue related to template compilation. The change reverts a recent Markupsafe update that introduced a slower method for handling template tags, resulting in faster compilation times. This ensures Odoo applications run more efficiently.
Original PR description
Starting version 2.1.4 of markupsafe, they decided to adapt the `striptags` function to use in-python-loops instead of the original implemenation that relied on pre-compiled regex. A problem has been…
Starting version 2.1.4 of markupsafe, they decided to adapt the `striptags` function to use in-python-loops instead of the original implemenation that relied on pre-compiled regex. A problem has been spotted with qweb templates that used `striptags` with large inputs, which led to the investigation of this function and it was found that the old implementation is actually faster. In fact, the PR introducing this change in Markupsafe, made these claims with no benchmarks whatsoever: https://github.com/pallets/markupsafe/pull/413/changes The new implementation of markupsafe is O(N x M), where n is the number of tags and M being the length of the input string. The old regex approach does a single c-level scan to check the existence of the regex which is performing much better for varying input size. The benchmark cases below are in the form `<case_description>_<number_of_tags>`. We can see that in the cases where the current implementation is slightly faster is when there are no tags in the input which can be explained by the fact that the while loops will simply exit early. The time lost in the regex implementation is likely due to the deeper call stack to scan for the regex. Apart from that, in the case of an unclosed tag, the regex implementation is also slower because it still needs to scan the entire line. However, in that case the time taken is a handful of milliseconds, so it's not really a performance regression there either. Apart from that, the old implementation is consistently much more performant, for both small and large inputs. Benchmarks: | Case | Regex ms | Current ms | Speedup | |----------------------------------------------|----------|------------|---------| | plain_text_50k_words | 3.020 | 2.627 | 0.9x ← current_implementation | | unclosed_tag_then_50kb_text | 0.367 | 0.032 | 0.1x ← current_implementation | | unclosed_tag_then_500kb_text | 3.787 | 0.273 | 0.1x ← current_implementation | | multiple_unclosed_open_tags_then_50kb_text | 18.912 | 0.371 | 0.0x ← current_implementation | | multiple_unclosed_open_tags_then_500kb_text | 189.007 | 8.209 | 0.0x ← current_implementation | | unclosed_comment_then_500kb_text | 7.276 | 0.412 | 0.1x ← current_implementation | | 5k_small_tags | 0.986 | 22.096 | 22.4x ← regex_old_implementation | | 20k_small_tags | 4.125 | 492.186 | 119.3x ← regex_old_implementation | | 50k_small_tags | 12.658 | 5499.602 | 434.5x ← regex_old_implementation | | 1k_nested_divs | 0.155 | 0.923 | 5.9x ← regex_old_implementation | | 10k_nested_divs | 1.648 | 48.410 | 29.4x ← regex_old_implementation | | 2k_tags_with_attrs | 1.058 | 12.013 | 11.4x ← regex_old_implementation | | 20k_tags_with_attrs | 13.185 | 6068.755 | 460.3x ← regex_old_implementation | | 2k_multiline_tags | 0.815 | 10.819 | 13.3x ← regex_old_implementation | | 20k_multiline_tags | 8.939 | 4231.768 | 473.4x ← regex_old_implementation | | 1k_comments | 0.222 | 1.292 | 5.8x ← regex_old_implementation | | 1k_comments_hiding_tags | 0.163 | 1.121 | 6.9x ← regex_old_implementation | | 2k_mixed | 0.278 | 2.392 | 8.6x ← regex_old_implementation | | 10k_mixed | 1.400 | 50.959 | 36.4x ← regex_old_implementation | | qweb_shop_200_products | 0.907 | 7.880 | 8.7x ← regex_old_implementation | | qweb_shop_1000_products | 4.296 | 194.647 | 45.3x ← regex_old_implementation | This PR is needed because requirements.txt in Odoo specifies the following dependency: `MarkupSafe==2.1.5 ; python_version >= '3.12' \# (Noble)` This means that all versions running Ubuntu Noble, will be having the same issue introduced in version 2.1.4 of markupsafe. opw-5999688 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268580 Forward-Port-Of: odoo/odoo#257889
This update resolves an issue where bank statement lines couldn't correctly select child contacts when using the 'Set Partner' button. The fix aligns the system's selection process, allowing users to accurately associate bank statements with related contacts, including those nested within company contacts. This improves data accuracy and streamlines bank reconciliation workflows.
Original PR description
When creating a bank statement line, we can not set an individual contact that is a children of a company contact. However, when clicking on the 'Set Partner' button, all contacts are shown in the modal list view. This commit aligns the domain coming from the 'Set Partner' button with the domain from the 'partner_id' field of the auto reconcile wizard Steps: - Have a contact X, with a child contact Y - Create and confirm an invoice for contact Y, amount 1000 - Create a bank statement line for 1000 -> You can not select Y, only X - Click 'Add & Close' - Click on 'Set Partner' button -> Y is displayed opw-6205154 Forward-Port-Of: odoo/enterprise#121223 Forward-Port-Of: odoo/enterprise#118036
This update resolves an issue where the 'select all' (Ctrl+A) function in the website builder incorrectly included non-editable text. The fix ensures that the selection is limited to editable content, specifically elements with the `contenteditable` attribute, improving the user experience and preventing unwanted text inclusion.
Original PR description
*: website Commit d09c8fd428315b8c3bf08c43d55da50fcd77f2ae added a handler for `ctrl+a` to restrict the selection inside the closest `div`. But if the `div` element is outside `contenteditable=true`, it would select non-editable nodes. This commit sets the selection on the closest `[contenteditable=true]` instead of the closest `div` if the latter is not editable. Steps to reproduce: - Open website builder on a product page - Place the cursor in the price of the product - Press `ctrl+a` - Bug: the selection contains the `$` which is not editable task-6324409
This update fixes a minor accessibility issue by adding an aria-label to the quantity input field on the cart page. This ensures that users with screen readers can correctly identify and interact with the field, improving the overall user experience and compliance with accessibility standards. It's a simple change that enhances usability for all users.
Original PR description
In [1], the `aria-label` was not added to the quantity input field. This commit adds an `aria-label` to the quantity input field on the cart page to improve accessibility. [1]:https://github.com/odoo/odoo/commit/8f6c27b9b2d553a0b539ecd382bed80973621b6d | wih aria-label | without aria-label | | ------------- | ------------- | | <img width="674" height="432" alt="image" src="https://github.com/user-attachments/assets/962057fd-7272-4242-8a5d-dd1d66bc1096" /> | <img width="1293" height="229" alt="image" src="https://github.com/user-attachments/assets/836e272e-f505-4284-9a5c-02ab662f6061" /> | | <img width="1181" height="86" alt="image" src="https://github.com/user-attachments/assets/0e64d231-0c88-4cca-b333-7e602aedff18" /> |<img width="976" height="114" alt="image" src="https://github.com/user-attachments/assets/ae403367-cd3b-4c81-afe9-9eb452f66073" />| --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where product searches weren't working correctly when using the autocomplete feature. The fix bypasses a search optimization that prevented finding products based on barcode when the name search failed. This ensures users can consistently find products using either name or barcode.
Original PR description
Steps: - Create a product with a barcode "12345" - Create a sale order - Add a product - search product with name "12345" without copy/pasting - no result - try with copy/pasting - 1 result The problem is due to the fact that there is an optimization in Many2XAutocomplete.search which means that if no results are found for “1234,” it will not search for “12345.” However, product override name_search to returns a product only when the name is exactly equal to its barcode (`=` and not `ilike`), which does not work at all with search optimization. Since: https://github.com/odoo/odoo/pull/228035 opw-5908011 Forward-Port-Of: odoo/odoo#248583 Forward-Port-Of: odoo/odoo#247978
A recent update to the Odoo Enterprise software (19.2 and later) caused a test for the 'hr_holidays_gantt' module to fail. This was due to an issue with a payroll-related field in the test's configuration. This fix ensures the test runs successfully, maintaining the stability of the holiday planning feature.
Original PR description
__ ## Error description When the test runs with only the module `hr_holidays_gantt` installed, it fails. ## Origin of the issue There's a payroll related field in the `read_specification` variable. ### Note The error is only triggered since 19.2. __ original commit: https://github.com/odoo/odoo/pull/256636 Forward-Port-Of: odoo/enterprise#121119
This update resolves a problem where emojis, such as the firefighter emoji, were being displayed incorrectly due to how they were encoded. The fix backports a more robust regex pattern from the 19.4 release to correctly handle these variations in emoji formatting, ensuring consistent and accurate emoji display.
Original PR description
Bug === Some emoji like `👨🚒` are separated, because they are built using `👨 + Emoji_Modifier + 🚒` (`\uFE0F` can also be used to get the variant of the emoji). Adapt the regex to take into account those Unicode variations. Task-5491124 Forward-Port-Of: odoo/odoo#271373 Forward-Port-Of: odoo/odoo#269719
This update resolves a technical issue that previously caused errors when creating expense accounts without assigned codes. The fix ensures the system handles accounts without codes gracefully, preventing a 'TypeError' and improving overall stability. This change ensures consistent functionality across all expense account types.
Original PR description
## Steps to Reproduce: 1. Install the **Accounting** module. 2. Enable **Analytic Accounting** in Settings. 3. Create and switch to a new company. 4. Create an expense type of account without setting a code. 5. Go to **Analytic Distribution Models** and create a new record. ## Error: `TypeError: 'bool' object is not subscriptable` ## Cause: Since commit https://github.com/odoo/odoo/commit/c3313b336b9f1305c363097745926f2bdf61e277, account codes are optional. When an expense type account exists without a code, `_compute_prefix_placeholder()` tries to extract the first two characters of the account code at [1]. However, an unset code field is treated as False, and slicing this boolean value will raise an error. ## Fix: Only use the expense account code to compute prefix suggestions when the account has a code. Otherwise, keep using the default prefix values. sentry-7553918989
This update ensures Odoo's server processes efficiently load necessary data, leading to faster response times. Previously, a key setting wasn't being applied correctly, but this fix now proactively loads these data sets, optimizing the server's performance. This change improves the overall user experience.
Original PR description
The code to set the registry size was moved to `preload_registries`. The gevent server does not preload registries and thus does not set the registries size. Instead of moving the code again, we can preload registries in the gevent server. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#271640
19 changes
Enhancements to existing features
This update changes the unit of measure for the 'Flour' product in the Point of Sale system to kilograms. This adjustment is necessary to properly configure product weighing, particularly for compliance with a specific certification (l10n_eu_iot_scale).
Original PR description
This small PR sets the "Flour" product's units of measure to kilograms. This helps to configure the weighing of the product, especially for the l10n_eu_iot_scale cert Forward-Port-Of: odoo/odoo#270508
This update enhances the accuracy of timesheet suggestions generated by the Timesheet Assistant Manager. The changes address minor issues with the assistant's recommendations, ensuring more reliable time tracking for project teams. This improves efficiency and data integrity within the Odoo Enterprise system.
Original PR description
This commit's purpose is to add a few bugprovement to the timesheet assistant manager. Those imp concerns mostly the timesheets suggested by the assistant manager. task-6179842
Resolved issues and error corrections
This update resolves an issue where bank statement lines couldn't correctly select child contacts when using the 'Set Partner' button. The change aligns the system's selection process, allowing users to properly associate bank statements with related company contacts, including those with dependent contacts. This improves data accuracy and simplifies reconciliation workflows.
Original PR description
When creating a bank statement line, we can not set an individual contact that is a children of a company contact. However, when clicking on the 'Set Partner' button, all contacts are shown in the modal list view. This commit aligns the domain coming from the 'Set Partner' button with the domain from the 'partner_id' field of the auto reconcile wizard Steps: - Have a contact X, with a child contact Y - Create and confirm an invoice for contact Y, amount 1000 - Create a bank statement line for 1000 -> You can not select Y, only X - Click 'Add & Close' - Click on 'Set Partner' button -> Y is displayed opw-6205154 Forward-Port-Of: odoo/enterprise#121223 Forward-Port-Of: odoo/enterprise#118036
This update enhances the automated helpdesk system by adding tests for reminder emails and correcting a calculation error related to the reminder timer. This ensures timely and accurate automated reminders are sent to users, improving the overall efficiency of ticket resolution.
Original PR description
- add tests for the auto reminder email before auto-closing tickets - fix issue with the reminder timer calculation --- task-5438678 Forward-Port-Of: odoo/enterprise#120540
This pull request updates the core spreadsheet component (o_spreadsheet) with several bug fixes and improvements. These changes address issues related to viewport behavior, formula calculations, and table rendering, ensuring a smoother and more reliable spreadsheet experience for users. The update also includes enhancements to the underlying Node.js environment.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/f29ad892a2 [REL] 19.2.17 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/f29ad892a2 [REL] 19.2.17 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/5f301282cd [FIX] viewport: fix viewport jump with frozen pane [Task: 6292764](https://www.odoo.com/odoo/2328/tasks/6292764) https://github.com/odoo/o-spreadsheet/commit/55308a5492 [FIX] composer_tokenizer: fix argument separator in formulas [Task: 6303210](https://www.odoo.com/odoo/2328/tasks/6303210) https://github.com/odoo/o-spreadsheet/commit/683ed8df8b [FIX] Find and replace : selection after an UPDATE_CELL [Task: 4818132](https://www.odoo.com/odoo/2328/tasks/4818132) https://github.com/odoo/o-spreadsheet/commit/5c1c720879 [FIX] rolldown: Fix cjs file extension [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/ec12e30dfd [IMP] node: add script to run the model in node [Task: 6088515](https://www.odoo.com/odoo/2328/tasks/6088515) https://github.com/odoo/o-spreadsheet/commit/95c32d163e [FIX] package.json: Update Node.js and npm engine requirements [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/85381e6ae8 [FIX] carousel: custom color don't use carousels [Task: 6263128](https://www.odoo.com/odoo/2328/tasks/6263128) https://github.com/odoo/o-spreadsheet/commit/20bfea982c [FIX] table: correctly insert table on static pivots [Task: 6204984](https://www.odoo.com/odoo/2328/tasks/6204984) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update fixes an issue where clicking the 'Documents' button on an employee form opened a new browser tab. The change adds a setting to open the document link directly within the employee form, improving user experience and efficiency. This ensures users can quickly access employee documents without navigating away from the main form.
Original PR description
Issue: ---------------------------------------- When on an employee form, clicking the "Documents" button opens a new page instead of staying on the same. Steps to reproduce: ---------------------------------------- - Install `documents_hr` - Go on an employee form - Click the "Documents" button - It opens a new page Cause: ---------------------------------------- The `'ir.actions.act_url'` opens a new page by default. Solution: ---------------------------------------- Add `'target': 'self',` to make it open the URL in the same page. opw-6284677 Forward-Port-Of: odoo/enterprise#120285
This update ensures that partner data created in the POS system is automatically synchronized with the latest information from the DIAN government service after a refresh. Previously, changes weren't reflected immediately, requiring manual updates. This fix guarantees accurate and up-to-date partner details for improved business operations.
Original PR description
Step to reproduce: - install l10n_co_dian and pos - open pos and click on create a new partner from partner list - enter name ex. "temp", identification number, click on form - notice a `refresh…
Step to reproduce: - install l10n_co_dian and pos - open pos and click on create a new partner from partner list - enter name ex. "temp", identification number, click on form - notice a `refresh icon` is visible: click on it. Observation: - the dialog is closed and partner is selected with "temp" name Expected: - with valid government credentials and a valid identification number, the refresh action should also update the partner data on the POS side Cause: - the refresh button triggers the `button_l10n_co_dian_refresh_data` action, which fetches the legal name and email from the government service - although the backend record is correctly updated, the new values are not immediately synchronized with the POS - when the refresh button is clicked, editPartner() first triggers `web_save` using the temporary "temp" name and immediately reads the partner data afterward - the refresh action executes later and updates the contact with the fetched legal information, but the POS is not aware of these subsequent changes Fix: - read the data again if there is any update caused by this action. - this is done by overriding `afterExecuteActionButton` of FormController class opw-6198035 Forward-Port-Of: odoo/enterprise#117527
This update simplifies the process of updating the Account EDI UBL Cii reporting module. Previously, the module's configuration could easily clash with other parts of Odoo, causing issues. This change removes a fragile setup, making updates smoother and more reliable.
Original PR description
**Description of the issue/feature this PR addresses:** As the new `xpath` is expecting a very specific type of `t-if` which is possibly changed in other templates of third parties or even Odoo itself which do not depend on this module, we take a more robust approach to identify the block **Current behavior before PR:** Issues with inherited views outside the dependency tree (because of primary=True) **Desired behavior after PR is merged:** Less friction and smoother identifier of the needed diff Info: @wt-io-it --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270605
This update resolves a stability issue in the point-of-sale tour. Previously, the tour could fail due to asynchronous order processing, leading to duplicate requests. The fix ensures the tour waits for order updates to complete, preventing these race conditions and improving the overall test reliability.
Original PR description
The tour could fail because `sendOrderInPreparationUpdateLastChange` is asynchronous when sending the order to the kitchen. The test was continuing to the next steps before the request was fully resolved, which could lead to sending the order again while the previous call was still in progress. This commit updates the tour to explicitly wait for the async call to complete before continuing, by adding a delay step after clicking the order button. This prevents race conditions during the test. --- Runbot Error: https://runbot.odoo.com/odoo/runbot.build.error/181846 Forward-Port-Of: odoo/enterprise#121237 Forward-Port-Of: odoo/enterprise#110909
This update addresses a test failure related to database constraints within the Odoo email alias functionality. A recent database update triggered a different error type (RESTRICT_VIOLATION) instead of the previously reported FOREIGN_KEY_VIOLATION. The test has been updated to handle this new error, ensuring consistent test results with PostgreSQL 18.
Original PR description
This commit is kind of a follow up of
odoo/odoo@39cd4ea856fe00f5674f8c44b2b66cbf2705426d (in 18.0).
In a nutshell, following a standard-compliance fix (postgres/postgres@086c84b) has led to `RESTRICT_VIOLATION` being emitted in cases which formerly emitted `FOREIGN_KEY_VIOLATION`. One such case is specifically being tested for by `test_alias_domain_setup`, leading to this test failing systematically when running pg18:
psycopg2.errors.RestrictViolation: update or delete on table "mail_alias_domain" violates RESTRICT setting of foreign key constraint "mail_alias_alias_domain_id_fkey" on table "mail_alias"
DETAIL: Key (id)=(191) is referenced from table "mail_alias".
This commit updates the test to use the more generic `IntegrityError` as it's probably more than sufficient for our purposes.
Forward-Port-Of: odoo/odoo#271403
Forward-Port-Of: odoo/odoo#271302This update optimizes how Odoo processes QWeb templates, specifically when handling large amounts of text. The change reverts a recent Markupsafe update that introduced a slower processing method. The result is a faster and more efficient compilation of templates, improving overall Odoo performance.
Original PR description
Starting version 2.1.4 of markupsafe, they decided to adapt the `striptags` function to use in-python-loops instead of the original implemenation that relied on pre-compiled regex. A problem has been…
Starting version 2.1.4 of markupsafe, they decided to adapt the `striptags` function to use in-python-loops instead of the original implemenation that relied on pre-compiled regex. A problem has been spotted with qweb templates that used `striptags` with large inputs, which led to the investigation of this function and it was found that the old implementation is actually faster. In fact, the PR introducing this change in Markupsafe, made these claims with no benchmarks whatsoever: https://github.com/pallets/markupsafe/pull/413/changes The new implementation of markupsafe is O(N x M), where n is the number of tags and M being the length of the input string. The old regex approach does a single c-level scan to check the existence of the regex which is performing much better for varying input size. The benchmark cases below are in the form `<case_description>_<number_of_tags>`. We can see that in the cases where the current implementation is slightly faster is when there are no tags in the input which can be explained by the fact that the while loops will simply exit early. The time lost in the regex implementation is likely due to the deeper call stack to scan for the regex. Apart from that, in the case of an unclosed tag, the regex implementation is also slower because it still needs to scan the entire line. However, in that case the time taken is a handful of milliseconds, so it's not really a performance regression there either. Apart from that, the old implementation is consistently much more performant, for both small and large inputs. Benchmarks: | Case | Regex ms | Current ms | Speedup | |----------------------------------------------|----------|------------|---------| | plain_text_50k_words | 3.020 | 2.627 | 0.9x ← current_implementation | | unclosed_tag_then_50kb_text | 0.367 | 0.032 | 0.1x ← current_implementation | | unclosed_tag_then_500kb_text | 3.787 | 0.273 | 0.1x ← current_implementation | | multiple_unclosed_open_tags_then_50kb_text | 18.912 | 0.371 | 0.0x ← current_implementation | | multiple_unclosed_open_tags_then_500kb_text | 189.007 | 8.209 | 0.0x ← current_implementation | | unclosed_comment_then_500kb_text | 7.276 | 0.412 | 0.1x ← current_implementation | | 5k_small_tags | 0.986 | 22.096 | 22.4x ← regex_old_implementation | | 20k_small_tags | 4.125 | 492.186 | 119.3x ← regex_old_implementation | | 50k_small_tags | 12.658 | 5499.602 | 434.5x ← regex_old_implementation | | 1k_nested_divs | 0.155 | 0.923 | 5.9x ← regex_old_implementation | | 10k_nested_divs | 1.648 | 48.410 | 29.4x ← regex_old_implementation | | 2k_tags_with_attrs | 1.058 | 12.013 | 11.4x ← regex_old_implementation | | 20k_tags_with_attrs | 13.185 | 6068.755 | 460.3x ← regex_old_implementation | | 2k_multiline_tags | 0.815 | 10.819 | 13.3x ← regex_old_implementation | | 20k_multiline_tags | 8.939 | 4231.768 | 473.4x ← regex_old_implementation | | 1k_comments | 0.222 | 1.292 | 5.8x ← regex_old_implementation | | 1k_comments_hiding_tags | 0.163 | 1.121 | 6.9x ← regex_old_implementation | | 2k_mixed | 0.278 | 2.392 | 8.6x ← regex_old_implementation | | 10k_mixed | 1.400 | 50.959 | 36.4x ← regex_old_implementation | | qweb_shop_200_products | 0.907 | 7.880 | 8.7x ← regex_old_implementation | | qweb_shop_1000_products | 4.296 | 194.647 | 45.3x ← regex_old_implementation | This PR is needed because requirements.txt in Odoo specifies the following dependency: `MarkupSafe==2.1.5 ; python_version >= '3.12' \# (Noble)` This means that all versions running Ubuntu Noble, will be having the same issue introduced in version 2.1.4 of markupsafe. opw-5999688 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268580 Forward-Port-Of: odoo/odoo#257889
This update resolves an issue where product searches weren't working correctly when using the autocomplete feature. The fix bypasses a search optimization that prevented finding products based on barcode when the name didn't exactly match. This ensures accurate product results are displayed when searching by barcode or name.
Original PR description
Steps: - Create a product with a barcode "12345" - Create a sale order - Add a product - search product with name "12345" without copy/pasting - no result - try with copy/pasting - 1 result The problem is due to the fact that there is an optimization in Many2XAutocomplete.search which means that if no results are found for “1234,” it will not search for “12345.” However, product override name_search to returns a product only when the name is exactly equal to its barcode (`=` and not `ilike`), which does not work at all with search optimization. Since: https://github.com/odoo/odoo/pull/228035 opw-5908011 Forward-Port-Of: odoo/odoo#248583 Forward-Port-Of: odoo/odoo#247978
This update resolves a bug that prevented users from sorting tasks by their planned dates. The fix adds a necessary configuration to correctly retrieve sort order information, ensuring accurate task sorting within the project portal. This improves the user experience for managing tasks.
Original PR description
Currently, an error occurs when a user sorts tasks by Planned Date. **Steps to reproduce:** - Install the `project_enterprise` module with demo data. - Go to Projects in the portal (`/my/projects`),…
Currently, an error occurs when a user sorts tasks by Planned Date. **Steps to reproduce:** - Install the `project_enterprise` module with demo data. - Go to Projects in the portal (`/my/projects`), open any `project`, and sort the tasks by `Planned Date`. KeyError: 'order' After a [recent change], the sort order is retrieved from searchbar sortings. When sorting by Planned Date, it attempts to access the order key from the corresponding sorting configuration [1]. However, the planned_date_begin entry does not define an order key [2], which raises error when it tries to access order. This commit ensures that the order key is added with its value for planned_date_begin in searchbar sorting. [recent change]: https://github.com/odoo/odoo/commit/8be5dacf9fbfe8c23b04c876994bea2ce7cbb89a [1]: https://github.com/odoo/odoo/blob/2ae9b57b86cd0bc4816ff8ec207564631baa8ad6/addons/project/controllers/portal.py#L424 [2]- https://github.com/odoo/enterprise/blob/9dd3a9b2c09a6d23a3f71d3e531edd6d78b30277/project_enterprise/controllers/portal.py#L8-L11 sentry-7556050938 Forward-Port-Of: odoo/enterprise#121141
This update resolves a problem where emojis, such as firefighter emojis, were being displayed incorrectly due to how they were encoded. The fix backports a more robust regex pattern from a previous version of Odoo to correctly handle these variations in emoji formatting, ensuring consistent display.
Original PR description
Bug === Some emoji like `👨🚒` are separated, because they are built using `👨 + Emoji_Modifier + 🚒` (`\uFE0F` can also be used to get the variant of the emoji). Adapt the regex to take into account those Unicode variations. Task-5491124 Forward-Port-Of: odoo/odoo#271373 Forward-Port-Of: odoo/odoo#269719
This update resolves an issue where disconnecting and reconnecting serial devices caused temporary disruptions in Odoo's device discovery process. The fix ensures that stale connections are properly closed, preventing deadlocks and allowing devices to reconnect smoothly. This improves the reliability of the IoT device integration.
Original PR description
Quick disconnects/reconnects of serial devices crash the serial driver thread, leaving "ghost" processes that cause deadlocks. It's way faster than the main 3s discovery loop, leading to the interface not seeing the device left then came back. This fix adds a health check to SerialInterface.get_devices(): if a driver thread is dead, it is excluded from the discovery list. This triggers Odoo's native removal flow to cleanly shut down the stale connection, allowing the device to auto-recover on the next poll cycle. opw-6201161, opw-6122057 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#271326
This update adds a new setting to our spreadsheet tests that allows us to bypass waiting for data to fully load. Previously, tests would fail if the spreadsheet data wasn't immediately available. This change ensures tests run reliably and accurately reflect the spreadsheet's behavior, especially when data is being prepared.
Original PR description
Added the parameter `skipWaitForDataLoaded` to `createSpreadsheetWithList` to test what happens when the list is not ready yet. Task: [6289944](https://www.odoo.com/odoo/2328/tasks/6289944) 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#271144 Forward-Port-Of: odoo/odoo#269096
This update resolves an issue where tooltips in the list autofill feature were displaying error messages instead of the correct information. The fix ensures that tooltips accurately reflect the list's data when it's ready, improving the user experience. This was part of a larger effort to enhance the reliability of the Odoo Enterprise application.
Original PR description
The getter `getTooltipListFormula` would return the result of `getListHeaderValue` as the content of the tooltip, but this returned a loading error instead of a string if the list was not ready yet. Task: [6289944](https://www.odoo.com/web#id=6289944&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#121228 Forward-Port-Of: odoo/enterprise#119876
This update corrects a display issue in the rental product configurator, ensuring the rental price is correctly formatted with a slash separating it from the rental duration. Previously, the price and duration were shown without this crucial separator, leading to an unclear presentation. This fix improves the user experience and accuracy of rental product information.
Original PR description
Steps to produce: --- - Install the `Rental and eCommerce `modules. - Create a rental product and configure a rental price for it. - Add an optional product from the Sales tab. - Publish the product…
Steps to produce: --- - Install the `Rental and eCommerce `modules. - Create a rental product and configure a rental price for it. - Add an optional product from the Sales tab. - Publish the product on the website. - Open the product page on the website and click` Add to Cart`. Issue: --- - In the product configurator, the rental price is displayed without the `/` separator between the price and the rental duration period. Cause: --- - The string used to generate the rental duration label does not include the `/` separator. Fix: --- - Add the missing `/` separator to the rental duration label so that rental prices are displayed correctly. Before: --- <img width="974" height="185" alt="image" src="https://github.com/user-attachments/assets/64a88a60-bcc0-4657-97fd-584da57d0aff" /> After: --- <img width="967" height="188" alt="image" src="https://github.com/user-attachments/assets/b4d50019-1db4-4817-a8ce-446cc3c55df4" /> opw-6293015 Forward-Port-Of: odoo/enterprise#121246 Forward-Port-Of: odoo/enterprise#120223
This update fixes a visual inconsistency within the Odoo system. The flag image for Mauritania was incorrectly displayed. This change ensures accurate representation of countries within the system, maintaining a professional and reliable user experience.
Original PR description
[task-6320443](https://www.odoo.com/odoo/project.task/6320443) Forward-Port-Of: odoo/odoo#271488
24 changes
Enhancements to existing features
This update changes the unit of measure for the 'Flour' product in the Point of Sale module to kilograms. This adjustment is necessary to properly configure product weighing, particularly for compliance with the l10n_eu_iot_scale certification, ensuring accurate product tracking and reporting.
Original PR description
This small PR sets the "Flour" product's units of measure to kilograms. This helps to configure the weighing of the product, especially for the l10n_eu_iot_scale cert Forward-Port-Of: odoo/odoo#270508
This update ensures that new analytic plans are correctly reflected in the Odoo system after creation. It mirrors a recent change for companies, streamlining the process and preventing data inconsistencies. The change updates views to include new analytic plan fields, enhancing usability.
Original PR description
The views need to include the newly created field on `account.analytic.line` and other models inheriting `analytic.plan.fields.mixin`. This is based on the same service for `res.company`: `reloadCompany` Forward-Port-Of: odoo/odoo#270789
Resolved issues and error corrections
This update fixes an issue where scanning an unknown barcode in the POS system didn't automatically open the product creation form. The fix removes a redundant check for API keys, ensuring the form opens correctly regardless of whether a barcode lookup key is configured. This improves the user experience by streamlining product creation through barcode scanning.
Original PR description
When scanning an unknown barcode in POS, the product creation form was never opened because `barcode_lookup()` was called with no barcode as an implicit API key check. Commit 0c8019a4aa7 ([FIX] product_barcodelookup: avoid crash on invalid image URLs) standardized `barcode_lookup_request()` to always
return a `requests.Response` object, removing the `{'authenticated': True}` dict it previously returned for HTTP 404 responses. As a result the JS check `response?.authenticated` was always falsy and the form never opened.
Fix: remove the API key check entirely. `allowProductCreation()` already gates on the user having product create rights, which is the only condition that matters. If a Barcode Lookup API key is configured the `_onchange_barcode` on the form will auto-fill product data; if not, the user can fill it in manually. Either way the form is always usable.
opw-6295221
Forward-Port-Of: odoo/enterprise#120256This update resolves a problem where Point of Sale order sequences with dynamic prefixes (like years) weren't generating correctly. The fix ensures that sequence numbers are properly formatted as integers, preventing errors during order processing. This improves the reliability of POS order creation.
Original PR description
**Steps to reproduce:** - Create a database in version 19.0 and install Point of Sale. - Create a sequence with a prefix or suffix using placeholders like %(year)s. - Assign this sequence to a POS…
**Steps to reproduce:** - Create a database in version 19.0 and install Point of Sale. - Create a sequence with a prefix or suffix using placeholders like %(year)s. - Assign this sequence to a POS configuration. - Create a new POS order and confirm payment. **Issue:** - POS order `sequence_number` must be an integer, but when using dynamic prefixes/suffixes (e.g., %(year)s), `_next()` returns values like `POS/2026/` while the configured prefix remains `%(year)s`. - Due to this mismatch, [`_update_sequence_number`](https://github.com/odoo/odoo/blob/ab6cfabf0086afced2d035eb2207a0acab655540/addons/point_of_sale/models/pos_order.py#L561) fails to correctly remove the prefix/suffix. - The root cause is that placeholders such as `%(year)s` are not interpolated before applying prefix/suffix removal logic, causing string mismatch and failure in extracting the numeric part.<img width="1920" height="959" alt="image" src="https://github.com/user-attachments/assets/d331fb7a-3c0f-4e34-a33e-6ec906be77bb" /> **Solution:** - Interpolate prefix and suffix before removing them from the generated sequence. - Convert placeholders like %(year)s into actual values (e.g., 2026). - Then apply prefix/suffix removal logic. opw-6150204 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262427
This update fixes an issue where clicking the 'Documents' button on an employee form would open a new browser tab. The change adds a setting to the button's action, ensuring it opens directly within the existing employee form, improving user experience and workflow efficiency.
Original PR description
Issue: ---------------------------------------- When on an employee form, clicking the "Documents" button opens a new page instead of staying on the same. Steps to reproduce: ---------------------------------------- - Install `documents_hr` - Go on an employee form - Click the "Documents" button - It opens a new page Cause: ---------------------------------------- The `'ir.actions.act_url'` opens a new page by default. Solution: ---------------------------------------- Add `'target': 'self',` to make it open the URL in the same page. opw-6284677 Forward-Port-Of: odoo/enterprise#120285
This update resolves a problem in the SendCloud test suite caused by recent changes to the SendCloud integration. The tests were failing because they continued to use an outdated method for accessing the SendCloud API. This change ensures the tests accurately reflect the current SendCloud implementation.
Original PR description
Issue Before This Commit: ---------------------------- The delivery_sendcloud test suite relied on `delivery.carrier._get_sendcloud()` to access the SendCloud API helper. After recent changes in the SendCloud integration, this method is no longer available, causing multiple tests to fail when invoking SendCloud services during setup and execution. Cause of the issue: ------------------- After PR odoo/enterprise#96749, the SendCloud integration was refactored to require usage through a context manager. As part of this change, _get_sendcloud() was removed, but the existing test cases were still relying on it, causing failures. After this commit: ------------------ All SendCloud-related test cases are updated to explicitly instantiate the SendCloud client and use it within a context manager, mirroring the new lifecycle requirements introduced by the refactor. This aligns the test suite with the current SendCloud implementation and fixes the failing tests.
This update removes an outdated method for retrieving system parameters in the l10n_fr_pdp module. The change utilizes a more reliable approach (get_str) for parameter retrieval, enhancing the module's stability and performance. This is a routine maintenance fix.
Original PR description
This commit will remove the use of the get_param for system parameter and instead use get_str no task id --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where self-invoicing URLs on receipts were incorrectly formatted. Now, the correct URLs are generated and displayed, ensuring accurate invoicing data is sent to the appropriate systems. This improves the reliability of self-ordering transactions.
Original PR description
Before this commit: ------------------------- - The self-invoicing URL on the receipt was displayed as `undefined/pos/ticket`. After this commit: ------------------------- - The self-invoicing URL is now generated correctly and displayed properly on the receipt. Task-6271261 Forward-Port-Of: odoo/odoo#270052
This update fixes a display issue where rental prices weren't correctly formatted with a slash separating the price and duration. The fix ensures rental prices are shown clearly on the website, improving the user experience for customers renting products. This change was triggered by a bug in how the rental duration label was generated.
Original PR description
Steps to produce: --- - Install the `Rental and eCommerce `modules. - Create a rental product and configure a rental price for it. - Add an optional product from the Sales tab. - Publish the product…
Steps to produce: --- - Install the `Rental and eCommerce `modules. - Create a rental product and configure a rental price for it. - Add an optional product from the Sales tab. - Publish the product on the website. - Open the product page on the website and click` Add to Cart`. Issue: --- - In the product configurator, the rental price is displayed without the `/` separator between the price and the rental duration period. Cause: --- - The string used to generate the rental duration label does not include the `/` separator. Fix: --- - Add the missing `/` separator to the rental duration label so that rental prices are displayed correctly. Before: --- <img width="974" height="185" alt="image" src="https://github.com/user-attachments/assets/64a88a60-bcc0-4657-97fd-584da57d0aff" /> After: --- <img width="967" height="188" alt="image" src="https://github.com/user-attachments/assets/b4d50019-1db4-4817-a8ce-446cc3c55df4" /> opw-6293015 Forward-Port-Of: odoo/enterprise#120223
This update simplifies the process of updating the Account EDI UBL Cii reporting module. Previously, a fragile inheritance method caused potential conflicts with other Odoo templates. This change creates a more robust system for identifying the necessary updates, reducing the risk of issues and making future improvements smoother.
Original PR description
**Description of the issue/feature this PR addresses:** As the new `xpath` is expecting a very specific type of `t-if` which is possibly changed in other templates of third parties or even Odoo itself which do not depend on this module, we take a more robust approach to identify the block **Current behavior before PR:** Issues with inherited views outside the dependency tree (because of primary=True) **Desired behavior after PR is merged:** Less friction and smoother identifier of the needed diff Info: @wt-io-it --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270605
This update resolves a stability issue in the point-of-sale tour. Previously, the tour could fail due to asynchronous order processing, leading to duplicate requests. By adding a delay to ensure requests are fully completed, this fix prevents race conditions and improves the reliability of the tour.
Original PR description
The tour could fail because `sendOrderInPreparationUpdateLastChange` is asynchronous when sending the order to the kitchen. The test was continuing to the next steps before the request was fully resolved, which could lead to sending the order again while the previous call was still in progress. This commit updates the tour to explicitly wait for the async call to complete before continuing, by adding a delay step after clicking the order button. This prevents race conditions during the test. --- Runbot Error: https://runbot.odoo.com/odoo/runbot.build.error/181846 Forward-Port-Of: odoo/enterprise#121237 Forward-Port-Of: odoo/enterprise#110909
This update addresses a test failure related to database constraints in the email functionality. A recent database upgrade triggered a different error (RESTRICT_VIOLATION) instead of the previous FOREIGN_KEY_VIOLATION. The test has been updated to handle this new error type, ensuring continued stability.
Original PR description
This commit is kind of a follow up of
odoo/odoo@39cd4ea856fe00f5674f8c44b2b66cbf2705426d (in 18.0).
In a nutshell, following a standard-compliance fix (postgres/postgres@086c84b) has led to `RESTRICT_VIOLATION` being emitted in cases which formerly emitted `FOREIGN_KEY_VIOLATION`. One such case is specifically being tested for by `test_alias_domain_setup`, leading to this test failing systematically when running pg18:
psycopg2.errors.RestrictViolation: update or delete on table "mail_alias_domain" violates RESTRICT setting of foreign key constraint "mail_alias_alias_domain_id_fkey" on table "mail_alias"
DETAIL: Key (id)=(191) is referenced from table "mail_alias".
This commit updates the test to use the more generic `IntegrityError` as it's probably more than sufficient for our purposes.
Forward-Port-Of: odoo/odoo#271403
Forward-Port-Of: odoo/odoo#271302This update fixes an issue where emojis, particularly complex ones like family emojis, were being displayed incorrectly due to how they were encoded. The fix backports a previous solution from version 19.4 to ensure all emojis are correctly rendered, improving the overall email experience for users. This resolves a visual inconsistency.
Original PR description
Bug === Some emoji like `👨🚒` are separated, because they are built using `👨 + Emoji_Modifier + 🚒` (`\uFE0F` can also be used to get the variant of the emoji). Adapt the regex to take into account those Unicode variations. Task-5491124 Forward-Port-Of: odoo/odoo#271373 Forward-Port-Of: odoo/odoo#269719
This update removes an unnecessary 'external' tag from a test class within the SendCloud delivery module. Previously, errors were only detected during nightly builds, not by the standard Continuous Integration (CI) process. Fixing this tag requires updating some tests to ensure accurate and consistent error detection.
Original PR description
Test class was tagged as external although calls are mocked. This means errors were only caught in nightly and not by CI. Removing the tag requires fixing some of the tests. For `test_multicollo`, we send the average weight of packages instead of the total since 97f82442c9fee7dcb3e8c5e9bacddcd6bb864e11. Forward-Port-Of: odoo/enterprise#120902 Forward-Port-Of: odoo/enterprise#111660
This update fixes a minor issue where changes to many-to-many tag fields didn't automatically update related data in the main form view. Now, when users edit tags within a form dialog, the system correctly recomputes dependent fields, ensuring data consistency and a smoother user experience. This improves the reliability of form calculations.
Original PR description
Since [1], one can setup many2many_tags fields to allow editing tags in a form view dialog when clicking on them. However, it may happen that the main record/form view contains computed fields that depend on fields of the edited tag, and that must be recomputed when the user saves the dialog. This works fine of many2one fields, as we trigger an onchange after the save. However, before this commit, we did not trigger the onchange in the m2m case. Now we do. [1] https://github.com/odoo/odoo/pull/234280 Issue reported in the Framework JS discord channel. Issue spotted in task~6088824 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 bug in the MZ demo company setup. Previously, the demo company lacked a valid NUIT number, causing issues with testing and compliance. This fix ensures the demo company now adheres to the required NUIT number format, improving the accuracy and reliability of the MZ localization demo.
Original PR description
Newer versions of stdnum (2.2) also test the number for MZ We did not have a valid NUIT number in the MZ demo company. Runbot error: https://runbot.odoo.com/runbot/build/114118067 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#271398 Forward-Port-Of: odoo/odoo#271299
This update resolves an issue where disconnecting and reconnecting serial devices caused temporary disruptions in Odoo's device discovery process. The fix ensures Odoo properly handles device connections and disconnections, preventing 'ghost' processes and improving the reliability of serial device integration. This enhances the overall stability of the system.
Original PR description
Quick disconnects/reconnects of serial devices crash the serial driver thread, leaving "ghost" processes that cause deadlocks. It's way faster than the main 3s discovery loop, leading to the interface not seeing the device left then came back. This fix adds a health check to SerialInterface.get_devices(): if a driver thread is dead, it is excluded from the discovery list. This triggers Odoo's native removal flow to cleanly shut down the stale connection, allowing the device to auto-recover on the next poll cycle. opw-6201161, opw-6122057 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#271326
This update resolves an issue where event titles were being saved as "(no title)" when users quickly saved events using the Alt+C shortcut. The fix utilizes a framework mechanism to ensure all field data is committed at save time, preventing the default blank title from being applied.
Original PR description
When creating an event using the quick create form from the calendar view if the user saves the record while the title is still being edited (using alt+c) the record will be saved with the default title: "(no title)" The code currently relies on the record data being up to date by the time onRecordSave is reached. However in the case of a text field, it is only saved when blurred. While there is a mechanism to blur the field when saving using a hotkey, it is completely asynchronous from the save logic of the form. To ensure all fields have comitted their data at save time, the framework has a mechanism to "request changes" which notifies all fields to update the record with their latest value and waits for them to do so. We can simply reuse this mechanism to ensure the data is up to date at recordSave time already, as we don't expect fields to have any changes after it. task-6321702
This update adds a new setting to our spreadsheet tests that allows them to bypass waiting for data to fully load. Previously, tests were blocked if the spreadsheet data wasn't immediately available, which could cause delays. Now, tests can be run faster and more reliably by skipping this data loading check.
Original PR description
Added the parameter `skipWaitForDataLoaded` to `createSpreadsheetWithList` to test what happens when the list is not ready yet. Task: [6289944](https://www.odoo.com/odoo/2328/tasks/6289944) 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#271144 Forward-Port-Of: odoo/odoo#269096
This update resolves an issue where the spreadsheet edition's autofill tooltips displayed error messages instead of the correct information when the list data wasn't immediately available. The fix ensures tooltips show the intended data, improving the user experience and data accuracy within the spreadsheet feature. This was part of a larger effort to improve stability and reliability.
Original PR description
The getter `getTooltipListFormula` would return the result of `getListHeaderValue` as the content of the tooltip, but this returned a loading error instead of a string if the list was not ready yet. Task: [6289944](https://www.odoo.com/web#id=6289944&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#121228 Forward-Port-Of: odoo/enterprise#119876
This update fixes an issue where inserting mentions in the email composer caused text editing to behave unexpectedly. Specifically, it adds a special character to ensure the cursor moves to the correct end of the line when typing, improving the user's ability to format emails. This ensures a smoother and more accurate email composition experience.
Original PR description
### Purpose of this PR: - Inserting a mention in the composer results in a paragraph ending with a bare `<a>` element and no trailing text node. This causes the browser to mishandle the End key, moving the caret to the start of the next paragraph instead of the end of the current line. - Fix by appending a \uFEFF (zero-width no-break space) text node. task-6295924 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#271160 Forward-Port-Of: odoo/odoo#269699
This update fixes a minor visual issue where the flag for Mauritania was incorrectly displayed in the system. The change ensures accurate representation of the country flag, maintaining a consistent and professional user experience. This is a simple correction with no impact on core functionality.
Original PR description
[task-6320443](https://www.odoo.com/odoo/project.task/6320443) Forward-Port-Of: odoo/odoo#271488
This update ensures Odoo's server processes efficiently load necessary data, leading to faster response times. Previously, the server wasn't properly preparing data for use, causing delays. This fix optimizes the server's startup and performance.
Original PR description
The code to set the registry size was moved to `preload_registries`. The gevent server does not preload registries and thus does not set the registries size. Instead of moving the code again, we can preload registries in the gevent server. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#271640
This update ensures Odoo generates PDF invoices that fully comply with ZUGFeRD standards, a crucial requirement for electronic invoice processing. Specifically, the PDF files now correctly identify the relationship between the underlying XML data and the visual invoice, addressing a technical detail related to invoice formatting. This update also updates the XML filename to align with current ZUGFeRD specifications.
Original PR description
Adapt `add_attachment` to allow setting the "AFRelationship" tag on the PDF filespec object, In compliance with Factur-X/ZUGFeRD specs that require the AFRelationship tag in the PDF filespec object to reflect the relationship between the embedded XML and the visual PDF content: - /Data: the visual PDF contains more invoicing data than the XML. - /Alternative: the XML and the PDF are two equivalent representations of the same invoice. Additionally, update the embedded XML filename from `zugferd-invoice.xml` to `factur-x.xml`. The former is marked as deprecated since ZUGFeRD 2.0 Ref: sections 6.2.2, 6.3.1, 6.3.2 of the ZUGFeRD 2.4 specification: https://www.ferd-net.de/en/downloads/publications/details/zugferd-24-english opw-6252082 Forward-Port-Of: odoo/odoo#271406 Forward-Port-Of: odoo/odoo#269117
1 change
Resolved issues and error corrections
This update prevents an error that occurred when the 'Company Car (To order)' option was enabled in the salary configurator. The fix ensures that a car model is selected before attempting to extract data, resolving a technical issue that previously blocked users from configuring this option. This ensures the salary configurator functions correctly for all users.
Original PR description
## Steps to Reproduce: (v18.0) 1. Install `l10n_be_hr_contract_salary` without demo data. 2. Create a Belgian company and switch to it. 3. Create an employee. 4. Create a contract for the employee. 5. Click Generate Offer and open the Salary Configurator. 6. Enable the 'Company Car (To order)' option. ## Error: `AttributeError: 'NoneType' object has no attribute 'split'` ## Cause: When the salary configurator is used without demo data, no car model is selected. The method assumes that select_wishlist_car_total_depreciated_cost always contains a value and directly calls split() on it, resulting in an error, when the field is None. ## Fix: This commit checks that both the company car option is enabled and a car model has been selected before trying to extract the model ID. sentry-7554712017 Forward-Port-Of: odoo/enterprise#121138
6 changes
Resolved issues and error corrections
This update prevents an error that occurred when the 'Company Car (To order)' option was enabled in the salary configurator. The fix ensures that a car model is selected before attempting to process the option, resolving a previous issue that caused the system to crash. This ensures the company car functionality works correctly for all users.
Original PR description
## Steps to Reproduce: 1. Install `l10n_be_hr_contract_salary` without demo data. 2. Create a Belgian company and switch to it. 3. Create an employee. 4. Create a contract for the employee. 5. Click Generate Offer and open the Salary Configurator. 6. Enable the 'Company Car (To order)' option. ## Error: `AttributeError: 'NoneType' object has no attribute 'split'` ## Cause: When the salary configurator is used without demo data, no car model is selected. The method assumes that select_wishlist_car_total_depreciated_cost always contains a value and directly calls split() on it, resulting in an error, when the field is None. ## Fix: This commit checks that both the company car option is enabled and a car model has been selected before trying to extract the model ID. sentry-7554712017 Forward-Port-Of: odoo/enterprise#121138
This update ensures that partner data created in the POS system is automatically updated with the latest information from the DIAN government service after a refresh. Previously, changes weren't immediately reflected, requiring manual intervention. This fix streamlines the process and maintains accurate partner records.
Original PR description
Step to reproduce: - install l10n_co_dian and pos - open pos and click on create a new partner from partner list - enter name ex. "temp", identification number, click on form - notice a `refresh…
Step to reproduce: - install l10n_co_dian and pos - open pos and click on create a new partner from partner list - enter name ex. "temp", identification number, click on form - notice a `refresh icon` is visible: click on it. Observation: - the dialog is closed and partner is selected with "temp" name Expected: - with valid government credentials and a valid identification number, the refresh action should also update the partner data on the POS side Cause: - the refresh button triggers the `button_l10n_co_dian_refresh_data` action, which fetches the legal name and email from the government service - although the backend record is correctly updated, the new values are not immediately synchronized with the POS - when the refresh button is clicked, editPartner() first triggers `web_save` using the temporary "temp" name and immediately reads the partner data afterward - the refresh action executes later and updates the contact with the fetched legal information, but the POS is not aware of these subsequent changes Fix: - read the data again if there is any update caused by this action. - this is done by overriding `afterExecuteActionButton` of FormController class opw-6198035 Forward-Port-Of: odoo/enterprise#117527
This update simplifies the process of updating the Account EDI UBL Cii reporting module. Previously, a fragile inheritance method caused potential conflicts with other Odoo templates. This change removes that complexity, making updates smoother and reducing the risk of issues.
Original PR description
**Description of the issue/feature this PR addresses:** As the new `xpath` is expecting a very specific type of `t-if` which is possibly changed in other templates of third parties or even Odoo itself which do not depend on this module, we take a more robust approach to identify the block **Current behavior before PR:** Issues with inherited views outside the dependency tree (because of primary=True) **Desired behavior after PR is merged:** Less friction and smoother identifier of the needed diff Info: @wt-io-it --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270605
This update fixes a display issue where negative combo extra prices were incorrectly shown with a '+' sign or incorrect currency formatting. The change ensures that negative extra prices are consistently and accurately displayed, improving the clarity and accuracy of pricing information in the POS and Kiosk interfaces.
Original PR description
When a combo choice has a negative extra price, the POS and Kiosk would incorrectly display a '+' sign in front of the negative price (e.g., '+ -0,30 €'). Additionally, depending on the currency formatting rules, a negative price might be displayed with the minus sign after the currency symbol (e.g., '$ -1.00'). This commit fixes this by conditionally displaying the '+' sign only when the extra price is strictly positive, and handling the minus sign manually to ensure it is always prepended correctly (e.g. '- $ 1.00'). task-id: 6226406 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268101 Forward-Port-Of: odoo/odoo#265210
This update corrects a missing valid NUIT number in the MZ demo company setup. The change ensures the demo company accurately reflects MZ tax requirements, preventing potential errors during testing and demonstration of the l10n_mz module. This resolves a Runbot error related to data validation.
Original PR description
Newer versions of stdnum (2.2) also test the number for MZ We did not have a valid NUIT number in the MZ demo company. Runbot error: https://runbot.odoo.com/runbot/build/114118067 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#271398 Forward-Port-Of: odoo/odoo#271299
This update resolves an issue where outdated map cluster bubbles remained visible after zooming or panning on the customer map. The fix corrects a technical error that prevented the removal of these icons, ensuring the map displays accurately and efficiently. This improves the user experience by eliminating visual clutter.
Original PR description
Steps to reproduce: =================== 1. Install website_customer, set a Google Maps API key and publish a few companies with coordinates 2. Open /customers 3. Open the map and zoom in a few times…
Steps to reproduce: =================== 1. Install website_customer, set a Google Maps API key and publish a few companies with coordinates 2. Open /customers 3. Open the map and zoom in a few times => stale blue cluster bubbles remain on the map Cause: ====== On the partner map, zooming or panning left old cluster bubbles behind: the blue count icons piled up and never disappeared, even at the closest zoom level. `ClusterIcon` is meant to be a google.maps.OverlayView. The bundled `markerclusterer.js` wires that up by copying every enumerable https://github.com/odoo/odoo/blob/aed1619c34b1f65bd9a3d155fe76a82d404ef5e7/addons/website_google_map/static/src/lib/markerclusterer.js#L213-L221 OverlayView.prototype member onto ClusterIcon.prototype. Google Maps now ships its own OverlayView.prototype.remove, and that copy overwrites ClusterIcon's own `remove()` with it, As a result, when a cluster icon is removed, `ClusterIcon.remove()` is never executed. Consequently, `ClusterIcon.prototype.onRemove()` is not triggered, the cluster icon's DOM element is never detached from the map, https://github.com/odoo/odoo/blob/aed1619c34b1f65bd9a3d155fe76a82d404ef5e7/addons/website_google_map/static/src/lib/markerclusterer.js#L1167 and stale cluster bubbles accumulate after every redraw, zoom, or pan operation. Solution: ========= Inherit from OverlayView through the prototype chain instead of copying it, so ClusterIcon's own remove() is kept and actually detaches the icon. opw-6128531 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270733
1 change
Resolved issues and error corrections
This update resolves an error that occurred when the 'Company Car (To order)' option was enabled in the salary configurator. The fix ensures that a car model is selected before attempting to extract data, preventing a system crash. This improvement ensures the company car functionality works reliably for all users.
Original PR description
## Steps to Reproduce: 1. Install `l10n_be_hr_contract_salary` without demo data. 2. Create a Belgian company and switch to it. 3. Create an employee. 4. Create a contract for the employee. 5. Click Generate Offer and open the Salary Configurator. 6. Enable the 'Company Car (To order)' option. ## Error: `AttributeError: 'NoneType' object has no attribute 'split'` ## Cause: When the salary configurator is used without demo data, no car model is selected. The method assumes that select_wishlist_car_total_depreciated_cost always contains a value and directly calls split() on it, resulting in an error, when the field is None. ## Fix: This commit checks that both the company car option is enabled and a car model has been selected before trying to extract the model ID. sentry-7554712017 Forward-Port-Of: odoo/enterprise#121138
1 change
Resolved issues and error corrections
This update resolves an issue where users could create private tasks without selecting a project, leading to errors. The change enforces the requirement of a project ID during task creation, ensuring tasks are properly associated and preventing errors. This improves data integrity and user experience.
Original PR description
Steps to reproduce: --------------------------------------- 1. Install the Timesheets. 2. Click on "Start" button in header. 3. In the timer component make project field empty. 4. Then click on "New" button in the dialog for tasks that open from the task. 5. Make the project field empty, then save it. Issue: ----------------------------------------------- - If the project field is empty, it will try to create a private task and then it will show an error. Cause: ----------------------------------------------- - The project_id field is currently not required. This needs to be changed to prevent private tasks from being created. Fix: --------------------------------------------------------------- - After this commit we are passing the context "time_task_creation" if it is true it will make the project_id field required. task-3552597
13 changes
Resolved issues and error corrections
This update fixes a confusing issue in the budget report where budget lines were labeled with repetitive names. The change now includes related analytic accounts in the display name, making budget lines much easier to distinguish and understand. This improves report readability and data analysis.
Original PR description
Budget report grouping by budget line displayed the budget name for every line, which made different lines indistinguishable and produced labels like "Budget 2026 x", "Budget 2026 x (2)", etc. Compute a more specific display name for budget lines by appending the analytic accounts concerned by the line to the budget name. Also expose Budget Line as a first-class group-by in the Budget Report search view and apply it by default when opening the report. task-6293065 Forward-Port-Of: odoo/enterprise#121204
This update automatically updates the map routes when a user changes their location. Previously, users had to manually refresh the map to see the correct routes. This improvement ensures a smoother and more accurate user experience when navigating maps within the Odoo Enterprise application.
Original PR description
In this commit, we ensure that the map is updated with the newly computed routes if the user position changes. Prior to this commit, the user had to manually trigger an update to correctly view the updated routes. Forward-Port-Of: odoo/enterprise#120966
This update resolves an issue where appointment filters were incorrectly persisting across different views (Kanban to Gantt). Now, filters are automatically cleared when switching views, ensuring accurate appointment display and preventing bookings from being hidden. This improves the user experience for managing appointments.
Original PR description
In this commit: - When switching from Kanban to Gantt view, the POS-specific filters `date_filter` and `hour_filter` (added by `PosAppointmentSearchFilter`) were persisting on the shared SearchModel, incorrectly hiding bookings. - Now these filters are removed when activating the Gantt view. - Clear these filters when changing views and add a tour test to cover the Kanban → Gantt navigation flow. Also extract common appointment view tour helpers for reuse. Task:6276594 Forward-Port-Of: odoo/enterprise#120368
This update resolves an issue where tours were behaving unpredictably. The team refined the triggers used in the tours to ensure they consistently activate when intended, leading to a smoother and more reliable user experience. This change focuses on internal improvements to the Odoo Enterprise application.
Original PR description
Fix undeterministic tours by making some triggers more precise in a few steps.
This update fixes an issue where scanning an unknown barcode in the Point of Sale (POS) system didn't automatically open the product creation form. The fix removes a redundant check for API keys, ensuring the form opens correctly regardless of whether a barcode lookup key is configured. Users can now consistently create products by scanning barcodes.
Original PR description
When scanning an unknown barcode in POS, the product creation form was never opened because `barcode_lookup()` was called with no barcode as an implicit API key check. Commit 0c8019a4aa7 ([FIX] product_barcodelookup: avoid crash on invalid image URLs) standardized `barcode_lookup_request()` to always
return a `requests.Response` object, removing the `{'authenticated': True}` dict it previously returned for HTTP 404 responses. As a result the JS check `response?.authenticated` was always falsy and the form never opened.
Fix: remove the API key check entirely. `allowProductCreation()` already gates on the user having product create rights, which is the only condition that matters. If a Barcode Lookup API key is configured the `_onchange_barcode` on the form will auto-fill product data; if not, the user can fill it in manually. Either way the form is always usable.
opw-6295221
Forward-Port-Of: odoo/enterprise#120256This update streamlines the automatic onboarding tours within several Odoo modules (Helpdesk, Planning, Sale, Web Studio, and Knowledge) by removing unnecessary formatting wrappers. This fix resolves validation errors and ensures a smoother, more reliable onboarding experience for new users. The change also adds specific validation rules for onboarding tours.
Original PR description
…ntent
Features or functions removed from Odoo
This update removes an outdated coding technique, `useLayoutEffect`, from the Web Studio module. This change is part of a larger effort to modernize the system and prepare for the upcoming OWL3 migration, ensuring a smoother and more efficient user experience.
Original PR description
Remove useLayoutEffect usage in web_studio utils.js as part of OWL3 migration.
This update removes a specific code snippet (useLayoutEffect) from the POS platform. This change was made to simplify testing and prepare for a future update using a more efficient API. The removal is expected to improve the overall performance and stability of the POS system.
Original PR description
Commented out useLayoutEffect calls to test coverage before replacement with OWL3 API.
This update removes a temporary code change in the Knowledge module's chatter integration. This was a preparatory step for a future update using the standard OWL3 API, streamlining the module's functionality. The removal has no impact on the core Knowledge features.
Original PR description
Remove useLayoutEffect from chatter_patch.js in knowledge module. This is a throwaway commit that will be replaced with the OWL3 native API implementation.
Code cleanup and technical improvements
This update removes the useLayoutEffect function from several Odoo modules to facilitate testing and ensure compatibility with the upcoming OWL3 replacement. This change is part of a controlled experiment to improve test coverage and prepare for a key system upgrade. It's a technical refactoring focused on testing.
Original PR description
Commenting out useLayoutEffect to check test coverage before applying OWL3 replacement.
This update removes an outdated technique used in the documents viewer to improve its performance and stability. The change is part of a larger effort to migrate to the OWL3 system, ensuring a smoother user experience for viewing documents. It addresses a technical issue related to document rendering.
Original PR description
Remove useLayoutEffect usage in documents_file_viewer.js as part of OWL3 migration. Effect bodies are commented out to detect test failures before applying the proper OWL3 replacement.
This update replaces an outdated technique with a modern one, ensuring the knowledge chat feature continues to function reliably. The change addresses a deprecation issue within Odoo's OWL3 framework, streamlining the code and maintaining core functionality without requiring additional configuration.
Original PR description
Replaced `useLayoutEffect` with `useEffect` (from `@odoo/owl`) because `useLayoutEffect` is deprecated in OWL3. `useEffect` in OWL3 has no dependency array — it auto-subscribes to any reactive values…
Replaced `useLayoutEffect` with `useEffect` (from `@odoo/owl`) because `useLayoutEffect` is deprecated in OWL3. `useEffect` in OWL3 has no dependency array — it auto-subscribes to any reactive values accessed inside the callback. The effect reads `this.props.threadId` and `this.state.thread` access-right fields directly, so OWL3 tracks those dependencies automatically. This restores the original logic: detecting thread changes, resolving the `chatterThreadReady` promise, and updating toolbar visibility without requiring an explicit dep list. The `useLayoutEffect` refactored in this PR has test coverage — below are some tests that failed when the effect was commented out, and are now passing: - TestHelpdeskKnowledgeCrossModuleFeatures.test_helpdesk_pick_file_as_attachment_from_knowledge - TestHelpdeskKnowledgeCrossModuleFeatures.test_helpdesk_pick_file_as_message_attachment_from_knowledge - TestHelpdeskKnowledgeCrossModuleFeatures.test_helpdesk_pick_template_as_message_from_knowledge see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2596754/build/114855772
This update removes a potentially performance-impacting technique (useLayoutEffect) from the VoIP search bar. This change improves the stability and responsiveness of the search functionality, aligning with our ongoing efforts to optimize Odoo's performance. The change also prepares for the integration of the OWL3 API.
Original PR description
Commented out useLayoutEffect usage to identify test coverage before applying OWL3 replacement.
4 changes
Resolved issues and error corrections
This update corrects a previous issue where warnings from the IoT device were incorrectly treated as errors. Now, when a warning code is received, a notification is displayed, providing clearer visibility into the status of transactions. This ensures more accurate and timely alerts for Point of Sale operations.
Original PR description
Before this commit, all errors returned by the iot after a call to the blackbox were considered as errors. Actually, the errors are only the ones that do not start with 0 (no error) or 1 (warning). This commit changes the behaviour when handling warning. We now show a notification. task-id: 5062178 Forward-Port-Of: odoo/enterprise#109251 Forward-Port-Of: odoo/enterprise#93896
This update resolves a bug where the 'Suggest Forecasted Demand' button disappeared in the Master Production Schedule when the 'Forecasted Stock' row was hidden. Previously, the button's visibility was dependent on the 'Forecasted Stock' row being enabled, causing confusion for users. Now, the button remains visible regardless of the 'Forecasted Stock' row's status.
Original PR description
Steps to reproduce:
1. Install Manufacturing.
2. Enable 'Master Production Schedule' in the Settings.
3. Go to [Manufacturing -> Planning -> Master Production Schedule].
4. Ensure 'Demand Forecast' and 'Forecasted Stock' rows are enabled from the dropdown.
5. Observe the edit pencil button next to 'Forecasted Demand' is visible.
6. Hide 'Forecasted Stock' using the rows filter dropdown.
Issue:
The edit pencil button ("Suggest Forecasted Demand") next to the 'Forecasted Demand' row disappears when the 'Forecasted Stock' row is hidden.
Expected behavior:
The edit pencil visibility should not be affected by the 'Forecasted Stock' row.
opw-6240596This update resolves several errors in the Blackbox test suite for the Belgian POS system, ensuring accurate order processing and synchronization. Specifically, the tests were failing due to incorrect data setup, mismatched expectations regarding printer types, and issues with cost center assignments. These fixes improve the reliability of the testing process and the overall functionality of the system.
Original PR description
1. The `m160` and `m161` mutations for `sign_copy_sale` test didn't set the `l10n_be_short_signature` field on the order, so the `TicketScreen.print` override would fail the check and the…
1. The `m160` and `m161` mutations for `sign_copy_sale` test didn't set the `l10n_be_short_signature` field on the order, so the `TicketScreen.print` override would fail the check and the `blackbox.signCopy` would not be called, causing the test to fail. 2. The `l10n_be_pos_blackbox_urban_piper` tests would crash on `undefined id` on the prep display path of `pos_enterprise`, where the data service will try to load up the prep display data, but it's not loaded in the test bundle. So I created a special setupEnv method for blackbox with urban piper which unpatches the prep display (same mechanism as pos_enterprise) 3. After removing the path for the tests, they would fail for the `expectGeneralProperties` step. By default it expects the `ticketMedium` to be `PAPER`, but there is no printer configured on the tests, so the actual medium is `DIGITAL`. 4. The tests expect the cost center to be `PLATFORM`. There was a patch on `InputGenerator`, which would return platform if the order has a `delivery_provider_id` set. But the patch never fired. I moved the patch directly on the order model, which is where the cost center value is computed. 5. The `test_l10n_be_pos_blackbox_sign_sale_backend_offline` test would endTour prematurely before the orders finished syncing, then check that all the orders are synced. I added an extra isSynced() step to ensure the orders are synced before ending the tour Task-[6320705](https://www.odoo.com/odoo/1737/tasks/6320705)
This update fixes an issue where non-recurring products were incorrectly included in recurring revenue (MRR/YRR) calculations within subscription reports. This ensured accurate reporting regardless of user-selected filters, preventing misleading revenue figures. The change improves the reliability of subscription performance data.
Original PR description
While investigating a support ticket, we noticed that in subscription reports, recurring revenue values (MRR and YRR) are implicitly calculated for non-recurring products. This doesn't cause a direct problem when using the default search domains applied in Subscription > Reporting > Subscription > Pivot view, because a "Recurring" filter is pre-applied. But if the end user removes said filter, they might accidentally fudge the MRR and YRR numbers because the non-recurring products will contributed to the relevant grouping sums. We fix this by adding a CASE clause to explicitly ignore non-recurring products when calculating the report field for MRR and YRR , i.e. only consider `t.recurring_invoice = TRUE`. OPW-6315091
6 changes
Resolved issues and error corrections
This update resolves an issue where a specific tax field was incorrectly appearing in Odoo instances not using the ID (Belarus) localization. The PR hides this field when it's not relevant to an ID company, ensuring data accuracy and a cleaner user experience. This prevents incorrect data from being displayed and simplifies the system for users.
Original PR description
Description of the issue/feature this PR addresses: this field pollutes into non-ID companies <img width="1905" height="810" alt="image" src="https://github.com/user-attachments/assets/65d80e78-addc-42d8-887f-67c1245b83dc" /> This PR hides it if it's not. --- I will check if other fields in this module also have similar issue
A recent test was failing due to a missing time zone setting in the testing environment. This update adds a fallback mechanism to ensure correct time zone handling, preventing the test failure. This resolves a technical issue impacting automated testing.
Original PR description
Currently the test test_holiday_in_week is failing in runbot tests This is due to the fact that during the tests the user tz in env is not set and hence it fails in the pytz library. Added a fallback to avoid the issue runbot issue opw-237623 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 pull request contains a simple test change to ensure the runbot is functioning correctly. The change involves a basic 'test' commit to verify the automated testing process. This is a low-risk update to maintain the stability of the Odoo build environment.
Original PR description
Just to test the runbot
This update resolves a technical issue that was causing performance problems when calculating accounting entries for French PDP (Point of Delivery) transactions. By removing unnecessary dependencies on company and partner information, the system now computes these entries more efficiently and reliably. This improves the overall stability and performance of the French PDP module.
Original PR description
- This removes dependency on account move fields to company : Build error 939448 - This removes dependency on account move fields to commercial_partner_id fields (avoid recompute all moves on partner info change)
This update fixes an error in the German accounting template (skr03) that was using incorrect account codes for cash discounts. The template has been updated with the correct codes, ensuring accurate financial reporting for German businesses using Odoo. This ensures compliance and proper accounting practices.
Original PR description
The default cash discout accounts referenced in the
German skr03 template used the wrong account codes.
The template has been updated with the right ones.
task-4915939
opw-4909059
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#271024This update fixes an error in the German (skr03) report template, ensuring it uses the correct account codes for cash discounts. This ensures accurate financial reporting and compliance for our German customers. The change was driven by a task and an operational priority.
Original PR description
The default cash discount accounts referenced in the German skr03 template used the wrong account codes. The template has been updated with the right ones. task-4915939 opw-4909059 Forward-Port-Of: odoo/enterprise#121180
5 changes
Resolved issues and error corrections
This update fixes a potential issue where WhatsApp messages were being created multiple times due to retry attempts from the WhatsApp Cloud API. The change adds a check to ensure a message isn't created twice, preventing data inconsistencies and improving the reliability of WhatsApp integrations. This ensures accurate message delivery and avoids potential errors.
Original PR description
When Meta's WhatsApp Cloud API does not receive a fast acknowledgment, it retries the webhook delivery with the same msg_uid. The handler was attempting to INSERT a duplicate whatsapp.message record, violating the whatsapp_message_unique_msg_uid constraint. Fix: Add an existence check on msg_uid before creating the record to make the handler idempotent under Meta's retry pattern. opw-6055334
This update fixes a performance issue within the Odoo gevent server by ensuring it properly initializes database registries. Previously, the server wasn't setting registry sizes, leading to slower performance. This change directly addresses a technical optimization for improved server responsiveness.
Original PR description
The code to set the registry size was moved to `preload_registries`. The gevent server does not preload registries and thus does not set the registries size. Instead of moving the code again, we can preload registries in the gevent server. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that partner bank accounts are usable within all child companies, even if the partner is associated with a parent company. Previously, this functionality was limited, causing potential disruptions for users managing multiple company branches. This change improves efficiency and simplifies bank account management across the Odoo system.
Original PR description
Even when a partner has the 'company_id' filled with the parent company, his bank account should be usable in the child companies. This was done in odoo/odoo#262173 from 19.2 but we need to backport it in stable task-6309694
This change resolves an issue where SVG images uploaded by users without write access to system views were not displayed correctly. The fix ensures that SVG attachments are properly processed, preventing a technical error and ensuring knowledge articles display images as intended. This improves the user experience for adding and managing content.
Original PR description
__Current behavior before commit:__ When an SVG attachment is uploaded by a user that has no `write` access to `ir.ui.view`, its mimetype is set to `text/plain`[1] for security reasons (prevent XSS…
__Current behavior before commit:__ When an SVG attachment is uploaded by a user that has no `write` access to `ir.ui.view`, its mimetype is set to `text/plain`[1] for security reasons (prevent XSS attacks). Now because the mimetype is not in `SUPPORTED_IMAGE_MIMETYPES`, `image_src` will be set to `False`[2]. This results in a traceback when the frontend tries to call `startsWith` on `image_src`[3]. __Description of the fix:__ Add the mimetypes in `attachmentsDomain` so it only fetches the images (like it's done in the [overridden getter][4]). __Steps to reproduce the issue on runbot:__ - Make sure Marc Demo has not write access to `ir.ui.view` (remove him from the group **Website / Editor and Designer**) - Log in with Demo - Go to a knowledge article - Add a cover and upload an SVG image -> the image is not displayed - Click on **Replace cover** - Search for the name of the previous SVG file - `TypeError: attachment.image_src.startsWith is not a function` [1]: https://github.com/odoo/odoo/blob/70e8ac9c48b4e90/odoo/addons/base/models/ir_attachment.py#L378 [2]: https://github.com/odoo/odoo/blob/70e8ac9c48b4e90/addons/web_editor/models/ir_attachment.py#L41 [3]: https://github.com/odoo/odoo/blob/70e8ac9c48b4e90/addons/web_editor/static/src/components/media_dialog/image_selector.js#L222 [4]: https://github.com/odoo/odoo/blob/70e8ac9c48b4e90/addons/web_editor/static/src/components/media_dialog/image_selector.js#L108 opw-4701372
This update resolves an issue where private tasks could be incorrectly designated as parent tasks. This change ensures that private tasks remain truly private and prevents confusion or unintended hierarchical relationships within project management. This improves data integrity and simplifies project organization.
Original PR description
In this commit, we ensure that private tasks can never be selected as parent tasks. task-5119141