Daily updates from Odoo
Monday, February 9, 2026
103 changes
26 changes
New functionality added to Odoo
This update adds Thai translations for key chart of accounts elements, including account names, descriptions, tax groups, and asset names. This improves the Odoo accounting system's usability and accuracy for Thai businesses, aligning with local tax regulations and reporting requirements.
Original PR description
The following files are updated with the respective Thai translations: - COA: name, description - Taxes: name - Tax Group: name - Asset model: name Task-5875167 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247116
Resolved issues and error corrections
This update resolves an issue where non-manager users were receiving an error message when opening validated time off records. The fix prevents unnecessary updates to a field that wasn't required, ensuring a smoother experience for all users. This change improves usability for employees accessing their time off details.
Original PR description
Steps to reproduce: ------------------- 1. Install `l10n_in` and `l10n_in_hr_holidays` 2. Switch to an Indian company 3. Create a user and related employee without Time Off rights 4. Log in with the…
Steps to reproduce: ------------------- 1. Install `l10n_in` and `l10n_in_hr_holidays` 2. Switch to an Indian company 3. Create a user and related employee without Time Off rights 4. Log in with the new user and create a past time off 5. Approve the time off as an time off manager/admin 6. Open the validated time off record as the employee Issue: ------ Opening a validated time off raises the following UserError: ```python You must have manager rights to modify/validate a time off that already begun. ``` Cause: ------ The `_get_durations` method in `l10n_in_hr_holidays` was updating the `l10n_in_contains_sandwich_leaves` field every time it was executed. When a user opened a validated time off record, this triggered a `write()` operation. Since non-manager users are not allowed to write on already started validated leaves, this caused a [UserError](https://github.com/odoo/odoo/blob/047d5b61a5f3fc5c41f5bc3975938a53b5da49a7/addons/hr_holidays/models/hr_leave.py#L793-L798) The field `l10n_in_contains_sandwich_leaves` does not need to be updated when `l10n_in_is_sandwich_leave` is False. See [[1]](https://github.com/odoo/odoo/blob/047d5b61a5f3fc5c41f5bc3975938a53b5da49a7/addons/l10n_in_hr_holidays/models/hr_leave.py#L156-L157) & [[2]](https://github.com/odoo/odoo/blob/047d5b61a5f3fc5c41f5bc3975938a53b5da49a7/addons/l10n_in_hr_holidays/models/hr_leave.py#L62) And this [part of the code](https://github.com/odoo/odoo/blob/047d5b61a5f3fc5c41f5bc3975938a53b5da49a7/addons/l10n_in_hr_holidays/models/hr_leave.py#L160-L173) is responsible to update `l10n_in_contains_sandwich_leaves` value. **NOTE:** Opening future validated time off records as a non-manager user triggers `AccessError` as it is not allowed to update the validated time off record. Solution: --------- Ensure that `l10n_in_contains_sandwich_leaves` is updated only when `indian_leaves` is applicable. opw-5373055 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246078 Forward-Port-Of: odoo/odoo#240056
This update resolves an issue where emails couldn't be sent to applicants who had been archived in the recruitment system. The fix ensures that archived applicants are correctly included when sending emails, preventing a disruption in the applicant communication process. This improves the reliability of the recruitment workflow.
Original PR description
Version: - 17.0 Steps to reproduce: - Create an applicant. - Archive the applicant. - Select the archived applicant. - Click the Send Email action. Issue: - Unable to Send Emails to Refused Applicants Cause: - The applicant_ids many2many field does not include archived applicants. Because of this, when an applicant is archived, the field becomes empty. Solution: - Add active_test to the field context. Task - 5786195 Forward-Port-Of: odoo/odoo#244691
This update resolves an issue where users were unexpectedly logged out when viewing images through certain security proxies (like Cisco Secure Email). The fix disables automatic session saving for image requests, preventing Odoo from creating a new session and triggering the logout. This ensures consistent functionality across browsers.
Original PR description
## Problem A logout occurs when an image in the chatter is requested through a third-party security proxy (like Cisco Secure Email or Microsoft SafeLinks) via a boomerang redirect following this…
## Problem
A logout occurs when an image in the chatter is requested through a third-party security proxy (like Cisco Secure Email or Microsoft SafeLinks) via a boomerang redirect following this flow:
- A user (Person A) opens an Odoo record. The chatter contains an image previously sent by a correspondent (Person B) whose email client or mail server rewrote the image URL to point to a security proxy.
- Firefox tries to load the image. The URL points to `cisco.com/...`. (for example)
- The proxy scans the link and redirects the browser back to the original Odoo URL: `odoo.com/web/image/...`.
- Firefox follows the strict (now deprecated) `rfc6265bis` rule: it looks at the whole redirect chain.
Since it sees a cross-site hop (cisco.com), it flags the final request as cross-site.
-> Because Odoo's session_id is `SameSite=Lax`, Firefox refuses to send
the cookie on this "false" redirect
- Odoo receives the request at `/web/image` without a session_id.
- Odoo creates a new, empty session to process the request.
- At the end of the request, because save_session is True by default, Odoo sends a `Set-Cookie: session_id=NEW_EMPTY_ID` header in the response.
- The browser receives this `Set-Cookie` header, and this time *applies a different policy*: it considers the header as same-origin, allowing it to overwrite the previously valid session cookie with this new one that corresponds to a fresh, unauthenticated session.
- The user is instantly logged out of their current Odoo tab.
## Context on Web Compatibility
This "redirect chain consideration" was a controversial part of the `RFC6265bis` draft.
Chrome and Safari never fully implemented it because telemetry showed it broke ~1% of the web. In March 2024, the HTTP Working Group (HTTPWG) officially decided to remove this requirement from the spec (reverting to a more permissive model) because it was deemed not web-compatible. Firefox, however, still enforces this strict behavior in many versions.
## How to we fix this
We set `routing={'save_session': False}` on the `/web/image controller`.
- This prevents Odoo from sending the `Set-Cookie` header if the session is dirty or new.
- Even if Firefox sends the request without a cookie, Odoo won't "reply" with a new session ID.
- The user's legitimate session cookie remains untouched in the browser.
## Sources
- HTTPWG Decision (March 2024): https://github.com/httpwg/http-extensions/issues/2104
- Reverting RFC6265bis: https://github.com/httpwg/http-extensions/pull/2750
opw-5184217
opw-4698750
opw-5166151
Forward-Port-Of: odoo/odoo#242582
Forward-Port-Of: odoo/odoo#242061This update replaces a real tax ID placeholder in the base_vat module for Turkey. This change prevents users from accidentally using the placeholder for actual transactions, ensuring data integrity and compliance. It's a minor update focused on security and accuracy.
Original PR description
The previous placeholder used a real tax ID. Replacing it with a dummy prevents users from using it to submit transactions. task-5441218 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247454 Forward-Port-Of: odoo/odoo#242189
This update removes a problematic feature from the dynamic SVG builder to prevent errors and improve stability. The 'image shape' option, previously available for dynamic SVGs, was causing issues due to unsupported shape functionality. Removing this option ensures a smoother user experience.
Original PR description
The image shape option was added for dynamic SVG with the new builder in saas-18.4. However, this seems to be an error since shapes are not supported with dynamic SVG. The image shape option will not appear anymore in such cases to avoid tracebacks for the user. task-5451405 Forward-Port-Of: odoo/odoo#247440 Forward-Port-Of: odoo/odoo#242506
This update restores the ability for support staff to edit the IAP token within the IAP account form. Previously, this token was locked down, hindering the process of migrating databases between environments. This change ensures smoother database transitions and operational efficiency.
Original PR description
Currently the IAP token (`account_token`) is readonly in the IAP account form view. It was made readonly in this commit https://github.com/odoo/odoo/commit/8a96f0fc3f18bd1ccfa96e654ef6f74b21593288#diff-f05503a4bccde75e6ef0c6ab5cd0dbd9fa0e32a30da505bdfcab8c7ed3a4a24cR33 Support needs to edit it when moving a DB from test to production though. After this commit it is editable (again; like in lower versions). task-None
This update fixes an error that occurred when all variants of a product were deleted, preventing the Shop page from loading correctly. The issue stemmed from an outdated system requirement that no longer allowed empty IDs. This change ensures the Shop page remains functional even after variants are removed, improving the user experience.
Original PR description
When all variants of a product template are deleted, opening the Shop page on the website raises a traceback. Steps to reproduce the error: - Install ``website_sale`` module - Go to settings > Enable…
When all variants of a product template are deleted, opening the Shop page on the website raises a traceback. Steps to reproduce the error: - Install ``website_sale`` module - Go to settings > Enable variants - Create a product template > In Attributes & Variants Tab > add one attribute with two values > Save - Click on the variants smart button > select all > delete - Go to Website > Shop Traceback: ```py AssertionError: Invalid falsy real id ``` https://github.com/odoo/odoo/blob/b6598c11a3580cfc6ff1ffeb67b0d388c55383d1/addons/website_sale/controllers/main.py#L456 After [commit](https://github.com/odoo/odoo/commit/4290724a4c8c57fba4f4d3d688d38f65dadcc38f), falsy IDs are no longer allowed in ``browse()``. When all variants of a product template are deleted, ``product._get_first_possible_variant_id()`` returns False. This falsy value is later passed to ``browse()``, which triggers the above traceback. [1]: https://github.com/odoo/odoo/commit/4290724a4c8c57fba4f4d3d688d38f65dadcc38f sentry-7201563878 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where TDS report amounts were incorrectly displayed as negative values in version 19.1. The fix adds a necessary negative sign prefix to the report formulas, ensuring TDS amounts are shown accurately as positive values, aligning with previous versions.
Original PR description
**Steps to reproduce:** * Install the **l10n_in** module. * Create vendor bills with applicable **TDS taxes** (e.g. Section **194C**, **194A**, **195**). * Post the bills. * Go to **Accounting → Reporting → TDS Report**. **Observed behavior:** * TDS amounts are displayed as **negative values** across all sections (192, 193, 194A–Q, 195, etc.). * This differs from versions up to **18.3**, where TDS amounts were shown as positive. **Cause:** * In v19, the automatic **+/− sign handling** was removed from the tax grid logic. [REF](https://github.com/odoo/odoo/commit/17a6117ed88c29b5bc4db0c872bcdbc109a7d98b) * TDS report formulas were missing an explicit **negative sign prefix**, causing amounts to appear inverted. **Fix:** * Add the required **negative sign prefix** to all TDS section formulas in `account_tax_report_tds_data.xml`. * Ensures TDS amounts are displayed as **positive values**. * Applies to all TDS sections. opw-5502385 Forward-Port-Of: odoo/odoo#247123
This update resolves an issue where users with read-only access to shared documents were encountering errors when opening the chatter associated with those documents. The fix ensures the system verifies a user's access rights before attempting to update document thumbnails, preventing the error and improving usability.
Original PR description
How to reproduce: - Install documents - Create a folder at the root (company) not shared to anyone (including internal user) - Open that folder and ensure the chatter is closed - Upload a document in it and share it with Marc Demo with view access - Connect with Marc Demo, click on that shared document and open the chatter You get an error because the client try to update the thumbnail of the attachment for the chatter but the user has only view access to it. The user doesn't have write access to the attachment because it is linked to a document with only read access. To solve the problem, we modify the check that trigger the thumbnail update to also check that the user has access to the related record. Task-5360962 Forward-Port-Of: odoo/odoo#244205
This update corrects a visual issue with the mega menu on the website, specifically aligning the toggle elements in desktop views when using the 'Hamburger' template. The fix ensures consistent alignment across different screen sizes, improving the user experience. This resolves a previous misalignment that was present in the mobile view but not the desktop.
Original PR description
The PR [1] updated the templates for many headers to adapt the nav-item positions in desktop/mobile views. However, the hamburger menu was not updated correctly. In the desktop view, the mega menu toggle elements were not aligned properly (unlike in the mobile view). This commit fixes the PR by adding the necessary <xpath>. Steps to reproduce the issue: - Go to Website - Add a Mega Menu (edit menu) - Click on the header - Set the template to "Hamburger" - Set the text alignment to center for the desktop view => The mega menu toggle is not centered. task-5416632 --------------------------------------------- [1]: https://github.com/odoo/odoo/pull/225672 Forward-Port-Of: odoo/odoo#242475
This update fixes a discrepancy in the French chart of accounts where expense accounts were incorrectly assigned sale taxes instead of purchase taxes. This change ensures accurate tax calculations for expense reporting in the French version of Odoo, aligning with accounting regulations. The fix was driven by a previous support ticket (opw-5891867).
Original PR description
**PROBLEM** In the fr chart of account, default taxes for expense account are sale taxes while they should be purchase taxes. opw-5891867
This update resolves an issue where portal users couldn't properly close recurrent tasks. The fix uses a temporary bypass of security restrictions to ensure the task state is correctly updated when a portal user changes the task's status. This enhancement improves the portal user experience and ensures tasks are managed as expected.
Original PR description
to reproduce: ============= - create a project with recurrent task and share it with a portal user - log in with the portal user and open the recurrent task - change the state to 'Done' and save -> the state is not changed to 'Done' and the task is not closed problem: ======== the method responsible for creating the next occurrence of a recurrent task executes some operations that portal users are not allowed to do, causing the whole operation to fail and preventing the task from being updated. solution: ========= use sudo() to bypass access rights checks when creating the next occurrence of the recurrent task. This is safe because the operations being performed do not involve any sensitive data or actions that could compromise security. opw-5442919 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247001
This update ensures the Odoo codebase is checked for code style issues using Ruff, a modern Python linter. The change includes support for the OLS noqa directive, improving code readability and consistency. This is a routine maintenance update to maintain best practices for our development environment.
Original PR description
- update for ruff 0.15.0 - support OLS noqa 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#247771
This update resolves a bug that prevented a key tour from running correctly. The fix automatically ensures the product column is visible during the tour process, eliminating a manual step. Additionally, the update improves compatibility with the purchase product matrix module.
Original PR description
Commit 01848b5 missed a case causing the `test_add_section_from_product_catalog_on_invoice_tour` tour to fail. To resolve this, `showProductColumn()` is now called automatically within `addSectionFromProductCatalog()`. This ensures the product column is visible before content verification, removing the need for manual calls in other tours. Additionally, the `showProductColumn()` trigger is updated to support both `product_id` and `product_template_id`, ensuring compatibility with the `purchase_product_matrix` module. runbot-234872 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247176
This update fixes an issue where the IoT Box sometimes updated before the database, leading to outdated handler files. By ensuring the correct ETags are removed, the system now reliably re-downloads handler files to the IoT Box, maintaining data consistency. This prevents errors and ensures proper functionality.
Original PR description
The IoT Box will, most of the time, update before the database does. In such event, the custom handlers will be removed from the IoT Box, but the etag of the files downloaded from the server will be kept, making the db return a 304 (not modified) when trying to download the handlers again. We now ensure that this etag is removed, so that the database sends the files again.
This update fixes a confusing user experience where the 'New Project' and 'Share Project' buttons used the same shortcut (Alt+R). The shortcut has been changed to Alt+C to prevent accidental activation of the wrong function, ensuring a smoother project creation process.
Original PR description
Steps to Reproduce: - - Go to Project → open any project. - Press Alt key to display shortcut hints. - Both New and Share buttons show the same shortcut. Issue: - The New button and the Share Project button use the same shortcut, leading to a conflict. Cause: - The New button and the Share Project button share the same shortcut (Alt+R) causing the wrong action to trigger. Solution: - Changed the shortcut for the New button from Alt+R to Alt+C to avoid conflict and ensure correct behavior. task-5270075 Forward-Port-Of: odoo/odoo#237694
A shortcut issue was resolved that caused users to unintentionally change task priorities instead of creating new tasks. The New button's shortcut was changed from Alt+R to Alt+C to prevent this conflict and ensure the intended functionality is consistently available.
Original PR description
Steps to Reproduce: - - Open Project → Tasks. - Press Alt key to view shortcut hints. - New button control show Alt+R. - Pressing Alt+R triggers priority change instead of creating a new record. Issue: - Pressing the shortcut displayed on the New button (Alt+R) does not create a new task but instead changes the task priority. Cause: - The New button and the Priority widget share the same shortcut (Alt+R), causing the wrong action to trigger. Solution: - Changed the shortcut for the New button from Alt+R to Alt+C to avoid conflict and ensure correct behavior. task-5270075 Forward-Port-Of: odoo/odoo#237555
This update resolves an issue where date-filtered data disappeared in POS tours after page refreshes. The fix introduces a mechanism to save and restore the frozen time using session storage, ensuring tours continue to function correctly and tests pass reliably. This improves the overall user experience during POS training and demonstrations.
Original PR description
Mocking time in tours via `freezeDateTime` is lost when the page reloads , causing date-filtered data to disappear and tests to fail. Introduce `withTimeFreeze(millis, steps)`, which persists the mock timestamp in `sessionStorage`. POS now checks this storage on module load to automatically re-apply the freeze, ensuring the clock survives refreshes while handling cleanup after the steps finish. runbot-232601 Related Enterprise PR: odoo/enterprise#106724 Forward-Port-Of: odoo/odoo#247596
This update fixes an inconsistent visual issue in the Field Service Report generated from the Bubble document layout. Previously, table borders appeared with mixed rounded and sharp edges. The fix adds a class to the table tags, ensuring a consistent and professional look for these reports.
Original PR description
Steps to reproduce: -------------------------------- 1. Install `industry_fsm_sale` module 2. Go to Settings > Configure Document Layout 3. Select the Bubble document layout and save 4. Open any…
Steps to reproduce: -------------------------------- 1. Install `industry_fsm_sale` module 2. Go to Settings > Configure Document Layout 3. Select the Bubble document layout and save 4. Open any Field Service task 5. Use the Products smart button to add one or more products 6. Click the Settings icon > Print > Field Service Report Observation: -------------------------------- In Time & Material tables using the Bubble layout, table borders show a mix of rounded corners and sharp edges, resulting in inconsistent visuals Issue: -------------------------------- The table tags in the report were missing the `table-borderless` class. As a result, the layout-applied rounded borders conflicted with the default table borders Solution: -------------------------------- Add the `table-borderless` class to the affected table tags so the tables inherit consistent rounded borders from the document layout Before: <img width="787" height="317" alt="before_css" src="https://github.com/user-attachments/assets/dac136a8-022a-4c36-8cdb-1c0fbb048f3e" /> After: <img width="816" height="372" alt="after_css" src="https://github.com/user-attachments/assets/b5f96e75-2cd3-44cf-89e3-9a3b564c8369" /> opw-5401612 Forward-Port-Of: odoo/enterprise#105616
This update fixes an issue where the Kanban view for manufacturing orders wasn't correctly filtering by the selected operation type. Previously, all active manufacturing orders were displayed. Now, the view accurately shows only those orders associated with the currently chosen operation type, ensuring accurate order tracking.
Original PR description
**Steps to reproduce:** * Install the *stock_barcode_mrp* module. * Go to *Inventory* ‣ *Configuration* ‣ *Operation Types*. * Create two operation types with *Type of Operation* set to…
**Steps to reproduce:**
* Install the *stock_barcode_mrp* module.
* Go to *Inventory* ‣ *Configuration* ‣ *Operation Types*.
* Create two operation types with *Type of Operation* set to *Manufacturing*.
* Create two manufacturing orders.
* In each manufacturing order, under the *Miscellaneous* tab
set a different *Operation Type* created above.
* Ensure sufficient *On Hand Quantity* exists for a product used in manufacturing.
* Open the *Barcode* application.
* Open one of the created manufacturing operation types.
**Observed behavior:**
* The kanban view displays **all** manufacturing orders whose picking
types are active, instead of only those related to the selected operation type.
**Cause:**
* In 19.0, the context key *`'search_default_picking_type_id': self.id`* was removed
from `_get_action` function in this [commit](https://github.com/odoo/odoo/commit/9ed7109b8f11260084374f2d7fa7073a9ad3c240)
* Previously, this context value restricted results to the current picking type by default.
* The method `get_action_picking_tree_ready_kanban` in *stock_barcode_mrp*
now overrides the domain with only *`('picking_type_id.active', '=', True)`*.
* This domain checks that the picking type is active but does not filter by
the selected picking type, causing unrelated MOs to be shown.
**Fix:**
* This ensures only manufacturing orders belonging to
the selected operation type are displayed.
---
opw-5819358
Forward-Port-Of: odoo/enterprise#105327This update resolves an issue where users with limited sign rights couldn't access the sample template. The fix ensures that users can correctly create and manage sign items within the sample template, allowing them to test and utilize the sample document. This improves the user experience for those exploring the sign workflow.
Original PR description
**Issue** Users without 'Admin' Sign rights could in some cases not access the sample template. **Steps to reproduce** 1. Go to 'Templates' and archive the existing one in order to have the 'Try our…
**Issue** Users without 'Admin' Sign rights could in some cases not access the sample template. **Steps to reproduce** 1. Go to 'Templates' and archive the existing one in order to have the 'Try our sample document' shown and click on it. 2. Add some sign items to the template, and send it for a signature request. 3. With an user having only 'User: Own Templates' Sign rights, go to 'Templates' and click 'Try our sample document'. Access Error: Blame the following rules: - sign.item: group_sign_user: Create and manage template items **Cause** When the template has an associated sign request, it is copied. The problem is that the user currently doesn't have enough rights to create sign items for the copied template: https://github.com/odoo/enterprise/blob/2e8fb2ca274a0cf15d7b78a663bffe9cbb700153/sign/security/security.xml#L92-L101 **Change** Change the `user_id` of the new template to allow creating the sign items for it. opw-5254566 Forward-Port-Of: odoo/enterprise#105656 Forward-Port-Of: odoo/enterprise#102227
This update resolves a technical issue where the user ID was sometimes missing during payments processed through the POS IoT Six module. This fix ensures accurate payment tracking and reporting within the system. It corrects a previous change that introduced this problem.
Original PR description
This PR reinstates https://github.com/odoo/enterprise/pull/98021 broken by https://github.com/odoo/enterprise/pull/98203 This fixes user id being undefined for pos_iot_six payments Forward-Port-Of: odoo/enterprise#106737
This update automatically generates unique employee IDs and sets the initial marital status to the employee's birthday by default for single individuals. This simplifies data entry and ensures more accurate employee records, enhancing the overall user experience.
Original PR description
For quality of life improvement, the unique employee identification is now automatically generated and initial marital status date is set to the birthday by default if the person is single Forward-Port-Of: odoo/enterprise#106752
This update corrects a minor issue in the calculation of payroll fees and deductions, specifically related to union and professional association fees. The change ensures more accurate processing of these deductions, leading to improved financial reporting and compliance for Australian businesses using the Enterprise module.
Original PR description
. Update `Union and professional association fees` code in computations of `Fees and Deductions` rule task-5402666 Forward-Port-Of: odoo/enterprise#104911
This update resolves a technical error that was preventing the correct display of names within Odoo's spreadsheet feature. The fix ensures that spreadsheet cell threads can accurately show the intended names, improving the user experience. This change was necessary to stabilize the spreadsheet functionality.
Original PR description
**Before this change** We were trying to set the `display_name` of one spreadsheet cell thread record to a set of more than one `display_name`s coming from a set of potentially multiple spreadsheets. **After this change** We use `record` instead of `self` when calling `_get_spreadsheet_record` so that it can only return a set of 1 `display_name`, preventing the crash that occurs when trying to set that field value. opw-5380947 Forward-Port-Of: odoo/enterprise#106673 Forward-Port-Of: odoo/enterprise#106230
7 changes
Resolved issues and error corrections
This update fixes an inconsistent visual issue in the Field Service Report generated from the Bubble document layout. The report's tables had conflicting border styles, resulting in a jarring appearance. By adding a specific CSS class, the report now consistently uses rounded borders, improving its overall professionalism and readability.
Original PR description
Steps to reproduce: -------------------------------- 1. Install `industry_fsm_sale` module 2. Go to Settings > Configure Document Layout 3. Select the Bubble document layout and save 4. Open any…
Steps to reproduce: -------------------------------- 1. Install `industry_fsm_sale` module 2. Go to Settings > Configure Document Layout 3. Select the Bubble document layout and save 4. Open any Field Service task 5. Use the Products smart button to add one or more products 6. Click the Settings icon > Print > Field Service Report Observation: -------------------------------- In Time & Material tables using the Bubble layout, table borders show a mix of rounded corners and sharp edges, resulting in inconsistent visuals Issue: -------------------------------- The table tags in the report were missing the `table-borderless` class. As a result, the layout-applied rounded borders conflicted with the default table borders Solution: -------------------------------- Add the `table-borderless` class to the affected table tags so the tables inherit consistent rounded borders from the document layout Before: <img width="787" height="317" alt="before_css" src="https://github.com/user-attachments/assets/dac136a8-022a-4c36-8cdb-1c0fbb048f3e" /> After: <img width="816" height="372" alt="after_css" src="https://github.com/user-attachments/assets/b5f96e75-2cd3-44cf-89e3-9a3b564c8369" /> opw-5401612 Forward-Port-Of: odoo/enterprise#105616
This update resolves an issue where journal items displayed in general ledger reports were incorrectly linked to account groups. The problem stemmed from a change in Odoo 18.0 that prevented a previous fix from working. The update now uses a more robust SQL query to accurately retrieve the correct account IDs, ensuring correct reporting.
Original PR description
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR…
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR [1]. - Install `Accounting (accountant)` with demo data - Create account groups e.g., name as `Test 1` and code prefix `1 to 1` - Go to the general ledger report - Click on `Journal Items` of the account group line `1 Test 1` Error from saas-18.3: `ValueError: Cannot convert account.account.group_id to SQL because it is ...` This error occurs because PR with ref [1] in 17.0 added the` group_id` field of the `account.account` model to the search domain. However, in 18.0, commit [2] modified this field so that it is no longer stored. As a result, when a search domain includes this `non-stored` field, Odoo skips the domain evaluation and logs a error at code line [3]. Consequently, the changes introduced by commit [1] have no functional effect from 18.0. Also, starting from saas-18.3, passing such a non-stored field in a domain raises an explicit error at code line [4], instead of being silently ignored. This commit resolves the issue by introducing an SQL query that returns the account ids related to `record_id(account group id)` include `record_id` as `None`. [1]: https://github.com/odoo/enterprise/pull/100191 [2]: https://github.com/odoo/odoo/commit/854c3b27aa5476c208572f19e64f8f3364bfc381#diff-19ef5a530c506fdee93fe0d113e61946b87fae7dd2d360558da69c0014f766b2R114-R767 [3]: https://github.com/odoo/odoo/blob/71e86f38c7699aaea980c929c67835a3495edf55/odoo/osv/expression.py#L1166-L1174 [4]: https://github.com/odoo/odoo/blob/00517e9e085c6fa9e00bedb8aee122a60e407fea/odoo/orm/fields.py#L1201 sentry-7100657414 Forward-Port-Of: odoo/enterprise#103137
This update resolves an error that prevented non-employee users from creating expenses linked to uploaded documents. The issue stemmed from a required field ('employee_id') not being populated correctly. The fix now displays a user-friendly error message instead of crashing, ensuring a smoother experience for all users.
Original PR description
Currently an exception is generated when the non-employee user tries
to generate expenses from the documents.
Steps to produce an error:
- Install the `documents_hr_expense` module without demo data
- Delete employee `Administrator`
- Upload any PDF/image file inside the company's `Internal` folder
- Click on the uploaded document and click on the `Create an Expense` button
Error: `ValueError: NotNullViolation('null value in column "employee_id" of ...`
This error occurs because `employee_id` is required when creating an
expense. Since the current user is not linked to an employee record,
`employee_id is` set to false, which causes the issue.
This commit resolves the issue by raising a `UserError` when the current
user is not linked to an employee.
sentry-7192984733
Forward-Port-Of: odoo/enterprise#104966
Forward-Port-Of: odoo/enterprise#104762This update simplifies the sales order reporting for subscription customers. The 'remaining hours' field, which could be misleading due to the recurring nature of subscriptions, has been hidden. This ensures a clearer and more intuitive experience for our customers and reduces potential confusion.
Original PR description
This change hides the `remaining_hours_so` field when the sales order line is linked to a subscription. Unlike standard service or time-based sales orders, where this field reflects the difference between the quantity ordered and the quantity delivered, the concept does not translate well to subscription logic. In the context of a subscription, the service is delivered on a recurring period (monthly, yearly, etc.). Delivery quantities continuously accumulate over time, and because the subscription renews indefinitely until cancellation, the “remaining hours” calculation quickly becomes misleading. In many cases it can drift into negative values, giving the impression of an error or over-consumption when, in reality, the subscription is simply following its recurring delivery cycle. To avoid confusing end-users and to maintain a clean, intuitive interface, we hide this field whenever the line is part of a subscription. opw-5246238 Forward-Port-Of: odoo/enterprise#99813
This update automatically generates unique employee IDs and sets the initial marital status to a person's birthday if they are single. This simplifies the onboarding process for new employees in the Swiss payroll system, reducing manual data entry and improving data accuracy.
Original PR description
For quality of life improvement, the unique employee identification is now automatically generated and initial marital status date is set to the birthday by default if the person is single Forward-Port-Of: odoo/enterprise#106752
This update clarifies the type of data stored in a key vector field within the AI module. Adding a 'ttype' field provides better organization and control over vector data, ensuring data consistency and improving the overall reliability of AI-powered features. This change is a technical refinement to enhance the AI module's functionality.
Original PR description
Add field ttype for vector field. community: https://github.com/odoo/odoo/pull/247542 For problem https://github.com/odoo/odoo/pull/247323#discussion_r2767940038
This update standardizes the way time off and absences are managed within the Odoo Enterprise system. It backports a fix that ensures consistent reporting and processing of these employee-related data points, improving accuracy and streamlining HR workflows. This change primarily affects the CH (Switzerland) payroll module.
Original PR description
Backport of https://github.com/odoo/enterprise/commit/f238e04f3f6c39b61d0449a0766809df06eb6980 task-5384297 Forward-Port-Of: odoo/enterprise#101449
19 changes
Enhancements to existing features
This update adjusts how financial reports (FEC exports) are delivered to users. Previously, files were downloaded in bulk, but now they are streamed directly, improving efficiency and user experience. This change ensures a smoother and faster report generation process.
Original PR description
This commit aims to update controllers and tests since FEC exported files are now streamed to the user instead of being bulk downloaded. task-5404142 Forward-Port-Of: odoo/enterprise#105716 Forward-Port-Of: odoo/enterprise#102783
Resolved issues and error corrections
This update resolves an issue where emails couldn't be sent to applicants who had been archived in the recruitment system. The fix ensures that archived applicants are correctly included when sending emails, preventing a disruption in the applicant notification process. This improves the reliability of our recruitment workflow.
Original PR description
Version: - 17.0 Steps to reproduce: - Create an applicant. - Archive the applicant. - Select the archived applicant. - Click the Send Email action. Issue: - Unable to Send Emails to Refused Applicants Cause: - The applicant_ids many2many field does not include archived applicants. Because of this, when an applicant is archived, the field becomes empty. Solution: - Add active_test to the field context. Task - 5786195 Forward-Port-Of: odoo/odoo#244691
This update replaces a real tax ID placeholder in the base_vat module for Turkey. This change prevents users from inadvertently using the placeholder for actual tax submissions, ensuring data integrity and compliance. It’s a minor update focused on security and accuracy.
Original PR description
The previous placeholder used a real tax ID. Replacing it with a dummy prevents users from using it to submit transactions. task-5441218 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247454 Forward-Port-Of: odoo/odoo#242189
This update resolves an issue where users were unexpectedly logged out when viewing images through certain security proxies (like Cisco Secure Email). The fix disables automatic session saving for image requests, preventing Odoo from creating a new session and triggering the logout. This ensures smoother operation with Firefox and other browsers.
Original PR description
## Problem A logout occurs when an image in the chatter is requested through a third-party security proxy (like Cisco Secure Email or Microsoft SafeLinks) via a boomerang redirect following this…
## Problem
A logout occurs when an image in the chatter is requested through a third-party security proxy (like Cisco Secure Email or Microsoft SafeLinks) via a boomerang redirect following this flow:
- A user (Person A) opens an Odoo record. The chatter contains an image previously sent by a correspondent (Person B) whose email client or mail server rewrote the image URL to point to a security proxy.
- Firefox tries to load the image. The URL points to `cisco.com/...`. (for example)
- The proxy scans the link and redirects the browser back to the original Odoo URL: `odoo.com/web/image/...`.
- Firefox follows the strict (now deprecated) `rfc6265bis` rule: it looks at the whole redirect chain.
Since it sees a cross-site hop (cisco.com), it flags the final request as cross-site.
-> Because Odoo's session_id is `SameSite=Lax`, Firefox refuses to send
the cookie on this "false" redirect
- Odoo receives the request at `/web/image` without a session_id.
- Odoo creates a new, empty session to process the request.
- At the end of the request, because save_session is True by default, Odoo sends a `Set-Cookie: session_id=NEW_EMPTY_ID` header in the response.
- The browser receives this `Set-Cookie` header, and this time *applies a different policy*: it considers the header as same-origin, allowing it to overwrite the previously valid session cookie with this new one that corresponds to a fresh, unauthenticated session.
- The user is instantly logged out of their current Odoo tab.
## Context on Web Compatibility
This "redirect chain consideration" was a controversial part of the `RFC6265bis` draft.
Chrome and Safari never fully implemented it because telemetry showed it broke ~1% of the web. In March 2024, the HTTP Working Group (HTTPWG) officially decided to remove this requirement from the spec (reverting to a more permissive model) because it was deemed not web-compatible. Firefox, however, still enforces this strict behavior in many versions.
## How to we fix this
We set `routing={'save_session': False}` on the `/web/image controller`.
- This prevents Odoo from sending the `Set-Cookie` header if the session is dirty or new.
- Even if Firefox sends the request without a cookie, Odoo won't "reply" with a new session ID.
- The user's legitimate session cookie remains untouched in the browser.
## Sources
- HTTPWG Decision (March 2024): https://github.com/httpwg/http-extensions/issues/2104
- Reverting RFC6265bis: https://github.com/httpwg/http-extensions/pull/2750
opw-5184217
opw-4698750
opw-5166151
Forward-Port-Of: odoo/odoo#242582
Forward-Port-Of: odoo/odoo#242061This update simplifies sales order reporting for subscription customers. The ‘remaining hours’ field, which could be misleading due to recurring delivery cycles, has been hidden when a sales order is linked to a subscription. This ensures a clearer and more accurate view of service consumption for our subscribers.
Original PR description
This change hides the remaining_hours_so field when the sales order line is linked to a subscription. Unlike standard service or time-based sales orders, where this field reflects the difference between the quantity ordered and the quantity delivered, the concept does not translate well to subscription logic. In the context of a subscription, the service is delivered on a recurring period (monthly, yearly, etc.). Delivery quantities continuously accumulate over time, and because the subscription renews indefinitely until cancellation, the “remaining hours” calculation quickly becomes misleading. In many cases it can drift into negative values, giving the impression of an error or over-consumption when, in reality, the subscription is simply following its recurring delivery cycle. To avoid confusing end-users and to maintain a clean, intuitive interface, we hide this field whenever the line is part of a subscription. opw-5246238 Forward-Port-Of: odoo/odoo#241099
This update resolves a previous issue where switching between invoice and credit note types on already-posted transactions caused errors. Now, users can switch these types without needing to export, delete, and re-import documents, streamlining the accounting process. This change improves user experience and reduces potential data loss.
Original PR description
Previously, switching an Invoice to a Credit Note (or vice versa) on a posted in_()/out_() move raised a blocking error. This forced users to export, delete, and re-import the document with the correct move type. This **PR** relaxes the restriction for posted moves whose sequence has been manually cleared, allowing the `Switch Invoice/Credit Note` action to proceed in that specific case. **task**-5905206 Forward-Port-Of: odoo/odoo#247349
This update fixes an error that occurred during upgrades of Odoo 18.3, specifically when upgrading stock modules. The fix ensures warehouses have the necessary 'Production location' to prevent upgrade failures, drawing on a previously used function from the MRP module. This improves upgrade stability.
Original PR description
The warehouses need at least a Production location[^2] to avoid triggering an error, but they are not considered a missing location. The function is borrowed from the `mrp` module[^mrp]. This error was found during upgrades. To reproduce: - In 17, install repair and don't install mrp. - Archive the production locations. - Upgrade to 18. - It will trigger an error[^1] while upgrading stock. [^1]:https://github.com/odoo/upgrade/blob/b46cf7ea8770c5d428ea3d569148eb76d16903b9/migrations/stock/saas~17.3.1.1/end-migrate.py#L16 [^2]:https://github.com/odoo/odoo/blob/ab3c2d52bcaee516eae319ccd20088eb48c819f1/addons/repair/models/stock_warehouse.py#L67 [^mrp]:https://github.com/odoo/odoo/blob/ab3c2d52bcaee516eae319ccd20088eb48c819f1/addons/mrp/models/stock_warehouse.py#L278-L283 Forward-Port-Of: odoo/odoo#245805
This update fixes an issue where month names were incorrectly displaying based on the user's locale instead of the Odoo environment's language. This ensures month names are consistently shown in the correct language for each user, improving the user experience. The change impacts several HR and accounting modules.
Original PR description
Month name is using the locale language instead of the env language Get month name in the env language Enterprise PR: odoo/enterprise#106175 Task [link](https://www.odoo.com/odoo/project.task/5902364) task-5902364 Forward-Port-Of: odoo/odoo#247489 Forward-Port-Of: odoo/odoo#246790
This update corrects a bug where a duplicate skill was incorrectly added to an employee's resume after a validation error occurred during skill selection. The fix ensures that changes made during the validation process are properly discarded, preventing unintended skill additions and maintaining data integrity.
Original PR description
Steps to reproduce: --------------------------------- 1. Install `hr_skills` module 2. Open the Employees app and open any employee record 3. Go to the Resume tab 4. In the Skills section, click Add…
Steps to reproduce: --------------------------------- 1. Install `hr_skills` module 2. Open the Employees app and open any employee record 3. Go to the Resume tab 4. In the Skills section, click Add for any skill type 5. Select a skill that is already added to the resume 6. Click Save & Close in the Select Skills wizard 7. A validation error is displayed, click Close 8. Close the Select Skills wizard. Observation: --------------------------------- After closing the wizard, another default skill is added to the resume even though a validation error was raised. Issue: --------------------------------- In the following code: https://github.com/odoo/odoo/blob/57c1c510425dcd491c794a0262063db398348640/addons/hr_skills/static/src/fields/skills_one2many/skills_one2many.js#L79-L82 During record save, the validation error scenario was not handled properly. When a validation error occurred, changes made to the virtual record were not discarded, causing the initial (invalid) changes to be incorrectly retained instead of being rolled back Solution: --------------------------------- When a validation error occurs while adding a skill, discard all changes made to the virtual record before throwing the error. This ensures that no unintended skill is added. opw-5423196 Forward-Port-Of: odoo/odoo#247464 Forward-Port-Of: odoo/odoo#240697
This update fixes a misconfiguration in the Italian tax settings. The 0% EU S tax code was incorrectly assigned. This change ensures the correct code is used based on whether the transaction is for goods or services, aligning with Italian tax regulations and improving accuracy.
Original PR description
In Italy, the code depends strictly on whether the transaction is for Goods or Services. N3.2 is for Intra-community supply of GOODS (Cessioni Intracomunitarie di beni) N2.1 is for Intra-community supply of SERVICES (Prestazioni di Servizi) This commit fixes the exoneration code on the 0% EU S tax from N3.2 to N2.1. task-5870894 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247144 Forward-Port-Of: odoo/odoo#245675
This update fixes a visual inconsistency in the Field Service Report generated from the Bubble document layout. Previously, table borders appeared with mixed rounded and sharp edges. The fix adds a class to the table tags, ensuring consistent rounded borders and a cleaner, more professional look for the report. This improves the overall presentation of field service data.
Original PR description
Steps to reproduce: -------------------------------- 1. Install `industry_fsm_sale` module 2. Go to Settings > Configure Document Layout 3. Select the Bubble document layout and save 4. Open any…
Steps to reproduce: -------------------------------- 1. Install `industry_fsm_sale` module 2. Go to Settings > Configure Document Layout 3. Select the Bubble document layout and save 4. Open any Field Service task 5. Use the Products smart button to add one or more products 6. Click the Settings icon > Print > Field Service Report Observation: -------------------------------- In Time & Material tables using the Bubble layout, table borders show a mix of rounded corners and sharp edges, resulting in inconsistent visuals Issue: -------------------------------- The table tags in the report were missing the `table-borderless` class. As a result, the layout-applied rounded borders conflicted with the default table borders Solution: -------------------------------- Add the `table-borderless` class to the affected table tags so the tables inherit consistent rounded borders from the document layout Before: <img width="787" height="317" alt="before_css" src="https://github.com/user-attachments/assets/dac136a8-022a-4c36-8cdb-1c0fbb048f3e" /> After: <img width="816" height="372" alt="after_css" src="https://github.com/user-attachments/assets/b5f96e75-2cd3-44cf-89e3-9a3b564c8369" /> opw-5401612 Forward-Port-Of: odoo/enterprise#105616
This update resolves an error that prevented correct journal item links from appearing in the general ledger reports, specifically within Odoo Enterprise version 18.3. The issue stemmed from a change in how Odoo handles data fields, and this fix ensures that the reports now accurately display the correct account groups for journal items.
Original PR description
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR…
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR [1]. - Install `Accounting (accountant)` with demo data - Create account groups e.g., name as `Test 1` and code prefix `1 to 1` - Go to the general ledger report - Click on `Journal Items` of the account group line `1 Test 1` Error from saas-18.3: `ValueError: Cannot convert account.account.group_id to SQL because it is ...` This error occurs because PR with ref [1] in 17.0 added the` group_id` field of the `account.account` model to the search domain. However, in 18.0, commit [2] modified this field so that it is no longer stored. As a result, when a search domain includes this `non-stored` field, Odoo skips the domain evaluation and logs a error at code line [3]. Consequently, the changes introduced by commit [1] have no functional effect from 18.0. Also, starting from saas-18.3, passing such a non-stored field in a domain raises an explicit error at code line [4], instead of being silently ignored. This commit resolves the issue by introducing an SQL query that returns the account ids related to `record_id(account group id)` include `record_id` as `None`. [1]: https://github.com/odoo/enterprise/pull/100191 [2]: https://github.com/odoo/odoo/commit/854c3b27aa5476c208572f19e64f8f3364bfc381#diff-19ef5a530c506fdee93fe0d113e61946b87fae7dd2d360558da69c0014f766b2R114-R767 [3]: https://github.com/odoo/odoo/blob/71e86f38c7699aaea980c929c67835a3495edf55/odoo/osv/expression.py#L1166-L1174 [4]: https://github.com/odoo/odoo/blob/00517e9e085c6fa9e00bedb8aee122a60e407fea/odoo/orm/fields.py#L1201 sentry-7100657414 Forward-Port-Of: odoo/enterprise#103137
This update resolves an error that prevented non-employee users from creating expenses from documents. The issue stemmed from a required field ('employee_id') not being populated correctly. The fix now displays a user-friendly error message instead of crashing, ensuring a smoother experience for all users.
Original PR description
Currently an exception is generated when the non-employee user tries
to generate expenses from the documents.
Steps to produce an error:
- Install the `documents_hr_expense` module without demo data
- Delete employee `Administrator`
- Upload any PDF/image file inside the company's `Internal` folder
- Click on the uploaded document and click on the `Create an Expense` button
Error: `ValueError: NotNullViolation('null value in column "employee_id" of ...`
This error occurs because `employee_id` is required when creating an
expense. Since the current user is not linked to an employee record,
`employee_id is` set to false, which causes the issue.
This commit resolves the issue by raising a `UserError` when the current
user is not linked to an employee.
sentry-7192984733
Forward-Port-Of: odoo/enterprise#104966
Forward-Port-Of: odoo/enterprise#104762This update simplifies the sales order reporting for subscription customers. The ‘remaining hours’ field, which could be misleading due to the recurring nature of subscriptions, has been hidden when a line is linked to a subscription. This ensures a clearer and more intuitive experience for our customers.
Original PR description
This change hides the `remaining_hours_so` field when the sales order line is linked to a subscription. Unlike standard service or time-based sales orders, where this field reflects the difference between the quantity ordered and the quantity delivered, the concept does not translate well to subscription logic. In the context of a subscription, the service is delivered on a recurring period (monthly, yearly, etc.). Delivery quantities continuously accumulate over time, and because the subscription renews indefinitely until cancellation, the “remaining hours” calculation quickly becomes misleading. In many cases it can drift into negative values, giving the impression of an error or over-consumption when, in reality, the subscription is simply following its recurring delivery cycle. To avoid confusing end-users and to maintain a clean, intuitive interface, we hide this field whenever the line is part of a subscription. opw-5246238 Forward-Port-Of: odoo/enterprise#99813
This update automatically generates unique employee IDs and sets the initial marital status to a person's birthday if they are single. This simplifies data entry and ensures more accurate employee records within the CH payroll module, enhancing the overall user experience.
Original PR description
For quality of life improvement, the unique employee identification is now automatically generated and initial marital status date is set to the birthday by default if the person is single Forward-Port-Of: odoo/enterprise#106752
This update fixes an issue where month names were incorrectly displaying based on the user's locale instead of the Odoo environment's language. This ensures that month names are consistently shown in the correct language for each user, improving accuracy and user experience. The change impacts several payroll and reporting modules.
Original PR description
Month name is using the locale language instead of the env language Get month name in the env language Community PR: odoo/odoo#246790 Task [link](https://www.odoo.com/odoo/project.task/5902364) task-5902364 Forward-Port-Of: odoo/enterprise#106675 Forward-Port-Of: odoo/enterprise#106175
This update fixes an issue where the system incorrectly linked statement lines to the 'ODOO' partner when retrieving information. The change ensures that statement lines are now correctly associated with the appropriate partner, improving data accuracy and reporting. This resolves a potential inconsistency in how OdooBot processes data.
Original PR description
When the partner_name was "ODOO" the retrieve partner was linking the statement line to OdooBot. no task id
This update fixes inconsistencies in how time off and absences are handled within the Odoo Enterprise system. It standardizes the views related to these processes, ensuring more accurate and reliable reporting for Swiss payroll (ELM) transmission. This improves data integrity and compliance.
Original PR description
Backport of https://github.com/odoo/enterprise/commit/f238e04f3f6c39b61d0449a0766809df06eb6980 task-5384297 Forward-Port-Of: odoo/enterprise#101449
This update resolves an issue where the system was unnecessarily creating snapshots during the transmission of ELM data for Swiss payroll. The change ensures that a snapshot is only created if one doesn't already exist, optimizing the process and improving performance. This results in a more efficient and reliable transfer of payroll information.
Original PR description
Forward-Port-Of: odoo/enterprise#105135
6 changes
Enhancements to existing features
This update adjusts how financial reports (FEC exports) are delivered to users. Previously, files were downloaded in bulk, but now they are streamed directly, improving efficiency and reducing download times. This change ensures a smoother user experience for accessing and utilizing these reports.
Original PR description
This commit aims to update controllers and tests since FEC exported files are now streamed to the user instead of being bulk downloaded. task-5404142 Forward-Port-Of: odoo/enterprise#105716 Forward-Port-Of: odoo/enterprise#102783
Resolved issues and error corrections
This update resolves an issue where journal items displayed in general ledger reports were incorrectly linked to account groups. The fix ensures accurate reporting by modifying the SQL query to correctly retrieve related account IDs, addressing a problem introduced in a previous update. This prevents a 'ValueError' from occurring.
Original PR description
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR…
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR [1]. - Install `Accounting (accountant)` with demo data - Create account groups e.g., name as `Test 1` and code prefix `1 to 1` - Go to the general ledger report - Click on `Journal Items` of the account group line `1 Test 1` Error from saas-18.3: `ValueError: Cannot convert account.account.group_id to SQL because it is ...` This error occurs because PR with ref [1] in 17.0 added the` group_id` field of the `account.account` model to the search domain. However, in 18.0, commit [2] modified this field so that it is no longer stored. As a result, when a search domain includes this `non-stored` field, Odoo skips the domain evaluation and logs a error at code line [3]. Consequently, the changes introduced by commit [1] have no functional effect from 18.0. Also, starting from saas-18.3, passing such a non-stored field in a domain raises an explicit error at code line [4], instead of being silently ignored. This commit resolves the issue by introducing an SQL query that returns the account ids related to `record_id(account group id)` include `record_id` as `None`. [1]: https://github.com/odoo/enterprise/pull/100191 [2]: https://github.com/odoo/odoo/commit/854c3b27aa5476c208572f19e64f8f3364bfc381#diff-19ef5a530c506fdee93fe0d113e61946b87fae7dd2d360558da69c0014f766b2R114-R767 [3]: https://github.com/odoo/odoo/blob/71e86f38c7699aaea980c929c67835a3495edf55/odoo/osv/expression.py#L1166-L1174 [4]: https://github.com/odoo/odoo/blob/00517e9e085c6fa9e00bedb8aee122a60e407fea/odoo/orm/fields.py#L1201 sentry-7100657414 Forward-Port-Of: odoo/enterprise#103137
This update simplifies the sales order reporting for subscription customers. The 'remaining hours' field, which could be misleading due to the recurring nature of subscriptions, has been hidden when a line is linked to a subscription. This ensures a clearer and more intuitive experience for our customers.
Original PR description
This change hides the `remaining_hours_so` field when the sales order line is linked to a subscription. Unlike standard service or time-based sales orders, where this field reflects the difference between the quantity ordered and the quantity delivered, the concept does not translate well to subscription logic. In the context of a subscription, the service is delivered on a recurring period (monthly, yearly, etc.). Delivery quantities continuously accumulate over time, and because the subscription renews indefinitely until cancellation, the “remaining hours” calculation quickly becomes misleading. In many cases it can drift into negative values, giving the impression of an error or over-consumption when, in reality, the subscription is simply following its recurring delivery cycle. To avoid confusing end-users and to maintain a clean, intuitive interface, we hide this field whenever the line is part of a subscription. opw-5246238 Forward-Port-Of: odoo/enterprise#99813
This update automatically generates unique employee identification numbers and sets the initial marital status to the employee's birthday if they are single. This simplifies the onboarding process for new employees and reduces manual data entry, improving data accuracy and efficiency within the Swiss payroll module.
Original PR description
For quality of life improvement, the unique employee identification is now automatically generated and initial marital status date is set to the birthday by default if the person is single Forward-Port-Of: odoo/enterprise#106752
This update corrects a bug where empty email addresses were being generated in XML reports for Belgian VAT listings. The fix ensures that email addresses are populated correctly, fulfilling mandatory reporting requirements. This prevents data discrepancies and ensures accurate VAT reporting.
Original PR description
**Steps to reproduce:** - Install l10n_be_reports and contacts - Switch to a Belgian company (e.g. BE Company CoA) - Go to Contacts - Open the company contact (i.e. BE Company CoA) - Add an invoice address withtout email - Create an invoice: * Customer: [a Belgian customer with a VAT number] * Invoice Lines: [a line with a tax] - Confirm the invoice - Go to "Accounting / Reporting / Belgium / Partner VAT Listing" - Export the XML **Issue:** In the XML, "<EmailAddress>" is empty althouth it is mandatory. **Cause:** The email is retrieved from the invoice address, but there is no fallback on the parent contact if it is empty. **Solution:** Fallback on the email of the parent contact as it is the case for the phone. opw-5870750 Forward-Port-Of: odoo/enterprise#105654
This update resolves an issue where the system was unnecessarily creating duplicate records when transmitting ELM data for Swiss payroll. The change ensures that a snapshot is only created if one doesn't already exist, streamlining the process and preventing potential data inconsistencies. This improves the reliability of payroll reporting in Switzerland.
Original PR description
Forward-Port-Of: odoo/enterprise#105135
11 changes
New functionality added to Odoo
This update enhances Odoo's reporting capabilities for Vietnam by adding support for VAT Form 01/GTGT. The changes involve updating account return types and associated tests to accurately generate this specific VAT report, ensuring compliance with Vietnamese tax regulations. This improves the accuracy of financial reporting for businesses operating in Vietnam.
Original PR description
Modify account return type and unit test to support VAT Form 01/GTGT. task-5473419 CE PR: https://github.com/odoo/odoo/pull/247721
Enhancements to existing features
This update refines the design of wizards used in the l10n_mx_edi module, specifically addressing the unnecessary storage of data within the database. By removing persistent storage, we've streamlined the process and improved the overall efficiency of these key workflows.
Original PR description
It's a wizard, we should not store it permanently in db.
This update clarifies the naming of a key salary rule within the Odoo Enterprise Belgian payroll module. The 'Taxable Termination Amount' rule has been renamed to 'Taxable Amount' for improved clarity and consistency. This change ensures accurate reporting and compliance with Belgian tax regulations.
Original PR description
Renaming `Taxable Termination Amount` salary rule to `Taxable Amount` Task: 5909495
This update streamlines Intrastat reporting across various localization modules by consolidating shared logic into a central location. This improves maintainability and reduces code duplication, ensuring consistent and efficient reporting processes. The change is purely a technical update focused on code organization.
Original PR description
Several Intrastat localizations were implementing the same helpers to build ZIP responses when exporting multiple files and determine move types for arrivals vs dispatches This commit moves the shared logic to the base `account_intrastat` report handler and updates local modules to reuse it. No functional change intended, only code cleanup and better maintainability. task-5879785
This update allows users to manually validate payslips even when unblocking warnings are present. Previously, the system would prevent validation due to these warnings. Now, the system recognizes the user's decision to validate and correctly updates the payslip status, ensuring accurate payroll processing.
Original PR description
If applied, this commit will treat payslips as successfully validated even when "unblocking" warnings are present, provided the user manually triggers the validation action. Why: Currently, the system can prevent or obscure the validated status of a payslip if a warning is present, even if that warning is non-critical (unblocking). If a user chooses to validate a payslip while such a warning is visible, it indicates that the user has acknowledged the warning and deemed it unimportant for the current payroll run. The system should respect this intent and transition the payslips to the 'Validated' state rather than remaining in a pending or warning state. What: - Modified the validation process to check the severity of active warnings. - Updated the state transition logic to allow 'Done' status when the only remaining issues are flagged as unblocking. - Ensured that the user's decision to "Validate" overrides the presence of non-critical payroll alerts. task-5911151
This update adjusts the automated tests for the payment widget within the Odoo Enterprise accounting module. These changes were made to align with recent updates to the payment widget functionality, ensuring continued accurate test results and reliable payment processing. This is an internal improvement.
Original PR description
Modified test due to the modifications in payment widget
Resolved issues and error corrections
This update fixes an issue where the Kanban view for manufacturing orders was incorrectly displaying all active orders instead of those related to the selected operation type. The change was caused by a removal of a context key in the Odoo 19.0 release, leading to a domain filter that didn't properly restrict results. Now, the Kanban view accurately filters manufacturing orders by the chosen operation type.
Original PR description
**Steps to reproduce:** * Install the *stock_barcode_mrp* module. * Go to *Inventory* ‣ *Configuration* ‣ *Operation Types*. * Create two operation types with *Type of Operation* set to…
**Steps to reproduce:**
* Install the *stock_barcode_mrp* module.
* Go to *Inventory* ‣ *Configuration* ‣ *Operation Types*.
* Create two operation types with *Type of Operation* set to *Manufacturing*.
* Create two manufacturing orders.
* In each manufacturing order, under the *Miscellaneous* tab
set a different *Operation Type* created above.
* Ensure sufficient *On Hand Quantity* exists for a product used in manufacturing.
* Open the *Barcode* application.
* Open one of the created manufacturing operation types.
**Observed behavior:**
* The kanban view displays **all** manufacturing orders whose picking
types are active, instead of only those related to the selected operation type.
**Cause:**
* In 19.0, the context key *`'search_default_picking_type_id': self.id`* was removed
from `_get_action` function in this [commit](https://github.com/odoo/odoo/commit/9ed7109b8f11260084374f2d7fa7073a9ad3c240)
* Previously, this context value restricted results to the current picking type by default.
* The method `get_action_picking_tree_ready_kanban` in *stock_barcode_mrp*
now overrides the domain with only *`('picking_type_id.active', '=', True)`*.
* This domain checks that the picking type is active but does not filter by
the selected picking type, causing unrelated MOs to be shown.
**Fix:**
* This ensures only manufacturing orders belonging to
the selected operation type are displayed.
---
opw-5819358
Forward-Port-Of: odoo/enterprise#105327This update removes an unnecessary check within the expense approval process, simplifying the system. This change improves efficiency and reduces potential points of failure related to expense approvals. It addresses a technical detail that no longer impacts functionality.
Original PR description
This parameter has been removed since it was not needed anymore. task-4966942
This update resolves a technical issue affecting the accuracy of tests for the Gantt chart's popover closure functionality. By switching to a standard drag-and-drop method, the tests now reliably reflect the chart's behavior, ensuring consistent results. This improves the overall stability of the Gantt chart module.
Original PR description
This commit fixes the "close tooltip when drag pill" test by replacing the `dragPill` utility with a standard Hoot drag-and-drop action. The previous `dragPill` utility relied on the `contains(...).drag` helper, which artificially moved the element before initiating the drag. This behavior interfered with the specific conditions needed to test popover closure, making the standard drag approach more accurate for this scenario. runbot-error-238499
This update prevents the sale of products categorized as 'zero-price' through the website. It now allows businesses to select specific product categories where the Contact Us button will appear for these items, improving the user experience and ensuring accurate sales tracking. This change enhances data integrity and aligns with best practices.
Original PR description
- Added an option to choose specific product categories where the Contact Us button should appear for zero-priced items. - Updated naming from `prevent_zero_price_sale` to `prevent_sale` for logic and naming consistency. task-4819657 SEE ALSO: Upgrade PR: https://github.com/odoo/upgrade/pull/7928 Documentation PR:https://github.com/odoo/documentation/pull/13908 Community PR: https://github.com/odoo/odoo/pull/215526 Documentation PR(BY Documentation team): https://github.com/odoo/documentation/pull/15740
Code cleanup and technical improvements
This update simplifies the display of Russian bank account reports by removing a complex, custom widget. Instead, we now utilize a standard Odoo option to control the display of bank templates, resulting in a more streamlined and reliable reporting experience. This change improves the overall usability of the financial reporting module.
Original PR description
Removed the custom widget and instead used the `no_open` option directly on the `bank_template_id` field.
7 changes
Enhancements to existing features
This update enhances the bank reconciliation list view by prioritizing key information like date, label, and balance at the top. Additionally, scrolling is now limited to the table rows, creating a cleaner and more focused user experience. This improves usability and clarity when reviewing bank transactions.
Original PR description
1. The bank statement line info (date, label and balance) are moved to the top now. 2. Scrolling only applies to the table rows (other elements are fixed). task-5212851
Resolved issues and error corrections
This update fixes a visual inconsistency in the Field Service Report generated from the Bubble document layout. Previously, table borders appeared with mixed rounded and sharp edges. The fix adds a consistent border style to the tables, ensuring a cleaner and more professional appearance for this report.
Original PR description
Steps to reproduce: -------------------------------- 1. Install `industry_fsm_sale` module 2. Go to Settings > Configure Document Layout 3. Select the Bubble document layout and save 4. Open any…
Steps to reproduce: -------------------------------- 1. Install `industry_fsm_sale` module 2. Go to Settings > Configure Document Layout 3. Select the Bubble document layout and save 4. Open any Field Service task 5. Use the Products smart button to add one or more products 6. Click the Settings icon > Print > Field Service Report Observation: -------------------------------- In Time & Material tables using the Bubble layout, table borders show a mix of rounded corners and sharp edges, resulting in inconsistent visuals Issue: -------------------------------- The table tags in the report were missing the `table-borderless` class. As a result, the layout-applied rounded borders conflicted with the default table borders Solution: -------------------------------- Add the `table-borderless` class to the affected table tags so the tables inherit consistent rounded borders from the document layout Before: <img width="787" height="317" alt="before_css" src="https://github.com/user-attachments/assets/dac136a8-022a-4c36-8cdb-1c0fbb048f3e" /> After: <img width="816" height="372" alt="after_css" src="https://github.com/user-attachments/assets/b5f96e75-2cd3-44cf-89e3-9a3b564c8369" /> opw-5401612 Forward-Port-Of: odoo/enterprise#105616
This update resolves an error that occurred when creating attendance records for employees without defined 'Working Hours'. The fix prevents a system crash caused by attempting to access data within an empty dictionary, ensuring smoother attendance creation processes. This improves the reliability of the attendance module.
Original PR description
This error occurs when attempting to create an attendance for an employee who has no `Working Hours` defined.
Steps to reproduce:
- Install `hr_work_entry_attendance` module
- Employees > `Administrator` > Settings > Set `Default Ruleset` in Overtime Ruleset > Payroll > Set Contract and `Work Entry Source` is in `Attendance`
- Attendance > Create New Attendance(with Extra Hours) and Save
- Remove `Working Hours` of employee
Traceback:
`KeyError: 52`
We encounter this error at [1] because `lunch_by_resource` is empty "**{}**", and we attempt to access a key in this empty dictionary.
[1]- https://github.com/odoo/enterprise/blob/b94ae7a4f8ae91ad98977a439db41a6939a6b617/hr_work_entry_attendance/models/hr_version.py#L80
sentry-7168309352This update resolves an issue where journal items displayed in reports were incorrectly linked to account groups, causing errors starting with Odoo 18.3. The fix ensures accurate linking by adjusting how Odoo queries for related accounts, preventing a previous error related to a changed data field.
Original PR description
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR…
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR [1]. - Install `Accounting (accountant)` with demo data - Create account groups e.g., name as `Test 1` and code prefix `1 to 1` - Go to the general ledger report - Click on `Journal Items` of the account group line `1 Test 1` Error from saas-18.3: `ValueError: Cannot convert account.account.group_id to SQL because it is ...` This error occurs because PR with ref [1] in 17.0 added the` group_id` field of the `account.account` model to the search domain. However, in 18.0, commit [2] modified this field so that it is no longer stored. As a result, when a search domain includes this `non-stored` field, Odoo skips the domain evaluation and logs a error at code line [3]. Consequently, the changes introduced by commit [1] have no functional effect from 18.0. Also, starting from saas-18.3, passing such a non-stored field in a domain raises an explicit error at code line [4], instead of being silently ignored. This commit resolves the issue by introducing an SQL query that returns the account ids related to `record_id(account group id)` include `record_id` as `None`. [1]: https://github.com/odoo/enterprise/pull/100191 [2]: https://github.com/odoo/odoo/commit/854c3b27aa5476c208572f19e64f8f3364bfc381#diff-19ef5a530c506fdee93fe0d113e61946b87fae7dd2d360558da69c0014f766b2R114-R767 [3]: https://github.com/odoo/odoo/blob/71e86f38c7699aaea980c929c67835a3495edf55/odoo/osv/expression.py#L1166-L1174 [4]: https://github.com/odoo/odoo/blob/00517e9e085c6fa9e00bedb8aee122a60e407fea/odoo/orm/fields.py#L1201 sentry-7100657414 Forward-Port-Of: odoo/enterprise#103137
This update resolves an issue preventing users from efficiently changing the status of multiple audit accounts. Previously, a technical error would occur when attempting bulk updates. The fix ensures a smoother workflow for managing audit statuses, improving operational efficiency.
Original PR description
### Steps to reproduce: - In Accounting, make sure you have the accountant model. Then, from Review > Audit > Working Files, click Balances. - Select more than 1 account lines and try to change their statuses. - If you don't have an Audit, create a new one and go back to Working files, then click balances. ### Cause: The client gets a traceback when they try to change the statuses of the audits for the accounts in bulks. opw-5474248
This update corrects a minor issue in the Australian Payroll module related to the calculation of union and professional association fees. The change ensures these fees are accurately reflected in employee deductions, improving payroll accuracy and compliance. This fix addresses a technical detail impacting payroll reporting.
Original PR description
. Update `Union and professional association fees` code in computations of `Fees and Deductions` rule task-5402666
This update simplifies the sales order interface for subscription customers. We’ve hidden a confusing field that inaccurately reflected remaining service hours due to the recurring nature of subscriptions. This change ensures a cleaner, more intuitive experience for our customers and avoids potential misinterpretations.
Original PR description
This change hides the `remaining_hours_so` field when the sales order line is linked to a subscription. Unlike standard service or time-based sales orders, where this field reflects the difference between the quantity ordered and the quantity delivered, the concept does not translate well to subscription logic. In the context of a subscription, the service is delivered on a recurring period (monthly, yearly, etc.). Delivery quantities continuously accumulate over time, and because the subscription renews indefinitely until cancellation, the “remaining hours” calculation quickly becomes misleading. In many cases it can drift into negative values, giving the impression of an error or over-consumption when, in reality, the subscription is simply following its recurring delivery cycle. To avoid confusing end-users and to maintain a clean, intuitive interface, we hide this field whenever the line is part of a subscription. opw-5246238 Forward-Port-Of: odoo/enterprise#99813
20 changes
Resolved issues and error corrections
This update fixes an issue where the general note message was being printed multiple times for each Point of Sale order. This resulted in unnecessary printer usage and potential delays. Now, the note message is printed only once, streamlining the POS process and improving efficiency.
Original PR description
Before this commit: =================== The general note message was printed multiple times for a single order, resulting in duplicate prints on the printer. After this commit: ==================== Ensure the general note message is printed only once, preventing duplicate prints. Task-5502902
This update resolves an issue where emails couldn't be sent to applicants who had been archived in the recruitment process. The fix ensures that archived applicants are correctly included when sending emails, preventing a disruption in communication. This improves the reliability of the applicant notification system.
Original PR description
Version: - 17.0 Steps to reproduce: - Create an applicant. - Archive the applicant. - Select the archived applicant. - Click the Send Email action. Issue: - Unable to Send Emails to Refused Applicants Cause: - The applicant_ids many2many field does not include archived applicants. Because of this, when an applicant is archived, the field becomes empty. Solution: - Add active_test to the field context. Task - 5786195 Forward-Port-Of: odoo/odoo#244691
This update resolves an issue where the 0% EU S tax code was incorrectly applied in Italy. The change ensures the correct code (N2.1) is used based on whether the transaction is for goods or services, aligning with Italian tax regulations. This correction improves tax reporting accuracy for Italian businesses.
Original PR description
In Italy, the code depends strictly on whether the transaction is for Goods or Services. N3.2 is for Intra-community supply of GOODS (Cessioni Intracomunitarie di beni) N2.1 is for Intra-community supply of SERVICES (Prestazioni di Servizi) This commit fixes the exoneration code on the 0% EU S tax from N3.2 to N2.1. task-5870894 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245675
This update resolves an issue where switching between invoice and credit note types on existing, posted transactions caused errors. Now, users can switch these types even if the transaction's internal/external move sequence has been manually cleared, streamlining the process and eliminating the need for manual data re-import.
Original PR description
Previously, switching an Invoice to a Credit Note (or vice versa) on a posted in_()/out_() move raised a blocking error. This forced users to export, delete, and re-import the document with the correct move type. This **PR** relaxes the restriction for posted moves whose sequence has been manually cleared, allowing the `Switch Invoice/Credit Note` action to proceed in that specific case. **task**-5905206 Forward-Port-Of: odoo/odoo#247349
This update allows employees to actively use the chatter feature while creating or viewing their own expense reports. Previously, they could only add attachments and messages when the expense was in draft mode. This change improves communication and allows employees to provide additional information or respond to inquiries related to their expenses.
Original PR description
An employee that created his expense was only able to add attachments and post message in the chatter when the expense was in draft. After this, it will still be able to attach attachment and post message without having the right to edit the expense. This is better as the employee will be able to answer questions that have been asked or add more proof if required. task-4966942 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the quantity displayed in the shopping cart wasn't accurately reflecting changes made by the user. The fix ensures that the cart correctly displays the updated quantity after a product is added or its quantity is modified, improving the shopping experience. This was a minor bug impacting order accuracy.
Original PR description
**Steps to produce:** - Install `website_sale` with demo data. - Go to the shop page. - Select product `Customizable Desk` > click `Add to cart`. - In the wizard, change the quantity to 100 and…
**Steps to produce:** - Install `website_sale` with demo data. - Go to the shop page. - Select product `Customizable Desk` > click `Add to cart`. - In the wizard, change the quantity to 100 and directly click `Checkout`. **Issue:** - The cart shows the product with quantity = 1 instead of the edited value. Root cause: - When the user clicks Checkout, both `setQuantity` and `onConfirm` are triggered almost simultaneously. - At [1], the `_setQuantity` method is called, but due to the await before the quantity update is completed, the update may not finish in time. As a result, the previous quantity is sometimes used during checkout instead of the newly selected one. Solution: - we can update the quantity immediately before awaiting `_updateCombination`, ensuring that the correct quantity is already set when onConfirm runs. [1]: https://github.com/odoo/odoo/blob/f4eabe47a602301013afa63da6bdf87809903d29/addons/sale/static/src/js/product_configurator_dialog/product_configurator_dialog.js#L225 opw-5435672 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves the generation of UBL files for BIS3 invoices. Previously, files lacking an EndpointID were automatically flagged as invalid due to PEPPOL compliance rules. This change adds necessary constraints within Odoo itself, ensuring UBL files are correctly formatted and compliant without immediate rejection.
Original PR description
If EndpointID is not set, the generated file is invalid due to the 2 following rules: [PEPPOL-EN16931-R010] Buyer electronic address MUST be provided. [PEPPOL-EN16931-R020] Seller electronic address MUST be provided. Since this is a configuration issue, there is no point of sending such files to be rejected right away. Instead, let's add those 2 contraints ODOO-side. task-5890887 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the copy button within Odoo forms wasn't working correctly. By explicitly setting the button type to 'button', the fix prevents the button from submitting the form, ensuring it functions as intended. This improves the user experience when copying data.
Original PR description
Previously, the type of the button in the template of the CopyButton utility component was left unspecified. Because the default type for buttons is "submit", the copy button will not work if it is placed within a `<form>` element, and will instead submit the form (see [1]). This commit just forces the type of the button to "button" which has no default behavior, meaning it can be used even inside of `<form>` elements without issues. [1]: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/button#type
This update fixes a problem where the BoM report wasn't correctly displaying the selected variant. The issue stemmed from how the system ordered variant information, leading to a mismatch between the backend and frontend. This change ensures the report consistently reflects the variant the user intended to view.
Original PR description
Steps to reproduce on runbot ------------------ Select a product with several variants and a Bill of Materials (e.g. Stool). Change the variants order so that their ids are not ordered, this can be…
Steps to reproduce on runbot ------------------ Select a product with several variants and a Bill of Materials (e.g. Stool). Change the variants order so that their ids are not ordered, this can be done by modifying the default_code for example (e.g. Internal Reference for variant "Color: Green" set to "A"). When accessing the BoM report, you won’t be able to switch to one of the possible variants (in the example the Dark Blue variant). Why it is happening ------------------ The default variant to be displayed when opening the report is selected in the backend using the product_variant_id field. This field is computed as the first element in product_variant_ids as they are ordered in the model. We then send this variant’s information to the frontend and a dictionary containing every variant (key= id and value = display_name). In the serialization process, the object is reordered based on the keys. Thus, if the variants were not ordered based on their ids in python, the order will change. The displayed variant is correct as it has been passed directly but the frontend also computes the currentVariant attribute. This is computed as the first element in the dictionary but in this case, it is not the one that has been selected in the backend, as the order changed. As a result, you see the report for a variant A but the frontend considers you are on the report for variant B so you cannot switch to variant B as you are supposed to be already on it. The fix ------------------ I propose to use the explicitly passed id as the currentVariantId. opw-5409493 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241603
This update resolves an issue preventing users with restricted company access from reloading translations. The fix bypasses a privilege check within the translation process, allowing users to continue updating language terms. This improves usability for users who don't have access to all company data.
Original PR description
When a user doesn't have access to all companies, he couldn't reload the translation terms. However, the exception occurs in the call to _get_chart_template_data, which doesn't especially require privileges, because it is static data. With this commit, we bypass the lack of company access to retrieve this data, and let the user continue the language reloading process. Task-id: [5916490](https://www.odoo.com/odoo/project.task/5916490) Forward-Port-Of: odoo/odoo#247540
This update fixes a previous issue where mention suggestions prioritized recent chat conversations over relevant followers. Now, suggestions will prioritize users who are followers of the record, ensuring more targeted and effective communication within Odoo's chat features. This change enhances the user experience by surfacing the most important contacts.
Original PR description
Before this commit, mention suggestions prioritized partners from recent chats over the record's followers. This commit fixes the behavior by reordering the sequence numbers to have the following priority order: Thread followers > Internal users > Recent chat partners. <img width="1051" height="316" alt="image" src="https://github.com/user-attachments/assets/6de527d1-b55d-4c00-b81f-15052147f9d6" /> task-5313114 Forward-Port-Of: odoo/odoo#237145
This update ensures a consistent visual style for mentions across both the small and full composer views. The changes improve readability and prevent overflow issues, particularly on smaller devices, leading to a better user experience when composing messages.
Original PR description
Use the same style in full composer than in small composer. Tweak style to account for small device, better handle overflows task-5916878 Before / After (small composer) <img width="342" height="466" alt="image" src="https://github.com/user-attachments/assets/234ff152-3c5a-4c82-b257-2800a752dd3a" /> <img width="496" height="476" alt="image" src="https://github.com/user-attachments/assets/60b3d12d-38ea-429a-9dec-441886ac022e" /> Before / After (full) <img width="413" height="394" alt="image" src="https://github.com/user-attachments/assets/c51e053f-7eb2-4ee0-8a9a-bd068ee9ded0" /> <img width="487" height="555" alt="image" src="https://github.com/user-attachments/assets/d0a3514d-aa1f-4d89-8fe4-7964ec20a288" /> Forward-Port-Of: odoo/odoo#247562
This update resolves an issue that occurred when the 'l10n_sa_edi' module was used with 'SA Company' configurations where the company street address was missing. The fix ensures the system correctly handles this situation, preventing a technical error during OTP request processing. This ensures smooth operation for users utilizing the SA-specific tax reporting features.
Original PR description
This error occurs when attempting to set the "OTP" received from "ZATCA". Steps to reproduce: - Install `l10n_sa_edi` module > Switch to `SA Company` - Go to `SA Company` and remove `Street` - Journals > Open journal with type 'Sale' > ZATCA > Onboard Journal > Enter any OTP > Request Traceback: `TypeError- value argument must be a str` At [1], the error occurs because the company has an empty street field, causing the value argument to be a `boolean` instead of the expected `string`. [1]- https://github.com/odoo/odoo/blob/40a0b44231fd9a725ccf3667c4992e691e24cde7/addons/l10n_sa_edi/models/certificate.py#L71 sentry-7185302332 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where serial numbers disappeared when creating repair orders with products initially tracked by quantity. The fix ensures that serial numbers are correctly associated with stock movements, preventing the UI from hiding newly created lines. This improves the accuracy of repair order tracking and reporting.
Original PR description
Steps to reproduce: 1. Create a storable product with tracking set to 'By Quantity'. 2. Update the Quantity on Hand (e.g., 100 units). 3. Change the product tracking to 'By Serial Number'. 4. Create…
Steps to reproduce: 1. Create a storable product with tracking set to 'By Quantity'. 2. Update the Quantity on Hand (e.g., 100 units). 3. Change the product tracking to 'By Serial Number'. 4. Create a Repair Order for this product. 5. Add a line, select a specific Serial Number, and click Save. 6. Observe that the serial number disappears. Cause: When reserving stock that was originally created as 'Generic' (no serial), the `_prepare_move_line_vals` method returns `lot_id=False`. The repair view uses `_compute_lot_ids` to display selected lots, which filters out any move lines where `lot_id` is False. This causes the new line to be effectively invisible to the UI immediately after creation. Solution: In the `_set_lot_ids` inverse method, explicitly force the `lot_id` into the create values dictionary (`move_line_vals`). This ensures that even if Odoo reserves generic stock, the resulting move line is born with the correct Serial Number identity, keeping it visible and valid. opw-5156267
This update fixes a problem where browser translation plugins were incorrectly replacing editable content with translated versions, disrupting the auto-save feature. Adding the `translate="no"` attribute to editable fields now prevents this interference, ensuring content is saved correctly.
Original PR description
Browser translation plugins were altering editable content by replacing the original content with translated versions, which caused issues when paired with auto-save. To prevent this behavior, the attribute `translate="no"` has been added to editable fields. task-5485078
This update fixes an issue where suggested mentions in the full composer weren't correctly sorted, preventing users from easily seeing followers. The fix ensures that mentions are now properly sorted, prioritizing followers for a more efficient and user-friendly experience. This improves collaboration within the system.
Original PR description
Fetch/sort suggestion in the full composer don't receive the thread param which leads to follower not being sorted at the top. task-5917226 Forward-Port-Of: odoo/odoo#247581
This update corrects a bug where VAT reports generated in Odoo were missing email addresses for certain customers. The fix ensures that email addresses are correctly populated in the XML export, addressing a mandatory field requirement and improving reporting accuracy. This ensures compliance and reliable data export.
Original PR description
**Steps to reproduce:** - Install l10n_be_reports and contacts - Switch to a Belgian company (e.g. BE Company CoA) - Go to Contacts - Open the company contact (i.e. BE Company CoA) - Add an invoice address withtout email - Create an invoice: * Customer: [a Belgian customer with a VAT number] * Invoice Lines: [a line with a tax] - Confirm the invoice - Go to "Accounting / Reporting / Belgium / Partner VAT Listing" - Export the XML **Issue:** In the XML, "<EmailAddress>" is empty althouth it is mandatory. **Cause:** The email is retrieved from the invoice address, but there is no fallback on the parent contact if it is empty. **Solution:** Fallback on the email of the parent contact as it is the case for the phone. opw-5870750 Forward-Port-Of: odoo/enterprise#105654
This update automatically generates unique employee identification numbers and sets the initial marital status to the employee's birthday if they are single. This simplifies the process of creating new employee records in the payroll system, reducing manual data entry and improving data accuracy.
Original PR description
For quality of life improvement, the unique employee identification is now automatically generated and initial marital status date is set to the birthday by default if the person is single Forward-Port-Of: odoo/enterprise#106752
This update resolves a minor issue in how the document search functionality retrieves its context information. By switching to a reliable public API, the system now consistently provides the necessary data, preventing potential errors and improving search stability. This ensures smoother operation for users.
Original PR description
**Before this commit** We were accessing the context on the `DocumentsSearchModel` object by using `_context`. This is incorrect because this property is private, and we can't guarantee its structure. In some cases, `_context` can be `null`, causing later issues when we try to access properties from the context. This was likely just a programming error, rather than intentional. **After this commit** We'll use the public API to get the context by accessing `context` on the `DocumentsSearchModel` object. The internals of that getter method can speak for themselves, but they are useful because they will give us a non-`null` context to work with. opw-5903535
This update resolves an issue where the system was unnecessarily creating duplicate snapshots when transmitting ELM data for payroll in Switzerland. The change ensures that a snapshot is only created if one doesn't already exist, streamlining the process and improving efficiency. This prevents potential data inconsistencies and reduces unnecessary system load.
Original PR description
Forward-Port-Of: odoo/enterprise#105135
4 changes
Resolved issues and error corrections
This update fixes a discrepancy where quote PDFs were incorrectly displaying customer addresses even when the 'Customer Addresses' setting was disabled. The fix mirrors the behavior of invoices, ensuring that quotes consistently show only one address when this setting is active. This improves data accuracy and a better user experience.
Original PR description
## Versions 17.0+ 16.0 too but template change is not worth risking stable policy. ## Issue There is a behavior mismatch between invoices and quotes/orders addresses display. Disabling "Customer…
## Versions
17.0+
16.0 too but template change is not worth risking stable policy.
## Issue
There is a behavior mismatch between invoices and quotes/orders addresses display. Disabling "Customer Addresses" setting should only display one address on generated documents. Yet, it has no effect on quotes and orders while it has on invoices.
## Steps to reproduce
- Go to Settings:
- Look for "Customer Addresses";
- Ensure the box is checked (and save).
- Go to Sales / Orders / Customers:
- Create a new customer and add addresses under the "Contacts & Addresses" tab:
- Add one "Delivery Address";
- Add one "Invoice Address" (with different values).
- Click the "Sales" smart button to create a new quote for that customer:
- Add any product;
- From the cog, click Print > PDF Quote.
- Confirm the order (deliver if needed);
- Create regular invoice;
- Confirm the invoice;
- From the cog, click Print > Invoices.
- Both documents display a shipping address.
Start again with "Customer Addresses" setting disabled and watch the shipping address disappear from the invoice while still present on the quote document.
*N.B.: Same behavior with the preview*
## Fix
Mimic invoices' behavior in https://github.com/odoo/odoo/blob/1bd2d63eb80020e6e213c889e83cca2950d4dcd4/addons/account/views/report_invoice.xml#L12
opw-5400368This update fixes a potential issue where external users could be assigned activities within Odoo. A new filter has been added to the system to ensure activities are only assigned to internal employees, improving data accuracy and security.
Original PR description
Description: Added an domain on the 'activity_user_id' field in the mail_activity_schedule_views xml file. The domain blocks the assignment of activities to users who are not internal. task-5424577
This update simplifies the initial setup for new employees in the payroll module. The system now automatically generates a unique employee ID and sets the marital status to the employee's birthday by default for single individuals. This streamlines the onboarding process and reduces manual data entry for HR staff.
Original PR description
For quality of life improvement, the unique employee identification is now automatically generated and initial marital status date is set to the birthday by default if the person is single
This update enhances the stability of our payroll accounting tests by ensuring all server-side processes are fully completed before tests conclude. This prevents inaccurate database state assertions and improves the reliability of test results, leading to more confident releases.
Original PR description
Wait for signature completion in tours to ensure server-side side-effects are finished before the test ends and asserts the database state. runbot-224112