Wednesday, September 2, 2026
35 changes · master
Resolved issues and error corrections
This fix prevents time off categories that are not meant to be selectable, such as Attendance, from appearing when users create time off or allocation records. It also avoids confusing balance text being shown for those unavailable categories, helping HR and payroll users choose only valid time off options.
Original PR description
Steps to reproduce: 1. Go to Payroll > Time Off (or Time Off > Management > Allocations). 2. Create a new record or select a cell. 3. Select a time type that has `time_off_selectable` set to False (e.g. Attendance). 4. Observe that the time type is available in selection and appends "(0/0 hours)" to its display name. Cause: - `_compute_display_name` on `hr.work.entry.type` checked `requires_allocation` without verifying if `time_off_selectable` was True. - Selection domains in `hr.leave`, `hr.leave.allocation`, and batch generation wizards did not filter out non-selectable time off types. Solution: - Check `time_off_selectable` alongside `requires_allocation` in `hr.work.entry.type._compute_display_name`. - Enforce `time_off_selectable = True` in selection domains across `hr.leave`, `hr.leave.allocation`, `hr.leave.allocation.generate.multi.wizard`, and `hr.leave.generate.multi.wizard`. Task: 6518178
Polish bank account verification now handles batches where some partners are missing tax or bank details without causing an error. This keeps verification usable for mixed partner lists and avoids interruptions during routine checks.
Original PR description
When we check for multiple partners with some valid and some being incomplete (no vat or no bank account), a traceback is raised This was due to a bracket accessor, changed into a get in this commit. no-task Forward-Port-Of: odoo/odoo#285898 Forward-Port-Of: odoo/odoo#285631
This fix keeps a temporary accounting setting from being reused longer than intended during invoice and payment processing. It mainly improves reliability in automated tests and complex transaction flows, with little expected day-to-day impact for users.
Original PR description
This commits stop this context key to be leaked beyond necessary. In practice it's rarely an issue because the browser will do separate rpc calls with a clean context each time. It is particularily a problem while running some tests where everything happens in the transaction. task-none
This fix prevents a rare crash when Intrastat reporting logic is run in company access situations outside the standard user interface. It helps keep Danish, Lithuanian, and Swedish Intrastat processes stable for future customizations or edge-case setups.
Original PR description
Due to some trouble with tests, we found that in some cases, this function is called on the root company, and if the user does not have the access rights to read data from the company (users with system rights have them by default), it will cause a crash. This situation is not possible with the standard UI, but we fix it in case it becomes possible in a future version or customization. Forward-Port-Of: odoo/enterprise#129083 Forward-Port-Of: odoo/enterprise#128217
This update prevents an internal invoice synchronization setting from remaining active longer than intended. It reduces the risk of incorrect behavior in accounting workflows, especially during automated tests or multi-step processing in the same session.
Original PR description
… of `skip_invoice_sync` This commits stop this context key to be leaked beyond necessary. In practice it's rarely an issue because the browser will do separate rpc calls with a clean context each time. It is particularily a problem while running some tests where everything happens in the transaction. task-none
This fix makes sure recent changes to internal reference records are saved before they are read by a direct database lookup. It prevents Odoo from using outdated configuration values in this specific workflow, improving reliability for module data handling.
Original PR description
Steps to Reproduce: - write on ir.model.data to modify noupdate. - _lookup_xmlids still returns the old noupdate value. Example: In [1]: imd = self.env['ir.model.data'] In [2]: xml_id =…
Steps to Reproduce:
- write on ir.model.data to modify noupdate.
- _lookup_xmlids still returns the old noupdate value.
Example:
In [1]: imd = self.env['ir.model.data']
In [2]: xml_id = self.env['ir.model.data'].search([], limit=1)
In [3]: imd._lookup_xmlids([xml_id.complete_name], self.env[xml_id.model])
Out[3]: [(18603, 'auth_signup', 'action_send_password_reset_instructions', 'ir.actions.server', 149, False, 149)]
In [4]: xml_id.write({'noupdate': not xml_id.noupdate})
Out[4]: True
In [5]: imd._lookup_xmlids([xml_id.complete_name], self.env[xml_id.model])
Out[5]: [(18603, 'auth_signup', 'action_send_password_reset_instructions', 'ir.actions.server', 149, False, 149)]
In [6]: imd.flush_model()
In [7]: imd._lookup_xmlids([xml_id.complete_name], self.env[xml_id.model])
Out[7]: [(18603, 'auth_signup', 'action_send_password_reset_instructions', 'ir.actions.server', 149, True, 149)]
Issue:
- _lookup_xmlids is returning values from ir.model.data executing an SQL query w/o flushing.
Fix:
- Add flushing in _lookup_xmlids.
Forward-Port-Of: odoo/odoo#262791Swiss payroll employee records will no longer log unnecessary history entries when pension mutation records are refreshed. This reduces chatter clutter, especially during frequent automated updates, making important employee history easier to review.
Original PR description
Calling `_create_or_update_snapshot` after writing on an employee recomputes `lpp_mutations`, deleting and recreating the linked records. Because `lpp_mutations` was tracked, every `write` on an employee generated unhelpful chatter entries, cluttering important history. This was especially noisy during frequent writes in hourly crons. Disable field tracking on `lpp_mutations` to improve chatter clarity and overall user experience. opw-6285407 --- Forward-Port-Of: odoo/enterprise#129628 Forward-Port-Of: odoo/enterprise#128033
This fixes an issue in the French PDP registration process where the system referenced outdated field names. The correction helps prevent registration failures after the related routing fields were renamed.
Original PR description
The fields have been renamed in routing_... --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#285619
The Tax Excl./Tax Incl. toggle badge no longer shows an unwanted outline when users hover, click, or focus on it. This keeps sales, purchase, and accounting forms looking consistent and avoids a small visual distraction during order entry.
Original PR description
The "Tax Excl."/"Tax Incl." toggle badge showed an unwanted outline in two cases: - On real keyboard/click focus, Bootstrap draws its default focus ring. - On plain mouse hover, useNavigation adds a "focus" class. Also, sale.order and purchase.order views were never given the `tax_mode_badge` class, so the account.scss fix silently never applied to them at all. Forward-Port-Of: odoo/odoo#283798
This fix updates a Belgian payroll attendance test so it remains reliable when demo employee data changes the company's worker count. It helps avoid false payroll test failures while preserving confidence that payslip calculations continue to run correctly.
Original PR description
The FFE employer contribution rate depends on the company's current worker count. Additional demo employees installed on runbot can move the company across the applicable threshold and change the expected payslip amounts. This commit update the test expectations according to the computed worker count. [error-939674](https://runbot.odoo.com/odoo/error/939674) Forward-Port-Of: odoo/enterprise#130025 Forward-Port-Of: odoo/enterprise#126887
This fix ensures alerts in the Point of Sale restaurant appointment flow are dismissed after a table is assigned to a booking. It prevents lingering warning messages that could confuse staff during booking and table management.
Original PR description
Steps to reproduce: ==================== - In `pos_restaurant_appointment`, try to reassign a table to a booking. - An alert is shown. - Assign a table to the booking. Issue: ====== - The alert is not dismissed. Cause: ====== - In `pos_alert_plugin`, `dismiss` is updated instead of `_dismiss`. Fix: ==== - Update `_dismiss` instead of `dismiss`. task-6522926 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The salary simulation flow now keeps the employee's job information available when benefits are configured. This prevents an error that previously blocked users from validating a salary simulation from an employee record.
Original PR description
Steps to reproduce: - Go to an employee form. - Click on the salary simulation button. - Click on the configure benefits button. - UserError: "Missing required fields: Employee Job". Reason: `employee_job_id` was missing from the calculator form view XML, causing the field to be empty when validating the simulation. Solution: Add `employee_job_id` as an invisible field in the form view. Task-6497089
Spreadsheet thumbnail previews now load correctly after a change in how file data is returned. This helps users recognize and select the right spreadsheet from the document selector without broken or missing previews.
Original PR description
Binary fields now return a POJO `{filename, content}` rather than a simple string, but the code to display spreadsheet thumbnails wasn't adapted.
Task: [6522764](https://www.odoo.com/web#id=6522764&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)This fixes a timing issue where the reply box could stay open because suggestion popups reopened after being dismissed. Users get more reliable keyboard behavior when closing replies or popups in the Mail app, especially under slower server conditions.
Original PR description
Two independent causes made "reply: discard on pressing escape" red, one commit each. "[FIX] mail: wait for the mention suggestions before Escape" is the one that fixes the reported failure, and it holds on every branch: the test presses Escape while the mention fetch is in flight, and the suggestions arriving from the server re-open the list that Escape closed, so the re-opened list takes the second Escape and the reply is never discarded. The test now waits for the fetched suggestions before pressing Escape. "[FIX] mail: keep the suggestion list closed on a re-render" backports "[FIX] mail: keep composer suggestion list closed on unrelated re-render", which entered at 19.0 and never came down. Here NavigableList is re-opened on every patch, so opening the emoji picker after Escape brings the dismissed list back, and it then steals the Escape meant for the picker. https://runbot.odoo.com/odoo/error/946314 Forward-Port-Of: odoo/odoo#286041 Forward-Port-Of: odoo/odoo#284725
Fixed an issue where creating a new group in a grouped list view could cause an error when totals or aggregates were shown. This helps users continue data entry smoothly without interruptions in views such as CRM lists.
Original PR description
Adding a new group on a grouped list view with aggregates gives a traceback. This comes from `getFieldCurrencies` and `computeAggregates` which didn't guard for group with no currency aggregates (like a newly created group). Steps to reproduce: - open a list view (CRM) - group by a m2o (Contact) - click on 'Add a Contact' - press Enter => Traceback Forward-Port-Of: odoo/odoo#285920 Forward-Port-Of: odoo/odoo#285325
Users will no longer see an unnecessary warning notification when a pasted internal link cannot generate a preview, such as when the URL contains a typo. The issue is still recorded in the browser console, reducing distraction while keeping diagnostic information available.
Original PR description
When an internal link preview is missing, a notification is displayed to inform the user that the link is likely wrong. This commit logs this information in the console instead of showing it as a notification. Steps to reproduce: - Go to a To-do note - Create a link - Paste the current URL but introduce a typo in "to-do" => A notification was displayed. task-6317849
The website shop builder now shows a brush icon for the products design button instead of a less clear design services icon. This restores a more familiar visual cue, helping users recognize the design action more easily.
Original PR description
The products design button was previously `fa-paint-brush`. It was replaced by the `design_services` Material Symbols instead of the more similar `brush`. This commit changes it back to a brush. task-6377407
This fixes an issue where manufacturing-related accounting entries could be created in an unpredictable order during subcontracting receipt processing. The change makes results more consistent and helps avoid occasional test or reporting inconsistencies caused by identical dates and document names.
Original PR description
The search order on account move line depends on date, move name and id. This search result order can be non deterministic because, when creating account move line from stock valuation, it depends on…
The search order on account move line depends on date, move name and id. This search result order can be non deterministic because, when creating account move line from stock valuation, it depends on the order from a set, but sets are unordered. **Step to reproduce** Run [test_subcontracting_purchase_bill](https://github.com/odoo/odoo/blob/13b2781978b0edad0df0800404276919b767e32b/addons/mrp_subcontracting_purchase/tests/test_mrp_subcontracting_purchase.py#L268) in: Single app, community, with demo data. **Observation** * The search: When doing the search since we didn't specify any order, the search from account.move.line will ordered by: https://github.com/odoo/odoo/blob/3dd41395e2e4205fa477eb474d4a4dba0a976154/addons/account/models/account_move_line.py#L23 https://github.com/odoo/odoo/blob/3dd41395e2e4205fa477eb474d4a4dba0a976154/addons/account/models/account_move_line.py#L1664 Since, for the components the date and move name are the same it will only depend on the aml ids: * `Account.move.line` creation: When it validate the receipt (`button_validate`) https://github.com/odoo/odoo/blob/869c750f978b1b00a4a04bd61226f0e20d2e7729/addons/mrp_subcontracting_purchase/tests/test_mrp_subcontracting_purchase.py#L296 It will mark as done the picking (`_action_done`) and the productions (`button_mark_done`) linked to this picking. https://github.com/odoo/odoo/blob/869c750f978b1b00a4a04bd61226f0e20d2e7729/addons/stock/models/stock_picking.py#L1429 https://github.com/odoo/odoo/blob/869c750f978b1b00a4a04bd61226f0e20d2e7729/addons/mrp_subcontracting/models/stock_picking.py#L49 Modify the inventory accordingly (`_post_inventory`) https://github.com/odoo/odoo/blob/869c750f978b1b00a4a04bd61226f0e20d2e7729/addons/mrp/models/mrp_production.py#L2231 while inside of `_post_inventory`, it will process all the production moves, for this it will divided them in set to process them by batch: https://github.com/odoo/odoo/blob/f0e58b9324af18d0cf0264aec2886d098e997f03/addons/mrp/models/mrp_production.py#L1904-L1911 From this set, it will create the `account.move.line`: It retrieve the actual stock move with the browse, and call `_action_done`, from where the stock valuation layer will create the `account.move.line`. https://github.com/odoo/odoo/blob/f0e58b9324af18d0cf0264aec2886d098e997f03/addons/mrp/models/mrp_production.py#L1913 https://github.com/odoo/odoo/blob/f0e58b9324af18d0cf0264aec2886d098e997f03/addons/stock_account/models/stock_move.py#L187 The issue arise because a set read order is non deterministic. runbot-939794 Forward-Port-Of: odoo/odoo#279396
This fix removes Italian eInvoicing fields that were mistakenly shown in the Point of Sale partner form. It keeps the Italian PoS setup aligned with its supported scope, avoiding confusing or unavailable invoicing options for users.
Original PR description
The PoS has a dedicated "simplified" partner form view since 19.2. We had to fix in stable the fields that were missing (typically needed for eInvoicing) in the simplified view by completely overriding the simplified view with the old one. In master, we added the fields back to the simplified view. When doing so, we mistakenly re-added Italian eInvoice fields to the l10n_it_pos module, while this one is not supporting eInvoicing in PoS, only printers, and not even depending on l10n_it_edi that holds the field. This commit removes the extension of the simplified view that was not necessary. Note: added in the same version, no need to handle migration. Related: https://github.com/odoo/enterprise/pull/119316 runbot-946594
Planning shifts will now only show missing-role warnings for human resources, not material resources. This reduces unnecessary alerts when shifts include equipment or other non-human resources that are still valid for the work.
Original PR description
Currently, the warning stating that the resources selected on the shift don't have the required role might be triggered too easily. Human and material resources will likely have different roles due to their different nature. However, a shift can only have a single role, which will usually be the one required for the human resources, while the shift itself may be assigned to a mix of human and material resources. As a result, the warning will often be triggered for material resources even though they are valid for the shift, which could create noise for users. With this PR, the warning is only triggered for human resources Task-6467213
Payroll users can now remove or change payslip period dates without triggering an unexpected error. This keeps payslip creation and editing stable when employee contract dates are present.
Original PR description
Currently, an error occurs when the user removes the payslip period. **Steps to Reproduce:** - Install the `hr_payroll` module. - Go to `Employees` and create an `employee`, or use an existing one. -…
Currently, an error occurs when the user removes the payslip period. **Steps to Reproduce:** - Install the `hr_payroll` module. - Go to `Employees` and create an `employee`, or use an existing one. - Make sure the `employee's version` has a `contract start date`. - Go to `Payroll` > `Payslips` > `Payslips` and create a payslip. - Select that `employee` on the payslip, then remove the `payslip start date`. `TypeError: '<=' not supported between instances of 'datetime.date' and 'bool'` After the [recent commit], which computes the version from the payslip period without allowing it to be overridden, when the user selects an employee whose version has a contract start date, it checks whether the version overlaps with the payslip period [1]. However, since the payslip dates have not yet been set, it raises an error. This commit ensures that the check for the version overlapping with the payslip period is skipped if the payslip does not have both a start and end date. It also makes the method depend on date_to, because if the user changes the payslip end date, it should recheck whether the version overlaps with the payslip period. [recent commit]: https://github.com/odoo/enterprise/commit/569ce2af32477d410b79e98ca72729385042619b [1]- https://github.com/odoo/enterprise/blob/8a66d7beabe6f9b28000ef12725f3a9937d5d1ee/hr_payroll/models/hr_payslip.py#L1716-L1725 sentry-7632216317 Forward-Port-Of: odoo/enterprise#126515
This update registers the Greek e-invoicing module with the translation system. It ensures the module can receive and manage translations properly, improving localization support for Greek users.
Original PR description
Commit https://github.com/odoo/odoo/commit/45bd522dde7a67194e14a40d66944a2e34d1f79d introudced a new module without it's related `weblate.json` entry. This commit fixes this omission. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#285570
The Point of Sale flow now hides quotations that have already been settled, so staff cannot accidentally select and settle the same quotation again. This helps avoid duplicate processing and reduces correction work for sales teams.
Original PR description
Once a quotation is settled, opening the quotation list should not allow selecting it again. This commits updates the domain to prevent it. task-6479356 Forward-Port-Of: odoo/odoo#284768
This fix prevents the guided tour feature from crashing when a tour that was previously started is no longer available in the database. Users, including free trial users, should now see the tour handled gracefully instead of encountering an error.
Original PR description
get_tour_json_by_name returned an empty array instead of False when no tour matched. TourService.getTour then skipped its `!tour` guard and crashed reading `tour.steps.length` on that string. Issue spotted on free trials 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#286059
This update makes an internal automated test for the web reference field run consistently, even when there is a small network delay. It helps reduce false failures in Odoo's validation pipeline without changing customer-facing behavior.
Original PR description
The test is non-deterministic and fails with the runbot error:
found 0 elements instead of 1:
0 matching ".ui-autocomplete .ui-menu-item:nth-child(2)"
if there is even a 100ms network delay. clear() dispatches input events, but without flushing the timers, the dropdown state at the time of click(".o_field_reference input") can be out of sync causing no menu items to render and failing the test.
This change makes the sequence deterministic without changing the assertions:
1. runAllTimers() clears the timers and allows the clear of the input to fully go through.
2. click(".o_form_view") unfocus the input so the next click of the input refocuses and triggers the menu opening.
3. checking contains on the dropdown children ensures the menu items can render before click.
runbot error: 940222
Forward-Port-Of: odoo/odoo#286055This fixes a dependency issue in the Indian stock localization so related stock and accounting data is available when the app is tested or installed on its own. It helps prevent broken screens in e-waybill stock workflows and improves installation reliability without changing user-facing features.
Original PR description
The view 'l10n_in_ewaybill_stock.view_picking_form_inherit_ewaybill' is broken in single-app tests because it depends on stock.picking:country_code. That field is provided by module 'stock_account' through auto_install relationship. 'stock_account' auto_installs with 'stock' and 'account' installed. This condition exists on stable so it's safe to add this dependency. The dependency is added to l10n_in_stock because it seemed like the logical place where 'account' and 'stock' functionality comes together. [l10n_in_ewaybill_stock] ──[depends]──> [l10n_in_stock] [l10n_in_stock] ──[depends]──> [stock] [l10n_in_stock] ──[depends]──> [l10n_in] ──[depends]──> [account_tax_python] ──[depends]──> [account] REF Runbot: https://runbot.odoo.com/odoo/error/945482 Forward-Port-Of: odoo/odoo#284990
This fixes an issue where applying a color to a selected part of formatted text could color extra nearby text by mistake. Users can now apply text colors more precisely, avoiding unwanted formatting in website or content editing.
Original PR description
Problem: When applying color on a selection that spans across partially selected inline elements (e.g. `<p><b>a[b</b>c]d</p>`), container elements whose contents are not fully selected (such as…
Problem: When applying color on a selection that spans across partially selected inline elements (e.g. `<p><b>a[b</b>c]d</p>`), container elements whose contents are not fully selected (such as `<b>`) were included in `targetedNodes`. This caused improper color formatting/nesting on partially selected elements. Cause: In `ColorPlugin._applyColor()`, `targetedNodes` were filtered by checking `isNodeEditable(node)` and `nodeName !== "T"`, but did not check whether the contents of `node` were fully selected (`areNodeContentsFullySelected(node)`). As a result, partially selected ancestor elements were included in `targetedNodes`. Solution: Filter `targetedNodes` in `_applyColor()` using `this.dependencies.selection.areNodeContentsFullySelected(node)` to ensure only fully selected nodes are targeted when applying colors. Steps to reproduce: 1. Open html_editor. 2. Insert content: `<p><b>ab</b>cd</p>`. 3. Select `b` inside `<b>` and `c` inside `<p>` (`<p><b>a[b</b>c]d</p>`). 4. Apply text color (e.g. red). 5. Observe "ab" and "c" was colored instead of just "b" and "c". task-6456443 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#285658 Forward-Port-Of: odoo/odoo#281462
Fixed the Turkish reports journal form so the return from sales account appears in the correct place with the right label. This prevents confusion when users review or configure journal accounts.
Original PR description
The journal form renders `default_account_id` as six standalone labels followed by two `nolabel="1"` fields, one for bank, cash and credit journals and one for sale, purchase and general ones. The xpath matched the first of those two fields, so the return from sales account was inserted between them. Its own label then landed in the middle of the label run, shifting the group grid: both labels rendered side by side with their values underneath, each next to the wrong caption. Anchor on the second field instead, so the new field follows the whole label and field run. Task-6438412 Forward-Port-Of: odoo/enterprise#129532 Forward-Port-Of: odoo/enterprise#128083
Updating suggested products could fail when an unpublished product belonged to an eCommerce category. This fix prevents the error by safely handling cases where no published products are available, allowing staff to update suggestions without interruption.
Original PR description
Currently, an error occurs when the user tries to update suggested products. **Steps to Reproduce:** - Install the `website_sale` module. - Go to `Settings` and enable `Automate suggested products`…
Currently, an error occurs when the user tries to update suggested products.
**Steps to Reproduce:**
- Install the `website_sale` module.
- Go to `Settings` and enable `Automate suggested products` under the `eCommerce` section.
- Go to `Website` > `eCommerce` > `Products` > `Products`.
- Create a `product` and, in the `eCommerce` tab, add a `category`.
- Make sure the `product` is `not published`.
- On the `product`, click the `gear icon` and select `Update suggested products`.
`ValueError: TypeError('unsupported operand types in: product.template() | None') while evaluating 'records.action_update_suggested_products()'`
When the user updates suggested products, the system updates the product's suggested
products - optional, accessory, and alternative products [1]. While updating the alternative
products [2], the system tries to find products based on the categories and attributes shared
with the current product [3]. When retrieving products from the current product's category,
it gets None [4] because the products linked to that category are unpublished and are
therefore excluded by the domain [5]. Later, using this None value raise the error.
This commit ensures that when accessing a missing key in the category dictionary, then it falls
back to an empty product recordset.
[1]: https://github.com/odoo/odoo/blob/21e3310a3eba2ce915b33cf10ee4c14bdda7aad4/addons/website_sale/models/product_template.py#L346
[2]: https://github.com/odoo/odoo/blob/21e3310a3eba2ce915b33cf10ee4c14bdda7aad4/addons/website_sale/models/product_template.py#L384-L386
[3]: https://github.com/odoo/odoo/blob/21e3310a3eba2ce915b33cf10ee4c14bdda7aad4/addons/website_sale/models/product_template.py#L471-L483
[4]- https://github.com/odoo/odoo/blob/21e3310a3eba2ce915b33cf10ee4c14bdda7aad4/addons/website_sale/models/product_template.py#L482
[5]- https://github.com/odoo/odoo/blob/21e3310a3eba2ce915b33cf10ee4c14bdda7aad4/addons/website_sale/models/product_template.py#L445-L456
sentry-7660509183
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#281487This fix makes an internal website performance test consistent during parallel test runs. It prevents unrelated demo data from changing the test conditions, helping keep automated validation reliable without affecting normal users.
Original PR description
# Before this commit: The image controller performance test expects the admin partner to be unpublished. In parallel test runs, the website_partner demo data publishes the admin partner, causing the…
# Before this commit:
The image controller performance test expects the admin partner to be
unpublished. In parallel test runs, the website_partner demo data
publishes the admin partner, causing the test to follow a different
code path and fail.
However, during parallel test execution, the website_partner module
installs its demo data, which updates the admin partner:
```
<record id="base.partner_admin" model="res.partner">
<field name="is_published">True</field>
</record>
```
As a result, user_admin.website_published becomes True.
# After this commit:
The test explicitly restores the required precondition by setting the
admin partner's is_published value to False before executing the
performance check.
As a result, the image controller always follows the expected
"unpublished" code path, making the test deterministic regardless of
whether website_partner or any other module with demo data has already
been installed during parallel testing.
Runbot-241102
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#278550This fix prevents an error when loading sample work order data after a specific working schedule has been deleted. The system now uses a safe default schedule instead, helping users test or set up Shop Floor without interruption.
Original PR description
Currently, an error occurs when loading the sample data in the Shop Floor. **Steps to Reproduce:** - Install the `mrp_workorder` module. - Go to `Employees` > `Configuration` > `Working Schedules`. -…
Currently, an error occurs when loading the sample data in the Shop Floor. **Steps to Reproduce:** - Install the `mrp_workorder` module. - Go to `Employees` > `Configuration` > `Working Schedules`. - Delete the `Work Center 40 hours/week` record. - Go to `Settings` > `Users & Companies` > `Groups`. - Open the `Manage Work Order Operation` group and add the `Administrator` to the `users` list. - Open the `Shop Floor`. If the `Activate your Work Center` dialog appears, click it and then click `Configure Later`. - Click `Load Samples`. `ValueError: External ID not found in the system: mrp.mrp_workcenter_calendar` After the [recent commit], the sample work center uses the `Work Center 40 hours/week` working schedule instead of `Standard 40 hours/week`. As a result, if the `Work Center 40 hours/week` record is deleted, loading the sample data raises the error [1]. This commit ensures that when the Work Center 40 hours/week calendar is not available, it falls back to `Standard 40 hours/week`, restoring the previous behavior [2]. This fallback is required because `resource_calendar_id` is mandatory from the view perspective, even though it is not required at the model level. If it is left empty, the form displays a missing required field. The `Standard 40 hours/week` calendar is always available because it is linked to the main company [3] and its `resource_calendar_id` field uses `ondelete='restrict'` [4], preventing it from being deleted. [recent commit]: https://github.com/odoo/enterprise/commit/336d721f7b353473fe5e07c29ce14ed77a88fb98 [1]- https://github.com/odoo/enterprise/blob/c0045ec3cf94650d66192a4ca3e0dc3c17daa5bd/mrp_workorder/models/mrp_production.py#L213-L216 [2]- https://github.com/odoo/enterprise/blob/51c1e74e90e510d59aad78820e2c29e821ba2854/mrp_workorder/models/mrp_production.py#L214-L217 [3]: https://github.com/odoo/odoo/blob/4c4219a7d9d51f703b15e83ab755faf1f2c8a71d/addons/resource/data/resource_data.xml#L10-L12 [4]: https://github.com/odoo/odoo/blob/4c4219a7d9d51f703b15e83ab755faf1f2c8a71d/addons/resource/models/res_company.py#L12-L13 sentry-7651161729 Forward-Port-Of: odoo/enterprise#126859
Pasting a copied URL over an existing selected link in the editor no longer causes an error. This helps users edit linked text more reliably without interruptions or lost work.
Original PR description
Steps to reproduce the issue: - Create a link in editor. - Copy another URL. - Select entire link. - Pasting copied link throws traceback. This issue happens after merging commit [1] where…
Steps to reproduce the issue:
- Create a link in editor.
- Copy another URL.
- Select entire link.
- Pasting copied link throws traceback.
This issue happens after merging commit [1] where `normalize_processors` callback returns nothing. After merging commit [2] each processor must return the original root if no processing is needed or processing is in place.
As a result, when this.processThrough("normalize_processors", container) is called from the `insert` method, the next processor in the chain uses `this.editable` as its default argument and removes the FEFF node, which is the anchor node. Later calling closestBlock(selection.anchorNode) returns null, resulting in the traceback. This PR aims to fix the traceback by returning the `root` in processor.
[1]: https://github.com/odoo/odoo/commit/be77a9a2003e09f4621d0ff774bf8749b326d037
[2]: https://github.com/odoo/odoo/commit/17d58d2fdf8da3a69c731fc5ea0d90b95e28efd6
task-6456004
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#283185This update corrects how the translation mode test module applies and removes its internal patches. It helps keep test behavior isolated so other environments or tenants are not affected after the module is uninstalled.
Original PR description
Fix patch for test_translation_mode Patch tools in a compatible way which will work for other tenants. Patch tools in a compatible way which will work after uninstallation. python code translation is not patchable by design. 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#285538
Opening the Field Service section from a helpdesk ticket preview no longer triggers an error after completed interventions are planned. This keeps customers and staff able to view intervention information reliably from the portal preview.
Original PR description
*=helpdesk_planning_field_service{,_sale_timesheet} Steps to reproduce: ------------------------- 1. Install helpdesk_planning_field_service_sale_timesheet with demo data. 2. Open a helpdesk team…
*=helpdesk_planning_field_service{,_sale_timesheet}
Steps to reproduce:
-------------------------
1. Install helpdesk_planning_field_service_sale_timesheet with demo data.
2. Open a helpdesk team (e.g., Customer Care) and enable field service planning.
3. Create a new ticket in Customer Care, plan two interventions, and mark them as completed.
4. Click the cog menu of the helpdesk ticket and click Preview.
5. In preview mode, click **Field Service** in the left sidebar.
Issue:
---------
A traceback occurs:
```python
File "/home/odoo/odoo/community/odoo/addons/base/models/ir_qweb.py", line 875, in _render_iterall
raise QWebError(qweb_error_info) from error
odoo.addons.base.models.ir_qweb.QWebError: Error while rendering the template:
KeyError: 'format_datetime'
Template: planning_field_service.portal_my_field_service_report_list
Reference: 866
Path: /t/t/t[3]/t/tbody/t/tr/td[1]/a/t
Element: <t t-out="format_datetime(intervention.start_datetime, dt_format='MMM d, YYYY')"/>
```
Cause:
---------
https://github.com/odoo/enterprise/blob/28637781cd3ffc4c3dc0c2016dd5d6051793f641/helpdesk_planning_field_service/controllers/portal.py#L59-L63
After this 6857d1a, date formatting was changed to use `format_datetime`, and [planning_field_service](https://github.com/odoo/enterprise/blob/28637781cd3ffc4c3dc0c2016dd5d6051793f641/planning_field_service/controllers/portal.py#L42) was updated accordingly. However, `helpdesk_planning_field_service` was not updated to pass `format_datetime` in the template values, causing a **KeyError** when opening the field service intervention list.
Solution:
-----------
Pass `format_datetime` in the template values, following the same approach used in `planning_field_service`.
opw-6467400
Forward-Port-Of: odoo/enterprise#129227
Forward-Port-Of: odoo/enterprise#128519The website shop search bar placeholder will now appear in the visitor's selected website language instead of always showing "Search" in English. This improves the multilingual shopping experience and avoids confusing non-English customers.
Original PR description
Problem: The search bar placeholder text is not being translated. Steps to reproduce: 1. Install e-Commerce 2. Go to Website > Configuration and add another language for the website 3. Go to Website > Shop 4. See how the search bar placeholder text is "Search" instead of being in the website's language Cause: The text was not extracted for translation because it is set inside `t-value=`. To be available for extraction, it should either be set inside `t-valuef.translate=` or should be the data content between the tags. opw-6486429 Forward-Port-Of: odoo/odoo#285011