Friday, March 20, 2026
19 changes · saas-19.2
Enhancements to existing features
This update adds a mechanism to allow other Odoo modules to adjust timesheet values directly within the timesheet wizard. Previously, changes to timesheets were limited. This enhancement provides greater flexibility for integrating timesheet data with other business processes and workflows.
Original PR description
Add a hook in helpdesk_timesheet timer wizard for other modules to modify timesheet values. Forward-Port-Of: odoo/enterprise#107441 Forward-Port-Of: odoo/enterprise#107301
This update removes the display of '0.00' credit and debit entries on invoices and bills. This change enhances the clarity and professionalism of financial reports, making them easier to understand for both internal teams and customers. It's a simple improvement focused on presentation.
Original PR description
In order to improve the readability muting the 0.00 credit / debit on journal items in invoices / bills task: 5960944 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 Forward-Port-Of: odoo/odoo#254397
Resolved issues and error corrections
This update resolves a technical issue within Odoo's Studio where view editing sometimes caused errors. The fix ensures that Studio correctly handles inherited views, preventing crashes and improving the stability of the view creation process. This change enhances the reliability of the Studio tool for users.
Original PR description
This commit is a followup to odoo/enterprise#94747 which was made incomplete by odoo/enterprise@52f27c4. Sometimes actions set one of their view to an inherited view rather than the primary. This created traceback because the to-be-created studio arch was normalized against the inheritance tree without the given inherited view, which is wrong. After this commit, there is no crash. opw-5955734 Forward-Port-Of: odoo/enterprise#110835
This update streamlines how Odoo tests handle emoji assets, leading to faster test execution and reduced resource usage. The change allows assets to be cached across test suites, improving overall development efficiency. This work prepares for a future feature that will centralize emoji data management.
Original PR description
Preparation work for an upcoming [emoji loader](https://github.com/odoo/odoo/pull/253078) feature that will ease and centralize the loading and management of emoji data. This PR focuses on making assets caches work accross test suites, and to speed up the processing of some utils to increase performance or to reduce memory consumption. See commit messages for details. - Community: https://github.com/odoo/odoo/pull/253344
This update resolves a technical issue that caused tracebacks in the timesheet assistant when a user lacked an assigned employee within the company. This ensures the timesheet assistant functions correctly for all users, preventing disruptions to time tracking processes. The fix improves stability and usability.
Original PR description
This PR fixes two tracebacks when the current user has no employee in the current company and tries to open either the timesheets assistant or systray Task-6041462
This update corrects a numbering issue in the Vietnamese balance sheet report. Specifically, the order of lines within the 'I. Short-term liabilities' section was adjusted to ensure accurate reporting. This ensures financial reports are presented correctly for Vietnamese businesses using Odoo Enterprise.
Original PR description
- Fixed the numbering of report lines under the section "I. Short-term liabilities" in the balance sheet report 6035762 Forward-Port-Of: odoo/enterprise#111234
This update corrects a problem in the GSTR report testing process. Previously, tests were incorrectly deleting tax amounts. Now, the system removes taxes from the account move line, ensuring more accurate report calculations and compliance. This resolves a technical issue impacting reporting accuracy.
Original PR description
Before this PR: - A test case was deleting taxes. After this PR: - Removed the taxes from the account move line instead of deleting the taxes. Related PR: https://github.com/odoo/odoo/pull/245243 task-5472834 Forward-Port-Of: odoo/enterprise#111198 Forward-Port-Of: odoo/enterprise#105174
This update fixes a technical issue where Odoo would sometimes encounter an error when requesting shipping prices from Sendcloud. Specifically, if Sendcloud didn't respond, Odoo would throw an error. This change prevents these errors, ensuring smoother delivery processing and reducing potential disruptions to order fulfillment.
Original PR description
Sendcloud sometimes doesn't respod when asking for `shipping-price`. So when we try to retrieve the first element of the response, we raise an `IndexError`. ----- Ticket: opw-5951749 Forward-Port-Of: odoo/enterprise#111057 Forward-Port-Of: odoo/enterprise#109252
This update streamlines the new user sign-up experience by removing unnecessary steps in the onboarding tour. This change improves the initial user experience, making it faster and easier for new customers to get started with Odoo Enterprise. The simplification focuses on efficiency and reduces friction for new users.
Original PR description
runbot-238363
This update removes unnecessary code related to skipping model generation during worksheet creation. Following recent changes to the worksheet functionality, this specific context key is no longer needed. This cleanup improves the efficiency and stability of the web studio module.
Original PR description
Since the worksheet rework, the context key `worksheet_no_generation` that used to skip the model generation has now become useless. This commit removes last lines of code using it. *https://github.com/odoo/enterprise/commit/49a84d3ffea49cf8f7fea904e7082b101158bbe9
This update corrects a bug in the point-of-sale report generation process. Previously, the system incorrectly identified refund orders due to how it sorted order data by date. This change ensures that refund orders are always prioritized, guaranteeing accurate reporting of transactions.
Original PR description
The test test_refund_multiple_products_amounts_compliance was doing a search on 'report.pos.order' and was wrongly assuming that the first order in the recordset returned was the refund one and the other one was the original order. This was because the search is ordered by date descending and the refund order is created after the original order. However, in some cases, the date of the refund order can be the same as the date of the original order cause the dates are precise to the second which can lead to a the records returned by id ascending which would give the original order first. This commit adds an explicit order by id descending as second choice to ensure that the refund order is always returned first. runbot-error: 238454 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253360
This update resolves a problem where header border widths were incorrectly set to full widths due to a design flaw in the input field. The change ensures consistent border widths for standard headers while still allowing full borders for specific header templates, improving website appearance and stability.
Original PR description
Previously, the border width input for headers allowed multiple values. This was required for specific header templates (e.g. rounded box) that use a full border. However, most headers only apply a border on the bottom. When the input had multiple values, the scss would break, resulting in full border. This change ensures that, for headers without the .o_full_border class, only the first value of the saved border width is used. As a result, the input behaves like a single-value field (similar to font size inputs) for standard headers, while still supporting multiple values for templates that require a full border. Steps to reproduce the issue: - Go to Edit mode - Click on the Header - In the Border option, enter "1 2" and leave the input to validate => The input display "3" and the header has a full border. task-5500516 Forward-Port-Of: odoo/odoo#254483 Forward-Port-Of: odoo/odoo#244415
This update fixes a bug in how the system calculates scrap quantities. Previously, if a product lacked a related BOM, the calculation would stop, leading to inaccurate scrap totals. Now, all products in a recordset are correctly processed, ensuring accurate scrap reporting.
Original PR description
### Description of the issue/feature this PR addresses: The `_compute_scrap_qty` method in **mrp/models/stock_scrap.py** exits early with return when a record has no BOM, preventing the computation of `scrap_qty` for remaining records in the recordset. ### Current behavior before PR: When iterating over a multi-record recordset, if any record lacks a `bom_id`, the method does return `super(...)._compute_scrap_qty()`, which exits the entire loop. Records after that one are never computed and keep the default value of 1. ### Desired behavior after PR is merged: Records without a `bom_id` delegate to `super()._compute_scrap_qty()` and the loop continues (continue) to the next record, ensuring all records in the recordset are properly computed. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253368 Forward-Port-Of: odoo/odoo#252149
This update fixes a bug where hover overlays on website builder sections weren't appearing when hovering over parent elements. The fix ensures the overlay is correctly positioned by explicitly triggering a refresh after the overlay is created, resolving a visual issue for users.
Original PR description
Commit 53ae0a9f646808632ca1ca396466e1c0bb5a73c7 adds a temporary overlay on hover of elements with options. But the overlay was not shown on over of an ancestor of the target. This is because it relied on the resize observer to call the `refreshPosition`, which does not happen if the element on which the hover overlay should appear was already observed. This commit adds an explicit call to `refreshPosition` after the creation of the hover overlay. Steps to reproduce: - Open website builder - Click on a column in a section - Hover the section outside of the column - Bug: no hover overlay is shown on the section element task-6013371
This update fixes an issue where invoice previews in the portal displayed text in the wrong direction (LTR) for Arabic-speaking users. The fix ensures that invoice layouts correctly reflect the user's language setting, improving the user experience for international customers. Additionally, the subtotal layout for Saudi invoices has been adjusted to prevent visual clipping of tax totals.
Original PR description
When opening invoice HTML preview in the portal, the layout was displayed in LTR even if the invoice partner language was RTL (e.g. Arabic). This happened when the portal user language was LTR. PDF…
When opening invoice HTML preview in the portal, the layout was displayed in LTR even if the invoice partner language was RTL (e.g. Arabic). This happened when the portal user language was LTR. PDF structure was correct, but HTML preview had wrong text flow and alignment. Root cause was that RTL asset processing depends on `env.lang`, not on `t-lang` in templates. Since the ORM context language remained the portal user’s language, CSS was compiled in LTR and hardcoded `direction: ltr;` rules from `report.scss` were overriding the `<html dir="rtl">`. To fix this, the portal controller now checks the partner language and, if it is RTL, updates the request context before rendering. This ensures `_render_qweb_html` runs with the correct `env.lang`, triggering proper RTL CSS conversion via rtlcss. Additionally, the subtotal section in the Saudi invoice report could have its values visually cut due to insufficient width allocated to the tax totals column. The column width has been slightly increased to ensure totals are properly displayed. task-5878719 Forward-Port-Of: odoo/odoo#248822
A recent update to the website's job application form processing caused a technical error (KeyError) when users added a file field. This commit corrects the issue by reintroducing a necessary attribute that was unintentionally removed during a recent code change. This ensures the form submission process now functions correctly for all users.
Original PR description
Currently an exception is generated when the user tries to submit a job application through the form. Steps to produce an error: - Install the `web_studio` and `website_hr_recruitment` modules - Add…
Currently an exception is generated when the user tries to submit a job application through the form. Steps to produce an error: - Install the `web_studio` and `website_hr_recruitment` modules - Add a new File field to the `hr.applicant` module with the studio. - Go to the website editor and add the form `Apply for a Job` and add the recently created field into the form and save it - An error will occur when submitting the form with the added field Error: `KeyError: 'manual'` This issue occurs because the `manual` key(attribute) is not included in the `authorized_fields` variable, which is generated by the `get_authorized_fields` method. After the recent refactoring introduced in commit [1], the code was changed to fetch only a limited set of attributes instead of all attributes, and the manual attribute was not added to this list. This commit resolves the above issue by including the `manual` attribute when retrieving model fields, which was not added in commit [1]. [1]: https://github.com/odoo/odoo/commit/bfae7140d3951bec93fb7f2e49018649045edd40 Sentry-7271118700 opw-5933992 Forward-Port-Of: odoo/odoo#249240
This update resolves a technical issue where tracking changes to signature fields within Odoo caused errors. The system was attempting to track signature updates, which isn't supported, leading to a crash. Now, signature fields are automatically excluded from tracking to ensure stability.
Original PR description
With https://github.com/odoo/odoo/pull/232814, the signature type was introduced as a valid property in properties field type. When a property field of type signature is marked as tracked and its parent field changes, the system attempts to track the signature update. Since tracking image or binary content is not supported and is not implemented, this leads to a NotImplementedError. To prevent this crash, signature property fields are now excluded from tracking. task-5966544 Forward-Port-Of: odoo/odoo#250923
This update resolves a bug where the 'is typing' indicator incorrectly appeared when users were editing messages in Odoo. The fix prevents this indicator from triggering, aligning with the intended use of the indicator – to signal new messages, not ongoing edits. This ensures a smoother and more accurate experience for users receiving updates.
Original PR description
Before this commit, when editing a message, this was triggering the "is typing" on this member. This "is typing" was only stopped after the long timeout of 1 min. Typing indicator is meant to expect other others to receive a new message, so this is misleading to show the "is typing" when editing the message. Usually editing message is to fix small typo in a very short time, so it's quite expected for other people to see the new changes without requiring UI indicator other than the "(edited)" label on message textual content. This commit fixes the issue by not notifying is typing on composer of message edition. Task-6045905 Forward-Port-Of: odoo/odoo#254747 Forward-Port-Of: odoo/odoo#254453
This update ensures invoices submitted to the Italian Public Administration receive correctly formatted XML responses. Previously, a misinterpretation of the IAP response format caused errors. This fix converts the XML to base64, resolving the issue and ensuring smooth invoice submission.
Original PR description
When submitting invoices to the Italian Public Administration, we receive an updated XML response from IAP with the document including a signature. The response is a raw XML string, not base64. Previously, we tried to encode it incorrectly, causing errors because `l10n_it_edi_attachment_file` direct assignment expects a base64 string. This fix converts the raw XML received from IAP to base64 before assigning it to the `l10n_it_edi_attachment_file` field. It also updates the test to use a correct mock IAP response. Forward-Port-Of: odoo/odoo#254800