Friday, October 24, 2025
27 changes · 19.0
Enhancements to existing features
All Finnish tax report lines now have codes, including lines that previously had none. This makes tax report exports more reliable because the export process can consistently identify each report line.
Original PR description
The aim of this commit is adding code for all the tax report lines. Before, some lines didn't have any code set on it, now all these lines have a code. The change is motivated by the tax report export where we use the code as key in the dict given to the export template. task-5135868 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232636 Forward-Port-Of: odoo/odoo#229876
Amazon stock synchronization logs now include the related account ID, making it easier for support teams to trace issues to the right customer account. This helps speed up investigation and improves the quality of support diagnostics without changing user workflows.
Original PR description
Based on feedback from the support team, additional information has been added to the stock sync logging messages. This enhancement includes the account ID for better traceability and to help the team understand customer issues more effectively. Forward-Port-Of: odoo/enterprise#97940
Resolved issues and error corrections
When a job application is refused and a refusal email is sent, the email is now also recorded in the applicant's chatter. This gives recruiters a clearer communication history and helps teams track what was sent to candidates.
Original PR description
To reproduce: ============= refuse an application with `send_email` checked, the email is sent but not logged in the chatter Solution: ========= Add a `message_post` in the `_prepare_send_refusal_mails` method opw-5137342 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230450
Documentation and clarification updates
This pull request records Harold Campo's signed Contributor License Agreement. It is an administrative legal update that allows contributions to be accepted under Odoo's contribution requirements, with no change to product functionality.
Original PR description
Add CLA for Harold Campo Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: 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 fix prevents AI-generated HTML content from showing escaped code instead of the intended formatted content. It ensures users see properly rendered AI output while continuing to rely on existing sanitization safeguards.
Original PR description
Bug === Since odoo/odoo@560fca7e94b232a7e2c9ad452a9772367c34204b , `fixInvalidHTML` escape the content if it's not a markup object. All place have been updated, except when computing an HTML with AI. So we make the object a markup, so it's not escaped by `fixInvalidHTML`. The content is sanitized in `parse_ai_response`. Task-5092600
Spanish point-of-sale receipts now correctly display the company's state name instead of empty brackets. This fixes a receipt presentation issue for Spanish companies using simplified invoices, improving customer-facing document accuracy.
Original PR description
**Steps to reproduce:** - Set a spanish company, set the state - Set the "Simplified Invoice" journal in the settings - Go to PoS and make a purchase - On the receipt, empty brackets are shown where the state should be **Why the fix:** Before this commit, we checked that the company had a state set, and if it had, we displayed *state_id[1]* between brackets. Even if the state_id existed, this is not the correct structure for the state_id, so *state_id[1]* did not exist, and we displayed only the brackets. We now display the correct state name, still between brackets. opw-5098212 Forward-Port-Of: odoo/odoo#232689 Forward-Port-Of: odoo/odoo#230141
The Field Service “To Schedule” view now excludes completed or cancelled tasks. This keeps teams focused on work that still needs scheduling or assignment and avoids confusion from closed tasks appearing in the list.
Original PR description
**steps to reproduce:** Go to field service Go to all tasks > to schedule **issue:** The To Schedule filter was also displaying tasks in cancelled or done state, whereas it should only show open tasks that need to be scheduled or assigned. **cause:** The filter domain did not exclude cancelled/done state, causing closed tasks to appear in the filtered view. **fix:** Updated the filter domain to exclude cancelled/done state, to ensure only open tasks are shown under the To Schedule filter. task-5138590 Forward-Port-Of: odoo/enterprise#96600
This fix makes automated project history checks wait for the expected content before continuing, reducing random failures when test servers are under heavy load. It improves confidence in validation results without changing day-to-day user behavior.
Original PR description
This commit fixes an undeterministic error happening on runbot when the host has a higher load, slowing down the tour's execution. More specifically, the custom `run()` function is called right when the trigger selector is matched, even if its content hasn't finished loading. By changing the selector to a `:contains()` it waits for the actual content to be matched. Note: it also removes a duplicated step related to the html history being loaded. runbot-233338
This fix ensures attachment fields in accounting reports and social post templates use the intended access handling. It helps prevent missing or inaccessible attachments when users work with returns or social media content.
Original PR description
Follow-up of fd4fcb1bd87, we should set `bypass_search_access` on `ir.attachment` many2many fields.
This update fixes how attachment fields are accessed in the POS self-order configuration. It helps ensure related files can be found correctly where needed, reducing the risk of missing images or documents in the self-order flow.
Original PR description
Follow-up of 8e5fde2a462e, we should set `bypass_search_access` on `ir.attachment` many2many fields. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where records using selection properties could be filtered incorrectly because the displayed label was used instead of the stored internal value. Business users should see more reliable results when using filters or automated logic based on these properties.
Original PR description
Bug === The selection properties is not working with `filtered_domain`. The reason is that the label is used instead of the random name (when the getter is used in mail template, we show the label). So we backport the context key added in https://github.com/odoo/odoo/commit/763d83655f1909038b0fdd237529deb87a63f4da and we use it for `filtered_domain`. Task-5188957
HR users can now use the requested signature button on an offer even when the employee has signed more than once. When multiple signature requests exist, the system shows all related requests in a kanban view so the HR responsible can choose the right one without hitting an error or dead end.
Original PR description
Steps to reproduce: - Go to an employee and create an offer - Sign the offer with the employee twice - Log as the HR responsible and use the "Requested signature" smartbutton on the offer This has been fixed by opening a kanban view of all sign requests, if multiple. task-5053624 Forward-Port-Of: odoo/enterprise#94053
This fix stops users from removing the final option in a multiple-checkbox form field. It prevents forms from getting stuck in a broken state where new options can no longer be added, improving reliability for website editors.
Original PR description
Since `html_builder`, the last element of a multiple checkboxes form field can be removed, but it leads to a situation where no element can be added anymore to the field. To avoid this, this commit restores the former behavior which did forbid the removal of the last element. Steps to reproduce: - Drop a form snippet - Add a field - Set the field type to "Multiple checkboxes" - Remove all options => It was possible to remove the last option. task-4367641 Forward-Port-Of: odoo/odoo#230827
This fixes a timing issue in the web test runner where clicking Run too quickly in manual mode could cause a crash before loading was complete. The change makes the runner handle early clicks safely, improving reliability for developers and testers using Odoo's web testing tools.
Original PR description
Before this commit, in manual mode, "Run" could be clicked before the assets finished loading (and so, before the test runner was properly "ready"). This caused a crash because it tried to resolve a promise that did not exist yet. Steps to reproduce: - Go to test URL (manual) - Click "Run" as soon as the button is visible (probably via a script to make sure the click is fast enough) This commit fixes that by adding failsafes around that promise, effecitvely allowing to click "Run" early on. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232789
Point of Sale receipts now keep the same numbering format whether an order is created online or while disconnected. This avoids confusing differences in backend order references and makes reconciliation clearer for store teams.
Original PR description
**Steps to reproduce:** - Go to PoS, make an order and pay for it - Before clicking next order close your connection with the server - Make a purchase like this - Go back online and check the orders…
**Steps to reproduce:** - Go to PoS, make an order and pay for it - Before clicking next order close your connection with the server - Make a purchase like this - Go back online and check the orders in the backend The order made online only has the receipt number, but the order made offline has *Order* in front of it. **Why the fix:** The receipt number on a PoS order should be consistand and should not be changed depending on if the purchase was made online or offline. With this commit, every order will have only it's receipt number without the *Order* in front of it even if it was made offline. It is still possible to see if an order was made online or offline with the **F** variable, which is the first number of the last part of the receipt number. If it is 1, the order was made offline, if it is 0, it was made online. The *refPrefix* parameter from the *getNextOrderRefsLocal* function is not used anymore, so it has been replaced by an empty string in the function call in stable and could be deleted when in master. opw-4965095 Forward-Port-Of: odoo/odoo#232745 Forward-Port-Of: odoo/odoo#224416
Spreadsheet files in Documents now show the expected thumbnail preview on kanban cards instead of an embedded text preview. This makes it easier for users to recognize spreadsheet documents at a glance and avoids a confusing display issue.
Original PR description
## Description Spreadsheets (stored as `application/json`) were matched by the textual preview, so the kanban card showed a text iframe instead of the sheet thumbnail. Now the spreadsheet preview is prioritized so the correct thumbnail displays. Task: [4963284](https://www.odoo.com/odoo/project/2328/tasks/4963284) Forward-Port-Of: odoo/enterprise#96963
The Discuss app sidebar and top bar have been visually adjusted so mailbox items, categories, and thread actions line up more consistently. This makes the messaging interface look cleaner and easier to scan without changing how users work.
Original PR description
- Vertically align categories and mailbox items in discuss sidebar - Vertically align thread actions in topbar with systray items Part of Task-5190261 Before <img width="1867" height="1011" alt="Screenshot 2025-10-24 at 14 00 19" src="https://github.com/user-attachments/assets/fa7ecfe4-d78c-4e8e-bd66-01497cef7884" /> After <img width="1867" height="1011" alt="Screenshot 2025-10-24 at 14 04 52" src="https://github.com/user-attachments/assets/b19e7021-3b88-4254-8313-420d1e7607e7" />
This fixes an internal website test so it uses the right performance expectation when demo data is present. It helps keep automated checks reliable and avoids false failures during validation, with no direct change for end users.
Donation forms now wait until the required currency information is available before processing a submission. This prevents rare crashes or failed submissions on slow connections and shows a loading state to avoid duplicate clicks.
Original PR description
This fixes a very rare race condition in the `test_01_donation` tour... but it is actually surprising it is not more frequent than it is. Steps to reproduce: - Simulate a slow network (e.g. using…
This fixes a very rare race condition in the `test_01_donation` tour... but it is actually surprising it is not more frequent than it is. Steps to reproduce: - Simulate a slow network (e.g. using Chrome DevTools) - Load a page with a donation snippet - Quickly fill in the donation form and click the submit button => You'll sometimes get a crash. Or a more precise one: - Add a 1 minute delay to the `/website/get_current_currency` route - Load a page with a donation snippet - Fill in the donation form and click the submit button once the page is fully loaded. => You'll definitely get a crash. This commit makes that button's handler async-protected, meaning it will now properly wait for what is needed (the currency) before proceeding, but it will also display a loading effect for the duration and prevent double clicking. Once the form is submitted, the loading effect is removed for stability safety. In master it can probably be improved. runbot-220885 Forward-Port-Of: odoo/odoo#232726 Forward-Port-Of: odoo/odoo#232408
A website blog test was updated so it no longer depends on the English name for October. This helps Odoo's automated checks run reliably in different languages, reducing false failures during validation.
Original PR description
Before this commit the blog_tags_with_date tour tried to select the October option by label. In other locales the month label differs and the tour could not find it, so the tour aborted at that step. Steps to reproduce: - Change the website language to one where October has another name. - Run the blog_tags_with_date preview tour. The tour now selects the first month option by index, independent of labels. runbot-233321 Forward-Port-Of: odoo/odoo#232961 Forward-Port-Of: odoo/odoo#232610
The channel invitation screen now makes it clearer that users can invite people by email, reducing confusion when adding external participants. It also corrects the alignment of the email invitation option so the interface looks more polished and consistent.
Original PR description
Before this commit, channel invite by email feature had poor discoverability because we had to type a full email address to have selectable item. This commit changes the placeholder of channel invite…
Before this commit, channel invite by email feature had poor discoverability because we had to type a full email address to have selectable item. This commit changes the placeholder of channel invite to hint for invite by email feature. Also the selectable invite by email item was misaligned, which this commit also fixes. Part of Task-5190261 Before <img width="406" height="613" alt="Screenshot 2025-10-24 at 14 38 05" src="https://github.com/user-attachments/assets/4220af4a-e473-4379-ac9e-80051736e6c0" /> <img width="415" height="613" alt="Screenshot 2025-10-24 at 14 38 12" src="https://github.com/user-attachments/assets/88e013d5-8e0c-4c96-9bde-f15f7b22169c" /> After <img width="411" height="618" alt="Screenshot 2025-10-24 at 14 37 41" src="https://github.com/user-attachments/assets/343db47c-f8db-4c88-9aa2-bcaa8796cdb2" /> <img width="409" height="612" alt="Screenshot 2025-10-24 at 14 37 47" src="https://github.com/user-attachments/assets/d44d2392-a2bc-4812-a0d7-eafdb68096fa" />
Fixed an issue where invoice previews could fail when a website page included map content, because the system could choose the wrong embedded frame. Invoice previews now reliably select the correct invoice content, reducing errors for accounting users.
Original PR description
Support the possibility of multiple iframes being present on the invoice preview page. Steps to reproduce ----- 1. Add a map block to the nav bar of the website. 2. Go to accounting and find an invoice. 3. Click preview and receive a traceback. Cause ----- The use of querySelector works if there is only one iframe element, but map blocks are also iframe elements so adding one with the website editor can cause the wrong iframe to be selected with querySelector. Solution ----- The iframe element that needs to be selected already has an id, so updating querySelector to getElementById resolves the issue. opw-ticket 5170640 Forward-Port-Of: odoo/odoo#232754
When users transfer a VoIP call, the contact search box is now cleared instead of showing the previous search. This prevents confusion and makes it easier to choose the correct person for the transfer.
Original PR description
**Purpose:** Previously, when a contact was searched and made a call. During a call, clicking "Transfer" showed the old search term. **Specification:** Now, the search box is explicitly emptied when transferring the call by resetting this.softphone.addressBook.searchInputValue. **Task-** 5087938 Forward-Port-Of: odoo/enterprise#95102
Fixed an accounting issue where fixed taxes could be computed incorrectly when a transaction used a negative price. This helps ensure accounting entries and bank statement-related calculations remain accurate for refunds, reversals, or other negative-value transactions.
Original PR description
opw-5128767 Forward-Port-Of: odoo/enterprise#97980
This update adjusts an internal website module test so it no longer depends on optional demo data. It helps keep automated checks stable across different test environments, reducing false failures during releases.
Original PR description
runbot-162894 Forward-Port-Of: odoo/odoo#232920 Forward-Port-Of: odoo/odoo#213962
This pull request adds a signed Contributor License Agreement record for a developer. It helps ensure contributions meet Odoo's legal and licensing requirements before inclusion.
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
This pull request records Harold Campo's Contributor License Agreement signature. It is an administrative legal update that enables contributions to be accepted under Odoo's contribution policies and does not change product functionality.
Original PR description
Add CLA for Harold Campo Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: 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#232604