Tuesday, May 5, 2026
23 changes · 19.0
Enhancements to existing features
This update makes the HTML editor more efficient when refreshing movement controls for visible elements. It reduces unnecessary browser work, which can make editing feel smoother, especially on larger pages.
Original PR description
Description of the issue this PR addresses: Before this PR, updateHooks retrieved the computed style for each visible element and accessed marginTop and marginBottom inside the loop. Accessing properties of CSSStyleDeclaration may trigger style resolution, causing repeated 'Recalculate Style' work during hook updates. This PR extracts marginTop and marginBottom after getComputedStyle outside the loop, which reduces style reads during hook updates and avoids unnecessary style recalculations. task-6063534 closes odoo/odoo#252385 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
Fixed an issue where assigning a recruiter to a job position could fail when the Payroll app was not installed. Recruitment teams can now use the recruiter assignment action reliably regardless of whether Payroll is enabled.
Original PR description
**Steps to Reproduce:** 1. Ensure hr_payroll module is NOT installed 2. Open a Job Position in hr_recruitment app 3. Click on "Assign Recruiter" button for a position without a recruiter 4. Observe error: "Name 'company_id' is not defined" **Bug Cause:** The interviewer_ids field on hr.job uses a string domain that references company_id. Since company_id is not available in the current view without hr_payroll it fails. **Solution:** Add `<field name="company_id"/>` to the hr_job_kanban view to ensure the field is consistently available for domain evaluation regardless of other installed modules. **Task:** 6106143 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259305
Sales orders created from quotation templates now keep plain description lines instead of accidentally removing them. This prevents missing information on customer quotations and sales documents when template lines use custom text rather than product-name labels.
Original PR description
When using a quotation template, the first line of description is always removed. Steps to produce: --- - Install `sale_management` module without demo. - From settings, enable `Quotation templates`.…
When using a quotation template, the first line of description is always removed. Steps to produce: --- - Install `sale_management` module without demo. - From settings, enable `Quotation templates`. - Create a quotation template and add a one-line description to the line. - Create an SO from the quotation template. Issue: --- - As you see, the description is removed in SO. Root cause: --- - This regression is introduced after aba778538c2032a2924f99258c5c75e463296d21, which works under the assumption that the label always starts with the product name. However, that's not the case with one created from a template. Solution: --- - Add a fallback after calling `super.label` to detect this scenario. If `super.label` returns empty, the original label exists, and it does not start with the product name, it means the name was a plain description all along, with no product name prefix. - In that case, return the raw label as-is instead of the incorrectly empty result from `super.label`. opw-6176630 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The onboarding flow now hides the New Contract button when no contract start date is available. This prevents users from starting a contract setup before the required date information is entered, reducing confusion and incomplete records.
Original PR description
Description of the issue/feature this PR addresses: New contract button invisible if there's no start date Current behavior before PR: New contract button always visible Desired behavior after PR is merged: New contract button invisible when there's no start date --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The purchase order screen now hides the Vendor Bill shortcut from users who do not have accounting permissions. This prevents non-accounting users from seeing an action they should not be able to use, keeping access clearer and more consistent.
Original PR description
Steps to reproduce the bug:
- Create a produce “P1”
- Create a purchase order with one unit of P1:
- Confirm the PO
- Create an invoice and valide it
- Go to Settings and remove the Accounting access rights for user Mark Demo
- Log in as Mark Demo
- Open the purchase order
Problem:
The Vendor Bill smart button is visible, whereas it should not be.
opw-5417749This fix keeps the bottom border of the HTML editor's code view visible when long content creates a horizontal scrollbar. It improves the editor's visual clarity and avoids a small layout issue for users working with wide code content.
Original PR description
Problem: When the code view contains content that overflows horizontally, the horizontal scrollbar hides the bottom border of the code view. Solution: Move the scrollbar inside the code view so the bottom border remains visible. Before: <img width="716" height="76" alt="image" src="https://github.com/user-attachments/assets/05b16d8e-4014-488f-84d6-f4e4c0dcae23" /> After: <img width="707" height="108" alt="image" src="https://github.com/user-attachments/assets/7151e3e0-254c-4e7c-bcda-bea2d7ab2cea" /> Steps to reproduce: - Add content in the code view that overflows horizontally. - Observe that the scrollbar hides the bottom border. task-6124267 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The HTML editor now blocks link creation when users select text inside inline code or code blocks, including when using the Ctrl+K shortcut. This keeps code examples from being accidentally altered and makes content editing more reliable.
Original PR description
Description of the issue this PR addresses: This commit ensures that links are not created when the selection is inside inline code or a code block, even when using the Ctrl+K shortcut. task-5489870 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users who do not have permission to post in a conversation can no longer drag and drop files into its chatter area. This prevents confusing upload options from appearing where the user cannot actually add content.
Original PR description
This commit disables the drag&drop of files into the chatter if the user cannot post on the thread. Part of task-6071789 PR enterprise: https://github.com/odoo/enterprise/pull/115658
Vendor bills imported from XML now correctly handle discounts when a product has a zero price but includes additional charges. This prevents mismatches between the supplier XML total and the total calculated in Odoo.
Original PR description
Allowances for Product with price as 0.00 aren't applied Step to reproduce: - import vendor bill from an XML having a product: - price: 0.00 - charge: any positive amount - allowance: any positive amount Current behavior: - allowance isn't apply resulting in a difference between the XML total and Odoo total Cause of the issue: Before this commit the discount was applied as a percent of price only. Having a price as 0 prevent doing so. opw-5499525 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247938
Searching in the company switcher no longer loses focus when the mouse is resting over a dropdown item. This prevents interrupted typing and makes switching companies smoother for users who manage multiple companies.
Original PR description
If a user leaves their mouse resting over a company in the dropdown and starts typing in the search bar, the search bar loses focus, interrupting their typing and removes focus from the search input. Update the `onSearch` method to: - Remove focus from the highlighted dropdown item. - Put focus immediately back into the search input. - Briefly disable mouse events on the menu (for 100ms). This prevents the system from registering a fake mouse hover while the list updates.
Users will no longer see a misleading “Message posted” alert when they discard a reply composer from the Discuss history or inbox. Notifications now appear only after a message is actually sent, reducing confusion and improving trust in the messaging workflow.
Original PR description
**Description of the issue/feature this PR addresses:** ---------------------------------------------- When replying to messages from the History (Inbox) view, opening the full composer and…
**Description of the issue/feature this PR addresses:** ---------------------------------------------- When replying to messages from the History (Inbox) view, opening the full composer and discarding it could incorrectly trigger a toast notification indicating that a message was posted. This behavior is misleading, as no message is actually sent when the composer is discarded. **Current behavior before PR:** ---------------------------------------------- - Replying to a message from History opens the full composer - Discarding the full composer closes the dialog normally - A “Message posted” toast is shown even though no message was sent - Notification logic depends on dialog close behavior, leading to incorrect triggers **Desired behavior after PR is merged:** ---------------------------------------------- - Discarding the full composer does not show any notification - Notifications are only shown when a message is actually sent Task-5431682 ---------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261807 Forward-Port-Of: odoo/odoo#241705
The website menu now waits for the extra menu dropdown to finish opening before continuing with the next action. This prevents timing-related issues where another menu, such as the Site menu, could close unexpectedly, making website navigation and automated checks more stable.
Original PR description
[FIX] website: wait for extra menu to fully render before continuing When clicking on the extra menu item, a Bootstrap dropdown is displayed with a transition. Because this transition takes time, it can lead to undeterministic behavior especially in tests. For example, if a tour clicks on the extra menu item and then clicks on the "Site" button in the navbar, the dropdown transition may still be in progress. This can cause the "Site" dropdown to close prematurely. runbot-240955 Forward-Port-Of: odoo/odoo#262269 Forward-Port-Of: odoo/odoo#261179
Purchase order suggestions now send the expected section information, so the system can apply the right context when editing suggestions. This prevents mismatches that could lead to incorrect or missing suggestion behavior in purchase workflows.
Original PR description
Issue: - `_editSuggestContext` sends `sectionId` in the context, but `action_purchase_order_suggest` expects the key to be `section_id`. Fix: - Update the `_editSuggestContext` to send the correct context key, `section_id`.
This update fixes an issue where Odoo's barcode scanning system wouldn't correctly assign a result package when moving a package with existing contents. Previously, only empty packages could be assigned. Now, the system accurately assigns the result package regardless of the package's contents, ensuring seamless internal transfers.
Original PR description
Issue ===== When scanning a package as result package, if the package is empty, it works, but if this package already has content, it doesn't work. How to reproduce ================ 1. Enable…
Issue ===== When scanning a package as result package, if the package is empty, it works, but if this package already has content, it doesn't work. How to reproduce ================ 1. Enable "Packages" and "Storage Locations" settings; 2. Create two packages with some content in WH/Stock/Shelf 1; 3. Create an empty package; 4. Create an internal transfer directly from the Barcode app; 5. Scan Shelf 1 barcode and scan first package; 6. Scan the empty package => It's assigned as the result package; 7. Confirm the operation; 8. Create another internal transfer; 9. Scan Shelf 1 barcode and scan second package; 10. Scan the no more empty package => This time, it's not assigned as the result package. Reason ====== A package was assigned as the result package only if one of the following conditions is matched: 1. The scanned package is empty (it's what's happening in 6.); 2. The selected line has no result package yet and the scanned package is in the selected line's destination location. Here, it doesn't work because since we move a package, the barcode line has already a destination package (the same then the source package.) Fix === For the condition 2., adapt the condition to make it works too if the selected line has the same package as the source and result package. [opw-5326234](https://www.odoo.com/odoo/project/49/tasks/5326234) Forward-Port-Of: odoo/enterprise#102051 Forward-Port-Of: odoo/enterprise#101357
This update resolves an issue where payroll document generation incorrectly flagged users as unauthorized document owners in multi-company environments. The fix replaces a dependent field with a stored employee flag, ensuring accurate validation regardless of the company context. This prevents errors during payroll processing.
Original PR description
Steps to reproduce- 1) In a multi-company environment, create an employee in a secondary company. 2) Link a Portal User to this employee via the user_id field. 3) Create and validate a payslip for…
Steps to reproduce- 1) In a multi-company environment, create an employee in a secondary company. 2) Link a Portal User to this employee via the user_id field. 3) Create and validate a payslip for this employee. 4) Run the 'Payroll: Generate pdfs' cron. Error - ValidationError: The following user(s) cannot own root documents/folders: portal_employee: Payslip - portal_employee Cause - The validation logic uses the employee_id field on res.users to check if a user is an employee. Since employee_id is a non-stored computed field, its value depends on the current company context (self.env.company). When the payroll cron runs under the OdooBot user in the default company context (ID = 1), it cannot resolve the employee_id for users belonging to other companies. The field evaluates to False, causing the system to incorrectly flag the user as an unauthorized document owner. Fix - Replace the validation check with the employee boolean field. Unlike the computed Many2one, employee is a stored field that is not restricted by the active company context. This ensures that a user's employee status is correctly identified during background tasks across all companies. opw-6143042 Co-authored by Tina Lin (liti)
A test related to rental stock management was failing due to demo data. The fix ensures the test correctly handles existing stock ribbons created during demo setup, preventing a validation error. This ensures the rental stock functionality continues to operate as expected.
Original PR description
Currently, running test `test_out_of_stock_ribbon_is_not_applicable_for_rentals` with demo data enabled leads to a validation error: `Only one ribbon with the "assign when out of stock" option is allowed.` This happens because, with demo data loaded, an "out of stock" ribbon is already created via XML data. The test then attempts to create another ribbon with the same configuration, triggering the constraint and causing the failure. Related PR: https://github.com/odoo/enterprise/pull/112660 runbot-[242457](https://runbot.odoo.com/odoo/error/242457) ---
This update corrects a bug that prevented users from saving accounting settings when GST registration was unregistered. The fix ensures the system correctly validates required fields based on the user's GST registration status, preventing a 'Missing Required Fields' error. This ensures smooth operation for all users, regardless of their GST registration.
Original PR description
**Steps to reproduce:** * Install `l10n_in` module. * Go to Accounting > Settings. * Check 'Fetch Vendor E-Invoiced Document` and clear the GST Username * Uncheck `Registered Under GST`. * Try to…
**Steps to reproduce:** * Install `l10n_in` module. * Go to Accounting > Settings. * Check 'Fetch Vendor E-Invoiced Document` and clear the GST Username * Uncheck `Registered Under GST`. * Try to modify any setting and save. **Observed behavior:** * A `Missing Required Fields` error is raised even though no visible field is missing a value. **Cause:** * The `l10n_in_gstr_gst_username` field is placed inside a `div` that is hidden when `l10n_in_is_gst_registered` is `False`. * However, its `required` condition only checked `l10n_in_gst_efiling_feature or l10n_in_fetch_vendor_edi_feature`, without accounting for `l10n_in_is_gst_registered`. * Since both features default to enabled, the field remained required even when invisible, blocking any settings save. **Fix:** * Update the `required` attribute on `l10n_in_gstr_gst_username` to include `l10n_in_is_gst_registered` as a condition, so the field is only required when the GST section is visible and either `GST E-Filing & Matching` or `Fetch Vendor E-Invoiced Document` is enabled. opw-6133001 Forward-Port-Of: odoo/enterprise#114423
This update fixes a problem where the 'attach file' button wasn't working correctly in the Enterprise version of Odoo. The change ensures the button is enabled only after the email thread has fully loaded, improving the user experience and preventing errors.
Original PR description
Wait for the attach file button to be enabled, meaning that the thread is loaded. PR community: https://github.com/odoo/odoo/pull/262018
This update corrects an issue where users couldn't edit documents after removing their ownership, even when granted editor access. The fix allows document editing in the company folder for all users and enables correction of incorrect ownership assignments. It also improves the ability to move documents within the 'My Drive' structure.
Original PR description
How to reproduce: - Login as Marc Demo (not as admin) - Upload a document at the root of "My Drive" - Remove the owner of this document The document is no longer editable in the details view panel while the user has been added as editor. To solve the problem, we change the readonly condition in the detail panel to allow edition in the company folder also (even if not a manager). We also change the following: - we allow to move non folder document from company root folder (user_can_move) while the "protection" was applied also to non folder before. - we change the condition to update the owner. Now when there is no owner, a user with edit permission can change it. This allows to correct a wrong manipulation. Task-5881531
This update corrects a bug in the Helpdesk module where users could accidentally select customers from different companies. The fix involved adding a restriction to the customer selection field, ensuring users only see customers within their assigned company. This improves data accuracy and prevents potential errors in ticket management.
Original PR description
Steps to reproduce: - - Create two companies (Company A and Company B) - Create one partner in each company - Enable both companies for the user - Open Helpdesk and go to the tickets Kanban view for a Company A team. - In the quick create form, the customer dropdown shows customers from Company B Issue: - - Customers from other companies are visible in the customer field, Cause: - - The partner_id field in the quick create view had no domain, so it displayed partners from all allowed companies. Solution: - - Added a domain on partner_id in the Python field. task-4971466 Forward-Port-Of: odoo/enterprise#111909
This update resolves an issue where error messages from the Danish tax reporting system (l10n_dk_reports) could cause unexpected errors. The fix ensures that error messages are handled correctly, preventing application crashes and improving the reliability of the tax reporting process. This change was driven by a technical update to improve system stability.
Original PR description
before this commit, if the SKU server was returning an error message, the error handler would raise an exception because of the lazyTranslate. The reason is that `join()` expects an actual sting as argument, not a lazy string. This commit adds some tests for the error case and fixes the error due to the lazytranslate in the error codes. opw-6171466 Forward-Port-Of: odoo/enterprise#115515
This update resolves an issue where the last column of accounting reports was partially cut off when scrolling to the bottom. The fix adds bottom padding to the reports, ensuring all data is fully visible and accessible. This improves the clarity and usability of financial reports.
Original PR description
Before this commit, there was no bottom padding in the accounting reports, which caused the last column’s values to appear partially cut off when scrolling to the bottom. This issue started occurring after the PR: https://github.com/odoo/enterprise/pull/99198 opw-6130981 **Before fix (runbot)** <img width="1920" height="1005" alt="image" src="https://github.com/user-attachments/assets/808bbb2b-3b4e-4b5c-a872-b8bd7bf589ba" /> **After fix:** <img width="1917" height="1006" alt="image" src="https://github.com/user-attachments/assets/55f04e1f-0469-46e1-af69-f5055a7232d9" />
This update fixes an issue where the valid date range for emission factors wasn't being displayed correctly. The missing 'always_range' option was the root cause. This ensures accurate reporting and data visibility for ESG metrics within the Enterprise module.
Original PR description
Before this commit, the validity period was not correctly displayed because the always_range option was missing no related task Forward-Port-Of: odoo/enterprise#114851 Forward-Port-Of: odoo/enterprise#114784