Daily updates from Odoo
Friday, October 10, 2025
38 changes
3 changes
Enhancements to existing features
UBL invoice exports now include the delivery party in the delivery information. This gives recipients clearer shipping details by using the shipping contact when available, or the customer name as a fallback, while keeping existing delivery location and date behavior unchanged.
Original PR description
Previously, the Peppol UBL export only covered the mandatory delivery fields and did not include the `delivery party`. This commit adds the `<cac:DeliveryParty>` element under `<cac:Delivery>` to improve the exported information. - Include `<cac:DeliveryParty>` in the `<cac:Delivery>` section of UBL invoices. - Use the shipping partner name if set; otherwise, fallback to the customer name - Keep existing `<cac:DeliveryLocation>` and delivery date logic unchanged. <img width="766" height="306" alt="image" src="https://github.com/user-attachments/assets/d07c1b37-4c6d-42d1-99b4-66c5abc8e298" /> ----- task-5022404 Forward-Port-Of: odoo/odoo#223756
Point of Sale users can now mark a terminal payment as completed even when Odoo is still waiting for card confirmation. This helps cashiers avoid blocked checkouts when the payment succeeded on the terminal but the system did not receive the status update.
Original PR description
Current behavior before PR: If we faced an issue with a terminal payment while the `line.payment_status` being "waitingCard", only possible option for the user would be to "Cancel" the payment and try again or choose another payment method. This is an issue for the cases where the payment went through on the terminal but Odoo didn't update the status for some reason. Desired behavior after PR is merged: We add the possibility to "Force done" while the status is "waitingCard" to avoid blocking the user in such situations and have a possible fallback. opw-4978772 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229557 Forward-Port-Of: odoo/odoo#228406
Updating customer contact details linked to many Helpdesk tickets now uses far less memory. This helps prevent errors when changing fields like phone, email, or name for customers with large ticket histories.
Original PR description
Issue: When updating partner fields such as `email`, `name` and `phone` on the partner records, the ticket fields are recomputed. During the recomputation, the `description` field is loaded into…
Issue: When updating partner fields such as `email`, `name` and `phone` on the partner records, the ticket fields are recomputed. During the recomputation, the `description` field is loaded into memory and with many helpdesk tickets, this will cause a memory error. Purpose of this PR: To explicity fetch `partner_id` before computing partner fields on the helpdesk ticket. Example: With a partner record with 25,000 helpdesk tickets each with a description of varying text and images, we hit the memory limit when trying to update the partner phone. With these changes, peak memory usage reached 271.4 MB. Notes: Originally wanted to avoid changing the field definition however this would require adding `with_context(prefetch_fields=False)` to most of the compute methods on helpdesk ticket model.`with_context(prefetch_fields=False)` to most of the compute methods on helpdesk ticket model. Memgraph and Stats before changes <img width="1912" height="862" alt="memgraph_b4_changes" src="https://github.com/user-attachments/assets/f5e95a42-83c8-4250-bdf3-440740a9fb33" /> <img width="640" height="352" alt="stats_b4_changes" src="https://github.com/user-attachments/assets/a82ccd69-1359-4ba8-81a0-52aeace762db" /> opw-5069424 Forward-Port-Of: odoo/enterprise#96198
3 changes
Enhancements to existing features
Tax calculation helpers now handle proportional distribution internally instead of relying on callers to prepare values in advance. This reduces the risk of rounding or sign-related inconsistencies in accounting calculations and makes future maintenance safer.
Original PR description
At the moment, `_distribute_delta_amounts_smoothly` requires the factors to be pre-nomalized. However, normalizing the factors robustly requires more logic than just dividing by the sum of factors, especially if the factors have different signs. This commit moves the normalization into `_distribute_delta_amounts_smoothly` itself meaning the calling code doesn't need to take care of it anymore. task-none
Point of Sale users can now mark an electronic terminal payment as completed when it remains stuck waiting for a card response. This helps cashiers finish orders when the payment succeeded on the terminal but Odoo did not receive the update, reducing checkout delays and unnecessary retries.
Original PR description
Current behavior before PR: If we faced an issue with a terminal payment while the `line.payment_status` being "waitingCard", only possible option for the user would be to "Cancel" the payment and try again or choose another payment method. This is an issue for the cases where the payment went through on the terminal but Odoo didn't update the status for some reason. Desired behavior after PR is merged: We add the possibility to "Force done" while the status is "waitingCard" to avoid blocking the user in such situations and have a possible fallback. opw-4978772 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229557 Forward-Port-Of: odoo/odoo#228406
Belgian POS blackbox setups now get a preparatory IoT action that prompts users to update their IoT device. This helps ensure systems are ready for an upcoming queue-based communication change between the POS and blackbox, reducing rollout friction later.
Original PR description
This commit is the first of two which will introduce a queue mechanism in the communication between the POS and the blackbox. This commit adds an action to the iot and invites users to update their iot to be prepared for the next commit which will effectively add the queue mechanism and use the new action. Second part: https://github.com/odoo/enterprise/pull/90747
1 change
Enhancements to existing features
Updating customer details such as phone, email, or name no longer risks overloading Helpdesk when the customer has many tickets. The change reduces memory use during these updates, helping large support databases stay stable.
Original PR description
Issue: When updating partner fields such as `email`, `name` and `phone` on the partner records, the ticket fields are recomputed. During the recomputation, the `description` field is loaded into…
Issue: When updating partner fields such as `email`, `name` and `phone` on the partner records, the ticket fields are recomputed. During the recomputation, the `description` field is loaded into memory and with many helpdesk tickets, this will cause a memory error. Purpose of this PR: To explicity fetch `partner_id` before computing partner fields on the helpdesk ticket. Example: With a partner record with 25,000 helpdesk tickets each with a description of varying text and images, we hit the memory limit when trying to update the partner phone. With these changes, peak memory usage reached 271.4 MB. Notes: Originally wanted to avoid changing the field definition however this would require adding `with_context(prefetch_fields=False)` to most of the compute methods on helpdesk ticket model.`with_context(prefetch_fields=False)` to most of the compute methods on helpdesk ticket model. Memgraph and Stats before changes <img width="1912" height="862" alt="memgraph_b4_changes" src="https://github.com/user-attachments/assets/f5e95a42-83c8-4250-bdf3-440740a9fb33" /> <img width="640" height="352" alt="stats_b4_changes" src="https://github.com/user-attachments/assets/a82ccd69-1359-4ba8-81a0-52aeace762db" /> opw-5069424 Forward-Port-Of: odoo/enterprise#96198
10 changes
Enhancements to existing features
The Hong Kong payroll demo setup now includes richer sample employees, payslips, and pay runs. This makes it easier for users to evaluate payroll scenarios such as MPF and end-of-year pay without extensive manual configuration.
Original PR description
Currently, the demo data in the HK payroll modules are quite weak, and it requires a lot of configuration if a user wants to test the features (MPF, EOY pay, ...) In this PR, we are improving this by adding more payslips and payruns, updating some of the employees data and so on. task-5079595 Forward-Port-Of: odoo/enterprise#95122
This update adjusts a website helpdesk template so it continues to work correctly after related link text became translatable. It helps keep the Helpdesk, eLearning, and Forum website integration stable across languages without changing business workflows.
Original PR description
`href` cannot be used anymore as an xpath expression because it is now translatable. See PR https://github.com/odoo/odoo/pull/147698 task-3626918
The Documents folder action menu now opens immediately instead of waiting for all available actions to load. Users also get faster feedback when pinning actions, with loading indicators and fewer background refreshes to keep the experience smoother on slower connections.
Original PR description
The cogwheel which holds the folder actions was slow to open because it loads the actions at startup. To speedup it up, we backport the fix odoo/enterprise#90124 that allows the cogwheel to be open while loading the actions (instead of waiting that the actions are loaded). We also add a spinner while it is being loaded. When selecting action to embed for the folder, it was slow as well. To solve the problem, we toggle the action immediately (not waiting the answer of the server) and roll it back in case of failure. Finally, to limit the number of calls to the server, we only reload the search model if there are no pending toggle of action. So if you activate for example 5 actions in a row and the connection is slow enough, the search model will only be reloaded once instead of 5 times (when the 5 actions are toggled). Task-4828503 Forward-Port-Of: odoo/enterprise#96545 Forward-Port-Of: odoo/enterprise#94141
The bank configuration screen now uses a better background color when dark mode is enabled. This makes the setup card easier to view and provides a more polished experience for users working in dark mode.
Original PR description
This commit will change the background color of the dark mode of the configure bank cart. no task id Forward-Port-Of: odoo/enterprise#96513
Adds a test button on IoT Box records to help diagnose connection issues more quickly. The check highlights unavailable communication methods and asks the device to verify network quality, helping support teams troubleshoot client installations faster.
Original PR description
In order to ease debugging at client's, we introduce a test button on the IoT Box record that will first test communication protocols and display a notification for each non-working protocol, then request a network quality check on the IoT Box (ping to odoo.com + ping to gateway). Community PR: odoo/odoo#229655 Task: 5130809 Forward-Port-Of: odoo/enterprise#96298
The VoIP setup suggestions now include Telnyx as an available provider option. This gives businesses another recommended provider to consider when configuring internet-based calling in Odoo.
Original PR description
Task-5144121
The Salary Advice spreadsheet now presents payroll information more clearly with better alignment, company details in the header, and a more logical column order. This makes the report easier for payroll teams and banking stakeholders to read and verify.
Original PR description
Salary Advice Report: - Ensured salary amounts and totals are right-aligned - Left-aligned text and numeric fields - Added Company Name and Company Bank Account Number to header - Moved C/D column after Employee Name task-5076472
When users open planning from a payslip, it now starts on the month covered by that payslip. This makes it faster and easier for payroll teams to review the relevant schedule without manually navigating to the correct period.
Original PR description
By clicking on the planning smartbutton on a payslip, it will open by default the planning starting on the month of the date_from of the payslip. It was not the case before this commit. task-5116510
This update standardizes the internal naming of yes/no settings across several Point of Sale modules. It improves consistency and maintainability without changing expected business workflows or user-facing behavior.
Original PR description
pos_*: pos_enterprise, pos_iot, pos_blackbox_be, l10n_se_pos, l10n_in_reports_gstr_pos, pos_iot, pos_restaurant_preparation_display In this commit: ---------- - Standardized the naming of boolean fields in the pos.config model for better consistency and readability across the codebase. Related: - Community: https://github.com/odoo/odoo/pull/224423 - Upgrade: https://github.com/odoo/upgrade/pull/8300 task-5008370
This update removes a redundant internal setting used to identify chat window context. It helps keep the messaging code simpler and easier to maintain, with no expected change for users.
Original PR description
This is redundant with this.env.inChatWindow https://github.com/odoo/odoo/pull/231053
11 changes
Enhancements to existing features
Website users can now create pages with AI through a smoother, more guided flow. This helps teams launch website content faster and with less manual setup.
Website users get an improved experience when creating pages with AI, making it easier to start new website content. This helps teams build pages faster and with less manual setup.
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
Point of Sale users can now mark a card terminal payment as completed when the payment is stuck waiting for card confirmation. This gives staff a fallback when the terminal processed the payment but Odoo did not receive the status update, reducing checkout delays and avoiding unnecessary payment retries.
Original PR description
Current behavior before PR: If we faced an issue with a terminal payment while the `line.payment_status` being "waitingCard", only possible option for the user would be to "Cancel" the payment and try again or choose another payment method. This is an issue for the cases where the payment went through on the terminal but Odoo didn't update the status for some reason. Desired behavior after PR is merged: We add the possibility to "Force done" while the status is "waitingCard" to avoid blocking the user in such situations and have a possible fallback. opw-4978772 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229557 Forward-Port-Of: odoo/odoo#228406
This pull request updates the Accounting PDF Reports add-on, including report definitions, account type data, model logic, and translations. It appears intended to refresh or customize accounting reporting capabilities, which may affect how finance teams generate and view PDF financial reports.
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
Users can now close the image description box in the HTML editor by pressing the Escape key. This makes editing images smoother and more consistent with common keyboard behavior.
Original PR description
This PR aims to ensure that image description box gets closed when pressing escape key. task-5114224 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The mail chat composer now shows relevant channel command suggestions when users type '/'. This makes it easier to discover and use chat commands without needing to remember them manually.
Original PR description
This commit adds the ability to show channel command suggestions when typing '/' in the html composer. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Recruiters can now generate more than one salary offer for the same applicant from the applicant view. This makes it easier to revise or resend offers during the hiring process without unnecessary restrictions.
Original PR description
Purpose: Modified the visibility attribute on the Generate Offer button in the applicant view so the it allows the generation of multiple offers for the same applicant Task ID: 5088931
Additional automated tests were added to confirm that appointment booking capacity, unavailability, cart bookings, invoice confirmation, and event creation work as expected. This helps reduce the risk of booking errors across paid appointments and website appointment sales.
Original PR description
\* = website_appoinment_sale, appointment_account_payment Add tests to ensure correct behaviour for the various scenarios. The following tests are added: - Users/resource's capacity computation when manage capacity is on and off. - Unavailability computation of users/resources in the `calendar.event`. - Check the bookings of user/resource in the cart for the availability after the invoice is confirmed. - Creation of the actual event when the booking from the cart is confirmed. Task-4919317 Forward-Port-Of: odoo/enterprise#91676
Manufacturing teams can now control the order of quality checks and instructions within work operations. This restores a previously available capability, making shop floor guidance easier to organize and follow.
Original PR description
- Sequence was added to give flexibility in ordering quality points inside operations. **Note:** this was already there in past versions, it was just forgotten in the latest redesign: https://www.odoo.com/odoo/project/966/tasks/5005235 Task: 5110982
The employee salary contract testing flow was updated to stay aligned with recent underlying changes. This helps keep automated checks reliable and reduces the risk of unnoticed issues in salary contract workflows.
Original PR description
This commit handles the change in test case due to the modification in the following commit [1]. [1]=https://github.com/odoo/odoo/pull/227819/commits/360b384ba4e24
This update improves internal test helpers used by the website editor so tests wait properly for sidebar updates and related background work. It helps reduce flaky automated tests, making future website editor changes safer and more reliable without changing the user experience.
Original PR description
We need a helper to wait enough Forward-Port-Of: odoo/odoo#226582
7 changes
Enhancements to existing features
The Spanish localization now separates Canary Islands purchase taxes for goods and services, aligning tax mappings with their business purpose. It also adds DUA-related Canary Islands tax data, helping companies apply more accurate tax treatment in this region.
Original PR description
We have splitted purchase taxes in goods and services because there are different mappings according to the scope. It has a similar functionality with spanish mainland taxes @jco-odoo There are doubts with the fiscal position `fp_nacional_canary_ns` as it is applied automatically to spanish non canarian partners but it should be similar to non-EU partners IMO. However, I think that the opinion fo some canary people would be nice to clarify it @Christian-RB --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Updating customer contact details linked to many helpdesk tickets is now more reliable. The change reduces memory usage during these updates, helping prevent failures for customers with large ticket histories.
Original PR description
Issue: When updating partner fields such as `email`, `name` and `phone` on the partner records, the ticket fields are recomputed. During the recomputation, the `description` field is loaded into…
Issue: When updating partner fields such as `email`, `name` and `phone` on the partner records, the ticket fields are recomputed. During the recomputation, the `description` field is loaded into memory and with many helpdesk tickets, this will cause a memory error. Purpose of this PR: To explicity fetch `partner_id` before computing partner fields on the helpdesk ticket. Example: With a partner record with 25,000 helpdesk tickets each with a description of varying text and images, we hit the memory limit when trying to update the partner phone. With these changes, peak memory usage reached 271.4 MB. Notes: Originally wanted to avoid changing the field definition however this would require adding `with_context(prefetch_fields=False)` to most of the compute methods on helpdesk ticket model.`with_context(prefetch_fields=False)` to most of the compute methods on helpdesk ticket model. Memgraph and Stats before changes <img width="1912" height="862" alt="memgraph_b4_changes" src="https://github.com/user-attachments/assets/f5e95a42-83c8-4250-bdf3-440740a9fb33" /> <img width="640" height="352" alt="stats_b4_changes" src="https://github.com/user-attachments/assets/a82ccd69-1359-4ba8-81a0-52aeace762db" /> opw-5069424
Paired IoT Boxes now always connect to the database communication channel instead of relying on separate open or closed connection states. This simplifies troubleshooting and creates a more predictable experience when using IoT hardware with Odoo.
Original PR description
In order to simplify debugging and UX, we removed the open/closed WebSocket logic for IoT Boxes. A paired IoT Box should always connect to the db IoT WebSocket channel.
This pull request improves Odoo's Hoot unit testing tools by fixing event simulation, error reporting, and documentation issues. It also simplifies how test helpers are imported, reducing confusion for developers while keeping changes limited to the test ecosystem and minimizing product risk.
Original PR description
## Pull Request HOOT 37 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Enterprise: https://github.com/odoo/enterprise/pull/96647 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Peppol invoice status information is consolidated in the accounting invoice view, making it easier for users to understand document delivery progress. This improves day-to-day visibility for teams managing electronic invoicing without changing core accounting workflows.
Original PR description
Cherry-pick of https://github.com/odoo/odoo/commit/114e8bc6f34da309fa1aa2160ef3319da098c48c opw-5106956
Point of Sale employee managers can no longer open the backend unless their employee profile is linked to the currently signed-in user. This helps keep backend access aligned with the actual logged-in account while still allowing managers to close POS sessions.
Original PR description
Task: [5154178](https://www.odoo.com/odoo/project/1737/tasks/5154178) --- Previously, any employee with the role `manager` could go to the backend. Now, the only employees that can go back to the backend are those binded to the user connected. Managers can still close the session.
Account merging now gathers existing account codes in one database step instead of checking each company one by one. This reduces delays during merge operations, especially for databases with many companies.
Original PR description
The merge wizard needs to collect the account codes of the accounts we are merging in order to write them on the merged account as the final step of the merging process. At the moment, collecting the account codes is done in Python and loops over all the existing root companies, retrieving the code of the account for each company. On a recent l10n [runbot](https://runbot.odoo.com/runbot/build/90542336) (with 146 companies), this was causing the merging step to take ~4.5 seconds per account, most of this time being taken just by collecting the account codes. Instead, we collect the codes in a single SQL query. Flamegraphs: [before.json](https://github.com/user-attachments/files/22726956/before.json) [after.json](https://github.com/user-attachments/files/22726960/after.json) task-none
3 changes
Enhancements to existing features
Peruvian customer records no longer require a ZIP code. This makes customer data entry easier and better reflects local addressing practices, where ZIP codes are not commonly used.
Original PR description
As ZIP codes are not widely used in Peru, the requirement for a ZIP code to be provided for a Peruvian customer should not be present. task-5012593 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update prepares Odoo IoT and POS IoT connections for upcoming Chrome local network access restrictions. It helps ensure local IoT devices remain reachable from Odoo in the browser, including when accessed through the odoo-iot domain, while also modernizing the connection code.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/231014 Local Network Access restrictions will start shipping by default in Chrome 142. As part of this change, local requests will be allowed to use HTTP in an HTTPS context (gated by a browser permission prompt). This will work automatically when the IP is provided directly, however in the case of IoT we often use the odoo-iot DNS domain to resolve the IP. In this case, you must specify the option `targetAddressSpace: "local"` in the `fetch` request. This PR simply adds this change where appropriate. As part of this we have also backported the change from jquery -> fetch. task-5157145
This update helps Odoo Point of Sale continue connecting to local IoT devices, such as hardware connected through an IoT box, as Chrome introduces stricter local network access rules. It reduces the risk of disruption for businesses using POS hardware when browsers enforce the new permission behavior.
Original PR description
Enterprise PR: https://github.com/odoo/enterprise/pull/96850 Local Network Access restrictions will start shipping by default in Chrome 142. As part of this change, local requests will be allowed to use HTTP in an HTTPS context (gated by a browser permission prompt). This will work automatically when the IP is provided directly, however in the case of IoT we often use the odoo-iot DNS domain to resolve the IP. In this case, you must specify the option `targetAddressSpace: "local"` in the `fetch` request. This commit simply adds this change where appropriate. task-5157145 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr