Daily updates from Odoo
Navigate
Branch
Friday, October 24, 2025
194 changes
14 changes
Enhancements to existing features
All Finnish tax report lines now have assigned codes. This helps tax report exports consistently match each line to the correct export template field, reducing the risk of missing or mismatched data.
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
Finnish accounting reports can now generate an export file for tax reporting, making it easier for customers to submit required tax information to the administration. The update also improves automated report export testing to ensure the correct report options are used.
Original PR description
The aim of this commit is adding the tax report export file to allow our customers to send their tax reports to their administration. task-5135868 Forward-Port-Of: odoo/enterprise#97867 Forward-Port-Of: odoo/enterprise#96256
Amazon stock synchronization logs now include the related account ID. This gives support teams better context when investigating customer issues and makes troubleshooting faster.
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
Belgian Point of Sale blackbox messages can now be queued, making interactions faster and more reliable. This helps sales workflows continue smoothly when an immediate blackbox response is not required, such as for pro forma sales messages.
Original PR description
In this commit, we introduce a queuing mechanism for blackbox messages to make all interactions with the blackbox faster and more reliable. This is particularly useful for messages that do not require the response from the blackbox to continue the workflow such as pro forma sales messages. Forward-Port-Of: odoo/enterprise#90747
Resolved issues and error corrections
The China ASBE balance sheet report now includes the correct lines and account mappings so liabilities and totals are balanced accurately. This helps businesses relying on Chinese financial reports get more reliable balance sheet results and reduces the risk of reporting discrepancies.
Original PR description
Fixes the balance_sheet_balanced test for asbe where the wrong line was set as liability. Also fixes the report itself that was ignoring one line, and missing one account. task-5175789 Forward-Port-Of: odoo/enterprise#97720 Forward-Port-Of: odoo/enterprise#97460
Expense users no longer lose selected analytic distributions when they click "Save & Close" on a new expense line. This prevents reporting and allocation errors by ensuring the chosen distribution is retained consistently.
Original PR description
**Issue** When creating an expense line, if the user selects an analytic distribution and clicks "Save & Close", the selected distribution is not saved. However, closing the popup with the "X" icon…
**Issue** When creating an expense line, if the user selects an analytic distribution and clicks "Save & Close", the selected distribution is not saved. However, closing the popup with the "X" icon does trigger the save. **Steps to Reproduce** 1. Go to Expenses > Expense Reports 2. Select an employee (e.g., Ronnie Hart) 3. Add a new expense line 4. Set an Analytic Distribution 5. Click Save & Close 6. Observe that the analytic distribution is not retained **Root Cause** The save behavior is triggered by a window click event, but clicks inside modals (like the analytic distribution popup) do not propagate as expected. Because everything within the popup is modal, the click does not satisfy the criteria to trigger saving the data. **Fix** Refine the modal detection logic in the `onWindowClick` handler. Specifically, allow modals that contain `this.widgetRef.el` to trigger the closing (and thus saving) behavior, ensuring that selections made in such modals are not lost when clicking Save & Close. Opw-4765799 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213996
This fix updates the Vietnam localization migration so only the required tax records are refreshed. It helps protect company-specific accounting settings from being accidentally overwritten during an upgrade.
Original PR description
Problem The previous implementation used try_loading() which would reload the entire chart template, potentially overwriting user-customized configurations settings. Solution Replaced try_loading() with a more targeted approach usin _load_data for account.tax.group and account.tax 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#229476 Forward-Port-Of: odoo/odoo#227918
Spreadsheet documents now show their proper thumbnail in the Documents kanban view instead of appearing as a text preview. This makes it easier for users to recognize and open the right spreadsheet at a glance.
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)
This fix ensures users working with Brazilian AvaTax errors see the tailored product list again instead of a generic product view. The restored view includes Brazil-specific tax fields, inline editing, and a direct button to open the full product form, helping users resolve issues faster and with the right information.
Original PR description
The actionable_errors widget was changed to ignore views if a view_mode key is present in the action [1]. It caused the standard product.product list view to pop up, which doesn't work in this case. The custom views have the relevant Brazilian fields (SPED type etc), can be edited inline, and have a "View" button allowing the user to go to the product form view. The standard view has none of these. [1] odoo/odoo@3bd833c73ea654d8558e3d9701ad41e4d75ddd6 opw-5154766
Spanish point-of-sale receipts now correctly display the company’s state name instead of empty brackets. This prevents confusing or incomplete receipt details for Spanish businesses using simplified invoices.
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
Failed email campaigns with hundreds of thousands of recipients can now be retried in smaller batches. This prevents memory errors during resend attempts, helping larger customers recover campaign delivery without manual intervention.
Original PR description
Steps to reproduce the issue: 1. Have 100s of thousands of recipients on a campaign 2. Disconnect your outgoing server and send 3. Reconnect the mailing server and retry sending. Current behavior before PR: A `MemoryError` is raised due to the large number of emails processed to `unlink()` Desired behavior after PR is merged: Larger-scale clients would be able to resend 100s of thousands of emails if they fail opw-5091567 Forward-Port-Of: odoo/odoo#228446
The Field Service “To Schedule” view now only shows open tasks that still need scheduling or assignment. This prevents completed or cancelled work from appearing in planning lists, helping teams focus on actionable tasks.
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 fixes an editor issue where typing next to a link inside formatted text could lose the surrounding formatting. Users creating links in rich text content will now get more consistent visual results, reducing accidental formatting errors.
Original PR description
Problem: If we add a link on a slice of formatted text we end up being able to type unformatted content at the link edges. Cause: After https://github.com/odoo/odoo/commit/3bcbd6f34facb9c88290dbd6496cc5103665a0a2 the `span` can be split and `feff`s are placed around the link, precisely between the link and the `span`. This allows writing unformatted content at the caret when placed between them. Solution: Ensure that the link is created inside the `span`. Also prevent the formatting applied by `.btn` when the link is inside a `span`. Steps to reproduce: 1. Add "abc". 2. Format all the text: set font size 48 (or whatever). 3. Select "b". 4. Create a link on "b" only. 5. Put caret before "a". 6. Press Arrow left. 7. Type any character. → The character is not formatted as the link content. task-5092298 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231675 Forward-Port-Of: odoo/odoo#228353
Printing landscape PDF reports through a Virtual IoT Box no longer produces cropped portrait pages. The print process now fits the PDF to the page so the report keeps its intended orientation, reducing wasted paper and reprints.
Original PR description
When printing a landscape report using a Virtual IoT Box, we end up printing a portrait page cropped. This commit adds the "pdf fit page" argument to ensure the page printed follows the report orientation. opw-5051809 Task: 5149706 Forward-Port-Of: odoo/odoo#232866
9 changes
Resolved issues and error corrections
The Chinese accounting reports now include the right balance sheet lines and account mapping for ASBE reporting. This helps ensure the balance sheet balances correctly, improving confidence in statutory financial reports.
Original PR description
Fixes the balance_sheet_balanced test for asbe where the wrong line was set as liability. Also fixes the report itself that was ignoring one line, and missing one account. task-5175789 Forward-Port-Of: odoo/enterprise#97720 Forward-Port-Of: odoo/enterprise#97460
Spanish point-of-sale receipts now display the company’s state name instead of empty brackets. This avoids confusing or incomplete receipt information when simplified invoices are issued.
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
This fix updates Vietnam localization migrations so only the necessary tax records are refreshed instead of reloading the full accounting setup. This helps prevent customized accounting configurations from being overwritten during upgrades.
Original PR description
Problem The previous implementation used try_loading() which would reload the entire chart template, potentially overwriting user-customized configurations settings. Solution Replaced try_loading() with a more targeted approach usin _load_data for account.tax.group and account.tax 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#229476 Forward-Port-Of: odoo/odoo#227918
Fixed an issue where grouping sales commission achievements often showed an empty list. The report now uses the correct paging values, so business users can reliably review grouped achievement data.
Original PR description
Before this commit, grouping achievements would result in empty list most of the time. It happened because offset and limit were switched by mistake in the override. As a result an offset of 80 was applied in the request during group by.
Website table bookings now correctly copy the customer's phone number into the appointment. This helps staff see the right contact details for reservations without changing the underlying customer record.
Original PR description
Task: [#5005216](https://www.odoo.com/odoo/project/1737/tasks/5005216) --- The phone number field was not being populated correctly when booking a table from the website. It is now properly filled using the phone number of the `res.partner` associated with the appointment. The field remains unlinked to the partner, as it is just a copy.
Failed mass mailing campaigns with hundreds of thousands of recipients can now be retried without running out of memory. This helps larger customers recover from temporary mail server outages and complete their campaigns more reliably.
Original PR description
Steps to reproduce the issue: 1. Have 100s of thousands of recipients on a campaign 2. Disconnect your outgoing server and send 3. Reconnect the mailing server and retry sending. Current behavior before PR: A `MemoryError` is raised due to the large number of emails processed to `unlink()` Desired behavior after PR is merged: Larger-scale clients would be able to resend 100s of thousands of emails if they fail opw-5091567 Forward-Port-Of: odoo/odoo#228446
The Field Service “To Schedule” view now excludes tasks that are already done or cancelled. This helps teams focus only on work that still needs scheduling or assignment, reducing clutter and confusion.
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 update corrects how delivery information is included in Turkish Nilvera e-invoices, so it appears only when required and in the expected place. This prevents export e-invoices with discounts from being blocked by Nilvera, improving reliability for affected invoicing flows.
Original PR description
The Delivery node is only required for Export E-Invoices. Additionally, the position of the Delivery node should not follow the AllowanceCharge node. This inconsistency in node positioning causes a blocking issue on Nilvera’s side, preventing the successful processing of export E-Invoices with discounts. task-5155802 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230935
Landscape PDF reports printed through a Virtual IoT Box now keep their intended page orientation instead of being cropped as portrait pages. This helps businesses avoid incorrectly printed documents and reduces reprinting or manual fixes.
Original PR description
When printing a landscape report using a Virtual IoT Box, we end up printing a portrait page cropped. This commit adds the "pdf fit page" argument to ensure the page printed follows the report orientation. opw-5051809 Task: 5149706 Forward-Port-Of: odoo/odoo#232866
5 changes
Enhancements to existing features
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 improves troubleshooting and helps support understand customer stock sync problems more quickly.
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
The Field Service 'To Schedule' filter now excludes completed or cancelled tasks. This keeps the list focused on work that still needs scheduling or assignment, reducing confusion for dispatchers and planners.
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
Customers can no longer cancel self-order restaurant orders from their order page once the order has been sent to the kitchen display. This prevents mismatches where the backend order is cancelled but kitchen staff are not informed, reducing operational confusion.
Original PR description
Currently, it is possible to cancel orders that have been sent to the kitchen display. However when doing so, the kitchen displayd does not receive any information about the cancellation. Steps to reproduce: ------------------- - Modify restaurant and enable self ordering - Open self an place an order (not paid but sent to kitchen) - Go back to "My orders" and cancel it > Order is cancelled in backend but not in the kitchen display Why the fix: ------------ When an order is sent to the kitchen the only way to cancel it should be by going to the register. Therefore now, if an order is present on the kitchen display we will not show the cancel button. opw-5030223 Community: https://github.com/odoo/odoo/pull/229039
The shop floor now shows the quantity needed for the specific manufacturing step when adjusting a backorder, instead of showing the remaining total for the full order. This helps operators register production accurately and avoid confusion when different work steps have different remaining quantities.
Original PR description
**PROBLEM** When creating a backorder, the quantity to produce during an operation is correctly displayed on the shop floor step. But when clicking to modify it, the pop over display the total…
**PROBLEM** When creating a backorder, the quantity to produce during an operation is correctly displayed on the shop floor step. But when clicking to modify it, the pop over display the total quantity to produce, and not the quantity to produce in that specific operation. **STEP TO REPRODUCE** 1. create a BoM of product with 3 or more operations 2. Create a Manufacturing order for i.e. 10 unit 3. Open shop floor 4. Register the production in shopfloor: - Op1 – 10 units registered - Op2 – 7 units registered - Op3 – 5 units registered 5. At the end, a backorder is created for 5 units. 6. When we open the wizard to register the production on the Op2, the quantity to produce that is displayed is 5, which is wrong because we only need to produce 3 unit for that step. **CAUSE** When creating the confirmation dialog, we pass the wrong value `qty_remaining` which is the quantity of product we will end after finishing the Manufacturing Order. **FIX** We should pass `qty_production` instead which is the quantity to produce for the specific step. opw-5011739 Forward-Port-Of: odoo/enterprise#97906 Forward-Port-Of: odoo/enterprise#93599
Payments through Six terminals now use the active POS user's identity instead of relying on a session value that could become unavailable. This prevents payment startup issues when a different user opens or continues a POS session in another browser tab.
Original PR description
This commit fixes an undefined `user_id` on the pos session when trying to start a payment with a Six terminal from another user than the one that started the session. Before this commit: - open a pos session with Mitchell Admin, - check the value of `pos.session.user_id` (it will be `2`), - open another tab and connect as Marc Demo, - check the value of `pos.session.user_id` again: it should be `6`, but instead is `undefined`. After this commit: We use `pos.user.id` instead of `pos.session.user_id.id` to get the user ID. opw-5055977 Forward-Port-Of: odoo/enterprise#97975
31 changes
New functionality added to Odoo
Finnish localization now supports exporting tax reports in the required file format, helping customers submit tax information to the administration more easily. The update also improves report export testing to ensure the correct report options are used when generating export files.
Original PR description
The aim of this commit is adding the tax report export file to allow our customers to send their tax reports to their administration. task-5135868 Forward-Port-Of: odoo/enterprise#97867 Forward-Port-Of: odoo/enterprise#96256
Enhancements to existing features
The Taiwanese localization now provides improved balance sheet and profit and loss reports that better match common local business practices. Older versions of these reports have been deprecated or removed, giving users a cleaner and more relevant reporting experience.
Original PR description
This commit adds new improved accounting reports (balance sheet & profit & loss), providing users with improved reports that aligns better with the common Taiwanese business practices. The old balance sheet and profit & loss reports are depreciated and will be fully removed in later versions. [Task-4915057](https://www.odoo.com/odoo/project.task/4915057) Forward-Port-Of: odoo/enterprise#94443
The option to create batch payments is now available to users working in invoicing, rather than being limited by a narrower access group. This makes payment processing easier for finance teams by allowing the right invoicing users to perform the action directly.
Original PR description
This commit will change the security group of the create batch payment action, to be available in invoicing. task-5187435 Forward-Port-Of: odoo/enterprise#97884
Amazon stock synchronization logs now include the related account ID. This gives support teams clearer context when investigating customer stock sync issues and should help speed up troubleshooting.
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
When a user manually selects an emission factor on an account move line, the system now creates a matching assignment rule for future use. This reduces repeated manual work and helps apply consistent carbon emission tracking for similar product or partner transactions.
Original PR description
Before this commit, when the user assigns an emission factor to an account move line, no assignation rule is created based on that, which means the user has to either manually create an assignation rule into emission factor or each time select that emission factor for the same product/partner set on other account move line. This commit automatically generates an assignation rule into emission factor when the emission factor is manually set into an account move line. By doing that, the user will be able to use the assignation rule to automatically assign that emission factor to other account move lines. task-4933207 Forward-Port-Of: odoo/enterprise#97736
The German tax report has been reorganized after removing the balance column, so the related calculations and report logic continue to work consistently. This helps keep German tax reporting clear and reliable for users without changing the overall reporting purpose.
Original PR description
After removing the balance column, we need to refactor the code that depends on it task-5046641 Forward-Port-Of: odoo/enterprise#97486
The VoIP softphone history view now includes a "More history..." button at the end of the history tab. This makes it easier for users to load and review older calls without changing screens or searching manually.
Original PR description
Task-5178613
This update aligns Enterprise modules with recent core access-control performance changes. Knowledge now refreshes its permission cache after members are invited, helping ensure access updates take effect correctly while keeping permission checks faster.
Original PR description
odoo/odoo#204996
Employees' blocked time off can now be deferred to a future payroll period when the current period is locked. This keeps pending leave visible on future payslips and helps payroll teams apply it automatically when an available period exists, with a clear error if no suitable days remain.
Original PR description
In this commit, we introduced the ability to defer blocked time off so that open time off appears in every month, not just the current one. This ensures deferred leaves are visible on the employee's new payslip. - Automatically generate missing work entries and apply the leave in one go - If work entries are locked, move the leave to the next period and apply it - If no unlocked work entries exist until the contract end, raise error 'Impossible to post-pone the time off. There are no available days.' - Display defered timeoff warning message in all future payslips, and not only the current month payslip. Related task: 5126292.
Several Odoo business areas now calculate stored values directly in the database instead of through slower application-side processing. This should improve performance and responsiveness for budgets, follow-ups, reports, databases, and documents without changing day-to-day workflows.
Original PR description
Use the new method to compute directly in SQL. https://github.com/odoo/odoo/pull/221544
Resolved issues and error corrections
The Chinese accounting balance sheet report has been corrected so liabilities are classified properly and all relevant lines and accounts are included. This helps businesses using Chinese reporting get balanced, more reliable financial statements and avoids misleading test results.
Original PR description
Fixes the balance_sheet_balanced test for asbe where the wrong line was set as liability. Also fixes the report itself that was ignoring one line, and missing one account. task-5175789 Forward-Port-Of: odoo/enterprise#97720 Forward-Port-Of: odoo/enterprise#97460
Subscription recurring totals now correctly use amounts returned by external tax calculators instead of being recalculated internally. This prevents incorrect totals on subscriptions that rely on external tax services, improving billing accuracy.
Original PR description
sale_subscription now uses `account.tax` to recalculate the tax amounts [1], thus bypassing amounts set by external calculators. For externally calculated orders, we override the recurring_total calculation to restore the previous behavior of calculating the amount using `price_subtotal` on the lines. This field will contain the amount returned by the external calculator. [1] https://github.com/odoo/enterprise/commit/70376f94e9f26e631890312edc0857d9ff37dc7b opw-4964610 Forward-Port-Of: odoo/enterprise#94855 Forward-Port-Of: odoo/enterprise#93054
Field Service users can now see and select task templates from the app even when more than one field service project exists. This fixes a workflow blocker that prevented teams from using predefined task templates in multi-project setups.
Original PR description
**Steps to reproduce:** - Install the industry_fsm module. - Create a new FSM project. - Create a task template under that project. - Go to the Field Service (industry_fsm) app. - Check the Kanban view (dropdown action). **Issue:** When there are multiple FSM projects, users cannot select FSM task templates from the FSM app. **Cause:** The default_project_id is not passed in context. **Fix:** With this change, users can now see and select FSM task templates even when multiple FSM projects exist. task-5139928 Forward-Port-Of: odoo/enterprise#96617
Belgian point-of-sale receipts now show the original unit price before discounts using the correct pricing method. This helps customers and businesses see discount information accurately on receipts.
Original PR description
Use dedicated method `getUnitDisplayPriceBeforeDiscount()` to display the line old (before discount) unit price on the receipt. task-id: 5011427 Forward-Port-Of: odoo/enterprise#97273
The Field Service task list now shows only open tasks in the To Schedule view. This prevents completed or cancelled work from appearing as still needing planning, helping teams focus on actionable tasks.
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 update fixes several issues when launching AI chat from form views and the systray, including missing message recipients, crashes on some records, and missing record context. It also makes built-in AI agents easier to find and adjust, helping users configure AI behavior without technical workarounds.
Original PR description
Currently: - when using the "Send as Message" button in a chat with an agent (opened from the systray), the default recipients are not added in the composer - creating a default prompt for "get help…
Currently: - when using the "Send as Message" button in a chat with an agent (opened from the systray), the default recipients are not added in the composer - creating a default prompt for "get help on a record" on a model that does not inherit from `mail.trhead` does not work: it's the default "ask ai" chat that is opened when clicking on the "ai" button in the systray from this record's form view ( the "prompt buttons" created are not shown and the record info is not added in the prompt) - clicking on this ai button in the systray from the res.users form view results in a crash (one tries to fetch a thread because the model has a "message_ids" field, but it's a related field and the model does not have a thread) - "system agents" are not shown in the agent views, making it difficult to edit them (while one user could want to change the model used by a system agent if that user does not have an api key for the provider of the default model) With this PR: - adds the default recipients (and creates their related partner if needed, as it would be done when opening the full composer from the chatter) - the info about the current record is always added to the context when using the ai systray button from a form view, even if there's no chatter - the "send as message" and "log note" are added from the launch chat service, only if the model inherits from `mail.thread` (instead of relying on the field `message_ids`) - moved the call to open the ai chat back to the form controller to avoid sending 2 events on the bus (currently systray sends an event to the form controller which in turn sends an event with the model info to the systray), and to make it easier to reuse this "open chat with agent" (shouldn't need to always go through the systray for that) - the "system agents" are now shown in the agents views. Their name/description have therefore been reworked. The website page generator and call summarizer agents are now archived by default, as they are only used in very specific contexts Task-5109721 Forward-Port-Of: odoo/enterprise#95638
This fixes an issue where printing PDF documents through IoT in manufacturing work orders could fail with an error. The change ensures document identifiers are passed in the expected format, making printing more reliable for shop floor operations.
Original PR description
Due to `active_ids` being provided with a `list[list]` instead of just `list`, pdf document rendering was returning a traceback. This commit fixes the issue by flattening the list passed to the context of the client action. (e.g. `res_ids` was provided `[[21, 22], [21, 22]] instead of [21, 22, 21, 22]`). opw-5190570 Forward-Port-Of: odoo/enterprise#98003
Spreadsheet files in Documents now show their proper thumbnail on kanban cards instead of a plain text preview. This makes it easier for users to recognize and open the right spreadsheet at a glance.
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 Sign app now converts auto-filled HTML field content into readable plain text in signed PDFs. It also prevents an error when constant multi-line fields are used, helping users complete documents without crashes or unusable formatting.
Original PR description
Before this task, when a html field is used to populate auto value, the html is kept, making it unusable. Moreover, JS error prevent to use constant multi line fields. task-5104647 Forward-Port-Of: odoo/enterprise#95196
The employee offer signature button now works correctly when an offer has been signed more than once. HR users are shown all related signature requests instead of hitting an incorrect single-request view, making follow-up smoother and avoiding confusion.
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 fixes an issue where HTML content created through AI fields could appear as escaped text instead of rendering properly. The change ensures sanitized AI-generated content is handled correctly, improving the display experience without affecting standard HTML fields.
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 Forward-Port-Of: odoo/enterprise#95038
The French VAT reporting export now sends address and location details in the format expected by ASPOne. This reduces the risk of report submission errors caused by invalid address fields or outdated templates.
Original PR description
This commit check that all the information that we send to aspone follow the constraint. By checking the xsd file, here what has been modified: - AdresseType is depreciated so we add AdresseRepetabilite - Adding a comment to remove a template not used in master - postal_code needs to have maximum 17 character - city needs to have maximum 35 character task-5169258 Forward-Port-Of: odoo/enterprise#97346
This fixes Belgian SEPA payment XML files in the pain.001.001.03 format so they include the required end-to-end payment reference. This helps banks process payment batches correctly and avoids validation issues caused by missing reference data.
Original PR description
The XML of the sepa file in format `pain.001.001.03` in `l10n_be` has a missing `EndToEndId` tag. - Configure the bank to use the `pain.001.001.03` sepa xml format. - Generate a payment using sepa. Create a batch for this payment and validate. - The resulting xml has an empty `EndToEndId` tag. Commit fa08eac141956141bc12c1d5619bd57f487c36e9 removed the end_to_end_id used in the tag. The correct format of the tag is end_to_end_uuid. opw-5150525 Forward-Port-Of: odoo/enterprise#97746
This update corrects how attachment fields are handled in several Odoo Enterprise areas so users can find and use related files as intended. It helps prevent avoidable issues when working with return reports or social post templates that include attachments.
Original PR description
Follow-up of fd4fcb1bd87, we should set `bypass_search_access` on `ir.attachment` many2many fields. Forward-Port-Of: odoo/enterprise#97390
Point of Sale sessions now use the currently signed-in user when starting payments through a Six terminal. This prevents payment startup failures when a different employee opens or continues a POS session in another browser tab.
Original PR description
This commit fixes an undefined `user_id` on the pos session when trying to start a payment with a Six terminal from another user than the one that started the session. Before this commit: - open a pos session with Mitchell Admin, - check the value of `pos.session.user_id` (it will be `2`), - open another tab and connect as Marc Demo, - check the value of `pos.session.user_id` again: it should be `6`, but instead is `undefined`. After this commit: We use `pos.user.id` instead of `pos.session.user_id.id` to get the user ID. opw-5055977 Forward-Port-Of: odoo/enterprise#98021 Forward-Port-Of: odoo/enterprise#97975
This fix prevents an error when posting work-in-progress accounting entries for manufacturing work orders that are still in progress. Users can now open the WIP wizard as expected instead of being blocked by a traceback.
Original PR description
Issue: - Traceback when calculating the cost of a workorder Step to reproduce: - with apps: mrp, accountant - create a MO for a product - add a WO - confirm - start the WO - Action > "Post WIP Accounting entry" Current Behavior: - get a traceback Expected behaviour - open the WIP wizard Cause of the issue: - to calculate the cost of production, wizard use all WO including the one still running. However as it is still running its end date is registered as `False`. It raises a traceback when it compares the end of the WO with a limit date because `bool` and `datetime.datetime` are not compatible for '<'. Solution: - check if the end date of the WO is defined Test: - in module mrp_workorder an override of button_start change how work order are launched. Therefore, the test should be launched on an Enterprise run. opw-4961873 Forward-Port-Of: odoo/enterprise#97912 Forward-Port-Of: odoo/enterprise#93812
Fixed an issue where grouping sales commission achievements often returned empty results. Business users can now view grouped achievement data reliably, improving commission reporting accuracy.
Original PR description
Before this commit, grouping achievements would result in empty list most of the time. It happened because offset and limit were switched by mistake in the override. As a result an offset of 80 was applied in the request during group by. Forward-Port-Of: odoo/enterprise#97959
Users whose contact record is linked to multiple user accounts can now create spreadsheets from the Documents app without triggering an error. This prevents a blocking crash in a specific contact-sharing or contact-merge situation, improving reliability for affected users.
Original PR description
Before this commit: 1. connect with a user, the partner_id of which is linked to multiple users via the user_ids field (this can be done by manually setting it, or by merging contacts, for example) 2. go to the Documents app, click new, then spreadsheet --> expected singleton Traceback opw-5133850 Forward-Port-Of: odoo/enterprise#97767
This update corrects how fixed taxes are calculated when an accounting line has a negative price, such as refunds or reversals. It helps ensure tax amounts remain accurate in bank statement and accounting workflows, reducing the risk of incorrect financial records.
Original PR description
opw-5128767 Forward-Port-Of: odoo/enterprise#97980
Code cleanup and technical improvements
Discuss-related files for WhatsApp messaging were moved into a clearer sidebar location. This is an internal cleanup that helps maintain the messaging codebase without changing the user experience.
This update modernizes automated tests across several enterprise modules by replacing older testing methods with the current supported approach. It does not change customer-facing features, but helps keep future development reliable and easier to maintain.
23 changes
New functionality added to Odoo
Finnish accounting reports can now generate an export file for tax reporting, helping customers submit required tax information to the Finnish administration more easily. The update also improves automated checks so report export files are generated with the correct settings.
Original PR description
The aim of this commit is adding the tax report export file to allow our customers to send their tax reports to their administration. task-5135868 Forward-Port-Of: odoo/enterprise#97867 Forward-Port-Of: odoo/enterprise#96256
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
This improves the speed of switching a product category between manual and real-time inventory valuation, especially for categories with very large numbers of product variants. In the reported case, a process that previously timed out after more than 15 minutes completed in about 18 seconds, reducing delays for inventory and accounting operations.
Original PR description
Changing a product.category's valuation from manual to real-time or real-time to manual does mainly two things. The first one is emptying the current stock and valuation. The second is to replenish…
Changing a product.category's valuation from manual to real-time or real-time to manual does mainly two things. The first one is emptying the current stock and valuation. The second is to replenish the stock according to the new valuation. This process can be heavy when the number of product.products related to the active product.category is big. This can happen when product.attributes are set to "Creation: Instantly" for instance. This commit aims at improving the overall speed of this change in some cases. A first optimization is to use `product_tmpl_id` to retrieve the `product_variant_ids`. When there are a lot of products, it's faster to explicitely use the delegated field `product_tmpl_id`. This avoids lots of calls to `__getitem`/`__setitem__` in `_compute_related`. The downside of doing this is that subsequent calls to `self.product_variant_ids` are gonna raise a CacheMiss. So we have to explicitely use `product_tmpl_id.product_variant_ids` every time. We argue that it's not really an issue here as retrieving the variant_ids from a product.product itself is not that frequent in the codebase. A second optimization is to avoid calling `product.qty_available` in `_compute_value_svl` in case `avg_cost = 0`. With an avg_cost of 0, the total_value is always going to be 0. So there's no point in calling the heavy compute method `_compute_quantities` to retrieve `qty_available` here. #### speedup In a database with 228 000 product.products linked to the same product.category, the time to switch the category valuation from manual to real-time: +15min (timeout) -> 18s --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231206
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
Hong Kong payroll declaration forms now include chatter, allowing users to track discussions and activity directly on the forms. This improves collaboration and record visibility for teams handling payroll declarations.
Original PR description
Based on HK feedback, chatter is added on their declaration forms task:5067386
The German tax report has been reworked after the balance column was removed, ensuring the report logic and tests match the new layout. This helps keep German tax reporting accurate and consistent for businesses using Odoo.
Original PR description
After removing the balance column, we need to refactor the code that depends on it task-5046641
The German tax report has been reorganized to better match the official ELSTER VAT filing structure. This makes the report easier to follow for German businesses and helps align Odoo's tax reporting with expected filing categories.
Original PR description
Rework the structure of the German Tax Report according to the very well detailed structure https://sevdesk.de/ratgeber/buchhaltung-finanzen/ustva/formular-elster/ task-5046641 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
The China ASBE balance sheet report now classifies liabilities correctly and includes previously omitted report data. This helps ensure financial statements balance as expected and improves confidence in statutory reporting.
Original PR description
Fixes the balance_sheet_balanced test for asbe where the wrong line was set as liability. Also fixes the report itself that was ignoring one line, and missing one account. task-5175789 Forward-Port-Of: odoo/enterprise#97720 Forward-Port-Of: odoo/enterprise#97460
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
This fix changes the Vietnam localization migration so tax updates are applied more selectively. Businesses keep their customized accounting settings during the update, reducing the risk of unexpected configuration changes.
Original PR description
Problem The previous implementation used try_loading() which would reload the entire chart template, potentially overwriting user-customized configurations settings. Solution Replaced try_loading() with a more targeted approach usin _load_data for account.tax.group and account.tax 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#229476 Forward-Port-Of: odoo/odoo#227918
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
Fixes a problem that could stop very large email campaigns from being retried after a mail server outage. Failed emails are now retried in smaller batches, helping larger customers recover campaigns with hundreds of thousands of recipients more reliably.
Original PR description
Steps to reproduce the issue: 1. Have 100s of thousands of recipients on a campaign 2. Disconnect your outgoing server and send 3. Reconnect the mailing server and retry sending. Current behavior before PR: A `MemoryError` is raised due to the large number of emails processed to `unlink()` Desired behavior after PR is merged: Larger-scale clients would be able to resend 100s of thousands of emails if they fail opw-5091567 Forward-Port-Of: odoo/odoo#228446
Subscription orders that use an external tax calculator now keep the externally calculated amounts when showing recurring totals. This prevents recurring totals from being recalculated incorrectly and helps customers see accurate subscription charges.
Original PR description
sale_subscription now uses `account.tax` to recalculate the tax amounts [1], thus bypassing amounts set by external calculators. For externally calculated orders, we override the recurring_total calculation to restore the previous behavior of calculating the amount using `price_subtotal` on the lines. This field will contain the amount returned by the external calculator. [1] https://github.com/odoo/enterprise/commit/70376f94e9f26e631890312edc0857d9ff37dc7b opw-4964610 Forward-Port-Of: odoo/enterprise#94855 Forward-Port-Of: odoo/enterprise#93054
This fix prevents crashes when users quickly drag and drop multiple cards in large grouped Kanban views. It makes the interface handle background refreshes more safely, improving stability for teams working with many records at once.
Original PR description
On a grouped kanban view displaying a lot of records (i.e. with a lot of columns and a lot of records by column), drag and drop several records from the same column quick multiple times. Before this…
On a grouped kanban view displaying a lot of records (i.e. with a lot of columns and a lot of records by column), drag and drop several records from the same column quick multiple times. Before this commit, different crashes could occur. The first category of crashes concern the sortable hook. It called the onDrop callback even if the dragged element was no longer in the DOM (which occurs if there's a re-rendering while the user is dragging). This has been fixed in the hook, and tested. Another crash could arise in kanban (in the model). If the user dropped the card while there was a scheduled/ongoing re-rendering, i.e. at a specific moment where the model isn't synchronized with the DOM, the dropped card was still in the DOM, but it's associated datapoint was no longer referenced in hte model. In that case, we can do nothing but cancel the d&d. Note that this couldn't be tested, as reproducing the exact behavior (typically having a slow rendering due to the number of cards to render) isn't possible in a unit test, where user interactions are done programmatically. Task~5167650 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#232353 Forward-Port-Of: odoo/odoo#231886
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
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 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
15 changes
Enhancements to existing features
This update improves how Odoo reports and cleans up failures when automated browser-based tests cannot start Chrome. It makes test infrastructure issues more visible to maintainers and helps avoid leftover browser processes or temporary files on test machines.
Original PR description
If we can't find the devtools port file after 10 seconds we skip the test, however - this is an invisible error because the runbot does not surface skipped tests, so this specific variant should also…
If we can't find the devtools port file after 10 seconds we skip the test, however - this is an invisible error because the runbot does not surface skipped tests, so this specific variant should also have a warning (also the skip from not finding a chrome executable) - if chrome started but got stuck before it managed to create the port file we don't `stop` the chromebrowser as it never finished starting, however this means we leave a chrome running in the void a `user_data_dir` littering the machine / vm's tempdir So improve the handling of that bit. Also have chrome write its stderr to a file (in the `user_data_dir`) so we can log that out in case it contains useful information as to why chrome didn't finish booting. While at it backport the spawn changes from #206574 for consistency and simplicity: we don't need to test the platform for every single tour and the indirection makes updating the `Popen` parameters unnecessary complicated. Forward-Port-Of: odoo/odoo#232633 Forward-Port-Of: odoo/odoo#232612
Resolved issues and error corrections
This fix prevents an accounting process from failing when it encounters an empty value where a number is expected. It helps users continue their workflow without seeing an unexpected ValueError.
Original PR description
Description of the issue/feature this PR addresses: ValueError: invalid literal for int() with base 10: '' Current behavior before PR: ValueError: invalid literal for int() with base 10: '' Desired behavior after PR is merged: not giving valueerror --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue in Odoo's Spreadsheet app. It helps users work with spreadsheets more reliably, reducing disruption when using spreadsheet-related views or documents.
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 update adjusts spreadsheet-related testing assets to correct the reported FRGI testing issue. It helps keep spreadsheet behavior reliable and reduces the risk of test-related regressions affecting future changes.
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
Spreadsheets without a custom thumbnail now show a spreadsheet-specific default image instead of a generic placeholder. This makes document previews clearer and helps users identify spreadsheet files more easily.
Original PR description
## Description Before this fix, when a spreadsheet had no thumbnail, the system displayed the generic web placeholder image (`web/static/img/placeholder.png`). This PR updates the logic to display a more relevant default image specific to spreadsheets (`/spreadsheet/static/img/spreadsheet.svg`) when no thumbnail is available. Task: [4963284](https://www.odoo.com/odoo/project/2328/tasks/4963284)
This update makes automated checks for the two-factor authentication setup flow more dependable by replacing fragile timing-based steps with clearer confirmation points. It reduces intermittent test failures under load, helping teams validate security-related workflows with fewer false alarms.
Original PR description
- Remove timing-sensitive check on modal closed, wait for the row to be deselected instead (this assumes the list view has been reloaded and can be interacted with again, whereas the security check modal is closed before we actually run the action) (?). - Replace odd and somewhat brittle `run()` functions by equivalent (or better) triggers, with or without ~~you~~ clicks. - Replace a few waits on modals closed by waits on the corresponding notification appearing, this is likely more reliable. Locally this looks to be making the totp tours a *lot* more reliable under load, hopefully this also works on runbot: this aims to solve a jumble of uncommon non-deterministic errors: - https://runbot.odoo.com/odoo/error/161302 - https://runbot.odoo.com/odoo/error/107908 - https://runbot.odoo.com/odoo/error/161302 - https://runbot.odoo.com/odoo/error/233265 - https://runbot.odoo.com/odoo/error/233513
The French FEC import now uses a valid debit account when handling rounding differences. This prevents import issues caused by a chart of accounts change where the previous account code became a grouping account instead of a usable account.
Original PR description
This commit:https://github.com/odoo/odoo/commit/0ebf80b613d229ef5fb07ea97d406496f9df6254 change the COA of french localisation and the account 6850 was change to be an account group instead. This commit will change the debit account code used to put an existing one instead. no task-id Forward-Port-Of: odoo/enterprise#96972
Failed mass mailing emails are now retried in smaller batches instead of all at once. This helps large campaigns recover after an email server outage without crashing, making resend operations more reliable for high-volume customers.
Original PR description
Steps to reproduce the issue: 1. Have 100s of thousands of recipients on a campaign 2. Disconnect your outgoing server and send 3. Reconnect the mailing server and retry sending. Current behavior before PR: A `MemoryError` is raised due to the large number of emails processed to `unlink()` Desired behavior after PR is merged: Larger-scale clients would be able to resend 100s of thousands of emails if they fail opw-5091567 Forward-Port-Of: odoo/odoo#228446
The Field Service “To Schedule” view now excludes tasks that are already done or cancelled. This keeps teams focused on work that still needs scheduling or assignment and avoids confusion from completed or 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
Imported Italian supplier bills no longer apply the same discount twice when the XML contains both a discount section and a matching negative line. This helps keep bill totals accurate and avoids manual corrections after import.
Original PR description
When importing a bill in an IT company the system will automatically parse the xml and populate the record. In case of discount, an element <ScontoMaggiorazione> will be present, either for the whole document or for a single line. However, an extra negative line may be present in the xml representation of the bill, creating a double discount **Steps to reproduce** - With an IT Company setup - Import an xml bill having <ScontoMaggiorazione> element and a negative line representing the same discount **Issue** Double discount line will be created in the bill **Analysis** This occurs because, when parsing the bill, the system will import also negative lines, even if a discount has been already applied opw-4913335 [Ticket link](https://www.odoo.com/odoo/project/49/tasks/4913335) Forward-Port-Of: odoo/odoo#225044
This fix ensures landscape PDF reports print in the correct orientation when sent through a Virtual IoT Box. It prevents pages from being printed as portrait and cropped, helping users get complete, properly formatted printed reports.
Original PR description
When printing a landscape report using a Virtual IoT Box, we end up printing a portrait page cropped. This commit adds the "pdf fit page" argument to ensure the page printed follows the report orientation. opw-5051809 Task: 5149706 Forward-Port-Of: odoo/odoo#232866
Fixes a problem where Spanish VeriFactu credit note errors could stop the automatic invoice sending task, preventing other invoices from being sent. Affected credit notes are now reported as errors while valid documents continue through the normal sending process.
Original PR description
### Steps to reproduce: - Install l10n_es_edi_verifactu and switch too Spanish company - Create an invoice, add a nonzero product and Confirm - Select "Reverse" to create a credit note - Confirm the…
### Steps to reproduce: - Install l10n_es_edi_verifactu and switch too Spanish company - Create an invoice, add a nonzero product and Confirm - Select "Reverse" to create a credit note - Confirm the credit note - Select Send (or Send and Print), deselect everything except VeriFactu and email, then select Confirm - An error appears that takes the user to the failed record - Navigate to Accounting > Customers > Credit Notes - Select the credit note created and at least one other credit note, then select "Send" - Navigate to Settings > Technical > Scheduled Actions - Click into the "Send Invoices Automatically" record, then select "Run Manually" - Version 18.3: the scheduled action fails, no error message appears. The traceback can be seen in the logs - Version 18.0 and lower: The scheduled action fails, but an error message does appear ### Cause: When trying to generate the verifactu documents for a credit note whose invoice has no verifactu document, a `RedirectError` is raised. This means the scheduled action "Send invoices automatically" is cancelled if only one credit note as this issue: no invoices are sent. ### Solution: The usual way to handle user errors with the scheduled action is to append the key 'error' in the dictionnary `send_and_print_values`. This way a message is displayed when running the scheduled action mentioning the moves in error. So we check do the checks and remove the invalid moves before calling `_l10n_es_edi_verifactu_mark_for_next_batch()`. Like this we can change the key "error" in the dictionnary and stop the document generation there. We also extend `_hook_if_errors()` to raise a `RedirectWarning` if it's one of the errors related to Verifactu that we removed. opw-5091347 Forward-Port-Of: odoo/odoo#230762
This fixes an issue where users could accidentally clear a drawn signature while still in the middle of drawing, yet the document would still allow signing. The signature flow now avoids that accidental clearing so users cannot submit a blank signature by mistake.
Original PR description
To reproduce: ============= - upload a doc, add a signature field, sign now, open the signature wizard - go in draw mode - draw something - erase - draw something, keep the click on and go outside the box - press enter, this will remove the content - release the click --> box is blank and "sign" and "sign all" buttons are available and can sign the doc. Problem: ======== when clearing while drawing, the listner for mousedown is still active and when releasing the click outside the box, it triggers the mouseup event which makes `isEmpty=false` and enables the sign button. Solution: ========= don't allow clearing while drawing. opw-5071981 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix keeps Colombian DIAN electronic invoices aligned with local reporting requirements after a related platform change. It removes an extra tax currency field from the DIAN XML because tax amounts are already reported in Colombian pesos and currency conversion details are covered elsewhere.
Original PR description
In the related community PR we added the `TaxCurrencyCode` node for the (generic) UBL format. To avoid modifying the DIAN XML generation we remove this node / information here. In DIAN all the tax information is given in COP anyway and there are the `SourceCurrencyCode` and `TargetCurrencyCode` to cover all the currency information. task-4885680
Documentation and clarification updates
This pull request adds Harold Campo's signed Contributor License Agreement record. It supports Odoo's contribution compliance process and has no impact on product features or users.
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: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
3 changes
Resolved issues and error corrections
Website editing now handles repeated undo and redo actions correctly when changing header content. This prevents duplicated Contact Us buttons and badges from reappearing unexpectedly, making page editing more reliable.
Original PR description
*=website Steps to Reproduce : 1. Go to `edit` mode. 2. Drop at least four block snippets. 3. Drop a badge in the header next to the _Contact Us_ button. 4. Undo twice → the _Badge_ reappears. 5.…
*=website Steps to Reproduce : 1. Go to `edit` mode. 2. Drop at least four block snippets. 3. Drop a badge in the header next to the _Contact Us_ button. 4. Undo twice → the _Badge_ reappears. 5. Undo twice more → the _Badge_ reappears again. 6. Redo three times → the _Contact Us_ button is duplicated. Issue: The `Contact Us` button in the header was duplicated after multiple undo/redo actions. Moreover, the `Badge` snippet did not behave as expected during undo/redo. Reason: When the uncommitted draft was cleared before undo/redo, the `OdooEditor` observer triggered the `OdooField` observer to roll back and flush mutations. However, this rollback was considered a new mutation by the `OdooEditor` observer. On the next undo, the `OdooField` observer tried to sync with these artificial mutations, causing duplication of buttons and badges. Fix: Deactivate the `OdooEditor` observer during undo/redo operations to prevent recording unnecessary mutations. After discarding the draft, reactivate the `OdooEditor` observer. This avoids redundant syncs and resolves the duplication issue. task-4558376
Documentation and clarification updates
This pull request adds Harold Campo's signed Contributor License Agreement record. It supports Odoo's contribution process by confirming the required legal paperwork is in place before contributions are accepted.
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
Miscellaneous changes
This pull request changes spreadsheet-related files, but the provided title, description, and commit message do not explain the business purpose. Based on the available information, it appears to be a minor internal change with no clear user-facing impact identified.
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