Daily updates from Odoo
Thursday, June 19, 2025
18 changes
15 changes
Enhancements to existing features
Stock move descriptions are now generated dynamically while still preserving manual edits when users customize them. Kit-related information is folded into the main picking description, reducing duplicated stored data and keeping stock documents more consistent across delivery, manufacturing, and localization workflows.
Original PR description
- Remove name field (stored) on stock.move, replace by reference field (computed) - Make description_picking field on stock.move computed (instead of stored), but allow manual edits to be persisted (with manual stored field + inverse) - Remove the kit field (description_bom_line) and move this information to the description_picking (computed)
The related spreadsheet, documents, and Studio tests were updated to reflect a broader availability of the “in” filter option. This helps ensure these business features remain reliable after the underlying domain selector behavior changed.
Original PR description
We adapt the tests in documents_spreadsheet, spreadsheet_edition and web_studio to the changes brought by https://github.com/odoo/odoo/pull/208592. Task ID: 4610804
Users can now drag unplanned tasks into the calendar to schedule them directly, without switching views or editing each task form. This streamlines planning work for project and field service teams on desktop.
Original PR description
Before this commit, it was not easily possible for the user to plan his existing tasks inside the calendar view, he was to go another view or add planned dates in the form view of his tasks. This commit adds the tasks to plan in desktop mode only to let the user to drag and drop his tasks unplanned to a calendar cell to directly plan them. task-4645814
Users can now choose project templates more easily from Gantt and related project workflows. This helps teams standardize how new projects and tasks are created across field service, helpdesk, timesheets, sales, rentals, and forecasting processes.
Original PR description
_* = project_helpdesk, timesheet_grid, sale_renting_project, project_forecast , helpdesk_timesheet, helpdesk_fsm Change related to community task-4700744
Account returns now open with a chatter panel to centralize conversations, attachments, status changes, API responses, and activity logs. This makes it easier for users to follow the history of a return in one place, though the chatter is not available on mobile.
Original PR description
Opens a chatter when clicking on an account return. Attachments are no longer accessible with a button but using the chatter attachments section. The goal of this feature is to record states changes, API responses, log of activities, ... This chatter isn't accessible in mobile. Co-authored-by: <leol@odoo.com> task-4809711
Mexican electronic invoicing now supports all CFDI tax object classifications instead of only a limited subset. This gives users more accurate control over how taxes are represented on invoices, bills, and related documents, helping improve compliance with CFDI 4.0 requirements.
Original PR description
Since the launch of CFDI 4.0 we have had the option to check a box and not have the taxes displayed on the CFDI. That allows to have control of objetoImp = 03. However, there are 8 values to cover and only 3 are managed. Also, the user has no control of it. task_id: 4365578
PDF financial reports now have a cleaner, more polished layout with the company logo in the header, better title and filter placement, and clearer table styling. This improves readability and gives exported reports a more professional appearance for sharing with stakeholders.
Original PR description
Improve the pdf design of reports by: - adding the logo in the header. - removing the gray background on the header. - moving the title to the right, with the filters underneath. - adding gray background to the table header, remove the border. - adding more space between the lines of the table. task-4546858
Customers can now pause eligible subscriptions directly from the online portal for up to one month within the current billing period. They can also resume early, which restarts billing from the current date and gives businesses a more flexible self-service subscription experience.
Original PR description
Customers can now pause their subscriptions from the portal if the subscription plan allows it. The pause duration is limited to one month and is only applicable for current invoice periods. A resume option is also provided, enabling customers to restart their subscriptions before the pause ends. Upon resumption, the next invoice date is set to the current date, and invoicing continues as usual. task:3414468
Billable projects now show a Rental Orders action in the project top bar and dashboard for authorized sales users. This makes it easier to find project-related rental orders and ensures new rental orders are automatically linked to the right project, while keeping them separate from standard sales orders.
Original PR description
This commit introduces a Rental Orders action in the project’s top bar task view and dashboard. - Displays rental orders linked to the current project. - Restrict visibility to billable projects and users with `group_sale_salesman` access rights. - Auto-assign the current project when creating a new rental order. - Exclude rental orders from the Sales Orders embedded view. task-4764598
Web Studio’s automated tests were adjusted to reflect that ID values are now required. This helps keep internal quality checks aligned with current behavior and reduces the risk of test failures during development.
Original PR description
Id becomes required, adapt test of web_studio
Address changes for partners no longer trigger a separate step to clear saved map coordinates. This simplifies the map functionality because partner locations are now refreshed automatically by the geolocation system when an address changes.
Original PR description
Before this commit: The partner coordinates were cleared when the address fields changed, using an onchange method. After this commit: This is no longer needed, as coordinates are now automatically recomputed in the `base_geolocalize` module when the address is updated. Task-4812621
External tax integrations now use the exact tax amounts returned by providers like Avalara instead of relying on Odoo to recalculate them. This improves accuracy for cases such as full or partial tax exemptions and simplifies the underlying tax flow, reducing the risk of mismatched invoice or sales order taxes.
Original PR description
For details, see the individual commits.
A rough diagram of code execution flow after the refactor (numbering on the edges is the call order, essentially left-to-right, top-to-bottom):
```mermaid
flowchart LR
X["_get_and_set_external_taxes_on_eligible_records (*account.external.tax.mixin*)"] -->|1| A
X -->|9| Y["_set_external_taxes *(account.external.tax.mixin, api.model)*"]
A["_get_external_taxes (*account.external.tax.mixin*)"] -->|2| B[_get_avatax_service_params]
A -->|3| C["_prepare_avatax_document_service_call (*api.model*)"]
C -->|4| D["_prepare_avatax_document_line_service_call (*api.model*)"]
A -->|5| E["*call external tax API*"]
A -->|6| F["_extract_tax_values_from_avatax_detail *(api.model)*"]
A -->|7| G["_process_external_taxes *(account.external.tax.mixin, api.model)*"]
A -->|8| H["*returns manual tax amounts*"]
```
task-4601840The barcode app now labels the button as "Print Product Labels" instead of "Print Barcodes." This makes the action clearer for users who are printing labels for products.
Original PR description
"Print Barcodes" => "Print Products Labels" task-3959326 Community PR: odoo/odoo#178236
The Enterprise web interface primary colors were adjusted to improve text readability and overall contrast. This should make key interface elements easier to read and provide a clearer visual experience for users.
Original PR description
As part of R&D design team training, primary colors were changed to offer better text readability and better contrast. Requires : - https://github.com/odoo/odoo/pull/214768 task-4875580
Sign template editors can now mark text fields as read-only, so predefined wording or automatically filled values cannot be changed by signers. This helps companies keep required language, formatting, and standardized content consistent during signing while still displaying the information clearly.
Original PR description
## Purpose Text fields sometimes need to follow a format that should not be changeable (due to the company language, user languages and other factors). We should provide the functionality of making text fields read-only in the Sign Templates to expand the options of the editor. task id: 4606205
3 changes
Enhancements to existing features
The base module now shares common XML-RPC request and error handling in one helper instead of duplicating it across two entry points. This is an internal cleanup that should make future maintenance easier without changing user-facing behavior.
Original PR description
Extract shared XML-RPC logic into `_xmlrpc_common`, removing duplicate try/except. **Description of the issue/feature this PR addresses:** Addresses #214536 by centralizing the duplicated error handling code in the xmlrpc controllers. **Current behavior before PR:** Both `xmlrpc_1` and `xmlrpc_2` each contain an identical try/except around the call to `_xmlrpc`, leading to code duplication. **Desired behavior after PR is merged:** Introduce a private helper `_xmlrpc_common` that handles request checking and exception mapping for both routes, keeping the public methods minimal. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Archiving or moving folders with many large documents now avoids loading full file contents when they are not needed. This significantly reduces memory use and helps prevent failures for users managing heavy document collections.
Original PR description
## Issue When there are heavy (or a lot of) documents in a folder, the user cannot archive this folder as it would trigger a `MemoryError`. ### Analysis The `write` override could unnecessarily fetch…
## Issue
When there are heavy (or a lot of) documents in a folder, the user cannot archive this folder as it would trigger a `MemoryError`.
### Analysis
The `write` override could unnecessarily fetch the `datas` field (binary file content).
This happened because a condition checking `record.datas` was evaluated before checking if `datas` or `url` was actually present in the values being written. This could lead to slowness when e.g. archiving/unarchiving documents, as the ORM would fetch the binary content even when it was not needed.
## Solution
We leverage Python's boolean short-circuiting to ensure that this behavior is avoided.
### Benchmarks
Profiling peak memory consumption when moving 8 documents (66 Mb each) to the trash:
| Before | After | % |
|------------|------------| --- |
| 1.3 GiB | 96 Mb | - ~93% |
Query count when unlinking account.move (using Runbot data):
| Before | After |
|------------|------------|
| 66 | 72 |
(we may avoid these additional queries by prefetching the fields beforehand, let me know your thoughts)
```
[0.564 ms] query: SELECT "ir_attachment"."id", "ir_attachment"."name", "ir_attachment"."description", "ir_attachment"."res_model", "ir_attachment"."res_field", "ir_attachment"."res_id", "ir_attachment"."company_id", "ir_attachment"."type", "ir_attachment"."url", "ir_attachment"."public", "ir_attachment"."access_token", "ir_attachment"."store_fname", "ir_attachment"."file_size", "ir_attachment"."checksum", "ir_attachment"."mimetype", "ir_attachment"."create_uid", "ir_attachment"."create_date", "ir_attachment"."write_uid", "ir_attachment"."write_date", "ir_attachment"."original_id", "ir_attachment"."key", "ir_attachment"."website_id", "ir_attachment"."theme_template_id" FROM "ir_attachment" WHERE "ir_attachment"."id" IN (3398)
[0.713 ms] query: UPDATE "ir_attachment"
SET "res_id" = "__tmp"."res_id"::int4, "res_model" = "__tmp"."res_model"::VARCHAR, "write_date" = "__tmp"."write_date"::timestamp, "write_uid" = "__tmp"."write_uid"::int4
FROM (VALUES (3398, 117, 'documents.document', '2025-06-17T15:24:12.867699'::timestamp, 22)) AS "__tmp"("id", "res_id", "res_model", "write_date", "write_uid")
WHERE "ir_attachment"."id" = "__tmp"."id"
[0.305 ms] query: SELECT "ir_attachment"."id", "ir_attachment"."res_model", "ir_attachment"."res_id", "ir_attachment"."res_field", "ir_attachment"."public", "ir_attachment"."create_uid" FROM "ir_attachment" WHERE ("ir_attachment"."id" IN (3397))
[0.666 ms] query: SELECT "account_move"."id" FROM "account_move" WHERE ("account_move"."id" IN (255)) AND ("account_move"."company_id" IN (10)) ORDER BY "account_move"."date" DESC , "account_move"."name" DESC , "account_move"."invoice_date" DESC , "account_move"."id" DESC
[0.436 ms] query: SELECT "ir_attachment"."id", "ir_attachment"."name", "ir_attachment"."description", "ir_attachment"."res_model", "ir_attachment"."res_field", "ir_attachment"."res_id", "ir_attachment"."company_id", "ir_attachment"."type", "ir_attachment"."url", "ir_attachment"."public", "ir_attachment"."access_token", "ir_attachment"."store_fname", "ir_attachment"."file_size", "ir_attachment"."checksum", "ir_attachment"."mimetype", "ir_attachment"."create_uid", "ir_attachment"."create_date", "ir_attachment"."write_uid", "ir_attachment"."write_date", "ir_attachment"."original_id", "ir_attachment"."key", "ir_attachment"."website_id", "ir_attachment"."theme_template_id" FROM "ir_attachment" WHERE "ir_attachment"."id" IN (3397)
[0.436 ms] query: SELECT "documents_document"."id", "documents_document"."attachment_id", "documents_document"."active" FROM "documents_document" WHERE ("documents_document"."attachment_id" IN (3397)) ORDER BY "documents_document"."id" DESC
```
### References
opw-4552436
Memory flamegraphs available on the ticketThe Italian Libro Giornale PDF report has been made easier to read with clearer grouping, alternating background colors, and less repeated information. Journal entry numbers and dates now take up less space, making the report cleaner for review and record keeping.
Original PR description
Changes include: - Better background color alternation for each journal entry. - Journal Entry number is now shown only once, and in bold. - Moved the date into the same column as the Journal Entry number to save space. task-4844519