Friday, August 28, 2026
23 changes · master
Resolved issues and error corrections
This fixes a spacing issue where date picker popups could lose their normal padding because of a calendar side panel adjustment. The padding change is now limited to the calendar side panel, keeping popups visually consistent elsewhere.
Original PR description
- requires https://github.com/odoo/odoo/pull/284964 The template override forced `pb-2` on every picker so it would sit flush in the calendar side panel, stripping the padding from popovers too. Set `--DateTimePicker-padding` on the panel instead. task-6512183
This fix restores the expected horizontal spacing around date pickers shown in popovers, making them easier to read and use. Calendar side panels can still keep their tighter layout without affecting date pickers elsewhere.
Original PR description
- requires https://github.com/odoo/enterprise/pull/129503 | //////// | Calendar C.E (identical) | Calendar E.E (preserve top alignment) | Datepicker (restore padding) | Frontend datepicker |…
- requires https://github.com/odoo/enterprise/pull/129503 | //////// | Calendar C.E (identical) | Calendar E.E (preserve top alignment) | Datepicker (restore padding) | Frontend datepicker | |--------|--------|--------|--------|--------| | Master | <img width="466" height="497" alt="image" src="https://github.com/user-attachments/assets/148943b7-c89d-4aec-8b9a-fdf8e58016e2" /> | <img width="487" height="536" alt="image" src="https://github.com/user-attachments/assets/5d09bcd4-a3d4-475b-b97f-02a2254398da" /> | <img width="453" height="418" alt="image" src="https://github.com/user-attachments/assets/fa815751-50de-4257-8b25-81801042c4ce" /> | <img width="616" height="451" alt="image" src="https://github.com/user-attachments/assets/9c4a646c-d1be-4431-afd6-552ab3e84e62" /> | | This PR | <img width="455" height="488" alt="image" src="https://github.com/user-attachments/assets/2957ae2e-32c2-40b1-906a-bf643f1c6028" /> | <img width="488" height="498" alt="image" src="https://github.com/user-attachments/assets/09f66532-45e0-4a73-9133-94ba9561f3d9" /> | <img width="574" height="407" alt="image" src="https://github.com/user-attachments/assets/1bd5cb86-0adc-46ed-8f52-421e103261f1" /> | <img width="602" height="437" alt="image" src="https://github.com/user-attachments/assets/2c06d43c-81db-4b78-bc77-20e3d39cc2f6" />| The calendar refresh narrowed the picker's padding globally (`p-2` -> `py-2`) so it would sit flush in the calendar side panel. A later commit moved that side panel restyling to Enterprise but left the narrowed padding behind, leaving every popover picker without its horizontal spacing. Expose the padding as `--DateTimePicker-padding`, defaulting to the original spacing, and let the side panel opt out. A variable rather than a utility class also removes the `!important` the bottom sheet needed to beat `p-2`. task-6512183 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a small internal cleanup issue in the bus messaging system by removing empty database tracking entries when they are no longer needed. It does not change user-facing behavior, but keeps background bookkeeping tidier and avoids stale internal records.
Original PR description
`_drop_topic_if_empty` discards a topic from its dbname's set but never removes the dbname key once the set becomes empty, leaving a stale empty set if no notify is ever received for this DB. No impact on the dispatch code, just a bookkeeping cleaning.
This fix updates an internal social CRM test so it no longer depends on a generic customer name that can appear in other sample data. It helps keep automated checks stable and reduces false failures during development and release validation.
Original PR description
The social CRM conversion test creates a partner named "John Doe" and expects the post-to-lead wizard to automatically match it. This relies on "John Doe" being unique in the database. Since `pos_restaurant.customer_1` is also named "John Doe", the wizard's `name_search()` can return multiple partners depending on the modules already installed when the test is run. In that case, the wizard correctly considers the match ambiguous and leaves `partner_id` empty, causing the test to fail. This commit uses a test-specific author name instead, ensuring that the test actually provides the single matching partner described by its docstring and does not depend on unrelated demo data or module installation order. [error-243065](https://runbot.odoo.com/odoo/error/243065) Forward-Port-Of: odoo/enterprise#128119
Customers can no longer set optional products on sales orders to negative quantities through the portal. This keeps customer-facing order changes consistent and prevents invalid quantities that should only be handled by sales staff when needed.
Original PR description
Since the fusion of `sale.order.option` model into `sale.order.line` model, the optional products (editable from portal) lines are not deleted when reaching a quantity of 0 or below. This could allow some customers to set negative quantities, which makes no sense as it's only something that should be set by the salesman if necessary. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#284493
Planning notification emails now show action buttons with a visible colored background, so employees can clearly read and click options like viewing their planning. This prevents confusion when shifts or schedules are published and helps employees respond from email more reliably.
Original PR description
Before this change: When publishing a shift or schedule, the buttons "Assign me this shift", "I am unavailable", and "View your planning" inside the notification email sent to the employee appears invisible. The button text is rendered in white on a white background, making the link unreadable and difficult to click. To reproduce: 1. Open the Planning app and create a shift with today's date in the time range. 2. Click "Publish". 3. Go to Settings > Technical > Email > Emails. 4. Open the email that was just sent. 5. Inspect the email body and observe that the "View your planning" button text is not visible. After this change: A default purple background is applied to the button, ensuring the white text is properly visible and legible across email clients. opw-6483147 Forward-Port-Of: odoo/enterprise#128662
This change makes automated checks for the HTML editor behave consistently across different Odoo editions. It reduces false test failures, helping development and release validation proceed more reliably without changing end-user features.
Original PR description
This PR aims to fix the failing contrast tests in the community version. The failures occur because `this.defaultBg` in contrast_plugin.js has different values in community and enterprise versions, resulting in different color contrast values. This PR fixes the tests by patching `--o-control-panel-background-color` css variable with a hardcoded value. runbot: 946513 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Scrolling or zooming within the image cropper now keeps the user’s selected crop area instead of resetting it. This prevents accidental loss of cropping adjustments and makes image editing more predictable in the HTML editor.
Original PR description
Problem: When scrolling on an image inside the image cropper (which triggers a zoom event), the selected cropping area is reset back to default instead of preserving the existing crop selection. Cause: The `t-on-zoom` event listener called `onCropZoom()`, which executed `resetCropBox()`. This called `cropper.clear()` and `cropper.crop()`, clearing and resetting the crop box whenever a zoom/scroll event occurred. Solution: Remove `onCropZoom` and `resetCropBox` so zooming or scrolling on the image does not reset the active crop box selection. Steps to reproduce: - Insert a large image in the editor. - Crop it. - Reopen the image cropper on the image. - Scroll on the image. - Observe that the selected cropping area is reset instead of preserved. task-6488910 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Invalid VAT warnings now preserve and display the exact VAT number entered by the user, such as Swiss values like CHE-115.391.649. This avoids confusing truncated messages and helps users identify and correct the original input more easily.
Original PR description
Before this change: When entering or importing a VAT number (e.g., CHE-115.391.649), an invalid VAT warning displays a string missing its country_id (e.g., E-115.391.649). This confuses users and masks the actual input string that triggered the validation failure. To reproduce: 1. Open any contact record and set the Country to Switzerland. 2. Enter an invalid or manually formatted Swiss VAT number like `CHE-115.391.649`. 3. Save or trigger the VAT validation check. 4. Observe the warning banner showing `E-115.391.649` instead of `CHE-115.391.649`. After this change: The validation warning logic preserves the original user input when constructing the alert message, ensuring error notifications accurately display VAT number. Issue introduced by: * https://github.com/odoo/odoo/commit/ac95d2d6d80a368dfb190d0ac21da2af479a8488 * https://github.com/odoo/odoo/commit/a2afe3292e1cd0a4f339dc47707e469653d13ea0 opw-6474217 Forward-Port-Of: odoo/odoo#284305
This fix prevents duplicate emails from being sent when expenses are submitted across multiple companies. It helps keep expense notifications accurate and avoids confusing employees or approvers with repeated messages.
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#284861 Forward-Port-Of: odoo/odoo#283013
Belgian payroll now correctly validates temporary economic unemployment leave that lasts one day. This prevents affected HR users from being blocked when recording short unemployment periods around public holiday handling.
Original PR description
Steps: - Create a 'temporary economic employment for employee' timeoff type for an employee for 1 day only - Attempt validating the leave type Cause: Due to the splitting of economic unemployment period by public holidays, economic unemployment durations for 1 day durations are not returned from the splitting method correctly Solution: Returned economic unemployments with durations <= 1 correctly Task: 6511201
This fixes an internal HR Appraisal test that could fail when it ran across midnight. The change helps keep automated checks stable so future updates can be validated reliably without false failures.
Original PR description
### Explanation When `test_hr_appraisal` is run at, for example, 23:59:59, the line `self.hr_employee2.next_appraisal_date = date.today()` is executed after midnight, on the following day. As a result, a validation error is raised: `odoo.exceptions.ValidationError: You cannot set 'Next Appraisal Date' in the past.` Forward-Port-Of: odoo/enterprise#127699
This fix ensures Sendcloud shipping labels are returned in the format requested, such as ZPL or PDF. It prevents partner information sent with the request from accidentally replacing the label format setting, avoiding incorrect PDF-only label downloads.
Original PR description
We send the label type we want to get (zpl, pdf, ...) in the request headers. However, since odoo/enterprise#115999, we also send the partner ID in the headers. This was overriding the headers passed to the method, making Sendcloud always return a PDF label. Forward-Port-Of: odoo/enterprise#129542
Delivery charge lines are no longer shown in the Invoiced not Delivered report because they are not physical items that need delivery. This prevents accounting teams from seeing misleading outstanding delivery entries and improves the accuracy of revenue review reports.
Original PR description
Issue: --- Delivery lines are included in `invoiced not delivered` report, which is wrong as delivery lines are not deliverable. Steps: 1- Create a SO with a good product and add a delivery line. Set the product line as delivered and create an invoice. 2- Open accounting, and from review tab, open `Invoiced not Delivered`. As you see, delivery lines are included in the report. Fix: --- On stable we could fix it inside `_get_accrual_domain` by checking if `delivery` is installed. On master we need to implement a solution to be able to differentiate the lines that won't be delivered. opw-6360894 Forward-Port-Of: odoo/enterprise#123517
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 media cleaner and avoids redundant attachment clutter for users editing website or HTML content.
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#284610 Forward-Port-Of: odoo/odoo#282287
This update fixes incorrect and unclear naming for Japanese fiscal positions. It corrects a wrong Japanese translation for domestic partners, fixes an English spelling issue, and removes unnecessary wording so users see clearer accounting labels.
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#284608The PDP registration wizard no longer shows a redundant “Production” mention when the system is already in production mode. This avoids confusing users during registration and makes the displayed information clearer.
Original PR description
It makes no sense to mention (Production) on pdp registration wizard when you are in prod mode Forward-Port-Of: odoo/odoo#280501 Forward-Port-Of: odoo/odoo#280360
This fix prevents the barcode manufacturing scrap process from losing the quantity entered during automated checks. It helps ensure scrap operations are validated with the intended positive quantity instead of being incorrectly rejected as zero.
Original PR description
Selecting the product in the scrap form triggers a `stock.move` onchange. The quantity step only waited for the input to exist, not for that onchange to be applied, so the value could be written while it was still in flight and be reset to 0 by its response. It was also assigned directly on the input, without any event, so the field was never flagged as dirty. The scrap was then recorded with a quantity of 0 and `action_scrap` rejected it with "You can only enter positive quantities.". Wait for the quantity input to hold its post-onchange value before typing, and dispatch an input event, like the other scrap tours already do. error-238911 Forward-Port-Of: odoo/enterprise#129410 Forward-Port-Of: odoo/enterprise#128931
Appointment invitation emails now generate public calendar links without permission errors. This ensures invitees receive usable links and reduces failed email rendering during appointment scheduling.
Original PR description
Since calendar attendee access tokens are restricted to system users, appointment mail templates must sudo token reads when generating public calendar links. This follows the same pattern as the calendar mail templates and avoids an AccessError when rendering attendee invitation emails. ref: https://github.com/odoo/enterprise/commit/88a3cca752a5f726cd0260b485fc93f65a268cf8 Task-4711415 Forward-Port-Of: odoo/enterprise#129511
The Studio search view has been updated to match the newer interface used elsewhere. This provides a more consistent experience for users configuring and customizing views in Odoo Studio.
Original PR description
Before this commit, the search view in studio was still the old one After this commit, the search view in studio is like the new one
This fixes an issue where turning a block of content into a list could create an invalid structure and make the list behave incorrectly. Users editing website content can now convert block elements into lists more reliably.
Original PR description
Before this commit, create a list from a div put the div inside of the list element and then doesn't work the proper way After this commit, when creating a list from a div (block element) the a inline element is put inside the list instead. 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
Opening an action that cannot be edited in Studio from the command palette no longer causes a crash. Instead, users see a clear error notification, reducing disruption and making the limitation easier to understand.
Original PR description
Before this commit: 1. Open studio on Home Page 2. Open an action that cannot be editable with studio through command palette 3. Traceback occurs After this commit, the NotEditableActionError is catch and show an error notification.
The Sign app's guided tour was updated so its drag-and-drop step works correctly with the newer tour system. This helps keep automated checks reliable and reduces the risk of unnoticed issues in the signing experience.
Original PR description
Fix the drag_and_drop run of sign_tour to fit in the new tour system.