Thursday, October 2, 2025
35 changes · 19.0
Enhancements to existing features
Approved leave linked to a work leave type will no longer automatically generate timesheet entries. This helps keep timesheet records accurate by avoiding entries for leave types that should not count as logged work time.
Original PR description
When a leave using a work leave type is approved, now it should not create a timesheet. task-5097482 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229632 Forward-Port-Of: odoo/odoo#229300
Spanish localization now applies the automatic non-EU fiscal position to standard sales of both goods and services, instead of treating services as a special bundled case. This helps businesses produce more accurate tax treatment and electronic reporting for common cross-border sales scenarios.
Original PR description
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
Resolved issues and error corrections
The salary calculator no longer crashes when a working schedule is removed. If no schedule is selected, it uses the company schedule by default so users can continue configuring benefits and sharing offers without interruption.
Original PR description
#### Steps to Reproduce In Payroll → Employees → Salary Calculator: 1. Select an employee with a working schedule. 2. The working schedule is auto-filled in the modal. 3. Remove the working schedule. #### Issue A traceback occurs because the flow tries to recompute work entries with an empty calendar in the Salary Calculator. The purpose of this PR is to make the Working Schedule field optional, with the company's schedule as default when it's empty. #### Fix - Always attach `salary_simulation=True` in the base `_get_version()` and propagate the context when creating a new version for the simulation employee, to avoid unnecessary work entry recomputations. - The Working Schedule field is no longer required: it now has a placeholder and defaults to the company’s calendar when left empty. - The "Configure Benefits" and "Copy Link" buttons are now always enabled since there's always a working schedule (company's schedule is required). task-5063150
This fix corrects how withholding tax adjustments are calculated in Belgian payroll. It helps ensure employee payslips and related payroll accounting use the right tax amounts, reducing the risk of incorrect payments or reporting.
Original PR description
This commit fixes the withholding tax adjustment computation. task-5112828
Payroll users can now generate payslips from a pay run with multiple employees without encountering an error. The fix updates payroll processing to use the current work entry date field, helping teams complete payroll runs smoothly.
Original PR description
Steps to reproduce: - In the Payroll app, go to Pay Runs - Select a pay run with several employees in it - Click on "Generate Payslips" - Get a traceback Reason: The function responsible to generate payslips did not get updated when the fields "date_start" and "date_stop" where replaced by "date" in work entries, causing the error. How it was fixed: Changed "date_start" and "date_end" in the condition to "date" Task ID: 5084666
The Point of Sale order search now shows paid orders only from the current register setup or its trusted related registers. This prevents staff from seeing unrelated paid orders from other PoS configurations, reducing confusion and keeping order lookup results relevant.
Original PR description
Before this commit, when searching paid orders in the PoS UI, orders from other configs could appear even if they were not part of the trusted configs or the same PoS config. This commit ensures that only orders related to the current PoS configuration (or its trusted configs) are loaded and displayed. opw-5083747 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228691 Forward-Port-Of: odoo/odoo#227709
Batch updates to message followers now handle removals correctly. This prevents some records from keeping or losing followers incorrectly when multiple records are updated at once, improving consistency in Mail notifications and subscriptions.
Original PR description
When updating `message_partner_ids` on a batch of records, the previous implementation of the inverse method could lead to incorrect results if the new value implied unsubscription. The `message_unsubscribe()` method, called inside the loop over the records, unlinks `mail.followers`. This `unlink` operation invalidates all the fields cache. As a result, when processing the next record in the batch, its cached fields (the new value of `message_follower_ids`) were erased, causing the logic to fail. This commit fixes the issue by postponing all unsubscription operations. opw-5050023 Forward-Port-Of: odoo/odoo#227499
Belgian payroll Dimona declarations now better track declaration status and support updated government API requirements. This reduces manual follow-up and helps payroll teams submit more accurate employee start and end declarations.
Scanning a package now correctly converts quantities when the package and delivery line use different units of measure. This prevents warehouse staff from seeing partial or incorrect delivered quantities, such as 10 g instead of 10000 g, when the stock is packaged in kilograms.
Original PR description
Manual forward port of https://github.com/odoo/enterprise/pull/90878 **Problem:** When scanning a package with a different UoM than the barcode line, the conversion is not made. **Steps to…
Manual forward port of https://github.com/odoo/enterprise/pull/90878 **Problem:** When scanning a package with a different UoM than the barcode line, the conversion is not made. **Steps to reproduce:** - Enable the "Packages" setting; - Create a new storable product and set kg as its UoM; - In the inventory tab, add "g" in the packagings - Click on the on hand smart button and select update quantity - Add a new line; - In the package column create a new package; - Set a quantity of 10 kg; - Create a delivery and select your product; - Set a demand on 10000 and select g as the UoM; - Mark as todo; - Open the delivery in the Barcode app; - Scan the package. **Current behavior:** The quantity on the line is now 10 / 10000 g **Expected behavior:** It should be 10000 / 10000 g **Cause of the issue:** https://github.com/odoo/enterprise/blob/4c9fa9dc010958710d848fbcb3241b17ea7205ca/stock_barcode/static/src/models/barcode_picking_model.js#L1500-L1505 remaining_qty is expressed in the uom of the quant so it will be 10 but qty_needed is expressed in the uom of the line is it will be 10000. qty_used beeing the minimum of those two it will be 10. **Fix:** To define how much quantity to take from the package, we convert the line's quantity by using the package's UoM. Then, when we add this quantity to the line's quantity, we re-convert it by using the line's UoM. opw-4860064 Forward-Port-Of: odoo/enterprise#95659 Forward-Port-Of: odoo/enterprise#93693
Uploaded file fields on field service worksheets are now visible when customers open or sign the worksheet report in the portal. This prevents missing attachment information and makes completed worksheet reports more accurate for review and approval.
Original PR description
Steps to reproduce: ------- - Install industry_fsm_report module - Open FSM app - Select worksheets from settings in the configuration - Go to worksheet templates in the configuration - Create a worksheet template - Click the design template button. You arrive in the studio - Add file field and close it - Create a new task and select a newly created template in the worksheet template - Click the worksheet button in the control panel - Upload a file and save it - Click on the sign report button - Here file field is not visible Issue: ------- The file field is not visible in the worksheet portal. Cause: ------ The view of the file field is not created for the worksheet portal. Solution: ------- Created the view of the file field to display in the worksheet portal. task-3691529 Forward-Port-Of: odoo/enterprise#95754 Forward-Port-Of: odoo/enterprise#56035
Survey descriptions and end messages now avoid a content option that could prevent embedded videos from appearing to respondents. This ensures shared surveys display their message content as intended outside the editor.
Original PR description
Embedded components do not render when the html field content is displayed outside the editor, as their mechanism relies on the editor plugin. Solution: --------- Disable embedded components for the…
Embedded components do not render when the html field content is displayed outside the editor, as their mechanism relies on the editor plugin. Solution: --------- Disable embedded components for the survey messages (Description and End Message). Steps to reproduce: ------------------- * Create a new survey * Add a video as End Message or Description * Use the share link to view de survey * Video not showing Cause of the issue: ------------------- The new web_editor has a plugin system, and one option that is enabled by default is embedded_components. This option has been introduced in: https://github.com/odoo/odoo/commit/03f495c696030214c17e6479076571823513f60e According to the description: "It is forcibly set to false in HtmlMailField since embedded components can only be rendered inside Odoo." Observation : ------------ similar fix: https://github.com/odoo/odoo/commit/1446167e482745c71725563e56411948c3dd1f41 opw-5005752 Forward-Port-Of: odoo/odoo#224808
Anonymous self-order customers could see an error after their restaurant order was paid because the system tried to update information they were not allowed to change. This fix limits order updates to the necessary details, so customers see the correct order status without disruption.
Original PR description
Before this commit, updating an order in a self as an anonymous user raised a traceback: "Failed to write field pos.order.message_partner_ids" Steps to reproduce - Open a self in an anonymous window and create an order. - In the restaurant, pay the order. - Back in self, an error notification is displayed, and the order is not updated. The issue occurred because all fields were being loaded, including ones not writable for anonymous users. After this commit, only the required field are loaded. task-5126416 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Self-order kiosks can now complete payment result updates without triggering an access error. The change removes an unused data field from the kiosk flow, improving reliability for customers using self-service ordering.
Original PR description
Before this commit, when the `_send_payment_result` method is called from the kiosk (which uses the public user), an AccessError is raised while trying to load the `message_partner_ids` field on `pos.order`. After this commit, the issue is fixed by not including this field in the loaded data, since the self order app does not use it. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes point-of-sale dialogs so unnecessary default “Ok” buttons no longer appear when another action button is already present. It makes popups and form dialogs clearer for cashiers and other POS users, reducing confusion during sales, refunds, gift cards, events, and restaurant flows.
Original PR description
When dialogs were added to POS in [1] the dialog scss file was explicitly excluded for unspecified reasons. However since [2] there is some pure scss style to hide the default "Ok" button when there are any other buttons on the dialog. Which was previously done in javascript. As a result "Ok" always appears in POS form dialogs. After testing there does not seem to be any reason not to include the dialog scss styles so they're added back. However as all the "popup" dialogs in point_of_sale use "default buttons", and there are sometimes multiple "default buttons" we do want to support multiple default buttons. As currently the logic assumes only one exists. task-5103532 [1]: https://github.com/odoo/odoo/commit/0957ab329999852e61facf8591c7982424645e5d [2]: https://github.com/odoo/odoo/commit/1cf179bbf1c49a6d69588911c2a3d98dbeadd3d9
The ESG module now retrieves the correct IPCC table information before exporting data, preventing cases where the download returned no data. It also fixes a unit-checking issue that could create server log errors during the download process.
Original PR description
## [FIX] esg: fetch ipcc database Before this commit, sometimes the download button for IPCC database does not work because the request made to IPCC database to fetch data, does not return any data. The reason is because the table name used in parameter changed after a certain time. This commit gathers the table_name when we do extra rpc to fetch all parameters to use to correctly export the data. ## [FIX] esg: check unit fetched to correctly process data gathered Before this commit, when the user downloads the IPCC database, an error is raised in server log because an uom recordset is compared to a string instead of checking the unit gathered with the expected string. This commit alters the check to correctly check the right things.
This fixes a regression that prevented portal users from creating project tasks by sending emails to a project alias. It restores the expected email-based task creation flow for external users, reducing manual follow-up for project teams.
Original PR description
The new safety belt introduced in 745f3accaf775550294d6f1bf562a0dcc15f7a08 made it impossible for portal users to create tasks by sending emails to the project alias. @moduon MT-11332 Forward-Port-Of: odoo/odoo#228986 Forward-Port-Of: odoo/odoo#225321
Opening the list side panel in spreadsheets now works even when a saved sort uses a field that was later removed or renamed. This lets users access the panel and remove the invalid sorting instead of being blocked by an error after an upgrade.
Original PR description
If a list is sorted on an invalid field and you try to open the list side panel, it crashes. It should open to allow the user to remove the sorting. A list with an invalid sorting field if the spreadsheet was created in a given version, then upgrades to a version where that field has been removed or renamed. Task: 4962837 Forward-Port-Of: odoo/enterprise#94972 Forward-Port-Of: odoo/enterprise#92393
Fixes several issues in Email Marketing introduced by a recent refactoring, including incorrect colors, awkward editor options, empty content blocks, and display problems for sent emails. This helps users edit campaigns more reliably and view previously sent mailings correctly without layout or scrolling glitches.
Original PR description
This task bundles fixes for issues introduced with the mass_mailing [refactoring]: [FIX] mass_mailing: align fontFamilyPicker option Some options have different alignments, this commit introduces…
This task bundles fixes for issues introduced with the mass_mailing [refactoring]: [FIX] mass_mailing: align fontFamilyPicker option Some options have different alignments, this commit introduces usage of an extra class to adapt the alignment of the fontFamilyPicker option so that it displays nicely with other options. [FIX] mass_mailing: remove empty containers and sections Prior to this commit, removing all columns from a container would make a snippet unusable but it would still be in the DOM. After this commit, empty rows, containers and sections (snippets) are removed. [FIX] mass_mailing: use o_mail_no_colorpicker instead of s_col_no_bgcolor Update usages of s_col_no_bgcolor to use o_mail_no_colorpicker instead, and this class hides the option to change the background color. [FIX] mass_mailing: remove erroneous mass_mailing style Prior to this commit, some colors were not accurate when using the ColorPicker, notably `o-color-2` had a different color when previewed in the `ColorPicker` than when actually applied in the DOM (Beige vs Purple). [FIX] mass_mailing: fix separator title snippet Prior to this commit, the separator title snippet had the option to have "None" column, which didn't make much sense. This commit removes that option. [FIX] mass_mailing: fix theme selector favorite template star color Prior to this commit, the color for `fa-star` element in the Theme Selector, when a user selects a mailing saved as a favorite, was darker than usual. [FIX] mass_mailing: display mailings without body_arch in readonly After the `mass_mailing` [refactoring], sent mailings with a `body_html` but without a `body_arch` where not properly displayed in the `MassMailingHtmlField` widget. How to reproduce: - Create a new mailing by selecting multiple CRM Leads in the list view - Click on the "Email" action of the control panel - Write and send an Email - Go to the Email Marketing app and open the email Issue: - The email is displayed empty. Resolution: Display the `body_html` if the `body_arch` is empty. [FIX] mass_mailing: prevent infinite scrolling when viewing mails Since the mass_mailing [refactoring], viewing some emails in readonly could result in the page growing its `scrollHeight` indefinitely: How to reproduce: - Write and send a mailing with the basic theme (normal editor) - Open the mailing in readonly Issue: - The scroll views grows its `scrollHeight` indefinitely. Resolution: Remove layout padding for the basic theme, since it will interfere with the automatic iframe sizing process. Adding a padding there would make it impossible to reconcile the height of the iframe content with the height of the iframe itself, and that computation is required to prevent the iframe from having an overflow (functional spec. is that the Form view should scroll the content, and no scrollbar should appear in the iframe). [refactoring]: https://github.com/odoo/odoo/commit/82969dc5c6c36a7a91194cf15b33c9abb560a8e7 task-5134263 Co-authored-by: Damien Abeloos <abd@odoo.com> Co-authored-by: Thomas Josse <thjo@odoo.com>
This fix prevents IoT device WebRTC connections from dropping when an action takes more than a few seconds. Longer-running actions now run separately so the connection can keep sending keep-alive signals, improving reliability for users operating connected devices.
Original PR description
Before this commit, if an action took more than 5 seconds to execute, it would cause the WebRTC connection to disconnect. This was due to the action blocking the WebRTC thread for that connection, which internally is sending keep-alive messages to keep the connection active. The action prevents this from happening and so the connection gets automatically closed by the browser. After this commit, we run the action inside a loop executor (essentially giving the action its own thread). This prevents the connection thread getting blocked and so the connection stays open as expected. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Inventory revaluation now delays rounding until after calculations are complete. This prevents small rounding differences from building up and incorrectly creating negative remaining values during stock valuation.
Original PR description
Before this commit, the remaining_value_unit_cost was rounded before any computation. In the case where the numer of layers with remaining value and remaining quantity increase, the rounding error introduced by that rounding quickly explodes, leading to a negative remaining_value during revaluation computation. After this commit, the remaining value is rounded at the end, after the computations and the checks. This ensures that the rounding error remains constant and does not accumulate over the execution of the method. opw-4901966 Forward-Port-Of: odoo/odoo#229376 Forward-Port-Of: odoo/odoo#222690
Fixes several Knowledge article comment issues so users can consistently see and use comments after saving, reloading, or switching between read-only articles. It also prevents crashes when trying to add comments inside code blocks, improving stability for article collaboration.
Original PR description
### Issue 1: Summary: When a user adds a comment inside a baseContainer element, the comment beacons created during the comment insertion can be discarded during the document normalization step. How…
### Issue 1: Summary: When a user adds a comment inside a baseContainer element, the comment beacons created during the comment insertion can be discarded during the document normalization step. How to reproduce: - Open an article in Knowledge. - Select text and change the block style from "Paragraph" to "Normal" using the powerbox. - Add a comment on the selected text using the powerbox. - Write a message in the comment thread. - Save and reload the article. Issue: - The comment beacons disappears from the editor and the user can't see it anymore. Resolution: When the editor is initialized, `div` are not yet categorized as paragraph related elements. The `comments_plugin` logic to identify valid positions for comments beacons should take that into account and allow elements which are candidates to be a paragraph related element. ### Issue 2: Summary: There was an issue where comments were not displayed when switching from a locked article to another (read-only). How to reproduce: - Create two articles and add a comment on each. - Lock both articles (so that they are effectively read-only). - Switch from one article to the other. Issue: - Comments are not displayed to the user. Resolution: When switching between read-only articles, `KnowledgeHtmlViewer` is not fully reloaded and continues using the same `CommentBeaconManager` instance for the newly opened article. As a result, comment beacons are not displayed when switching article. The simplest solution to this issue is to re-instantiate a new `CommentBeaconManager` whenever the HTML value changes to ensure comments are correctly displayed. ### Issue 3: There is an issue in the logic of `computeVerticalDimensions` to display comments. If the `top` value of a thread in the article is `0`, it will be filtered out and not displayed because `top` was used as a boolean value. Instead, it should properly consider `top` as a finite number to display the comment or not. Note: This issue is not easily reproducible because there are few configuration where a comment would have a top value equal to 0. ### Issue 4: There is a crash when inserting a knowledge comment in a `/code` block: In this previous [task], insertion in `pre` elements was filtered to prevent non-phrasing content from being inserted (as it is invalid per the html specification). To prevent a crash, knowledge comments will be disabled in `<pre>` elements, as they rely on `anchor` elements for the comment position in the article body. [task]: 216e9eb task-4984152 Forward-Port-Of: odoo/enterprise#95952 Forward-Port-Of: odoo/enterprise#91408
Attendance officers who are not HR officers can now create, edit, and delete attendance records for the employees they manage. This removes an access error while keeping the elevated access limited to the attendance management workflow.
Original PR description
…rs to create attendances Because creating attendance records requires access to the `version_ids` field on the employee and subsequently `hr.version` records, which require `hr.group_hr_user` group on the user. This change runs said flow in sudo mode only if the user has `hr_attendance.group_hr_attendance_officer` or it's implying groups. task-5071058 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226080
This fixes barcode delivery processing so that when workers split a reserved package into another destination package, the new split line keeps the original source package information. This prevents package details from being lost during partial transfers, improving warehouse accuracy and traceability.
Original PR description
### Before this PR: - Put a package in WH/Stock with quantity 100 - Create delivery for partial quantity for example 50 - Go to app barcode - Try to split the package into two different packages scanning another destination Package - The splitted line will be created with empty package instead of the package already reserved before ### After this PR: Scanning another destination package , the new line created splitting the old one will have the package_id Forward-Port-Of: odoo/enterprise#95779 Forward-Port-Of: odoo/enterprise#81170
Fixed an issue where the Turkish General Ledger CSV export could be generated blank after a previous report update. The export now correctly includes the expected accounting entries, helping businesses retrieve complete ledger data for reporting and compliance.
Original PR description
## Before this commit: After the refactor of the General Ledger in the referenced commit, `l10n_tr_reports` no longer able to fetch the `aml_ids`. This caused the CSV export of the General Ledger to be generated as blank. Ref commit: https://github.com/odoo/enterprise/commit/235a5160d13296328b79e4092a8b88a733628268 ## After this commit: Ensured that `aml_ids` are properly retrieved, so that the General Ledger CSV export contains the expected data. Forward-Port-Of: odoo/enterprise#95577
Changing a user's login through the password wizard now refreshes the page and can hide the login field when needed. This prevents confusing errors and ensures users are prompted to log in again after their login details are updated.
Original PR description
This allows hiding the login and reloading the page on update which is necessary to prompt relogging instead of getting an error. password wizard is convenient to reuse as it already includes the user login and overall targets the same kinds of modifications. Additionally it may be desirable to require a password to modify the login from this page in the future. task-5130854