Daily updates from Odoo
Friday, March 6, 2026
13 changes · saas-18.3
Resolved issues and error corrections
This update fixes a bug where users could cancel subscriptions that had already been closed and generated invoices. The change adds a check to ensure that cancelled subscriptions with outstanding invoices cannot be re-cancelled, preventing potential billing issues and maintaining data integrity. This ensures accurate subscription management.
Original PR description
Steps to reproduce: -------------------------------- 1. Install Subscription module 2. Create a new subscription quotation and confirm it 3. Generate an invoice for the subscription 4. Attempt to…
Steps to reproduce: -------------------------------- 1. Install Subscription module 2. Create a new subscription quotation and confirm it 3. Generate an invoice for the subscription 4. Attempt to cancel the subscription * A ValidationError is correctly raised 5. Close the subscription by selecting any close (churn) reason 6. Attempt to cancel the same closed subscription again Observation: -------------------------------- The subscription is successfully cancelled even though it already has invoices Issue: -------------------------------- In the following code: https://github.com/odoo/enterprise/blob/9e39b4b85fcb9f6ed5b21b942796b76b8a6eefdb/sale_subscription/models/sale_order.py#L741-L742 The cancellation logic does not check whether a subscription is already churned and still has active invoices Solution: -------------------------------- Added an additional condition to prevent cancelling churned subscriptions that still have active invoices opw-5479719 Forward-Port-Of: odoo/enterprise#106596
This update corrects a visual issue where avatars in collaborative list items (like 'To Do' notes) were consistently displayed on the first line instead of following the user's focus. The fix ensures avatars remain aligned with the selected list item, improving the user experience when navigating between different windows or sections of a collaborative note.
Original PR description
Since [1] when using collaboration, the position of the avatar for list items is always displayed on the first line - instead of following the user's focus. This commit fixes this by only applying the patch of [1] when inside an embedded component. Steps to reproduce: - Go to a "To do" note - Add a checked list with indented items - Access the same note from another window - Move around the checked list and observe avatar in other window => Avatar remained on first line while moving around list items [1]: https://github.com/odoo/odoo/commit/9863cb25d6dfdba224897f21634bdaaf3eca91a7 task-5930388 Forward-Port-Of: odoo/odoo#248438
This update resolves an issue where payment processing through Authorize.Net was occasionally failing due to a conflict between API requests and background updates. By implementing a temporary lock on payment records, Odoo now ensures that tokens are used only once, preventing errors and guaranteeing successful payment processing. This improves the reliability of our payment system.
Original PR description
Currently, when processing a payment through Authorize.Net, a concurrent update (e.g., from a background cron job) can trigger a PostgreSQL `SERIALIZATION_FAILURE` right after the API request succeeds. Because Odoo automatically retries the request upon this failure, the second attempt sends the same One-Time-Use (OTS) token. Authorize.Net rejects the reused token ("Invalid OTS Token"), causing a successful charge to be incorrectly marked as failed in Odoo.
This commit introduces a pessimistic lock (`FOR NO KEY UPDATE`) on the `payment_transaction` record before making the call to Authorize.Net. This serializes access to the transaction row, ensuring that any lock waits or serialization failures occur *before* the single-use token is consumed, allowing Odoo's automatic retry mechanism to succeed safely.
opw-5475032
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#249088This update adjusts the minimum and maximum amounts for employee mobility budgets each year, aligning with local regulations. These adjustments ensure employees have access to the appropriate budget levels for relocation expenses. This change impacts the HR payroll module.
Original PR description
Each year the minimum and maximum amount of mobility budget is indexed, here are the new values. Forward-Port-Of: odoo/enterprise#109641
This update resolves an issue where editing recurring events synced from Outlook triggered unwanted email notifications to attendees. The fix prevents Odoo users from directly editing Outlook-created recurring events, ensuring email notifications are only sent when necessary. This improves user experience and reduces unnecessary communication.
Original PR description
## Issue: Recurring events created from Outlook should not be able to be edited from Odoo, this is because the changes made are going to be sending unwanted emails to the attendees. ## Steps to…
## Issue: Recurring events created from Outlook should not be able to be edited from Odoo, this is because the changes made are going to be sending unwanted emails to the attendees. ## Steps to reproduce: 1. Connect to Outlook and Sync for user A. 2. Create a recurring event from Outlook. 3. Connect into a user B with access to the event and edit all the events from the series. 4. Run the scheduled action to sync user A. 5. Many emails are going to be sent to the attendees from Outlook. ## Solution: With the current implementation, we are going to avoid editing for the users connected to Outlook, however any user with the access to that event in Odoo and that it has not synced with Outlook is going to be able to edit the event. To avoid this, we should check if the event is recurring and it has been created from Outlook, for this we are going to be looking for the event `microsoft_recurrence_master_id` which will be available only for the recurring events created from Outlook. opw-4374503 Forward-Port-Of: odoo/odoo#252079 Forward-Port-Of: odoo/odoo#199663
This update fixes an issue where manually adjusted prices in Point of Sale (PoS) settlements weren't being correctly applied. Previously, PoS settlements would revert prices back to the base price, even if the user had manually set a different price. Now, the system accurately reflects user-defined prices during settlement, ensuring accurate transactions.
Original PR description
**Steps to reproduce:** - Create a product tracked by lot, set it's price to 1000 - Create a quotation add a line with the created product and change the price to 1200 - Add another line with the…
**Steps to reproduce:** - Create a product tracked by lot, set it's price to 1000 - Create a quotation add a line with the created product and change the price to 1200 - Add another line with the same product and change it's price to 600 - Go to PoS and settle this quotation - The lines' prices will be 1000 and 600 instead of 1200 and 600 **Why the fix:** In the event of a settle with a product tracked by lots, we are setting the price of all *related_lines* (lines with the same product in this case) to it's base price, not taking into account the fact that this price has been modified by the user when making the quotation. This only happens for related lines, which explains why one line's price is still 600 while the other was reverted to the base price of 1000 instead of being 1200 as it was previously set. To avoid this, we now set the price_unit back to the base one only if the price hasn't been changed manually. opw-5223463 Forward-Port-Of: odoo/odoo#251883 Forward-Port-Of: odoo/odoo#238295
This pull request updates the core spreadsheet component within Odoo. It addresses several minor bugs and improves the user experience, specifically related to chart panels, dynamic pivots, and button visibility. These updates ensure the spreadsheet functionality remains stable and performs optimally.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/2621ce3536 [REL] 18.3.37 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/2621ce3536 [REL] 18.3.37 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/14cc92db58 [FIX] chart-panel: keep buttons visibles [Task: 5926661](https://www.odoo.com/odoo/2328/tasks/5926661) https://github.com/odoo/o-spreadsheet/commit/c85f58f018 [FIX] Dynamic pivot: header alignment [Task: 5922279](https://www.odoo.com/odoo/2328/tasks/5922279) 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 prevents Instagram posts from failing due to delays in media processing. By using a scheduled cron job to retry publication, we ensure posts are successfully published even when the Instagram API takes a little extra time to process media containers. This improves the overall reliability of Instagram posting functionality.
Original PR description
With the current behavior the Instagram API sometimes requires time to process media containers, the media_id is not yet ready on Instagram side, leading to failed posts. To avoid this, we now use an asynchronous flow: If the media container is not immediately 'FINISHED', we store the container ID in `instagram_post_id` (prefixed with `containerIDs-`), set the state to 'posting', and trigger the scheduled cron to retry in 1 minute. The `_cron_publish_scheduled` method has been updated to detect these pending posts and resume the publication attempt so workers remain free while Instagram processes the media. opw-5081325 Co-authored-by: @ushyme Forward-Port-Of: odoo/enterprise#100313
This update resolves an unexpected behavior in the HTML editor within Safari, where pressing the spacebar would incorrectly move the selection. The fix involves a manual merging of text nodes to ensure accurate selection handling, improving the editor's reliability for Safari users. This ensures consistent editing functionality across different browsers.
Original PR description
Problem: In Safari, pressing space sometimes can move the selection unexpectedly. Cause: `node.normalize()` in Safari doesn't work in the same way as in Chrome or Firefox. When the selection is on a…
Problem: In Safari, pressing space sometimes can move the selection unexpectedly. Cause: `node.normalize()` in Safari doesn't work in the same way as in Chrome or Firefox. When the selection is on a text node adjacent to another and we normalize, the two text nodes will be merged but the selection will move to the parent element instead of the correct position inside the new merged text node. Example: before normalize: `<span>"ab""c[]d"</span>` after normalize: `<span>"ab[]cd"</span>` (expected) vs `<span[]>"abcd"</span>` (Safari) Solution: Instead of using `normalize`, we manually merge adjacent text nodes and properly restore the selection by computing the absolute offset before the merge and restoring it to the correct position in the merged text node. Steps to reproduce: - Have two adjacent text nodes inside a `span`. - Put the selection on the second text node in the middle. - Press space. - The selection will move to the end of the text. opw-5956709 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252068 Forward-Port-Of: odoo/odoo#251918
This update fixes an issue where self-order prices weren't accurately calculated when taxes and fiscal position mappings were involved. The change ensures prices are correctly recomputed using accounting methods, leading to more accurate order totals and financial reporting. This improves the reliability of self-order transactions.
Original PR description
Before this commit, the price of order lines from self was recomputed in the backend but for orders with price included taxes and a fiscal position mapping, the recomputation was not correct. This commit fixes the issue by recomputing the prices using compute_all method from accounting on taxes after fiscal position. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252048 Forward-Port-Of: odoo/odoo#251945
This update corrects a discrepancy in the Spanish reporting module (l10n_es_reports) to align with updated Spanish accounting regulations (PGCE). Specifically, account code 189 has been added to the Abbreviated Balance Sheet report, ensuring accurate financial reporting for Spanish businesses using Odoo Enterprise.
Original PR description
According to last updated of PGCE https://www.boe.es/buscar/act.php?id=BOE-A-2011-18458 <img width="790" height="342" alt="image" src="https://github.com/user-attachments/assets/d5875946-d3b0-480b-bea1-8a7f4202aef7" /> @moduon MT-14017 Forward-Port-Of: odoo/enterprise#108557
This update fixes a bug in the Point of Sale where a warning wasn't displayed when selling products with unique serial numbers and quantities greater than one. Previously, the system didn't alert users that only one serial number was being used for multiple products. This change ensures proper warnings are shown, preventing potential errors during transactions.
Original PR description
## Issue In the Point of Sale, when selling a product tracked by unique serial number with a quantity greater than one, no warning are displayed to the displayed as long as one serial number is…
## Issue
In the Point of Sale, when selling a product tracked by unique serial number with a quantity greater than one, no warning are displayed to the displayed as long as one serial number is given.
## Steps to reproduce
1. Install Point of Sale (`point_of_sale`)
2. In Settings, enable *Lots & Serial Numbers*
3. Create a PoS product P
- Tracked *By Unique Serial Number*
- Update its quantity and create a few serial numbers
4. In the Point of Sale, select product P and set a serial number, then update the quantity to 2.
5. **The _Valid product lot_ icon next to the product is still green. We can also go to the payment screen without any warning, even though only one serial number was selected for two products.**
## Cause
The color and name of the icon displayed next to the serial tracked product is decided here:
https://github.com/odoo/odoo/blob/3d787e1b7c2ab471694849a04bdf2d3a5ff7e515/addons/point_of_sale/static/src/app/screens/product_screen/order_summary/order_summary.xml#L9-L14
The `PosOrderLine.hasValidProductLot` is defined here:
https://github.com/odoo/odoo/blob/3d787e1b7c2ab471694849a04bdf2d3a5ff7e515/addons/point_of_sale/static/src/app/models/pos_order_line.js#L333-L341
The very first condition of this method makes the icon green as long as one serial number is selected.
opw-5486210This update fixes an issue where Romanian customers without a company registry were incorrectly assigned the default VAT scheme. The change removes a faulty condition, ensuring that customers without VAT receive the appropriate default VAT scheme as intended. This ensures accurate tax calculations for Romanian businesses.
Original PR description
Problem --------- In a recent fix, in the Tax Scheme customer node, the scheme type was recomputed correctly depending on the companyID node. However, during the fix, a condition was wrongly introduced. This will lead to some issue: when a customer has no VAT, he should be given the default VAT. However, due to condition, the customer gets given the Default VAT only when he does not have a vat NOR A COMPANY REGISTRY. Solution --------- Remove the condition no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252475