Tuesday, July 15, 2025
17 changes · saas-18.1
Resolved issues and error corrections
This fix prevents internal-looking separator entries from appearing when users choose property fields in filters, domains, server actions, and group-by options. It also keeps list view column names stable after grouping by a property, reducing confusion in day-to-day navigation.
Original PR description
Bug 1 ===== When inserting properties in a domain, or in the server action form view, the property separator should not be visible. Don't show separator in group by. Bug 2 ===== Name change in list view after grouping by a property 1. Add a property in the list view 2. Group by a property => The name of the parent is added in the column. Task-4896271 Forward-Port-Of: odoo/odoo#217468
Internal users without Accounting permissions can now add sub-contacts to contacts that use Spanish Facturae FACe Center roles. This removes an unnecessary access restriction that caused errors during normal contact management.
Original PR description
**Steps to reproduce:** - Install l10n_es_edi_facturae - With an admin user, create a contact - From the contact, add a "FACe Center" sub-contact with a Role - Save the contact - With a user that doesn't have any Accounting rights, try to add a sub-contact to the previously created contact **Issue:** An access error is raised because some Accounting rights are needed to access "l10n_es_edi_facturae.ac_role_type" records. **Cause:** "l10n_es_edi_facturae.ac_role_type" is only readable for "account.group_account_invoice" group and "account.group_account_readonly" group. **Solution:** There's is no point to restrict the read access to an Accounting group. The model is made readable for all internal users. opw-4788636 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217370
The website editor sidebar now keeps its layout buttons within the available space, including when longer translated labels are shown. This prevents unwanted horizontal scrolling and makes editing image layouts smoother for users in languages such as Spanish.
Original PR description
Step to reproduce: - Set the odoo backend language to spanish (tested in V16.0) - Go to edit mode - Drop "Text-Image" snippet. - Click on Image from dropped snippet. - Bug: The sidebar "Layout" menu overflows, there is a horizontal scrollbar. Issue: There was an issue with the dynamic width of the we-buttons within the button group. The text in the "Layout" options was overflowing, causing the sidebar to overflow. Solution: This commit addresses the specific issue with the layout option. Without altering any other styles and assuming this is the only case, we equally divide the available space between the buttons using the grid template. task-4378522 Forward-Port-Of: odoo/odoo#217722 Forward-Port-Of: odoo/odoo#189856
This fixes a crash that could occur when a user changed quantities on a replenishment rule linked to a manufacturing order. The update makes the replenishment calculation handle temporary edit states safely, so users can adjust rules without being blocked by an error.
Original PR description
**Steps to reproduce:** - Install MRP module - Create a new product tracked by quantity and set its route to manufacture - Create a new BoM and set the Manuf. Lead Time to 2 days - Create a new…
**Steps to reproduce:**
- Install MRP module
- Create a new product tracked by quantity and set its route to manufacture
- Create a new BoM and set the Manuf. Lead Time to 2 days
- Create a new reordering rule, set the minimum quantity to 2 and click on order
- Navigate to the newly created manufacturing order and set the scheduled date to the next day
- Try increasing the minimum quantity on the reordering rule
- `KeyError` is triggered
**Issue:**
When computing `unwanted_replenish` field, the `_quantity_in_progress` function builds a dictionary (`res`) created using the IDs of current 'stock.warehouse.orderpoint' records as keys.
During `onchange()` process the keys can be set as temporary IDs (`NewID` class). But, when evaluating domains, `orderpoint.id` is returned as the real ID (`orderpoint._origin.id`), which make the index lookup fails when checking value of existing model:
```
self.id => NewId origin=6
res => {<NewId origin=6> : 0.0}
orderpoint.id => 6
res[orderpoint.id] => KeyError
```
This mismatch occurs due to the implicit conversion when using `NewId` inside domain filters with `.ids`. In which case they return the elements which matched the `_origin` id (for previous existing records). Domains will return the matching records with real IDs, but the dictionary still expects `NewId` as key.
**Fix:**
Ensure safe lookup by explicitly checking whether the dictionary has either the real ID or the `NewId` wrapper.
opw-4729116
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#209505This update adjusts wording used for translations so Odoo can be processed correctly on Ubuntu Jammy systems. It prevents translation extraction builds from failing, improving release reliability without changing user-facing behavior.
Original PR description
On Jammy, babel does *not* cope well with f-strings as values inside `_()` calls: it uses `eval` to try and figure them out, which attempts to execute the f-string, which fails because the evaluation context is empty. This is likely fixed from Babel 2.11 onwards (python-babel/babel#915) but Jammy uses babel 2.8[^1]. https://runbot.odoo.com/odoo/runbot.build.error/97849 [^1]: This doesn't seem to trigger on Noble even though it uses 2.10, but locally it does trigger on 2.10.3 (installed via pip), so ubuntu might have backported the fix or something. Forward-Port-Of: odoo/odoo#218803
When an employee is archived, the departure process now correctly removes that employee's user from related approver fields even if they are only assigned to one approval role. This prevents outdated approver links from remaining on other employee records, reducing manual cleanup for HR teams.
Original PR description
Currently, a user needs to be time off, expense and timesheet approver of an employee for those links to be removed by the departure wizard. If not all the approver fields are the same user, that link will not be removed. Steps to reproduce: - Set Marc Demo as only Time Off approver on an employee. - Archive Marc Demo's employee (This does not remove time off approver from the previous employee) To rectify this issue, we correctly group the `user_domain` so that their contents are properly OR'd. Forward-Port-Of: odoo/odoo#213513
Fixed an issue where printing a Bill of Materials could fail if a by-product had a quantity of zero. Manufacturing users can now generate BOM overviews reliably, with zero-quantity by-products shown with zero cost instead of causing an error.
Original PR description
**Issue**:
Printing the BOM crashes when one of the byproduct quantity is set to 0
**Steps to reproduce**:
- Open the manufactoring app
- Go to settings and activate by-product settings
- Go to Products > Bills of Materials
- Open a BOM
- Put the quantity of one the by-product by 0
- Click on overview
- Click on the print button
**Cause**:
In the `mrp_report_bom_structure.xml` template, there is this division:
- `<td class="text-end" t-esc="byproduct['bom_cost'] / byproduct['quantity']" t-options='{"widget": "monetary", "display_currency": currency}'/>`
without checking if `byproduct['quantity']` is different than 0.
**Solution**:
Added the check on `byproduct['quantity']` in the foreach
**Additional notes**:
Since it makes no real sense to have a non-zero BoM cost associated with a byproduct whose quantity is zero, the cost is set to 0 when the quantity is 0.
opw-4853525
Forward-Port-Of: odoo/odoo#213936This fixes an intermittent automated test failure in the Mail area by waiting until sending is actually available before submitting a message. It helps keep quality checks stable and reduces false build failures without changing customer-facing behavior.
Original PR description
Before this commit, tour "test_mail_group_public_page_as_portal" failed non-deterministically at the following step:
```
FAILED: [14/37] Tour discuss_channel_public_tour.js → Step Check message is shown (trigger: .o-mail-Message-body:contains("cheese")).
```
When looking at screenshot from runbot, it shows that the message is indeed not on UI, but the composer still contains "cheese" in input, which means the message hasn't been effectively posted.
This can happen when the press Enter is made before the composer is not in a state to send the message. In practice the conditions should be met: have some text in composer and some attachments have been attached and fully uploaded. However test it running steps fast and it can trigger the "press Enter" sooner than it's actually made available.
This commit fixes the issue by pressing Enter when the "send" button is enabled, which is the right time when press Enter is also available to use.
Fixes runbot-error-229828A translation-related issue in survey answer statistics has been corrected. This helps prevent warnings or errors when survey results are processed in translated environments, improving reliability for multilingual users.
Original PR description
Issue: Prior to this commit, a translation issue occurred due to the use of a list comprehension. The _get_translation_source function attempts to scan the local variables, but in the context of a list comprehension, only variables defined within the comprehension are accessible. As a result, variables like uuid and cursor were not available to the _get_lang function, ultimately leading to an error. Fix: Replaced the list comprehension with a standard for loop to ensure proper access to local variables. runbot-135198 Forward-Port-Of: odoo/odoo#216030
Report layouts now keep quantities on one line while allowing long units of measure to wrap. This prevents long unit names from squeezing or cutting off other report columns, improving readability across invoices, sales, stock, and delivery documents.
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 Forward-Port-Of: odoo/odoo#194389
Users can now create a new work center directly while setting up manufacturing operations, even before selecting a Bill of Materials. This removes an unnecessary company-setting dependency that caused an error and interrupted setup.
Original PR description
**Current behavior:** Can't create a workcenter from the operations (workorder) form view without having a BoM filled in (due to company check issue). **Expected behavior:** Can **Steps to reproduce:** Open `Manufacturing / Configuration / Operations` -> create new -> type in a new workcenter name -> hit create -> error **Cause of the issue:** in `mrp_routing_workcenter_form_view` we get some context for a `default_company_id`- it's not only unnecessary because `Mrp.Workcenter` will get a default company just fine via its its `resource.mixin` inheritance. The currently provided company comes from the BoM, thus the issue happens when the BoM has not yet been filled in on the view. **Fix:** Remove the context in the view. opw-4836904 Forward-Port-Of: odoo/odoo#217950
This fix ensures that when employees take a one-day leave, the related timesheet uses the employee's average daily hours. This keeps leave and timesheet records aligned, especially for employees with flexible schedules.
Original PR description
After https://github.com/odoo/odoo/pull/209570 , the way work intervals are computed might not reflect real working time for flexible employees, since the virtual schedule is based on a weekly span. In this PR we chose to allocate a timesheet for single day leaves corresponding to average hours per day to be consistent with hr_holidays calculation. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218353
Live chat chatbot steps now remove old answer options when a question-selection step is changed to another type. This prevents outdated answer choices from remaining attached to steps where they no longer apply, keeping chatbot flows cleaner and less confusing.
Original PR description
**Current behavior before PR**: When the step type was changed from "question selection" to another type and the step was saved, answers were not cleared. **Desired behavior after PR is merged**: Now, when the step type is changed from "question selection" to any other type and the step is saved, the answers are cleared. **task**-[4510555](https://odoo.com/odoo/all-tasks/4510555) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195698
Repair order labels now display correctly when multiple records are grouped together. This prevents users from seeing incorrect or untranslated text in their active language, improving clarity in repair workflows.
Original PR description
The `_()` function doesn't work in listcomp as it can't find the env to get the active lang. Forward-Port-Of: odoo/odoo#218919
A mail test was updated to select the intended message when editing or reacting, instead of sometimes choosing an older message from a prior run. This reduces intermittent test failures and helps keep release validation stable without changing the user-facing product experience.
Original PR description
Before this commit, "test_discuss_channel_public_page_as_internal" tour would fail non-deterministically at following step: ``` FAILED: [21/33] Tour discuss_channel_public_tour.js → Step Click on edit (trigger: .o-mail-Message-moreMenu [title='Edit'], .o-mail-Message [title='Edit']). ``` This happens because this tour is run twice, and in the 2nd run the selector to hover and click on 'Expand' is just targeting the 1st message. This works fine in the 1st run, but in the 2nd run this picks the message of previous test instead of the 2nd one. A full run of tour posts a message "cheese" and edits its content to "vegetales", so targeting the message with content "cheese" ensures the right message is picked, which is what this commit does to fix the issue. This commit also properly targets the right message for message reaction. Fixes runbot-error-227756 Forward-Port-Of: odoo/odoo#219009
Hong Kong payroll now handles HSBC autopay amounts consistently with payslip totals by avoiding mismatches caused by decimal handling. This reduces rare payment file discrepancies and helps payroll teams process salary payments with more confidence.
Original PR description
Explanation: In some rare cases, the autopay amount in payslip and the amount in hsbc autopay file doesn't match. This is due to hsbc autopay files are trimming all the decimal places, and the amount in payslip are rounded. Forward-Port-Of: odoo/enterprise#89118
This fix ensures the administrator account has an email address during a quality control worksheet test. It prevents automated test failures caused by missing sender email settings, helping keep releases and validations running smoothly.
Original PR description
Set the admin user's email explicitly to prevent "Please configure the sender's email address" error when running the tour with login='admin'. build_error-226779