Daily updates from Odoo
Wednesday, October 1, 2025
15 changes
3 changes
Enhancements to existing features
The website generator now checks whether a provided website URL can be reached before starting the scraping process. This helps users catch typos or inaccessible pages earlier, saving time and providing clearer feedback.
Original PR description
This commit checks that the URL is reachable before making the scraper request. The goal is to help prevent clients from requesting pages that may have a typo or are not accessible. This reduces time wasting and gives a much clearer interface. <img width="967" height="604" alt="image" src="https://github.com/user-attachments/assets/70810b13-65bd-43a3-9fc1-125867290a9b" /> <img width="1690" height="961" alt="image" src="https://github.com/user-attachments/assets/df347756-85b0-451b-9cab-47d20097ed8b" /> <img width="976" height="751" alt="image" src="https://github.com/user-attachments/assets/bcea820b-ebe3-4b0f-875c-2b8f4fdf0404" />
Project templates can now define custom milestone percentages, giving teams more control over how milestone-based sales are calculated. If no custom percentages are set, the system continues to split milestone quantities evenly, preserving the existing behavior.
Original PR description
- ability to add a custom milestone percentage in project templates - keep the even distribution if no customization is set to the milestone quantity - Make the milestones page accessible in the project template page to edit them - Adjust the test so it can check the new quality calculation --- Task-4102768
Point of Sale now prevents keyboard input from changing order lines while a popup, such as customer selection, notes, or coupons, is open. This reduces accidental edits during checkout and creates a safer, more predictable cashier workflow.
Original PR description
Before this commit: - Even when a popup (e.g., customer selection, note, coupon) was open, unfocused keyboard inputs could still update orderline values. After this commit: - Orderline editing via keyboard is disabled whenever a popup is active. - Prevents unintended changes and ensures a safer user flow in POS. Task-5033716 Forward-Port-Of: odoo/odoo#229324 Forward-Port-Of: odoo/odoo#226300
2 changes
Enhancements to existing features
Odoo databases can now communicate correctly with IoT Boxes that report a newer fixed stable version. This helps keep point-of-sale and Belgian black box integrations working smoothly after the IoT Box versioning change.
Original PR description
In odoo/odoo#221948, we make the IoT Box version "fixed" to the last stable odoo version. We then need to make databases send/accept requests from an higher IoT Box version. Forward-Port-Of: odoo/enterprise#94330 Forward-Port-Of: odoo/enterprise#91937
The Point of Sale now blocks keyboard-based order line edits while a popup is active, such as customer selection, notes, or coupons. This helps prevent accidental changes during checkout and makes the POS flow safer for staff.
Original PR description
Before this commit: - Even when a popup (e.g., customer selection, note, coupon) was open, unfocused keyboard inputs could still update orderline values. After this commit: - Orderline editing via keyboard is disabled whenever a popup is active. - Prevents unintended changes and ensures a safer user flow in POS. Task-5033716 Forward-Port-Of: odoo/odoo#229324 Forward-Port-Of: odoo/odoo#226300
6 changes
Enhancements to existing features
Employee version records now track changes to most business-relevant HR fields across payroll, contracts, salary, holidays, attendance, signing, accounting, and country-specific payroll areas. This improves transparency by making it easier to review when important employee-related information was changed and supports stronger auditability.
Original PR description
Most fields in hr.version represent business-relevant employee data that should be tracked to ensure a complete audit trail. This commit adds `tracking=True` by default on hr.version fields across community and enterprise modules. task-5022109 Forward-Port-Of: odoo/enterprise#95625 Forward-Port-Of: odoo/enterprise#92601
The bank reconciliation kanban quick-create process has been simplified so entries are saved as soon as the required information is available. This should make reconciliation workflows smoother for accounting users while reducing custom maintenance behind the scenes.
Original PR description
Task~5072955
The website generator now accounts for changes introduced in Odoo 19.0 eCommerce building blocks. This helps ensure generated websites use the right scraper behavior for the Odoo version, reducing compatibility issues when creating or updating online stores.
Original PR description
Corresponding IAP PR: https://github.com/odoo/iap-apps/pull/1196 Forward-Port-Of: odoo/enterprise#94389
This update introduces a dedicated form view for VoIP calls, making call details easier to review and manage. It also includes several related improvements and fixes across accounting, AI, point of sale, spreadsheets, and subscriptions to improve daily workflows and reliability.
VoIP calls can now be recorded directly in the user's browser as an early proof of concept. This helps explore easier call capture without server-side storage, with recordings downloaded locally after the call ends.
Creating repair orders is now much faster when the system has a very large number of quality rules. The process uses the database more efficiently and avoids overly large queries, reducing delays for businesses with heavy quality control data.
Original PR description
Description ----------- Creating a repair creates new `quality.check` based on `quality. point`s. When you have many matching points to explore, the `filtered_domain` can be pretty slow when…
Description ----------- Creating a repair creates new `quality.check` based on `quality. point`s. When you have many matching points to explore, the `filtered_domain` can be pretty slow when processing linear the records to compute the intersection between the all points and the points that should be associated with the repair. This commit rewrites `_create_quality_checks_for_repair` to use a `search` instead if necessary, to offload the intersection search in the database. We also split the ids to not inject a large list of ids in the query. Benchmark --------- For a database that will have 500k `quality.point` that satisfies the domain of `quality.point._get_domain`, the invocation of `_create_quality_checks_for_repair` for creating a Repair takes (excluding the `create` call time): | | Before | After | |---------|------------------|-------| | Timings | Timeout (15+min) | 1 min | Reference --------- opw-4980036 Forward-Port-Of: odoo/enterprise#95700 Forward-Port-Of: odoo/enterprise#91729
2 changes
Enhancements to existing features
Indian company setups now automatically get the right outstanding payment accounts on bank journals. This reduces manual configuration work and helps ensure accounting setups are complete and ready to use after chart of accounts installation or updates.
Original PR description
Before: - By default, Odoo does not assign outstanding accounts (debit/credit) to bank journals. Users must configure them manually from within the journal. - This often left setups incomplete, resulting in missing entries in the CoA. After: - For the Indian localisation, outstanding accounts are now automatically set on bank journals’ inbound and outbound manual payment methods. - The payment accounts are applied by default during CoA loading and whenever payment method lines are recomputed, ensuring accounts remain consistent. Explanation: This improvement removes manual setup steps, and ensures a ready-to-use bank journal configuration with default outstanding accounts out of the box. task-5055756
Published website pages can now be served from a high-level cache, reducing page rendering time and database activity. The change includes safeguards so pages with dynamic or sensitive session-related content, such as sales orders, are not cached or reused incorrectly.
Original PR description
This commit introduces a high-level cache on the `website.page` model, similar to the one that existed before the `t-cache` directive was implemented in `ir.qweb`. This cache is designed to…
This commit introduces a high-level cache on the `website.page` model, similar to the one that existed before the `t-cache` directive was implemented in `ir.qweb`. This cache is designed to significantly improve performance by storing the HTML response of published pages, thereby reducing rendering time and database queries. The management and logic for this cache are placed directly on the `website.page` model, as it is the source of the HTML response for these records. This approach makes it easy to control caching behavior through a few new, overridable methods: - `_allow_to_use_cache`: Determines whether a page is allowed to be served from the cache based on the current request, URL, or session. For example, a page with a `sale.order` in the session would not use the cache. - `_allow_cache_insertion`: Checks if the generated HTML content is eligible for caching. This is useful for preventing sensitive or dynamic content from being stored. For instance, a page with a reference to a `sale.order` would not be inserted into the cache. - `_post_process_response_from_cache`: A hook called after a response is retrieved from the cache. This method allows for post-processing, such as incrementing counters or modifying HTTP headers, without regenerating the entire page. see https://github.com/odoo/odoo/pull/224487 see https://github.com/odoo/odoo/pull/88276
1 change
Enhancements to existing features
Approved leave that uses a work leave type will no longer automatically generate a timesheet entry. This prevents incorrect time records and keeps project timesheets cleaner and more accurate.
Original PR description
When a leave using a work leave type is approved, now it should not create a timesheet. task-5097482 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
1 change
Enhancements to existing features
Point of Sale users can now mark a card terminal payment as completed when Odoo is still waiting for the terminal response. This gives cashiers a fallback when the payment succeeded on the terminal but the system did not update, reducing checkout delays and blocked sales.
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