Daily updates from Odoo
Monday, June 29, 2026
18 changes · saas-19.4
Enhancements to existing features
This change lets operators adjust how long unused database connections stay open by using an environment variable. It helps reduce memory usage in environments with limited resources by closing idle connections sooner when needed.
Original PR description
In memory-scarce environments, the default 10-minute idle timeout may keep too many backend connections alive. Allow operators to override it via the ODOO_DB_MAX_IDLE_TIMEOUT environment variable to evict idle connections more aggressively. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: https://github.com/odoo/odoo/pull/271785
The timesheet assistant manager now gives more reliable suggested entries. This helps managers and teams save time and avoid correcting small issues in proposed timesheets.
Original PR description
This commit's purpose is to add a few bugprovement to the timesheet assistant manager. Those imp concerns mostly the timesheets suggested by the assistant manager. task-6179842 Forward-Port-Of: odoo/enterprise#121645 Forward-Port-Of: odoo/enterprise#118494
Resolved issues and error corrections
When a Google account is disconnected with the option to delete events, recurring calendar entries are now fully removed as well. This prevents leftover recurrence records from staying behind and keeps calendars cleaner and more consistent.
Original PR description
When we disconnect a google account with the delete events option enabled, we should also delete `calendar.recurrence` records, not just the base events Follow-up for odoo/odoo@ae52126522e3570e11845c3c04d0eb6b198b3848
This update corrects how taxes are handled and displayed across invoicing, purchasing, and sales screens. It also improves imported Italian invoices by preserving the correct tax mode, helping avoid inconsistent totals and reducing manual corrections.
Original PR description
- changing python constraint on document tax mode on account.move to SQL - removing custom component now resolved by just adding xml field required condition - specifying child type to target for css class overlap_badge_tab - style enhancements to the overlap_badge_tab - removing inconsistent rounding in purchase.order - adding document tax mode logic to account.tax compute_all method, adapted for sale_margin - adding missing document tax mode ‘tax_excluded’ setting to l10n_it_edi during account.move creation of imported invoices Following up: https://github.com/odoo/odoo/pull/251800
This fixes an issue in the website editor where changing theme styles could accidentally mark unrelated content as modified. As a result, saving after a style change no longer saves unrelated views, reducing unnecessary updates and helping keep site edits clean.
Original PR description
__Problem__ Since odoo/odoo@163a317c9d3, editing website styles would save some unrelated views. __To reproduce__ 1. Open the website builder. 2. Switch to the theme tab. 3. Edit a color. ⮕ Some unrelated elements become `o_dirty`. 4. Undo. ⮕ The elements remain `o_dirty`. 5. Save. ⮕ Views linked to those elements are unnecessarily saved. __Reason__ During normalization, we call `refreshInteractions` → `disableObserver` → `on_pending_mutations_staged_handlers`, which adds `o_dirty` via the `save_plugin`. __Quick fix__ Change the normalization sequence so that it runs first. At that point, there are no pending mutations yet, so `o_dirty` is not added. task-6333960
This update corrects a layout issue in website theme previews where shapes could appear too close together or with an unwanted gap. It helps previews look cleaner and more accurate, making it easier for users to evaluate themes before applying them.
Original PR description
task-6340483
The Shopee connector now handles customer identifiers that are larger than the previously expected limit, preventing errors when creating new contacts. For cases where the ID is too large for the existing database field, Odoo stores and matches it using an alternate contact reference so Shopee orders keep syncing properly.
Original PR description
When the Shopee connector was introduced, Shopee documented `buyer_user_id` as an int32. We therefore store it in an `Integer` field, which maps to a PostgreSQL int32 column. However, feedback showed that Shopee can send ids exceeding the int32 bounds, leading to a traceback when creating new contacts. Shopee has since updated their documentation to confirm the field is actually an int64. Since we are in stable and cannot change the column type, this commit falls back to the `ref` field of the `res.partner` model to store and match Shopee contacts whose identifier doesn't fit within an int32. opw-6325948 See also: - master: https://github.com/odoo/enterprise/pull/121507 - upgrade: https://github.com/odoo/upgrade/pull/10578 Forward-Port-Of: odoo/enterprise#121707 Forward-Port-Of: odoo/enterprise#121498
This change ensures translation terms are only applied to website-specific editors, so Studio’s XML editor no longer picks up the default language from the first website in the database. It prevents confusing translation mismatches and keeps the special website behavior limited to the HTML/CSS editor where it belongs.
Original PR description
Problem: When opening the Studio XML editor when Website is installed, the translation terms corresponding to the Default Language of the first website in the database are used. This behavior should only be applied to the HTML/CSS Editor in Website. Purpose: Modify Website's override of get_related_views to only return translated views when called with a specific website in context. This is done here by adding a context flag, as to not interfere with customizations made in stable versions. This will be changed for master. Steps to Reproduce in Runbot: 1. Activate a non-English (US) language. 2. Add this language to the Website with the lowest ID in the database, then set it to the Default Language of the Website. 3. While in debug mode, enter Studio and navigate to a view that has translation terms (ex. Sale Order Form view), then open the XML editor. opw-5136124 Foward Port of https://github.com/odoo/odoo/pull/237000 Forward-Port-Of: odoo/odoo#263592
This change updates automated tests for the map view so they complete more reliably even when execution is slower than expected. It helps prevent test timeouts and reduces false failures in the development and deployment pipeline.
Original PR description
This commit replaces the waitFor timeout in map view tests with runAllTimers to cope with potential execution slowdowns and avoid waiting for too long while executing the tests. runbot-error-939600 Forward-Port-Of: odoo/enterprise#119654
This update prevents errors when importing Shopee customers whose identifiers are larger than the system’s standard number range. If an ID is too large to store in the usual field, Odoo now uses an alternative customer reference so contact creation and matching can still work correctly.
Original PR description
When the Shopee connector was introduced, Shopee documented `buyer_user_id` as an int32. We therefore store it in an `Integer` field, which maps to a PostgreSQL int32 column. However, feedback showed that Shopee can send ids exceeding the int32 bounds, leading to a traceback when creating new contacts. Shopee has since updated their documentation to confirm the field is actually an int64. Since we are in stable and cannot change the column type, this commit falls back to the `ref` field of the `res.partner` model to store and match Shopee contacts whose identifier doesn't fit within an int32. opw-6325948 See also: - master: https://github.com/odoo/enterprise/pull/121507 - upgrade: https://github.com/odoo/upgrade/pull/10578 Forward-Port-Of: odoo/enterprise#121707 Forward-Port-Of: odoo/enterprise#121498
This update standardizes the spacing used on card-based kanban screens so they follow the same layout rules across affected areas. It helps the interface look more consistent and reduces the risk of spacing differences between views.
Original PR description
Rename and reuse the new generic card padding variables. Follow-up of https://github.com/odoo/odoo/pull/272083
The website profile page now uses the currently logged-in user when displaying the email verification banner. This prevents another person's private email address from appearing on a public profile page, protecting user privacy.
Original PR description
**Steps to reproduce:**
- Install website_forum module
- Create a new portal user and log in with it
- Go to the website forum to see that the account requires email verification
- Send the verification email to see the green banner ('an email was sent to XX')
- Add XP (karma) points to this user as admin (User > Smart actions > Karma)
- Switch back to the portal account
- Check any public user profile on the forum (`/profile/user/2?forum_id=2`)
- Green banner now displays the private email of the user you're checking
**Issue:**
On the `email_validation_banner` the user field is used for the validation
data, but it is overridden by `_prepare_user_profile_values` which is
setting the current page user.
**Fix:**
Properly set `user` to `env.user` in the template.
opw-6276809
Forward-Port-Of: odoo/odoo#269249When a Google Calendar account is disconnected with event deletion enabled, the system now removes all related recurring schedule rules as well as the individual events. This prevents leftover recurrence data from blocking future resynchronization of the same account.
Original PR description
When we disconnect a google account with the delete events option enabled, we should also delete `calendar.recurrence` records, not just the base events. Broken flow: 1. Sync google calendar with some recurrent event on google 2. Reset account via the wizard 3. -> The events are removed, but the recurrent rule remains in the db 4. Resync with the same account 5. -> The recurrence is not created because it already exists on the database Follow-up for odoo/odoo@ae52126522e3570e11845c3c04d0eb6b198b3848
This update restores a Planning tour that was failing after changes to the popover interface. It ensures the automated test matches the new behavior so Planning can be validated reliably again.
Original PR description
PR [1] refactored the gantt popover API, and classname `.popover-footer` has been replaced by `.o_popover_footer` (i.e. we no longer use the bootstrap class for popovers). Tours that fail due to this change have been adapted accordingly. However, there was a planning tour that was temporarily deactivated and that we thus didn't spot. This commit fixes it. [1] odoo/enterprise#114328 runbot error~940279
When two restaurant table orders are merged, items that were already sent to the kitchen now keep their sent status correctly. This prevents the same products from being shown as new and sent to the kitchen printer again, reducing duplicate kitchen tickets and avoiding confusion for staff.
Original PR description
When transferring an order to a table that already has an open order, identical products are merged into a single line. If both orders were already sent to the kitchen printer, the merged line was…
When transferring an order to a table that already has an open order, identical products are merged into a single line. If both orders were already sent to the kitchen printer, the merged line was incorrectly marked as new and had to be sent again. Steps to reproduce: ------------------- * Open table 1, add product A (2 units) and product B, send to kitchen * Open table 2, add product A (3 units) and product C, send to kitchen * On table 2, transfer/merge the order to table 1 > Observation: product A shows 2 units as new and must be sent to the kitchen printer again, although all quantities were already sent. Why the fix: ------------ When merging preparation history for identical lines, handlePreparationHistory overwrote the destination sent quantity with the source one instead of summing both. The kitchen diff then treated the missing quantity as new changes. A unit test will be added in 18.3. opw-6246470 Forward-Port-Of: odoo/odoo#271828 Forward-Port-Of: odoo/odoo#267915
This update prevents the automated Clickall test tool from contacting Odoo Fin’s live servers when checking the accounting dashboard. It extends the existing mock to cover a newer endpoint version, helping tests stay reliable and safe from external service changes.
Original PR description
This commit follows up on [1] by extending the Odoo Fin request mock to cover the new version 2 (v2) favorite institutions endpoint. Previously, a mock was introduced to prevent the Clickall tool from making real external HTTP requests to `production.odoofin.com` when displaying the accounting dashboard. This update ensures that the newly introduced v2 URL is also safely intercepted, keeping the automated tests fully isolated from production servers. runbot-234936 [1] : https://github.com/odoo/odoo/commit/c6451015f1b01c3e1defe4a576989fd4bfdf2cdb Forward-Port-Of: odoo/odoo#272339
Miscellaneous changes
This pull request updates the saas-19.4 release information in Odoo’s release file. It helps keep the product versioning and release metadata aligned with the current branch, supporting a clean and consistent software release process.
This pull request appears to be a release coordination update for the SaaS 19.4 branch. It mainly prepares the branch for delivery and does not indicate a specific business feature or user-facing change.