Daily updates from Odoo
Wednesday, October 8, 2025
11 changes · 17.0
Resolved issues and error corrections
New user invitation emails now generate website and email links correctly. This prevents recipients from receiving malformed links and helps invited users access Odoo without confusion.
Original PR description
Website and email links were malformed on the New User Invite email template. Later versions also have this issue on the other templates will change those in forward ports. Renderer was treating the string formatting as a string itself when using the double curly braces on variables. Removed the curly braces so the variable was properly evaluated and inserted into the string. opw-4977756 Forward-Port-Of: odoo/odoo#221487
This fixes a rounding issue that could make fully prepaid Saudi invoices show a negative zero amount, causing the invoice data and QR code to disagree. Businesses using Saudi e-invoicing can now submit these affected invoices to ZATCA successfully instead of receiving a rejection.
Original PR description
Issue: Doing down payment up to 100% can create a -0.00 PayableAmount that won't match the QR Code value, as it's set to absolute. Step to reproduce: 1 Install l10n_sa_edi 2 Navigate to Accounting >…
Issue: Doing down payment up to 100% can create a -0.00 PayableAmount that won't match the QR Code value, as it's set to absolute. Step to reproduce: 1 Install l10n_sa_edi 2 Navigate to Accounting > Configuration > Taxes. 3 Select the 15% tax and copy it. 4 In the Advanced Configuration tab, select the "Included in Price" option. 5 Navigate to Sales. 6 Select NEW 7 Add ARAMCO (default customer in l10n_sa) as a customer 8 Click into ARAMCO and change contact type to an Individual. 9 Navigate back to Sale Order. 10 Add the following products: - a Booking Fees. 1 quantity. Unit price 225.4 15% tax (price included) - b Burger Menu Combo. 1 quantity. Unit price 180 15% tax (price included) - c Booking Fees. 1 quantity. Unit price 300 15% tax (price included) - d Burger Menu Combo. 1 quantity. Unit price -101.43 15% tax (price included) 11 Select Confirm. 12 Select Create Invoice, then Down payment of 100%. 13 Confirm the invoice. 14 Navigate back to Sale order. 15 Select Create Invoice, then Regular Invoice. 16 Confirm the invoice. 17 Select "Process now" in the blue banner. 18 Receive error. Current behavior: - Message: "Invoice was rejected by ZATCA" - ZATCA return an error 400 and states the QR Code is invalid as the BT-115 in the invoice (XML) and QRCode doesn't match Expected behavior: - Message: "Invoice Successfully Submitted to ZATCA" Cause of the issue: - Some issues with floating point operations create a difference in value between a 100% down payment and the value of the invoice it covers. This results in a -1e-13 `payable_amount` that ends up being a -0.00 PayableAmount after going through `float_rounding`. Solution: - By rounding the `payable_amount` as per currency limit, the `payable_amount` fall back to -0.00. Then it goes through `float_rounding` which return 0.00. opw-5059795 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes incorrect tax mappings in the Maltese localization for EU and non-EU partner fiscal positions. Businesses using Maltese accounting will now have sales and purchase taxes mapped to the correct tax type and rate, reducing the risk of wrong tax treatment on transactions.
Original PR description
### Steps to reproduce: - Install "l10n_mt" and switch to a Maltese company - Check the fiscal position "EU Partner", it maps Sales taxes to Purchase ones - "Partner outside the EU" maps Purchase taxes to Sales ones ### Solution: Fix the CSV. We map the taxes respecting Sales/Purchase and with the same percentage. opw-5065298
This fix sends the extra payment details required by some Adyen payment methods, such as customer country and order line information. It helps transactions using services like Klarna complete successfully instead of being blocked by missing required data.
Original PR description
Some payment methods eg. Klarna require 'country code' and 'line items' in order to process the transaction. opw-5077617
This fix prevents Chrome on iOS from automatically changing parts of page text in a way that could disrupt Odoo screens. It helps keep the web interface stable for affected mobile users, especially on Chrome iOS versions where this browser behavior reappeared.
Original PR description
Chrome iOS wraps some text nodes (like measures, email...) with a `<chrome_annotation>` tag, which breaks OWL rendering. This commit works around it by adding the (undocumented) `<meta name="chrome"…
Chrome iOS wraps some text nodes (like measures, email...) with a `<chrome_annotation>` tag, which breaks OWL rendering. This commit works around it by adding the (undocumented) `<meta name="chrome" content="nointentdetection">` tag to disable this Chrome behavior. The tag has to be set before the onDOMContentLoaded event to be taken into account. Note: Looks like this behavior was present in Chrome iOS 127 and disabled afterward (because it already had issues) but it appeared again in version 140-141. References: - https://issues.chromium.org/issues/353650041 - https://issues.chromium.org/issues/388718411 - https://stackoverflow.com/questions/78207646/how-do-i-disable-chrome-annotation-tags - https://stackoverflow.com/questions/78575970/prevent-auto-detection-of-phone-numbers-in-chrome-mobile - https://stackoverflow.com/questions/78725191/stop-chrome-ios-auto-detecting-numbers-followed-by-letter-m-as-metre-units-an - https://github.com/solidjs/solid/issues/2235 opw-4969197
Odoo Studio now creates edited views based on the nearest main view instead of accidentally basing them on an extension view. This helps prevent customization issues and keeps Studio changes attached to the correct underlying screen structure.
Original PR description
…ry view Accidentally pass an inheriting view id to edit view. Before this commit, the studio view thus created inherited from the extension view After this commit, it inherits from the closest primary view. opw-4930800
Belgian POS sessions using the fiscal Blackbox can now open correctly when users have multiple companies selected. The change prevents a tax-check error that blocked session startup in multi-company setups.
Original PR description
When opening a POS session with multiple companies selected, an error is raised due to direct access to `taxes_id.amount`, which assumes a single tax record. Steps to reproduce: 1. Create two Belgian companies and configure Blackbox (= `iface_fiscal_data_module` = True on POS config) 2. Select both companies in the UI 3. Try to open the POS 4. Error: ValueError: Expected singleton: account.tax(12, 83) This fix uses `any()` to check if all taxes are 0% instead of accessing the `amount` attribute directly, avoiding singleton errors when multiple taxes exist across companies. opw-4962923 Forward-Port-Of: odoo/enterprise#91984
Fixed an issue in Time Off where mandatory day markers could appear on the wrong calendar date when users viewed Odoo in Hebrew. This helps ensure employees and managers see accurate time-off calendar information regardless of language settings.
Original PR description
Steps to reproduce: 1. Install Time Off (hr_holidays). 2. Go to Time Off → Configuration → Mandatory Days. 3. Create a mandatory day. 4. Open the user profile (top right corner) and change the…
Steps to reproduce: 1. Install Time Off (hr_holidays). 2. Go to Time Off → Configuration → Mandatory Days. 3. Create a mandatory day. 4. Open the user profile (top right corner) and change the language to Hebrew. 5. Open Time Off and view the calendar. Issue: The mandatory day marker is displayed on the incorrect date when the interface is in Hebrew. Cause: https://github.com/odoo/odoo/blob/ea9cd8357e148654458e3505963ae847d181776e/addons/hr_holidays/static/src/views/hooks.js#L18-L32 This is because the code was using 'info.el.dataset.date' directly which is based on the rendered DOM element and can be influenced by locale formatting, instead of the canonical ISO date, leading to incorrect selectors when trying to add the hr_mandatory_day CSS classes to the date. solution: Use the correct date value derived from info.date via Luxon’s toISODate() method Replaced info.el.dataset.date in the DOM selectors with the normalized ISO date to ensure that the correct element is targeted regardless of the current language or locale. opw-4979274
This fixes French localization time-off calculations so leave-related timesheet entries use the employee's actual work schedule, even when it starts earlier or ends later than the company schedule. It prevents incorrect worked-hour totals, helping payroll and timesheet records reflect the correct absence duration.
Original PR description
This bug is in France localization. In some cases employee schedule seems ignored in timesheet entry (`account.analytic.line`) creation, and the duration field is created using the company schedule.…
This bug is in France localization. In some cases employee schedule seems ignored in timesheet entry (`account.analytic.line`) creation, and the duration field is created using the company schedule. The reason is the case which the employee schedule starts before company scheudle or ends after it. To reproduce the bug: 1- Make a db with fr company (install l10n_fr) 2- Make two working schedule: - Company schedule with working day on Monday from 8:00-12:00 13:00-17:00 - Employee schedule with working day on Monday from 8:30-12:25 13:30-17:15 3- Assign company schedule to company in `Company Working Hours` in Setting and apply employee schedule to an employee from `Payroll` tab of employee 4- Allocate some time off to the employee and take a time off on Monday 5- Check the work entries for the day you took the day off on timesheet app 6- 7:24 `Worked Hour` is shown instead of 7:40 The bug occurs because in calling `adjust_date_range`, the case which employee's schedule ends after company schedule is not considered. opw-4868643 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The hierarchy view now handles circular reporting relationships, such as an employee being set as their own manager, without crashing or getting stuck. This improves reliability for users viewing organization charts and other hierarchy-based screens.
Original PR description
This commit fixes some traceback errors in the web_hierarchy module by refining the cycle detection of records in hierarchies. Infinite loops in case of a cycle's presence in the `removeChildNodes` and `processNode` methods are now prevented. Additionally, tree re-rooting in case of the presence of two nodes in the same tree, which implies a cycle's existence, is now avoided. There was an edge case where an employee could be their own manager, creating two child nodes of that employee. The case is now handled by making sure that records are unique for each parent ID in the `recordsPerParentId` object. task-5022670 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Survey respondents can now submit a multiple-choice question with a written comment when comments are allowed as an answer, even when roaming is enabled. This prevents incorrect required-answer warnings and adds stronger validation to stop multiple answers on single-choice questions.
Original PR description
Issue: When answering a question with a comment in multiple choice with roaming activated for the survey, the UI will display a warning message that says the question requires an answer. Cause: The backend creates a skipped record if none of the pre-created answers is chosen. Solution: Don't create a skipped record if a comment counts as an answer and a comment is provided. Added validation of input and unittests Task-5062984