Thursday, March 12, 2026
9 changes · master
Enhancements to existing features
This update standardizes code formatting and linting across several Sales, Delivery, Payment, Loyalty, Product Matrix, and Website Sale areas. It is an internal quality improvement that should make future development, reviews, and troubleshooting more consistent without changing normal user workflows.
Original PR description
*: `payment_(*)`, `delivery`, `website_sale_collect`, `*loyalty*`, `sale(_*)`, `product_matrix`, `website_sale(_*)` This PR introduces Ruff (lint and format) as the standard for all Python files within the R&D Sales scope (see `*`). The goal is to ensure a clean state for future development, reviews, and debugging by enforcing a code style via pre-commit hooks. This PR applies a one-time bulk format+lint pass to all existing files in our scope. task-5436779 See also: - https://github.com/odoo/enterprise/pull/100770 Co-authored-by: Antoine Vandevenne (anv) <anv@odoo.com> Co-authored-by: Valeriya (vchu) <vchu@odoo.com> Co-authored-by: Louis <loti@odoo.com> Co-authored-by: Victor Feyens <vfe@odoo.com> Co-authored-by: Lionel Piraux (lipi) <lipi@odoo.com> Co-authored-by: livaois <liew@odoo.com>
This update cleans up and reorganizes automated tests and supporting code for how Odoo records tracked changes across business documents. It prepares the system for future improvements while reducing maintenance risk, with no expected direct change for end users.
Original PR description
Prepare ground for changes. Task-
The Point of Sale ticket screen now shows the Refund button as a secondary action until an item quantity is selected. This makes the refund workflow clearer for cashiers and helps prevent confusion about when a refund is ready to proceed.
Original PR description
Before this commit: -------- - On the ticket screen, when no quantity was selected for refund, the Refund button was still shown as primary. After this commit: -------- - Show the Refund button as secondary when no quantity is selected. - Switch the button to primary only when at least one item quantity is selected. task-5490812 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Two-factor authentication code fields now signal to password managers and mobile devices that they can offer the latest one-time code automatically. This makes login and identity checks faster and smoother, especially when codes arrive by email or notification.
Original PR description
Set the `autocomplete` attribute of the TOTP code inputs to `one-time-code` to help password managers such as bitwarden, keespassxc, apple passwords, to auto-fill the TOTP code input. Setting it on the the TOTP by mail form also allows Apple / Android to automatically fill the input based on the notification / email that was just received. <img width="300" alt="totp-from-gmail" src="https://github.com/user-attachments/assets/db7bc8a6-badc-40c7-ba03-471089a358e2" /> task-6001386
The web interface now uses Bootstrap icons instead of the older FontAwesome icon set. This keeps the product’s visual assets up to date while preserving existing icon class names to reduce disruption during the transition.
Original PR description
This commit replaces deprecated FontAwesome v4 icons with Bootstrap icons. To prevent conflicts during the refactoring process, the 'fa-' classes are temporarily retained. Only the font-face and character codes in the corresponding CSS rules have been adjusted. task-3714335
This update adjusts the default height settings for appointment snippets. Previously, a 50% height option was offered, which users rarely utilized. The change now defaults to 75% height, providing a more intuitive and visually appealing experience for visitors while ensuring sufficient content is always visible.
Original PR description
Users rarely want to define a 50% height, either they want Auto, or 100% or something that's close enough to show the visitor there's still content below the snippet. We replace all occurrences of 50% height snippets with 3/4 height, except for the cover (e.g. Blog Cover) as I don't find replacing Half Screen Size with 75% Size useful there. task-5921163
This pull request focuses on cleaning and streamlining the tracking code across several Odoo modules. The changes enhance code readability and maintainability, which will contribute to more reliable and efficient tracking of key business processes. This is an internal improvement to ensure long-term stability.
Original PR description
Task-
This update allows sales teams to create pricing rules that require rentals to last a minimum number of hours and/or a minimum quantity. Previously, a pricing rule designed for 5-hour rentals wouldn't work for 1-hour rentals, which is now resolved by increasing the test duration to 10 hours. This improves flexibility and accuracy in setting rental prices.
Original PR description
Enable creation of pricing rules with minimum periods and minimum quantity requirements The test was originally designed to apply a price list valid for 5 hours to a rental lasting only 1 hour, which made it invalid and thus rightfully excluded. Adjusting the rental duration to 10 hours allows the test to work correctly. task-5062426
This update streamlines the process of displaying sign items within Odoo, reducing complexity and improving efficiency. Previously, a redundant process was required to handle different types of sign items, but this change simplifies the data retrieval and presentation. This results in faster and more reliable sign generation.
Original PR description
Before this commit, `getContext` was copy-pasted across three classes because template items had `type_id` as an ORM tuple `[id, name]` while signing items used a plain id, so `SignTemplateIframe` had to reimplement the whole thing instead of just extending it. After this commit, `type_id` gets unwrapped on-the-go alongside `radio_set_id` and `document_id`, and `SignTemplateIframe.getContext` only adds the useful of template-specific fields on top of `super`. task-5972886