Thursday, April 23, 2026
19 changes · saas-19.2
New functionality added to Odoo
This update adds support for a new type of Swedish blackbox device – Skattedosan – alongside the existing CleanCash driver. This expansion allows Odoo to integrate with a wider range of point-of-sale devices used in Sweden, improving data capture for our customers.
Original PR description
The current Swedish blackbox driver is only for the CleanCash models of blackbox, however these are no longer produced as the company that makes them no longer exists. The blackboxes that are readily available today are branded as either Skattedosan or PosPlus, but they both come from the same company and use the same protocol. This commit adds a second Swedish blackbox driver that supports these Skattedosan blackboxes, using the same commands as the existing driver such that the frontend code does not have to change. Enterprise - https://github.com/odoo/enterprise/pull/114579 Protocol spec: https://skattedosan.se/images/CU_blackbox__API.pdf task-5212572 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
Project chatter will no longer automatically post tracking messages when a linked Sales Order changes status. This reduces unnecessary notifications and keeps project activity logs cleaner and easier to follow.
Original PR description
Before this commit: - The chatter on the Project record tracked and logged changes to the linked Sales Order's status. After this commit: - Explicitly set `tracking=False` on the related `sale_order_state` field in `project.project`, `project.task` models. - Status updates to linked SOs will no longer automatically post tracking messages in chatter. task-6079809 Forward-Port-Of: odoo/odoo#258549
Helpdesk tickets will no longer automatically log chatter messages when a linked Sales Order changes status. This reduces unnecessary noise in ticket discussions and makes the conversation history easier to follow.
Original PR description
Before this commit: - The chatter on Helpdesk Tickets tracked and logged changes to the linked Sales Order's status. After this commit: - Explicitly set `tracking=False` on the related `sale_order_state` field in `helpdesk.ticket`. - Status updates to linked SOs will no longer automatically post tracking messages in chatter. task-6079809 Forward-Port-Of: odoo/enterprise#114078
Fixed an issue where text containing percentage signs could be displayed incorrectly as double percent signs on the website. This ensures customer-facing content renders exactly as entered when no template placeholders are used.
Original PR description
`_compile_format` unconditionally escaped `%` to `%%` to protect against Python's `%`-formatting, but only appended the `% (values,)` formatting operation when `#{...}` placeholders were present. With no placeholders, the escape was never undone and `%%` leaked into the rendered output.
This went unnoticed until the introduction of paramteric t-call: https://github.com/odoo/odoo/commit/eb6e88a25050
And since we use `.translate` and `.f` directly in existing views this became apparent
Example:
```xml
<t t-call="website.s_wd_testimonial"
_testimonial_quote.translate="...by 400%."/>
```
will be rendered as `...by 400%%.` on the page.
To prevent this, we can simply check for the absence of values and simply return the repr as is if there isn't any.
Forward-Port-Of: odoo/odoo#260434This update removes the “17” tax tag from several French service tax rates where it was incorrectly applied. It helps ensure tax reporting remains accurate by keeping this tag only on goods-related taxes.
Original PR description
**Issue:** In French localization, a tax tag (i.e. "17") was wrongly added on several taxes for service by a fix: https://github.com/odoo/odoo/commit/f9237cfbb6a9ffbd0a392e4e77e097d5963a5fc3 This tax tag should only be applied on taxes for goods, not service. **Solution:** Remove the tax tag from the following taxes: - 20% EU S - 8.5% EU S - 10% EU S - 5.5% EU S - 2.1% EU S opw-5871998 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260617
This update fixes an intermittent issue in the website menu automation test. It ensures the page is fully ready before entering edit mode, which makes the test more stable and reduces false failures.
Original PR description
This commit fixes a non-deterministic problem of the tour by ensuring the iframe is ready before opening an edit mode. runbot-240987 Forward-Port-Of: odoo/odoo#260309
This change prevents emails from being sent when payroll payslips are only being tested or previewed. It helps avoid confusing employees and reduces the risk of sending unintended messages before a payslip is officially issued.
Original PR description
In this commit, we prevented email sending during test print payslips. task-6147651
This change lets Odoo start even when no addons folder exists yet in a new, empty project repository. It removes an unnecessary validation error so teams can set up and begin creating modules without being blocked at launch.
Original PR description
Initialize a new empty git repository where you are going to vide-code some new Odoo modules. Because the repository is empty (no addon yet) the CLI fails with an "option --addons-path: the path <path> is not a valid addons directory". This makes vide-coder sad, and bigrams want vide-coders to be happy, so drop the sanity-check and also accept empty addons. Forward-Port-Of: odoo/odoo#259007 Forward-Port-Of: odoo/odoo#256913
This update brings back the vertical spacing in the dropdown list used for menu selections. It improves readability and usability by making the options easier to scan without affecting the behavior of grouped items.
Original PR description
Recent structural changes added `p-0` to the menu class, removing the vertical padding from the dropdown. Rather than padding the scroll container directly (which would conflict with sticky group headers), apply `margin-top/bottom` on the first/last children of `.o_select_menu-choices` so the spacing scrolls naturally without creating a gap items could bleed through when a group header is stuck. task-6095912 Forward-Port-Of: odoo/odoo#258929
This update fixes an issue where the ‘Scan the QR code to pay’ message on kiosk online payment pages was consistently displayed in English, regardless of the selected language in the Odoo system. Now, the QR code instructions will automatically translate to the user’s preferred language, improving the customer experience for international kiosk payments. This ensures consistent and accurate instructions for all users.
Original PR description
Currently if you use an online payment with the kiosk, the payment page with the QR code is not translated. Steps to reproduce: ------------------- * Create an online payment method with demo * Install any language, you don't need to switch * Open kiosk configurations * Set the online pm in the available payment methods * Set the language istalled as the default language * Make an order, go to payment page > "Scan the QR code to pay" is written in english no matter the language opw-6074194 Forward-Port-Of: odoo/odoo#259895
This update streamlines the payment status refresh button in the Odoo Enterprise system. Previously, the button was always visible, leading to unnecessary data requests. Now, it only appears for payments that are actively being processed (pending or unsigned), optimizing performance and reducing system load.
Original PR description
… batches The refresh button was always shown, which could cause unnecessary calls to OdooFin if the payment is finalised (accepted, rejected or canceled). With this change, the button is shown only for payments in progress (pending or unsigned). task-6103900 Forward-Port-Of: odoo/enterprise#113182
This update resolves an issue where close buttons on views without names triggered unexpected behavior in the application. Now, the system accurately identifies when a close button is used, ensuring proper tracking and functionality. This improves the reliability of the application's response to user actions.
Original PR description
View buttons with no name cause onClosed to be called without any parameters even if special=true or dismiss=true. This commit fixes that which allows to know if a close/discard button caused the action onClosed callback. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260482 Forward-Port-Of: odoo/odoo#260301
This update resolves compatibility issues with Python 3.14 and the Ubuntu Resolute operating system. It includes necessary code changes to ensure Odoo functions correctly, primarily focusing on internal Python optimizations and a fix for a base64 encoding error.
Original PR description
Forward-Port-Of: odoo/odoo#258568
This change simplifies the setup of the Mollie payment method in POS. Previously, a validation error prevented users from saving their configuration, forcing them to repeat steps. Now, users can complete the initial setup once, though an error will still appear if the API key is missing.
Original PR description
Before this commit, when configuring the Mollie payment method in POS, a validation error would be raised if the associated payment provider did not have the API key set. While this makes sense given that it needs to be set in order for payments to work, it resulted in this unintuitive UX: 1. User fills in all the fields in the Mollie POS payment method form. 2. The user tries to save, but hits the validation error. 3. The user uses the internal link to go to the payment provider and fill in the API key. 4. The user returns to the POS payment method form, but because the form couldn't save they have to fill in everything *again*. This commit removes the validation error, allowing everything to be filled in just once. There will still be an error if trying to make a payment without an API key set. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260293
This update fixes a crash that occurred when assigning recruiters in the Odoo recruitment Kanban view. The issue stemmed from an unnecessary parameter in the avatar image URLs, which caused a data access error. Removing this parameter resolves the crash and ensures stable functionality for recruiters.
Original PR description
**Steps to Reproduce:** 1. Open Recruitments 2. Find a job position without a recruiter in the kanban view 3. Clicking on the assign recruiter widget produces a traceback **Bug Cause:** The…
**Steps to Reproduce:** 1. Open Recruitments 2. Find a job position without a recruiter in the kanban view 3. Clicking on the assign recruiter widget produces a traceback **Bug Cause:** The `?unique=` cache related parameter was added to the avatar image URL in the `autoCompleteItem` slot of `KanbanMany2OneAvatarEmployeeField`. This parameter relies on `write_date` being available on the autocomplete suggestion record. However, `web_name_search` only returns `id` and `display_name`, so `write_date` is undefined on autocomplete suggestion records, causing a crash when accessing `autoCompleteItemScope.record.data.write_date.ts`. **Bug Solution:** Remove the `?unique=` parameter from the avatar image URL in the `autoCompleteItem` slot, reverting it to its original form. Cache is unnecessary for autocomplete suggestion avatars as they are only visible for the duration of the dropdown interaction. **Task:** 6092768 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a minor visual issue where buttons within the call layout (like Fullscreen) didn't have reduced opacity when not hovered. The fix adjusts the opacity to 75% for non-hover states, ensuring consistent visual feedback and a slightly refined user experience. This improves the clarity of options within the call view.
Original PR description
Recent commit fixes an issue where items like Fullscreen in call menu had reduced opacity when this should only affect layout buttons in call view [1]. To do so it limits the opacity to the layout…
Recent commit fixes an issue where items like Fullscreen in call menu had reduced opacity when this should only affect layout buttons in call view [1]. To do so it limits the opacity to the layout actions, but the style was not applied because ActionList has more CSS specificity that requires using `--o-mail-ActionList-Button-opacity` variable for the non-hover opacity value. Since this was not defined, this default to opacity 100%, thus not applying the reduced opacity when not mouse-hovering. This commit fixes the issue with `--o-mail-ActionList-Button-opacity` of `.75`, so that opacity is slightly reduced when no mouse-hovering. [1]: https://github.com/odoo/odoo/pull/259866 Before / After (mouse-hover on "Picture-in-Picture", see lack of visual distinction) <img width="58" height="32" alt="Screenshot 2026-04-22 at 11 21 47" src="https://github.com/user-attachments/assets/e04b0f8c-c754-4ea4-8870-752610418587" /> <img width="57" height="28" alt="Screenshot 2026-04-22 at 11 21 25" src="https://github.com/user-attachments/assets/a5aa9987-ddaf-45f8-9e2a-260fd04dcfb9" /> Forward-Port-Of: odoo/odoo#260599
This update resolves a visual bug affecting the display of offline status icons on Discuss avatars in Safari. The fix addresses a Safari-specific CSS issue that caused misaligned positioning, ensuring the offline status is correctly shown. This improves the user experience for all users.
Original PR description
IM status on avatars in Discuss have been improved to properly mask the image [1]. To do so, this uses SVG and ForeignObject on top of mask, so that it can uses font-awesome icons such as `fa…
IM status on avatars in Discuss have been improved to properly mask the image [1]. To do so, this uses SVG and ForeignObject on top of mask, so that it can uses font-awesome icons such as `fa fa-circle` for online status. This change introduced an accidental regression in Safari, where position of the offline status is wrong. This comes from a bug in Safari where some CSS inside foreignObject resets the position of the element to position 0, 0 on the global SVG [2] [3]. This affects offline status because this IM status has an `opacity-75`, intended to reduce distraction from the offline, but since this changes opacity this introduce the bug in Safari of mis-position. This commit fixes the issue by moving the applied CSS to change opacity from `opacity-X` rules inside foreignObject to the parent `g` tag above `foreignObject`. That way, the element inside `foreignObject` has no change of opacity but instead the `g` has it, which is ok for Safari. Note that this implementation assumes that change of opacity inside `foreignObject` is made only once and with `opacity-X` classnames. [1]: https://github.com/odoo/odoo/pull/246182 [2]: https://github.com/bkrem/react-d3-tree/issues/284 [3]: https://bugs.webkit.org/show_bug.cgi?id=23113 Task-6143646 Before / After <img width="308" height="579" alt="Screenshot 2026-04-21 at 12 51 52" src="https://github.com/user-attachments/assets/41596916-f371-407e-acb1-eb097c497360" /> <img width="310" height="584" alt="Screenshot 2026-04-21 at 12 51 20" src="https://github.com/user-attachments/assets/513df1f5-4cde-4cb7-8769-d6264dfb36a0" />
This update resolves an issue where the salary amount wasn't correctly displayed on the Employee Offer form when opened from the employee record. The fix involves adding the necessary context to ensure the correct salary information is populated, improving the user experience for setting up employee offers.
Original PR description
task-5979287
This update fixes an issue where adding a new vehicle (car or bike) would incorrectly make all vehicles available. The change ensures that only vehicles of the same type are made available, maintaining consistent and accurate vehicle tracking. This prevents confusion and ensures data integrity.
Original PR description
When you are getting a new car or a new bike, it'll make available all the your vehicle whatever is the type of vechicle. To keep consistent behaviour, we are only make available vahicle of same type Bug introduced in refactoring: https://github.com/odoo/odoo/pull/220160 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr