Daily updates from Odoo
Wednesday, August 27, 2025
15 changes
1 change
Enhancements to existing features
The Belgian point-of-sale blackbox detection now retries checks and records clearer diagnostic information. This helps reduce cases where a required fiscal device is not recognized correctly, improving reliability for businesses using Belgian POS compliance hardware.
Original PR description
This PR adds a retry mechanism and a logger to better identify and prevent cases where a blackbox isn't correctly identified as such Forward-Port-Of: odoo/enterprise#92489
9 changes
Enhancements to existing features
Thread action placement in live chat, helpdesk, and WhatsApp messaging has been simplified by removing the old sidebar-specific logic. This should make chat and discussion actions more consistent across different messaging views while reducing internal complexity.
Original PR description
This was added for contextual elligibility of showing of action in sidebar vs discuss top-right thread actions and chat window actions. This commit replaces the `sidebarActions` to explicit code in `condition`. The slight difference of sequences with partition has been considered with dynamic sequence based on conditions for "sidebar". This change also removes `partition` and `contextual action` that were defined to work in tandem with `sidebar` concept.
Manufacturing teams can now generate and manage multiple serial numbers from a single manufacturing order instead of creating separate orders. This simplifies production workflows for serialized products and improves visibility in Shop Floor and Barcode apps, including clearer display when many serial numbers are involved.
Original PR description
Allow Manufacturing Order to produce multiple serial numbers.
The accounting interface now shows the journal selection field only when the accounting app has multiple journals available and the user needs to choose one. This reduces unnecessary clutter when there is only one option, while still making the choice visible when it matters.
Original PR description
Improves journal field visibility for better user experience: - Shows journal field when `account_accountant` is installed and multiple journals are available for selection - Hides journal field when only one journal is available (no selection needed) - Completely hidden when only `account` module is installed Before: Journal field only visible when `accountant` module is installed. After: Journal field is visible when `account_accountant` module is installed and multiple journals are available. Related PR : https://github.com/odoo/odoo/pull/222209 Task : 4988183
Several Odoo dashboards now include carousel-style navigation, making it easier for users to browse dashboard content in a more focused way. This improves the dashboard experience across accounting, CRM, helpdesk, payroll, recruitment, marketing automation, manufacturing, purchasing, and rental reporting areas.
Original PR description
This commit updates the dashboards to include the new carousel feature. Part of task: 4851982
Appointment questions can now be reused across different appointment types, making setup and translation easier to maintain. Phone number collection is now managed as a configurable question, so businesses can choose whether each appointment requires or omits it, while required questions are more consistently enforced during booking.
Original PR description
MAIN CHANGES ============= 1. Make questions easier to (re-)use across similar appointments (translations, update, consistency...) by making the field a m2m. 2. Also make appointments more flexible…
MAIN CHANGES ============= 1. Make questions easier to (re-)use across similar appointments (translations, update, consistency...) by making the field a m2m. 2. Also make appointments more flexible by adding a new 'phone' question_type and moving the phone from an hard-coded template input to an appointment.question record (and data). Appointments can now be phone-less. 3. Give configuration flexibility on questions, with new `is_default` and `is_reusable` boolean fields. `is_default` will make the question added to all new appointment_types, and if `is_reusable` is false, it will not be available when adding new questions on the appointment type form. OTHER CHANGES ============== - Improve the form view of appointment.question and add a small selection badge widget with icons. - The appointment question model is now also ordered by id to improve determinism. - Add the data appointment_question_phone, default question and reusable. - Partner matching is the same when a phone question is used. The first phone question (in terms of order - sequence) is the one to be used, also for prefilling partner data, or updating partner if appropriate. - Add an `active` field on the appointment.question model. - Enforce mandatory questions on controller side OTHER COMMIT ============= Before applying the changes above, improve the question answer handling in the controller by removing heavy regex and use a lighter solution based on existing questions and answers. UPGRADE ======== - relational table is created and populated between appointments and questions. - questions without `question_type` are deleted, and related records due to `cascade ondelete` - `is_reusable` is false for existing questions, despite True by default for future records. This allows a 'clean sheet' on migration, as existing questions will not be reusable on all appointments. - `is_default` is false for existing questions - Add new 'phone' data question and link it to all existing appointments. Also give it the lowest sequence so that it appears at the top of questions, as it was before. A test is also added. See UPG PR: https://github.com/odoo/upgrade/pull/7691 Task-4655040
Belgian 281.50 tax reporting now includes sportsman activity information, helping businesses meet reporting requirements for these payments. The update also separates first names for natural persons in XML exports to better match official specifications.
Original PR description
## IMP] l10n_be_reports: 281.50 add sportsman activities The aim of this commit is to cover the sport activities part of the 281.50 reports. Context: During the initial dev we ignored that feature as it wasn't our main focus. Now, the feature matured and some customer needs it. Task-id: 4919018 ## [IMP] l10n_be_reports: 281.50 handle natural person first name The aim of this commit is to comply with the 281.50 official specs by handling the first name of natural person and setting it in the xml. Before this commit: We don't handle first name and we set the whole partner.name as the name. After this commit: We handle first name and assume it is everything after the last ', ' separation. Task-id: 4919018
Users can now access the Ask AI natural language query feature directly from the main command palette using CTRL+K, instead of needing to switch to the slash command area. This makes AI assistance more discoverable and reduces extra steps, while caching also helps avoid unnecessary background requests.
Original PR description
This commit allows access to the ask ai command (natural language query feature) from the default namespace (CTRL+K) for better UX. After this commit, Ask AI agent can now be access from both the "/" and default namespace. To accomplish the feature, we need to override the `setCommands` of the CommandPalette component because it has special handling of "default" commands -- it filters out the commands not similar to the searchValue. However, we want the Ask AI command to be always there (showing as well the searchValue). So, when we see that the set of filtered commands has zero items, that's the time we insert the Ask AI command. We are also now caching the Ask AI agent to avoid unnecessary rpc calls. See illustration: https://youtu.be/lJWY8RC4V5I
Creating recurring prices on subscription products is now more straightforward: users add fixed prices directly in the list instead of going through an extra pricing dialog. The pricing screen is also clearer by hiding non-fixed price entries that could appear misleading and by reordering the Pricelist and Plan fields.
Original PR description
From this PR onwards, when adding a new recurring price on a product, the usual dialog window with the choice for complex pricing isn't shown anymore. The list view is used to add new prices and it defaults to a fixed price. The position of the Pricelist and of the Plan has also been inverted. Task: 5021972
The Belgian POS blackbox connection now retries detection and records clearer logs when identification fails. This helps reduce cases where certified fiscal hardware is not recognized correctly, making troubleshooting faster and operations more reliable.
Original PR description
This PR adds a retry mechanism and a logger to better identify and prevent cases where a blackbox isn't correctly identified as such Forward-Port-Of: odoo/enterprise#92489
5 changes
Enhancements to existing features
This change avoids extra processing when new records include HTML or rich text fields, reducing duplicate cleanup work. It should noticeably speed up bulk operations such as marketing email campaigns and lower memory usage during long-running batch jobs, with minimal impact unless the same rich text is read immediately after creation.
Original PR description
Description ----------- When creating records with `vals` for HTML fields, there are two 'sanitization' operations happening: 1) Once in `convert_to_column`, when converting the `vals` for *database*…
Description ----------- When creating records with `vals` for HTML fields, there are two 'sanitization' operations happening: 1) Once in `convert_to_column`, when converting the `vals` for *database* insertion 2) Once post-insert in `convert_to_cache`, when converting the `vals` for insertion in the *cache* for the newly created records. This redundancy has a negative performance impact when creating many records where new HTML fields are set, e.g., mass-mailing, as potentially large HTML documents are parsed and validated, often with external libraries. To address this issue, this commit removes the insertion into *cache* of the HTML values for the newly created records. This removes the overhead of the second sanitization, speeding up the creation, and also helps with overall memory pressure, as we're not inserting large HTML fields into cache. The latter is particularly noticeable for long-running batch creation processes that do *not* commit intermediate results. The downside of this patch is the potential *cache-miss* (and therefore the subsequent *query*) if the HTML field of the newly created records is read. This is unlikely in business code because intrinsically, an HTML field is often just a data 'blob' that has no logical usage. In the rare case where it needs to be read after creation, since the value in the database is already sanitized, re-sanitization is not necessary for insertion in the cache. Given these considerations, the trade-off seems reasonable to make. Benchmark --------- In a scenario for a marketing campaign with 1000 recipients, using a *mid-sized* email template and emulating a typical campaign, the results were: | Method | Before | After | Speed up | |-------------------------------|----------|-----------|----------| | `_process_mass_mailing_queue` | 2.84 min | 1.55 min | 1.8x | | `create` | 2.11 min | 50.23 sec | 2.5x | This represents roughly a *2x* performance improvement in processing an email campaign. * more detailed benchmarks are available in the task's description Reference --------- task-4962646 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds database indexes that help Odoo find related partner and purchase information more quickly. Business users should see improved responsiveness when opening or using partner records, especially in databases with many partners or purchase orders.
Original PR description
Adding some missing indexes: - `res.partner.company_registry`: necessary for the second search in `_compute_same_vat_partner_id` - `purchase.order.partner_id`: necessary for the `_read_group` in `res.partner._compute_purchase_order_count` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves Romanian electronic stock document handling in Odoo. It is intended to make localization workflows more reliable for businesses operating in Romania, although the provided PR details do not specify the exact user-facing behavior changed.
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 internal performance test expectations for the Knowledge app after a backend caching behavior change. It helps keep automated checks accurate without changing the user-facing product experience.
Original PR description
Adapting query count, due to not putting html fields in cache upon creation. task-4962646
Pricer labels now receive additional product details such as pre-tax prices, tax names, supplier references, supplier product codes, and units of measure. Updates to related supplier or tax information will also refresh affected Pricer tags, helping keep shelf labels accurate with less manual intervention.
Original PR description
We are currently missing some fields which must be sent to Pricer for some basic use-case scenarios This PR adds - Price before taxes - Taxes name (ex: 21%) - Supplier product code - Supplier reference - Units of measure of the product The PR also triggers the update of the pricer tags when the models indirectly related to Pricer are modified (taxes name / supplier reference / supplier product code) + cleans up the code a bit task-4506260