Thursday, March 26, 2026
19 changes · 19.0
Enhancements to existing features
Swiss localization now uses corrected default account settings. This helps companies using the Swiss setup start with more accurate accounting defaults and reduces manual corrections during configuration.
Original PR description
[IMP] l10n_ch: Set default accounts in Switzerland Some defaults accounts in Switzerland were misconfigured, this commit set clean values by default task-6043978
Employee names now display with proper spacing after the avatar in HR views. This small visual improvement makes employee information easier to read and gives the interface a cleaner appearance.
Original PR description
Before this PR, a spacing was missing between the employee image and the employee name. It was added by switching the noSpacing to false. | Before | After | |--------|--------| | <img width="567" height="142" alt="Screenshot 2026-03-25 at 13 35 42" src="https://github.com/user-attachments/assets/e513600c-7019-490d-bc2f-da9819ccce89" /> | <img width="567" height="142" alt="Screenshot 2026-03-25 at 13 35 31" src="https://github.com/user-attachments/assets/744f36f6-52e3-4ad3-91cc-135071c9e0c9" /> | task-5960515 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
Closing the online payment QR popup in Point of Sale no longer triggers an error. This prevents interruptions during checkout and keeps the payment flow stable for cashiers and customers.
Original PR description
Steps to reproduce: ----------- - Setup Online Payment. 1. Open POS. 2. Make an order. 3. Choose Online Payment. 4. Close the QR popup. Issue: -------- Traceback occurs when closing the online payment QR popup. Cause: ------- `onClose()` used `this.currentOrder`, which is undefined. Fix: --------- Replaced `this.currentOrder` with `this.order` to safely reset `onlinePaymentData`. Task-6053434
Features or functions removed from Odoo
This update removes a redundant icon path from the l10n_tw_reports module's manifest file. This simplifies the module's setup and reduces potential issues related to outdated or incorrect icon references. The change is a minor improvement to the reporting module's configuration.
Original PR description
Remove the hardcoded icon path from the manifest. Task-6007589 CE PR: https://github.com/odoo/odoo/pull/254826
Point of Sale receipts no longer print the company information twice. This keeps customer receipts cleaner and avoids confusion caused by repeated business details.
Original PR description
Before this commit, the receipt was showing the company information twice. It happened after the commit https://github.com/odoo/odoo/commit/dca40d16481ba504d608cc65d82e7821e01c5932. opw-6053013 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255368
This fix prevents an accounting inventory valuation error when a manufacturing order is unbuilt and its component quantity is later set to zero. It helps users review inventory valuation without encountering a system crash in this edge case.
Original PR description
**Issue**: Unbuilding a MO and setting its componentquantity to zero could lead to a division by 0. **Steps to reproduce**: - Create a manufacturing order for A with component B. - Consume 2 units of…
**Issue**: Unbuilding a MO and setting its componentquantity to zero could lead to a division by 0. **Steps to reproduce**: - Create a manufacturing order for A with component B. - Consume 2 units of the component - Unbuild the order - Update the quantity of the component on the original MO from 2 to 0. - Go to Accounting > Review > Inventory > Inventory Valuation - Check the valuation in the future. -> A traceback occurs **Cause**: While computing the value for the move `Production -> Stock` (the unbuild move): https://github.com/odoo/odoo/blob/c8e2175253d7cd15b7cbcf2559d1ae5283ab5896/addons/stock_account/models/product.py#L383 It needs to retrieve value for a quantity of 2 units: https://github.com/odoo/odoo/blob/c8e2175253d7cd15b7cbcf2559d1ae5283ab5896/addons/stock_account/models/stock_move.py#L339 Since there is no bill nor PO/SO, it tries to retrieve from returns (i.e: using the original move of the mo): https://github.com/odoo/odoo/blob/c8e2175253d7cd15b7cbcf2559d1ae5283ab5896/addons/stock_account/models/stock_move.py#L379 The original move now has a quantity of 0 (see step to reproduce) and there was no guard, so a traceback is raised: https://github.com/odoo/odoo/blob/c8e2175253d7cd15b7cbcf2559d1ae5283ab5896/addons/stock_account/models/stock_move.py#L446 opw-5945707
Odoo now cleans up the allowed email catchall domain list even when it is created or edited manually in system settings. This prevents extra spaces in comma-separated domain lists from causing valid domains to be ignored, helping inbound email routing behave as expected.
Original PR description
Since its introduction (https://github.com/odoo/odoo/pull/76734), the "mail.catchall.domain.allowed" system parameter is normally sanitized by `_sanitize_allowed_domains` when using `set_param`. But…
Since its introduction (https://github.com/odoo/odoo/pull/76734), the "mail.catchall.domain.allowed" system parameter is normally sanitized by `_sanitize_allowed_domains` when using `set_param`. But the method is not run when the system parameter is created manually, for example through the UI, because the current conditional logic is not triggered for write and create call. This can be an issue if for example the use submits this value: "domain1.com, domain2.com,domain3.com" The comma seperated list will only be split by ',', meaning that the second element is " domain2.com" (space character in front). As such, that domain will not be used as expected, since most flows using that data will end up comparing "domain2.com" vs " domain2.com", and not considering it a match. Before this fix: Create new record in System parameters with key = "mail.catchall.domain.allowed" value = "domain1.com, domain2.com,domain3.com" -> after save, value == "domain1.com, domain2.com,domain3.com" After this fix: -> after save, value == "domain1.com,domain2.com,domain3.com" OPW-5505414 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244279
The website editor preview now handles page unloads more safely when parts of the preview are already closing. This prevents users from seeing a generic fallback page after the preview refreshes or unloads, improving reliability with no expected workflow change.
Original PR description
When the website preview unloads, it copies the current document into the fallback iframe and restores its scroll position. At that point, one of the two documents can already be partially torn down, so `getScrollingElement(...)` may return `null`. The code then dereferenced `.scrollTop` unconditionally, which crashes `WebsiteBuilderClientAction.onPageUnload()` and leaves the generic fallback page visible. This commit only restores the scroll position when both scrolling elements are available, so the preview degrades gracefully instead of crashing. opw-6037573 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue where multi-line product descriptions could appear with their lines reversed in the online shopping cart. This keeps product details and important add-on information readable and in the intended order for customers.
Original PR description
# How to reproduce - On any published product, set the quotation description to something with multiple lines - Go to the website and that product to the cart - Go to the cart # The problem The lines…
# How to reproduce - On any published product, set the quotation description to something with multiple lines - Go to the website and that product to the cart - Go to the cart # The problem The lines of the description are reversed # Why This commit (https://github.com/odoo/odoo/commit/5505cab4d0398aa72de4d00e59c92e71483bbb44) reversed the lines of the description of a cart line. It is explained here (https://github.com/odoo/odoo/pull/223433) that because some module (like rental) add important informations at the end of the description, the lines are reversed to show those informations near the product name. The way it was implement though just split the description of the sale_order_line in different lines and then reverse it. This sadly does not work with multi-lines description because it divides them before reversing. We need to first split the description in "blocks" then divide those blocks into lines and reverse them. opw-5943206 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue in the HTML editor where replacing an image with a caption required pressing Undo twice. Users can now undo the image replacement immediately, making editing content more predictable and less frustrating.
Original PR description
Problem: Undo does not work as expected when an image has a caption. Cause: When replacing an image that has a caption, two history steps are added. As a result, the first undo does not revert the image replacement. Solution: Remove the unnecessary history step so the image replacement is correctly reverted on the first undo. Steps to reproduce: - Go to To-do → Create New. - Upload an image and add a caption. - Replace the image with another one. - Press Undo (Ctrl + Z). - Observe that nothing happens on the first undo. task-6014046 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252786
Fixes an issue in the website editor where the image quality slider could disappear after editing images that use decorative shapes. This helps users keep control over image optimization and formatting when customizing page snippets.
Original PR description
Before this commit, the quality option would not work properly for images with a shape applied by default. After changing an option, the DOM would be updated and the slider disappeared because the…
Before this commit, the quality option would not work properly for images with a shape applied by default. After changing an option, the DOM would be updated and the slider disappeared because the image format would not be considered valid anymore.
Steps to reproduce the issue :
- Drop a snippet with an image with a shape (.s_cta_mockup, ...)
- Do one of the following:
- Move the quality slider
- Change an shape option
=> The Quality slider disappeared.
If the user replaces an image with a png, sets the format to "webp" and adds a shape, the dataset would have the following :
- format-mimetype: the value of the format option ("image/webp")
- mimetype-before-conversion: the original format ("image/png")
- mimetype: the mimetype of an image with shape ("image/svg+xml")
We first evaluate "data-format-mimetype", as it indicates the current format of the image (if it was changed by the user). Otherwise, we check "data-mimetype-before-conversion" since the mimetype for an image with shape is always "image/svg+xml" and doesn't correspond to the real image format. Finally, default to getMimetype to avoid issue for images on which nothing no option was changed.
task-5358952
Forward-Port-Of: odoo/odoo#240360This fixes how website snippet previews handle dynamic content so sample data is not accidentally cleared. Business users get more reliable previews when choosing or customizing website building blocks.
Original PR description
The commit 0327a6d37fe3274d59c158eaacb153a43121df0f added the interaction to fetch content of dynamic snippet in the iframe of the dialog to preview snippets. To avoid emptying dynamic snippets filled with fake data, it skipped rendering in certain condition. This commit changes that condition to better match the intent to not remove preview data. task-5427353 Forward-Port-Of: odoo/odoo#255610
Odoo no longer tries to register companies to receive XRechnung documents through Peppol, because this type of document is intended for government bodies to receive and regular companies only need to send it. This prevents unnecessary warning logs from a service that has already been archived.
Original PR description
Remove the service as we're only supposed to send. It's the government bodies who need to receive these kinds of document. It got archived on IAP side, so they're not really added, but asking this services logs a warning. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an automated restaurant point-of-sale test that could fail because it moved faster than the system synchronization. The change helps keep validation results reliable without changing day-to-day user behavior.
Original PR description
The tour `test_preset_timing_restaurant` from the test suite was failing because the steps were executed too quickly. When creating a new order, the preset timing popup is opened, which triggers a synchronization of the order. At that moment, the order has no order lines, and the synchronization takes some time to complete. During this delay, the tour adds a new order line while the sync is still in progress. As a result, when the `sync_from_ui` response returns, the frontend data is updated with the synchronized order (which still has no order lines), overriding the order line that was just added. runbot error: 234567 --- Runbot Error: https://runbot.odoo.com/odoo/runbot.build.error/234567 Forward-Port-Of: odoo/odoo#255810 Forward-Port-Of: odoo/odoo#254190
This fixes an issue where point of sale manufacturing cost calculations could fail for users working in multi-company setups. The system now avoids checking manufacturing bill of materials records from companies the user cannot access, preventing unnecessary errors during POS order processing.
Original PR description
When computing the product cost in `_get_product_cost_with_moves`, iterating over `product.bom_ids` would include BOMs from all companies, causing an `AccessError` when the current user lacked read access to a BOM belonging to another company. opw-6060735 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a misinterpretation of the W4 filing date within the US payroll module. Previously, the system incorrectly associated the date of W4 completion with the date it's filed with the employer. This change ensures accurate tracking of the filing date, aligning with US tax regulations. This resolves a potential reporting discrepancy.
Original PR description
This field is about when the W4 is filed with the employer, not when it's filled in. opw-5096780 Forward-Port-Of: odoo/enterprise#111679 Forward-Port-Of: odoo/enterprise#111213
This update resolves a slow test within the Documents module by forcing the database to refresh its statistics. This optimization prevents inefficient query plans and significantly reduces test execution time, improving overall development efficiency. The change addresses a performance issue that was impacting test stability.
Original PR description
This commit introduces explicit `ANALYZE` statements on the `documents_document` and `documents_access` for the test `test_documents_embedded_actions_security`. This forces postgres to refresh its statistics for the current transaction, ensuring it uses efficient query plans. The slow test seemed to be cause by unnecessarily triggering jit and optimizing it. Especially the optimisation resulted in the test sometimes taking more than 3 minutes to run instead of taking seconds. Task-6005265 https://runbot224.odoo.com/runbot/static/build/102793860-master/tests/profile/profile_2.html#localProfilePath=1 <img width="1920" height="382" alt="SlowTest" src="https://github.com/user-attachments/assets/dea5a03d-9fc0-4fad-ac96-ef57d9816b46" />
This update resolves an issue where product descriptions in the shopping cart were displayed in reverse order. The root cause was a change introduced to prioritize certain information, but it failed to account for products with multi-line descriptions. The fix ensures product descriptions are correctly rendered in the cart, improving the user experience.
Original PR description
Issue: --- Due to this issue, the description following lines are inversed. Steps to reproduce: --- 1- In product page in backend, add a multiline "Short Description" to a product. 2- Navigate to website and add the product to the cart. 3- Open the cart. Outcome: The description after lines are shown inversed. Cause: --- This is introduced by odoo/odoo#223433. It was done to ensure some information such as rental date and variant description are shown at the beginning. However, it didn't consider that the product description itself might have multilines. Fix: --- There is not a clean way to extract the information from the computed name. To avoid the problem, we can compute the description following lines manually without depending on the line.name. opw-5976614
This update ensures that the currency used for Stripe expense payments is consistently defined within the company settings. Previously, this could lead to payment errors. This fix improves the reliability and accuracy of expense processing, preventing potential disruptions to employee reimbursements.