Daily updates from Odoo
Friday, February 20, 2026
49 changes · saas-19.2
Resolved issues and error corrections
This update corrects a problem where the timesheet approval reminder email was sending to an outdated action. The action was updated as part of a recent system change (17.3) to consolidate time tracking actions. This ensures the reminder email functions correctly and reliably.
Original PR description
### Issue: The action used in the ` timesheet approval reminder` email template refair to a non existing action. ### Cause of the issue: The issue has been introduced in…
### Issue: The action used in the ` timesheet approval reminder` email template refair to a non existing action. ### Cause of the issue: The issue has been introduced in [1](b56e355c400c874f7cd9c3174e2253ad5769a461) b56e355c400c874f7cd9c3174e2253ad5769a461 Starting from 17.3 the actions `action_timesheet_previous_week` and `action_timesheet_previous_month` have been removed and merged in a single action `timesheet_grid_to_validate_action`. See [2](7040535ffe2c08d0d286cfccbaf4cc7f81f18443) 7040535ffe2c08d0d286cfccbaf4cc7f81f18443 However, while [2](7040535ffe2c08d0d286cfccbaf4cc7f81f18443) correctly replaced the usage of both actions used in the template as `action_xml_id`: https://github.com/odoo/enterprise/blob/913418bb3d7558b6b44916455e28de855eb123f5/timesheet_grid/models/res_company.py#L209-L221 https://github.com/odoo/enterprise/blob/913418bb3d7558b6b44916455e28de855eb123f5/timesheet_grid/data/mail_template_data.xml#L43-L45 The forward port of [1](b56e355c400c874f7cd9c3174e2253ad5769a461) replaced it with the deleted action: https://github.com/odoo/enterprise/blob/913418bb3d7558b6b44916455e28de855eb123f5/timesheet_grid/models/res_company.py#L161-L171 https://github.com/odoo/enterprise/blob/913418bb3d7558b6b44916455e28de855eb123f5/timesheet_grid/models/res_company.py#L193-L198 opw-5890269 Forward-Port-Of: odoo/enterprise#107440 Forward-Port-Of: odoo/enterprise#107385
This update resolves an issue where test runs were repeatedly generating unnecessary assets, slowing down the testing process. By adding a key asset bundle to the test preparation list, we've eliminated redundant generation, resulting in faster and more reliable test execution. This improves overall development efficiency.
Original PR description
During tests runs, lazy loaded assets are generated on the fly, and eventually multiple hundred of times (i.e. +/- 150 times on runbot). This commit adds the `web_studio.studio_assets` bundle to the pregeneration list to avoid regenerating during tests runs. Forward-Port-Of: odoo/enterprise#107147
This update resolves a potential issue where global invoices from the POS system in Mexico could fail to send correctly, leading to duplicate documents being submitted to the SAT portal. Increasing the timeout for communication with the SW sapien system helps ensure invoices are reliably transmitted, preventing errors and maintaining compliance. This improves the overall stability of the Odoo Enterprise system for Mexican businesses.
Original PR description
**Fix:** Increase the read timeout for POST requests to SW sapien PAC. It may prevent timeout issue when sending a global invoice from the POS with a lot of POS orders that could lead to duplicated documents on the SAT portal when retrying to send the global invoice again. opw-5347962 Forward-Port-Of: odoo/enterprise#107735
This update resolves an issue where Odoo was incorrectly including an UETR tag in ISO 20022 payment files, causing rejection by strict banks. The fix ensures compliance with SEPA regulations, preventing errors and guaranteeing successful payment processing for our European customers. This improves compatibility with major banking systems.
Original PR description
In Odoo 18.0, when a user selects the pain.001.001.09 format (ISO 20022), Odoo systematically includes the <UETR> (Unique End-to-end Transaction Reference) tag for every transaction. While valid under the general ISO 20022 XML schema, the <UETR> tag is not authorized by the EPC (European Payments Council) within the standard SEPA Credit Transfer (SCT) Rulebook. Strict banks (e.g., UBS, German banks) reject the entire file with errors such as: "No child element is expected at this point" when an UETR is detected in a domestic or intra-SEPA flow. Task: 5871528 Forward-Port-Of: odoo/enterprise#107869 Forward-Port-Of: odoo/enterprise#105518
This update fixes a problem preventing wage statements in Switzerland (l10n_ch_hr_payroll) from being correctly sent out. The fix ensures accurate generation and delivery of these important financial documents, complying with Swiss regulations. This resolves a potential delay in reporting payroll information.
Original PR description
Forward-Port-Of: odoo/enterprise#107837 Forward-Port-Of: odoo/enterprise#107827
This update resolves an issue where closing a POS session would fail if the partner's address (street or postal code) was missing. Previously, an empty address caused an error, now the system gracefully handles this situation, ensuring POS sessions can be completed without interruption. This improves the reliability of the POS process.
Original PR description
Before this commit, if a POS order was created with a partner that had an empty street or postal code, the system would raise an error when closing the POS session. opw-5897334 Forward-Port-Of: odoo/enterprise#106300
This update fixes a minor error in the account return processing logic. The incorrect configuration of check codes was resolved, preventing potential issues with report generation. While previously shielded by a safeguard, this change ensures consistent and accurate account return processing.
Original PR description
the check codes to ignore was wrongly defined, leading to contain records instead of 'code', plus having the exact opposite of what it was supposed to contains, i.e. codes that aren't supposed to be run at the current state of the return. However, it didn't have any impact functionally because it was "protected" by the function _should_run_checks(), which might disapear in the future. Forward-Port-Of: odoo/enterprise#107158
This update clarifies the visibility of specific fields related to Belgian payroll and fleet within the Odoo Enterprise system. Previously, these fields were inconsistently displayed, and this change ensures they are only visible for Belgian companies, aligning with local tax regulations. This simplifies the system for users outside Belgium while maintaining the necessary functionality within the Belgian context.
Original PR description
This branch only hides BE-specific fields in l10n_be_hr_payroll_fleet (they remain defined/used there and are invisible for non‑BE companies). On master (19.3) those generic fields (can_be_requested, default_car_value) were refactored into hr_payroll_fleet so payroll+fleet consumers across all countries can use them; BE fiscal logic stays in l10n_be_hr_payroll_fleet task-5906656 Forward-Port-Of: odoo/enterprise#107620 Forward-Port-Of: odoo/enterprise#106456
This update fixes a bug that caused errors when trying to view sales order items from projects without a linked customer. The fix prevents the creation of sales orders from these projects, ensuring a smoother user experience. This resolves a technical issue impacting sales order functionality.
Original PR description
Currently, an assertion error is raised when opening "Sales Order Items" from a project without a customer. **Steps to Reproduce:** - Install `sale_project` module with demo data. - Create a new project using "Sale Order" project template. - Do not set a customer on project. - Project > Task (Kanban) > Show _Top Menu_ > Show _Sales Order Items_. - Click "**Sales Order Items**". Video Ref: https://drive.google.com/file/d/1xgYHZBvIt5Ep9Gt-wALGIb9f7mj4NPh_/view?usp=drive_link Error: AssertionError **Cause:** The sale order line depends on `default_partner_id` from the context to create a sale order when none exists. When the project has no customer set, this value is missing, causing an assertion failure. **Fix:** This commit returns the list view of SOLs and disables the creation when no partner is set for the project. sentry-7220116560 Forward-Port-Of: odoo/odoo#246058
This update corrects a bug in the Belgian company structure type calculations. Previously, the system incorrectly calculated the amount of meal vouchers and private car benefits on payslips. This fix ensures accurate reporting of these benefits, resolving a potential discrepancy in payroll data.
This update resolves an issue that occurred when attempting to cancel a Point of Sale (POS) order with no items. The fix ensures the system handles empty orders gracefully, preventing errors and improving the user experience. The button to cancel the order is now disabled when no order lines are present.
Original PR description
Steps: --- - Open a Restaurant session. - Open a table with no order. - Click the control button and click Cancel Order. Issue: --- - A traceback occurs when cancelling an order. Cause: -- - The order is cancelled first, and then `isSelectedLineCombo` tries to access the current order, which is already null. Fix: --- - Safely check for the selected order before accessing combo data. - Disable the Cancel Order button when there are no order lines. task-5934004 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248639
This update corrects a display issue with 'float_time' in the MRP module. Previously, the minutes were shown in a less intuitive format. This change ensures a clearer and more standard presentation of time values within the MRP workflow, improving usability for users.
Original PR description
odoo/odoo#240555 has changed the way the float_time widget shows minutes, so we need to adapt. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue with how time is recorded in the MRPO (Manufacturing Resource Planning) work order modules. The system now consistently uses minutes for time fields, ensuring more accurate calculations and reporting. This improves the reliability of production scheduling and cost tracking.
Original PR description
Make sure that time fields in mrp modules are in minutes.
This fix addresses an error that occurred when creating invoices with negative tax percentages. The issue stemmed from a filtering process within the accounting module that resulted in an empty list of tax factors. We've reverted a recent change to avoid this error and ensure invoices can be created correctly with various tax configurations.
Original PR description
Steps to reproduce: - Install `account` module - Taxes > open any existing tax > Set `factor_percent(%)` of repartition lines to negative(eg:…
Steps to reproduce: - Install `account` module - Taxes > open any existing tax > Set `factor_percent(%)` of repartition lines to negative(eg: [Image](https://www.awesomescreenshot.com/image/58851592?key=ce0017bb467a583ad020f33d21d4d8ba)) - Create a Invoice and add tax in move line and save Traceback: `IndexError: list index out of range` We are getting `factors` as empty because `target_factors` from `_add_accounting_data_to_base_line_tax_details` is empty. This happens because, in `tax_reps`, we are filtering repartition lines with a `factor` greater than `0`. However, when the `factor` is less than `0`, `tax_reps` becomes empty, which leads to the error. We are reverting this PR: https://github.com/odoo/odoo/pull/234334 because it prevents the validation error from being raised when there is a negative value in the repartition lines. [factors]: https://github.com/odoo/odoo/blob/de056cc784a3bbe2575fd3c9e81ca62e73c362d4/addons/account/models/account_tax.py#L1641 [tax_reps]: https://github.com/odoo/odoo/blob/de056cc784a3bbe2575fd3c9e81ca62e73c362d4/addons/account/models/account_tax.py#L2429-L2431 sentry-7102210210 Forward-Port-Of: odoo/odoo#249220
This update resolves an issue where PDFs embedded in XML files used to create bills via email aliases weren't correctly attached. The fix clears a specific field when attachments are removed, preventing a misassignment of the PDF to the XML document. This ensures that bills always have the correct associated attachments.
Original PR description
Problem: when a user uploads an XML file containing an embedded PDF to create a bill, the bill is created correctly and the PDF is set as the main attachment. However, when the same XML is used to…
Problem: when a user uploads an XML file containing an embedded PDF to create a bill, the bill is created correctly and the PDF is set as the main attachment. However, when the same XML is used to create a bill via email aliases, the PDF is not set as the bill’s main attachment. Root cause: 1. When an email is received, it's first posted as a message on the bill chatter 2. Posting the email sets its XML as the main attachment of the bill 3. _fix_attachments_on_record from account.document.import.mixin then removes res_id and res_model fields from the XML 4. The PDF is then attached as the main attachment of the bill 5. In documents_account module, when the PDF is set as the main attachment, it mistakenly assigns it as an attachment to the XML document because the XML was assigned as the bill main attachment, resulting in the bill having no attachment actually linked to it. Solution: This commit fixes this issue by clearing the field message_main_attachment_id whenever the attachment in it gets unattached in _fix_attachment_on_record. task-5900088 Forward-Port-Of: odoo/odoo#246991
This update corrects a discrepancy in how time data is handled within the MRP modules. Specifically, it ensures all time fields are recorded in minutes, improving the accuracy and consistency of reporting. The change involves updating widgets and formats to align with the new standard.
Original PR description
Make sure that time fields in mrp modules are in minutes. Add a new widget in mrp_plm for updates on time data types. Replace formatFloatTime by formatDuration.
This update improves the odoo spreadsheet component by compressing data for faster loading and smaller file sizes. It also addresses issues with chart backgrounds and table auto-extension, enhancing the spreadsheet's performance and usability. This ensures a smoother experience for users working with spreadsheets within Odoo.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bd2d994f5a [REL] 19.2.0 [](https://www.odoo.com/odoo/2328/tasks/)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bd2d994f5a [REL] 19.2.0 [](https://www.odoo.com/odoo/2328/tasks/) https://github.com/odoo/o-spreadsheet/commit/5f0c837502 [REL] 19.2.0-alpha.9 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/bb4353b04b [IMP] export: reduce JSON size [Task: 5489478](https://www.odoo.com/odoo/2328/tasks/5489478) https://github.com/odoo/o-spreadsheet/commit/63a47b4005 [REF] cells: remove content from formula cells [Task: 5489478](https://www.odoo.com/odoo/2328/tasks/5489478) https://github.com/odoo/o-spreadsheet/commit/b9c86c5039 [REF] introduce CompiledFormula [Task: 5489478](https://www.odoo.com/odoo/2328/tasks/5489478) https://github.com/odoo/o-spreadsheet/commit/832a1cbbb8 [FIX] charts: chart have wrong background at copy/download [Task: 5925821](https://www.odoo.com/odoo/2328/tasks/5925821) https://github.com/odoo/o-spreadsheet/commit/734466abf0 [FIX] tables: avoid auto-extend on pivot formulas [Task: 5905874](https://www.odoo.com/odoo/2328/tasks/5905874) https://github.com/odoo/o-spreadsheet/commit/5d43c36551 [FIX] dynamic_tables: ignore dynamic pivot table inside static table [Task: 5905874](https://www.odoo.com/odoo/2328/tasks/5905874) https://github.com/odoo/o-spreadsheet/commit/4cb0fccd81 [FIX] dynamic_tables: enable total row style only when total is visible [Task: 5920830](https://www.odoo.com/odoo/2328/tasks/5920830) https://github.com/odoo/o-spreadsheet/commit/38bf6f006e [IMP] icons: add and uniformize some icons [Task: 5797703](https://www.odoo.com/odoo/2328/tasks/5797703) https://github.com/odoo/o-spreadsheet/commit/d263f13077 [FIX] topbar menu: fix formulas order in "insert formula" menu [Task: 5797703](https://www.odoo.com/odoo/2328/tasks/5797703) https://github.com/odoo/o-spreadsheet/commit/71bf1333b5 [IMP] formulas: move FORMAT_LARGE_NUMBER to text module [Task: 5797703](https://www.odoo.com/odoo/2328/tasks/5797703) https://github.com/odoo/o-spreadsheet/commit/be8f08f81b [FIX] tests: do not dispatch `UDPATE_CELL_POSITION` in monkey party [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/35a328913e [IMP] index: export Select component [Task: 5048552](https://www.odoo.com/odoo/2328/tasks/5048552) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
A recent update caused a crash when users attempted to undo a duplicated list within the spreadsheet feature. This fix ensures that the undo function correctly handles list duplication, preventing unexpected errors and improving the user experience. This resolves a frustrating issue for users working with lists in spreadsheets.
Original PR description
How to reproduce: - insert an odoo list in a spreadsheet - duplicate the list from the sidepanel - undo with Ctrl+z -> crash The command "DUPLICATE_ODOO_LIST" was not supported in the inverseCommand registry. Task-5943688 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#249475 Forward-Port-Of: odoo/odoo#248969
This update resolves an issue where upgrade processes incorrectly delayed constraint definitions, leading to failures. The change ensures that the latest constraint definition is always applied, particularly when modules are loaded in a different order. This improves the stability and reliability of Odoo upgrades.
Original PR description
Current issue: Module A fails to add constraint X with definition D1 -> (X,D1) is delayed Module B loaded after A, overrides constraint X to D2 and also fails to add the constraint -> still (X,D1) are in the delayed queue, instead of (X,D2) In this patch we ensure the delayed constraint gets the latest definition (D2) This issue affects upgrades. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249495
This update fixes a technical error that could cause a traceback when opening barcode rule forms within the Stock module. The change removes a dependency on a parent record, ensuring the form loads correctly and preventing disruptions to users. This improves stability and prevents potential data issues.
Original PR description
Issue before this commit: ========================= When opening a Barcode Rule form view, a traceback was raised due to the following python expression: bool(parent.is_gs1_nomenclature or type ==…
Issue before this commit: ========================= When opening a Barcode Rule form view, a traceback was raised due to the following python expression: bool(parent.is_gs1_nomenclature or type == 'alias') Steps to Reproduce: ========================= - Install the stock module. - Go to Configuration → Barcode Nomenclatures in the Stock app. - Open any Barcode Nomenclature form. - Go to the Rules tab and open a rule (pop-up form view). - Click on the Expand button. - A traceback is raised. Cause of the issue: ========================= The form view tries to evaluate `parent.is_gs1_nomenclature`, but the `parent` record is not defined when the rule form view is opened directly (via expand), leading to a traceback. This happens because the form view is not defined as a child of any parent view, so no parent context is available, which leads to a traceback. With This Commit: ========================= Removed the usage of `parent.is_gs1_nomenclature` and use `is_gs1_nomenclature` directly instead. The `is_gs1_nomenclature` field on `barcode.rule` is already a related field to `barcode.nomenclature`, so it can be safely used without relying on the parent. opw-5949083 Forward-Port-Of: odoo/odoo#249293
This update resolves a connection issue that occurred when Odoo was configured to use a replica database. The change ensures Odoo automatically uses the primary database port when a replica port isn't specified, preventing connection errors and improving overall stability. This enhances the reliability of the Odoo system.
Original PR description
Start postgres on an alternative port (e.g. 5434), start odoo with `--db_port 5434 --db_replica_host=''`, access /web/database/manager, there's a warning in the logs that says it is not possible to connect to the replica database.
The empty string for the replica host is Odoo 18 way to tell Odoo to simulate a replica database by connecting to the same db as the primary one. It should use `--db_replica_port` and when not set fallback on the same port as `--db_port`. The problem is that in case no `--db_replica_port` is set, the option is set `None` in the config, i.e. `get('db_replica_port', cfg)` was retuning `None` as was not using the fallback.
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#249291This update optimizes how Odoo retrieves related data, specifically when fetching multiple records at once. The change reduces the potential for performance slowdowns by preventing data duplication and improving efficiency in complex data relationships. This results in faster data retrieval, particularly when dealing with large datasets.
Original PR description
Various improvements to avoid non-linear growth of returned values when iterating over prefetches. Traversing a relational field introduces a duplication factor in the returned values. `records |=…
Various improvements to avoid non-linear growth of returned values when iterating over prefetches. Traversing a relational field introduces a duplication factor in the returned values. `records |= more` is syntactic sugar for `records = records | more`, which does not modify the recordset in place but makes one from scratch. Therefore the time complexity is not `O(len(more))` but `O(len(records) + len(more))`, which is what makes it quadratic when used in a loop. Since refactor in https://github.com/odoo/odoo/pull/229057, this quadratic complexity is introduced in the prefetching, too. Changes: - Keep same prefetch when accessing a single key as when iterating over a recordset. Small gain and more consistent results. - When iterating over prefetches, deduplicate at source. Without this, the overhead of the generator can be huge for each returned value, since the same value might be returned many times. In less trivial cases (like traversing two relational fields and making unions with it), the time speedup is several orders of magnitude. Forward-Port-Of: odoo/odoo#248770
This update resolves an issue where tests were failing due to unexpected behavior when handling JSON responses. The fix ensures that test responses are correctly formatted as recordsets, preventing errors in the automated testing process. This improves the reliability of our test suite.
Original PR description
The return value of the patched methods was a MagicMock and not a recordset, and make_json_response was doing funny stuff with that returned MagicMock 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#249496
This update adjusts the size of the 'RedirectWarningDialog' in the Odoo web interface. Previously, the dialog was unnecessarily large, which negatively impacted the user experience. This change ensures the dialog is appropriately sized for its content, creating a cleaner and more user-friendly interface.
Original PR description
Currently `RedirectWarningDialog` are using `xl` size which is way too big for the content it displays. Dialog sizes were reviewed in commit[1], the RedirectWarning should follow the same styling. task-5477287 [1]: odoo/odoo@01741aa2619998078bd19aca848146ac75c027fc --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249235
This update fixes an issue where users could accidentally select multiple accounts during the online synchronization process. The change adds a 'disable' feature, ensuring only one account can be selected at a time, improving data accuracy and streamlining the synchronization workflow. This enhances the reliability of our cloud accounting service.
Original PR description
Before this commit, it was possible to click on multiple card when doing the account selection from the wizard. This commit will add a disable feature so that when clicking on the card, other account cannot be clicked. task-5943474 Forward-Port-Of: odoo/enterprise#107637
This update prevents discounts applied to recurring subscription lines from being unexpectedly removed when an upsell is added to the order. Previously, confirming an upsell would reset the discount, causing revenue discrepancies. This change ensures accurate discount calculations and prevents financial errors during upsell transactions.
Original PR description
Before this commit, the discount of recurring lines in a sub would be reset in the following case: 1) create a sub, add a discount on recurring line 2) invoice the sub 3) create an upsell, add quanitty on the recurring product, change the start date of the upsell to trigger computation 4) confirm the upsell The discount of the parent order was reset. task-5886270 Forward-Port-Of: odoo/enterprise#105750
This update fixes a discrepancy in accounting calculations within the Point of Sale (POS) for Mexican tax reporting (l10n_mx_edi_pos). Previously, the POS wasn't correctly loading necessary data, leading to inaccurate amounts. This change ensures that POS transactions align with the calculations performed in Python, improving financial accuracy.
Original PR description
Before this commit, the needed assets were not correctly loaded in the POS, which caused the amounts to be different from the ones computed in python. opw-5935191 Forward-Port-Of: odoo/enterprise#107657
This update fixes a problem where orders wouldn't sync correctly after a terminal payment and an online payment were added and then removed. Previously, the server would remove the terminal payment even if it was still visible in the user interface. Now, only online payments are deleted, ensuring accurate order synchronization and a consistent view across the system.
Original PR description
Before this commit, if an order had a terminal payment and an online payment was added accidentally, and then get removed, the terminal payment would get removed from server, while it won't be removed from the UI, resulting in a mismatch between the server and the UI, and the order would no be synced correctly. opw-5911699 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248430
This update adds a warning message in the batch wizard to alert users if the automated invoice sending cron job is disabled. This ensures users are aware that their invoices may not be sent as scheduled, preventing potential delays and improving invoice processing transparency. It addresses feedback from SBR to enhance user experience.
Original PR description
When the Cron responsible of sending the invoices asynchronously is disabled, the user has no clear indication that his invoices won't be sent as they should. Let's add a warning in the batch wizard that notify the user something is wrong. task-none (feedback from SBR) Message when no rights to update cron: <img width="990" height="328" alt="image" src="https://github.com/user-attachments/assets/1100ef6f-d047-49f2-bd8f-c8ef9fd543d8" /> Message when admin: <img width="999" height="308" alt="image" src="https://github.com/user-attachments/assets/28e90295-d225-4785-82a9-65be3ce79621" /> Forward-Port-Of: odoo/odoo#249270 Forward-Port-Of: odoo/odoo#248994
This update resolves an issue where Peppol invoices were incorrectly using the wrong company context, leading to errors and inconsistencies when processing invoices across different companies. The fix ensures that invoices are processed with the correct company's information, preventing data mismatches and improving data accuracy for cross-company transactions.
Original PR description
Currently, the created move does not always use the company context of the related move/proxy user. As a result, default values may be taken from another company, which can lead to cross-company inconsistencies and access errors. Steps to reproduce: - Set up two companies, A and B - In company A, configure a default value for the partner.company_id field, applicable only to company A - When a Peppol invoice arrives for company B but is processed using the context of company A, and a new partner must be created, the partner is created with company A as the default value - This results in an incompatible companies on record error This fix ensures that the company context of the move or EDI user is used when creating the move, preventing cross-company issues. opw-5473233 Forward-Port-Of: odoo/odoo#249409 Forward-Port-Of: odoo/odoo#249059
A recent update allowed users to confirm dialogs with CTRL+Enter, but this also caused floors to be created twice. This fix prevents the double confirmation by stopping the event propagation, ensuring data integrity and preventing unintended duplicate entries in the restaurant floor management.
Original PR description
For the `TextInputPopup` component a feature was introduced in 2f5c5c15644412cfb6493c661b2f1b927c8cc7e2 that allows the user to confirm the popup by simply clicking enter. The problem is that the dialog itself has a hotkey on "CTRL+Enter" that will also confirm the popup. This means that if a user uses the "CTRL+Enter" hotkey, the popup will be confirmed twice. Steps to reproduce: 1. In restaurant, click the button to add a new floor 2. Write a name for the floor 3. Click "CTRL+Enter" 4. Observe that 2 floors with the given name were created instead of one. The fix: We stop the propagation of the event Task: 4698289 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212134
This update corrects a minor issue in the Point of Sale system's testing functionality. The system now correctly uses the 'printer_ip' field instead of the outdated 'epson_printer_ip' field for configuring printers. This ensures consistent and reliable test button operation.
Original PR description
IP address field changed from epson_printer_ip to printer_ip
This update resolves a bug that was causing forum posts to fail to create when the Odoo system was in debug mode. The issue stemmed from incorrect property settings being passed to a key component. By changing 'disabled' to 'isReadOnly', the system now correctly handles forum post creation, ensuring a stable user experience.
Original PR description
Following rewrite in odoo/odoo@33206fd1941ae, this commit update passed props (`disabled` -> `isReadOnly`) to avoid a crash when creating a new forum post while being in debug mode: `OwlError: Invalid props for component 'WebsiteForumTagsWrapper': unknown key 'disabled'` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249477 Forward-Port-Of: odoo/odoo#244063
This update resolves a technical issue that caused email generation to fail when processing multiple equity transactions. The fix corrects a configuration error in the email template, ensuring accurate record context and preventing errors during email creation. This improves the reliability of sending shareholder communications.
Original PR description
## Issue Before This Commit A missing record error occurred during email generation when the number of `equity.transaction` records exceeded the `res.partner` records. ## Cause of the Issue The issue was caused by an incorrect `model_id` configuration in the `equity_shareholder_email_template`. This created a mismatch between the template model and the record context passed to the mail compose wizard, leading to a missing record error during template rendering. ## With This Commit The template `model_id` has been corrected `equity.transaction`. This ensures that the mail compose wizard receives the correct model context and prevents missing record errors during email generation. Steps to reproduce : [Video](https://drive.google.com/file/d/19WXbjmYPKh0IjQHcEGU4FdUbGSF4GGlx/view?usp=drive_link) opw-5899070 Forward-Port-Of: odoo/enterprise#107891
This update resolves an issue where changing a partner in Odoo would erase the previously set default payment term for invoices. Now, the default payment term will remain consistent even after switching partners, ensuring a smoother and more reliable invoicing process. This prevents frustration and maintains data integrity.
Original PR description
When you want to set a default payment term for an invoice, it will be there when you create the invoice. But then, when you change the partner, even if there is no default payment term defined on there, it will empty it, so setting a default does not work. This can even be annoying if you set the payment term first and then the partner. In odoo/odoo#112360 this condition was added for perf issues. opw-5387239 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#242041
This update ensures that when creating transactions (like expenses), the correct company account is used, regardless of the user's main company selection. Previously, transactions were linked to the user's default company, even when processing transactions for a different company. This fix improves data accuracy and consistency across company transactions.
Original PR description
The aim of this commit is to ensure the account select through product is related to the correct company. (ie. the one related to the processed model) Before this commit: If a user has company_a selected as the main company in the company switcher and create an expense for company_b, the account selected from the product will be an account from company_a. (because product is shared between company but the account properties on those are company dependent) This could also happens in other places so we fixed it. After this commit: The account selected from the product will be from the company set on the model. task-4699717 Forward-Port-Of: odoo/odoo#249194 Forward-Port-Of: odoo/odoo#209144
This update resolves an issue where changes made to email marketing records were not being saved when switching between form tabs. The fix ensures that the last edits to the email body are correctly preserved, improving the user experience and preventing data loss. This enhancement provides greater reliability for email marketing campaigns.
Original PR description
Problem: While editing an email marketing record, switching tabs in the form view causes the last changes in the editor to be lost. Cause: The `blur` event on the iframe is not triggered when clicking outside of it. If the iframe is not fully ready when listeners are attached, the required events are not properly registered, so the latest changes are not saved before switching tabs. Solution: Attach the `blur` listener only once the iframe is fully loaded, ensuring that changes are correctly detected and saved when focus is lost. Steps to reproduce: - Create a new email marketing record. - Add a text snippet. - Change the text and save. - Modify the text again. - Switch to another tab in the form view, then return to the "Mail body" tab. - Observe that the last changes are lost. opw-5921800 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248974
This update resolves an issue where clicking 'View' on certain activity types (like 'Eat cookies') in the calendar view would cause a technical error. The fix ensures that activities, even those without a linked model, can be properly displayed and accessed, improving user experience.
Original PR description
Steps to reproduce ================= 1. Go to “View all activities”. 2. Switch to calendar view. 3. Click on an activity not linked to any model (e.g. “Eat cookies”, “Send Email to Alfred”). 4. Click…
Steps to reproduce ================= 1. Go to “View all activities”. 2. Switch to calendar view. 3. Click on an activity not linked to any model (e.g. “Eat cookies”, “Send Email to Alfred”). 4. Click “View” in the popover. => Traceback Reason ====== The commit [1] allow activities without a linked model and from commit [2] such activities can be opened in the activity form view. In the calendar view, the action is retrieved from the model and executed using `doAction`. Since the action does not define `views`, and the `doAction` depends on `action['views']`, an error occurs when the action service attempts to copy it. After this commit ================== This commit fixes the issue by modifying the action returned from `action_open_document` for non-linked models to include `views`, similar structure used when a model is present. [1] https://github.com/odoo/odoo/commit/165b060473be8a5d33d62d311f0dc55ed6332d69 [2] https://github.com/odoo/odoo/commit/abeac135b9bb7aec4bcddd84fb0705743297f80d Task-5857887 Forward-Port-Of: odoo/odoo#246442
This update fixes an issue where tables copied from the Knowledge editor were only partially copied, resulting in incomplete table structures when pasted elsewhere. The change ensures that tables are copied fully, providing a consistent and reliable experience for users adding and sharing tables within Knowledge.
Original PR description
Problem: In Knowledge, when adding a clipboard block and inserting a table inside it, clicking on the copy button only copies the text inside the table instead of the full table structure. Cause: In…
Problem: In Knowledge, when adding a clipboard block and inserting a table inside it, clicking on the copy button only copies the text inside the table instead of the full table structure. Cause: In `html_viewer`, the copy logic clones only the deepest selected node. In contrast, `html_editor` (via `clipboard_plugin`) copies the entire selection range. This difference causes inconsistent behavior between editable and locked content. Solution: Align the behavior by copying the full selection in `html_viewer`, ensuring tables and other complex structures are copied entirely and consistently. Steps to reproduce: - Open Knowledge. - Add a clipboard block. - Insert a table inside the block. - Lock the content. - Click the copy button. - Paste into any editable field. - Observe that only the text (not the table) is pasted. opw-5476320 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248213 Forward-Port-Of: odoo/odoo#247930
This update corrects a bug where vertical videos would lose their orientation after a page was saved and reloaded. The fix ensures that vertical video settings are properly preserved, maintaining the intended layout for users. This improves the visual consistency of video content on our website.
Original PR description
Problem: When setting a video to vertical and saving the page, the alignment is not preserved after reload. Cause: `generateVideoIframe` always sets the `media_iframe_video_size` class, even for vertical videos. As a result, the vertical configuration is lost after saving. Solution: Apply `media_iframe_video_size_for_vertical` when the video is marked as vertical, so the correct layout is preserved after saving. Steps to reproduce: - Drop a Video snippet on a page. - In the selector, enable the vertical option. - Add the video. - Save the page. - Observe that the video is no longer vertical. opw-5941900 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249335
A bug was causing the total time displayed in the Timesheet list view to be formatted incorrectly after a page refresh. This update ensures the total is always displayed as a time value, regardless of whether the user is viewing the data in a grid or list format. This improves the accuracy and usability of the Timesheet reporting feature.
Original PR description
# Steps to reproduce - Open Timesheets - Go to list view - Refresh page - Total is formatted as regular float instead of time # Cause of the issue The list view uses the `timesheet_uom_timer` widget…
# Steps to reproduce - Open Timesheets - Go to list view - Refresh page - Total is formatted as regular float instead of time # Cause of the issue The list view uses the `timesheet_uom_timer` widget for the `unit_amount` field. While the row entries were formatted correctly since the widget is added to the fields registry in `timesheet_uom_timer.js`, the aggregate (total sum) is not formatted in the same way because the formatters registry is missing that particular widget. Switching to the grid view and going back to the list view would solve the formatting. That is because the `timesheet_uom_timer` widget is added to the formatters registry when loading the grid view (in `timesheet_grid_uom_service.js`). We ensure the formatter is registered globally by patching the `timesheetGridUOMService` outside the grid view context, ensuring consistent aggregate formatting in list view, even after a page refresh. task-5907954 Forward-Port-Of: odoo/enterprise#107203 Forward-Port-Of: odoo/enterprise#107006
This update resolves a technical issue within the Lu payroll module that was causing incorrect calculations for employee pay. The fix ensures accurate payroll processing, maintaining the integrity of financial data. This change primarily impacts payroll reporting and employee compensation.
Original PR description
Forward-Port-Of: odoo/enterprise#107635
The AI translation feature in the website builder was experiencing timeouts, preventing users from translating large amounts of text. This update removes the timeout restriction, allowing translations to complete successfully even with extensive or complex content. This improves the user experience and ensures accurate translations for our website.
Original PR description
Scenario: - have lot of untranslated text in a page - in a secondary language, open translation editor - click on "Translate to [current language]" in side panel Result: the translation fails completely or partially, and there is a notification saying "A technical issue occurred in the builder, you should save or discard your changes.". Reason: since 6df83abb35c95ab42e55d9a08cf6c411efa64b3e website builder action have a default timeout of 10 seconds to prevent deadlocks. But the /html_editor/generate_text can easily take more than 10 secondes depending on latency and quantity of text to translate. Fix: prevent the timeout when using the AI translation feature. opw-5892402 Forward-Port-Of: odoo/odoo#249464
This update resolves an issue where the expense report generation process would fail when encountering encrypted PDF attachments. The fix skips these encrypted files, preventing errors and ensuring reports can be created successfully. This improves the reliability of expense reporting for users.
Original PR description
**Steps to reproduce:** - Install hr_expense - Create an expense - Attach several receipts with at least one encrypted PDF - Create Report - From cog menu, print "Expenses Report" **Issue:** A traceback is raised while trying to add the attachments to the report: 1) With a version of PyPDF2 lower than 2.12.1 (e.g. 1.26.0), a PdfReadError is raised: "File has not been decrypted". 2) With version 2.12.1 of PyPDF2, if PyCryptodome library is not installed, a DependencyError is raised: "PyCryptodome is required for AES algorithm". **Cause:** The encrypted file cannot be appended to the report PDF. **Solution:** Skip encrypted files and log a note with the reason in the report. opw-5194501 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249365 Forward-Port-Of: odoo/odoo#248869
This update clarifies the label for the 'Remove from Bookmarks' action within the Discuss app. By capitalizing 'Bookmarks,' the change aligns with existing labels and improves user understanding of this specific action. This ensures consistency and reduces potential confusion for users.
Original PR description
Backport of https://github.com/odoo/odoo/pull/249454 Use capital letter for "Bookmarks" in this label, for consistency with labels of other actions but also to make it clearer this is related to the "Bookmarks" item in Discuss app. Before / After <img width="212" height="226" alt="Screenshot 2026-02-19 at 12 40 06" src="https://github.com/user-attachments/assets/28f8777e-521f-4ce5-ac07-2c8ff19539d2" /> <img width="211" height="230" alt="Screenshot 2026-02-19 at 12 40 24" src="https://github.com/user-attachments/assets/fa6168ef-7128-42a0-a2eb-d94bf381db5f" />
This update resolves issues with the website builder's option folding and overlay behavior. Specifically, it fixes a bug where the last group of options wasn't unfolding correctly and addressed overlapping hover overlays, ensuring a smoother and more reliable user experience. These changes improve the overall usability of the website builder.
Original PR description
### [FIX] website: avoid empty option for grid Commit 64d35ccd6fade9e0473686b8484f561b5f4215ce added folding for groups of options, and folds them automatically, except the last group. But in some…
### [FIX] website: avoid empty option for grid Commit 64d35ccd6fade9e0473686b8484f561b5f4215ce added folding for groups of options, and folds them automatically, except the last group. But in some cases, the last container with options did not have any options displayed, and thus the last group shown was not unfolded. This commit fixes the issue for the case it was found by avoiding having the option completely (instead of having it, but being empty), by changing the selector. Steps to reproduce: - Open website builder on `/jobs` - Click on the bottom of the right column - Bug: the last group is not unfolded task-5946692 ### [FIX] html_builder: avoid hover overlay on top of active overlay Commit 53ae0a9f646808632ca1ca396466e1c0bb5a73c7 adds overlays on hover on elements with option. But it showed it also when there is already another active overlay, which preventing correct dragging of handles and caused an ugly color. This commit avoid showing the hover overlay if there is another overlay active for that element. Steps to reproduce: - Open website builder - Drop the `s_banner` snippet - Click on the column with text - Drag a handle to resize it - Bug: the overlay does not moved when dragged (the column is correctly resized) - Open website builder - Drop the `s_banner` snippet - Click on the column with text - Move the cursor a bit (stay inside the column) - Bug: The hover overlay is shown in addition to the "resize" overlay task-5946671 ### [FIX] html_builder: keep oberver of overlays when removing hover one Commit 53ae0a9f646808632ca1ca396466e1c0bb5a73c7 adds overlays on hover on elements with option. To adapt the size, it adds them to the resize observer with the other overlay. But when the hover overlay is removed, it removed the element from the observer even if it was also used for another overlay. This commit only removes the element targetted by the hover overlay from the observer if there is no other overlays for that same element. There is no issues the other way because the hover overlay disappears for any action that would remove the other overlays. Steps to reproduce: - Open website builder - Click on the "Contact Us" button in the header - Click in the blank space in the sidebar - Press `escape` - Bug: The overlay moves away from the button task-5942812 ### [FIX] html_builder: refresh overlays when document resizes When the iframe is resized because the user opens the builder, or hides the sidebar, the overlays were not always correctly following the elements which they were targetting. This commit adds a resize observer on the document. This observer makes the listener for `resize` events and implementation of `on_mobile_preview_clicked` both redundant, thus they are removed. Steps to reproduce: - Open the website builder while moving the pointer over a column in the footer - Bug: the hover overlay moves not following the column - Find (or create) a page with no options on any element covering the whole page, but with elements with options, whose size are not affected by the size of the page. - Open website builder - Click on the element with the option - Click in the blank space in the sidebar - Press `escape` - Bug: The overlay moves away from the element task-5942812
This update resolves an issue where the cursor's position was incorrect after using backspace within the HTML editor, specifically when inserting text after a button. The fix ensures the cursor remains correctly positioned within the button area, improving the user experience and preventing unexpected text insertion.
Original PR description
When using backspace after a button, the cursor is visually displayed as being inside the button, but it a character is typed, it is inserted after the button, while it should be inside. What actually happens is that after backspace after a button, the selection is set around the FEFF that follows the button. This commit fixes this by putting the selection before the FEFF inside the button instead. Steps to reproduce: - Go to a "To do" note - Insert a button - Insert text after the button - Put cursor before text after button - Press backspace: the cursor is displayed inside the button - Type a letter => The letter was inserted after the button. task-5928806 Forward-Port-Of: odoo/odoo#249285 Forward-Port-Of: odoo/odoo#248179
This update resolves a problem where salary inputs needed manual triggering, preventing accurate calculations for advance salary recovery. The team has reorganized the data files to make the triggering process clearer and removed a redundant file, ensuring correct salary calculations are now automatic.
Original PR description
Purpose: the salary inputs have to be manually triggered, which causes issues when it comes to populating the salary input for the advance salary recovery. Fix: moved the function `update_properties_definition_domain` to each salary structure data file to be more obvoius and removed `l10n_tr_hr_payroll_data` as the file wasn't in the manifest task-id: 5912475 Forward-Port-Of: odoo/enterprise#106576
This update resolves an issue where the 'Group by category' option in Point of Sale was not displaying all products correctly. The change utilizes a more robust method to group products by category, ensuring a complete and accurate product list is presented to users. This improves the overall POS experience.
Original PR description
Before this commit when activating the "Group by category" option in the POS, some products were missing from the product list. Now we use the `getAllBy` generic model method to group products by category, which ensures that all products are correctly grouped and displayed in the POS. Forward-Port-Of: odoo/odoo#248250 Forward-Port-Of: odoo/odoo#247782