Daily updates from Odoo
Tuesday, July 1, 2025
64 changes
25 changes
Resolved issues and error corrections
This fix prevents module installation from failing if the default “Hours” unit of measure was deleted earlier. The system now recreates that required unit when needed and adds protections to avoid the same problem in related planning flows.
Original PR description
Steps to reproduce: --- - Install `sale_management` module - Enable `Units of Measure & Packagings` - Delete `Hours` in Units & Packagings - Install `sale_planning` module Traceback: --- ```…
Steps to reproduce:
---
- Install `sale_management` module
- Enable `Units of Measure & Packagings`
- Delete `Hours` in Units & Packagings
- Install `sale_planning` module
Traceback:
---
```
ValueError: External ID not found in the system: uom.product_uom_hour
ParseError: while parsing /home/odoo/src/enterprise/saas-18.2/sale_planning/views/planning_role_views.xml:26, somewhere inside <record id="planning_role_view_tree_inherit_sale_planning" model="ir.ui.view">
<field name="name">planning.role.list.inherit.sale.planning</field>
<field name="model">planning.role</field>
<field name="inherit_id" ref="planning.planning_role_view_tree"/>
<field name="arch" type="xml">
<field name="resource_ids" position="after">
<field name="product_ids" widget="many2many_tags" placeholder="e.g. Cleaning Services" domain="[('planning_role_id', '=', False), ('type', '=', 'service'), ('sale_ok', '=', True)]" context="{ 'default_type': 'service', 'default_planning_enabled': True, 'default_planning_role_id': id, 'default_uom_id': %(uom.product_uom_hour)d, }"/>
</field>
</field>
</record>
```
The error occurred at [1] because the user deleted `Hours` from `Units & Packagings` before attempting to install the other module.
This commit resolves the issue by calling the `ensure_uom_hours` method before updating the "Hours" unit of measure in the data file. This method ensures the UoM is recreated if it no longer exists in the database.
Also restrict deletion of uom Hour in `sale_planning`.
[1]- https://github.com/odoo/enterprise/blob/adfa1ff2ee56b8d43666cd7c2565d6e9430aae48/sale_planning/views/planning_role_views.xml#L38
sentry-6595283261
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#216715
Forward-Port-Of: odoo/odoo#213293The website builder now uses the correct internal actions for the Facebook snippet settings. This prevents an error when users add the snippet and open its configuration panel, improving reliability for website editing.
Original PR description
Problem: Dropping the Facebook snippet and interacting with its options caused a traceback due to unregistered or incorrect builder action IDs. Steps to Reproduce: 1. Drop the Facebook snippet in website builder. 2. Click on the snippet to open its configuration panel. 3. Observe the traceback due to unrecognized builder actions. Root Cause: The action IDs used in the XML template (`website.FacebookOption`) did not match the registered plugin action IDs. Fix: Updated the mismatched action IDs in the builder components: * Replaced `checkFacebookLinkAction` → `checkFacebookLink` * Replaced `dataAttributeListAction` → `dataAttributeList`
The website editor now limits header and navigation bar color choices to the intended solid and custom options, avoiding unsupported preset selections. It also lets users properly clear a customized website color so the editor no longer shows a removed color as still selected.
Original PR description
[FIX] website: restrict header navbar colorpicker to solid and custom
Since `html_builder`, the header navbar "Format" colorpicker makes it
possible to pick a preset. This should not be the case.
This commit removes the access to the "Presets" tab for that
colorpicker.
task-4367641
[FIX] website: support removing a customized website color
When `html_builder` was introduced, the `customizeWebsiteColor` action
was created to support assigning colors to specific SCSS variables.
However, it did not support the removal of a previously set color.
This commit handles the removal of such colors.
Note that it assigns no color, which still overrides the initial value.
This is the same behavior as before `html_builder`.
Steps to reproduce:
- select header
- pick a background color
- reset the background color
=> The background color remained selected.
task-4367641Website editors can now click items inside navbar dropdown menus without the menu closing unexpectedly. This makes editing navigation links, including overflow and account menus, smoother and avoids needing to reload the editor.
Original PR description
**Problem** This commit addresses two problems related to navbar dropdown menus closing on click during editing. The first problem concerns the "more" dropdown menu that appears when there are too…
**Problem** This commit addresses two problems related to navbar dropdown menus closing on click during editing. The first problem concerns the "more" dropdown menu that appears when there are too many links. The second problem concerns the dropdown containing the links "my account" and "logout". How to reproduce problem 1: 1. Start editing a page that doesn't have a "more" dropdown in its navbar 2. Click on a navbar link, then click on the "edit menu" icon 3. From the "Edit Menu", add enough menu items to make the "more" dropdown appear (adding mega menu items works too) 4. Click on the "more" button to open the dropdown 5. Click on an item of the dropdown 6. PROBLEM: the dropdown closes 7. Reload the editor, now it works properly How to reproduce problem 2: 1. Start editing a page 2. Click on the username dropdown in the navbar 3. Click on "My Account" or "Logout" 4. PROBLEM: the dropdown closes **Solution** This commit introduces an edit interaction that adds the attribute `data-bs-auto-close: outside` to dropdown elements in the editor. **Note** Some code defining the behaviour of the "more" dropdown is already present in [1] and it is still necessary for the functioning of the dropdown. The newly introduced interaction only fixes a specific case: when new elements are added to the navbar and the "more" dropdown has just been created. In this specific case, the code in [1] does not work properly because the code is executed too soon and the class `editor_enable` is still missing from the body. At the same time, when the editor is opened and the "more" button is already present on the navbar, the interaction fails to set the proper behaviour because the code in [1] replaces the dropdown menu. In this case, anyway, the code in [1] works properly and the dropdown takes the correct behaviour. Probably [1] needs a refactoring, maybe it should be written as an interaction. [1] odoo/addons/website/static/src/js/content/auto_hide_menu.js task-4367641
Payment logs now include both field names and their corresponding values for Stripe payment data, instead of listing only the field names. This improves troubleshooting and support visibility while preserving the existing handling of sensitive data.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Log Stripe payment values. Issue ----- Only the keys get logged. Cause ----- Commit 1a2573881281 fixed the logging of secret keys, but in doing so, only logs keys and no values. Solution -------- Use a dict comprehension to create a full dict to log. opw-4818301 Forward-Port-Of: odoo/odoo#216457 Forward-Port-Of: odoo/odoo#216303
The task header in shared projects now uses the available width correctly, preventing the task status from appearing out of alignment when other fields are hidden. This improves the visual consistency of task forms for portal users accessing project-related sales orders.
Original PR description
### Steps to Reproduce: 1. Login as Admin user 2. Open project module 3. Share the project 4. Login as Portal user 5. Go to sales order inside the project 6. Open task there you be able to see the…
### Steps to Reproduce: 1. Login as Admin user 2. Open project module 3. Share the project 4. Login as Portal user 5. Go to sales order inside the project 6. Open task there you be able to see the state misalignment ___ ### Issue: The task header section (.oe_title) was restricted by a max-width: 75% styling. When the priority field was removed, the remaining fields in the header, particularly the state field, appeared misaligned due to this layout constraint. ___ ### Root Cause: The .oe_title class imposes a max-width that limits the available horizontal space for inline fields in the header. This fixed constraint does not adapt when fields like priority are removed, resulting in layout misalignment. ___ ### Fix: To resolve this, the class mw-100 was added to the `<div class="oe_title"> `element. This overrides the default max-width behavior, allowing the container to use full width when needed. ___ ### Technical Details: This approach keeps layout logic within the view. It also preserves layout flexibility for different screen sizes and future field additions or removals. task-4813557 Forward-Port-Of: odoo/odoo#213085
This change prevents the website donation block from making duplicate background requests when more than one donation section appears on the same page. It improves reliability and avoids unnecessary server calls without changing the visitor experience.
Original PR description
The previous code had a small potential issue: if two instances of the s_donation snippets were present on a page (not sure it happens in practice), then the two interactions would be created, then…
The previous code had a small potential issue: if two instances of the s_donation snippets were present on a page (not sure it happens in practice), then the two interactions would be created, then willStarted. The first one would initiate the rpc, then the second one would do the same, since the cached value was not assigned yet, and only when the first of these 2 rpcs would resolve, then the cached value will be assigned. A possible solution would be to cache the promise instead, but we need to be careful, the waitFor operator will leave a promise pending if the interaction has been destroyed in the time it takes for it to resolve. So, putting in cache a pending forever promise can cause issues. A simple way to solve the issue is to simply remove the waitFor call in willStart, it does not do anything anyway. Another solution is to use the new cached feature from the rpc system. 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
This fix prevents a point of sale loyalty test from running when a related payment-settlement feature is not installed. It avoids false test failures in automated validation, helping keep release checks reliable without affecting customer-facing functionality.
Original PR description
**Problem:** The test was run even when pos_settle_due was not installed, which resulted in an error during the tour, as it looked for a component that did not exist. We now skip the test if pos_settle_due is not installed. runbot-227672 Forward-Port-Of: odoo/odoo#216540
Hungarian electronic credit notes sent to NAV now show the supplier and customer bank accounts correctly instead of duplicating the customer account. This helps businesses avoid incorrect reporting details and improves confidence in Hungarian e-invoicing documents.
Original PR description
### Steps to reproduce: - Install l10n_hu_edi and switch to a Hungarian company - In the settings set the NAV mode to "demo" - Create an invoice to a Hungarian contact with an account number - Send it to NAV - Create the credit note for this invoice - Send it to NAV and download the XML in the page "NAV 3.0" - The account number in `supplierBankAccountNumber` and `customerBankAccountNumber` are the same ### Cause: The code was doing: `'supplierBankAccountNumber': format_bank_account_number(self.partner_bank_id or supplier.bank_ids[:1]),` But for credit notes `self.partner_bank_id` is the bank account of the customer not the supplier. ### Solution: Only use `supplier.bank_ids[:1]`. As the bank account were never tested in l10n_hu_edi, this commit adds it in the setup and changed the XMLs to always test it. opw-4845026 Forward-Port-Of: odoo/odoo#214714
Website visitors no longer see a confusing error caused by certain browser extensions when Odoo's push-to-talk extension is not installed. This improves the browsing experience by safely handling the missing extension case instead of showing an unnecessary traceback.
Original PR description
Scenario: - install website, im_livechat, Metamask external extension - go to any page on the website with chrome Result: a traceback is shown on all pages with no stacktrace and the message "Could not establish connection. Receiving end does not exist.". Issue: the error happen if the push to talk extension is not installed in the pttExtensionHookService. Because of metamask extension, "window.chrome.runtime" is not undefined (if metamask is uninstalled, "the window.chrome.runtime" is undefined). So when metamask (or another extension that cause window.chrome.runtime to be defined) is installed, we get an error shown because the promise rejection is not handled. Fix: handle the unhandled promise error. opw-4874027 Forward-Port-Of: odoo/odoo#216258 Forward-Port-Of: odoo/odoo#216132
This update fixes a failing web test that occurred when demo data was present. It makes the test use its own prepared record, improving reliability for development and quality checks without changing user-facing behavior.
Original PR description
Before this commit, the test TestLoadBreadcrumbs was failing with demo data. After this commit, the test uses a record created during the setUpClass, thus resolving the issue introduced in #212950 .
This fixes an issue in the email testing area where counters could be incorrect during nightly checks. The change helps keep automated quality checks reliable, reducing false failures and improving confidence in releases.
Original PR description
runbot-226551
Middle-clicking a link or action now opens it without triggering cleanup on the page the user is currently viewing. This prevents unsaved work or leave checks from being disrupted when the user is simply opening something in another tab or window.
Original PR description
Before this commit, when middle clicking the clearUncommittedChanges (and subsequently the beforeLeave) were executed on the current controller. This is an issue, as we are not leaving the current controller. Now, the clearUncommittedChanges is not called when middle clicking. Note that, this is already the behaviour if the target is "new". Forward-Port-Of: odoo/odoo#216549
Error dialogs no longer show an unrelated internal request ID in tracebacks. This prevents confusion when users or support teams investigate server action errors, making the reported context more accurate.
Original PR description
Steps: - Enable debug mode - Go to server actions - Create a server action that crashes with `Execute code` - Example -> "a" (will crash because `a` is undefined) - Traceback will contains an invalid ID `Occured on odoo180 on model ir.actions.server and id 19 on 2025-06-30 09:20:48 GMT` This was an error and this ID is not linked with the model, it is the rpc id, so it should not be on the traceback. This commit remove this id to have something like this `Occured on odoo180 on model ir.actions.server on 2025-06-30 09:20:48 GMT` opw-4816514 Forward-Port-Of: odoo/odoo#216553
Invoice forms no longer show an empty line or extra spacing beside invoice amounts when the invoice is not posted or has no outstanding debits or credits. This makes the invoice screen cleaner and avoids visual confusion for users reviewing accounting documents.
Original PR description
Repro steps: Navigate to the form view of an invoice that is either 1. not posted 2. does not have outstanding debits/credits Problem spotted: next to the invoice amounts, a weird line and margin to the right can be seen Cause: The field invoice_outstanding_credits_debits_widget of an invoice may be invisible with this condition invisible="state != 'posted' or not invoice_has_outstanding" and in that case, it's containing group would still be visible (showing the aforementioned margin). Fix: This commit fixes this issue by moving the invisible condition to the group containing the field invoice_outstanding_credits_debits_widget instead of the condition being on the field itself. task-4882509 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215119
Fixed an issue where searching security groups using a forward slash could trigger an error instead of returning results. This improves reliability for administrators managing user groups in Settings.
Original PR description
Currently, an error is produced on searching in a security group with a forward slash ('/').
**Steps to reproduce:**
- Navigate to `Settings > Users & Companies > Groups`.
- Type '/' in the search bar and hit Enter.
**Error:**
`IndexError - pop from empty list`
**Cause:**
When the group name contains only slashes, splitting it by '/' at [1] results in an empty list. After computation, it attempts to pop from the empty list, resulting in an error.
[1] - https://github.com/odoo/odoo/blob/a301f8ae6aad59efd073a34c6f9ec323191d211b/odoo/addons/base/models/res_users.py#L234-L235
This commit ensures the group name is only assigned when values have content, preventing the error.
Sentry - 6685124199
Forward-Port-Of: odoo/odoo#216555
Forward-Port-Of: odoo/odoo#214557Urban Piper receipts now show the delivery identifier clearly in the receipt header. This prevents staff and customers from missing or misreading the delivery reference on printed receipts.
Original PR description
- When printing urban piper receipt the delivery identifier was not correctly rendered in the receipt header. - This is caused by the `text-muted` class on the element, which is causing the text to be too light to be correctly printed. task-id: 4881459 Forward-Port-Of: odoo/enterprise#88763 Forward-Port-Of: odoo/enterprise#88113
This update adds test coverage to ensure new employee records are created using the correct company setting. This helps prevent payroll-related validation issues in multi-company environments, particularly for US payroll data.
Original PR description
This commit contains the test for commit f36104c17e0ac3cde788d195aab9394a35545d43 The test is in l10n_us_hr_payroll and not in hr as we need the ssnid constraint task-4897733
This update corrects demo payroll data so Belgian employee records use a Belgium-specific time off type. It prevents access errors when opening affected employee information in the Belgian payroll accounting test environment.
Original PR description
This commit fixes an issue in the demo data. A time off allocation was done using a time off type that is not in Belgium. This caused access error when trying to access the employee. This commit fixes the issue by changing the time off type to a belgian one. task-4896664 Forward-Port-Of: odoo/enterprise#88604
Payslips now print with the correct formatting when a salary rule line is marked as a title. This improves the readability and professionalism of payroll documents shared with employees.
Original PR description
### Steps to reproduce: - Generate and print a payslip after marking a salary rule line as a title. ### Fix: - Added conditional styles and classes to fix the issue. task-4780481 Forward-Port-Of: odoo/enterprise#85607
The Indian payroll demo payslip dates were updated so they fit within the employee contract period. This prevents errors during demo data installation, making setup and evaluation smoother for users.
Original PR description
Issue: The demo payslip for employee had dates before the contract start date, leading to errors during demo data installation. Fix: Adjusted the payslip dates to be 3 months before the current date, ensuring they fall within the employee's contract period and allowing successful demo installation. Forward-Port-Of: odoo/enterprise#86794
The payroll payslip line editing wizard now includes the needed link to its parent wizard when creating new lines. This prevents an error that could interrupt payroll staff while editing payslip details.
Original PR description
In this PR we add edit_payslip_lines_wizard_id in the view to prevent a new line record creation error. Forward-Port-Of: odoo/enterprise#88923 Forward-Port-Of: odoo/enterprise#88033
The Journal Report now displays the account name in the Account column, making entries easier to identify and review. This fixes a visibility issue so finance users can understand report lines without needing extra lookup steps.
Original PR description
The purpose of this pr is to add account name in the Account column of the Journal Report. Before this code changes:  After this code changes:  OPW : 4702276 Forward-Port-Of: odoo/enterprise#86113
The Website Help menu now shows only the helpdesk teams linked to the website a visitor is using. This prevents teams from other websites appearing in the wrong place, reducing confusion for customers and staff.
Original PR description
**Steps to Reproduce:** 1. Install the website_helpdesk module. 2. Create a Helpdesk Team A with 'Website Form' enabled, and set the website to 'My website' 3. Create another Helpdesk Team B with 'Website Form' enabled, and Set website to 'My website2' 4. Navigate to Website → Help menu on "My Website". **Observation:** - Both Helpdesk teams appear on "My Website", even though Team B is linked to "My Website 2". **Issue:** - The current domain filter only checks if the Website Form is enabled. - It doesn't restrict teams to the current website, so all teams are visible. https://github.com/odoo/enterprise/blob/b191f16abb5913893a228ccc4eedb8a2242a0298/website_helpdesk/controllers/main.py#L22 **Solution:** - Update the domain to filter on the website ID, to ensure only helpdesk teams related to the current website are shown. OPW-4673939 Forward-Port-Of: odoo/enterprise#88169
Removing a parent emission source in the ESG app no longer triggers an error. This keeps emission source records editable and helps users maintain ESG data without interruptions.
Original PR description
Currently, an error occurs when attempting to remove the parent emission source from an emission source. Steps to Reproduce: - Install the `ESG` module. - Go to `Emission Sources` and create a new…
Currently, an error occurs when attempting to remove the parent emission source from an emission source. Steps to Reproduce: - Install the `ESG` module. - Go to `Emission Sources` and create a new emission source with a parent emission source. - Remove the parent emission source. `ValueError: Compute method failed to assign esg.emission.source(<NewId origin=3>,).activity_flow_direct_indirect` This error occurs when the parent emission source is removed, causing the scope to become False in _compute_scope[1]. Subsequently, in _compute_activity_flow[2], none of the cases match, which results in a failure to assign the activity flow and raises an error. [1] https://github.com/odoo/enterprise/blob/1c7620d8de97757abda1993822f92590987bc46c/esg/models/esg_emission_source.py#L75 [2] https://github.com/odoo/enterprise/blob/1c7620d8de97757abda1993822f92590987bc46c/esg/models/esg_emission_source.py#L77-L78 This commit ensures that if the parent emission source is removed, the activity flow is properly maintained. sentry-6690968543 Forward-Port-Of: odoo/enterprise#88158
13 changes
Resolved issues and error corrections
This fix corrects how payroll expense records are referenced so expense sheets are handled as expense sheets rather than payslips. It helps prevent incorrect payroll-expense processing and keeps related employee expense data aligned with the right records.
Original PR description
this commit fixes wrong reference to `hr.payslip`. `payslip_sheets` should be a recordset of `hr.expense.sheet` and not `hr.payslip`. Forward-Port-Of: odoo/enterprise#89068 Forward-Port-Of: odoo/enterprise#88994
The VoIP mobile keypad now keeps the cursor in the right position when entering numbers. This prevents the first digit from jumping to the end, making mobile dialing more reliable and less frustrating for users.
Original PR description
This commit fixes a bug that caused the cursor in the keypad input to be displaced when typing on mobile. So, the first entered number was always to the end. This happens because the `on-touchend` event was calling another event (click) which may involve some changes in the UI that caused this. Steps to produce the bug: 1. Open VoIP wizard from mobile. 2. try to add numbers to the keypad. 3. You will see that the first number is always at the end.
UrbanPiper receipts now print the delivery identifier in a darker, more readable style. This helps staff and customers clearly see delivery references on printed receipts, reducing confusion during order handoff or lookup.
Original PR description
- When printing urban piper receipt the delivery identifier was not correctly rendered in the receipt header. - This is caused by the `text-muted` class on the element, which is causing the text to be too light to be correctly printed. task-id: 4881459 Forward-Port-Of: odoo/enterprise#88763 Forward-Port-Of: odoo/enterprise#88113
A demo payroll setup for Belgium now uses the correct Belgian time off type. This prevents access errors when opening employee records in the demo environment, improving reliability for testing and demonstrations.
Original PR description
This commit fixes an issue in the demo data. A time off allocation was done using a time off type that is not in Belgium. This caused access error when trying to access the employee. This commit fixes the issue by changing the time off type to a belgian one. task-4896664 Forward-Port-Of: odoo/enterprise#88604
The Partner Ledger partner filter now includes all companies, including companies linked to a parent company. This helps users select the correct partner when filtering reports and avoids missing company records in accounting analysis.
Original PR description
Steps to reproduce - create a company - add a contact to this company - go to its contact form and transform this contact from Individual to Company - go to the Partner Ledger - open Partner filtering dropdown list Current behavior - show company and individual with no parent Expected behavior - show individual with no parents and all the companies - Company with parent company seems to be the expected behavior since 2016. If there is one, the Parent company appear in the contact form as defined [there](https://github.com/odoo/odoo/blob/9b03d99fd0174bd67c8ea30e5fd2c26fb2ad2467/odoo/addons/base/views/res_partner_views.xml#L168) opw-4729020 Forward-Port-Of: odoo/enterprise#87017
Belgian payroll termination holiday reports now use the exercise and holiday period from the payslip instead of the employee contract. This helps ensure the reported values match the actual payslip calculation and reduces payroll reporting errors.
Original PR description
The exercise and the holiday period should be based on the payslip instead of the contract. We use the values of the report report_termination_holidays_n and report_termination_holidays_n1 which contains the correct values.
Bank statement reconciliation now avoids matching entries that include cash or credit card account lines when that would conflict with statement rules. This helps prevent validation errors caused by multiple cash or bank accounts on the same statement entry.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/c0f8c5d17b9d78b640d744d8bfb6a2bb4002776a We changed a condition to have the possibility to match move with an account that allows the reconciliation but by doing so, we authorize moves with a cash line to be match. This will trigger a constraint since we cannot have multiple cash or bank accounts on the same statement move. To avoid that we add a condition that the type of the account can be reconcile but is not an asset_cash or liability_credit_card no task id
The Indian payroll demo payslip dates were adjusted so they fit within the employee contract period. This prevents setup errors when installing demo data, making evaluation and testing of the payroll module smoother.
Original PR description
Issue: The demo payslip for employee had dates before the contract start date, leading to errors during demo data installation. Fix: Adjusted the payslip dates to be 3 months before the current date, ensuring they fall within the employee's contract period and allowing successful demo installation. Forward-Port-Of: odoo/enterprise#86794
This fix prevents errors when users add or edit lines in the payslip editing wizard. Payroll teams can complete payslip adjustments without being blocked by a record creation issue.
Original PR description
In this PR we add edit_payslip_lines_wizard_id in the view to prevent a new line record creation error. Forward-Port-Of: odoo/enterprise#88923 Forward-Port-Of: odoo/enterprise#88033
This fixes an access error that could block authorized branch users from opening the Profit and Loss report when journals belonged to a parent company with a different currency. The report can now load correctly without requiring users to have company settings permissions.
Original PR description
This commit is the counterpart of a commit in community to add a test. ### Steps to reproduce: - Create a branch to a company - Create a journal on the parent company with a different currency from the company - Create a user that can access both the parent company and the branch, but can't change the settings of Odoo - Log as this user, select only the branch as current company - Accounting > Reporting > Profit & Loss - Access Error ### Cause: `_compute_display_name` on the journal reads `journal.company_id.currency_id` without sudo. The current user cannot read on `company_id` because of the rule `res_company_rule_employee`. ### Solution: Use `sudo()` to read the currency of the company. opw-4847500 Linked PR: https://github.com/odoo/odoo/pull/215455 Forward-Port-Of: odoo/enterprise#88848 Forward-Port-Of: odoo/enterprise#88339
Installing Sale Planning no longer fails if the standard Hours unit of measure was previously deleted. The system now restores the required unit when needed and prevents it from being removed in contexts where Sale Planning depends on it, reducing setup interruptions.
Original PR description
Steps to reproduce: --- - Install `sale_management` module - Enable `Units of Measure & Packagings` - Delete `Hours` in Units & Packagings - Install `sale_planning` module Traceback: --- ```…
Steps to reproduce:
---
- Install `sale_management` module
- Enable `Units of Measure & Packagings`
- Delete `Hours` in Units & Packagings
- Install `sale_planning` module
Traceback:
---
```
ValueError: External ID not found in the system: uom.product_uom_hour
ParseError: while parsing /home/odoo/src/enterprise/saas-18.2/sale_planning/views/planning_role_views.xml:26, somewhere inside <record id="planning_role_view_tree_inherit_sale_planning" model="ir.ui.view">
<field name="name">planning.role.list.inherit.sale.planning</field>
<field name="model">planning.role</field>
<field name="inherit_id" ref="planning.planning_role_view_tree"/>
<field name="arch" type="xml">
<field name="resource_ids" position="after">
<field name="product_ids" widget="many2many_tags" placeholder="e.g. Cleaning Services" domain="[('planning_role_id', '=', False), ('type', '=', 'service'), ('sale_ok', '=', True)]" context="{ 'default_type': 'service', 'default_planning_enabled': True, 'default_planning_role_id': id, 'default_uom_id': %(uom.product_uom_hour)d, }"/>
</field>
</field>
</record>
```
The error occurred at [1] because the user deleted `Hours` from `Units & Packagings` before attempting to install the other module.
This commit resolves the issue by calling the `ensure_uom_hours` method before updating the `Hours` unit of measure in the data file. This method ensures the UoM is recreated if it no longer exists in the database.
[1]- https://github.com/odoo/enterprise/blob/adfa1ff2ee56b8d43666cd7c2565d6e9430aae48/sale_planning/views/planning_role_views.xml#L38
sentry-6595283261
Forward-Port-Of: odoo/enterprise#85286The Help page now only displays helpdesk teams linked to the website a visitor is currently using. This prevents teams from other company websites from appearing in the wrong place, reducing confusion for customers and staff.
Original PR description
**Steps to Reproduce:** 1. Install the website_helpdesk module. 2. Create a Helpdesk Team A with 'Website Form' enabled, and set the website to 'My website' 3. Create another Helpdesk Team B with 'Website Form' enabled, and Set website to 'My website2' 4. Navigate to Website → Help menu on "My Website". **Observation:** - Both Helpdesk teams appear on "My Website", even though Team B is linked to "My Website 2". **Issue:** - The current domain filter only checks if the Website Form is enabled. - It doesn't restrict teams to the current website, so all teams are visible. https://github.com/odoo/enterprise/blob/b191f16abb5913893a228ccc4eedb8a2242a0298/website_helpdesk/controllers/main.py#L22 **Solution:** - Update the domain to filter on the website ID, to ensure only helpdesk teams related to the current website are shown. OPW-4673939 Forward-Port-Of: odoo/enterprise#88169
The Journal Report now shows the account name in the Account column, making entries easier to identify and review. This fixes a visibility issue that previously left business users with less context when reading journal report lines.
Original PR description
The purpose of this pr is to add account name in the Account column of the Journal Report. Before this code changes:  After this code changes:  OPW : 4702276 Forward-Port-Of: odoo/enterprise#86113
8 changes
Resolved issues and error corrections
The Indian payroll demo data now uses payslip dates that fit within the employee contract period. This prevents installation errors when loading demo data, making setup smoother for evaluations and testing.
Original PR description
Issue: The demo payslip for employee had dates before the contract start date, leading to errors during demo data installation. Fix: Adjusted the payslip dates to be 3 months before the current date, ensuring they fall within the employee's contract period and allowing successful demo installation. Forward-Port-Of: odoo/enterprise#86794
This update fixes an issue in Payroll where editing payslip lines could fail when adding a new line. Payroll users can now complete this workflow more reliably without encountering a record creation error.
Original PR description
In this PR we add edit_payslip_lines_wizard_id in the view to prevent a new line record creation error. Forward-Port-Of: odoo/enterprise#88923 Forward-Port-Of: odoo/enterprise#88033
The ESIC report now shows a clearer warning when there are no payslips with a valid ESIC value. This helps payroll users understand why the report has no data and what condition is missing.
Original PR description
In this PR, we updated the warning message shown in the esi report view when no payslips with a valid ESIC value. **Before:**  **After:**  Related task: 4753033
This fix prevents AI mail rendering from changing settings passed in by custom modules. It helps avoid unexpected behavior when the same parameters are reused elsewhere, improving reliability for customized deployments.
Original PR description
In custom modules the caller parameters are reused, don't modify them in place as it is a bad practice and copy the dict. Forward-Port-Of: odoo/enterprise#88901
Removing a parent emission source no longer causes an error in the ESG app. This keeps emission source records editable and helps users maintain ESG data without interruption.
Original PR description
Currently, an error occurs when attempting to remove the parent emission source from an emission source. Steps to Reproduce: - Install the `ESG` module. - Go to `Emission Sources` and create a new…
Currently, an error occurs when attempting to remove the parent emission source from an emission source. Steps to Reproduce: - Install the `ESG` module. - Go to `Emission Sources` and create a new emission source with a parent emission source. - Remove the parent emission source. `ValueError: Compute method failed to assign esg.emission.source(<NewId origin=3>,).activity_flow_direct_indirect` This error occurs when the parent emission source is removed, causing the scope to become False in _compute_scope[1]. Subsequently, in _compute_activity_flow[2], none of the cases match, which results in a failure to assign the activity flow and raises an error. [1] https://github.com/odoo/enterprise/blob/1c7620d8de97757abda1993822f92590987bc46c/esg/models/esg_emission_source.py#L75 [2] https://github.com/odoo/enterprise/blob/1c7620d8de97757abda1993822f92590987bc46c/esg/models/esg_emission_source.py#L77-L78 This commit ensures that if the parent emission source is removed, the activity flow is properly maintained. sentry-6690968543 Forward-Port-Of: odoo/enterprise#88158
This update adjusts internal test expectations for Odoo's enterprise email features after a recent merge caused automated checks to fail. It helps keep the development pipeline reliable without changing customer-facing behavior.
Original PR description
Started to fail just after merge, weird. runbot-227060 Forward-Port-Of: odoo/enterprise#88947
The Journal Report now displays the account name in the Account column, making entries easier to recognize and review. This fixes a visibility issue and helps business users understand report lines without relying only on account codes.
Original PR description
The purpose of this pr is to add account name in the Account column of the Journal Report. Before this code changes:  After this code changes:  OPW : 4702276 Forward-Port-Of: odoo/enterprise#86113
Accounting report tests now use the correct setting so they remain stable when the US accounting localization is installed. This prevents automated checks from being redirected to a US-specific tax report, improving release reliability without changing user-facing behavior.
Original PR description
https://github.com/odoo/odoo/commit/174fda9bde8460df0d819100aed7974321d43a59 added a new US variant for the tax report. When running the tests, some failed, because the active company was then a US one, and calling the generic tax report actually rerouted to that new variant. We now ensure we don't reroute in those tests by using the appropriate option key. runbot-226719 Forward-Port-Of: odoo/enterprise#88642
18 changes
Resolved issues and error corrections
Changing a leave request from “Extra Hours” to another time-off type now properly removes the old overtime link. This prevents incorrect overtime deductions or stale attendance overtime records when HR updates leave requests.
Original PR description
This commit fixes a bug that occurs when switching a leave request of type "Extra Hours" to another time-off type. The issue happens when editing a leave request that allows deduction from overtime, as it remains linked to attendance overtime that needs to be unlinked. task-4756706 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207780
Fixes an issue where opening allocations from a time off type could show the same remaining balance information for every employee. This helps HR users see accurate allocation details instead of employee-specific values being reused incorrectly.
Original PR description
### Steps to reproduce: - Create a Time off type - Create allocations for some employees with the created type - Navigate to an allocation for a specific employee - Click on the time off type in the allocation form - Click on the smart button 'Allocations' - Notice each record showing the same time off type (X remaining out of Y) ### Cause: This is happening because when going through the allocation of a specific employee we add him in the context 'employee_id' so we compute the display name of the leave type and set it for each record as the same value as we compute leaves depending on the contextual employee. ### Fix: We are preventing the computation of the display name by forcing the employee_id in the context to force when we are using the smart button for allocations in the time off type form view opw-4841096 Forward-Port-Of: odoo/odoo#215454
This change corrects a printing layout problem where multi-page invoices using the boxed template could show unwanted vertical lines at the bottom of a page. It improves the appearance of printed invoices by adjusting spacing so totals and payment terms flow cleanly across pages.
Original PR description
Before this commit, a print invoice that's on 2 pages with a boxed template left 2 vertical lines on the page bottom A negative margin top in applied that push the table top to the first page I…
Before this commit, a print invoice that's on 2 pages with a boxed template left 2 vertical lines on the page bottom A negative margin top in applied that push the table top to the first page I change the layout of `report_invoice_document` to avoid a negative margin. The negative margin-top to `total` was there to move the float div higher to compensate the ´table` margin-bottom. I remove the `table` margin-bottom and replace that by a `payment term` margin-top. The margin were collapsed for `total` and `payment term` so I had to add an overflow-hidden on the parent div. ## Before :  ## After :  ## Steps to reproduce : - Change the document layout to a boxed one in the Settings - Create products with long descriptions (example can be found in the linked ticket) - Create an invoice with the products - Print the invoice (the total should be on the second page top) - The vertical lines should be there opw-4841652
Long product descriptions on sale order lines now resize correctly after reopening a quotation. This removes unwanted blank space at the bottom of lines, making quotations easier to read and edit.
Original PR description
## Versions 18.0+ ## Issue Blank spaces appear at the bottom of each Sale Order line when a long product description is set. ## Steps to reproduce - Create a new quotation: - Add a product; - Change the description for a long one (3+ lines) or add one; - Go back to the quote list view; - Come back to the quote. ## Cause The component's height computation is done before the columns' widths' computation which then resizes based on font styles, making the text take less space and blank spaces appear. ## Fix Force the computation of the SO line's height once the component is mounted. opw-4766800
This fixes report formatting so long units of measure can wrap instead of forcing other report columns to be cut off. Quantity values remain on one line, making invoices, sales, stock, and delivery reports easier to read and print.
Original PR description
*: l10n_gcc_invoice,l10n_it_stock_ddt,sale,stock,web [1]: https://github.com/odoo/odoo/commit/344bdb1ed4cecdaef007200c011f87e58e36c87d Issue: [Commit](https://github.com/odoo/odoo/commit/344bdb1ed4cecdaef007200c011f87e58e36c87d) introduced a `text-nowrap` on the quantity column, this unnecessarily crops the other columns if we use a long UoM. This commit adds a max-width to the UoM column and applies the text-nowrap to the quantity only, letting the long UoM wrap if too long. task-4478718 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Sales order emails now show the intended sender: the salesperson when one is set, or the company email when no salesperson is assigned. This avoids customer confusion when a shared company email matches an administrator account.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Set company email to the same as the admin's; 2. log in as demo user; 3. set up a sales order without a salesperson; 4. send sales order via email. Issue…
Versions -------- - 18.0+ Steps ----- 1. Set company email to the same as the admin's; 2. log in as demo user; 3. set up a sales order without a salesperson; 4. send sales order via email. Issue ----- Sales order shows as being sent from admin user instead of the company email. The expected behavior for sales orders is that they're sent from the salesperson email if available, else the company's email. Cause ----- When sending the email, it has the correct `email_formatted` value, i.e. Company Name <company@email.com>. To get the author however, `mail` uses the `_mail_find_partner_from_emails` method, which normalizes the given emails before searching matching partners. Without the "Company Name" part, it will also match admin user's email, and because the method prioritizes user emails over partner emails, the company's `partner_id` doesn't even get checked in the lookup. Solution -------- Add a `_computer_authorship` override for `sale.order` messaging. opw-4690644
Employees with flexible working hours will now see all days normally in the Time Off calendar instead of having some days incorrectly greyed out. This avoids confusion when reviewing or requesting time off for flexible schedules.
Original PR description
The calendar view in the Time Off app was displaying greyed-out days. These days corresponded to those from the underlying work schedule on which the flexible working hours were based. Steps to reproduce: ------------------- * In the Work Information tab of an Employee, set the Working Hours to flexible. * Save and click on the Time Off smart button > Observation: Some days were greyed-out Why the fix: ------------ `get_unusual_days()` usually return a dict of each days with True or False. That dict is then interpreted to display white or greyed-out days. Simply be returning False, every days are going to be white. opw-4816609 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes the boxed invoice PDF layout so the totals table has a consistent border after recent spacing changes. The update prevents printed invoices from looking visually disconnected or unfinished.
Original PR description
**Description:** Due to a recent [commit](https://github.com/odoo/odoo/commit/12ef230df58122fbdac0b4c1b4781c535b8516ba), a margin-top was added to the total table for the report type-pdf.…
**Description:** Due to a recent [commit](https://github.com/odoo/odoo/commit/12ef230df58122fbdac0b4c1b4781c535b8516ba), a margin-top was added to the total table for the report type-pdf. Previously,in the box layout, this table did not have a top border because it appeared visually connected to the preceding table — they seemed seamlessly joined. However, after the margin was added,the table now appears visually disconnected, making the absence of a top border look inconsistent and awkward. Steps to reproduce: - install account module - select box external layout - create invoice - print report as pdf Before commit:  After commit:  opw - [4873157](https://www.odoo.com/odoo/project/70/tasks/4873157) upg - [2839564](https://upgrade.odoo.com/odoo/upgrade.request/2839564) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an automated stock workflow test that could fail because it checked information before recent changes were fully saved. The update makes the test process more dependable, helping prevent false failures in validation pipelines.
Original PR description
The `test_add_new_line_in_detailled_op` fails in 18.0+ since clicking on the head of the modal content will trigger a web_read before the records has been updated in db. So that the last applied change disappear. This commit attempt to clean the tour to be more reliable. runbot-113534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an unstable automated test in the mailing area that was failing during nightly checks. The change makes test results more predictable, helping maintain release quality without affecting end users directly.
Original PR description
Not sure why we did that strange construct in subtest but it fails in nightly. Added order on model to try to reduce non deterministic behavior. runbot-162367
Hungarian electronic credit notes now report the supplier and customer bank accounts correctly instead of duplicating the customer's account as the supplier's. This helps ensure NAV submissions contain accurate payment details and reduces the risk of reporting errors.
Original PR description
### Steps to reproduce: - Install l10n_hu_edi and switch to a Hungarian company - In the settings set the NAV mode to "demo" - Create an invoice to a Hungarian contact with an account number - Send it to NAV - Create the credit note for this invoice - Send it to NAV and download the XML in the page "NAV 3.0" - The account number in `supplierBankAccountNumber` and `customerBankAccountNumber` are the same ### Cause: The code was doing: `'supplierBankAccountNumber': format_bank_account_number(self.partner_bank_id or supplier.bank_ids[:1]),` But for credit notes `self.partner_bank_id` is the bank account of the customer not the supplier. ### Solution: Only use `supplier.bank_ids[:1]`. As the bank account were never tested in l10n_hu_edi, this commit adds it in the setup and changed the XMLs to always test it. opw-4845026 Forward-Port-Of: odoo/odoo#214714
The incomplete transfer window in Barcode now avoids overlapping column headers on very small screens, especially when using languages with longer labels such as French. This makes partial receipt validation easier to read and reduces confusion for warehouse users on mobile devices.
Original PR description
Issue ----- When processing partial receipts on small resolution screens, the incomplete transfer window has an overlap of its headers for translations with long terms. Steps to reproduce ----- - Set…
Issue ----- When processing partial receipts on small resolution screens, the incomplete transfer window has an overlap of its headers for translations with long terms. Steps to reproduce ----- - Set DB language to French - On Inventory>Configuration>Operation Types, configure the operation type "receipts" to create backorders on "Ask" - Create an incoming transfer - Open barcode on a low resolution screen (eg 340x400px) - Open the transfer in barcode - Process part of the quantity - Validate the partial transfer --> The "Terminé /" & "A faire" column headers overlap Cause ----- The resolution is not wide enough to fit the headers without word break. However breaking words isn't a suitable solution either as it makes headers unreadable. For example, "Terminé /" & "A faire" would read as "Term A " " iné fair" " / e " Given that the 2 columns are semantically related, we can merge their headers together without losing readability. Visual comparison ----- Low resolution before (left) & after the fix (right).  Desktop display is a bit affected but still readable.  ----- Ticket: opw-4715939
This fix prevents an error when online payment synchronization checks a missing provider type. It helps keep batch payment processing stable when provider information is incomplete.
Original PR description
The aim of this commit is making sure that we don't have a traceback when we are trying to do a "in" comparison with an empty `provider_type`. no task id
The salary configurator now shows the minimum wage warning only for Belgian companies. This prevents employees in other countries, such as the United States, from seeing irrelevant Belgian wage alerts when Belgian localization is installed.
Original PR description
The warning for a basic wage below minimum level appears for non Belgian employees, such as L10N_US, because the L10N_BE was installed. The logic for the warning has been limited to be applied only on Belgian companies. Task #4907771
Users can no longer open Studio to customize the Bank Reconciliation view. This prevents unsupported changes to a sensitive accounting workflow and helps keep bank reconciliation behavior stable.
Original PR description
- Install `web_studio` and `account_accountant` - Open Accounting -> Bank You can open studio on this view but this should not be possible opw-4859464
Resetting an invoice to draft now ensures its already posted deferred accounting entries are cancelled as expected. This prevents inconsistent accounting records and adds test coverage to confirm the behavior remains reliable.
Original PR description
When resetting an invoice to draft, its posted deferred entries should be cancelled. This is adding a test to the linked fix. Linked community PR: https://github.com/odoo/odoo/pull/216628 opw-4891975
The Kenyan NHIF/SHIF payroll report now selects payslips for the exact month chosen, preventing payslips from the previous month from appearing in the wrong report. The report wording was also simplified by removing an explanatory line that could cause confusion.
Original PR description
- load payslip according to the Month value, currently, may payslip appears on june selection - remove the line 'the selection will cover ...' task-4775801 Forward-Port-Of: odoo/enterprise#85609
Users can now share shortcut folders directly from the cog menu next to the breadcrumbs. This fixes a missing action in Documents and removes unused code, making folder sharing more consistent.
Original PR description
Before this commit, the share action in the cog menu (next to the breadcrumbs) wasn't available for shortcut folders. This commit fix this issue. This commit also removes some dead code. Task-4897840