Daily updates from Odoo
Tuesday, March 4, 2025
31 changes
Resolved issues and error corrections
Portal users can now download all attachments from a message as a zip file even when an editor is present on the page. This prevents the page from showing an internal blob link instead of starting the download, reducing confusion and keeping the current page intact.
Original PR description
When downloading all message attachments as a zip file in portal chatter, if there is an editor iframe on the page, instead of downloading the file, there is a blob url opened on the page. This happens because the web editor handles clicks and tries to open the URL in the current main window, which results in displaying the blob URL to users instead of ownloading it. Opening the attachment in a new window prevents interfering with the current page url and keeps the iframe managed by the web editor intact. task-4545106
This fixes a Point of Sale issue where staff could not cancel an online payment line after refreshing the payment screen. It prevents an error popup and lets cashiers recover smoothly from an interrupted or unpaid online payment flow.
Original PR description
Description of the issue/feature this PR addresses: Steps to reproduce - Create and open POS, set it up with online payment (Demo) - Enter the payment (online payment), don't pay and refresh the page - After refresh, go to payment screen again - You'll get the error in my attachment  Current behavior before PR: - After selecting online payment, refresh the page, then you cannot cancel the payment line and error pop up appear Desired behavior after PR is merged: - Can cancel the payment line after refresh opw-4608951 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The attendance screen no longer shows approve or refuse actions when an employee has no extra hours to review. This avoids confusing managers with unnecessary buttons for attendance entries that are already approved by default.
Original PR description
Since logging new attendance is approved by default, the refuse/approve buttons for rejecting/approving extra zero hours should be invisible. task-4320142 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
This fixes an error in Point of Sale customer search when the SMS gateway is not installed. The search now only uses SMS-related phone matching when the relevant SMS integration is available, so staff can reliably find customers from the POS screen.
Original PR description
Steps to reproduce the bug: - Install POS, then uninstall the sms gateway - Open a shop and then click on customers button - write anything in the input field then click on `Search More` Problem:…
Steps to reproduce the bug: - Install POS, then uninstall the sms gateway - Open a shop and then click on customers button - write anything in the input field then click on `Search More` Problem: Error is raised in the request because the `partner_list.js` screen is passing the field `phone_mobile_search` in the search_fields. The `phone_mobile_search` field is only introduced to the res.partner model in the a PhoneMixin and the inheritence is only applied in the `sms gateway module` so the field will only be available if the `sms gateway is installed`. Possible Approaches: - [Stable] added a function in the partner_list.js that tells if the PhoneMixin is applied and it returns false in the pos, and overriden the same function in the pos_sms bridge module that implies that both pos and sms are installed and it returns true there meaning the mixin is applied. - [Non Stable] add the inheritence of the mixin in the pos module, but that will require module upgrade - [Non Stable] add a whole direct dependency between the pos and the sms gateway opw-4455381 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
A new automated test checks that saved popup snippets appear immediately when reused on another website page. This helps prevent a past issue where users had to manually toggle visibility before the popup appeared.
Original PR description
**Steps to Reproduce:** 1. Drop a popup snippet on any page (e.g., Home page). 2. Save the popup snippet for reuse. 3. Drop the same custom snippet on another page (e.g., Contact Us page). 4. Try to…
**Steps to Reproduce:** 1. Drop a popup snippet on any page (e.g., Home page). 2. Save the popup snippet for reuse. 3. Drop the same custom snippet on another page (e.g., Contact Us page). 4. Try to make the snippet visible on this page. **Specification:** Previously, when creating a custom Popup Snippet for later use and attempting to drag and drop it, the popup was not visible on the first attempt. The visibility needed to be manually toggled from the snippet options (it only became visible on the second click). This issue was addressed in commit https://github.com/odoo/odoo/commit/d8daeed8bac9c5e48882a25031dace0b9355c7d7, and it persisted from version 16.0 to saas-17.4. To prevent this issue from recurring, we have introduced a test tour in this commit to verify that custom popups are now displayed immediately after a drag-and-drop action, eliminating the need to manually toggle visibility. Commit that resolved this issue in version 18.0 : https://github.com/odoo/odoo/commit/edf81c13d8f2f6d29a77d68cbfa0dc9216da3c2a task-4088420 Forward-Port-Of: odoo/odoo#198912 Forward-Port-Of: odoo/odoo#184659
Fixes an editing issue where pressing Enter after an image-only list item removed its bullet and changed the list layout. Users can now continue lists with images more predictably, keeping notes and to-do content properly formatted.
Original PR description
### Steps to reproduce: - Open the To-Do app. - Create a list (e.g., `/list`). - Insert an image into a list item and press `Enter`. - Notice that the list item containing the image is outdented. ### Solution: - In `handleSplitBlock`, the `!closestLI.textContent` check did not handle list items containing only an image. Adding an `isEmptyBlock` check ensures the bullet point is preserved. ### Description of the issue/feature this PR addresses: - Pressing Enter in list item containing only an image removed the bullet point. ### Desired behavior after PR is merged: - Pressing Enter in a list item with only an image preserves the bullet point and creates a new empty list item. task-4586704 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update prevents an error that could occur when users pasted content into the editor under specific conditions. It improves editing reliability by safely handling empty invisible content during paste operations.
Original PR description
Description of the issue this PR addresses: Pasting content on a node with an invisible empty text node as the last child would result in a traceback. This occured because the empty node being removed when inserting text. task-4566557 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Archived products will no longer appear as choices when adding combo products to a sales order. This prevents sales teams from accidentally selecting unavailable or discontinued items, keeping orders aligned with the active product catalog.
Original PR description
steps: - create a combo product with 1 or more combo items - archive a product part of this combo - create an SO and add this combo product issue: - it shows archived product cause: - when product is archived the linked combo item line is not archived fix: - added an active filter in combo_configurator get data opw-4579038 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The candidate form now shows the full number of related applications, including inactive or refused ones. This gives recruiters a more accurate view of a candidate's recruitment history directly from the Applications button.
Original PR description
Description of the issue/feature this PR addresses: On the candidate form view, the "Applications" smart button doesn't show the correct count. It counts only active applications. Desired behavior after PR is merged: On the candidate form view, show the correct count on the "Applications" smart button including both active and refused applications. task-4473067 **Forward port:** 18.0 -> 18.1 Candidate was removed in 18.2 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where selecting a customer after closing and reopening the online payment QR code popup did not update the POS order correctly. Orders paid through online payment will now stay synchronized with the selected customer, helping ensure accurate sales records and customer history.
Original PR description
Description of the issue/feature this PR addresses: Currently, when an order is generated in the POS system and the payment method is set to pos_online_payment, after displaying the popup with the QR…
Description of the issue/feature this PR addresses: Currently, when an order is generated in the POS system and the payment method is set to pos_online_payment, after displaying the popup with the QR code, if the popup is closed, and then a customer (partner_id) is selected, reopening the popup does not update the customer information on the order. This means that the customer (partner_id) is not synchronized correctly on the backend of Odoo, leading to the order not reflecting the updated customer selection. Current behavior before PR: When the popup with the QR code is closed, and a customer is selected afterward, the partner_id (customer) is not updated on the order. The order does not reflect the latest customer selection on the backend. Desired behavior after PR is merged: When the customer (partner_id) is selected after the popup is closed and reopened, the order will be updated with the correct customer information. The system will ensure that the partner_id is synchronized in real-time with the backend, so the customer is correctly assigned to the order. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The editor toolbar now hides link, AI, and translation actions when a user selects content across block elements, such as multiple table columns. This prevents confusing or invalid toolbar options from appearing and restores the expected editing behavior.
Original PR description
**Problem**: In previous versions, the link button (AI & translation too) was not displayed in the toolbar when the selection included block elements. However, this behavior has regressed, and the link button (AI and Translation too) now appears even when the selection spans blocks. **Solution**: Hide the link button (AI & translation too) in the toolbar when the selection includes block elements. **Steps to reproduce**: 1. Create a table in the editor. 2. Select multiple columns. 3. Observe that the toolbar incorrectly displays the link button. opw-4397649 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where some invoice lines could be missing from the Italian electronic invoicing XML when an invoice included a negative line. The generated file now preserves the original invoice lines, reducing the risk of incomplete submissions to the tax agency.
Original PR description
Currently, when a negative line is added and dispatched with `_dispatch_negative_lines`, null candidates lines are excluded from the base line to include in the XML. This leads to issues where the invoice no longer contains all its original lines.
Steps to reproduce:
- Create an invoice with several positive lines and one negative line
- (e.g., 5 lines at $100 and one at -$200)
- Click “Send” and select “Send to Tax Agency”
- Check the XML result, you’ll notice only 3 lines are present instead of 5
This fix restores the behavior seen in Odoo version 17.4, where null candidates lines from `_dispatch_negative_lines` are still included in the final XML generation.
opw-4604377This fix makes the quick assign icon appear again when users hover over tasks in the Project kanban view. It restores an expected shortcut, helping users assign work from the task board without extra clicks or navigation.
Original PR description
Steps to Reproduce: - go to project and navigate to the`project.task` Kanban view. - hover over any task element. - the quick qssign icon is hidden. Cause: - the CSS class responsible for displaying the Quick Assign icon on hover was removed from the views. Solution: - Added a new class to ensure the Quick Assign icon is visible when hovering over a task. task-4461236
Customers and staff can now download files attached to sales order portal messages immediately after opening the preview page. This prevents an error page caused by an incorrect preview link, making document sharing from sales orders smoother and more reliable.
Original PR description
## Versions: 18.0+ No fix needed before as feature starts here ## Issue: An error page show up when trying to download files from SO portal preview. ## Steps to reproduce: - Create a new `Sale Order`…
## Versions: 18.0+ No fix needed before as feature starts here ## Issue: An error page show up when trying to download files from SO portal preview. ## Steps to reproduce: - Create a new `Sale Order` for any client with any product(s); - Click the `Send message` button in the chatter: - Write down any message and attach at least 1 file; - Send the message; - Click on the SO's `Preview` button that will redirect you to the portal; - **Don't reload the page**; - Move down to the chatter; - Hover the message containing the file(s); - Click the three dots then `Download Files`. ## Cause: The relative URL is created a wrong way, including an old way (<16.0) to access edition mode (even replaced by `get_client_action_url`[^1]) which we don't want here. Probably copy-pasted from https://github.com/odoo/odoo/blob/ddb03a55ac94b9fd48ae6ce138e70c0070bedd36/addons/website_sale/models/account_move.py#L23-L28 *We might want to remove it from here too but no bug declared yet (?)* opw-4545106 [^1]: https://github.com/odoo/odoo/pull/99926
Fixed an issue where special mentions such as @everyone could appear as raw HTML text instead of clickable links in mail messages. This improves message readability and ensures users can interact with mentions as expected.
Original PR description
Before this commit: Special mentions (@everyone) appeared as raw HTML instead of links because when message content is not `markup()`, it is rendered as text instead of HTML when using `t-out`. After this commit: This commit ensures special mentions are correctly rendered as links. Before / After  
Users loading additional records in a Kanban column will no longer be unexpectedly moved down to the Load more button. This preserves their place in the view and makes browsing long Kanban columns smoother and less disruptive.
Original PR description
This commit fixes an issue where clicking "Load more" in the first column of the Kanban view caused the page to scroll to the button, making users lose their previous position. This appears to be related to the browser's behavior of scrolling to a focused element if it still exists after DOM mutations. However, it remains unclear why this only affects the first column and not the others. As a temporary workaround, a t-key is added to the "Load more" button to ensure it is removed and replaced each time it is clicked. This issue was partially addressed in https://github.com/odoo/odoo/pull/115706, but that fix is no longer relevant with this commit.
Payment requests now use only the first email address when a customer record contains multiple addresses. This prevents payment provider issues, especially with Stripe, which expects a single email per payment request.
Original PR description
If the email field is provided, it must be unique as Stripe doesn't handle multiple emails per payment request. In Odoo, the field partner_email is designed for more than 1 email in order to send documents easily to multiple recipients. Considering the first email only for Stripe in case of multiple emails. opw-4576386
Sales orders that create projects or tasks now assign tasks and analytic accounts consistently, including when multiple orders are confirmed together. This prevents duplicate or mismatched project links and keeps project profitability tracking aligned with the intended sales order setup.
Original PR description
This PR aims to solve multiple issues related to analytics and project generation in sales orders. 1. Let's assume an SO with the following: - Add an SOL with product that generates a project (or a…
This PR aims to solve multiple issues related to analytics and project generation in sales orders. 1. Let's assume an SO with the following: - Add an SOL with product that generates a project (or a project & a task) - Add an SOL with product that generates a task in no particular project - Confirm the SO with those products OR start from a confirmed SO, and add those products to it (add them all, and then save the SO) In that case, the second product should generate a task in the project generated by the first product (unless a project was selected on the SO). After this commit, if the SO generates multiple projects and no project was selected on the SO, we generate the task in the generated project with the lowest (sequence, id). 2. Let's assume an SO with the following: - Create two SOs having both a service product which creates a project (or a project & a task) - Confirm both SOs at the same time Issue: Both SOs have the same project, while two projects have been generated (one per SO) Solution: Each SO should have the project it has generated. In other terms, we should make it work when confirming multiple SOs in batch. 3. Let's assume an SO with the following: - Add an SOL with product that generates a project (or a project & a task) not based on a project template - Add an SOL with product that generates a project (or a project & a task) based on a project template - Confirm the SO Issue: Two projects were generated, each one having a different analytic account (but with the same name). It's not consistent with the previous behavior (from 17.4). Solution: Create one analytic account that all generated projects will share. 4. Let's assume an SO with the following: - Set the project of the SO to a project having an account_id - Add an SOL with product that generates a project (or a project & a task) - Confirm the SO Issue: The account of the generated project is not the account of the project on the SO. Again, it's not consistent with the previous behavior (from 17.4). Solution: Do not create a new analytic account for the generated project but instead take the one from the project on the SO if it is defined. task-4244890 version-18.0
Users who have Project access but no Sales rights can now duplicate projects without encountering an access error. This prevents an unnecessary blocker in project administration while keeping sales permissions unchanged.
Original PR description
**issue:** If a user lacks Sales module rights, they are not allowed to duplicate a project. **steps to reproduce:** - Settings / Users & Companies / Users - Remove sales rights from the user while retaining rights in projects - In the project module, try duplicating a project An access error is raised because the ```reinvoiced_sale_order_id``` field is attempted to be read during the copy operation opw-4466519
This fixes an issue where import previews could fail in debug mode when files included certain related record ID columns. The change makes field information more complete and accurate, helping Odoo suggest the right import mappings and preventing interruptions during setup or troubleshooting.
Original PR description
In debug mode, import previews were failing with a "'model_name'" KeyError when column headers included one2many/id fields. This occurred because the 'model_name' is missing from the field definition dictionary returned by `get_fields_tree` for '.id' in debug mode in case of one2many. Since the introduction of https://github.com/odoo/odoo/pull/174366, 'model_name' should be always included in these field definitions. Additionally, this commit corrects the 'model_name' for relational ID fields. Previously, these fields incorrectly targeted the current model instead of the comodel. This fix prevents `_get_mapping_suggestion` from targeting the wrong model during its fallback mechanism, which relies on 'model_name'.
Public visitors can now react to messages in website chatter without errors, and copied message links open correctly instead of showing an unauthorized page. This improves the review and discussion experience for public users on website course pages.
Original PR description
Before this commit, as a public user in website chatter: - Trying to add a reaction would result in a traceback. - The link created from the "Copy Link" action would lead to an unauthorized page. Steps to reproduce: - Install website module and add course page - As public user open a course - Go to reviews - Add a reaction to any message -> traceback - Copy link to any message - Open said link -> unauthorized page This commit fixes the issues by adding a "can_react" field in the portal store init. task-4551910
The General Ledger search now skips draft accounting lines that do not have a name. This prevents an error when users search reports after resetting entries to draft and clearing their names, keeping reporting workflows uninterrupted.
Original PR description
### Steps to reproduce: - Create a draft vendor bill - Go to Accounting > Reporting > General Ledger - Include draft entries in the report - Click the three dots on a posted entry and view the entry - Reset it to draft - Delete the name of the entry and save - Return to the General Ledger - Type something in the search bar - Error ### Cause: This flow automatically search on the lines but draft lines have no name (null) so it crashes on `const lineName = line.name.trim().toLowerCase();`. ### Solution: Ignore lines with no names when searching. opw-4589598
Kenya payroll calculations have been updated to reflect PAYE rule changes effective 27 December 2024. This helps ensure payslips and payroll accounting use the current statutory requirements and reduces the risk of incorrect employee tax deductions.
Original PR description
Problem ---------- Amendments to PAYE computation from 27 Dec 2024 Objective ---------- Correct the Kenya Payroll computation with the new rules from the 27 Dec 2024 Solution ---------- Adapt rules and parameters task-4457038
This fixes an automated Knowledge calendar test that could fail on rare month-start dates. It improves release reliability by making the test use a stable date and correcting checks that were not validating the page properly.
Original PR description
Prior to this commit, `knowledge_calendar_command_tour` failed on the first day of the month, if it was a Saturday. This is because it creates an `ArticleItem` on Monday of the week containing the current date, which may be in the previous month, and then tries to find that same `ArticleItem` in the FullCalendar representation of the current month with week ends days hidden. In that view, with that setting, Monday of the current week is always shown (even if it is part of the previous month) UNLESS the first day of the month is Saturday. This commit also fixes some selectors using `:not` pseudo-class incorrectly (they were always true and did not verify anything). runbot-task-114354
This fix ensures copied databases using the Tyro point-of-sale integration are neutralized so they do not accidentally contact external payment systems. It helps support teams investigate customer databases safely without risking unwanted production impact.
Original PR description
This commit adds the missing neutralization necessary for the pos_tyro module introduced in 18.0 in [1] The purpose of the standard neutralization framework is to allow us to create database copies that will not interact with external systems in ways that could impact the production database (or if it is not possible to prevent the interactions, make sure that they are benign or won't result in actual changes), or impact the customers of the operator of the production database. This is mainly useful to allow safe support investigation on database duplicates. [1] https://github.com/odoo/enterprise/pull/79432
UrbanPiper order processing now verifies that the required fiscal position exists and belongs to the correct company. If it is missing or linked to another company, the system creates a valid one, helping prevent order or tax configuration issues.
Original PR description
Before this commit: === - If `urbanpiper_fiscal_position_id` is not set, the system attempts to retrieve the default UrbanPiper fiscal position. After this commit: === - The check ensures that if no valid fiscal position is found (either missing or belonging to a different company), a new one is created. runbot-115934
Fixes an issue where Knowledge article templates sent through the chatter were inserted below the user's email signature. Templates now appear in the intended message area, helping users send cleaner, properly formatted messages without manual repositioning.
Original PR description
Currently, the "Clipboard" functionality pastes templates at the very end of the text box, causing them to appear after the signature. ### Steps to reproduce 1. Install the `knowledge` module. 2. Open any view with a chatter. 3. Click the "Search Knowledge Articles" icon (ribbon icon next to the pager). 4. Select the "Welcome Mitchel Admin" article. 5. In the article, find a template and click the "Send as message" button. You should notice that the template is placed below the signature. ### Cause Since version 18.0, the full composer includes the signature. As a result, anything pasted at the end of the composer will appear below the signature. opw-4410141
Payroll batch generation now selects employees based on active contracts during the batch period, allowing the right payslips to be created when employees have relevant contracts. This improves payroll processing accuracy and updates related tests across payroll and localization modules.
Original PR description
* = hr_payroll{,_account}, l10n_{be,in}_hr_payroll
Problem
----------
- An employee can not have multiple payslip in a batch
Objective
----------
- Base the employees selection on active contracts running in the batch period
- Update tests to follow the good behaviour
Solution
----------
- Link payslip employee wizard with a batch one time with the context
task-4483393Belgian Intrastat reports no longer show duplicate CSV and XML export buttons. This reduces confusion for users preparing Intrastat declarations and also fixes the related asset loading setup.
Original PR description
- Due to how _custom_options_initializer is handled with children reports, there is 2 xml & 2 csv buttons. This fix checks that they are added only once. - This commit also corrects manifest assets import
Fixed an issue in Knowledge where sending clipboard content as a message could place the text after the user’s email signature. The composer now keeps the clipboard text before the signature, reducing manual editing and helping messages look correct when sent.
Original PR description
Recent updates introduced automatic inclusion of the user's signature to the mail composer (see: odoo/odoo#184695). When the user clicks on the "Send as Message" button of a clipboard block in…
Recent updates introduced automatic inclusion of the user's signature to the mail composer (see: odoo/odoo#184695). When the user clicks on the "Send as Message" button of a clipboard block in Knowledge, the macro system will do a few steps to (1) restore the previous view, (2) open the full mail composer and (3) insert the clipboard text at the end of it. As the signature is added when opening the full mail composer, the clipboard text is inserted after the user's signature which is inconvenient as users must manually adjust the message to position the signature at the end of the message. To avoid this problem, we'll replace the full mail composer content with the concatenation of the clipboard text and the user's signature. This guarantee that the two elements will appear in the desired order. Steps to reproduce: 1. Open the CRM lead view 2. Press `Ctrl` + `k` to open the command palette 3. In the command palette, select any article 4. In the article you chose, insert a clipboard block with the /clipboard command 5. Click on the "Send As Message" button of the clipboard => The macro restores the CRM lead view, opens the full mail composer and paste the clipboard content after the user's signature. TO BE: The macro should replace the message of the full composer with the clipboard content and the user's signature should be placed after the clipboard content. Task-4428445
Creating a new Field Service task from a mobile view now correctly applies the default context, so the current user is set as the assignee when expected. This also avoids a debug-mode error caused by unsupported form options, improving reliability for mobile Field Service users.
Original PR description
Steps to reproduce ================== - Go to Field Service - Use a mobile viewport - Click on "new" Without debug: The default assignee is not the current user In debug: Invalid props for component 'ProjectTaskFormController': unknown key 'additionalContext', unknown key 'onClose' opw-4512178