Daily updates from Odoo
Wednesday, January 21, 2026
352 changes
17 changes
Resolved issues and error corrections
This update resolves an issue where a system error prevented users from selecting the Auto-Complete field in the Bills module when a Vendor wasn't initially chosen. The fix hides this field until a vendor is selected, preventing the error and ensuring a smoother user experience. This improves usability within the invoicing process.
Original PR description
Currently, an exception is generated when the user tries to select `Auto-Complete` without selecting `Vendor`. Steps to produce an error - Go to Invoicing > Vendors > Bills > Click New - Try…
Currently, an exception is generated when the user tries to select `Auto-Complete` without selecting `Vendor`. Steps to produce an error - Go to Invoicing > Vendors > Bills > Click New - Try selecting `Auto-Complete` >>> Error occurs Error `AssertionError: Invalid falsy real id` This error occurs because, after the recent refactoring in commit [1], falsy ids are no longer allowed in domains. In the `Account Entry` view `[partner_id]` (see [2]) is passed as part of the domain. When the user has not selected a vendor (partner_id) it evaluates to False, which results in [False] being passed and triggers the error introduced by commit [1]. This commit will fix the above issue by hiding the `Auto-Complete` field when `Vendor` is not selected. [1]: https://github.com/odoo/odoo/commit/4290724a4c8c57fba4f4d3d688d38f65dadcc38f [2]: https://github.com/odoo/odoo/blob/7b288aa436f669d8c8e2ddac5277bb98321a390e/addons/account/views/account_move_views.xml#L1067 Sentry-7201563878
This update corrects a technical error in the IoT drivers that prevented proper data processing. The system was incorrectly interpreting pin data as a dictionary, leading to a system crash. This fix ensures data is handled correctly, improving stability and reliability of IoT integrations.
Original PR description
Batch action provides only the pin as a string. We had a traceback when trying to get `high_level_message` as if the data provided was a dict.
This update prevents the API documentation endpoint from crashing when encountering models not currently defined in the Odoo system. The fix addresses a technical issue where the system would fail to load documentation due to missing model definitions, ensuring the endpoint is consistently available. This improves the reliability of the API documentation for users.
Original PR description
When accessing the API documentation endpoint (`/doc`), the server could crash with an Internal Server Error if the database contained ir.model records for models that are not loaded in the current registry. Steps to reproduce: 1. Insert a record into `ir_model` with `model='ghost.model'` and `state='base'`. 2. Open `/doc`. 3. The server raises a `KeyError: 'ghost.model'`. Root Cause: The `/doc` endpoint iterates over all records in `ir.model`. For each record, it attempts to resolve the Python class using `self.env[ir_model.model]` to check access rights. If a model exists in the database with `state='base'`, Odoo expects it to be defined in the Python source code and does not generate it dynamically. If the corresponding Python class is missing (e.g., from an old module), it is never added to the registry, causing the lookup to fail with a `KeyError`. opw-5401782 Forward-Port-Of: odoo/odoo#241483
This update fixes an issue where employee names were being incorrectly formatted in payroll reports. The change ensures that employee names are consistently displayed as 'First Name Last Name,' aligning with Swiss regulations and improving data accuracy. This resolves a previous reporting error and enhances the reliability of payroll information.
Original PR description
* Fix _compute_l10n_ch_legal_name method to correctly assign first_name and last_name from employee name (was previously reversed) * Update all SwissDEC test data to use correct "FirstName LastName" format instead of "LastName FirstName" to match the corrected computation logic task-5102851 Forward-Port-Of: odoo/enterprise#104067 Forward-Port-Of: odoo/enterprise#95252
This update fixes an issue where changing the rental period of an order didn't automatically update the associated rental transfers. The fix mimics the rescheduling behavior of purchase orders, ensuring that rental transfers are accurately reflected after a rental period adjustment. This improves the reliability of rental order management.
Original PR description
### Steps to reproduce: - In the settings enable "Rental Transfers" - Create a storable and rentable product P - Create and confirm a rental order for 1 unit of P - Change the rental period to 10 days in the future #### > The rental tranfers were not updated accordingly ### Cause of the issue: Nothing is currently implemented to reschedule the rental transfers. ### Fix: We somewhat mimic the reschedule purchase behavior: https://github.com/odoo/odoo/blob/6ca34a0f5347e0611cde95453119dda8b40fa589/addons/purchase_stock/models/purchase_order_line.py#L98-L101 But we rely on the order itself rather than its order lines since the `start_date` and the `return_date` are related fields so that no `write` is triggered when the order is rescheduled: https://github.com/odoo/enterprise/blob/96a80f583a0ca502ff06bc05d03775c76c6a7537/sale_renting/models/sale_order_line.py#L18-L19 opw-5158508 Forward-Port-Of: odoo/enterprise#103602 Forward-Port-Of: odoo/enterprise#101334
This update removes unnecessary integer rounding from monthly Italian VAT reports. Previously, rounding was incorrectly applied, causing discrepancies in reporting. This change ensures accurate and consistent monthly VAT reporting for Italian businesses using Odoo.
Original PR description
**Description of the issue/feature this PR addresses**: Integer rounding is only required on annual l10n_it VAT reports. It appears that it was incorrectly added to the monthly report when the two were split in #193662. **Current behavior before PR**: Integer rounding on monthly l10n_it tax reports. **Desired behavior after PR is merged**: No more integer rounding on monthly l10n_it tax reports. [opw-5292310](https://www.odoo.com/odoo/project.task/project.task/5292310) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244389 Forward-Port-Of: odoo/odoo#243100
This update removes unnecessary integer rounding from the monthly Italian VAT reports. The rounding, which was incorrectly applied due to a previous split of reporting functionality, has been corrected. This ensures accurate VAT reporting for Italian businesses using the Enterprise module.
Original PR description
Integer rounding is only required on annual l10n_it VAT reports. It appears that it was incorrectly added to the monthly report when the two were split in [#193662](https://github.com/odoo/odoo/pull/193662). [opw-5292310](https://www.odoo.com/odoo/project.task/project.task/5292310) Forward-Port-Of: odoo/enterprise#104679 Forward-Port-Of: odoo/enterprise#103852
This update resolves an issue that prevented upgrading the HR module after deleting overtime rules. The fix disables a constraint that caused errors during upgrades, ensuring smoother module updates and preventing disruptions to attendance management. This improves stability and reduces potential upgrade complications.
Original PR description
**Steps to reproduce** - Install `hr_work_entry_attendance` - Delete one of the overtime rules from the "Default Ruleset", e.g. "Employee Schedule Rule" - Upgrade the `hr` module - Traceback: `psycopg2.errors.CheckViolation: new row for relation "hr_attendance_overtime_rule" violates check constraint "hr_attendance_overtime_rule_if_paid_work_entry_type_defined"` **Cause** The `_if_paid_work_entry_type_defined` constraint added by the `hr_work_entry_attendance` module on overtime rule records will fail when re-creating an overtime rule record when upgrading another module than `hr_work_entry_attendance`, since the module is not loaded and we don't get a default value for the `work_entry_type_id` field. **Fix** Since the ORM cannot manage that, disable forcecreate for these records. Related: https://github.com/odoo/enterprise/commit/f935e62bae7f204ea3f6db8f08b173bdf011c0d2 opw-5428542 Forward-Port-Of: odoo/odoo#244333
This update addresses several minor bugs and performance improvements within the o_spreadsheet component. It includes fixes related to data export, cell alignment, and spreadsheet evaluation, ensuring a smoother and more reliable spreadsheet experience for users. The changes enhance the overall stability and efficiency of the spreadsheet functionality.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/ceae12a2c7 [REL] 19.1.4 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/ceae12a2c7 [REL] 19.1.4 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/2c591c567a [IMP] xlsx: export clip [Task: 5368130](https://www.odoo.com/odoo/2328/tasks/5368130) https://github.com/odoo/o-spreadsheet/commit/9d219632d5 [IMP] export: export align left when the cell content is a number; [Task: 5368130](https://www.odoo.com/odoo/2328/tasks/5368130) https://github.com/odoo/o-spreadsheet/commit/d19cfe01d6 [PERF] evaluation: fast predicate path for empty strings [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/5a50436e1e [FIX] range: add result changeType [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/a03d6a506f [FIX] range: adapt string XC on sheet rename [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/2507cde16d [FIX] range: rename parameter [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/1d76d8a84a [FIX] range: add range to NONE [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/c823920117 [FIX] Actions: ensure the sequence is applied on action children [Task: 5452669](https://www.odoo.com/odoo/2328/tasks/5452669) https://github.com/odoo/o-spreadsheet/commit/748c536d03 [FIX] helpers: export chart check type from runtime config [Task: 5446988](https://www.odoo.com/odoo/2328/tasks/5446988) https://github.com/odoo/o-spreadsheet/commit/5019c8bf33 [PERF] evaluation: don't spread single element matrix [Task: 5491138](https://www.odoo.com/odoo/2328/tasks/5491138) https://github.com/odoo/o-spreadsheet/commit/45609432a1 [FIX] evaluation: remove spread relation [Task: 5491138](https://www.odoo.com/odoo/2328/tasks/5491138) https://github.com/odoo/o-spreadsheet/commit/806aa67d31 [FIX] composer: prevent autocomplete from closing on grid icon drag [Task: 5392156](https://www.odoo.com/odoo/2328/tasks/5392156) https://github.com/odoo/o-spreadsheet/commit/eb5b04a454 [FIX] vectorization: fix error message on size mismatch [Task: 5331324](https://www.odoo.com/odoo/2328/tasks/5331324) https://github.com/odoo/o-spreadsheet/commit/4c021d2564 [FIX] chart: ignore NoChanges in gauge/scorecard side panel errors [Task: 5478288](https://www.odoo.com/odoo/2328/tasks/5478288) https://github.com/odoo/o-spreadsheet/commit/849d2dec16 [FIX] header_size: wrong row size from wrapped number [Task: 4878338](https://www.odoo.com/odoo/2328/tasks/4878338) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update resolves a technical issue within the Odoo spreadsheet plugin, specifically impacting the quality control and sales management modules. The change adjusts arguments used in a key function, ensuring the spreadsheet correctly processes data and improves overall plugin performance. This ensures accurate data synchronization within these core business processes.
Original PR description
…s args See https://github.com/odoo/o-spreadsheet/commit/6533266efa Task: 5095364
This update fixes a critical issue with how strings are processed in Odoo's web framework, ensuring accurate template rendering and test results. The changes also streamline translation management and improve code clarity, leading to more reliable and maintainable applications.
Original PR description
### [[FIX] web: cleanup string-related utils](https://github.com/odoo/odoo/pull/241068/changes) This commit cleans up several utility files relating to string-parsing and translations. Main changes…
### [[FIX] web: cleanup string-related utils](https://github.com/odoo/odoo/pull/241068/changes) This commit cleans up several utility files relating to string-parsing and translations. Main changes are: - fixed `sprintf` and related functions: before this commmit, string substitutions were incorrectly inserted in the template string, and it was actually reflected in a test (template : `"<p>%s</p>%s"` => test incorrectly asserted that both strings were inserted in the first "%s" and "undefined" was inserted in the second); - to replicate the Python homonymous behaviour: "%s" characters can now be escaped in "sprintf-ed" strings by adding an additional "%" sign before the expression; - unification of translations via a TranslatedString class (which will also simplify external overrides); - unified API for some utility functions sharing the same purpose (typically: accepting an iterable instead of a list, etc.); - filling missing docstring, re-ordering functions and constants for clarity; - added "headless" tag to some utility functions' tests, when UI is not needed. Enterprise: https://github.com/odoo/enterprise/pull/104939 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241068
This update resolves a stability issue in the IoT testing environment. The test previously relied on an internal detail of the translation system, which could cause failures. Now, translations are fully loaded into the test, ensuring reliable and consistent results.
Original PR description
Before this commit, a test in iot was looking at the 'values' key of a LazyTranslatedString to make an assertion. This is not robust, as this is an implementation detail internal to the translation system. To fix this, the translations have been "allowed" (i.e. loaded) in the test, ensuring that the returned value is a string and not a lazy-translated string. Community: https://github.com/odoo/odoo/pull/244588
This update fixes an issue where product standard prices weren't correctly converted to the Point of Sale currency, leading to incorrect pricing calculations when using pricelists. The fix ensures all product prices are consistently converted, guaranteeing accurate pricing in the PoS system and preventing pricing discrepancies.
Original PR description
The standard price of the products were not converted to the currency of the PoS journal, which could lead to issues when creating pricelist items based on the standard price. Steps to reproduce: ------------------- * Change the currency of any PoS journal to a different currency than the company currency. * Create a product with a standard price > 0. * Create a pricelist that uses the standard price as a base price. (e.g. price = standard price * 2) * Add this product to a PoS order > Observation: The price is not correctly computed according to the pricelist, because the standard price was not converted to the PoS currency. Why the fix: ------------ We just make sure to convert the standard price of the products when loading the products in the PoS session the same way as we do it for the list price. opw-5124388 Forward-Port-Of: odoo/odoo#244147 Forward-Port-Of: odoo/odoo#241168
This update resolves an issue where customizing the 'Sales: Order Confirmation' email template would trigger a validation error if the 'website_sale' module wasn't installed. The fix ensures the template handles missing 'website_id' fields safely, preventing crashes and allowing users to customize this key sales communication without requiring the additional module.
Original PR description
**Issue** When customizing the *Sales: Order Confirmation* mail template, a validation error appeared if the `website_sale` module was not installed. **Steps to Reproduce** 1. Go to *Settings → Technical → Email Templates* 2. Open *Sales: Order Confirmation* 3. Make inline changes and save each time → A validation error is raised. **Root Cause** The template referenced `website_id` on `sale.order`, which only exists when the `website_sale` module is installed. QWeb pre-evaluates expressions inside `<t t-if="...">` blocks, so even with `hasattr(object, 'website_id')`, the engine still tried to access `object.website_id`, causing the crash. **Fix** Guard all `website_id` usages with explicit checks: `hasattr(object, 'website_id') and object.website_id`, ensuring safe evaluation when the field is missing. opw-5180725 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233825
This update fixes an issue where the VAT summary report for Argentinian invoices was incorrectly calculating totals when multiple IIBB taxes were applied. The fix ensures that VAT amounts are counted accurately, matching the totals displayed in the accounting form, resolving an inflated total calculation.
Original PR description
**Issue** When using a VAT tax marked as price included, together with multiple IIBB taxes on the same invoice, the VAT summary report displays an incorrect total. Specifically, the VAT amount is…
**Issue** When using a VAT tax marked as price included, together with multiple IIBB taxes on the same invoice, the VAT summary report displays an incorrect total. Specifically, the VAT amount is counted multiple times, once for each IIBB tax, leading to an inflated total. **Steps to Reproduce** 1. Install the Accounting app and the Argentinian localization (l10n_ar) 2. Set the 21% VAT Purchase tax as Included in Price 3. Create a vendor bill applying the 21% VAT tax and at least two IIBB taxes 4. Open the VAT summary report for that bill Expected Behaviour: The total in the VAT summary should match the total shown in the accounting form view, with each tax counted only once. **Root Cause** The VAT summary report in the Argentinian localization relies on an SQL query to aggregate tax information for each `account.move`. The query joins `account_move_line` with `account_tax`, `account_tax_group`, and the many-to-many relation table `account_move_line_account_tax_rel`. Each `account_move_line` related to a VAT tax line (via `tax_line_id`) is joined with the `account_move_line_account_tax_rel` table. If that base line is related to multiple IIBB taxes, the join multiplies the VAT line once per IIBB tax since multiple matching rows exist. **Fix** The solution separates the logic for computing tax lines and base lines into two distinct subqueries. Each is aggregated independently to prevent duplication caused by one-to-many and many-to-many joins. The results are then joined using the unique `account_move_line.id`, ensuring each tax amount is counted exactly once in the final totals. opw-4776861 Forward-Port-Of: odoo/enterprise#98933 Forward-Port-Of: odoo/enterprise#85873
This update resolves a technical issue that was preventing the employee version timeline from automatically saving. The fix involved updating the test code to use a reliable time freezing method, ensuring data is saved correctly. This improves the stability and reliability of the employee version timeline feature.
Original PR description
As runbot faketimes test fail because the usage of dynamic dates now the test uses freeze_time Task#5717031 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244540
This update resolves an issue where clicking links within the Odoo chat window on mobile devices would cause the window to remain open and block the new page from being visible. The fix automatically folds the chat window after a link click, ensuring users can seamlessly access the linked page. This enhances usability and prevents a frustrating user experience.
Original PR description
Clicking on an odoo link in the chat window will take the user to the related page in odoo. However, in mobile view, the chat window remains unfolded and covers the entire page, so the user can't see the newly opened page below the chat window unless they fold the chat window. This change fixes this by folding the chat window in mobile view when clicking an odoo link inside the chat window. task-4762503 Forward-Port-Of: odoo/odoo#244549 Forward-Port-Of: odoo/odoo#208440
3 changes
Enhancements to existing features
This update organizes UBL test files for better compatibility with future move formats and improved schema validation. The change improves the structure of test data, streamlining development and testing processes related to UBL invoice generation.
Original PR description
This commit rearranges the UBL test files' subfolder to be one level higher, from `export/bis3/be` to `export/bis3/invoice/be`, in preparation for supporting different move formats and for better ignore schema support. task-4891206 Forward-Port-Of: odoo/odoo#244665
Resolved issues and error corrections
This update fixes an error that occurred when users removed the start date of a leave request and then assigned a resource. The fix ensures the system correctly calculates the calendar ID for leave records, regardless of whether a contract start/end date is present, improving the reliability of leave scheduling.
Original PR description
Currently, an error occurs when user sets the resource on a resource leave. **Steps to Reproduce:** - Install `hr_contract` with demo data. - Go to `Resource Time Off`. - Create a new record and…
Currently, an error occurs when user sets the resource on a resource leave. **Steps to Reproduce:** - Install `hr_contract` with demo data. - Go to `Resource Time Off`. - Create a new record and remove the `start date` value. - Select the `Anita Oliver` resource `(employee record with running contract)`. **Error:** `TypeError: '<=' not supported between instances of 'datetime.datetime' and 'bool'` **Cause:** This error occurs when the user removes the start date and sets a resource that is linked to an employee with a contract. In this case, the system groups leave records based on the contract [1], and while computing calendar_id for the leave, it filters records by checking whether the leave start date falls between the contract start and end dates [2]. Since the leave start date is False, the comparison raises the error. Another issue is that when the user changes the start date, the calendar_id should be updated based on the employee’s current contract. **Fix:** This commit ensures that when setting or changing the resource_id, for contracts with and without a start date, the calendar_id is computed correctly. [1]: https://github.com/odoo/odoo/blob/5f8336c7d8ab891103a3035a9ebb5242cfa46ce6/addons/hr_contract/models/resource_calendar_leaves.py#L17 [2]- https://github.com/odoo/odoo/blob/5f8336c7d8ab891103a3035a9ebb5242cfa46ce6/addons/hr_contract/models/resource_calendar_leaves.py#L29 **No Task ID** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241638
This update resolves a previous issue where printer checks caused delays in printing. By allowing each printer driver to manage its own connection, the system now avoids long waits and significantly improves printing speed. This enhances the overall user experience.
Original PR description
Before this commit, the `printer_interface_L` and `printer_driver_L` shared a single `cups.Connection` instance guarded with a `Lock`. This meant that while the interface for checking for new printers (which can take 10-15 seconds), all printers were being blocked from printing until it was finished. After this commit, each driver creates its own `cups.Connection` and `Lock`. This means they should never block each other, and prevents long pauses when trying to print. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
7 changes
Enhancements to existing features
This update optimizes how Odoo generates reports by grouping related database queries. Previously, each report filter required a separate SQL query, which was slow. Now, multiple filters targeting the same data are combined into a single query, significantly speeding up report generation times – specifically, the Generic Balance Sheet now runs in 36 seconds instead of 1 minute 35 seconds.
Original PR description
Before this commit, the 'domain' engine was never batched: one expression to evaluate caused one SQL query to be run just for it. With this commit, we group domains that could be evaluated together. Essentially, when we have domains targetting the same many2one field of account.move.line (typically account_id, with conditions like 'account_id.code' or 'account_id.account_type'), we run only one SQL query for all of them, targetting all the move lines according to the report filters. Then, we iterate on its result for each domain to evaluate. When iterating over the results, we filter the ones we keep by searching separately on each traversing model (in our example, account.account), to isolate the ones that are actually targetted by each expression. Tested on our prod. With this, opening the Generic Balance Sheet goes from 1min 35s to 36s. opw-5130725 Forward-Port-Of: odoo/enterprise#101725
Resolved issues and error corrections
This update prevents excessive email notifications to managers when employees submit expenses. Previously, every state change triggered an email, leading to potential spam. Now, a weekly email is automatically sent to managers only if they have outstanding expenses awaiting approval, streamlining the approval process.
Original PR description
When an employee submits an expense and assigns a manager, an approval activity is scheduled. However, email notifications are now disabled to avoid spamming the assigned managers. * Prevent notifying the expense manager when expense state changes. * Email 'Next expense is waiting your approval' is scheduled to be sent to the manager once a week if the manager has any expenses left to approve. task-4676396 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210614
This update fixes several issues within the o_spreadsheet library, improving its performance and stability. It includes bug fixes related to spreadsheet calculations, data export, and chart rendering, ensuring accurate data representation and a smoother user experience. This update is part of the 18.3 release.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/b7e5d912d0 [REL] 18.3.33 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/b7e5d912d0 [REL] 18.3.33 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/a09dfc8fe1 [FIX] range: add result changeType [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/6533266efa [FIX] range: adapt string XC on sheet rename [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/3de6a75f5a [FIX] range: rename parameter [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/0e22d1fcc3 [FIX] range: add range to NONE [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/cf8c57066d [FIX] Actions: ensure the sequence is applied on action children [Task: 5452669](https://www.odoo.com/odoo/2328/tasks/5452669) https://github.com/odoo/o-spreadsheet/commit/d48cfc2f24 [PERF] evaluation: don't spread single element matrix [Task: 5491138](https://www.odoo.com/odoo/2328/tasks/5491138) https://github.com/odoo/o-spreadsheet/commit/dbdea6a2ca [FIX] evaluation: remove spread relation [Task: 5491138](https://www.odoo.com/odoo/2328/tasks/5491138) https://github.com/odoo/o-spreadsheet/commit/0158c42fa2 [FIX] chart: ignore NoChanges in gauge/scorecard side panel errors [Task: 5478288](https://www.odoo.com/odoo/2328/tasks/5478288) https://github.com/odoo/o-spreadsheet/commit/869ef2e9d8 [FIX] vectorization: fix error message on size mismatch [Task: 5331324](https://www.odoo.com/odoo/2328/tasks/5331324) https://github.com/odoo/o-spreadsheet/commit/f35a0cf0b3 [IMP] xlsx: export clip [Task: 5368130](https://www.odoo.com/odoo/2328/tasks/5368130) https://github.com/odoo/o-spreadsheet/commit/c4b22807c8 [IMP] export: export align left when the cell content is a number; [Task: 5368130](https://www.odoo.com/odoo/2328/tasks/5368130) https://github.com/odoo/o-spreadsheet/commit/9213f2ee9e [FIX] header_size: wrong row size from wrapped number [Task: 4878338](https://www.odoo.com/odoo/2328/tasks/4878338) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update resolves a minor performance issue within the o-spreadsheet plugin for quality control and sales management. Specifically, the way ranges are adapted has been optimized, resulting in faster spreadsheet loading and responsiveness. This ensures a smoother user experience for these key business processes.
Original PR description
…s args See https://github.com/odoo/o-spreadsheet/commit/6533266efa Task: 5095364
This update corrects a technical issue where Mexican tax documents weren't being properly updated. By forcing a write-date update, the system now accurately reflects the document's status, ensuring compliance with Mexican tax regulations. This resolves a previous limitation in the update process.
Original PR description
Before the commit 8b118a7, the search of the documents to update has been limited and ordered. With the actual domain the records to update will be most of the time the same because is not being updated. To fix this issue we force to update it. OPW-5368047 Forward-Port-Of: odoo/enterprise#103272
This update fixes a potential issue where Microsoft calendar synchronization could fail due to a short timeout when communicating with Microsoft's services. Now, administrators can adjust the timeout setting to accommodate slower environments or larger calendars, preventing synchronization failures and duplicate event creation. This enhances the reliability of calendar syncing.
Original PR description
**Description of the issue/feature this PR addresses:** Microsoft calendar synchronization may fail in environments with slower Microsoft Graph responses or large calendars because Graph API calls…
**Description of the issue/feature this PR addresses:** Microsoft calendar synchronization may fail in environments with slower Microsoft Graph responses or large calendars because Graph API calls triggered after commit use a fixed 3-second timeout. This can lead to repeated synchronization failures even though the operation would succeed with slightly more time. Additionally, when creating events, the Microsoft Graph request may time out after the event is successfully created on Microsoft’s side but before the response containing the event ID is returned. In this case, Odoo does not store the ID of the event and may create the same event again during the next sync, resulting in duplicate events. **Current behavior before PR:** Microsoft Graph requests (insert, update, delete) are executed with a hardcoded 3-second timeout. If the Graph API response takes longer: • the synchronization fails, • and in the case of event creation, Odoo may not receive the Microsoft event ID even though the event was created remotely, which can lead to duplicate events in Odoo. **Desired behavior after PR is merged:** The Microsoft Graph request timeout is configurable via the optional system parameter `microsoft_calendar.graph_timeout`. If the parameter is not set, the behavior remains unchanged (default 3 seconds). Administrators can increase the timeout to allow successful synchronization in slower environments or with large datasets, reducing synchronization failures and avoiding duplicate event creation caused by missing Microsoft IDs. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244461 Forward-Port-Of: odoo/odoo#241921
This update resolves a potential issue where Microsoft calendar synchronization could fail in slower environments. A previous timeout limit was too short, causing delays. This change allows for a configurable timeout, increasing the reliability of calendar syncing and ensuring appointments are properly synchronized.
Original PR description
Microsoft calendar sync can fail in slower environments due to a fixed 3s timeout for Graph requests triggered after commit. See community changes for details. Forward-Port-Of: odoo/enterprise#104916
8 changes
Enhancements to existing features
This update organizes UBL test files for better compatibility with future move formats and improved schema validation. The change simplifies testing and prepares the system for broader support, enhancing the reliability of UBL invoice processing.
Original PR description
This commit rearranges the UBL test files' subfolder to be one level higher, from `export/bis3/be` to `export/bis3/invoice/be`, in preparation for supporting different move formats and for better ignore schema support. task-4891206 Forward-Port-Of: odoo/odoo#244665
Resolved issues and error corrections
This update resolves an issue where invoices sent to Peppol failed validation due to an incorrect UNECE code. The fix removes a specific code ('HD') that was causing the error, ensuring invoices comply with Peppol standards and preventing delivery failures.
Original PR description
**Steps to reproduce:** - Use a Belgian company - Create a Belgian contact with "EU Standard (Peppol Bis 3.0)" as eInvoice format - Create an invoice for that customer with a product using "Pack of 6" as unit of measure - Confirm the invoice - Send it to Peppol **Issue:** The validation of the invoice fails with the following error: "[BR-CL-23]-Unit code MUST be coded according to the UN/ECE Recommendation 20 with Rec 21 extension" **Cause:** The UNECE code used for "Pack of 6" UoM is "HD". "HD" is a correct UNECE code for "Half Dozen". However, it is not part of the subset of codes accepted by Peppol. opw-5463212 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where invoices couldn't be processed correctly when multiple payment methods shared the same code. The fix ensures payment method codes are read-only to prevent conflicts and adds a database constraint to enforce unique codes, ensuring accurate CFDI invoice generation for Mexican businesses.
Original PR description
Currently, an error occurs when a user tries to post an invoice using a payment method that shares the same code as another payment method. Steps to replicate: - Install `l10n_mx_edi` and…
Currently, an error occurs when a user tries to post an invoice using a payment method that shares the same code as another payment method.
Steps to replicate:
- Install `l10n_mx_edi` and `accountant` with demo and switch to `ZAPATERIA URTADO ÑERI` (Mexican company).
- Go to `Accounting > Configuration > Payment Way Codes (MX)`.
- Open `Efectivo` and change its code to `02`.
- Create a new Invoice, select `Efectivo` in the Payment Way.
- Add a customer and a move line, then confirm the invoice and send it (make sure CFDI is checked).
Error:
```
File '/home/odoo/src/enterprise/19.0/l10n_mx_edi/models/account_move.py', line 424, in _l10n_mx_edi_get_extra_invoice_report_values
cfdi_infos['payment_way'] = f'{payment_way} - {payment_method.name}'
File '/home/odoo/src/odoo/19.0/odoo/orm/fields.py', line 1659, in __get__
record.ensure_one()
File '/home/odoo/src/odoo/19.0/odoo/orm/models.py', line 5934, in ensure_one
raise ValueError('Expected singleton: %s' % self)
ValueError: Expected singleton: l10n_mx_edi.payment.method(1, 22)
```
Cause:
- Issue originated through this [PR] that gave access to write on the model.
- As the user made the codes of two payment methods same, the [search] returned two records and while accessing `payment_method.name` on two records it results into this error.
Solution:
- Made the fields read-only via XML to prevent users from changing the payment method codes established by the Mexican government.
- Added limit to the search query to prevent multiple records. (for existing DBs that might have changed payment method codes).
- Removed unlink rights on the `l10n_mx_edi.payment.method` model.
- Added a SQL constraint to allow only unique values for the code.
[PR]: https://github.com/odoo/enterprise/pull/38046
[search]: https://github.com/odoo/enterprise/blob/18117c6a9fbf270ace1c551616828a85713d5225/l10n_mx_edi/models/account_move.py#L423
sentry-7171030995
Forward-Port-Of: odoo/enterprise#103944This update corrects a technical issue where a function was being called in the wrong module, causing a potential error during payroll document creation. The fix involves redirecting the call to the correct module, ensuring documents are generated reliably. This resolves a minor operational issue.
Original PR description
Issue: `_check_create_documents` is called in 'hr_payroll' but only defined in 'documents_hr_payroll' Solution: Create a new method that will be redefined in 'documents_hr_payroll' to call `_check_create_documents` opw-5213979
This pull request updates the core spreadsheet library used in Odoo. It includes several bug fixes and improvements related to exporting, calculations, and chart rendering, ensuring data accuracy and stability within Odoo's spreadsheet functionality. These changes enhance the overall performance and reliability of the spreadsheet module.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/2d9316bb99 [REL] 18.2.41 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/2d9316bb99 [REL] 18.2.41 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/606cc9dbbc [FIX] Actions: ensure the sequence is applied on action children [Task: 5452669](https://www.odoo.com/odoo/2328/tasks/5452669) https://github.com/odoo/o-spreadsheet/commit/919525efb7 [PERF] evaluation: don't spread single element matrix [Task: 5491138](https://www.odoo.com/odoo/2328/tasks/5491138) https://github.com/odoo/o-spreadsheet/commit/63f1622dfe [FIX] evaluation: remove spread relation [Task: 5491138](https://www.odoo.com/odoo/2328/tasks/5491138) https://github.com/odoo/o-spreadsheet/commit/c17f9142b8 [FIX] vectorization: fix error message on size mismatch [Task: 5331324](https://www.odoo.com/odoo/2328/tasks/5331324) https://github.com/odoo/o-spreadsheet/commit/907fd22491 [FIX] chart: ignore NoChanges in gauge/scorecard side panel errors [Task: 5478288](https://www.odoo.com/odoo/2328/tasks/5478288) https://github.com/odoo/o-spreadsheet/commit/bad09a586f [IMP] xlsx: export clip [Task: 5368130](https://www.odoo.com/odoo/2328/tasks/5368130) https://github.com/odoo/o-spreadsheet/commit/e89a1d3959 [IMP] export: export align left when the cell content is a number; [Task: 5368130](https://www.odoo.com/odoo/2328/tasks/5368130) https://github.com/odoo/o-spreadsheet/commit/2312e15a4b [FIX] header_size: wrong row size from wrapped number [Task: 4878338](https://www.odoo.com/odoo/2328/tasks/4878338) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update resolves an issue where invoices sent to Viettel's SInvoice system were being rejected due to incorrect decimal formatting. The fix ensures invoices accurately reflect tax amounts by using the currency's standard rounding method, preventing API errors and improving invoice processing.
Original PR description
When sending an invoice to SInvoice (Viettel), the API raises an `INVALID_DECIMAL_POINT_TAX_MONEY` error if the tax amount contains excessive decimal places (e.g., 100.02999999999997). This occurs because the tax amount is currently calculated using simple subtraction (`total - subtotal`). Due to standard floating-point precision issues, this can result in unrounded values that the API rejects. The tax amount calculation is now updated to explicitly use the currency's rounding method, ensuring the value is accepted by SInvoice. task-[5484845](https://www.odoo.com/odoo/project/967/tasks/5484845) Forward-Port-Of: odoo/odoo#244647
This update ensures that delivery carriers are consistently applied across all picking steps, regardless of how they're initially set (sale order or manually). This change addresses a previous limitation where carriers weren't propagated when set on a picking, now enabling logistics teams to manage carrier selection effectively.
Original PR description
Issue Before This Commit: ================================ Previously, the delivery carrier was only propagated between pickings when it was set from the sale order. If the carrier was manually set…
Issue Before This Commit: ================================ Previously, the delivery carrier was only propagated between pickings when it was set from the sale order. If the carrier was manually set on a picking (e.g., during the packing step in a multi-step delivery flow), it was not propagated to the consequent pickings, even when the stock rules had `Propagation of carrier` enabled. Steps to reproduce: ================================ 1. Activate Multi-Step Routes and Delivery Methods. 2. Configure a 3-step delivery route in the warehouse and enable Propagate Carrier on all rules. 3. Create a sale order with a product but without setting a delivery carrier. 4. Confirm the sale order to generate picking. 5. On the first picking (i.e., pick), manually set a delivery carrier (e.g., Local Delivery) and validate. 6. On the next transfer (i.e., pack), observe that the delivery carrier is not propagated. After this commit: ================================ The delivery carrier set on any picking is propagated to subsequent transfers when the corresponding stock rule has `Propagation of carrier` enabled and no carrier is already configured on the next picking. This ensures consistent carrier propagation across all routing configurations (all pull rules, all push rules, and mixed push/pull flows), even when the carrier is configured at the picking level rather than on the sale order. This behavior is required because, in many business scenarios, carrier selection is managed by the logistics team rather than the sales team. task-4454313 Forward-Port-Of: odoo/odoo#202700
This update resolves an issue where the 'Pending' button in the manufacturing order process incorrectly stopped productivity records for all employees involved, instead of just the current one. The fix ensures that only the productivity record associated with the currently logged-in employee is stopped, improving workflow efficiency.
Original PR description
Steps to reproduce the bug:
- Create a storable product P1 with the following BoM:
- Create a new operation OP1
- Create a manufacturing order to produce one unit of P1
- Confirm the manufacturing order
- Log in as Mitchel (admin) and start OP1
- Log in as Marc (demo) and also start OP1
- Click on Pending
Problem:
Both “mrp.workcenter.productivity” records are stopped, instead of stopping only the one linked to
The `button_pending` method was stopping productivity records for all employees linked to the work order.
opw-5453752
Forward-Port-Of: odoo/enterprise#10355330 changes
New functionality added to Odoo
This update introduces a new keyboard shortcut (Ctrl+Alt+M) within the spreadsheet editor to quickly insert comments. This improves efficiency for users who frequently need to add annotations to their spreadsheets, streamlining the workflow and enhancing collaboration. The change is part of a larger task to improve spreadsheet functionality.
Original PR description
## Description:
Add some shortcuts
Task: [5231802](https://www.odoo.com/odoo/2328/tasks/5231802)
## review checklist
- [ ] feature is organized in plugin, or UI components
- [ ] support of duplicate sheet (deep copy)
- [ ] in model/core: ranges are Range object, and can be adapted (adaptRanges)
- [ ] in model/UI: ranges are strings (to show the user)
- [ ] undo-able commands (uses this.history.update)
- [ ] multiuser-able commands (has inverse commands and transformations where needed)
- [ ] new/updated/removed commands are documented
- [ ] exportable in excel
- [ ] translations (\_t("qmsdf %s", abc))
- [ ] unit tested
- [ ] clean commented code
- [ ] track breaking changes
- [ ] doc is rebuild (npm run doc)
- [ ] status is correct in OdooEnhancements to existing features
This update allows users to select multiple values when configuring visibility rules for website forms, specifically with 'Contains' or 'Doesn't Contain' comparators. Previously, these rules only supported single value selections, limiting flexibility. This change improves the user experience and ensures visibility rules align with the underlying multi-value logic of fields like select, checkbox, and radio.
Original PR description
Steps to reproduce: 1. Go to Website -> Edit Mode. 2. Drag and drop a "Contact Us" form. 3. Add two fields: - selection field (e.g. "Author") - text field. 4. Edit the text field's visibility and select comparator "Contains" or "Doesn't Contain". 5. Try selecting multiple values (e.g. "Mitchell Admin" and "Marc Demo"). 6. Only one value can be selected, behaving like equality checks. Before this commit, visibility rules using the "Contains" or "Doesn't Contain" comparator behaved like equality checks. Users were unable to select multiple values when configuring visibility conditions, even when the dependency field supported multi-value logic (select, checkbox, radio). This commit adds support for choosing multiple values when the comparator is "Contains" or "Doesn't Contain". Visibility now evaluates correctly for dependency fields of type select, checkbox or radio. task-4203938
This update enhances the user experience of the signature thank you dialog by modernizing its design and improving readability. The changes include a simplified layout, reduced button sizes, and clearer date formatting, resulting in a more professional and user-friendly experience for customers.
Original PR description
This task improves the user experience in the signature thank you dialog by modernizing its layout, reducing button sizes, truncating long labels, and formatting dates in a more readable way. task-5408501
This update improves website performance by automatically adjusting image sizes based on screen width using 'srcset' support. This reduces loading times, lowers data consumption on mobile devices, and optimizes image delivery for a better user experience. It also ensures proper deletion of image variants when attachments are removed.
Original PR description
*: test_website_modules, web, website_sale, website Currently the `/web/image` and t-field images only have one selectable size whatever the device, which can lead to lower performance and waste of…
*: test_website_modules, web, website_sale, website Currently the `/web/image` and t-field images only have one selectable size whatever the device, which can lead to lower performance and waste of ressources. This PR adds srcset support for the images in the website, so the browser can choose the best size for the screen. Now, if the screen width is reduced, the page can load a smaller sized image to reduce the loading time. This can help increase the performances and lower the data consumption on mid-range and lowcost smartphones. For `/web/image` images, we are generating new images at these sizes: 600, 750, 900, 1080 and 1280 These sizes are optimized so it can fit most phones on the market, while reducing the number of images we have to generate and store. The maximum size being the one selected by the user. To further reduce the number of images, for a size to be generated, it needs to be at least 15% smaller than the original image. For t-field images, we are using the already generated images image_128, image_256 ... image_1920, the maximum size being the size of the `preview_image`. task-4563867
This update improves the email sent to employees after they confirm their appraisals. The email template has been updated to provide a clearer and more professional experience, enhancing communication and user satisfaction. This change focuses on improving the user experience within the HR app.
Original PR description
Task: 5502875
This update enhances the restaurant POS system by automatically summing guest counts when multiple linked tables are used. Previously, each table was counted separately. Now, if two tables are linked, the total number of guests across both tables is accurately displayed, providing a more complete view of customer occupancy.
Original PR description
When two tables are linked in the pos, we would like to sum the guests. Here an example : If Table 1 has two guests and Table 2 has three guests, then Table 1&2 will have five guests. task: 5490906 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243726
This update simplifies the process of generating consolidated invoices from point-of-sale orders. Previously, invalid orders (like those already invoiced) would halt the entire process. Now, any problematic orders are automatically ignored, allowing for more efficient bulk invoice generation for valid orders.
Original PR description
When trying to create a consolidated invoice in the POS from multiple orders, if any of them would not be valid (i.e. invoice already generated, or order still in draft), then Odoo would throw an error and not do anything. Now the orders for which invoices can't be generated will just be ignored, but for the rest of the orders the invoices will be generated as usual. This should make it easier to bulk select and generate invoices only where necessary. Task-[5491082](https://www.odoo.com/odoo/project/1737/tasks/5491082) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243851
This update incorporates new accounting entries for Mexican tax regulations (l10n_mx) and makes adjustments to expense reporting within the HR module. These changes improve compliance with local tax laws and streamline the process for managing employee expenses.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds a warning message to the tax return process, alerting users when the companies they're currently managing don't align with the companies selected for the return. This prevents potential errors and ensures users are accurately reporting their business data for tax purposes.
Original PR description
Adds a warning banner to the return kanban view, when the user's active companies do not match the companies on the return. task-5213029
This pull request updates the o_spreadsheet library, which is used for generating spreadsheets within Odoo. It includes bug fixes, performance improvements, and new features related to exporting data, handling cell formatting, and improving the overall spreadsheet functionality. These changes enhance data accuracy and usability for users.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/fa080c2649 [REL] 19.2.0-alpha.4 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/fa080c2649 [REL] 19.2.0-alpha.4 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/a8558210e1 [IMP] xlsx: export clip [Task: 5368130](https://www.odoo.com/odoo/2328/tasks/5368130) https://github.com/odoo/o-spreadsheet/commit/552671f064 [IMP] export: export align left when the cell content is a number; [Task: 5368130](https://www.odoo.com/odoo/2328/tasks/5368130) https://github.com/odoo/o-spreadsheet/commit/c7dd859e47 [FIX] range: add result changeType [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/a13c409795 [FIX] range: adapt string XC on sheet rename [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/dc2d50df94 [FIX] range: rename parameter [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/02db1afd89 [FIX] range: add range to NONE [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/21d978489f [PERF] evaluation: fast predicate path for empty strings [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/adc4472786 [FIX] Actions: ensure the sequence is applied on action children [Task: 5452669](https://www.odoo.com/odoo/2328/tasks/5452669) https://github.com/odoo/o-spreadsheet/commit/8a81ade707 [FIX] helpers: export chart check type from runtime config [Task: 5446988](https://www.odoo.com/odoo/2328/tasks/5446988) https://github.com/odoo/o-spreadsheet/commit/fe74ceacef [IMP] components: remove native `<select>` inputs [Task: 5213725](https://www.odoo.com/odoo/2328/tasks/5213725) https://github.com/odoo/o-spreadsheet/commit/bc31a7a7cf [PERF] evaluation: don't spread single element matrix [Task: 5491138](https://www.odoo.com/odoo/2328/tasks/5491138) https://github.com/odoo/o-spreadsheet/commit/497936b7e2 [FIX] evaluation: remove spread relation [Task: 5491138](https://www.odoo.com/odoo/2328/tasks/5491138) https://github.com/odoo/o-spreadsheet/commit/56ce121432 [IMP] actions: align dropdown flow with other data validations [Task: 5423990](https://www.odoo.com/odoo/2328/tasks/5423990) https://github.com/odoo/o-spreadsheet/commit/5781c0b632 [FIX] composer: prevent autocomplete from closing on grid icon drag [Task: 5392156](https://www.odoo.com/odoo/2328/tasks/5392156) https://github.com/odoo/o-spreadsheet/commit/9ce94f278a [IMP] charts: showValues is now exported in Excel [Task: 5213598](https://www.odoo.com/odoo/2328/tasks/5213598) https://github.com/odoo/o-spreadsheet/commit/817c020291 [FIX] vectorization: fix error message on size mismatch [Task: 5331324](https://www.odoo.com/odoo/2328/tasks/5331324) https://github.com/odoo/o-spreadsheet/commit/3d9111f2ed [FIX] chart: ignore NoChanges in gauge/scorecard side panel errors [Task: 5478288](https://www.odoo.com/odoo/2328/tasks/5478288) https://github.com/odoo/o-spreadsheet/commit/ea662873a1 [IMP] formatting: unify the formatting with odoo chart views [Task: 5435022](https://www.odoo.com/odoo/2328/tasks/5435022) https://github.com/odoo/o-spreadsheet/commit/fe0dca8520 [IMP] side panel: remove pin [Task: 5447038](https://www.odoo.com/odoo/2328/tasks/5447038) https://github.com/odoo/o-spreadsheet/commit/5ceba0b4aa [REF] cell: getCells returns an array [Task: 5491227](https://www.odoo.com/odoo/2328/tasks/5491227) https://github.com/odoo/o-spreadsheet/commit/2ceff21c29 [PERF] cells: numeric cell id [Task: 5491227](https://www.odoo.com/odoo/2328/tasks/5491227) https://github.com/odoo/o-spreadsheet/commit/889304181e [IMP] style: rotation xlsx export [Task: 5400633](https://www.odoo.com/odoo/2328/tasks/5400633) https://github.com/odoo/o-spreadsheet/commit/e966e74b81 [FIX] style: rotation fix for centered text [Task: 5400633](https://www.odoo.com/odoo/2328/tasks/5400633) https://github.com/odoo/o-spreadsheet/commit/66249da831 [IMP] style: rotation reduce rotation angle precision [Task: 5400633](https://www.odoo.com/odoo/2328/tasks/5400633) https://github.com/odoo/o-spreadsheet/commit/3299483fc9 [FIX] header_size: wrong row size from wrapped number [Task: 4878338](https://www.odoo.com/odoo/2328/tasks/4878338) 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>
Resolved issues and error corrections
This update resolves an issue where a link popover would incorrectly appear on input fields within protected nodes. The fix ensures that popovers only appear when an editable input is focused, improving the user experience and preventing unexpected behavior when editing content within links.
Original PR description
Problem: When the previous focus was on a link, then focusing an input inside a non-editable protected node shows the link popover on the input. Cause: Given the following structure: `<a>a</a><span…
Problem: When the previous focus was on a link, then focusing an input inside a non-editable protected node shows the link popover on the input. Cause: Given the following structure: `<a>a</a><span protected non-editable><input></span>` If the selection is inside the link and the link preview popover is visible, clicking on the input triggers a selection change. Since the input is inside a protected node, the editor keeps the previous editable selection. As a result, `LinkPlugin.handleSelectionChange` still treats the selection as being inside the link and reopens the link popover. Solution: Only show the link popover when the `activeElement` is the editable element. Steps to reproduce: - Add a link. - Upload a file. - Place the selection on the link. - Focus the file name input to rename it. - Observe that the link popover is shown on the file name input. opw-5414078 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240016
This update resolves an issue where registration emails for events were displaying duplicate headers and footers. The fix removed a redundant email layout setting, ensuring that only the event's standard header and footer are included in the sent emails. This improves the email experience for attendees.
Original PR description
**Steps to reproduce:** - Go to Event module - Go to an open event - Register for the event - Go to the Attendees of the event - On the attendee record, click `Send by Email` - The received email shows twice the header and footer **Issue:** Encapsulating notification layout was applied with `default_email_layout_xmlid` but the main template used is `event_registration_mail_template_badge` which already has its own header and footer. **Fix:** Removed the `default_email_layout_xmlid` opw-5032767 Forward-Port-Of: odoo/odoo#236667
This update fixes default printer settings for Point of Sale (POS) transactions. Now, new receipt printers default to 'receipt' mode, while preparation printers default to 'preparation'. Additionally, a new requirement has been added for preparation printer categories to prevent errors and ensure accurate setup.
Original PR description
The goal of this pr was to set the printer type by default as `receipt` when a quick create was done from the "Receipt Printers" category and as `preparation` when it's done in the "Preparation Printers" category, both in `pos.config` and in `res.config`. Also, in the `pos.printer` form view, for a preparation printer, products categories are now required when creating a printer to avoid user oversights. And, a quick fix to make the default receipt printer as required, under the "Receipt Printers" category in the `res.config` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242780
This update fixes an issue preventing QR codes from being generated for invoices. The change allows QR codes to be created through automation rules and API calls by providing a fallback mechanism for accessing necessary configuration data. This ensures invoices with payment links are correctly generated.
Original PR description
Versions -------- - saas-18.3+ Steps ----- 1. In Accounting/Invoicing settings, enable "Add QR-code link on PDF"; 2. create an automation rule for the `account.move` model; 3. set "Trigger" to…
Versions
--------
- saas-18.3+
Steps
-----
1. In Accounting/Invoicing settings, enable "Add QR-code link on PDF";
2. create an automation rule for the `account.move` model;
3. set "Trigger" to "Create & Edit";
4. set "Apply on" domain to `[("state", "=", "posted")]`;
5. set "When updating" to "Status";
6. add an action to execute the following code:
```python
env['account.move.send']._generate_and_send_invoices(records)
```
7. call `action_post` on an invoice via RPC or Odoo Shell.
Issue
-----
> odoo.addons.base.models.ir_qweb.QWebException: Error while render the template
> RuntimeError: object is not bound
Cause
-----
In order to add a payment link QR code to the invoice[^1], it needs to generate an access token for the portal. This happens via the `generate_access_token` function from `odoo.addons.payment.utils`. Issue is that it relies on having access to a `odoo.http.request` object, so that it can use its `env` to retrieve the `database.secret` config parameter.
When this flow gets triggered via an API call (or Odoo Shell), the `request` object is unbound, causing the error.
[^1]: feature added via commit bcb73cd159885
Solution
--------
Introduce an optional `env` kwarg to `generate_access_token`, falling back on `request.env` if it's not provided.
opw-5487075
Forward-Port-Of: odoo/odoo#244703
Forward-Port-Of: odoo/odoo#243528This update resolves a test failure within the Odoo ecommerce module. The previous code included unnecessary dependencies and configurations that were causing test errors. The changes removed these elements, ensuring the tests run correctly and accurately reflecting the ecommerce order flow.
Original PR description
The code of the payment provider is not relevant to the test_ecommerce_paid_order_is_hidden_in_pos test, and pos_sale doesn't have payment_custom in the dependencies. It caused tests to fail so I removed it. Runbot Build Error-233461 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232638
This update fixes a visual issue where the 'Invite a User' dialog in the discuss app was not taking up the full width of the screen. The fix ensures the dialog displays correctly on various screen sizes, providing a consistent user experience. This improves usability and prevents a potential distraction for users.
Original PR description
Before this commit, the channel invitation dialog had its content not taking the whole width of modal. Steps to reproduce: - Have window take about half size of a 1080p monitor - Open "General" in…
Before this commit, the channel invitation dialog had its content not taking the whole width of modal. Steps to reproduce: - Have window take about half size of a 1080p monitor - Open "General" in discuss app - Open the Member list - Click on "Invite a User" => Invitation dialog takes about half of the width of modal. This happens because the channel invitation was wrongly assumed to be inside a resizable panel, and thus the size was limited by the max width when in resizable panel. The rule to determine whether the action is in a resizable panel was poor: any action panel in discuss app was considered as resizable. This commit fixes the issue by limiting the responsive sizing, intended only for resizable panel, only when the action panel has the `.o_resizable_panel`, which is specific to when action panel is being used inside resizable panel. Task-5804100 Before / After <img width="625" height="231" alt="Screenshot 2026-01-20 at 16 12 31" src="https://github.com/user-attachments/assets/10c02939-c4c1-47fa-82f8-4d8d037d3f0c" /> <img width="621" height="231" alt="Screenshot 2026-01-20 at 16 12 18" src="https://github.com/user-attachments/assets/eec1447c-cb42-4751-b17a-ff7b2e70b8e9" /> Forward-Port-Of: odoo/odoo#244777
This update prevents users from removing all avatars from a website profile by rapidly clicking the 'Remove avatar' button. The original code struggled with asynchronous updates, allowing for unintended avatar removal and subsequent errors. This fix ensures a stable avatar management experience.
Original PR description
**Problem** Users could remove all avatars from the `s_avatars` snippet by clicking the "Remove avatar" button rapidly. This also causes an error when attempting to add a new avatar afterward.…
**Problem** Users could remove all avatars from the `s_avatars` snippet by clicking the "Remove avatar" button rapidly. This also causes an error when attempting to add a new avatar afterward. **Reproduction** 1. Drop the `s_avatars` snippet. 2. Click very quickly on the "Remove avatar" button multiple times. **Cause** The code relied on preventing the removal of the last element by disabling the "Remove avatar" button based on DOM state. Because rendering is asynchronous, rapid clicks could be registered before the button was disabled, allowing the last avatar to be removed. **Fix** Add a check in `AvatarsHeaderMiddleButtons.removeAvatar` to prevent removal when only one avatar remains, covering cases where clicks occur before the UI updates. The components `CarouselItemHeaderMiddleButtons` and `NavTabsHeaderMiddleButtons` use the same logic of `AvatarsHeaderMiddleButtons` and could fail similarly, thus they have been fixed too, even if the bug is not currently reproducible on them. task-5462816 Forward-Port-Of: odoo/odoo#243065
This update addresses minor UI inconsistencies and improves the stability of the o-spreadsheet module. Specifically, the code has been adapted to align with a recent release and resolves issues related to styling and functionality within the spreadsheet interface. These changes ensure a smoother and more reliable user experience.
Original PR description
see https://github.com/odoo/odoo/pull/244983
This update ensures that Live Chat reports accurately group conversations by day of the week, taking into account the user's preferred week start day (Sunday or Monday) as defined in their language settings. Previously, the reports consistently started the week on Sunday, regardless of user preference. This change improves the accuracy and usability of Live Chat reporting.
Original PR description
**Current behavior before PR**: The "Day of Week" group by in the Live Chat report always treats Sunday as the start of the week, ignoring the "First Day of Week" configured in the user's language settings. **Desired behavior after PR is merged**: "Day of Week" group by now correctly takes into account the user's configured "First Day of Week", as set in their language settings. **task**-[4808640](https://www.odoo.com/odoo/project.task/4808640) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243503 Forward-Port-Of: odoo/odoo#213307
This update resolves an issue where invoices sent to Viettel's SInvoice system were failing due to incorrect decimal formatting. The fix ensures the tax amount is calculated using the correct currency rounding method, guaranteeing compatibility with the SInvoice API and preventing invoice delivery errors.
Original PR description
When sending an invoice to SInvoice (Viettel), the API raises an `INVALID_DECIMAL_POINT_TAX_MONEY` error if the tax amount contains excessive decimal places (e.g., 100.02999999999997). This occurs because the tax amount is currently calculated using simple subtraction (`total - subtotal`). Due to standard floating-point precision issues, this can result in unrounded values that the API rejects. The tax amount calculation is now updated to explicitly use the currency's rounding method, ensuring the value is accepted by SInvoice. task-[5484845](https://www.odoo.com/odoo/project/967/tasks/5484845) Forward-Port-Of: odoo/odoo#244647
This update resolves a bug that caused the column layout within the HTML editor to break after performing undo operations. Specifically, changing the number of columns repeatedly resulted in a distorted layout. This fix ensures the column structure remains intact, improving the user experience when editing layouts.
Original PR description
**Current behavior before PR:** Steps to reproduce: - Create 3 columns using powerbox - Convert it into 4 columns - Press ctrl + z to make it 3 columns - Convert it into 4 columns again using powerbox Notice that column structure is broken. This happens because after undo operation, in `changeColumnsNumber` the regex replaces column div className incorrectly leading to invalid colund structure. **Desired behavior after PR is merged:** This PR ensures that column structure doesn't break. task-5468578 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242500
This update enhances the security of user profile editing by utilizing a new internal helper function, '_can_edit_country()', to determine if a user is authorized to change their country setting. This change aligns with recent Odoo updates (saas-18.4) and ensures a more secure profile management process.
Original PR description
In 'save_edited_profile()', we check that the user can edit his country_id if he tries. As from saas-18.4, a new helper '_can_edit_country()' is available. This commit uses that helper to perform the check. Follow-up of #239789 Task-5331916 Forward-Port-Of: odoo/odoo#244795 Forward-Port-Of: odoo/odoo#244694
This update fixes an issue where changing the rental period of an order didn't automatically update related rental transfers. The fix mimics the rescheduling behavior of purchase orders, ensuring that rental transfers are accurately adjusted when the rental period is modified. This improves the reliability of rental order management.
Original PR description
### Steps to reproduce: - In the settings enable "Rental Transfers" - Create a storable and rentable product P - Create and confirm a rental order for 1 unit of P - Change the rental period to 10 days in the future #### > The rental tranfers were not updated accordingly ### Cause of the issue: Nothing is currently implemented to reschedule the rental transfers. ### Fix: We somewhat mimic the reschedule purchase behavior: https://github.com/odoo/odoo/blob/6ca34a0f5347e0611cde95453119dda8b40fa589/addons/purchase_stock/models/purchase_order_line.py#L98-L101 But we rely on the order itself rather than its order lines since the `start_date` and the `return_date` are related fields so that no `write` is triggered when the order is rescheduled: https://github.com/odoo/enterprise/blob/96a80f583a0ca502ff06bc05d03775c76c6a7537/sale_renting/models/sale_order_line.py#L18-L19 opw-5158508 Forward-Port-Of: odoo/enterprise#103602 Forward-Port-Of: odoo/enterprise#101334
This update fixes an issue where product prices in Point of Sale weren't accurately calculated when using different currency settings for the PoS. The fix ensures standard prices are converted to the PoS currency, preventing incorrect pricelist calculations and ensuring accurate order totals. This improves the reliability of pricing within the POS system.
Original PR description
The standard price of the products were not converted to the currency of the PoS journal, which could lead to issues when creating pricelist items based on the standard price. Steps to reproduce: ------------------- * Change the currency of any PoS journal to a different currency than the company currency. * Create a product with a standard price > 0. * Create a pricelist that uses the standard price as a base price. (e.g. price = standard price * 2) * Add this product to a PoS order > Observation: The price is not correctly computed according to the pricelist, because the standard price was not converted to the PoS currency. Why the fix: ------------ We just make sure to convert the standard price of the products when loading the products in the PoS session the same way as we do it for the list price. opw-5124388 Forward-Port-Of: odoo/odoo#244147 Forward-Port-Of: odoo/odoo#241168
This update prevents the API documentation endpoint from crashing when encountering models not currently defined in Odoo's code. The fix addresses a technical issue where the system would fail to load documentation for certain models, improving the reliability of the API. This ensures consistent access to documentation for all models within the Odoo system.
Original PR description
When accessing the API documentation endpoint (`/doc`), the server could crash with an Internal Server Error if the database contained ir.model records for models that are not loaded in the current registry. Steps to reproduce: 1. Insert a record into `ir_model` with `model='ghost.model'` and `state='base'`. 2. Open `/doc`. 3. The server raises a `KeyError: 'ghost.model'`. Root Cause: The `/doc` endpoint iterates over all records in `ir.model`. For each record, it attempts to resolve the Python class using `self.env[ir_model.model]` to check access rights. If a model exists in the database with `state='base'`, Odoo expects it to be defined in the Python source code and does not generate it dynamically. If the corresponding Python class is missing (e.g., from an old module), it is never added to the registry, causing the lookup to fail with a `KeyError`. opw-5401782 Forward-Port-Of: odoo/odoo#241483
This update fixes a problem where users couldn't properly update the linked data source selection within charts. Previously, the interface would incorrectly display the old data source even after a new one was selected. This ensures data visualizations accurately reflect the chosen data sources.
Original PR description
Currently, when a user links a chart to an odoo datasource, the sidepanel is not updated properly when the user tries to select a datasource from the same type as the one already selected. How to reproduce: - In a spreadsheet, insert a chart and a list datasource - duplicate the list datasource - in the chart sidepanel, select list#1 as link - now try to select list#2 -> the model update the link to list#2 but the interface still shows list#1. Task-5725964 Forward-Port-Of: odoo/enterprise#104887
This update resolves an error that prevented users from opening the Gantt view within the Project Stages feature. The fix corrects a coding issue that occurred when the Gantt view was accessed without pre-existing project data, ensuring a smoother user experience.
Original PR description
Currently, an error occurs when the user opens the Gantt view. **Steps to Reproduce:** - Install `timesheet_grid` without demo data. - Go to `Settings` and enable `Project Stages`. - Go to `Projects` and switch to the `Gantt view`. `UnboundLocalError: cannot access local variable 'project' where it is not associated with a value` This error occurs because, in [this commit], line [1] is mistakenly placed outside the loop. If self has no records, project is not defined, and accessing project.date_start raises an error. This commit moves the line inside the loop. [1]: https://github.com/odoo/enterprise/blob/34feeda7d0835d8c65d91493314133b8e83610d1/timesheet_grid/models/project_project.py#L50 [this commit]: https://github.com/odoo/enterprise/commit/c3296d1441400d20e3815207baa1188b5cb8fd93#diff-59e7d75aff5c1e890cd536834137eac5cd3ad185cb45ee1e157be15402cbc90fR50 sentry-7204644855 Forward-Port-Of: odoo/enterprise#105009
This update resolves an issue where the 'Import Bank Statement' feature incorrectly selected a journal in multi-company Odoo instances due to elevated server permissions. The fix ensures the import process filters by the currently chosen company, preventing incorrect journal selection and improving data accuracy. A new test confirms the fix's reliability.
Original PR description
Issue: when using the server action 'Import Bank Statement' the code would not filter on the currently selected company for choosing the journal on which to encode the bank statement and simply take the first result. Because the server action is running with sudo rights, in a multi-company environment more then one journals are found and the selected one is often wrong. Solution: filter on company during the selection of the journal. Note: a test was added in which we run the function with sudo rights to ensure an error is raised when the journal does not exist on the currently selected company, even if it is present on another company. Task-5494685 Forward-Port-Of: odoo/enterprise#105003 Forward-Port-Of: odoo/enterprise#104326
This update resolves a bug that prevented correct currency display when changing inactive currencies in invoices and bills. The fix ensures that the system properly fetches and uses the correct currency rates, preventing errors and crashes when viewing or editing these documents. This improves the reliability of financial reporting.
Original PR description
In the form view of invoices and bills, if the currency is changed to an inactive one, an option to activate it from the form view was available, but when the button is pressed the front-end doesn't receive the new data related to the currency which resulted in unexpected errors when trying to view the invoice/bill or the list of invoices/bills task-5412003 Forward-Port-Of: odoo/odoo#240086
Code cleanup and technical improvements
This update refactors the styling of message bubbles in the dark theme, streamlining the code and subtly enhancing the visual appearance. The changes result in slightly more saturated bubble colors and a more pronounced 3D border effect, improving the overall look and feel in dark mode.
Original PR description
Reduce amount of LOCs to define dark theme version of message bubble colors, to match with the shape of how this is defined in white theme. While the intent of the change is just simpler LOCs, the visual in dark theme has subtle changes: - bubble colors are very slightly more saturated in dark theme - bubble have more visible border, giving more a 3D look Before <img width="778" height="639" alt="before" src="https://github.com/user-attachments/assets/4f4aa3e3-9e2f-44bf-9437-665203831103" /> After <img width="771" height="642" alt="after" src="https://github.com/user-attachments/assets/1c4f4b84-0eb0-45ce-bda3-3a849e93d49d" />
28 changes
New functionality added to Odoo
This update adds support for Finnish Intrastat compliance, allowing businesses to generate and submit required reports automatically. The new module creates CSV files for arrivals and dispatches, simplifies agent VAT configuration, and provides a wizard for easy report submission, ensuring adherence to Finnish customs regulations.
Original PR description
Added a new module to support Finnish Intrastat compliance by generating CSV declarations compatible with the Finnish Customs service. This Includes: - Export arrivals and dispatches reports in CSV format (bundled in ZIP). - Configure agent VAT for arrivals when filed via an agent. - Wizard to download and submit periodic Intrastat reports. task-5049047
Resolved issues and error corrections
This update resolves an issue that prevented the HR module from upgrading correctly after an overtime rule was deleted. The fix disables a constraint that caused errors during the upgrade process, ensuring smoother module updates and preventing potential disruptions to attendance tracking.
Original PR description
**Steps to reproduce** - Install `hr_work_entry_attendance` - Delete one of the overtime rules from the "Default Ruleset", e.g. "Employee Schedule Rule" - Upgrade the `hr` module - Traceback: `psycopg2.errors.CheckViolation: new row for relation "hr_attendance_overtime_rule" violates check constraint "hr_attendance_overtime_rule_if_paid_work_entry_type_defined"` **Cause** The `_if_paid_work_entry_type_defined` constraint added by the `hr_work_entry_attendance` module on overtime rule records will fail when re-creating an overtime rule record when upgrading another module than `hr_work_entry_attendance`, since the module is not loaded and we don't get a default value for the `work_entry_type_id` field. **Fix** Since the ORM cannot manage that, disable forcecreate for these records. Related: https://github.com/odoo/enterprise/commit/f935e62bae7f204ea3f6db8f08b173bdf011c0d2 opw-5428542
This update fixes an issue where document sharing links were incorrectly formatted, preventing users from accessing shared documents. The change moved the invitation link to the mail template, aligning with previous versions and ensuring correct link generation. This improves the user experience for document sharing within the system.
Original PR description
Bug === Since 22446368503fadc0e0bf459dd3c8ab8b8f6624b0 , we use a mail template to share access, but in e3e8d6a6b9423feae4dd88978065bd8799031b2b , we added the link in the standard notification process (because it was done in 18.0). Task-5242208
This update enhances the Odoo database's security by ensuring that queries against the PostgreSQL database always use the correct schema. This prevents potential data corruption and hidden bugs that could arise when multiple schemas are used simultaneously. It addresses a previously reported issue and a related task, strengthening overall database stability.
Original PR description
Safety measure to prevent hidden bugs and data corruption which can happen when multiple schema are used in PostgreSQL. Description of the issue/feature this PR addresses: Related to: - PR #243833 - OPW [opw-5495025](https://www.odoo.com/my/tasks/5495025) - issue reported earlier: #97891 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a problem where the status banner for digitized vendor bills disappeared when auto-posting was enabled. When auto-posting is used, the bill's status jumps directly to 'to_validate', potentially moving to 'done' if the validation process completes before the banner updates. This ensures the status banner accurately reflects the bill's processing stage.
Original PR description
The status banner widget expected the state to be equal to `waiting_validation` once the document was successfully digitized. But when auto-post is used on vendor bills, the state will skip directly to `to_validate` as the bill is posted right after the digitization. It can even be moved to `done` if the validation cron has time to run before the update of the banner. task-[5480954](https://www.odoo.com/odoo/49/tasks/5480954)
This update resolves a hidden bug that could occur when using multiple databases within PostgreSQL. The change ensures queries against the 'pg_class' table correctly reflect the current database schema, preventing inaccurate results and potential data discrepancies. This improves overall system stability and data reliability.
Original PR description
It prevents hidden bugs when multiple schemas are used in PostgreSQL This was mentioned in: - PR odoo/odoo#243967
This update optimizes the loading of live chat expertise data, preventing unnecessary information from being retrieved. Previously, data was fetched regardless of whether it was needed, causing performance slowdowns. Now, expertise data is only loaded when a live chat session is opened, improving responsiveness and efficiency.
Original PR description
Before this commit, the user's live chat expertise were always returned as part of `_init_store_data`. However, this led to a warning in portal tours because the expertises are inserted into the store while the live chat models are not loaded (they are not needed). We shouldn't return useless data. This commit fixes this issue by fetching the data when they will be needed (i.e. when the discuss app is opened with a live chat user). runbot-234137 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves issues impacting the quality of voice transcriptions within the Odoo Enterprise application. By optimizing audio processing and switching to a new transcription model, the system now delivers more accurate and reliable transcriptions, enhancing the user experience.
Original PR description
This PR fixes some issues with the voice transcription feature that were causing poor quality in the transcription. Among the changes: - Removing filtering on the input audio in the `vad_audio_recorder.js` - Reducing buffer size in the `vad_audio_processor.js` to send data more frequently. Hence, avoiding to send data during the VAD silence cutoff. - Changing the model to `whisper-1`. task-5788331
This update completes a previous fix for the spreadsheet module. It ensures that all data upgrades are correctly applied on the user's computer (client-side), improving data consistency and accuracy within the spreadsheet functionality. This resolves a previous oversight and maintains the integrity of spreadsheet data.
Original PR description
Follow up of 682d6ec1ddb825674999e0db1fc0cc48c3be67c5 where I forgot to add the client-side data upgrade Task-5477426 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the website's accordion functionality by allowing users to easily navigate to specific sections within accordions. The changes automatically scroll to and expand the correct accordion item, improving the user experience and accessibility. This addresses a previous limitation in how accordions were handled.
Original PR description
*=html_builder This PR introduces the following changes: - Add `.accordion-item` selector in the `AnchorPlugin`. - Expands the list of titleEls selectors to include `.h1-fs, .h2-fs, .h3-fs, .h4-fs, .h5-fs, .h6-fs, .display-1-fs, .display-2-fs, .display-3-fs, .display-4-fs, .base-fs, .o_small-fs`. - Enhances the "AnchorSlide" interaction by adding the "handleAccordionAnchor" method, called in "animateClick" and "setup" to automatically scroll to and expand accordion items. The method uses the `show()` function from bootstrap `Collapse` component, which efficiently manages the expansion of required accordion item and collapse the rest. task-5065165
This update enables users to create returns for previously archived accounting periods without needing to reactivate or overwrite existing archived returns. This provides greater flexibility in managing returns and simplifies the accounting process. A new test case has been added to ensure the functionality works as expected.
Original PR description
Archived returns are ignored when manually creating returns, allowing a new return to be created for the same period without reactivating or overwriting the archived one. Also a test case has been added for the same task-5440965
This update fixes an issue where selecting a work order in the Overview would incorrectly prioritize it in the ShopFloor operations list. The fix uses the correct record identifier ('resId') instead of the internal 'id' to ensure accurate sorting. Additionally, the 'show case' workorder now remains at the top when using pagination on the first page.
Original PR description
Selecting an operation in the Overview makes it the 'show case' and first in the workcenter's operations list. However, acting on the workorder (adding a by-product for example) moves it to another position in the list. This because defineRelevantRecords wrongly uses record.'id' to sort recordsAlreadyInCache (internal data like 'datapoint_<n>' not present in the cache that contains record identifiers). Using the real record identifier 'resId' corrects the sorting operation. We also want the 'show case' workorder selected in the Overview to stay on top when using pagination (not for all pages, only the first one). task: 5028095
This update fixes a test that was intermittently failing due to how Odoo marked inbox messages as read. The change ensures the test waits for the initial message fetch, preventing a common failure scenario. This improves the reliability of the inbox read marking process.
Original PR description
The `Opening thread with needaction messages should mark all messages of thread as read` text composer test ensures that opening a channel marks the related inbox messages as read. However, this test can fail in a non-deterministic fashion. There are two flows that can mark inbox messages as read: fetching the messages or a manual request after opening the channel. The test expects the rpc to be issued, but if the messages are fetched before, it won't happen thus making the test fail. This commit awaits the initial fetch to prevent this issue. As a bonus, the second flow is also tested. runbot-238360 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the field matching feature in the spreadsheet editor was incorrectly displayed prematurely. Now, field matching options only appear after the user selects both a model and a field, aligning with the standard relational filter experience. This ensures a more intuitive and reliable workflow for users.
Original PR description
## Description Before this commit: - In the selection global filter side panel, field matching was shown immediately, even when the model and field were not selected. - Without a model, field matching cannot be configured correctly, so showing it early had no meaning. - This behavior was inconsistent with relational global filters. After this commit: - Field matching is displayed only after the user selects both model and field. - Once configured, users can set up field matching as expected, similar to the relational global filter side panel. Task: [5477251](https://www.odoo.com/odoo/project/2328/tasks/5477251)
This update addresses a technical issue preventing the correct import of JSONDecodeError from the Requests library. This was caused by a recent change in the Requests package itself. The fix ensures compatibility and prevents errors when using Requests within Odoo addons.
Original PR description
# Description of the issue/feature this PR addresses: Installing `requests==2.25.1` and using the following line of code: from requests.exceptions import JSONDecodeError Script to reproduce it…
# Description of the issue/feature this PR addresses:
Installing `requests==2.25.1` and using the following line of code:
from requests.exceptions import JSONDecodeError
Script to reproduce it
```bash
python3.10 -m pip install -q virtualenv
python3.10 -m virtualenv /tmp/requests_test
source /tmp/requests_test/bin/activate
pip install -q requests==2.25.1
python -c "from json import JSONDecodeError"
python -c "from requests.exceptions import JSONDecodeError"
# ImportError: cannot import name 'JSONDecodeError' from 'requests.exceptions' (/tmp/requests_test/lib/python3.10/site-packages/requests/exceptions.py)
```
<img width="1503" height="738" alt="Screenshot 2026-01-13 at 11 05 36 a m" src="https://github.com/user-attachments/assets/c81d04c3-111c-4fb4-9b7e-f09059b54d3a" />
# Current behavior before PR:
It raises the following error:
ImportError: cannot import name 'JSONDecodeError' from 'requests.exceptions' (python3.10/site-packages/requests/exceptions.py)
It was removed from the following commit in the `requests` package:
https://github.com/psf/requests/commit/db575eeedcfdb03bf31285afd3033e301df8b685
# Desired behavior after PR is merged:
This change fixes this error importing the original exception from `json` package
Also, fixing similar alias imports
Enterprise PR related:
- https://github.com/odoo/enterprise/pull/104202This update resolves an issue that occurred when users clicked the 'Code History' button within Server Actions. The error stemmed from a lack of timezone information in the user's calendar, causing a technical error. This fix ensures the button functions correctly regardless of the user's timezone settings.
Original PR description
This error occurs when clicking the `Code History` button in Server Action. Steps to reproduce: - Search `Server Actions` > Open any server action - Change `Code` and Save > Click `Code History` button Traceback: `AttributeError: 'bool' object has no attribute 'upper'` This error occurs when the `Code History` button is clicked and, at that point, the user’s timezone is `False` because it is not set in the user’s calendar. [1]- https://github.com/odoo/odoo/blob/54681272e9f00a171fe49f690979e2a8353ff5fb/odoo/addons/base/models/ir_actions.py#L515 sentry-7167683304 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a visual inconsistency in the Odoo website builder where the 'Option List' label was incorrectly centered. The change restores the standard alignment for labels in the builder sidebar, ensuring a consistent and professional appearance. This resolves a minor aesthetic issue that could have impacted user experience.
Original PR description
### Issue: The `hb-row-label` class shows inconsistent behavior in the builder sidebar. The 'Option List' label appears centered rather than following the standard alignment. In addition, the…
### Issue: The `hb-row-label` class shows inconsistent behavior in the builder sidebar. The 'Option List' label appears centered rather than following the standard alignment. In addition, the alignment of nested options within the builder sidebar is marginally misaligned. ### Steps to Reproduce: - Open the website and switch to edit mode. - Drop a Form snippet onto the page. - Add a new field and set its type to 'Multiple Checkbox'. - In the builder sidebar, notice that the 'Option List' label is centered. ### Reason: This [commit](https://github.com/odoo/odoo/commit/2c90e135a30b5810be0e2796154d85a918fbe303) changed the `align-self` property of the `hb-row-label` class from `baseline` to `center`. That change was intended to fix alignment issues for nested options inside popovers. However, since `hb-row-label` is also used globally, this caused misalignment in the builder sidebar. ### Fix: Apply a separate alignment rule for popover usage while keeping the default `hb-row-label` alignment set to baseline. This restores the correct label positioning in the builder sidebar (refer img 1) and preserves the improved alignment inside popover (refer img 2). ### Visual Changes: <img width="1866" height="622" alt="image" src="https://github.com/user-attachments/assets/b243fbf3-2f7f-4942-b1e4-7de7c5eafe0f" /> <img width="1843" height="688" alt="image" src="https://github.com/user-attachments/assets/562dfc33-43f9-45cd-b3ce-efec32e3cf45" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix addresses a technical error that occurred when generating DIAN invoices. A default empty document was causing a system crash. The update now allows for invoices without attachments, preventing the template from attempting to parse missing data and resolving the issue.
Original PR description
Since this fix: ba24b48 , a default empty document contains `<Note>No xml</Note>` was created when posting bills. However, the `l10n_co_dian.report_invoice_document` template attempts to parse this document for DIAN values. Because these values are missing from the empty document, a traceback occurs. In this commit, we fallback to standard template when the empty document exists. opw-5246912
This update corrects a technical issue preventing the inclusion of crucial terms and conditions (like payment terms) within the electronic invoices generated for Colombian DIAN compliance. The fix removes a previous override that was stripping out this information, ensuring invoices accurately reflect the required data.
Original PR description
**Steps to reproduce:** * Install `l10n_co_dian` and `accounting` modules. * Go to **Accounting → Configuration → Settings** and enable DIAN demo mode under `Colombian Electronic Invoicing` by disabling `test mode`. * Create an Invoice. * Select a Colombian customer and add products. * Fill in the **Terms and Conditions** field (e.g., “Payment due in 30 days”). * Confirm the invoice and generate the electronic invoice XML. **Observed behavior:** * The `<cbc:Note>` tag only contains **CUFE calculation data**. * The **Terms and Conditions** text is missing from the XML. **Cause:** * The `'cbc:Note': None` ovrride the value of Note tag which has value of invoice.narration. ref : https://github.com/odoo/enterprise/pull/87598/changes#diff-2548895191bf05af735ebfc332b3f3f2db9d039630101720ee72feb7b65fa8fcR532 **Fix:** * removed the `'cbc:Note': None` which overrides the value of the note tag. opw-5488663
This update resolves an issue where a specific VAT report line ('VP14b') was missing in the new monthly VAT reports. The fix ensures that this line is correctly handled during the report migration process, preventing a key error and ensuring accurate VAT reporting. This change was triggered by a recent update to the Odoo system.
Original PR description
Handle `carryover_origin_report_line_id` for report line having `code = 'VP14b`, since the line does not exist in the new monthly VAT report after this commit:…
Handle `carryover_origin_report_line_id` for report line having `code = 'VP14b`, since the line does not exist in the new monthly VAT report after this commit: odoo/odoo@51a72ab42d118d6fb0eb3e3545a09e10019b9140
As the line is not present in the monthy vat report while mapping it will raise keyerror:
```py
File "/home/odoo/src/odoo/19.0/addons/l10n_it/migrations/0.7/post-map_carryover_to_new_report.py", line 52, in migrate
data_to_insert = [
File "/home/odoo/src/odoo/19.0/addons/l10n_it/migrations/0.7/post-map_carryover_to_new_report.py", line 53, in <listcomp>
(code2expression_id[report_line_code], old2new_origin[carryover_origin_report_line_id], *other_external_vals)
KeyError: 80
```
```sql
apan_3806634=> select id,carryover_origin_report_line_id,target_report_expression_id from account_report_external_value;
id | carryover_origin_report_line_id | target_report_expression_id
----+---------------------------------+-----------------------------
3 | 80 | 102
4 | 80 | 105
7 | 80 | 102
8 | 80 | 102
9 | 80 | 102
10 | 80 | 102
11 | 80 | 102
(7 rows)
apan_3806634=> select id,name->>'en_US',code from account_report_line where id=80;
id | ?column? | code
----+------------------------------+-------
80 | VP14b - VAT payable (credit) | VP14b
(1 row)
```
Note this error will only appears in the dbs without this commit: odoo/odoo@a220a28595dbfacce2d8322222d1961547bb4b07
opw-5494959
upg-3806634
tbg-2272
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update corrects a visual issue where text within table cells appeared misaligned due to a default bottom margin applied to the last element in the cell. The fix removes this margin, ensuring consistent vertical alignment of content within tables on the website. This improves the overall appearance and usability of Odoo websites.
Original PR description
Problem: Table cells had extra space because the last element (e.g. a `<p>`) kept its bottom margin. This caused the cell content to appear misaligned vertically. Solution: Remove the bottom margin on the last element inside table cells. This is a backport of 3048f1a2447d1d5089defa055c858adb1e915c91. Steps to reproduce: - Website. - Add a table in the footer. - Add text in a cell. - Select "Paragraph" as block from the toolbar. - Align the cell content. - Observe the content is not vertically aligned. opw-5412426 --- 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 Odoo system crashed when generating UUIDs in non-secure environments. The code has been updated to use a compatible alternative function, ensuring stability across all Odoo deployments. This change addresses a potential technical limitation without impacting core functionality.
Original PR description
### [FIX] web: allow 'uuid' in non-secure contexts Before this commit, the `uuid` string helper crashed when used in non- secure contexts. This was due to it using `crypto.randomUUID()`, which is only available in secure contexts. Although discouraged, it should be possible to run Odoo in these contexts, and as such the function has been changed to use `crypto.getRandomValues()`. There is no test, as the CI runs in secure contexts anyway, and the `uuid` function itself is already thoroughly tested. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a test failure related to how dates and times are displayed in Chrome. A recent change introduced a regular space instead of a non-breaking space, causing compatibility issues. The update ensures consistent date/time formatting across different Chrome versions.
Original PR description
Apparently somewhere in the datetime patterns the space between time and A/P mark has been updated from a narrow non-breaking space to a regular space. Make the code cross-version compatible.
This update fixes an issue where product names on VAT invoices were being incorrectly combined without spaces, making them unreadable. The change adds a space to separate the name and description, ensuring invoices comply with API specifications and maintain proper formatting for processing. This improves the accuracy and readability of VAT reports.
Original PR description
Before: SInvoice was stripping newlines from the `itemName` field. Since we were directly using `line.name` (which contains a `\n` between product name and description), the content ended up concatenated without any separation. After: Now we replace the newline with a space before sending the value, so the name and description remain readable once processed by SInvoice and set limit to 500 characters as per API specs. task-5498120 Forward-Port-Of: odoo/odoo#243994
This update resolves an issue where the website editor could fail due to timing problems when opening. By ensuring the editor waits for the iframe to fully load, the system now provides a more reliable and consistent editing experience. This prevents unexpected errors and improves user confidence.
Original PR description
Steps to reproduce: 1. Set network speed to 3G 2. Create website Page from the systry new menu 3. click on edit button You'll face the traceback. The website editor could try to open before the iframe finished loading, leading to non-deterministic behavior. This commit ensures the editor initializes only after the iframe load event, making the edit action consistent and reliable. Erlier fixed was not covering the all the cases. PR: https://github.com/odoo/odoo/pull/238054 runbot-233039 Forward-Port-Of: odoo/odoo#243256
This update fixes a discrepancy in eWaybill invoices for Indian exports. It now accurately includes reverse charge (RC) amounts for GST, aligning the eWaybill data with Odoo and the Indian government's requirements. This ensures accurate reporting and compliance for international shipments.
Original PR description
For export invoices, the total invoice value in the eWaybill JSON did not include reverse charge amounts for GST, leading to a mismatch with the value shown in Odoo and the eWaybill generated by the Indian government system. This commit adjusts the JSON computation to include the reverse charge amounts in the total invoice value for exports, aligning it with the government-generated eWaybill, while preserving the existing reverse charge flow. task-5068199 Forward-Port-Of: odoo/odoo#243802 Forward-Port-Of: odoo/odoo#241852
This update resolves an issue where tables inserted within the To-Do module appeared after the existing text instead of before it. The fix streamlines the table insertion process by centralizing the logic within the DomPlugin, ensuring tables are correctly positioned and the cursor is placed in the expected location. This improves the overall user experience when creating tables within the HTML editor.
Original PR description
### Steps to Reproduce : - Open To-Do and type some text. - Place the cursor at the start of the block. - Insert a table. (e.g.: /table) - The table appears after the text instead of before it. ### Purpose of this PR: - Table insertion logic was previously duplicated inside TablePlugin, where it tried to manually split text and inline nodes before inserting the table. However, this responsibility is now correctly handled by `DomPlugin.insert()`, which already: - deletes the current selection if needed. - splits text and inline nodes safely. - handles block boundaries and unsplittable elements. - normalizes the DOM after insertion. - places the cursor at a valid position. task-5480759 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244567 Forward-Port-Of: odoo/odoo#243242
Features or functions removed from Odoo
This pull request removes a no-longer-used folder within the Odoo Enterprise system related to Japanese accounting (l10n_in). The removal streamlines the codebase and reduces potential maintenance overhead. This change has no impact on existing functionality.
Original PR description
ref - https://github.com/odoo/enterprise/commit/ea7893a978c408e5d4437070ae7a6c7a7fbf7167 Forward-Port-Of: odoo/enterprise#104882
4 changes
Resolved issues and error corrections
This update fixes an issue where payment batching wasn't consistently merging related inbound and outbound payments. Previously, the system created duplicate payments for transactions like refunds and bills to the same bank. Now, the system intelligently combines these into a single payment, streamlining the accounting process and reducing manual effort.
Original PR description
When we register payments for a list of journal entries, the `account.payment.register` wizard computes batches and sometimes merge them together. For instance, this allows to create a single payment if there is an outbound (a bill to pay) and an inbound (a refund to receive) payment to the same bank for the same partner. Instead of creating two payments of -1000 and +500, we only create one of -500. Currently, this mechanism does not always work. That's because the `batch_key` used to decide whether to merge or not refers to a value that is not updated in the loop. Related ticket: opw-5401372
This update fixes a bug in the color picker within the Odoo editor where selecting a color would unexpectedly reset the slider to red. The change prevents unnecessary UI updates during color selection, ensuring a smoother and more reliable color picking experience for users.
Original PR description
**Current behavior before PR:** In editor's custom gradient picker, if `#FFFFFF` is picked from the very top of picker area, the color slider is reset to color `red`. This happens because when moving picker pointer to the top of area, `selectedColor` prop is updated to `#FFFFFF`, which calls `onWillUpdateProps` callback. As result, `convertRgbToHsl` sets hue value 0 for `#FFFFFF`, setting color slider to red. **Desired behavior after PR is merged:** This commit ensures that in `onWillUpdateProps` callback, `setSelectedColor` should not get called if `newSelectedColor` is the same as `this.colorComponents.cssColor` to prevent updating UI twice while picking the color. task-5170041 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue preventing non-administrator website editors from successfully saving images they upload from Unsplash. The fix ensures the user creating the image has the necessary permissions, improving the editor's functionality and workflow. It addresses a security warning related to user access rights.
Original PR description
Scenario: - Setup Unsplash and install website - Set a user as "Website: Editor and Designer" - Login as that user and go to any website page with a qweb view - Go to edit mode and drop Text-Image in…
Scenario: - Setup Unsplash and install website - Set a user as "Website: Editor and Designer" - Login as that user and go to any website page with a qweb view - Go to edit mode and drop Text-Image in a view - Replace the image with an unsplash image and then save Result: the save fails without any message shown, and there is a security access WARNING in the logs. Note: a similar scenario can be done for a restricted editor that is editing a HTML field it has write access to. Issue: to save a model with res_id 0, we need to either be admin (base.group_system) or the record creator. Since 9c9c58a5a10101532cbf046d21d4a63c2b7d2838 to bypass the mimetype neutering of happening, we create the attachment as SUPERUSER. Then when we modify the attachment url (for unsplash images), we have no access right to the attachment since we are not the creator. Fix: create the attachment with the current user, and only use SUPERUSER to set the mimetype if it was neutered (ie. the user doesn't have write access right to ir.ui.view, which in normal use case should only happen for "Restricted Editor"). This way the image is created by the user that uploaded it and not SUPERUSER. opw-4850611 opw-5387258 opw-5489219 Forward-Port-Of: odoo/odoo#219472
This update resolves an issue where iOS users were unable to save custom star ratings for product reviews. The fix prevents a technical glitch that caused the rating to reset to the default 4-star value before submission. This ensures a consistent and reliable review experience for all users, regardless of their device.
Original PR description
## Versions
18.0+
## Issue
On iOS devices, when submitting a product review with a custom star rating, the selected value would revert to the default (4 stars) before submission.
## Steps to reproduce
*On a laptop*
- Open Editor mode on a product eCommerce page:
- Select any product element (e.g. click on the price);
- Activate customer ratings and save.
*On a physical Apple mobile device (iPhone or iPad) or on an iOS emulator via XCode (only on MacOS)*
- Go to the product's eCommerce page:
- Move down to the "Customer Reviews" section and un-toggle it:
- Write down a review;
- Click on any star rating but 4;
- Send.
## Cause
`mouseleave` event is triggered before the rating is saved and resets the rating to the default 4-star one.
## Solution
Only trigger `mouseleave` event on devices handling them correctly and post the number of visible stars on the form.
opw-51426823 changes
Resolved issues and error corrections
This update optimizes how notifications are sent and received, specifically addressing performance bottlenecks under heavy server load. By using a faster JSON serialization library (orjson), the system processes notifications more efficiently, reducing delays and improving overall responsiveness. This results in a smoother user experience.
Original PR description
When the gevent server is under high load, the time required to acquire a cursor and fetch notifications increases. This causes notifications to accumulate, leading to larger payloads. Serializing these large payloads using the standard json library becomes a bottleneck. In a gevent environment, this monopolizes the event loop, delaying the processing of other greenlets. This commit introduces optional support for `orjson`. If installed, it is used to significantly speed up JSON encoding, freeing up the event loop. Using `orjson` increases the throughput by ~20% under high load.
This update provides more specific error messages when the message list fails to load. Previously, users only saw a generic 'Ann error occurred' message. Now, the commit displays the underlying error details, giving administrators a clearer understanding of the cause and enabling faster troubleshooting.
Original PR description
Backport of https://github.com/odoo/odoo/pull/244094 Before this commit, when message list failed to load, it just displays a "Ann error occurred" generic message with a retry button. This assumes that error happens rarely and when so this is temporarily. However some errors are persistent and it's frustrating to have no clue on why there's error or what may have caused it. This commit shows the `Error.toString()` from fetch message RPC failure on UI, so that there's a clue on the reason the fetch of messages failed. Before / After <img width="305" height="67" alt="Screenshot 2026-01-20 at 15 10 38" src="https://github.com/user-attachments/assets/34c546df-71e6-4055-9f85-8d85a9c89b35" /> <img width="334" height="100" alt="Screenshot 2026-01-20 at 15 09 07" src="https://github.com/user-attachments/assets/5fadd0b7-7ea0-43ca-8c28-0ac1d33650ff" />
This pull request updates the core spreadsheet component within Odoo. It addresses several minor bugs and improves the component's functionality, ensuring a smoother user experience when working with spreadsheets. These changes were made by a team of developers to maintain the stability and performance of this critical module.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0343060efa [REL] 17.0.85 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0343060efa [REL] 17.0.85 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/7c8456d935 [FIX] Actions: ensure the sequence is applied on action children [Task: 5452669](https://www.odoo.com/odoo/2328/tasks/5452669) https://github.com/odoo/o-spreadsheet/commit/ab325f29c5 [FIX] header_size: wrong row size from wrapped number [Task: 4878338](https://www.odoo.com/odoo/2328/tasks/4878338) 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>