Daily updates from Odoo
Navigate
Branch
Tuesday, November 11, 2025
26 changes
4 changes
Enhancements to existing features
This change speeds up the calculation of move amounts in Accounting by reducing unnecessary data lookups. It makes large reconciliation tasks run significantly faster and use less memory, improving overall responsiveness for heavy accounting operations.
Original PR description
Currently performance on `_compute_amount()` is bottlenecked by `__get__()` calls on fields on `line_ids`. We tackle this bottleneck by warming the cache with `fetch()` Benchmark on reconciling 2 account moves with ~70k lines each | |Total Time|Allocated Memory|Queries| |----------|----------|----------------|-------| |Before |43.23s |2GB |993 | |After |18.60s |1GB |693 | opw-5098543 Forward-Port-Of: odoo/odoo#234656
Resolved issues and error corrections
This change prevents website assets from being turned off during module updates when they are still needed by existing pages. It helps avoid old snippet designs or page elements unexpectedly breaking after an update, while still allowing unused assets to be cleaned up later.
Original PR description
Before this commit when a module was updated all ir.asset records were reset to their defined `active` state, if defined. This causes assets related to old snippet versions to be made inactive even…
Before this commit when a module was updated all ir.asset records were
reset to their defined `active` state, if defined.
This causes assets related to old snippet versions to be made inactive
even if those old snippet versions are used inside existing pages.
It used to work when the activation of assets was made through view
inheritance because when views are defined through a `<template>` tag,
the `active` attribute is in fact ignored during updates since [1],
except for new records since [2].
This commit introduces an `<asset>` tag in the XML import format.
It is an alias of `<record ... model="ir.asset">` with the additional
feature that it avoids taking the `active` field into account during
updates for existing `ir_asset` records, just like `<template>` if the
`active` field is mentioned as attribute of the tag.
We then rely on the `website_disable_unused_snippets_assets` cron to
properly disable any unused asset at a later stage (note that the bug
being fixed here was mitigated by the fact that cron also re-enabled
assets which were disabled by mistake... but that might happen only a
few days later).
Another approach was to overload `_load_records_write` in `base`'s
`ir_asset.py` to avoid taking the `active` field into account when
updating records:
```py
def _load_records_write(self, values):
values.pop('active', None)
super()._load_records_write(values)
```
But this is not as stable because it changes the way `ir.asset` records
are imported when the `<record>` tag is used. In the end we chose to be
consistent and do exactly the same as `<template>`, as this also allows
more and should be entirely stable.
[1]: https://github.com/odoo/odoo/commit/2d296cb77922d33be2dc45b900191fac34bda429#diff-175c28787c272a219b9275f79262a48af9aa029e718f45077fd609737559e84eR803-R804
[2]: https://github.com/odoo/odoo/commit/f1c70d4cc943ac4eb81a85a9dc005de34cd2060a#diff-175c28787c272a219b9275f79262a48af9aa029e718f45077fd609737559e84eR801-R804
task-2963840
(Follow-up of https://github.com/odoo/upgrade/pull/3829)
Forward-Port-Of: odoo/odoo#233899
Forward-Port-Of: odoo/odoo#104836This change updates a few website snippets to use Odoo’s new asset declaration format. It helps keep the website modules compatible with the latest platform changes and avoids rendering issues in those pages.
Original PR description
See https://github.com/odoo/odoo/pull/104836 task-2963840 Forward-Port-Of: odoo/enterprise#98530 Forward-Port-Of: odoo/enterprise#35153
This change fixes a problem that could stop the Mail module from being uninstalled cleanly. It checks that the required data is still present before trying to remove related activities, which helps prevent errors during later reinstallation.
Original PR description
When uninstalling module mail, an override of `unlink()` deletes the activities of the records being deleted. However, this override crashes whenever columns of `mail.activity` have been dropped already. As a consequence, it may prevent the deletion of the field `mail_message_id` of model `mail.tracking.value`, and its table, too. And this causes the reinstallation of module mail to log error: ``` column "mail_message_id" of relation "mail_tracking_value" contains null values ``` See https://runbot.odoo.com/odoo/runbot.build.error/233618 for the cases where it failed. The fix consists in checking whether the columns of `mail.activity` still exist before searching for activities. Forward-Port-Of: odoo/odoo#235083
4 changes
Enhancements to existing features
The journal audit report layout has been improved to make tax grid information easier to review. This reduces overly wide tables when multiple sections appear side by side, helping accounting users read audit details more comfortably.
Original PR description
[task-5207451](https://www.odoo.com/odoo/all-tasks/5207451) Forward-Port-Of: odoo/enterprise#98373
Resolved issues and error corrections
The app creator in Studio now uses a border color that contrasts with its background. This makes controls such as checkboxes and section borders visible again, reducing confusion when creating new apps.
Original PR description
Before this commit : when creating an app using the studio, none of the borders were visible, including the checkboxes in the app creator, because the background color of the app creator and the border color were the same. After this commit: the border color for the app creator has been changed to make it visible. task-5138669 Forward-Port-Of: odoo/enterprise#97454
Salary offer simulations now group a database safeguard step across the whole recalculation instead of repeating it for every offer. This reduces unnecessary database overhead and should improve performance when many salary offers need to be recalculated.
Original PR description
Savepoints are used in multiple computes related to salary simulation for an offer, because it creates and updates existing records, but those should not be committed to the database. Those are currently made for each offer that needs to be recomputed. Frequent savepoint, without commit/rollback of the whole transaction, are a performance issue at the database level. To partially alleviate this issue, this commit creates 1 savepoint for the whole compute, instead of per record to compute. Forward-Port-Of: odoo/enterprise#99080
Code cleanup and technical improvements
The WhatsApp discussion participant list was reorganized behind the scenes to use a newer shared component approach. This should make the messaging interface easier to maintain and support future improvements without changing day-to-day user workflows.
8 changes
Enhancements to existing features
This update speeds up how Odoo calculates amounts on account moves, especially when processing records with many lines. It reduces waiting time, memory usage, and database load, which should make large reconciliation and accounting operations noticeably faster.
Original PR description
Currently performance on `_compute_amount()` is bottlenecked by `__get__()` calls on fields on `line_ids`. We tackle this bottleneck by warming the cache with `fetch()` Benchmark on reconciling 2 account moves with ~70k lines each | |Total Time|Allocated Memory|Queries| |----------|----------|----------------|-------| |Before |43.23s |2GB |993 | |After |18.60s |1GB |693 | opw-5098543 Forward-Port-Of: odoo/odoo#234656
Resolved issues and error corrections
This fix prevents duplicate withholding taxes from being created when the Argentina withholding demo data is installed. It keeps the tax list clean and avoids confusing duplicate entries for users configuring accounting settings.
Original PR description
**Description of the issue/feature this PR addresses**: This pr is to avoid duplicated taxes when the demo data is installed. **Steps to reproduce**: 1. Install l10n_ar_withholding module with demo…
**Description of the issue/feature this PR addresses**: This pr is to avoid duplicated taxes when the demo data is installed. **Steps to reproduce**: 1. Install l10n_ar_withholding module with demo data. 2. Take position in "(AR) Responsable Inscripto" company. 3. Check the taxes created on "Invoicing > Configuration > Accounting > Taxes". 4. Delete the filter "Sale or Purchase". 5. Add custom filter: Argentina Withholding Payment Tax type (l10n_ar_withholding_payment_type) is in ["supplier", "customer"]. 6. You will see that there are duplicated taxes (duplicated names) with suffix (Copy). **Current behavior before PR**: Duplicated taxes are created when demo data is installed. <img width="1597" height="795" alt="image" src="https://github.com/user-attachments/assets/51b65037-bb89-4ec7-8adf-21636b68e405" /> **Desired behavior after PR is merged**: No duplicated taxes are created when demo data is installed. _Task latam side_: 1360. _Task Adhoc side_: 57627. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226992
This change turns off IndexedDB during a subset of point of sale automated tests so the full test suite does not create an excessive number of browser databases. It helps keep test runs faster and more reliable, while dedicated tests still cover IndexedDB separately.
Original PR description
Disable IndexedDB in Hoot tests to avoid creating to much IndexedDB databases when running the full test suite. IndexedDB is still tested in dedicated tours. Forward-Port-Of: odoo/odoo#234701
This change prevents a crash that could happen when removing the Invoicing app after using the U.S. accounting localization. It ensures related setup data is cleaned up correctly during uninstall, so users can remove modules without hitting an error.
Original PR description
The system will crash when user tries to uninstall the `invoicing` module. **Steps to produce:** - Install `Accounting` module without demo data. - Go to Accounting > Configuration > Settings > Set…
The system will crash when user tries to uninstall the `invoicing` module. **Steps to produce:** - Install `Accounting` module without demo data. - Go to Accounting > Configuration > Settings > Set fiscal localization as `United States`. - Go to `Apps > Accounting > uninstall`. - Now try to uninstall `Invoicing` module. **Error:** `KeyError: 'account.asset'` **Cause:** - [Here] in `l10n_us_account` module, we define data of `account.asset` model. - When we uninstall the `accountant` module, it also uninstalls `account_asset` module and also uninstall the `account.asset` model. - the asset data loaded by `l10n_us_account` was incorrectly owned by the `account` module. - When we later uninstall the `account` module, it finds `account.asset` data and tries to delete it. **Solution:** - Added uninstall_hook in l10n_us_account to unlink the account.asset record. [Here]https://github.com/odoo/odoo/blob/e1dd3852b118eacc8d77e9e3d8c7769195c6edb1/addons/l10n_us_account/data/template/account.asset-us.csv#L2-L8 **sentry-6938852090** I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change prevents errors when uninstalling the Mail module by making sure it only looks for activity records if the related database columns still exist. This helps module removal and later reinstallation complete cleanly, avoiding database errors that could block the process.
Original PR description
When uninstalling module mail, an override of `unlink()` deletes the activities of the records being deleted. However, this override crashes whenever columns of `mail.activity` have been dropped already. As a consequence, it may prevent the deletion of the field `mail_message_id` of model `mail.tracking.value`, and its table, too. And this causes the reinstallation of module mail to log error: ``` column "mail_message_id" of relation "mail_tracking_value" contains null values ``` See https://runbot.odoo.com/odoo/runbot.build.error/233618 for the cases where it failed. The fix consists in checking whether the columns of `mail.activity` still exist before searching for activities. Forward-Port-Of: odoo/odoo#235083
When a product is manufactured from a sales order using the make-to-order flow, the resulting manufacturing order will now correctly show which sales order line created it. This improves traceability and makes it easier for business users to follow the origin of production orders.
Original PR description
[FIX] sale_mrp: set sale_line_id on manufacturing order during MTO route Problem: Manufacturing Orders should contain information about their origin, but during an MTO route, sale_line_id remains unset after the MO is created when the Sales Order is confirmed. Solution: While preparing the values for the MO (`_prepare_mo_vals`), we will assign the `sale_line_id` based on the MO's move, which has the origin sale_line_id during the MTO route. Steps to replicate on Runbot 18: - Product with MTO and Manufacture routes - BoM with at least one component 1. Create a Sales Order for the product and confirm 2. Navigate to the MO via the smart button 3. Check the field sale_line_id with the inspector, note it is False. opw-5257401
This change prevents website assets from being accidentally switched off when modules are updated. It helps ensure older snippet styles and page content continue to display correctly, while unused assets are still cleaned up later by the system.
Original PR description
Before this commit when a module was updated all ir.asset records were reset to their defined `active` state, if defined. This causes assets related to old snippet versions to be made inactive even…
Before this commit when a module was updated all ir.asset records were
reset to their defined `active` state, if defined.
This causes assets related to old snippet versions to be made inactive
even if those old snippet versions are used inside existing pages.
It used to work when the activation of assets was made through view
inheritance because when views are defined through a `<template>` tag,
the `active` attribute is in fact ignored during updates since [1],
except for new records since [2].
This commit introduces an `<asset>` tag in the XML import format.
It is an alias of `<record ... model="ir.asset">` with the additional
feature that it avoids taking the `active` field into account during
updates for existing `ir_asset` records, just like `<template>` if the
`active` field is mentioned as attribute of the tag.
We then rely on the `website_disable_unused_snippets_assets` cron to
properly disable any unused asset at a later stage (note that the bug
being fixed here was mitigated by the fact that cron also re-enabled
assets which were disabled by mistake... but that might happen only a
few days later).
Another approach was to overload `_load_records_write` in `base`'s
`ir_asset.py` to avoid taking the `active` field into account when
updating records:
```py
def _load_records_write(self, values):
values.pop('active', None)
super()._load_records_write(values)
```
But this is not as stable because it changes the way `ir.asset` records
are imported when the `<record>` tag is used. In the end we chose to be
consistent and do exactly the same as `<template>`, as this also allows
more and should be entirely stable.
[1]: https://github.com/odoo/odoo/commit/2d296cb77922d33be2dc45b900191fac34bda429#diff-175c28787c272a219b9275f79262a48af9aa029e718f45077fd609737559e84eR803-R804
[2]: https://github.com/odoo/odoo/commit/f1c70d4cc943ac4eb81a85a9dc005de34cd2060a#diff-175c28787c272a219b9275f79262a48af9aa029e718f45077fd609737559e84eR801-R804
task-2963840
(Follow-up of https://github.com/odoo/upgrade/pull/3829)
Forward-Port-Of: odoo/odoo#233899
Forward-Port-Of: odoo/odoo#104836This change updates how website appointment pages load shared resources so they use the newer asset format. It helps keep the feature compatible with the latest platform standards and reduces the risk of future maintenance issues.
Original PR description
See https://github.com/odoo/odoo/pull/104836 task-2963840 Forward-Port-Of: odoo/enterprise#98530 Forward-Port-Of: odoo/enterprise#35153
7 changes
Enhancements to existing features
The test suite was updated to reflect a new rule that prevents the same bank account number from being assigned to multiple active partners. This keeps enterprise modules aligned with the latest accounting behavior and helps avoid future test failures when validating customer and partner bank details.
Original PR description
Following the community change, we now prevents assigning the same bank account number to multiple active partners. This commit updates the affected enterprise test cases to align with the new behaviour sees community pr- https://github.com/odoo/odoo/pull/234531 task- 5236503
This change speeds up how Odoo calculates amounts on accounting entries by loading needed data more efficiently. It reduces waiting time, memory use, and database calls when processing large reconciliations, which should make accounting operations noticeably faster.
Original PR description
Currently performance on `_compute_amount()` is bottlenecked by `__get__()` calls on fields on `line_ids`. We tackle this bottleneck by warming the cache with `fetch()` Benchmark on reconciling 2 account moves with ~70k lines each | |Total Time|Allocated Memory|Queries| |----------|----------|----------------|-------| |Before |43.23s |2GB |993 | |After |18.60s |1GB |693 | opw-5098543 Forward-Port-Of: odoo/odoo#234656
Resolved issues and error corrections
This change prevents long product attribute values from spilling outside their card in the product catalog view. It keeps the layout aligned and improves readability when users search or select products from quotations.
Original PR description
**Steps to reproduce:** 1. Go to Products > Create a new product. 2. Add or create a new attribute and set a long text value. 3. Go to Sales > Open any quotation. 4. In the sale order line, click on…
**Steps to reproduce:** 1. Go to Products > Create a new product. 2. Add or create a new attribute and set a long text value. 3. Go to Sales > Open any quotation. 4. In the sale order line, click on "Catalog" and search for the created product. **Issue:** - The attribute value text overflows outside the product card in the kanban view, causing layout misalignment and making the UI look broken. <img width="509" height="157" alt="image" src="https://github.com/user-attachments/assets/a2af2c6d-9265-451c-9d1e-526df8487841" /> **Cause:** - The inner `<div>` containing the attribute text did not have a width constraint, causing it to exceed the container width when the text length was large. **Solution:** Added the Bootstrap class `w-100` to the <div> element to ensure the content fits within the parent container and wraps properly inside the card. <img width="322" height="166" alt="image" src="https://github.com/user-attachments/assets/5ba82207-7f52-4f9e-b400-e4ab4e79f0a0" /> **opw-5222002**
The upload button in the accounting dashboard is now fixed in place and can’t be accidentally moved. This prevents the interface from shifting unexpectedly and keeps the dashboard easier to use.
Original PR description
Issue: - In the dashboard, the upload button (purchase journal and others) could be dragged. - This caused unintended movement of the upload UI element. Fix: - Added `draggable=false` to the upload button element. - Ensures the button remains fixed and cannot be dragged around. TaskID-5114617 Forward-Port-Of: odoo/odoo#229013
This change adds a validation step before an invoice is posted to make sure its line accounts belong to the same company. It prevents invoices from being confirmed with mismatched company data, which could otherwise cause accounting errors across companies.
Original PR description
**Steps to reproduce:** - Create Company A and Company B - Create an invoice on Company A with one line having an account in Company A. - On the same invoice, change the company to Company B and change the journal to a journal of Company B. - Save, then confirm the invoice. **Issue:** The invoice, now belonging to Company B, still has the same account from company A, and we are able to post it on the journal from company B. **Solution:** Adding a step to check if the companies are correct on the move lines before posting. opw-5167958 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234357
This update prevents an error that could block invoicing when a previously billed subscription line had been deleted. In those cases, the system now safely uses the invoice line’s own unit of measure so subscription billing can continue normally.
Original PR description
**Issue** When a subscription order line is deleted after being invoiced, attempting to create a new invoice for the subscription raises a UserError about UoM category mismatch. Video:…
**Issue** When a subscription order line is deleted after being invoiced, attempting to create a new invoice for the subscription raises a UserError about UoM category mismatch. Video: https://drive.google.com/file/d/11-CV7wcEHQJFoVEQM5o5YBkZuTXPYDqL/view **Steps to Reproduce** 1. Create and confirm a subscription with a recurring product (e.g., Car Leasing) 2. Generate and post the invoice for the subscription 3. Add a new product line to the subscription (e.g., Office Cleaning Service) 4. Delete the original invoiced line (Car Leasing) 5. Attempt to create an invoice for the new product line → Error: "The unit of measure Units defined on the order line doesn't belong to the same category as the unit of measure False defined on the product. Please correct the unit of measure defined on the order line or on the product, they should belong to the same category." (https://drive.google.com/file/d/11-CV7wcEHQJFoVEQM5o5YBkZuTXPYDqL/view) **Root Cause** Commit https://github.com/odoo/enterprise/commit/22e49fca1e0fbfefac974c562491d170b8d70025 introduced quantity tracking per period in _get_max_invoiced_date() to fix partial credit note handling. The implementation accesses `sale_line_ids.product_uom` assuming sale_line_ids is always populated. However, when a sale order line is deleted, the related account.move.line remains in the system with empty sale_line_ids. Accessing `sale_line_ids.product_uom` on an empty recordset returns False, causing the UoM validation to fail during invoice creation. **Fix** Add a fallback to use the invoice line's own product_uom_id when sale_line_ids is empty. This preserves the partial credit note fix from https://github.com/odoo/enterprise/commit/22e49fca1e0fbfefac974c562491d170b8d70025 while handling the edge case of deleted subscription lines. If no valid UoM is found, the line is skipped in the calculation.
The document layout preview and invoice/report previews now show the company Tax ID correctly. This ensures what users see before printing matches the final document and avoids confusion or rework.
Original PR description
**Steps to reproduce:** 1. Enable debug mode. 2. Go to Settings → Companies → Configure Document Layout. 3. Add a Tax ID and save. 4. Preview the document layout. 5. Print or preview any invoice. **Observed behavior:** * Tax ID was missing from the layout preview. * Tax ID was missing from the external report preview. **Cause:** * The Tax ID value was not passed correctly to the templates, so it never appeared in the rendered layouts or previews. **Fix:** * Include the Tax ID in the layout rendering context. * Adjust layout spacing to prevent overlap in report previews. opw-5154255
3 changes
Resolved issues and error corrections
The way on-hand stock is calculated has been adjusted when looking at a past date. This helps ensure inventory figures are more accurate in historical views and reports, which matters for tracking stock levels over time.
Original PR description
Modified the equation to calculate the qty on hand if date in the past. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a styling rule so the live chat input on mobile devices no longer zooms unexpectedly when visitors start typing. It improves the chat experience for website visitors by making the input easier to use on small screens.
Original PR description
Follow-up of https://github.com/odoo/odoo/pull/234967 Style rule was not applied due to missing `&` in SCSS, which this commit fixes.
This change reverts a previous adjustment in the accounting logic that validated whether accounts on journal items belong to the correct company. It helps restore the expected behavior in cases where the earlier check caused issues for users working across company records.
Original PR description
This reverts commit 8dbbdeffc5d9193b118f51254cb0cee0c98556b6. opw-5254611 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr