Thursday, August 27, 2026
17 changes · saas-19.2
Enhancements to existing features
The Live Chat settings now explain that automatic chat popups only open on larger screens. This helps teams avoid confusion when testing on mobile devices, where visitors must tap the chat button manually.
Original PR description
The 'Open automatically' action only triggers the auto popup on larger screens (`ui.isSmall` is checked in `AutopopupService. allowAutoPopup`). On mobile/small viewports, only the chat button is shown and the visitor must tap it manually. The existing help text does not mention this, which could lead to confusion when the auto popup does not trigger during testing on mobile. Update the field's help text to explicitly state that automatic opening is limited to larger screens. opw-6459279 Forward-Port-Of: odoo/odoo#284785
This update improves internal mail-related testing so unusual test data no longer causes the test suite to crash during parallel runs. It helps maintain smoother quality checks and reduces interruptions for developers, with no direct change to end-user features.
Original PR description
If the value needs to be serialized for IPC (cough cough pytest-xdist) and a weirdo sets recordsets as message values, the serialization fails and the test suite crashes. Since this is just subtest identification it shouldn't be too much of an issue. Forward-Port-Of: odoo/odoo#284279 Forward-Port-Of: odoo/odoo#284178
Belgian localization tax records have been updated so 0% taxes now include the non-deductible fiscal position where it was missing. This improves consistency in Belgian accounting setup and helps ensure tax treatment is correctly applied in relevant business scenarios.
Original PR description
Adding non-deductible fiscal position to taxes that were missing it in the data. task-6389423 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#284504 Forward-Port-Of: odoo/odoo#278020
Recruitment job listings now limit available working schedules based on the company linked to the job. This helps teams keep job postings consistent and prevents selecting schedules that are not valid for that company.
Original PR description
In order to maintain proper job listings and make sure all working schedules are valid, working schedule domain is now depeding on the job listing company. Task: 6408914 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#283939 Forward-Port-Of: odoo/odoo#282993
Recruitment job listings now limit available working schedules based on the company tied to the job. This helps keep job postings consistent and prevents selecting schedules that do not apply to the relevant company.
Original PR description
In order to maintain proper job listings and make sure all working schedules are valid, working schedule domain is now depeding on the job listing company. Task: 6408914 Forward-Port-Of: odoo/enterprise#128824 Forward-Port-Of: odoo/enterprise#128241
Resolved issues and error corrections
Users editing product translations no longer lose unsaved text when they drag the translation pop-up. This prevents accidental rework and makes translation updates more reliable before saving.
Original PR description
Step to reproduce: - have atleast two language and install sale - open any product, hover over product, and click on Translation button - Enter a value for one of language - drag the dialog Observation: - we lose the data, we just entered and fallback to original data Cause: - Inputs used `t-att-value="term.value"`, bound to original data. Since this content is passed to Dialog via slot, it is rendered/patched as part of Dialog's render cycle, - Dragging updates Dialog's state, triggering a patch that re-evaluated the slotted template and reset input values (which comes from `term.value`) Fix: - bind value to `updatedTerms[term.id] ?? term.value` so edits survive patches triggered by the parent Dialog opw-6431521 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#283514
Documentation and clarification updates
ERPVibe Limited has signed Odoo's Corporate Contributor License Agreement. This formalizes the legal terms for ERPVibe's contributions to Odoo, supporting compliant collaboration without changing product behavior.
Original PR description
ERPVibe Limited signs the Odoo Corporate Contributor License Agreement v1.0. Forward-Port-Of: odoo/odoo#283477
Copying an image that is already attached to another record now reuses the existing file instead of leaving an unnecessary duplicate. This helps keep stored files cleaner and avoids redundant attachments without changing the user workflow.
Original PR description
Copying an image attachment already linked to another record could leave a redundant duplicate behind instead of reusing the existing one. opw-6463012 Forward-Port-Of: odoo/odoo#283221 Forward-Port-Of: odoo/odoo#282287
Payment XML files now use uppercase encoding declarations to better match strict bank validation requirements. This helps avoid warnings or rejections from providers such as SIX in Switzerland, without changing the payment workflow.
Original PR description
The W3C recommendations for XML state that the encoding defined for an XML document should not be case-sensitive. However, some banking providers (SIX for Switzerland) are stricter and may throw warnings or errors if upper-case is not used. https://www.w3.org/TR/2008/REC-xml-20081126/#NT-EncodingDecl opw-4948708 Forward-Port-Of: odoo/enterprise#128301 Forward-Port-Of: odoo/enterprise#125807
The Turkish reports journal form now places the sales return account field in the correct position. This prevents labels and values from appearing under the wrong captions, making accounting setup clearer for users.
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#128083
Users auditing accounting report figures can now switch between available views such as list, pivot, graph, and kanban. This makes it easier to analyze the journal items behind report numbers in the format best suited to the task.
Original PR description
Problem: When auditing reports, the audit cell action was only showing the journal items in the list view, and not enabling other view modes (pivot, graph, kanban). Steps to reproduce: 1. Go to Accounting > Reporting > Balance Sheet 2. Click on any cell with a number in the report 3. Notice how the journal items are only shown in the list view, and you cannot switch to other view modes. Cause: The action was hardcoded to only show the list view. opw-6403704 Forward-Port-Of: odoo/enterprise#129214 Forward-Port-Of: odoo/enterprise#128563
French companies can now update an employee's working schedule even when the employee has approved time off on a non-working day, such as a Saturday. The fix prevents those days-off leave records from being converted into an invalid date range, avoiding save errors while preserving existing valid leave behavior.
Original PR description
**Problem:** For a French company, an employee whose working schedule differs from the company's cannot have their Working Hours changed when they have a validated time off that falls on a…
**Problem:** For a French company, an employee whose working schedule differs from the company's cannot have their Working Hours changed when they have a validated time off that falls on a non-working day (e.g. a Saturday). Saving fails with "The operation cannot be completed: The start date must be before or equal to the end date." **Steps to reproduce:** 1. Install l10n_fr_hr_holidays and work in a French company. 2. Set the company Working Hours and a reference (Paid) Time Off type. 3. Give an employee a Monday-to-Friday schedule that differs from the company's. 4. Create a one day Paid Time Off for the employee on a Saturday. 5. Change the employee's Working Hours. **Current behavior:** Saving is rejected by the date_from <= date_to constraint; the Working Hours cannot be changed as long as the weekend time off exists. **Expected behavior:** The Working Hours can be changed and the time off keeps a valid date range. **Cause of the issue:** When the French computation applies, `_get_fr_date_from_to` moves `date_start` forward to the first working day and, in a separate loop, moves `date_target` forward while the next day is a non-working day. The two loops are asymmetric: for a leave lying entirely on non-working days (a single Saturday for a Monday-to-Friday employee) `date_start` is pushed to the following Monday while `date_target` only reaches the Sunday. The pair is then written to `date_from`/`date_to` as Monday > Sunday, violating the date_from <= date_to constraint. **Fix:** A leave that contains no working day has nothing to anchor the "lost days" extension on, so the adjustment must not apply. Detecting the crossed pointers and keeping the leave's original dates preserves a valid range while leaving every leave that contains at least one working day untouched. opw-6348425 Forward-Port-Of: odoo/odoo#278833
Shop Floor cards now handle long unit names, quantities, and manufacturing notes without spilling outside the card. This keeps production information readable and prevents confusing layouts for shop floor users.
Original PR description
Steps to reproduce --- 1. Enable Units of Measure (`uom.group_uom`) and give a unit a very long name. 2. Build a product using that unit for its components, and set a long note (plain text or an HTML…
Steps to reproduce --- 1. Enable Units of Measure (`uom.group_uom`) and give a unit a very long name. 2. Build a product using that unit for its components, and set a long note (plain text or an HTML table) on its manufacturing order. 3. Open that operation in Shop Floor. Observed: the finished-product name breaks one letter per line, the long unit next to the quantity and the note both run off the right edge of the card. Expected: name, unit and note stay within the card, wrapping or scrolling. Issue --- Each of these rows is a flexbox whose children keep the default `min-width: auto`, so they never shrink below their content's intrinsic width. A long UoM name therefore forces its flex sibling (the product name) down to min-content and wraps it one character per line, while long quantities and notes push past the fixed-width card instead of wrapping. Adding `min-w-0` lets the flex items shrink, replacing `text-nowrap` with `text-wrap` on the quantity lets the value wrap, and wrapping `logNote` in a `min-w-0 overflow-auto` span contains an HTML-table note within the card. opw-6496759
This fixes an issue where submitting expenses for multiple companies could send duplicate emails. The change helps ensure expense-related notifications are sent only as intended, reducing confusion for employees and approvers.
Original PR description
Fix a small issue resulting in mail duplication when submitting expenses from multiple companies that appeared in the infamous 704a5a19 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#283013
This update adjusts point-of-sale self-order behavior so an unnecessary IoT connection error popup is not shown during kiosk printer testing. It helps keep automated checks aligned with the intended customer flow and reduces false test failures.
Original PR description
This PR fixes the test where iot request triggers a "failed to contact your iot box on local network popup" Forward-Port-Of: odoo/enterprise#128546 Forward-Port-Of: odoo/enterprise#128388
A costly styling rule in the messaging interface was simplified because it added little visible value. This should help keep the interface responsive without changing the user experience.
Original PR description
This PR cleans up a complex selector that is quite costly without providing any striking visual value. task-6481656 Forward-Port-Of: odoo/enterprise#128906
The Japanese localization now uses accurate labels for domestic and overseas fiscal positions. This prevents misleading wording for users configuring accounting rules in Japan and fixes a small English spelling issue.
Original PR description
Japanese translation "海外取引先" for domestic was clearly wrong.
Also fixed the misspelling ("Oversea" -> "Overseas") and removed the unnecessary "Customer" context from the name.
@qrtl
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#284608